<?xml version="1.0" encoding="ISO-8859-1" ?>
<rss version="2.0">
<channel>
<title>RodrigoStrauss::WebLog();</title>
<language>pt-br</language>
<link>http://www.1bit.com.br/content.1bit/weblog</link>
<description>Rodrigo Strauss - WebLog</description>
<webMaster>weblog@1bit.com.br</webMaster>
<managingEditor>weblog@1bit.com.br</managingEditor>
<item><title>Sétimo Encontro de Programadores C++</title><link>http://www.1bit.com.br/content.1bit/weblog/ccppbr_setimo</link><guid isPermaLink="true">http://www.1bit.com.br/content.1bit/weblog/ccppbr_setimo</guid><comments>http://www.1bit.com.br/content.1bit/weblog/ccppbr_setimo#comments</comments><description>&lt;p&gt;O grupo C &amp; C++ Brasil (ccppbrasil) tem o imenso orgulho em anunciar (agora oficialmente) o nosso sétimo encontro. Detalhes:

&lt;ul&gt;
&lt;li&gt;Sétimo Encontro de Programadores C &amp; C++
&lt;li&gt;dia 14 de agosto de 2010, sábado
&lt;li&gt;em São Paulo, SP. &lt;a href=&quot;http://maps.google.com/maps?f=q&amp;source=s_q&amp;hl=en&amp;geocode=&amp;q=Century+Paulista&amp;sll=-23.573176,-46.649657&amp;sspn=0.008034,0.008272&amp;ie=UTF8&amp;hq=Century+Paulista&amp;hnear=&amp;z=17&amp;iwloc=A&quot;&gt;Rua Teixeira da Silva, 647 - Paraíso&lt;/a&gt;
&lt;li&gt;As palestras de qualidade de sempre
&lt;li&gt;O ótimo chopp/tubaína/networking de sempre após o evento
&lt;li&gt;&lt;a href=&quot;http://www.ccppbrasil.org/wiki/Grupo:Encontro_VII&quot;&gt;Mais detalhes na página do grupo&lt;/a&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;&lt;a href=&quot;http://www.1bit.com.br/content.1bit/weblog/ccppbr_setimo#comments&quot;&gt;1 comentário(s)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;</description><pubDate>Thu, 22 Jul 2010 20:09:08 GMT</pubDate></item><item><title>Mais Tio</title><link>http://www.1bit.com.br/content.1bit/weblog/tio_after_launch</link><guid isPermaLink="true">http://www.1bit.com.br/content.1bit/weblog/tio_after_launch</guid><comments>http://www.1bit.com.br/content.1bit/weblog/tio_after_launch#comments</comments><description>&lt;p&gt;Aos que foram à palestra e lançamento do Tio no &lt;a href=&quot;http://nosqlbr.com&quot;&gt;nosqlbr&lt;/a&gt;, algumas coisas que eu esqueci de falar:

&lt;ul&gt;
&lt;li&gt;O Tio funciona com 3 campos: key, value e metadata. Esses campos podem ter o tipo string, int, double e raw (blob).
&lt;li&gt;As chaves dos maps só podem ser strings. Mas você pode acessar por índice numérico para ler o n-ésimo item do map
&lt;li&gt;Todo container tem suporte à propriedades. Por exemplo, você pode criar uma propriedade &quot;schema&quot; em um container para saber como serializar ou desserializar o que está no campo value
&lt;li&gt;Para fazer um &lt;a href=&quot;http://en.wikipedia.org/wiki/upsert&quot;&gt;upsert&lt;/a&gt;, é só fazer algo como &quot;my_map['rodrigo'] = 'strauss'&quot;
&lt;li&gt;Eu quebrei o build do Linux... Quem for testar hoje, tem que compilar em Release e usar somente os containers em memória (volatile/list, volatile/list, etc). Corrijo isso essa semana :-)
&lt;/ul&gt;

&lt;p&gt;Quase tudo que eu falei está na &lt;a href=&quot;http://code.google.com/p/tio/w&quot;&gt;documentação do projeto&lt;/a&gt;. Quem tiver mais dúvidas, o melhor canal para perguntar são as duas listas de discussão (&lt;a href=&quot;http://groups.google.com/group/tio-project&quot;&gt;inglês&lt;/a&gt; e &lt;a href=&quot;http://groups.google.com/group/tio-project-brasil&quot;&gt;português&lt;/a&gt;).

