tag:blogger.com,1999:blog-67108245994143343712024-03-13T15:59:06.006-03:00Carlos ManieroAnonymoushttp://www.blogger.com/profile/12043670572664765654noreply@blogger.comBlogger19125tag:blogger.com,1999:blog-6710824599414334371.post-15698437554109942272015-10-20T14:35:00.001-02:002015-10-20T14:35:16.366-02:00VirtualEnvWrapper no LinuxO virtualenvwrapper é a maneira mais simples de criar ambientes python isolados (virtualenv). Sua instalação é bem simples.<br />
<br />
<span style="font-family: "Courier New",Courier,monospace;">$ sudo pip install virtualenvwrapper</span><br />
<span style="font-family: "Courier New",Courier,monospace;">$ mkdir ~/.envs </span><br />
<span style="font-family: "Courier New",Courier,monospace;">$ export WORKON_HOME=~/.envs</span><br />
<span style="font-family: "Courier New",Courier,monospace;">$ source /usr/local/bin/virtualenvwrapper.sh </span><br />
<br />
<br />
Após a instalação e ter executado o comando source, você manipulará seus ambientes virtuais com os seguintes comandos.<br />
<br />
<b>mkvirtualenv nome_do_ambiente</b>: Cria um ambiente virtual.<br />
<b>workon nome_do_ambiente</b>: Utiliza o ambiente virtual.<br />
<b>deactivate nome_do_ambiente</b>: Sai do ambiente virtual.<br />
<b>rmvirtualenv nome_do_ambiente:</b> Delete o ambiente virtual.<br />
<br />
É necessário executar os comandos export e source listados acima, toda vez que abrir o terminal. Para automatizar essa tarefa, você pode abrir o arquivo ~/.bashrc (ou ~/.bash_profile para usuários Mac)e adicionar as duas linhas no final do arquivo.<br />
<br />
<span style="font-family: "Courier New",Courier,monospace;">export WORKON_HOME=~/.envs</span><br />
<span style="font-family: "Courier New",Courier,monospace;">source /usr/local/bin/virtualenvwrapper.sh </span>Anonymoushttp://www.blogger.com/profile/12043670572664765654noreply@blogger.com0tag:blogger.com,1999:blog-6710824599414334371.post-55409170585595947942015-09-21T10:44:00.001-03:002015-09-21T10:46:36.478-03:00Python Iterators e Generators #dicaDeSextaVou fazer uma breve abordagem sobre o uso de Iteratos e Generators<br />
<br />
Para iniciar, vamos fazer uma implementação simples do que seria o range do python.<br />
<br />
<br />
<pre id="vimCodeElement"><span style="font-family: courier new,courier;"><span class="LineNr" id="L1"> 1 </span><span class="Statement">def</span> <span class="Function">my_range</span>(start, stop=<span class="Structure">None</span>, step=<span class="Constant">1</span>):
<span class="LineNr" id="L2"> 2 </span> <span class="Statement">if</span> stop <span class="Operator">is</span> <span class="Structure">None</span>:
<span class="LineNr" id="L3"> 3 </span> stop = start
<span class="LineNr" id="L4"> 4 </span> start = <span class="Constant">0</span>
<span class="LineNr" id="L5"> 5 </span>
<span class="LineNr" id="L6"> 6 </span> ret = []
<span class="LineNr" id="L7"> 7 </span>
<span class="LineNr" id="L8"> 8 </span> <span class="Statement">while</span> start < stop:
<span class="LineNr" id="L9"> 9 </span> ret<span class="Normal">.</span>append(start)
<span class="LineNr" id="L10">10 </span> start += step
<span class="LineNr" id="L11">11 </span>
<span class="LineNr" id="L12">12 </span> <span class="Statement">return</span> ret
<span class="LineNr" id="L13">13 </span>
<span class="LineNr" id="L14">14 </span>
<span class="LineNr" id="L15">15 </span><span class="Statement">for</span> i <span class="Operator">in</span> my_range(<span class="Constant">100</span>):
<span class="LineNr" id="L16">16 </span> <span class="Function">print</span>(i)
</span></pre>
<br />
O problema dessa implementação é que ele gera um list desnecessário, vamos supor que queremos gerar um my_range(10000000), ele irá retornar um list com 10000000 de células. É um desperdício de memória.<br />
<br />
<h2>
Iterator</h2>
Um iterator, segundo a documentação do Python é <i>"um objeto que representa um fluxo de dados. Repetidas chamadas ao método next do objeto iterator retorna o item seguinte. Quando não há mais dados é lançado a exception StopIteration."</i>. Para um objeto ser iterator é necessário que ele contenha o método __iter__, grande parte das implementações desse método retorna self. Vejamos a implementação do my_range com iterator.<br />
<br />
<pre id="vimCodeElement"><span style="font-family: courier new,courier;"><span class="LineNr" id="L1"> 1 </span><span class="Statement">class</span> <span class="Function">my_xrange</span>(<span class="Function">object</span>):
<span class="LineNr" id="L2"> 2 </span> <span class="Statement">def</span> <span class="Function">__init__</span>(self, start, stop=<span class="Structure">None</span>, step=<span class="Constant">1</span>):
<span class="LineNr" id="L3"> 3 </span> <span class="Statement">if</span> stop <span class="Operator">is</span> <span class="Structure">None</span>:
<span class="LineNr" id="L4"> 4 </span> stop = start
<span class="LineNr" id="L5"> 5 </span> start = <span class="Constant">0</span>
<span class="LineNr" id="L6"> 6 </span>
<span class="LineNr" id="L7"> 7 </span> self<span class="Normal">.</span>start = start
<span class="LineNr" id="L8"> 8 </span> self<span class="Normal">.</span>stop = stop
<span class="LineNr" id="L9"> 9 </span> self<span class="Normal">.</span>step = step
<span class="LineNr" id="L10">10 </span> self<span class="Normal">.</span>current = start
<span class="LineNr" id="L11">11 </span>
<span class="LineNr" id="L12">12 </span> <span class="Statement">def</span> <span class="Function">__iter__</span>(self):
<span class="LineNr" id="L13">13 </span> <span class="Statement">return</span> self
<span class="LineNr" id="L14">14 </span>
<span class="LineNr" id="L15">15 </span> <span class="Comment"># Python 3</span>
<span class="LineNr" id="L16">16 </span> <span class="Statement">def</span> <span class="Function">__next__</span>(self):
<span class="LineNr" id="L17">17 </span> <span class="Statement">if</span> self<span class="Normal">.</span>current < self<span class="Normal">.</span>stop:
<span class="LineNr" id="L18">18 </span> ret = self<span class="Normal">.</span>current
<span class="LineNr" id="L19">19 </span> self<span class="Normal">.</span>current += <span class="Constant">1</span>
<span class="LineNr" id="L20">20 </span> <span class="Statement">return</span> ret
<span class="LineNr" id="L21">21 </span> <span class="Statement">raise</span> <span class="Structure">StopIteration</span>()
<span class="LineNr" id="L22">22 </span>
<span class="LineNr" id="L23">23 </span> <span class="Comment"># Python 2 / Compatibilizando</span>
<span class="LineNr" id="L24">24 </span> <span class="Statement">def</span> <span class="Function">next</span>(self):
<span class="LineNr" id="L25">25 </span> <span class="Statement">return</span> self<span class="Normal">.</span>__next__()
<span class="LineNr" id="L26">26 </span>
<span class="LineNr" id="L27">27 </span>
<span class="LineNr" id="L28">28 </span><span class="Statement">for</span> i <span class="Operator">in</span> my_xrange(<span class="Constant">100</span>):
<span class="LineNr" id="L29">29 </span> <span class="Function">print</span>(i)
</span></pre>
<br />
Beleza! Resolvemos o problema de memória, mas...
É muito código pra pouca coisa! A solução está nos generators!<br />
<br />
<h2>
Generators </h2>
Segundo a documentação do Python generators "permitem que você declare uma função que se comporta como um iterador, ou seja, ele pode ser usado em um loop". No lugar de return, usamos yield. <br />
<br />
<br />
<pre id="vimCodeElement"><span style="font-family: courier new,courier;"><span class="LineNr" id="L1"> 1 </span><span class="Statement">def</span> <span class="Function">my_xrange</span>(start, stop=<span class="Structure">None</span>, step=<span class="Constant">1</span>):
<span class="LineNr" id="L2"> 2 </span> <span class="Statement">if</span> stop <span class="Operator">is</span> <span class="Structure">None</span>:
<span class="LineNr" id="L3"> 3 </span> stop = start
<span class="LineNr" id="L4"> 4 </span> start = <span class="Constant">0</span>
<span class="LineNr" id="L5"> 5 </span>
<span class="LineNr" id="L6"> 6 </span> <span class="Statement">while</span> start < stop:
<span class="LineNr" id="L7"> 7 </span> <span class="Statement">yield</span> start
<span class="LineNr" id="L8"> 8 </span> start += step
<span class="LineNr" id="L9"> 9 </span>
<span class="LineNr" id="L10">10 </span>
<span class="LineNr" id="L11">11 </span><span class="Statement">for</span> i <span class="Operator">in</span> my_xrange(<span class="Constant">100</span>):
<span class="LineNr" id="L12">12 </span> <span class="Function">print</span>(i)
</span></pre>
<br />
O código ficou muito mais limpo. Quando a palavra chave yield está dentro de uma função, esta função se torna um iterator. Para demonstrar o funcionamento do iterator coloquei uns prints no código acima, para entendermos o seu funcionamento.<br />
<br />
<pre id="vimCodeElement"><span style="font-family: courier new,courier;"><span class="LineNr" id="L1"> 1 </span><span class="Statement">def</span> <span class="Function">my_xrange</span>(start, stop=<span class="Structure">None</span>, step=<span class="Constant">1</span>):
<span class="LineNr" id="L2"> 2 </span> <span class="Statement">if</span> stop <span class="Operator">is</span> <span class="Structure">None</span>:
<span class="LineNr" id="L3"> 3 </span> stop = start
<span class="LineNr" id="L4"> 4 </span> start = <span class="Constant">0</span>
<span class="LineNr" id="L5"> 5 </span>
<span class="LineNr" id="L6"> 6 </span> <span class="Function">print</span>(<span class="String">'my_xrange iniciado.'</span>)
<span class="LineNr" id="L7"> 7 </span> <span class="Statement">while</span> start < stop:
<span class="LineNr" id="L8"> 8 </span> <span class="Function">print</span>(<span class="String">'código bloqueado no yield'</span>)
<span class="LineNr" id="L9"> 9 </span> <span class="Statement">yield</span> start
<span class="LineNr" id="L10">10 </span> <span class="Function">print</span>(<span class="String">'código liberado após iteração'</span>)
<span class="LineNr" id="L11">11 </span> start += step
<span class="LineNr" id="L12">12 </span> <span class="Function">print</span>(<span class="String">'acabei'</span>)
<span class="LineNr" id="L13">13 </span>
<span class="LineNr" id="L14">14 </span>
<span class="LineNr" id="L15">15 </span>the_range = my_xrange(<span class="Constant">2</span>)
<span class="LineNr" id="L16">16 </span><span class="Function">print</span>(<span class="String">'Vou mostrar o primeiro item do the_range'</span>)
<span class="LineNr" id="L17">17 </span><span class="Function">print</span>(the_range<span class="Normal">.</span>__next__())
<span class="LineNr" id="L18">18 </span><span class="Function">print</span>(<span class="String">'----------------------------------------'</span>)
<span class="LineNr" id="L19">19 </span>
<span class="LineNr" id="L20">20 </span><span class="Comment"># para o python2 use</span>
<span class="LineNr" id="L21">21 </span><span class="Comment"># print(the_range.next())</span>
<span class="LineNr" id="L22">22 </span>
<span class="LineNr" id="L23">23 </span><span class="Function">print</span>(<span class="String">'Vou iterar o the_range'</span>)
<span class="LineNr" id="L24">24 </span><span class="Function">print</span>(<span class="String">'----------------------------------------'</span>)
<span class="LineNr" id="L25">25 </span><span class="Function">print</span>(the_range<span class="Normal">.</span>__next__())
<span class="LineNr" id="L26">26 </span><span class="Function">print</span>(<span class="String">'----------------------------------------'</span>)
<span class="LineNr" id="L27">27 </span><span class="Function">print</span>(the_range<span class="Normal">.</span>__next__())</span>
</pre>
<br />
O output será o seguinte:<br />
<br />
<pre>Vou mostrar o primeiro item do the_range
my_xrange iniciado.
código bloqueado no yield
0
----------------------------------------
Vou iterar o the_range
----------------------------------------
código liberado após iteração
código bloqueado no yield
1
----------------------------------------
código liberado após iteração
acabei
Traceback (most recent call last):
File "my_xrange_stoped.py", line 27, in <module>
print(the_range.__next__())
StopIteration
</module></pre>
<br />
Repare que quando chamamos o método <i>my_xrange(2)</i>, o <i>print</i> que é exibido no começo do corpo da função '<span style="font-family: courier new,courier;"><span class="String">my_xrange iniciado.</span></span>' (linha 6) não foi exibido no <i>output</i>.<br />
Isso porque quando chamamos o método, o Python não chama a função, ele gera um iterator. A função só é executada quando o método <i>__next__</i> (Python3) ou next (Python2) é chamado. Quando o <i>__next__</i> é chamado ele libera a execução da função, se a execução chegar a algum <i>yield</i> o valor do yield é retornado, senão, é lançado o StopIteration, como no nosso exemplo nosso loop ia até dois, na terceira chamada ao método <i>__next__</i> foi lançado o <i>exception StopIterator</i>.
Anonymoushttp://www.blogger.com/profile/12043670572664765654noreply@blogger.com0tag:blogger.com,1999:blog-6710824599414334371.post-58513439945205975292015-04-27T17:21:00.002-03:002015-04-27T17:21:37.253-03:00VirtualBox, Debian e Linux Kernel 4.0Quando atualizei o Kernel para a versão 4.0, o Virtualbox parou de funcionar, exibindo, inclusive mensagens de erro durante o boot.<br />
<br />
Segundo o ticket <span style="font-size: small;"><a href="https://www.virtualbox.org/ticket/13835">bug #13835</a>, o problema já foi corrigido na versão </span><span style="font-size: small;">4.3.24 cabendo apenas atualizá-lo.</span><br />
<br />
Até o momento dessa publicação o VirtualBox <span style="font-size: small;">4.3.24 ainda não estava nos repositórios padrão do Debian. Para verificar atualizar, basta seguir o passo a passo abaixo como root:</span><br />
<br />
<span style="font-size: small;"># echo "deb http://download.virtualbox.org/virtualbox/debian wheezy contrib non-free" >> /etc/apt/source.list</span><br />
<span style="font-size: small;"># wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | sudo apt-key add -<br /># apt-get update</span><br />
<span style="font-size: small;"># apt-get install virtualbox-4.3</span>Anonymoushttp://www.blogger.com/profile/12043670572664765654noreply@blogger.com0tag:blogger.com,1999:blog-6710824599414334371.post-82407309762699202622014-01-02T13:29:00.003-02:002014-01-02T13:34:41.276-02:00Mutucas, Pneu, Borboleta e Vitamina D<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjc8VJWoRODsK0gaYKiV4ubXADoMqoTeMV6fStJoRhzvMVdgTb0d1RnKiBiQ6Uo4uuCrcYX11G8vJ7kVi7D_LWqdJW_ddaAX3R2ASzn54EhyphenhyphenqXBDsu6CsinShPRwIt1ZHG4DiZsc9WwSfk/s1600/c76c595c72d711e3ac1e12ceb70df48c_8.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjc8VJWoRODsK0gaYKiV4ubXADoMqoTeMV6fStJoRhzvMVdgTb0d1RnKiBiQ6Uo4uuCrcYX11G8vJ7kVi7D_LWqdJW_ddaAX3R2ASzn54EhyphenhyphenqXBDsu6CsinShPRwIt1ZHG4DiZsc9WwSfk/s200/c76c595c72d711e3ac1e12ceb70df48c_8.jpg" width="200" /></a>Ontem sai para pedalar com meu pai. Achei bem estranho a gente ter conseguido sair da garagem. Sempre que tento fazer tal coisa chove, o PCC faz um toque de recolher e um grupo alienígena de dinossauros invadem a terra.<br />
<br />
Enfim, o plano era irmos até Paranapiacaba, estava indo tudo bem não fosse elas, da ordem dos <i>diptera</i>, as "Mutucas". Você pode dizer "O Carlos é fresco. Tem medo de tudo". Mas dessa vez foi demais, até meu pai estava reclamando, era possível as ver nos perseguindo na sombra. <br />
<br />
Teve uma que me atacou de tal forma, que quando estava indo embora, perguntei onde estava o meu suco e meu pão com mortadela. Depois de doar tanto sangue o mínimo era ter um lanche.<br />
<br />
Quando já tínhamos pedalado uns 6 km, o pneu da minha bicicleta furou. <br />
Sem problemas! Somos prevenidos. Temos, bomba de ar, remendo e ferramentas. Só não esperávamos que a bomba de ar quebraria na primeira bombeada. Bora voltar pedalando 6 km com o pneu furado. <br />
<br />
Enquanto quicava no banco da bicicleta, eis que surge uma borboleta. Voltemos a frase "Tem medo de tudo", só que dessa vez eu tive motivos para ter medo. A borboleta queria ter relações sexuais comigo. Ela entrou na minha bermuda e não queria sair. Sorte que eu não estava de samba canção.<br />
<br />
Eu achei estranho, a um nível ridículo, meu pai sair pra pedalar de calça jeans. Segundo ele, ele só se sente bem pedalando assim. Mas depois da aparição da borboleta, eu até o entendo.<br />
<br />
Pelo menos eu tenho Vitamina D acumulada para no mínimo uns 5 anos. O sinal dessa minha super-dosagem é a vermelidão que está presente em boa parte do meu corpo.<br />
<br />
<b>Moral a história:</b><br />
Gostava mais quando o grupo alienígena se juntava ao PCC e não deixava eu sair pra andar de bicicleta com meu pai.Anonymoushttp://www.blogger.com/profile/12043670572664765654noreply@blogger.com0tag:blogger.com,1999:blog-6710824599414334371.post-42824910939038942312013-08-02T00:00:00.000-03:002013-08-02T00:00:18.282-03:00Criando quadrados responsivosNo projeto que estou trabalhando atualmente, tive a necessidade de criar quadrados responsivos.<br />
Criar um quadrado é muito fácil, não? Basta setar a altura igual a largura e estamos felizes. Porém, por se tratar de um quadrados responsivo, estamos pensando em porcentagem.<br />
<br />
Se eu definir um quadrado com 10% de largura e 10% de altura. Adivinha o que vai acontecer? Você acertou! Não será um quadrado<br />
<br />
<h3>
Exemplo:</h3>
<div style="background: #333; color: white; font-size: 70%; height: 10%; width: 10%;">
10% x 10%</div>
<br />
Depois de muito tempo estudando uma maneira de fazer um quadrado responsivo, cheguei a seguinte solução:<br />
<br />
O padding é sempre relativo a largura, logo, se você definir a altura do elemento com 0 e o padding-bottom com a porcentagem da altura você terá o resultado esperado. Segue exemplo abaixo:<br />
<br />
<iframe allowfullscreen="allowfullscreen" frameborder="0" height="300" src="http://jsfiddle.net/carlosmaniero/pVLtR/embedded/result,html,css" width="100%"></iframe>Anonymoushttp://www.blogger.com/profile/12043670572664765654noreply@blogger.com2tag:blogger.com,1999:blog-6710824599414334371.post-28917839708379787682013-06-04T23:51:00.001-03:002013-06-05T10:19:54.510-03:00Guia para Designers: Website Responsivo<div class="separator" style="clear: both; text-align: center;">
<a href="http://twitter.github.io/bootstrap/assets/img/bs-docs-responsive-illustrations.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="167" src="http://twitter.github.io/bootstrap/assets/img/bs-docs-responsive-illustrations.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
Primeiramente gostaria de informar que eu não sou designer. Estou criando esse post para esclarecer as principais dúvidas que os designers costumam ter em relação à websites responsivos.<br />
<h2>
O que são Frameworks?</h2>
Sempre me perguntam o que é esse tal de Framework que eu sempre falo. Framework nada mais é do que um conjunto de elementos pré-definidos que ajudam a nós desenvolvedores não ficarmos reinventando a roda.<br />
<br />
Nesse post trabalharei com o Bootstrap do Twitter. Há vários outros, porém a ideia desse post não é ensinar a usar frameworks front-end e sim exemplificar os conceitos de um website responsivo.<br />
<h2>
Grids</h2>
<div>
Acredito que esse seja o ponto mais importante quando estamos falando de website responsivo. Os grids são o que mandam na forma que o seu conteúdo irá aparecer.<br />
<br /></div>
<div>
A primeira coisa a se considerar é qual vai ser a largura do site. Por padrão o Bootstrap trabalha com 1170px de largura no modo responsivo, caso a tela seja menor que 1170px ele passa a assumir 940px, depois 724px, após isso o site fica fluido, ou seja, todos os elementos assumem 100% da página.<br />
Temos 12 tamanhos de colunas diferentes que se encaixam perfeitamente e serão dentro dessas colunas que você colocará o conteúdo do seu site.<br />
<br />
Veja um exemplos de colunas aqui: <a href="http://maniero.tk/bootstrap/grids.html" target="_blank">http://maniero.tk/bootstrap/grids.html</a><br />
<h2>
Mostrando e ocutando elementos</h2>
Uma prática necessária na criação de layouts responsivos é a de mostrar e ocultar elementos na página dependendo do dispositivo que está acessando o site. Um exemplo de utilização dessa prática na criação de Menus. Dificilmente um menu localizado no Header fica bom na navegação mobile, então deve ser criado uma versão para os dispositivos mobile.<br />
<h2>
Bootstrap em PSD</h2>
O Bootstrap possui diversos outros elementos que podem ser aproveitados também no layout, assim como botões icones, navbars, etc. Você pode baixar os elementos do Bootstrap em PSD aqui: <a href="http://www.bentdesignstudio.com/v2/2012/03/twitter-bootstrap-2-photoshop-template-psd/" target="_blank">http://www.bentdesignstudio.com/v2/2012/03/twitter-bootstrap-2-photoshop-template-psd/</a><br />
<h2>
Conclusão</h2>
Espero que esse artigo possam ajudar a vocês "amigos designers" (se é que existe amizade entre programadores e designers, hehe) a esclarecer dúvidas básicas de como funciona um website responsivo. Se surgirem dúvidas eu atualizarei essa postagem.<br />
<br /></div>
Anonymoushttp://www.blogger.com/profile/12043670572664765654noreply@blogger.com0tag:blogger.com,1999:blog-6710824599414334371.post-13625238459502597372013-04-29T10:25:00.001-03:002013-04-29T10:35:58.006-03:00BikeSampa: ExperiênciaNão, programador não vive só sentado na frente do computador tomando café e digitando na "telinha preta". Tenho hobbies é um deles é pedalar. Adoro a sensação de vento na cara.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSOmAvB9njYXGz83onZDAef2iyi0jpHSCQuvrGM2bRjFyIi2Xs-IX8xG94K7-NuhXpLTCjotxle6g3hkYRUnTikL6znBjSHj1mAI0XVmImBmA8279BHkszXIGXAit0p-Q70KyUKO6fC6k/s1600/2013-04-19+09.00.22.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSOmAvB9njYXGz83onZDAef2iyi0jpHSCQuvrGM2bRjFyIi2Xs-IX8xG94K7-NuhXpLTCjotxle6g3hkYRUnTikL6znBjSHj1mAI0XVmImBmA8279BHkszXIGXAit0p-Q70KyUKO6fC6k/s400/2013-04-19+09.00.22.jpg" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Aqui estou eu indo trabalhar de bicicleta.</td></tr>
</tbody></table>
Assim que vi as bikes do Itaú espalhadas pela cidade, fiquei encantado. Logo procurei fazer meu cadastro.<br />
Nos primeiros dias comecei a ter problemas. A estação 82 (Shopping Santa Cruz) nunca está disponível. Meu trajeto começa no Shopping Santa Cruz e vai até a Dr. Barcelar (Vila Clementino). Porém devido a essa indisponibilidade tenho que andar até a estação Altino Arantes (estação 83).<br />
Fora isso, em um único dia, peguei uma bicicleta com pneu furado. Devolvi e procurei outra, mas estava com o pedivela com problemas. Só em uma terceira tentativa, encontrei uma bike em estado razoável.<br />
Porém, não tive tantos problemas no estado das bicicletas, as boas pelos 10 reais pagos para dois anos de utilização.<br />
Mas hoje confesso que fiquei tremendamente decepcionado com o serviço, já tive problemas em desbloquear uma bicicleta e ela não sair, porém, bastava ligar novamente e desbloquear outra. Hoje foi diferente. Para começar só havia duas bicicletas na estação (isso não é um problema, sei que tem bastante gente usando) e além de mim, havia outra garota, aparentemente com problemas para desbloquear a bicicleta. Era uma bicicleta para cada. A bicicleta na posição 8 se recusou a sair, minha reação natural foi ligar e pedir para que fosse desbloqueada novamente.<br />
A bicicleta não saiu e ainda ficou como "em uso", o que era para ser um meio alternativo de chegar ao trabalho para poupar tempo, acabou me custando meia hora de atraso.<br />
De qualquer forma, amanhã tentarei usar novamente o serviço, entre pegar um ônibus, ir andandado ou ir de bicicleta, eu ainda prefiro ir de bicicleta, mesmo tendo mais dor de cabeça.<br />
Espero mesmo que o Itaú melhore o serviço, afinal, acho um serviço incrível.Anonymoushttp://www.blogger.com/profile/12043670572664765654noreply@blogger.com0tag:blogger.com,1999:blog-6710824599414334371.post-1998487022920137712012-11-17T11:58:00.000-02:002012-11-17T11:58:04.000-02:00PortifólioDepois de um longo tempo prometendo criar um portifólio, finalmente está pronto. Fiz no modo pastel com CodeIgniter. Agora só basta ter tempo para alimentá-lo.<br />
<br />
Segue o link: <a href="http://www.maniero.tk/">http://www.maniero.tk/</a>Anonymoushttp://www.blogger.com/profile/12043670572664765654noreply@blogger.com0tag:blogger.com,1999:blog-6710824599414334371.post-55598397715367977212012-07-22T22:40:00.000-03:002012-07-23T10:30:02.589-03:00Jquery com MTV(MVC) - Jquery MTVe"Model-view-controller (MVC) é um modelo de desenvolvimento de Software, atualmente considerado uma "arquitetura padrão" utilizada na Engenharia de Software." - Fonte: <a href="http://pt.wikipedia.org/wiki/MVC">http://pt.wikipedia.org/wiki/MVC</a>
<br />
<br />
Nada é mais problemático nos dias de hoje quanto a falta de padronização nos projetos. Após uma procura na internet encontrei alguns frameworks MVC para javascript, mas, nenhum me agradou. Alguns me pareceram bem completos, mas, não me atendiam muito bem.
<br />
<br />
Achei de bom senso criar um próprio, coloquei algumas ideias no papel e cheguei a uma primeira versão. Ele deveria ser leve, de fácil utilização e o mais simples possível.
<br />
<br />
Tentei aproximar ao máximo a forma do Framework
<a href="https://www.djangoproject.com/" target="_blank">Django</a> trabalhar, e cheguei a seguinte estrutura:
<br />
<br />
<ul>
<li>Model</li>
<li>Template</li>
<li>View</li>
<li>events</li>
</ul>
Surge então o
<a href="https://github.com/carlosmaniero/jQuery-MTVe" target="_blank">jQuery MTVe</a>, farei uma pequena demostração sobre seu funcionamento.
<br />
<br />
Primeiramente, entre na página no GitHub do projeto serão necessários os arquivos que estão dentro da pasta src.
<br />
<br />
<h3>
Model:</h3>
Nosso modelo irá fazer uma requisição na graph api do Facebook. Ela terá dois atributos. Um será chamado "me" ele armazenará o meu username e outro chamado "base" que será utilizado para requisitar dados de perfil de outros usuários.
<br />
<br />
<pre class="brush:js">var model = $.Model({
me : 'carlos.maniero',
base : 'http://graph.facebook.com/',
profile : function() { return this.load('GET', this.base + this.me ); },
find_profile : function(username) { return this.load('GET', this.base + username ); },
});
</pre>
<br />
O método "profile" retorna os dados do meu perfil e o find_profile retorna os dados de um usuário qualquer.
<br />
<br />
<b>O método load</b>:<br />
Como você deve ter percebido ambos os métodos do modelo utilizam o método load. Ele é o método responsável em fazer as requisições via Ajax. E possui os seguintes parâmetros:
<br />
<br />
<ul>
<li><b>type:</b> GET ou POST</li>
<li><b>url:</b> Endereço da requisição</li>
<li><b>data</b>: Json com dados a serem enviados</li>
<li><b>options</b>: Opções do método <a href="http://jquery.ajax/">jQuery.ajax</a></li>
</ul>
<b>O método get</b>:<br />
<br />
Para chamar um método ou acessar um atributo, usa-se o método get.<br />
Exemplos:
<br />
<br />
model.get('me');<br />
model.get('profile')();<br />
<h3>
</h3>
<h3>
Template:</h3>
<br />
O método template usa o <a href="http://jquery.tmpl/">jQuery.tmpl</a>, ele ainda não está em faze final, mas, está bem estável. Então esse será o conteúdo do nosso template:<br />
<b>HTML: </b>
<a href="https://github.com/carlosmaniero/jQuery-MTVe/blob/master/demos/demo1.tmpl">https://github.com/carlosmaniero/jQuery-MTVe/blob/master/demos/demo1.tmpl</a><br />
<br />
<br />
Os arquivos de template podem ser salvos com a extensão tmpl ou escrito em forma de texto, no exemplo salvaremos em um arquivo .tmpl.<br />
<br />
<b>Javascript: </b>
<br />
<pre class="brush:js">var template = $.Template({
profile : 'demo1.tmpl'
});
</pre>
<br />
<b>Renderizando um template:</b><br />
Para renderizar um template, basta utilizar o método método get passando como parâmetros o nome do atributo e o objeto que será usado para substituir no template.
<br />
<br />
Exemplo:<br />
template.get('profile',json);<br />
<br />
<h3>
View (Controlador):</h3>
"O controlador (<i>controller</i>) recebe a entrada de dados e inicia a
resposta ao utilizador ao invocar objetos do modelo, e por fim uma
visão baseada na entrada. Ele também é responsável pela validação e
filtragem da entrada de dados." - Fonte: <a href="http://pt.wikipedia.org/wiki/MVC">http://pt.wikipedia.org/wiki/MVC</a><br />
<br />
Vamos ao javascript:<br />
<br />
<pre class="brush:js">var view = $.View({
profile : function(){
var data = $.parseJSON(model.get('profile')());
$("table").append(template.get('profile',data));
},
find_profile : function(username){
var data = $.parseJSON(model.get('find_profile')(username));
$('table').append(template.get('profile',data));
}
});</pre>
<h3>
Events:</h3>
Nos eventos ficarão todas as função que serão usadas em nossos elementos.<br />
<br />
Javascript:<br />
<br />
<pre class="brush:js">var events = $.Events({
profile : function(evt){
evt.preventDefault();
view.get("profile")();
$(this).attr('disabled','true');
},
find_profile : function(evt){
evt.preventDefault();
var username = $("input[name=username]").val();
view.get("find_profile")(username);
}
});
$("#button_profile").click(events.get('profile'));
$("#button_find_profile").click(events.get('find_profile'));</pre>
Como eu disse anteriormente ele é bem simples, porém, bastante útil.<br />
<br />
O exemplo completo você encontra na <a href="https://github.com/carlosmaniero/jQuery-MTVe/tree/master/demos" target="_blank">pasta demos</a> do projeto.Anonymoushttp://www.blogger.com/profile/12043670572664765654noreply@blogger.com0tag:blogger.com,1999:blog-6710824599414334371.post-31102737016507676412012-07-18T23:25:00.004-03:002012-07-18T23:50:23.026-03:00PHP - Long PollingLong Polling é uma técnica utilizada para se obter dados e informações em "tempo real" sem que haja uma requisição por parte do usuário.<br />
<br />
<b>Como isso é possível? </b><br />
Existem algumas formas disso ser feito, nesse artigo, abordaremos o Long Polling.<br />
<br />
Criaremos nesse artigo um pequeno chat, lembre-se que o intuito do artigo não é ensinar a fazer um chat, e sim, demostrar o funcionamento do Long Polling.<br />
<br />
Vamos ao nosso arquivo poll.php, ele será responsável em trazer novas mensagens que foram enviadas pelo chat.<br />
<br />
<pre class="brush:php">set_time_limit(0);
function poll($cur_line){
// Lê arquivo
$data = file_get_contents('chat.txt');
$lines = explode("\n", $data);
// Verifica se o número de linha é igual a linha atual ou se a linha 0 está vazia
if(count($lines) == $cur_line || empty($lines[0])){
// Coloca o script para dormir por 1 segundo
sleep(1);
return poll($cur_line);
}else{
$ret = array();
$ret['lines'] = array();
// Coloca somente as linhas que não foram lidas no vetor
for($cur_line;$cur_line < count($lines); $cur_line++){
$ret['lines'][] = $lines[$cur_line];
}
// Adciona a linha atual no vetor
$ret['cur_line'] = $cur_line;
// Encoda o vetor em json
return json_encode($ret);
}
}
echo poll($_POST['cur_line']);
</pre>
<br />
<b>Entendendo o poll.php</b><br />
<br />
No arquivo poll há uma função que recebe como parâmetro o $cur_line, essa é a linha atual do chat. Cada mensagem estará em uma linha de um arquivo .txt. <br />
Sem muito segredo, a função poll lê o arquivo chat.txt e verifica se há novas linhas no arquivo, caso negativo, ele coloca o programa para dormir durante 1 segundo, isso é muito importante para amenizar o gargalo de processamento.<br />
<br />
Caso haja novas linhas, ele coloca as novas linhas em um vetor que é encodado para json.<br />
<br />
<b>Javascript:</b> <br />
<br />
<pre class="brush:js">var cur_line = 0;
var poll;
function get_messages(){
poll = $.ajax({
type: "POST",
url: "poll.php",
data: { 'cur_line' : cur_line },
dataType: "json",
success: function(json, textStatus, jqXHR) {
cur_line = json.cur_line;
// Insere linhas na tela
for(i=0;i<json.lines.length;i++){ line="$('<li">' + json.lines[i] + '');
$("#chat #chat-content .messages").prepend(line);
}
},
complete: function(){
get_messages();
},
timeout: 30000
});
}
</json.lines.length;i++){></pre>
<br />
A função get_messages envia um post para o arquivo poll.php e imprime em uma lista o resultado(json) retornado e atualiza o número de linhas carregadas, que vem no json retornado.<br />
<br />
Eu sempre recomendo que a conexão seja interrompida de tempo em tempo. No meu caso dixei o timeout em 30 segundos. Isso evita que, em caso de erros, o servidor fique com o processo travado.<br />
<br />
Quando requisição é completada, eu chamo a função get_messages novamente, fazendo com que sempre haja uma conexão ativa com o servidor.<br />
<br />
Com o Long Polling o chat sempre estará trazendo as novas mensagens de forma rápida, sem precisar ficar enviando milhares de requisições para o servidor.<br />
<br />
Se quiser o projeto completo, eu subi no <a href="https://github.com/carlosmaniero/Php-long-polling" target="_blank">github</a>.<br />
Segue o link: <a href="https://github.com/carlosmaniero/Php-long-polling">https://github.com/carlosmaniero/Php-long-polling</a><br />
Demonstração: <a href="http://www.livrodeoracao.com.br/dev/chat/index.php">http://www.livrodeoracao.com.br/dev/chat/index.php</a>Anonymoushttp://www.blogger.com/profile/12043670572664765654noreply@blogger.com2tag:blogger.com,1999:blog-6710824599414334371.post-39705066706911107182012-06-08T02:52:00.001-03:002013-05-24T12:10:33.706-03:00Capítulo 2 - Vivendo como terráqueo<div class="western" style="margin-bottom: 0cm;">
</div>
<div class="western" style="margin-bottom: 0cm;">
</div>
<div class="western" style="margin-bottom: 0cm;">
Depois
de muita pesquisa, Solrac chega a uma conclusão:</div>
<div class="western" style="margin-bottom: 0cm;">
<br />
- Não
tem jeito, eu vou passar pelo menos um quinto da minha vida - o
equivalente a três séculos terráqueos - preso nesse planeta.<br />
- Então
vou viver como um terráqueo. Vou vender algumas coisas, cursar uma faculdade e quem sabe consigo desenvolver algo que me tire desse
planeta.</div>
<div class="western" style="margin-bottom: 0cm;">
</div>
<div class="western" style="margin-bottom: 0cm;">
<br />
Ele
juntou alguns metais de valor (pelo menos para os terráqueos) que
estavam em sua mochila, debaixo de uma toalha - itém indispensável
segundo o guia do mochileiro das galáxias – e levou até um senhor
no centro da cidade, que trabalhava com uma placa em volta do seu
corpo com o inscrito “Compra-se ouro”. Ele foi encaminhado até
uma joalheria onde conseguiu um bom dinheiro pelos seus metais.</div>
<div class="western" style="margin-bottom: 0cm;">
<br /></div>
<div class="western" style="margin-bottom: 0cm;">
Solrac
estava decidido em cursar algo que envolvesse linguagens de
programação terráquea. Então realizou sua matrícula em uma
universidade localizada em um bairro de italianos na Zona Leste de São
Paulo. Não foi nada fácil comprovar que ele já havia concluído o
ensino médio, já que a universidade não aceitava histórico
escolar intergalático.</div>Anonymoushttp://www.blogger.com/profile/12043670572664765654noreply@blogger.com0tag:blogger.com,1999:blog-6710824599414334371.post-50673433655137458482012-06-08T02:03:00.003-03:002013-05-24T12:10:33.707-03:00Capítulo 1 - Solrac preso no planeta Terra<br />
<div class="western" style="margin-bottom: 0cm;">
<div style="text-align: left;">
</div>
Durante
suas férias, Solrac, um jovem alienígena que gostava de assustar
camponeses e mendigos (desses que ninguém acredita), decide conhecer
um planeta pouco visitado, chamado Terra, para poder se divertir um
pouco sabe? Coisas que jovens alienígenas gostam de fazer. A Terra
não é um planeta que eles costumam visitar com frequência, devido a
dificuldade de comunicação.</div>
<div class="western" style="margin-bottom: 0cm;">
<br /></div>
<div class="western" style="background: #333333; margin-bottom: 0cm; padding: 10px;">
<span style="color: white;"><b>Tome
nota:</b></span></div>
<div class="western" style="background: #333333; margin-bottom: 0cm; padding: 10px;">
<span style="color: white;"> O
AANT (Associação Alienígena de Normas Técnicas) em conjunto com a
AATEL (Agência Alienígena de Telecomunicações) definiram que
quaisquer tipo de transmissão, sejam elas via celulares, tablets, ou
qualquer outro tipo de aparelho, sejam realizadas através de ondas
de radiação ultravioleta. Na Terra, a ozonosfera torna praticamente
impossível se comunicar com planetas e ou galáxias vizinhas. Por
esse motivo muitos terráqueos não acreditam na existência de
alienígenas.</span></div>
<div class="western" style="margin-bottom: 0cm;">
</div>
<div class="western" style="margin-bottom: 0cm;">
<br /></div>
<div class="western" style="margin-bottom: 0cm;">
Durante
sua viagem Solrac estava indo para uma pequena cidade na região
metropolitana de São Paulo, ele estava procurando um local onde
pudesse desenhar formas geométricas, com a finalidade de causar
alguma repercussão na mídia. Em uma manobra mal executada, perdeu o
controle e colidiu com uma arvore.</div>
<div class="western" style="margin-bottom: 0cm;">
<br /></div>
<div class="western" style="margin-bottom: 0cm;">
- Droga!
A nave está destruída. Como vou sair desse fim de Universo? </div>
<div class="western" style="margin-bottom: 0cm;">
- Ah!
Minha mãe vai me matar, eu disse que só iria comprar algumas
joias em Saturno.</div>
<div class="western" style="margin-bottom: 0cm;">
- E
meu pai? Qual será a reação dele ao saber que dei perda total em
sua nave.</div>
<div class="western" style="margin-bottom: 0cm;">
<br /></div>
<div class="western" style="margin-bottom: 0cm;">
A
única forma de Solrac sair da Terra, era aguardar a vinda de uma
outra espaçonave que poderia demorar séculos terráqueos para
chegar. Dada essas condições, decide então conhecer um pouco mais
sobre o planeta em que estava. Após um série de adaptações que
ele realizou em seu computador, ele conseguiu finalmente acessar a
internet terráquea.
</div>
<div class="western" style="margin-bottom: 0cm;">
<br />
Após
uma longa pesquisa no Google sobre tecnologia terráquea, ele chegou
a um termo que até então era desconhecido, o <i>Open Source</i>. Ao
ler o artigo no Wikipédia ele não entendeu como podem existir
pessoas que simplesmente disponibilizam o trabalho de uma vida. Em
seu planeta não existia <i>software </i>livre, muito menos gratuito,
por essa razão <i>software </i>livre era algo insano para ele.</div>
<div class="western" style="margin-bottom: 0cm;">
<br />
Desacreditando
no que havia lido, ele decide então baixar um Linux, para ver como
aquilo funcionava. Após usar o <i>Linux ditribution chooser</i>
(<a href="http://www.zegeniestudios.net/ldc/index.php?lang=pt-br">http://www.zegeniestudios.net/ldc/index.php?lang=pt-br</a>)
baixou o Ubuntu para ver como se sairia. Para sua surpresa o Ubuntu
reconheceu perfeitamente os drivers de seu computador, o que o espantou, já que o
mesmo foi feito com tecnologia alienígena.</div>
<div class="western" style="margin-bottom: 0cm;">
<br /></div>
<div class="western" style="margin-bottom: 0cm;">
- Não
é possível! Como algo tão bom assim pode ser de graça?</div>
<div class="western" style="margin-bottom: 0cm;">
<br /></div>
<div class="western" style="margin-bottom: 0cm;">
</div>
<div class="western" style="margin-bottom: 0cm;">
Após
a descoberta do Linux, ele começou a pesquisar mais a respeito de
<i>software</i> livre e linguagens de programação, ficou apaixonado
com a simplicidade do Python. E foi ali, no seu terminal do Ubuntu
que ele fez o seu primeiro <i>“Hello World”</i> em linguagem
terráquea.</div>Anonymoushttp://www.blogger.com/profile/12043670572664765654noreply@blogger.com1tag:blogger.com,1999:blog-6710824599414334371.post-47096551399943448582012-04-12T14:58:00.001-03:002012-04-12T14:58:16.179-03:00Conjuntos Numéricos - Parte II<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"><tbody>
<tr><td style="text-align: center;"><a href="http://3.bp.blogspot.com/-sqigJXrREuk/T4cDiW1-azI/AAAAAAAAAYs/G6FkwbTdX3Y/s1600/550046_abacus.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="200" src="http://3.bp.blogspot.com/-sqigJXrREuk/T4cDiW1-azI/AAAAAAAAAYs/G6FkwbTdX3Y/s200/550046_abacus.jpg" width="171" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Creditos: sxc.hu</td></tr>
</tbody></table>
Aqui estamos na segunda parte da matéria de conjuntos numéricos. No post anterior dei a definição de conjunto e elemento. Também vimos quando e como utilizar o <span class="postbody">∈ (pertence) e o </span><span class="postbody">∉</span><span class="postbody"> (não pertence). Falei também sobre intervalos, que podem ser definidos como fechados, abertos e semi-abertos. Nesse post desejo abordar sobre </span>⊂ (contido) e <span class="st">⊄ (não contido) além disso vamos falar um pouco de união e intersecção.</span><br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<h3>
<span class="st">Subconjunto</span></h3>
<br />
<span class="st">Em subconjuntos iremos estudar se um conjunto A por exemplo é subconjunto do conjunto B, para que isso possa ser verdade todos os elementos de A deve estar presentes em B. Vamos ver um exemplo para ilustrar melhor a situação:</span><br />
<span class="st"><br /></span><br />
<span class="st">A = { 7 , 8 , 9 }</span><br />
<span class="st">B = { 6 , 7 , 8 , 9 , 10 }</span><br />
<span class="st"><br /></span><br />
<span class="st">Logo:</span><br />
<span class="st">A </span>⊂ B ou seja A está contido em B, pois os todos os elementos de A pertencem a B, lembrando que a concavidade do símbolo sempre estará apontando para o conjunto com maior número de elementos, logo <span class="st">A </span>⊂ B é equivalente a <span class="st">B </span>⊃ A.<br />
<br />
<b>Intervalos:</b><br />
Com intervalos a regra de subconjuntos é aplicada da mesma forma. Exemplos:<br />
<br />
[ 1 , 3 [ ⊂ [ 1 , 3 ]<br />
[ 2 , 6 ] <span class="st">⊄ [ 1 , 6 [</span><br />
<br />
<h3>
União</h3>
<br />
Dado os conjuntos:<br />
<br />
A = { 1 , 2 , 3 }<br />
B = { 3 , 4 , 5 }<br />
<br />
A união dos dois será equivalente a:<br />
<br />
A ∪ B = { 1 , 2 , 3 , 4 , 5}<br />
<br />
É extremamente importante lembrar-se que em conjuntos não podemos repetir elementos.<br />
<br />
<b>Intervalos:</b><br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://2.bp.blogspot.com/-7XOtTcBfFg8/T4cSaheXgTI/AAAAAAAAAY8/fdNXoMF14gw/s1600/26080329_60_50272507_2867.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="173" src="http://2.bp.blogspot.com/-7XOtTcBfFg8/T4cSaheXgTI/AAAAAAAAAY8/fdNXoMF14gw/s320/26080329_60_50272507_2867.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Fonte: <a href="http://www.laifi.com/usuario/67/laifi/26080329_60_50272507_2867.jpg" target="_blank">Laifi</a></td></tr>
</tbody></table>
<h3>
Intersecção</h3>
<br />
A intersecção tem um propósito semelhante ao da união, porém o resultado intersecção de dois conjuntos será um conjunto com os elementos que existem em ambos os conjuntos. Exemplo:<br />
<br />
Dado os conjuntos:<br />
<br />
A = { 1 , 2 , 3 }<br />
B = { 2 , 3 , 4 }<br />
<br />
A intersecção dos dois conjuntos será:<br />
<br />
A <span style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: white; color: grey; display: inline !important; float: none; font-family: Arial, sans-serif; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 16px; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">∩</span> B = { 2 , 3 }<br />
<br />
<h3>
Observações:</h3>
Se <span class="st">A </span>⊂ B o resultado da união será B e o da intersecção será A.<br />
<br />
Vejamos:<br />
<br />
<span class="st">A = { 7 , 8 , 9 }</span><br />
<span class="st">B = { 6 , 7 , 8 , 9 , 10 }</span><br />
<br />
A ∪ B = B = { 6 , 7 , 8 , 9 , 10 }<span class="st"> </span><br />
<span class="st"> </span>A <span style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: white; color: grey; display: inline !important; float: none; font-family: Arial, sans-serif; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 16px; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">∩</span> B = A = { 7 , 8 , 9 }<br />
<br />
<br />Anonymoushttp://www.blogger.com/profile/12043670572664765654noreply@blogger.com0tag:blogger.com,1999:blog-6710824599414334371.post-13364331692815008162012-04-11T13:24:00.000-03:002012-04-12T17:34:18.151-03:00Conjuntos Numéricos - Parte I<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"><tbody>
<tr><td style="text-align: center;"><a href="http://4.bp.blogspot.com/-QlUyzgCDO8k/T4We4O5H6wI/AAAAAAAAAYM/p8jgUUOxXIs/s1600/531969_abacus.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="150" src="http://4.bp.blogspot.com/-QlUyzgCDO8k/T4We4O5H6wI/AAAAAAAAAYM/p8jgUUOxXIs/s200/531969_abacus.jpg" width="200" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Crédito sxc.hu</td></tr>
</tbody></table>
Farei um pequeno resumo sobre conjunto numéricos,<br />
irei começar pelos conjuntos com menos elementos.<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<b>Conjunto dos números naturais:</b><br />
Podemos defini-lo como um número inteiro, ou seja, sem casa decimais, positivo o zero também não faz parte.<br />
N = { 1 , 2 , 3 , 4 , 5 , ...}<br />
<br />
<b>Conjunto dos números inteiros:</b><br />
São todos os números sem casas decimais.<br />
I = { ... , -3 , -2 , -1 , 0 , 1 , 2 , 3 , ...}<br />
<br />
<b>Conjunto dos números reais:</b><br />
São todos os números inteiros e os com casas decimais.<br />
R = {... , -0.0000001 , ... , 0 , ... , -0.0000001}<br />
<br />
<b>Definindo conjuntos:</b><br />
Todo conjunto é representado por uma letra maiúscula, seus elementos ficam dentro de colchetes e são separados por vírgula. Vejamos um exemplo:<br />
<br />
1) O conjunto C tem como elementos as letras do nome Blog do Carlos, então: C = {b,g,c,a,r,l,o,s}<br />
2) O conjunto X tem como elementos os números 5, 9, 3 e 1, então: X = {5,9,3,1}<br />
<br />
<br />
<br />
<br />
<b>Elemento</b>: é um componente de um conjunto.<br />
<b>Conjunto</b>: é uma coleção de elementos.<br />
<br />
Para não ficar tão abstrato, vejamos o seguintes exemplos:<br />
<br />
1) 3 <span class="postbody">∈ I, o elemento 3 </span><span class="postbody"><b>pertence</b> </span><span class="postbody">ao conjunto dos números inteiros.</span><br />
<span class="postbody">2) -3 </span><span class="postbody">∉ {0,1,2}, o elemento -3 <b>não pertence</b> ao conjunto dos números inteiros.</span><br />
<br />
<span class="postbody">Nos exemplos, 3 e -3 são elementos, I e {0,1,2} são conjuntos.</span><br />
<span class="postbody"><br /></span><br />
<span class="postbody"><br /></span><br />
<h3>
<b>Intervalos:</b></h3>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"><tbody>
<tr><td style="text-align: center;"><a href="http://www.im.ufrj.br/dmm/projeto/projetoc/precalculo/sala/conteudo/capitulos/images/cap185.gif" style="margin-left: auto; margin-right: auto;"><img border="0" height="147" src="http://www.im.ufrj.br/dmm/projeto/projetoc/precalculo/sala/conteudo/capitulos/images/cap185.gif" width="200" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Fonte: <a href="http://www.im.ufrj.br/dmm/projeto/projetoc/precalculo/sala/conteudo/capitulos/images/cap185.gif">UFRJ</a></td></tr>
</tbody></table>
<br />
São todos os números reais entre dois extremos. Por exemplo:<br />
A = [1,3], podemos escreve-lo também da seguinte forma A = {x <span class="postbody">∈ R / 1 ≤ x ≤ 3 </span>}<br />
<br />
<br />
<br />
No intervalo A não estão representado só os números 1 e 3, mas sim infinitos números entre 1 e 3 inclusive o 1 e o 3, vamos ver agora, elementos que pertençam e que não pertençam ao intervalo A: 1 <span class="postbody">∈ A; 1.0000000001 </span><span class="postbody">∈ A; 3 </span><span class="postbody">∈ A; 2.333333 </span><span class="postbody">∈ A; 0.99999 </span><span class="postbody"></span><span class="postbody">∉ A; 3.000001 </span><span class="postbody"></span><span class="postbody">∉ A</span><span class="postbody"></span><b> </b><br />
<br />
<br />
<b>Tipos de intervalos:</b><br />
<br />
<b>1 - Intervalo Fechado:</b><br />
<br />
<blockquote class="tr_bq">
Quando os dois extremos pertencem ao conjunto. Representamos da seguinte forma:<br />
A = [1 , 3] ou A = { x <span class="postbody">∈ R / 1 ≤ x ≤ 3</span> }</blockquote>
<br />
<br />
<b>2 - Intervalo Aberto: </b><br />
<blockquote class="tr_bq">
Quando os dois extremos não pertencem ao conjunto. Exemplo:<br />
A = ]1,3[ ou A = { x <span class="postbody">∈ R / 1 < x < 3</span>}</blockquote>
<blockquote>
Então o A é um intervalo de 1 a 3, porém, 1 e 3 não fazem parte, ou seja, 1.0001 <span class="postbody">∈ A mas 1 </span><span class="postbody">∉ A o mesmo é válido para o 3, </span>2.9999 <span class="postbody">∈ A mas 3 </span><span class="postbody">∉ A.</span></blockquote>
<br />
<b>3 - Intervalo Semi-aberto</b><br />
<blockquote class="tr_bq">
Quando 1 dos dois extremos não pertencem ao conjunto. Vejamos os dois exemplos: </blockquote>
<br />
<blockquote class="tr_bq">
A = [1,3[ ou A = { x <span class="postbody">∈ R / 1 ≤ x < 3</span>}<br />
B = ]1,3] ou B = { x <span class="postbody">∈ R / 1 < x ≤ 3 </span>}</blockquote>
<br />
<br />
Por enquanto é só, na parte dois falarei um pouco sobre teoria dos conjuntos.<br />
<br />Anonymoushttp://www.blogger.com/profile/12043670572664765654noreply@blogger.com0tag:blogger.com,1999:blog-6710824599414334371.post-2145521551776351832012-02-05T15:47:00.000-02:002012-02-05T22:13:41.711-02:00Python: Números Primos<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-QF7cipjCpHo/Ty6-coT7HWI/AAAAAAAAAU8/juq9C8nVNiI/s1600/python.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="198" src="http://1.bp.blogspot.com/-QF7cipjCpHo/Ty6-coT7HWI/AAAAAAAAAU8/juq9C8nVNiI/s200/python.jpg" width="200" /></a></div>
Faz algum tempo que eu me prometi criar um script para calcular e procurar números primos, usei o algorítimo de Marin Mersenne e desenvolvi o script em python.<br />
<br />
<a href="http://www.livrodeoracao.com.br/files/prime.py">Clique aqui</a> para fazer o download do script.<br />
<br />
<br />
<br />
<br />
<br />
<br />
<b><br /></b><br />
<b>Segue imagens do script:</b><br />
<b><br /></b><br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://3.bp.blogspot.com/-7coNpHNiLuM/Ty6_cxo9XQI/AAAAAAAAAVE/JzlQWqIf-Jk/s1600/iniciar.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="211" src="http://3.bp.blogspot.com/-7coNpHNiLuM/Ty6_cxo9XQI/AAAAAAAAAVE/JzlQWqIf-Jk/s400/iniciar.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><div style="text-align: -webkit-auto;">
<b><span style="font-size: x-small;">Iniciando o programa:</span></b></div>
<div style="text-align: -webkit-auto;">
<i><span style="font-size: x-small;">$ python prime.py</span></i></div>
</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://1.bp.blogspot.com/-SqjZOUlksnM/Ty6_xw9YtHI/AAAAAAAAAVM/Gu2AQVBXfjY/s1600/menu.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="240" src="http://1.bp.blogspot.com/-SqjZOUlksnM/Ty6_xw9YtHI/AAAAAAAAAVM/Gu2AQVBXfjY/s400/menu.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: left;"><span style="font-size: x-small; text-align: -webkit-auto;"><b>Tela de menu</b></span></td></tr>
</tbody></table>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://1.bp.blogspot.com/-AwM4kmV8fsE/Ty7AMNf44rI/AAAAAAAAAVU/7jUObsmsQqM/s1600/debug-save.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="203" src="http://1.bp.blogspot.com/-AwM4kmV8fsE/Ty7AMNf44rI/AAAAAAAAAVU/7jUObsmsQqM/s400/debug-save.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><div style="text-align: -webkit-auto;">
<b><span style="font-size: x-small;">Iniciando com debug e salvar números em arquivo:</span></b></div>
<div style="text-align: -webkit-auto;">
<i><span style="font-size: x-small;">$ python prime.py debug</span></i></div>
<div style="text-align: -webkit-auto;">
<i><span style="font-size: x-small;">$ python prime.py save</span></i></div>
<div style="text-align: -webkit-auto;">
<b><span style="font-size: x-small;">Ambos:</span></b></div>
<div style="text-align: -webkit-auto;">
<i><span style="font-size: x-small;">$ python prime.py debug save</span></i></div>
</td></tr>
</tbody></table>Anonymoushttp://www.blogger.com/profile/12043670572664765654noreply@blogger.com0tag:blogger.com,1999:blog-6710824599414334371.post-68114240838229039612012-01-31T17:26:00.001-02:002012-01-31T18:12:22.100-02:00Calculando dias úteis com php<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"><tbody>
<tr><td style="text-align: center;"><a href="http://2.bp.blogspot.com/-9lasCX9xMrE/TyhKjfRSS0I/AAAAAAAAAU0/y7DveuOMad4/s1600/1328012_agenda_4.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="150" src="http://2.bp.blogspot.com/-9lasCX9xMrE/TyhKjfRSS0I/AAAAAAAAAU0/y7DveuOMad4/s200/1328012_agenda_4.jpg" width="200" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Crédito sxc.hu</td></tr>
</tbody></table>
Essa é uma função que desenvolvi segundo a necessidade de um amigo, ela executa o calculo de dias úteis em determinado mês, para o script ficar completo só é necessário a criação de uma tabela no banco de dados onde serão registrados os feriados, se eu conseguir um tempinho no final de semana, termino o script, e aproveito para ensinar como criar uma tabela, inserir e editar um registro.<br />
<br />
<br />
<br />
<pre><span style="color: #cccccc;">/**
* Função que calcula dias úteis no mês
*
* @autor Carlos Maniero </span><carlosmaniero@gmail.com><span style="color: #cccccc;">
*/</span>
<span style="color: blue;">function</span> <b>dias_uteis</b>($mes,$ano){
<span style="color: #351c75;">$uteis</span> = <span style="color: red;">0</span>;
<span style="color: #999999;"> // Obtém o número de dias no mês
// (http://php.net/manual/en/function.cal-days-in-month.php)</span>
<span style="color: #351c75;">$dias_no_mes</span> = <span style="color: blue;">cal_days_in_month</span>(<span style="color: #351c75;">CAL_GREGORIAN, $mes, $ano</span>);
<span style="color: blue;">for</span>(<span style="color: #351c75;">$dia = 1; $dia <= $dias_no_mes; $dia++</span>){
<span style="color: #999999;"> // Aqui você pode verifica se tem feriado
// ----------------------------------------
// Obtém o timestamp
// (http://php.net/manual/pt_BR/function.mktime.php)</span>
<span style="color: #351c75;">$timestamp</span> = <span style="color: blue;">mktime</span>(<span style="color: red;">0</span>, <span style="color: red;">0</span>, <span style="color: red;">0</span>, <span style="color: #351c75;">$mes, $dia, $ano</span>);
<span style="color: #351c75;">$semana </span> = <span style="color: blue;">date</span>(<span style="color: #38761d;">"N"</span>, <span style="color: #351c75;">$timestamp</span>);
<span style="color: blue;">if</span>(<span style="color: #351c75;">$semana</span> < <span style="color: red;">6</span>) <span style="color: #351c75;">$uteis</span>++;
}
<span style="color: #134f5c;">return</span> <span style="color: #351c75;">$uteis</span>;
}
<span style="color: #999999;">// Invocando a função</span>
<span style="color: blue;">echo</span> <b>dias_uteis</b>(<span style="color: blue;">date</span>(<span style="color: #38761d;">'m'</span>),<span style="color: blue;">date</span>(<span style="color: #38761d;">'Y'</span>)); // Recebe dias úteis do mês atual
<span style="color: blue;">echo</span> <b>dias_uteis</b>(<span style="color: red;">1</span>,<span style="color: red;">2012</span>); // Recebe dias úteis do mês 1 de 2012</carlosmaniero@gmail.com></pre>Anonymoushttp://www.blogger.com/profile/12043670572664765654noreply@blogger.com4tag:blogger.com,1999:blog-6710824599414334371.post-86501447975924100832012-01-30T22:53:00.001-02:002012-01-31T10:23:36.837-02:00Simplificando a validação em PHP<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"><tbody>
<tr><td style="text-align: center;"><a href="http://2.bp.blogspot.com/-mDtTcbUn71Q/Tyc7bfrb4vI/AAAAAAAAAUs/ozLVvuEmkIU/s1600/860172_logic_homework.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="145" src="http://2.bp.blogspot.com/-mDtTcbUn71Q/Tyc7bfrb4vI/AAAAAAAAAUs/ozLVvuEmkIU/s200/860172_logic_homework.jpg" width="200" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Crédito: sxc.hu</td></tr>
</tbody></table>
Nada é tão chato quanto fazer aquela validação de formulário não é mesmo? E se eu disser que há uma maneira simples de se fazer isso em PHP, isso mesmo, nada de sofrimento!<br />
<br />
Estou falando da função <a href="http://php.net/manual/en/function.filter-var.php">filter_var()</a> vamos a um exemplo de utilização da mesma:<br />
<br />
<br />
<br />
<br />
<span class="Apple-style-span" style="color: red;"></span><br />
<span class="Apple-style-span" style="color: red;"><span class="Apple-style-span" style="color: #cc0000;"></span></span><br />
<span class="Apple-style-span" style="color: red;"><span class="Apple-style-span" style="color: #cc0000;"><span class="Apple-style-span" style="color: #999999;">// Validação de email</span></span></span><br />
<span class="Apple-style-span" style="color: red;"><span class="Apple-style-span" style="color: #cc0000;"><span class="Apple-style-span" style="color: #134f5c;"> if</span>(<span class="Apple-style-span" style="color: #741b47;">filter_var</span>(<span class="Apple-style-span" style="color: #38761d;">'bob@example.com'</span>, <span class="Apple-style-span" style="color: blue;">FILTER_VALIDATE_EMAIL</span>)){</span></span><br />
<span class="Apple-style-span" style="color: red;"><span class="Apple-style-span" style="color: #cc0000;"> <span class="Apple-style-span" style="color: #0b5394;">echo</span> <span class="Apple-style-span" style="color: #38761d;">"Email Válido!"</span>;</span></span><br />
<span class="Apple-style-span" style="color: red;"><span class="Apple-style-span" style="color: #cc0000;"> }</span></span><br />
<span class="Apple-style-span" style="color: red;"><span class="Apple-style-span" style="color: #cc0000;"><br /></span></span><br />
<span class="Apple-style-span" style="color: red;"><span class="Apple-style-span" style="color: #cc0000;"><span class="Apple-style-span" style="color: #999999;">// Validação de url</span></span></span><br />
<span class="Apple-style-span" style="color: #134f5c;"> if</span><span style="color: #cc0000;">(</span><span class="Apple-style-span" style="color: #741b47;">filter_var</span><span style="color: #cc0000;">(</span><span class="Apple-style-span" style="color: #38761d;">'http://carlosmaniero.blogspot.com'</span><span style="color: #cc0000;">, </span><span class="Apple-style-span" style="color: blue;">FILTER_VALIDATE_URL</span><span style="color: #cc0000;">)){</span><br />
<span class="Apple-style-span" style="color: red;"><span class="Apple-style-span" style="color: #cc0000;"> <span class="Apple-style-span" style="color: #0b5394;">echo</span> <span class="Apple-style-span" style="color: #38761d;">"Url Válido!"</span>;</span></span><br />
<span class="Apple-style-span" style="color: red;"><span class="Apple-style-span" style="color: #cc0000;"> }</span></span><br />
<span class="Apple-style-span" style="color: red;"><br /></span><br />
Espero que seja um dica útil para vocês, as constantes usadas por essa função pode ser encontrada nesse link: <a href="http://php.net/manual/en/filter.constants.php">http://php.net/manual/en/filter.constants.php</a>Anonymoushttp://www.blogger.com/profile/12043670572664765654noreply@blogger.com0tag:blogger.com,1999:blog-6710824599414334371.post-3012389153666521172012-01-29T23:38:00.003-02:002012-01-30T12:49:54.952-02:00Plugin para customização de formulários<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-2IbX7UAy4DA/TyX0hQPZX7I/AAAAAAAAAUk/6gjp8NtMvxM/s1600/jquery-logo.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="http://2.bp.blogspot.com/-2IbX7UAy4DA/TyX0hQPZX7I/AAAAAAAAAUk/6gjp8NtMvxM/s200/jquery-logo.png" width="200" /></a></div>
Como postei anteriormente estou desenvolvendo uma nova versão do Livro de oração, e nisso fui obrigado a desenvolver uma série de plugins para jquery para customização de formulários. Todos sabem da minha paixão pelo mundo open source, logo, estou disponibilizando aqui uma versão beta do plugin, acredito que há muito o que melhorar e tenho certeza que até o fim do meu projeto ele estará bem melhor, mas vamos a uma prévia:<br />
<br />
JS: <a href="http://goo.gl/ueKw2">http://goo.gl/ueKw2</a><br />
CSS: <a href="http://goo.gl/76cxn">http://goo.gl/76cxn</a><br />
<br />
<br />
O plugin é dependente do masked input que pode ser obtido aqui:<br />
<br />
<a href="http://digitalbush.com/projects/masked-input-plugin/">http://digitalbush.com/projects/masked-input-plugin/</a><br />
<br />
Segue uma pequena demostração de como usa-lo:<br />
<br />
<i>$(<span class="Apple-style-span" style="color: #38761d;">"seletor"</span>).<b>inputCustom</b>({</i><br />
<i> <span class="Apple-style-span" style="color: #990000;">opção</span> : <span class="Apple-style-span" style="color: #38761d;">"valor"</span></i><br />
<i>});</i><br />
<br />
Segue a lista de opções:<br />
<br />
<b>label </b><br />
<i>Descrição: Texto padrão do campo, desaparece no evento focus</i><br />
<i>Padrão: ""</i><br />
<i><br /></i><br />
<b>datatype</b><br />
<i>Descrição: Tipo de dado [text/url/email/number]</i><br />
<i>Padrão: text</i><br />
<b><br /></b><br />
<b>required</b><br />
<i>Descrição: Seta campo camo obrigatório ou não</i><br />
<i>Padrão: false</i><br />
<i><br /></i><br />
<b>disable</b><br />
<i>Descrição: Checa se campo pode estar desativado </i><br />
<i>Padrão: false</i><br />
<i><br /></i><br />
<b>minlength</b><br />
<i>Descrição: Tamanho </i><i>mínimo</i><i> em caractéres do texto, em caso de número valor mínimo do número</i><br />
<i>Padrão: 1</i><br />
<div>
<i><br /></i></div>
<b>maxlength</b><br />
<i>Descrição: </i><i>Tamanho máximo em caractéres do texto, em caso de número valor máximo do número</i><br />
<i>Padrão: </i><span class="Apple-style-span" style="font-family: monospace; white-space: pre-wrap;">10000</span><br />
<div>
<i><br /></i></div>
<b>errorMsg</b><span class="Apple-tab-span" style="white-space: pre;"> </span><br />
<i>Descrição: Mensagem de erro caso campo não for corretamente preenchido</i><br />
<i>Padrão: 'Preencha o campo corretamente!'</i><br />
<div>
<i><br /></i></div>
<b>errorClass</b><br />
<i>Descrição: Classe que será aplicada ao elemento caso não esteja corretamente preenchido</i><br />
<i>Padrão: 'errorField'</i><br />
<div>
<i><br /></i></div>
<b>labelClass</b><br />
<i>Descrição: Classe para quando o elemento esteja no texto padrão (label)</i><br />
<i>Padrão: 'labelActive'</i><br />
<div>
<i><br /></i></div>
<b>mask</b><br />
<i>Descrição: Máscara que será aplicada ao elemento (ex.: 99/99/9999), para maiores informações pesquisar o site no maskedinput</i><br />
<i>Padrão: ""</i><br />
<div>
<i><br /></i></div>
<b>autoComplete</b><br />
<i>Descrição: Url onde será recebido o JSON usado para o auto complete: (ex.: </i><span class="Apple-style-span" style="-webkit-text-size-adjust: none; background-color: white; font-family: 'dejavu sans mono', monospace; font-size: 11px; white-space: pre;">{ "city_5137":"Ribeirão Pires","city_5138":"Ribeirão Preto"}</span><i>)</i><br />
<i>Padrão:</i><br />
<div>
<i><br /></i></div>
<b>click</b><br />
<i>Descrição: Evento click do elemento</i><br />
<i>Padrão: function(){}</i><br />
<div>
<i><br /></i></div>
<b>focus</b><br />
<i>Descrição: Evento focus do elemento</i><br />
<i>Padrão: </i><i>function(){}</i><br />
<div>
<i><br /></i></div>
<b>focusout</b><br />
<i>Descrição: </i><i>Evento focusout do elemento</i><br />
<i>Padrão:</i><i> </i><i>function(){}</i><br />
<div>
<i><br /></i></div>
<b>keydown</b><br />
<i>Descrição: </i><i>Evento </i>keydown<i> do elemento</i><br />
<i>Padrão:</i><i> </i><i>function(){}</i><br />
<div>
<i><br /></i></div>
<b>keyup</b><br />
<i>Descrição: </i><i>Evento </i>keyup<i> do elemento</i><br />
<i>Padrão:</i><i> </i><i>function(){}</i><br />
<i><br /></i><br />
<i>Exemplo básico:</i><br />
<i><br /></i><br />
<i>$(<span style="color: #674ea7;">document</span>).ready(function(){</i><br />
<i> </i><i>$(<span style="color: #38761d;">"input[name=nome]"</span>).<b>inputCustom</b>({</i><br />
<i> </i><i> </i><i><span style="color: #cc0000;">label</span>: <span style="color: #38761d;">"Nome: "</span>,</i><br />
<i> </i><i> </i><i><span style="color: #cc0000;">required</span>: <span style="color: #0b5394;">true</span>,</i><br />
<i> </i><i> </i><i> <span style="color: #cc0000;">minlength</span>: <span style="color: #0b5394;">3</span>,</i><br />
<i> </i><i> </i><i> <span style="color: #cc0000;">maxlength</span>: <span style="color: #0b5394;">150</span>,</i><br />
<i> </i><i> </i><i> <span style="color: #cc0000;">errorMsg</span>: <span style="color: #38761d;">"Preencha o campo nome"</span></i><br />
<i>});</i><br />
<br />
<i> </i><i>$(<span style="color: #38761d;">"input[name=email]"</span>).<b>inputCustom</b>({</i><br />
<i> </i><i> </i><i><span style="color: #cc0000;">label</span>: <span style="color: #38761d;">"Email: "</span>,</i><br />
<i> </i><i> </i><i><span style="color: #cc0000;">required</span>: <span style="color: #0b5394;">true</span>,</i><br />
<i> </i><i> </i><i> <span style="color: #cc0000;">datatype</span>: <span style="color: #38761d;">"email"</span>,</i><br />
<i> </i><i> </i><i> <span style="color: #cc0000;">errorMsg</span>: <span style="color: #38761d;">"Preencha o campo email!"</span></i><br />
<i> </i><i>});</i><br />
<br />
<i> </i><i>$(<span style="color: #38761d;">"input[name=url]"</span>).<b>inputCustom</b>({</i><br />
<i> </i><i> </i><i> <span style="color: #cc0000;">label</span>: <span style="color: #38761d;">"Site: "</span>,</i><br />
<i> </i><i> <span style="color: #cc0000;">required</span>: <span style="color: #0b5394;">true</span>,</i><br />
<i> </i><i> </i><i><span style="color: #cc0000;">datatype</span>: <span style="color: #38761d;">"url"</span>,</i><br />
<i> </i><i> </i><i> <span style="color: #cc0000;">errorMsg</span>: <span style="color: #38761d;">"Preencha o campo URL"</span></i><br />
<i> </i><i>});</i><br />
<i>});</i><br />
<i><br /></i><br />
<br />
<br />
<i>Por hoje é só, se possível amanhã estarei falando um pouco mais sobre o plugin.</i><br />
<br />
<br />Anonymoushttp://www.blogger.com/profile/12043670572664765654noreply@blogger.com0tag:blogger.com,1999:blog-6710824599414334371.post-70520880480871640542012-01-28T22:26:00.000-02:002012-01-28T22:32:24.791-02:00Um novo primeiro postEstou voltando a postar no blog depois de um longo período, fui extremamente influenciado pelo Leonardo Ferreira, você pode conferir suas inúteis anotações nesse endereço <a href="http://ferreiraleonardo.blogspot.com/">http://ferreiraleonardo.blogspot.com/</a>, tenho algumas certezas sobre essa volta, uma delas é que a qualquer momento vou desistir de postar, e até mesmo esse post pode ser o último.<br />
<br />
Sem mais delongas vou contar um pouco sobre o que aconteceu comigo nesse período em que estive off (pelo menos na blogosféra). Primeiramente passei um bom período estudando, em programação obtive sucesso, mas o inglês e o cursinho foi um fracasso, enfim estou trabalhando em uma agência de publicidade e propaganda como programador,<i><strike> lá é uma empresa composta por pessoa sem qualquer senso de humor, onde se aplica puramente a lei da convivência para manter o ambiente estável, você pode confirmar isso com as imagens abaixo</strike></i>:
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.uglitch.com/glitchs/public/glitch_694.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://www.uglitch.com/glitchs/public/glitch_694.gif" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Não posso deixar de falar de um projeto pessoal chamado Livro de Oração, de todos eles é o que mais me dá prazer em realiza-lo ele tem se tornado um site abençoado, e espero que cresça ainda mais, estou trabalhando nele nesse exato momento, ele em breve se transformará em uma rede social, o mais difícil de tocar o projeto é na questão dos layouts, como todo bom programador não sou nada bom com design, mas ai eu entrego na mão de um brother meu que sempre me dá uma força ele se chama Espírito Santo, e sempre tem me ajudado nessas horas, isso ainda está em desenvolvimento, não sei quando vou conseguir entrega-lo já que existe uma complicação chamada tempo, mas sempre que possível trabalho nele, se você se interessar pelo projeto o link é o seguinte: <a href="http://www.livrodeoracao.com.br/">http://www.livrodeoracao.com.br</a> caso esteja necessitado de oração posta lá, pode ter certeza que sempre terá alguém orando por você.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Acho que não tenho mais o que acrescentar nesse primeiro post, vou deixar minha <i>"vidinha de adolescente"</i> de fora dos meus posts, para os que estão acostumados com minhas postagens isso provavelmente isso vai ser um espanto, mas juro que vou tentar deixar as <i>"frescuritis"</i> fora dessa vez.</div>
<div class="separator" style="clear: both; text-align: center;">
</div>Anonymoushttp://www.blogger.com/profile/12043670572664765654noreply@blogger.com2