<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pt-br"><title>diofeher</title><link href="http://diofeher.net/blog/" rel="alternate"></link><link href="http://diofeher.net/feeds/atom/" rel="self"></link><id>http://diofeher.net/blog/</id><updated>2012-02-22T18:10:30Z</updated><subtitle>rss of diofeher's weblog</subtitle><icon>http://diofeher.net/media/images/favicon.png</icon><logo>http://diofeher.net/media/images/favicon.png</logo><entry><title>Vim - Tips and Tricks</title><link href="http://diofeher.net/blog/2012/02/04/vim-tips-and-tricks/" rel="alternate"></link><id>http://diofeher.net/blog/2012/02/04/vim-tips-and-tricks/</id><summary type="html">
&lt;p&gt;I'm gonna use this post to put all tips and tricks that I found.&lt;/p&gt;
&lt;h2&gt;configuration&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;set invlist  # see invisible characters

set tabstop  #specifies the width of tab character
set softtabstop  #when enabled, fine tunes the amount of whitespace to be inserted 
set shiftwidth  #determines the amount of whitespace to insert or remove using identation
set expandtab  #when enabled, cause spaces to be used instead of tabs
&lt;/code&gt;&lt;/pre&gt;</summary></entry><entry><title>Scrubs Quote</title><link href="http://diofeher.net/blog/2012/01/06/scrubs-quote/" rel="alternate"></link><id>http://diofeher.net/blog/2012/01/06/scrubs-quote/</id><summary type="html">
&lt;p&gt;&lt;em&gt;Miss Goldman&lt;/em&gt;: What now, Grampa?! &lt;/p&gt;
&lt;p&gt;&lt;em&gt;Dr. Kelso&lt;/em&gt;: You are going to shut your damn yapper and listen for a change, because I got you pegged, sweetheart. You want to take the easy way out with the surgery because you're scared. You're scared because if you try and fail, there's only you to blame. Well, Missy, let me break this down for you, Bobbo-style. Life is scary. Get used to it. &lt;/p&gt;
&lt;p&gt;&lt;em&gt;J.D.'s Narration: And then it seemed like Dr. Kelso wasn't only talking to her.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Dr. Kelso&lt;/em&gt;: There are no magical fixes. It's all up to you. So get up off your keister, get out of here, and go start doin' the work. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;[Howie Day's "Collide" beings]&lt;/strong&gt; &lt;/p&gt;
&lt;p&gt;&lt;em&gt;Miss Goldman&lt;/em&gt;: What if it's too hard? &lt;/p&gt;
&lt;p&gt;&lt;em&gt;Turk&lt;/em&gt;: [leaning down to face Dr. Kelso next to Miss Goldman] Yeah, what if it's too hard? &lt;/p&gt;
&lt;p&gt;&lt;em&gt;Dr. Kelso&lt;/em&gt;: Turkleton, I have no idea why you're chiming in, but I'll say this to both of you. Nothing in this world that's worth having comes easy.&lt;/p&gt;</summary></entry><entry><title>Applications Links in Web Pages</title><link href="http://diofeher.net/blog/2012/01/05/applications-links-win-web-pages/" rel="alternate"></link><id>http://diofeher.net/blog/2012/01/05/applications-links-win-web-pages/</id><summary type="html">
&lt;p&gt;This is how you link web pages to instant message applications in your pages. &lt;/p&gt;
&lt;p&gt;AOL Instant Messenger: aim:goaim?screenname=#screenname#&lt;/p&gt;
&lt;p&gt;Google Talk: gtalk:chat?jid=#google email# or gtalk:call?jid=#google email#&lt;/p&gt;
&lt;p&gt;MSN/Windows Live IM: msnim:chat?contact=#screenname#&lt;/p&gt;
&lt;p&gt;Skype: skype:#screenname#?call or skype:#screenname#?chat&lt;/p&gt;
&lt;p&gt;Yahoo! Instant Messanger: ymsgr:sendim?#screenname#&lt;/p&gt;
&lt;p&gt;An example can be seen at the header of my website.&lt;/p&gt;</summary></entry><entry><title>Tips from journeyman to master</title><link href="http://diofeher.net/blog/2012/01/05/tips-from-journeyman-to-master/" rel="alternate"></link><id>http://diofeher.net/blog/2012/01/05/tips-from-journeyman-to-master/</id><summary type="html">
&lt;p&gt;These tips come from a book that I finished reading yesterday. Its name is The Pragmatic Programmers: From Journeyman to master. It's very good for actually is a developer.&lt;/p&gt;
&lt;p&gt;Tip 1: Care about your career&lt;/p&gt;
&lt;p&gt;Tip 2: Think about your work&lt;/p&gt;
&lt;p&gt;Tip 3: Provide options, don't make lame excuses&lt;/p&gt;
&lt;p&gt;Tip 4: Don't live with broken windows&lt;/p&gt;
&lt;p&gt;Tip 5: Be a catalyst for change&lt;/p&gt;
&lt;p&gt;Tip 6: Remember the big picture&lt;/p&gt;
&lt;p&gt;Tip 7: Make quality a requirements issue&lt;/p&gt;
&lt;p&gt;Tip 8: Invest regularly in your knowledge portfolio&lt;/p&gt;
&lt;p&gt;Tip 9: Critically analyze what you read and heard&lt;/p&gt;
&lt;p&gt;Tip 10: It's both what you say and the way you say it&lt;/p&gt;
&lt;p&gt;Tip 11: DRY - Don't Repeat Yourself&lt;/p&gt;
&lt;p&gt;Tip 12: Make it easy to reuse&lt;/p&gt;
&lt;p&gt;Tip 13: Eliminate effects between unrelated things&lt;/p&gt;
&lt;p&gt;Tip 14: There are no final decisions&lt;/p&gt;
&lt;p&gt;Tip 15: Use Tracer Bullets to find the target&lt;/p&gt;
&lt;p&gt;Tip 16: Prototype to learn&lt;/p&gt;
&lt;p&gt;Tip 17: Program close to domain&lt;/p&gt;
&lt;p&gt;Tip 18: Estimate to avoid surprises&lt;/p&gt;
&lt;p&gt;Tip 19: Iterate the schedule with the code&lt;/p&gt;
&lt;p&gt;Tip 20: Keep knowledge in plain text&lt;/p&gt;
&lt;p&gt;Tip 21: Use the power of command shells&lt;/p&gt;
&lt;p&gt;Tip 22: Use a single editor well&lt;/p&gt;
&lt;p&gt;Tip 23: Always use Source Code Control&lt;/p&gt;
&lt;p&gt;Tip 24: Fix the problem, not the blame&lt;/p&gt;
&lt;p&gt;Tip 25: Don't panic&lt;/p&gt;
&lt;p&gt;Tip 26: Select isn't broken&lt;/p&gt;
&lt;p&gt;Tip 27: Don't assume it, prove it&lt;/p&gt;
&lt;p&gt;Tip 28: Learn a text manipulation language&lt;/p&gt;
&lt;p&gt;Tip 29: Write code that writes code&lt;/p&gt;
&lt;p&gt;Tip 30: You can't write perfect software&lt;/p&gt;
&lt;p&gt;Tip 31: Design with contracts&lt;/p&gt;
&lt;p&gt;Tip 32: Crash early&lt;/p&gt;
&lt;p&gt;Tip 33: If it can't happen, use assertions to ensure that it won't&lt;/p&gt;
&lt;p&gt;Tip 34: Use exceptions for exceptional problems&lt;/p&gt;
&lt;p&gt;Tip 35: Finish what you started&lt;/p&gt;
&lt;p&gt;Tip 36: Minimizing coupling between modules&lt;/p&gt;
&lt;p&gt;Tip 37: Configure, don't integrate&lt;/p&gt;
&lt;p&gt;Tip 38: Put abstractions in code details in metadata&lt;/p&gt;
&lt;p&gt;Tip 39: Analyze workflow to improve concurrency&lt;/p&gt;
&lt;p&gt;Tip 40: Design using services&lt;/p&gt;
&lt;p&gt;Tip 41: Always design for concurrency&lt;/p&gt;
&lt;p&gt;Tip 42: Separate views from models&lt;/p&gt;
&lt;p&gt;Tip 43: Use blackboards to coordinate workflow&lt;/p&gt;
&lt;p&gt;Tip 44: Don't program by coincidence&lt;/p&gt;
&lt;p&gt;Tip 45: Estimate the order of your algorithms&lt;/p&gt;
&lt;p&gt;Tip 46: Test your estimates&lt;/p&gt;
&lt;p&gt;Tip 47: Refactor early, refactor often&lt;/p&gt;
&lt;p&gt;Tip 48: Design to test&lt;/p&gt;
&lt;p&gt;Tip 49: Test your software, or your users will&lt;/p&gt;
&lt;p&gt;Tip 50: Don't use wizard code you don't understand&lt;/p&gt;
&lt;p&gt;Tip 51: Don't gather requirements - dig for them&lt;/p&gt;
&lt;p&gt;Tip 52: Work with a user to think like a user&lt;/p&gt;
&lt;p&gt;Tip 53: Abstractions live longer than details&lt;/p&gt;
&lt;p&gt;Tip 54: Use a project glossary&lt;/p&gt;
&lt;p&gt;Tip 55: Don't think outside the box - find the box&lt;/p&gt;
&lt;p&gt;Tip 56: Listen to nagging doubts - start when you are ready&lt;/p&gt;
&lt;p&gt;Tip 57: Some things are better done than described&lt;/p&gt;
&lt;p&gt;Tip 58: Don't be a slave to formal methods&lt;/p&gt;
&lt;p&gt;Tip 59: Expensive too do not produce best designs&lt;/p&gt;
&lt;p&gt;Tip 60: Organize around functionality, not job functions&lt;/p&gt;
&lt;p&gt;Tip 61: Don't use manual procedures&lt;/p&gt;
&lt;p&gt;Tip 62: Test early. Test often. Test automatically&lt;/p&gt;
&lt;p&gt;Tip 63: Coding ain't done 'til all the tests run&lt;/p&gt;
&lt;p&gt;Tip 64: Use saboteurs to test your testing&lt;/p&gt;
&lt;p&gt;Tip 65: Test state coverage, not code coverage&lt;/p&gt;
&lt;p&gt;Tip 66: Find bugs once&lt;/p&gt;
&lt;p&gt;Tip 67: Treat english as just another programming language&lt;/p&gt;
&lt;p&gt;Tip 68: Build documentation in, don't bolt it on&lt;/p&gt;
&lt;p&gt;Tip 69: Gently exceed your users expectations&lt;/p&gt;
&lt;p&gt;Tip 70: Sign your work&lt;/p&gt;
&lt;p&gt;Later I will talk about these topics detailedly.&lt;/p&gt;
&lt;p&gt;[]'s&lt;/p&gt;</summary></entry><entry><title>Dicas para deixar os sites mais rápidos</title><link href="http://diofeher.net/blog/2012/01/05/dicas-para-deixar-os-sites-mais-rapidos/" rel="alternate"></link><id>http://diofeher.net/blog/2012/01/05/dicas-para-deixar-os-sites-mais-rapidos/</id><summary type="html">
&lt;p&gt;Esse post foi inspirado por um livro que li sobre performance em websites. Seu nome é "High Performance Websites" e ele foi escrito por um desenvolvedor do Yahoo. Para quem é desenvolvedor de front-end sua leitura é indispensável. Resolvi publicar aqui no blog algumas dessas formas de otimização e explicar o porquê de cada.&lt;/p&gt;
&lt;h3&gt;1 - Fazer poucas requisições HTTP&lt;/h3&gt;
&lt;p&gt;Pesquisas mostram que mais de 80% do carregamento de uma página é gasto no front-end. Então diminuir o número de componentes para consequentemente ter menos requisições é uma boa. Para fazer isso, utilizam-se praticamente duas técnicas, chamadas de Image Maps e CSS Sprites.
Nos Image Maps utilizamos uma imagem e mapeamos seus pontos. A imagem precisa ser contínua, como uma barra de navegação. Essa tarefa de marcar os pontos é muito suscetível a erros e é cansativa, por isso recomenda-se o uso de CSS Sprites. Com ele, juntam-se todas as imagens estáticas que compõem a estrutura do site e cada pedaço da imagem é colocado como fundo de um bloco e reposicionado usando background-position. Não se preocupe, algumas ferramentas online fazem isso para você, como o http://csssprites.com/&lt;/p&gt;
&lt;h3&gt;2 - Comprimir usando GZIP&lt;/h3&gt;
&lt;p&gt;A partir do HTTP 1.1 os browser implementaram um cabeçalho chamado Accept-Encoding. Isso significa que o servidor pode mandar um arquivo comprimido com deflate ou gzip (mais popular) que o browser conseguirá descomprimir. Essa compressão geralmente diminui o tamanho do arquivo em 70%. O único contra do Gzip é usá-lo em arquivos já comprimidos, tais como mp3, jpg, pdf entre outros, pois como esses arquivos tem sua compressão própria a compressão com gzip pode até aumentar o tamanho do arquivo. Ele é recomendando principalmente em arquivos de texto plano, tais como HTML, CSS e Javascript.&lt;/p&gt;
&lt;h3&gt;3 - Tornar o CSS e o JS externos&lt;/h3&gt;
&lt;p&gt;Com o CSS e o JS externos você diminui o tamanho do seu documento HTML e aumenta em duas requisições HTTP (considerando um arquivo para cada). Como isso pode ser bom, de acordo com 1 (Diminuir requisições HTTP)? Com os arquivos externos, você pode cachear-los, diminuindo consideravelmente o tempo de carregamento. Geralmente fazendo isso se tem um desempenho melhor nos sites. A única exceção para esse ponto são em páginas que geralmente são acessadas apenas uma vez (tais como páginas de home), tornando o cache inútil.&lt;/p&gt;
&lt;h3&gt;4 - Colocar o CSS no topo&lt;/h3&gt;
&lt;p&gt;Quando o browser está renderizando a página, ele renderiza na ordem que vai encontrando os elementos no seu html. O maior problema de colocar o CSS no final da página é que os browsers evitam de renderizar para não ter que renderizar novamente depois que acharem o CSS. Isso vai deixar uma página branca para o usuário, até que o CSS seja renderizado. 
Uma coisa que muita gente acha é que fazendo isso a página terá um tempo de carregamento mais rápido. Mas NÃO, o tempo de carregamento não é diferente. A única coisa que muda é a visualização por parte do usuário pois com o CSS no topo, ele pode navegar na página já com um feedback visual. Simples, né?&lt;/p&gt;
&lt;h3&gt;5 - Colocar o JS no rodapé&lt;/h3&gt;
&lt;p&gt;A regra geral é que são feitos dois downloads paralelos por domínio quando uma página é acessada. Colocar o script no head ou no meio da página HTML vai paralisar os downloads paralelos enquanto somente o script é carregado. Somente evite colocá-los no rodapé se eles contiverem alguma função como document.write, por exemplo. &lt;/p&gt;
&lt;h3&gt;6 - Colocar um cabeçalho Expires nos arquivos&lt;/h3&gt;
&lt;p&gt;Ao acessar um site pela primeira vez, seu browser faz um requisição de uma página para o servidor. O servidor processa e retorna uma página para você. O browser começa a fazer requisições dos outros arquivos que estão lá (imagens, CSS, scripts) até carregar tudo. 
Na segunda vez que você acessa o site, o carregamento é bem mais rápido, certo? Isso acontece porque o browser mantêm em cache os arquivos do site e logicamente o carregamento é bem mais rápido. Mas isso ainda pode ser melhorado.
Desse modelo que citei anteriormente, o browser ainda precisa fazer um GET condicional, para saber se o arquivo mudou (geralmente essa comparação é feita com a data de última modificação, mas também pode ser feita de outros jeitos, como com E-tags) e então o servidor retorna uma requisição 304 (arquivo não modificado). Se colocar um cabeçalho Expires nos seus arquivos, o browser não precisa fazer esse GET condicional no servidor, deixando o carregamento ainda mais rápido. &lt;/p&gt;
&lt;h3&gt;7 - Minificar arquivos JS e CSS&lt;/h3&gt;
&lt;p&gt;A técnica de minificar se constitui em tirar espaços desnecessários (espaços, tabulações, linhas em branco) e comentários dos arquivos, diminuindo consideravelmente seu tamanho.
Um dos que eu gosto de usar é o YUI Compressor.&lt;/p&gt;
&lt;p&gt;Essas são somente algumas formas. Existem várias outras, e muitas estão nesse livro que citei no começo do post. Eu repito, se você é desenvolvedor web, não deixe de ler o livro. E aproveite também seu amigo Google para se aprofundar no assunto. :)&lt;/p&gt;</summary></entry><entry><title>Brainfuck – When you see it, you will shit bricks</title><link href="http://diofeher.net/blog/2011/12/28/brainfuck-when-you-see-it-you-will-shit-bricks/" rel="alternate"></link><id>http://diofeher.net/blog/2011/12/28/brainfuck-when-you-see-it-you-will-shit-bricks/</id><summary type="html">
&lt;h2&gt;o que é&lt;/h2&gt;
&lt;p&gt;Ontem tava sem nada para fazer e resolvi brincar um pouco com os problemas dos Google Code Jam anteriores. Vendo as soluções feitas por outras pessoas, acabei vendo a de um cara que fez em Brainfuck. Brainfuck, WTF???&lt;/p&gt;
&lt;p&gt;Brainfuck é uma linguagem que foi criada em 1992 por Urban Müller, com o objetivo de ter o menor compilador existente. Ela implementa seus comandos de outra linguagem esotérica, chamada ``P. Essa linguagem é &lt;a href="http://en.wikipedia.org/wiki/Turing_tarpit"&gt;Turing completa&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Seu funcionamento é o seguinte: O compilador separa cerca de 30000 células de memória para o programa acessar (versões mais atuais de compiladores chegam a ter apenas 5000). Todas as células estão com o valor zero, e você tem um ponteiro que começa na posição inicial. Você pode usar esse ponteiro para movimentá-lo pelas células e então ter o funcionamento do seu programa.&lt;/p&gt;
&lt;p&gt;A linguagem possui oito &lt;em&gt;comandos&lt;/em&gt;, são eles:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&amp;gt;&lt;/strong&gt; - acrescenta uma posição de célula de memória ao ponteiro.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt; - diminui uma posição célula de memória ao ponteiro.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;+&lt;/strong&gt; - aumenta o valor da posição que o ponteiro está.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;-&lt;/strong&gt; - diminui o valor da posição em que o ponteiro está.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;[&lt;/strong&gt;- itera por uma posição até a mesma chegar a 0.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;]&lt;/strong&gt;- indica o final da iteração&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;,&lt;/strong&gt; - permite a entrada de um caractere. (getchar em C).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;.&lt;/strong&gt; - imprime na tela o valor atual do ponteiro.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;escrevendo um programa&lt;/h2&gt;
&lt;p&gt;Resolvi escrever um I love you em brainfuck, então vou mostrar como fiz esse programa:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;++++++++++[&amp;gt;+++++++&amp;gt;++++++++++&amp;gt;+++++++++++&amp;gt;++++++++++++&amp;gt;+++
&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;-]&amp;gt;+++.&amp;gt;&amp;gt;&amp;gt;&amp;gt;++.&amp;lt;&amp;lt;&amp;lt;++++++++.&amp;gt;+.+++++++.&amp;lt;-------.&amp;gt;&amp;gt;&amp;gt;.&amp;lt;+.&amp;lt;-------.++++++.&amp;gt;&amp;gt;+.
&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;+++++++++++.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Agora identado para melhor compreensão:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;+++++ +++++
[
&amp;gt; +++++ ++ add 7 to cell 1
&amp;gt; +++++ +++++ add 10 to cell 2
&amp;gt; +++++ +++++ + add 11 to cell 3
&amp;gt; +++++ +++++ ++ add 12 to cell 4
&amp;gt; +++ add 3 to cell 5
&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt; -
]