&lt;p&gt;A apresentação está em &lt;a href=&quot;http://docs.google.com/present/view?id=dg9kbfzn_73m4c7qvc6&quot;&gt;http://docs.google.com/present/view?id=dg9kbfzn_73m4c7qvc6&lt;/a&gt;
&lt;p&gt;&lt;b&gt;&lt;a href=&quot;http://www.1bit.com.br/content.1bit/weblog/tio_after_launch#comments&quot;&gt;0 comentário(s)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;</description><pubDate>Sat, 15 May 2010 21:29:11 GMT</pubDate></item><item><title>Apresentação do Tio dia 15 de maio no nosqlbr</title><link>http://www.1bit.com.br/content.1bit/weblog/tio_launch</link><guid isPermaLink="true">http://www.1bit.com.br/content.1bit/weblog/tio_launch</guid><comments>http://www.1bit.com.br/content.1bit/weblog/tio_launch#comments</comments><description>&lt;p&gt;Esse sábado acontecerá o &lt;a href=&quot;http://nosqlbr.com&quot;&gt;primeiro evento brasileiro sobre nosql&lt;/a&gt;, organizado pelo @porcelli do &lt;a href=&quot;http://porcelli.github.com/OpenSpotLight/index.html&quot;&gt;OpenSpotlight&lt;/a&gt;. Eu farei a palestra &quot;Tio: um nosql Made in Brasil&quot;. Tio? Ãh?

&lt;p&gt;Eu ando parindo um nosql já faz mais de um ano, depois de passar mais de um ano pensando no conceito. Aproveitando esse evento e a modinha do nosql, acho que agora é a hora de publicar os fontes e divulgar. Os fontes e a documentação estão em &lt;a href=&quot;http://code.google.com/p/tio&quot;&gt;http://code.google.com/p/tio&lt;/a&gt; (apesar da insistência do @porcelli para que eu colocasse no github :-)) 

&lt;p&gt;Para o pessoal de C++, o Tio nada mais é do que containers STL em um servidor remoto, mas tudo construído sobre um base &lt;a href=&quot;en.wikipedia.org/wiki/Publish/subscribe&quot;&gt;publish/subscribe&lt;/a&gt;. Olha como fica simples construir alguns softwares server side com esse conceito:

&lt;ul&gt;
&lt;li&gt;Servidor de filas: criar uma lista, o producer manda as coisas fazendo push_back na lista e o consumer usa pop_front. Ou o commando &lt;a href=&quot;http://code.google.com/p/tio/wiki/TioAsClusterCoordinator&quot;&gt;wnp_next&lt;/a&gt;, que facilitar a contrução de clusters computacionais.
&lt;li&gt;Servidor de chat: criar uma lista de mensagem para cada usuário. O usuário assina as modificações da própria lista e quem quiser mandar uma mensagem pra ele faz um push_back na lista. Você pode criar um map com os IDs dos usuários, onde o valor é o nome da lista de mensagens. Se você assinar esse mapa, ainda será notificado automagicamente sobre todos os usuários criados ou apagados
&lt;/ul&gt;

&lt;p&gt;Minha idéia é: todo software server mantém estado e notifica clientes das modificações nesses estados. Eu faço isso bastante usando C++, e é sempre isso. Um monte de containers STL para controlar o estado da aplicação, e código para enviar notificações via TCP para os interessados. O Tio faz quase todo esse serviço sozinho. Muitos protótipos de aplicação podem ser feito com zero linhas de código server.

&lt;p&gt;Os fontes e a documentação estão lá &lt;a href=&quot;http://code.google.com/p/tio&quot;&gt;no site do projeto Tio&lt;/a&gt;. Para compilar no Windows, tem um projeto do Visual Studio 2008 (não testei no Express, mas deve funcionar). No Linux, você vai precisa do CMake (&quot;cmake . &amp;&amp; make&quot; faz o serviço). Você vai precisar do Boost devidamente instalado, compilado e configurado, o Tio é feito usando Boost Asio. O fonte é bem simples e direto, deve ser um bom ponto de aprendizado para quem está estudando Boost Asio.