&amp;gt; +++ .          print 'I'
&amp;gt;&amp;gt;&amp;gt;&amp;gt; ++ .        print ' '
&amp;lt;&amp;lt;&amp;lt; ++++++++ .   print 'l'
&amp;gt; + .            print 'o'
+++++++ .        print 'v'
&amp;lt; ------- .      print 'e'
&amp;gt;&amp;gt;&amp;gt; .            print ' '
&amp;lt; + .            print 'y'
&amp;lt; ------- .      print 'o'
++++++ .         print 'u'
&amp;gt;&amp;gt; + .           print '!'
&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt; +++++++++++  .
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Na primeira linha, aumentei o contador da célula 0 para 10, que vai ser o número de iterações pelo loop. Usando a tabela ASCII, juntei os caracteres que tem a representação decimal próximos (exemplo: o é 111 e u é 117). No final da iteração, diminuimos o contador, até chegar a zero, o que determina o final da iteração. Então, a célula 1 ficou com valor de 70, a célula 2 de 100, a célula 3 de 110, a célula 4 de 120 e a célula 5 de 30.&lt;/p&gt;
&lt;p&gt;Depois da iteração, é só ir mudando de uma célula para a outra, e adicionando os valores que forem necessários (na célula 3 temos 110, então adicionamos 1 para poder imprimir um caractere ASCII 'o'). Se algum valor tiver maior, é só dimunuir com - e quando chegar no código do caractere, é só imprimir!&lt;/p&gt;
&lt;p&gt;Espero que isso deixe a cabeça de muita gente louca &lt;strong&gt;;)&lt;/strong&gt;&lt;/p&gt;</summary></entry></feed>