&lt;p&gt;Criei duas listas de discussão: uma &lt;a href=&quot;http://groups.google.com/group/tio-project&quot;&gt;em inglês&lt;/a&gt;, e uma &lt;a href=&quot;http://groups.google.com/group/tio-project-brasil&quot;&gt;em português&lt;/a&gt;. Note que o site do Tio é todo em inglês (e os comentários do Wiki devem ser em inglês). Está nos planos ter documentação em português também. Mas eu sou um só :-)&lt;/a&gt;

&lt;p&gt;Nos fontes você vai achar um client para C++ e um client Python. Por falta de tempo, o client Python está mais refinado do que o client C++. Em C++ tudo é feito usando algo como 

&lt;pre&gt;shared_ptr&amp;lt;TioContainer&amp;gt;&lt;/pre&gt; 
e
&lt;pre&gt;container-&gt;PushBack(TIONULL, &quot;abcdef&quot;)&lt;/pre&gt;
Em Python você usa um container remoto como se fosse local, com coisas tipo 
&lt;pre&gt;container[&quot;rodrigostrauss&quot;] = &quot;messages/rodrigostrauss&quot;&lt;/pre&gt;

&lt;p&gt;Para maiores explicações e o chopp/happyhour/networking de sempre, nos encontramos no evento de nosql esse sábado. Traga suas perguntas e comparações com outros nosql.&lt;p&gt;&lt;b&gt;&lt;a href=&quot;http://www.1bit.com.br/content.1bit/weblog/tio_launch#comments&quot;&gt;1 comentário(s)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;</description><pubDate>Tue, 11 May 2010 13:11:31 GMT</pubDate></item><item><title>Vou fazer uma palestra sobre Python na Campus Party</title><link>http://www.1bit.com.br/content.1bit/weblog/python_campus_party</link><guid isPermaLink="true">http://www.1bit.com.br/content.1bit/weblog/python_campus_party</guid><comments>http://www.1bit.com.br/content.1bit/weblog/python_campus_party#comments</comments><description>&lt;ul&gt;
&lt;li&gt;Título: Seja dinâmico com Python
&lt;li&gt;Descrição: Vou falar sobre quase todas as gambiarras e coisas maravilhosas que um programador pode fazer com os recursos &quot;dinâmicos&quot; do Python. Criar membros e métodos em runtime, usar o reflection mais simples do planeta, responder por métodos que não existem na hora em que são chamados. Métodos __MAGICOS__ e seus correlatos. Como transformar um registro de um banco de dados em um objeto (quase um ORM) com duas linhas de código (ou três). E as piadas quase-engraçadas de sempre
&lt;li&gt;Data e hora: 26 de janeiro (terça-feira), 09:00hs da matina. Para quem vai acampar lá é uma boa maneira de começar a semana :-)
&lt;li&gt;Links: &lt;a href=&quot;http://www.campus-party.com.br/&quot;&gt;Campus Party&lt;/a&gt;, &lt;a href=&quot;http://www.campus-party.com.br/agenda.html&quot;&gt;agenda do evento&lt;/a&gt;, &lt;a href=&quot;http://twitter.com/rodrigostrauss&quot;&gt;meu twitter&lt;/a&gt;
&lt;/ul&gt;

&lt;p&gt;Além disso, devo ficar lá o dia inteiro. Essa palestra está sendo organizada pelo &lt;a href=&quot;http://www.python.org.br/wiki/GrupySP&quot;&gt;GruPy-SP&lt;/a&gt;, o Grupo de Usuários Python do Estado de São Paulo.&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;a href=&quot;http://www.1bit.com.br/content.1bit/weblog/python_campus_party#comments&quot;&gt;1 comentário(s)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;</description><pubDate>Fri, 22 Jan 2010 18:59:20 GMT</pubDate></item><item><title>Lendo e medindo o tempo em C e C++: função time()</title><link>http://www.1bit.com.br/content.1bit/weblog/ccpp_medindo_tempo_time</link><guid isPermaLink="true">http://www.1bit.com.br/content.1bit/weblog/ccpp_medindo_tempo_time</guid><comments>http://www.1bit.com.br/content.1bit/weblog/ccpp_medindo_tempo_time#comments</comments><description>&lt;p&gt;Bom, chega de teoria e encheção de lingüiça e vamos para o código de uma vez por todas. A função mais conhecida para pegar a data e hora é a função time() da C runtime, que retorna quantidade de segundos desde o &lt;a href=&quot;http://en.wikipedia.org/wiki/Unix_time&quot;&gt;&quot;Unix Epoch&quot;&lt;/a&gt;, que é meia noite (00:00:00) de 1 de Janeiro de 1970. 

&lt;p&gt;Características da função time():

&lt;ul&gt;
&lt;li&gt;Retorna a quantidade de segundos desde 1 de Janeiro de 1970. Ou seja, a sua precisão máxima é de um segundo. Ou seja, não serve para medir performance. (ou seja, vou explicar mais sobre isso depois)
&lt;li&gt;O horário retornado é &lt;a href=&quot;http://en.wikipedia.org/wiki/Gmt&quot;&gt;GMT&lt;/a&gt;, para pegar o horário local é necessário fazer manualmente o cálculo para ajuste de fuso horário. Para usar o horário local é necessário usar a função get_timezone (ou _tzset no Visual C++) para ler a diferença do fuso que você usará para fazer o cálculo depois
&lt;li&gt;Como o retorno da função é um número inteiro, é muito fácil fazer contas com ele. Para avançar a data em dois dias, por exemplo, é só somar [60 * 60 * 24 * 2]. 
&lt;li&gt;Durante o inicio dos tempos do unix o retorno era do tipo int de 32 bits. Fazendo uma conta simples com os limites de um inteiro, vemos que o limite de medição é algum dia no ano de 2038, criando uma nova e repaginada versão do bug do milênio. Nas versões mais atuais dessa função o retorno é um int64, o que empurra o limite para uma data bem longínqua, quando provavelmente não haverá mais programadores vivos no universo.
&lt;li&gt;Por ser uma função da C runtime, está disponível em qualquer compilador C e C++ (qualquer == qualquer compilador não-exótico para plataformas não-exóticas). É provavelmente a função mais multiplataforma de todas que eu vou mostrar
&lt;/ul&gt;

&lt;p&gt;Como um trecho de código vale mais do que 0xFFFFFFFFFFFFFFFF palavras, here we go:

&lt;div class=&quot;code&quot;&gt;
&lt;pre&gt;
&lt;span class=&quot;keyword&quot;&gt;#include&lt;/span&gt; &amp;lt;stdio.h&amp;gt;
&lt;span class=&quot;keyword&quot;&gt;#include&lt;/span&gt; &amp;lt;tchar.h&amp;gt;
&lt;span class=&quot;keyword&quot;&gt;#include&lt;/span&gt; &amp;lt;time.h&amp;gt;
&lt;span class=&quot;keyword&quot;&gt;#include&lt;/span&gt; &amp;lt;iostream&amp;gt;
&lt;span class=&quot;keyword&quot;&gt;#include&lt;/span&gt; &amp;lt;iomanip&amp;gt;
&lt;span class=&quot;keyword&quot;&gt;#include&lt;/span&gt; &amp;lt;string&amp;gt;

&lt;span class=&quot;keyword&quot;&gt;using namespace&lt;/span&gt; std;

&lt;span class=&quot;keyword&quot;&gt;void&lt;/span&gt; print_time(time_t t)
{
  tm* formatted_time;

  &lt;span class=&quot;comment&quot;&gt;//&lt;/span&gt;
  &lt;span class=&quot;comment&quot;&gt;// essa função &quot;quebra&quot; essa quantidade de segundos e dia, mês, ano, etc&lt;/span&gt;
  &lt;span class=&quot;comment&quot;&gt;//&lt;/span&gt;
  formatted_time = gmtime(&amp;t);

  &lt;span class=&quot;comment&quot;&gt;//&lt;/span&gt;
  &lt;span class=&quot;comment&quot;&gt;// isso vai mostrar algo como &quot;2009/12/07 14:42:57&quot;&lt;/span&gt;
  &lt;span class=&quot;comment&quot;&gt;// note que é necessário somar 1900 na data para pegar o ano corrente&lt;/span&gt;
  &lt;span class=&quot;comment&quot;&gt;//&lt;/span&gt;
  cout &lt;&lt; setfill('0') &lt;&lt; 
    setw(4) &lt;&lt; formatted_time-&gt;tm_year+1900 &lt;&lt; &quot;/&quot; &lt;&lt;
    setw(2) &lt;&lt; formatted_time-&gt;tm_mon+1 &lt;&lt; &quot;/&quot; &lt;&lt;
    setw(2) &lt;&lt; formatted_time-&gt;tm_mday &lt;&lt; &quot; &quot; &lt;&lt;
    setw(2) &lt;&lt; formatted_time-&gt;tm_hour &lt;&lt; &quot;:&quot; &lt;&lt; 
    setw(2) &lt;&lt; formatted_time-&gt;tm_min &lt;&lt; &quot;:&quot; &lt;&lt; 
    setw(2) &lt;&lt; formatted_time-&gt;tm_sec &lt;&lt; endl;
}


&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; main()
{
  time_t t;

  &lt;span class=&quot;comment&quot;&gt;//&lt;/span&gt;
  &lt;span class=&quot;comment&quot;&gt;// pega o número de segundos desde 1970&lt;/span&gt;
  &lt;span class=&quot;comment&quot;&gt;//&lt;/span&gt;
  t = time(NULL);

  &lt;span class=&quot;comment&quot;&gt;//&lt;/span&gt;
  &lt;span class=&quot;comment&quot;&gt;// mostra na tela, formatado&lt;/span&gt;
  &lt;span class=&quot;comment&quot;&gt;//&lt;/span&gt;
  print_time(t);

  &lt;span class=&quot;comment&quot;&gt;//&lt;/span&gt;
  &lt;span class=&quot;comment&quot;&gt;// pega o fuso horário da máquina para pegar o horário local&lt;/span&gt;
  &lt;span class=&quot;comment&quot;&gt;// ao invés de GMT. &lt;/span&gt;
  &lt;span class=&quot;comment&quot;&gt;//&lt;/span&gt;
  long timezone;

  _tzset(); &lt;span class=&quot;comment&quot;&gt;// carrega as configurações de fuso&lt;/span&gt;

  _get_timezone(&amp;timezone); &lt;span class=&quot;comment&quot;&gt;// lê a diferença do fuso&lt;/span&gt;

  cout &lt;&lt; timezone &lt;&lt; endl;

  &lt;span class=&quot;comment&quot;&gt;//&lt;/span&gt;
  &lt;span class=&quot;comment&quot;&gt;// ajusta o horário pelo fuso&lt;/span&gt;
  &lt;span class=&quot;comment&quot;&gt;//&lt;/span&gt;
  t -= timezone;

  print_time(t);

  &lt;span class=&quot;comment&quot;&gt;//&lt;/span&gt;
  &lt;span class=&quot;comment&quot;&gt;// avança da data em 2 dias&lt;/span&gt;
  &lt;span class=&quot;comment&quot;&gt;//&lt;/span&gt;
  t += 48 * 60 * 60;

  &lt;span class=&quot;comment&quot;&gt;//&lt;/span&gt;
  &lt;span class=&quot;comment&quot;&gt;// mostra novamente&lt;/span&gt;
  &lt;span class=&quot;comment&quot;&gt;//&lt;/span&gt;
  print_time(t);

  &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; 0;
}



&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Esse código foi feito no Visual C++ (Windows). Existem pequenas diferenças nos nomes das funções no Linux, mas o conceito é o mesmo. Consulte sua documentação preferida para detalhes específicos.&lt;p&gt;&lt;b&gt;&lt;a href=&quot;http://www.1bit.com.br/content.1bit/weblog/ccpp_medindo_tempo_time#comments&quot;&gt;1 comentário(s)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;</description><pubDate>Wed, 16 Dec 2009 19:09:33 GMT</pubDate></item></channel>
</rss>