<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" xml:lang="en-US">
  <title>Mobits - Blog</title>
  <id>tag:www.mobits.com.br,2009:mephisto/blog</id>
  <generator uri="http://mephistoblog.com" version="0.8.0">Mephisto Drax</generator>
  
  <link href="http://www.mobits.com.br/blog" rel="alternate" type="text/html" />
  <updated>2009-11-09T18:44:34Z</updated>
  <link rel="self" href="http://feeds.feedburner.com/Mobits-Blog" type="application/atom+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry xml:base="http://www.mobits.com.br/">
    <author>
      <name>Quintana</name>
    </author>
    <id>tag:www.mobits.com.br,2009-11-09:306</id>
    <published>2009-11-09T18:43:00Z</published>
    <updated>2009-11-09T18:44:34Z</updated>
    <category term="Blog" />
    <category term="ads" />
    <category term="android" />
    <category term="iphone" />
    <link href="http://feedproxy.google.com/~r/Mobits-Blog/~3/g-euSDGDWyw/google-comprara-admob" rel="alternate" type="text/html" />
    <title>Google comprará AdMob</title>
<content type="html">
            &lt;p&gt;A &lt;a href="http://www.admob.com/"&gt;AdMob&lt;/a&gt;, uma das maiores plataformas de anúncios móveis &lt;a href="http://www.admob.com/google"&gt;anunciou hoje&lt;/a&gt; para seus clientes e parceiros que assinou um acordo definitivo onde será adquirida pela &lt;a href="http://www.google.com"&gt;Google&lt;/a&gt; por US$ 750 milhões. &lt;/p&gt;

&lt;p&gt;&lt;img title="Ad Mob" src="http://www.mobits.com.br/assets/2009/11/9/ad_mob_logo_header.gif" alt="Ad Mob" /&gt; &lt;/p&gt;

&lt;p&gt;A &lt;a href="http://www.admob.com/"&gt;AdMob&lt;/a&gt; é conhecida pelos usuários de iPhone, pois diversos aplicativos, como o nosso &lt;a href="http://cine.mobits.com.br/"&gt;Cine Mobits&lt;/a&gt;, utilizam a sua plataforma de propaganda para viabilizar sua gratuidade. Ela também disponibiliza propagandas para outras plataformas, como o &lt;a href="http://www.android.com"&gt;Android&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;A &lt;a href="http://www.google.com"&gt;Google&lt;/a&gt; &lt;a href="http://adsense.blogspot.com/2007/09/here-comes-mobile.html"&gt;já havia anunciado&lt;/a&gt; a sua entrada no mercado de anúncios para dispositivos móveis, portando o Google Ads para o &lt;a href="http://www.apple.com/iphone"&gt;iPhone&lt;/a&gt; e o &lt;a href="http://www.google.com/android"&gt;Android&lt;/a&gt;. Mas, como sabemos, a &lt;a href="http://www.google.com"&gt;Google&lt;/a&gt; nunca entra para ser mais um no mercado, ela quer sempre ser a maior. A compra da &lt;a href="http://www.admob.com/"&gt;AdMob&lt;/a&gt; certamente a consolidará como a maior &lt;em&gt;player&lt;/em&gt; desse mercado.&lt;/p&gt;

&lt;p&gt;Nós que utilizamos a plataforma da &lt;a href="http://www.admob.com/"&gt;AdMob&lt;/a&gt; acreditamos que haverá melhorias com a maior oferta de anúncios do &lt;a href="http://www.google.com"&gt;Google&lt;/a&gt;, podendo levar anúncios aos nossos aplicativos que sejam mais adaptados ao conteúdo do mesmo. &lt;/p&gt;

&lt;p&gt;Leia também:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="http://www.mobits.com.br/2009/10/7/flash-no-iphone"&gt;Flash no iPhone?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.mobits.com.br/2009/10/15/venda-de-conteudo-dentro-de-apps-gratuitas"&gt;Venda de conteúdo dentro de Apps Gratuitas&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
          &lt;img src="http://feeds.feedburner.com/~r/Mobits-Blog/~4/g-euSDGDWyw" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://www.mobits.com.br/2009/11/9/google-comprara-admob</feedburner:origLink></entry>
  <entry xml:base="http://www.mobits.com.br/">
    <author>
      <name>Karin</name>
    </author>
    <id>tag:www.mobits.com.br,2009-11-05:304</id>
    <published>2009-11-05T20:19:00Z</published>
    <updated>2009-11-05T20:22:30Z</updated>
    <category term="Blog" />
    <category term="cinemobits" />
    <category term="nokia" />
    <link href="http://feedproxy.google.com/~r/Mobits-Blog/~3/iCPPoZEBHaQ/como-retirar-o-joystick-do-cine-mobits-do-seu-nokia" rel="alternate" type="text/html" />
    <title>Como retirar o joystick do Cine Mobits do seu Nokia</title>
<content type="html">
            &lt;p&gt;Olá pessoal,&lt;/p&gt;

&lt;p&gt;com o lançamento da última versão do Cine Mobits Java, muitos usuários de celulares Nokia touch têm perguntado o porquê de aparecer um &lt;em&gt;joystick&lt;/em&gt; quando iniciado o Cine Mobits. Então eis a resposta!&lt;/p&gt;

&lt;p&gt;Nos novos celulares Nokia touch (como Nokia 5800, N97), a configuração para que apareça o &lt;em&gt;joystick&lt;/em&gt; em aplicativos é padrão. Porém, há uma forma de alterar para que não apareça mais. Só deixar claro que isso é uma configuração por aplicativo, pois uns podem precisar do &lt;em&gt;joystick&lt;/em&gt;, enquanto outros não, como no caso do Cine Mobits.&lt;/p&gt;

&lt;p&gt;
  &lt;img src="http://www.mobits.com.br/assets/2009/11/5/joystick.jpg" alt="Exemplo de joystick" /&gt;
&lt;/p&gt;

&lt;p&gt;Então segue como alterar a configuração: &lt;br /&gt;
Menu -&gt; Settings -&gt; Application mgr -&gt; Installed apps -&gt; CineMobits - &gt; Options -&gt; Suite settings -&gt; On-screen keyboard&lt;/p&gt;

&lt;p&gt;Só atentem que para celulares em que a língua é em português, o passo-a-passo é o mesmo, porém traduzido para português!&lt;/p&gt;

&lt;p&gt;Pronto! Agora você verá que quando iniciado o Cine Mobits não terá mais o &lt;em&gt;joystick&lt;/em&gt; aparecendo.&lt;/p&gt;

&lt;p&gt;Aproveitem o Cine Mobits :)&lt;/p&gt;
          &lt;img src="http://feeds.feedburner.com/~r/Mobits-Blog/~4/iCPPoZEBHaQ" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://www.mobits.com.br/2009/11/5/como-retirar-o-joystick-do-cine-mobits-do-seu-nokia</feedburner:origLink></entry>
  <entry xml:base="http://www.mobits.com.br/">
    <author>
      <name>Felipe Barreto</name>
    </author>
    <id>tag:www.mobits.com.br,2009-10-21:290</id>
    <published>2009-10-21T12:55:00Z</published>
    <updated>2009-10-21T12:57:13Z</updated>
    <category term="Blog" />
    <category term="Notícias" />
    <category term="ejcm" />
    <category term="eventos" />
    <category term="seti" />
    <category term="ufrj" />
    <link href="http://feedproxy.google.com/~r/Mobits-Blog/~3/EXkf1keSXx0/seti-2009-semana-de-tecnologia-e-inovao-na-ufrj" rel="alternate" type="text/html" />
    <title>SETI 2009: Semana de Tecnologia e Inovação na UFRJ</title>
<summary type="html">&lt;p&gt;Evento adiado para Novembro! Não perca!&lt;/p&gt;</summary><content type="html">
            &lt;p&gt;Evento adiado para Novembro! Não perca!&lt;/p&gt;
&lt;p&gt;A &lt;a href="http://www.ejcm.com.br" title="Empresa Júnior de Consultoria em Microinformática da UFRJ"&gt;EJCM&lt;/a&gt; está organizando a &lt;a href="http://seti.ejcm.com.br/" title="Semana de Tecnlogia e Inovação"&gt;SETI&lt;/a&gt;, Semana de Tecnologia e Inovação, que vai trazer palestras de representantes de empresas como &lt;strong&gt;Google&lt;/strong&gt;, &lt;strong&gt;Microsoft&lt;/strong&gt;, &lt;strong&gt;Yahoo&lt;/strong&gt;, &lt;strong&gt;Globo.com&lt;/strong&gt;, entre outros. As palestras serão distribuidas em dois dias, &lt;span class="disabled"&gt;&lt;strong&gt;26 e 27 de Outubro&lt;/strong&gt;&lt;/span&gt; &lt;strong&gt;UPDATE: 17 e 18 de Novembro&lt;/strong&gt; e as inscrições são &lt;strong&gt;gratuitas&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Se você estiver no Rio nos dias do evento e conseguir aquela folga no trabalho, não perca a oportunidade de assistir às palestras, que vão abordar, entre outros assuntos, &lt;strong&gt;Desenvolvimento Ágil&lt;/strong&gt;, &lt;strong&gt;Projetos inovadores&lt;/strong&gt; e &lt;strong&gt;casos de sucesso&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://seti.ejcm.com.br/" title="Semana de Tecnlogia e Inovação"&gt;&lt;img title="SETI 2009, saiba mais e não perca" src="http://www.ejcm.com.br/banner-email.jpg" alt="SETI 2009, saiba mais e não perca" /&gt;&lt;/a&gt;&lt;/p&gt;
          &lt;img src="http://feeds.feedburner.com/~r/Mobits-Blog/~4/EXkf1keSXx0" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://www.mobits.com.br/2009/10/21/seti-2009-semana-de-tecnologia-e-inovao-na-ufrj</feedburner:origLink></entry>
  <entry xml:base="http://www.mobits.com.br/">
    <author>
      <name>Karin</name>
    </author>
    <id>tag:www.mobits.com.br,2009-10-20:183</id>
    <published>2009-10-20T16:27:00Z</published>
    <updated>2009-10-20T16:28:14Z</updated>
    <category term="Blog" />
    <category term="corporativo" />
    <category term="iphone" />
    <category term="módulo" />
    <category term="workflow manager" />
    <link href="http://feedproxy.google.com/~r/Mobits-Blog/~3/T5oprCEYEWg/mobits-desenvolve-mais-um-aplicativo-para-a-mdulo" rel="alternate" type="text/html" />
    <title>Mobits desenvolve mais um aplicativo para a Módulo</title>
<content type="html">
            &lt;p&gt;A Mobits acaba de desenvolver mais um aplicativo para iPhone: Módulo Workflow Manager. Ele também faz parte do pacote &lt;a href="http://www.mobits.com.br/2008/10/24/mobits-desenvolve-software-para-a-mdulo-no-iphone"&gt;Módulo Risk Manager&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;A partir da coleta de informações que ocorre no Risk Manager e o conhecimento dos riscos que permeiam a organização que está sendo avaliada, o passo seguinte é o tratamento destes riscos, que ocorre por meio do Workflow Manager. Esse tratamento é possível através da criação de eventos e o acompanhamento dos mesmos.&lt;/p&gt;

&lt;p&gt;No Workflow Manager web, os eventos detêm vários atributos, porém somente os pré-requisitos são cadastrados no iPhone para facilitar a entrada de dados, pois sabemos que digitar é algo custoso em dispositivos móveis. Como no &lt;a href="http://www.mobits.com.br/2008/10/24/mobits-desenvolve-software-para-a-mdulo-no-iphone"&gt;Módulo Risk Manager&lt;/a&gt; para iPhone, no Módulo Workflow Manager há a adição de fotos, áudio e localização GPS para cada evento.&lt;/p&gt;

&lt;p&gt;
  &lt;img src="http://www.mobits.com.br/assets/2009/7/7/Workflow_para_artigo_mobits.jpg" alt="Módulo Workflow Manager" /&gt;
&lt;/p&gt;

&lt;p&gt;Espero em breve escrever mais um post sobre o Módulo Workflow Manager para iPhone, contando onde este aplicativo está sendo utilizado. Aguardem!&lt;/p&gt;

&lt;p&gt;Leia também:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="http://www.mobits.com.br/2009/4/29/risk-manager-iphone-na-mdia"&gt;Módulo Risk Manager iPhone na mídia!&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.mobits.com.br/2008/10/24/mobits-desenvolve-software-para-a-mdulo-no-iphone"&gt;Mobits desenvolve software corporativo para o iPhone&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
          &lt;img src="http://feeds.feedburner.com/~r/Mobits-Blog/~4/T5oprCEYEWg" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://www.mobits.com.br/2009/10/20/mobits-desenvolve-mais-um-aplicativo-para-a-mdulo</feedburner:origLink></entry>
  <entry xml:base="http://www.mobits.com.br/">
    <author>
      <name>Felipe Barreto</name>
    </author>
    <id>tag:www.mobits.com.br,2009-10-15:291</id>
    <published>2009-10-15T22:06:00Z</published>
    <updated>2009-10-15T22:07:42Z</updated>
    <category term="Blog" />
    <category term="app store" />
    <category term="apple" />
    <category term="in app purchase" />
    <link href="http://feedproxy.google.com/~r/Mobits-Blog/~3/H6pSqNYCPs4/venda-de-conteudo-dentro-de-apps-gratuitas" rel="alternate" type="text/html" />
    <title>Venda de conteúdo dentro de Apps Gratuitas</title>
<content type="html">
            &lt;p&gt;Até que enfim!&lt;/p&gt;

&lt;p&gt;&lt;a href="http://developer.apple.com/iphone/appstore/inapppurchase.html"&gt;&lt;img src="http://www.mobits.com.br/assets/2009/10/15/Picture_28.png" alt="In App Purchase for Free Apps" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A Apple decidiu liberar o chamado &lt;em&gt;&lt;a href="http://developer.apple.com/iphone/appstore/inapppurchase.html"&gt;In App Purchase&lt;/a&gt;&lt;/em&gt; para aplicações gratuitas. Inicialmente, a venda de conteúdo extra era permitida somente em aplicações pagas, mas agora, com esta decisão da Apple, poderemos esperar o fim das aplicações &lt;strong&gt;lite&lt;/strong&gt; e o começo das tão solicitadas aplicações &lt;strong&gt;demo&lt;/strong&gt; (&lt;a href="http://www.polarbearfarm.com/blog/?p=79"&gt;1&lt;/a&gt;, &lt;a href="http://sdkfeedback.mobileorchard.com/pages/21612-iphone-sdk/suggestions/234447-support-in-app-purchase-within-free-apps"&gt;2&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Agora, o desenvolvedor pode criar uma aplicação completa, mas &lt;strong&gt;restringir o acesso&lt;/strong&gt; a determinadas funcionalidades e distribuí-la de modo gratuito na App Store. Se o cliente quiser adquirir as funcionalidades, poderá, de dentro da própria aplicação, comprá-las e ativá-las.&lt;/p&gt;

&lt;p&gt;Isto também abre portas para novos modelos de negócio. Uma app gratuita é, normalmente, dezenas de vezes mais baixadas que qualquer app paga e o desenvolvedor poderá explorar isso para lançar aplicações completas gratuitas atingindo um número de clientes maior, mas ao mesmo tempo disponibilizar sua loja interna para vender &lt;strong&gt;conteúdo, créditos, fases, armas, equipamentos e muito mais&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Arrisco-me a dizer que esse mecanismo poderia ser mais uma arma contra a &lt;strong&gt;pirataria&lt;/strong&gt;. Se cada desenvolvedor elaborar a sua maneira de destravar funcionalidades, &lt;em&gt;crackear&lt;/em&gt; apps irá requerer mais trabalho do que é preciso hoje.&lt;/p&gt;

&lt;p&gt;Podemos esperar boas novidades depois desta notícia. Pelo menos a &lt;strong&gt;Mobits&lt;/strong&gt; já está planejando os modos de explorar esta oportunidade ;)&lt;/p&gt;
          &lt;img src="http://feeds.feedburner.com/~r/Mobits-Blog/~4/H6pSqNYCPs4" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://www.mobits.com.br/2009/10/15/venda-de-conteudo-dentro-de-apps-gratuitas</feedburner:origLink></entry>
  <entry xml:base="http://www.mobits.com.br/">
    <author>
      <name>Quintana</name>
    </author>
    <id>tag:www.mobits.com.br,2009-10-08:286</id>
    <published>2009-10-08T16:32:00Z</published>
    <updated>2009-10-08T17:13:59Z</updated>
    <category term="Blog" />
    <category term="iphone" />
    <category term="sdk" />
    <link href="http://feedproxy.google.com/~r/Mobits-Blog/~3/YaemSTt3sM4/dica-de-como-obter-o-numero-do-iphone-por-um-aplicativo" rel="alternate" type="text/html" />
    <title>Dica: como obter o número do iPhone através de um aplicativo</title>
<content type="html">
            &lt;p&gt;Pois é.. a primeira vista pode parecer estranho, mas desde o firmware 2.1 existe uma brecha no iPhone SDK que possibilita que o número do telefone seja obtido por um aplicativo. Fiquei sabendo quando li &lt;a href="http://macmagazine.uol.com.br/2009/09/29/desenvolvedores-para-iphone-podem-obter-o-numero-de-telefone-do-usuario-sem-autorizacao/"&gt;esse post no MacMagazine&lt;/a&gt; que diz que desenvolvedores mal intencionados estavam enviando telefones dos seus usuários para depois incomodá-los com ligações de marketing.&lt;/p&gt;

&lt;p&gt;Não satisfeito, resolvi procurar na internet e achei o código para obter o número do telefone:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;id number = [[NSUserDefaults standardUserDefaults] objectForKey:@”SBFormattedPhoneNumber”];

NSLog(@”user phone number is %@”, number);
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Testando no iPhone 3G com firmware 3.1 e chip da operadora Claro, obtive o número do meu telefone com o seguinte formato: 5555-5555, sem o código do país e o DDD. Contudo, vi em algumas referências como &lt;a href="http://www.alexcurylo.com/blog/2008/11/15/snippet-phone-number/"&gt;esta&lt;/a&gt;, que quando esse método é usado em iPhones com chips americanos, ele retorna um número assim 1 (555) 555-5555... ainda vou testar em outras operadoras.&lt;/p&gt;

&lt;p&gt;De qualquer forma, fica a dica. Não sei se ela servirá para alguma coisa útil, mas a primeira ideia que eu tive foi mandar para um servidor o número dos celulares das pessoas que pirateiam aplicativos, heheheh. Usando métodos anti-cracking &lt;a href="http://www.blogdoiphone.com/2009/09/desenvolvedores-aplicam-sistema-anticrack-em-seus-aplicativos-de-forma-barata-e-eficiente/"&gt;como esse&lt;/a&gt;, seria possível identificar esses usuários e depois poder ligar dizendo: "Olá, eu sou o desenvolvedor do aplicativo que você pirateou, tudo bom?". Que acham da ideia?&lt;/p&gt;

&lt;p&gt;Leia também:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="http://www.mobits.com.br/2009/9/16/acessando-a-lista-de-contatos-do-iphone-dentro-da-sua-app"&gt;Acessando a lista de contatos do iPhone dentro da sua app&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.mobits.com.br/2009/9/1/envio-de-sms-java-me-x-iphone-os"&gt;Envio de SMS: Java ME x iPhone OS&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.mobits.com.br/2009/4/30/saiba-como-customizar-sua-uitableview-2"&gt;Saiba como customizar sua UITableView&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
          &lt;img src="http://feeds.feedburner.com/~r/Mobits-Blog/~4/YaemSTt3sM4" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://www.mobits.com.br/2009/10/8/dica-de-como-obter-o-numero-do-iphone-por-um-aplicativo</feedburner:origLink></entry>
  <entry xml:base="http://www.mobits.com.br/">
    <author>
      <name>Hildi</name>
    </author>
    <id>tag:www.mobits.com.br,2009-10-07:280</id>
    <published>2009-10-07T00:55:00Z</published>
    <updated>2009-10-07T00:56:32Z</updated>
    <category term="Blog" />
    <category term="flash" />
    <category term="iphone" />
    <link href="http://feedproxy.google.com/~r/Mobits-Blog/~3/q_OZ7J-W6a0/flash-no-iphone" rel="alternate" type="text/html" />
    <title>Flash no iPhone?</title>
<content type="html">
            &lt;p&gt;A resposta é não, pelo menos não o Flash Player. A &lt;a href="http://www.apple.com"&gt;Apple&lt;/a&gt; ainda se nega a permitir que a Adobe construa um player para seu navegador. Como a Adobe não poderia simplesmente aceitar esse obstáculo, afinal o Flash está largamente presente nos jogos online de hoje, ela está desenvolvendo uma outra alternativa.&lt;/p&gt;

&lt;p&gt;Recentemente, foi divulgado no &lt;a href="http://labs.adobe.com/technologies/flashcs5/appsfor_iphone/"&gt;Adobe Labs&lt;/a&gt; que com o Flash Professional CS5 será possível compilar sua aplicação em ActionScript 3 para o iPhone OS. Assim, o desenvolvedor poderá disponibilizar seu aplicativo na própria App Store!&lt;/p&gt;

&lt;p&gt;&lt;img title="Flash no iPhone?" src="http://www.mobits.com.br/assets/2009/10/6/flash_iphone.jpg" alt="Flash no iPhone?" /&gt;&lt;/p&gt;

&lt;p&gt;Imagino que terá bastante limitações, porque desenvolver algo dessa forma não dá pra usufruir completamente dos recursos existentes na linguagem nativa. Mas não posso negar que isso representa uma enorme facilidade para aqueles que já trabalham com Flash, pois assim poderão criar também para o iPhone/iPod Touch - que é um mercado em pleno crescimento.
Além disso, penso em uma outra questão. Para desenvolver uma aplicação para iPhone só é possível com um Mac. Será que com a nova aposta da Adobe será possível desenvolver usando o Windows?  &lt;/p&gt;

&lt;p&gt;Para quem se animou, a Adobe promete lançar a versão beta do Flash Professional CS5 no final deste ano. 
Para quem quer ver um exemplo na prática, a Adobe mostrou alguns &lt;a href="http://labs.adobe.com/technologies/flashcs5/appsfor_iphone/#examples"&gt;jogos&lt;/a&gt; já disponíveis na loja da Apple.&lt;/p&gt;

&lt;p&gt;Até a próxima, pessoal!&lt;/p&gt;

&lt;p&gt;update: Hoje enquanto fazia o post para o blog, perguntei para a @adobeflash se daria para desenvolver com o Flash para iPhone usando o Windows. O gerente de marketing de produto do Flash Adobe Professional,  Jonathan Wall (@jwall), me respondeu que sim! Ou seja, vamos aguardar o fim do ano para conferir! ;)&lt;/p&gt;
          &lt;img src="http://feeds.feedburner.com/~r/Mobits-Blog/~4/q_OZ7J-W6a0" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://www.mobits.com.br/2009/10/7/flash-no-iphone</feedburner:origLink></entry>
  <entry xml:base="http://www.mobits.com.br/">
    <author>
      <name>Karin</name>
    </author>
    <id>tag:www.mobits.com.br,2009-10-02:275</id>
    <published>2009-10-02T19:27:00Z</published>
    <updated>2009-10-02T19:37:38Z</updated>
    <category term="Blog" />
    <category term="Notícias" />
    <category term="mobits button soccer" />
    <category term="promoção" />
    <category term="rio2016" />
    <link href="http://feedproxy.google.com/~r/Mobits-Blog/~3/ElMqnyfm6P0/mais-uma-promoo-do-mobits-button-soccer-somente-hoje" rel="alternate" type="text/html" />
    <title>Mais uma promoção do Mobits Button Soccer. Somente hoje!</title>
<summary type="html">&lt;p&gt;Dois motivos para comemorar: 1 ano da Mobits e a vitória da campanha Rio 2016. Todo mundo sai ganhando!&lt;/p&gt;</summary><content type="html">
            &lt;p&gt;Dois motivos para comemorar: 1 ano da Mobits e a vitória da campanha Rio 2016. Todo mundo sai ganhando!&lt;/p&gt;
&lt;p&gt;Não perca! Como o Rio de Janeiro foi a cidade escolhida para sediar os Jogos Olímpicos de 2016, para comemorar, a Mobits decidiu fazer uma promoção do jogo. Corra, MBS por $0,99.&lt;/p&gt;

&lt;p&gt;A promoção ficará no ar &lt;strong&gt;somente hoje&lt;/strong&gt;, então não dê bobeira!&lt;/p&gt;

&lt;p&gt;Aproveito para avisar que já estamos devenvolvendo a &lt;strong&gt;próxima versão&lt;/strong&gt; do jogo a partir das sugestões de todos os usuários. As mudanças previstas para entrar são:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Inteligencia Artificial&lt;/li&gt;
&lt;li&gt;Escolha de times&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Fiquem ligados no nosso twitter (&lt;a href="http://twitter.com/futeboldebotao"&gt;@futeboldebotao&lt;/a&gt;) para saber mais detalhes.&lt;/p&gt;
          &lt;img src="http://feeds.feedburner.com/~r/Mobits-Blog/~4/ElMqnyfm6P0" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://www.mobits.com.br/2009/10/2/mais-uma-promoo-do-mobits-button-soccer-somente-hoje</feedburner:origLink></entry>
  <entry xml:base="http://www.mobits.com.br/">
    <author>
      <name>Afonso Junior</name>
    </author>
    <id>tag:www.mobits.com.br,2009-10-02:276</id>
    <published>2009-10-02T17:30:00Z</published>
    <updated>2009-10-06T21:59:12Z</updated>
    <category term="Blog" />
    <category term="Notícias" />
    <category term="mobits" />
    <link href="http://feedproxy.google.com/~r/Mobits-Blog/~3/fKy2vL_UZZE/mobits-completa-um-ano-de-vida" rel="alternate" type="text/html" />
    <title>Mobits completa um ano de vida!</title>
<summary type="html">&lt;p&gt;Parabéns!&lt;/p&gt;</summary><content type="html">
            &lt;p&gt;Parabéns!&lt;/p&gt;
&lt;p&gt;Se hoje, dia 2 de outubro, &lt;a href="http://globoesporte.globo.com/Esportes/Noticias/Olimpiadas/0,,MUL1327272-17698,00-RIO+TRANSFORMA+O+SONHO+OLIMPICO+EM+REALIDADE+E+CONQUISTA+OS+JOGOS+DE.html"&gt;a cidade do Rio de Janeiro comemora a eleição para sede das Olimpíadas de 2016&lt;/a&gt;, a Mobits está duplamente em festa: ontem comemoramos o nosso primeiro aniversário.&lt;/p&gt;

&lt;p&gt;Como balanço, &lt;a href="http://www.mobits.com.br/projetos"&gt;dois produtos&lt;/a&gt;, &lt;a href="http://www.mobits.com.br/projetos"&gt;quatro grandes projetos&lt;/a&gt;, e o esforço de seguir à risca &lt;a href="http://www.mobits.com.br/quem-somos"&gt;a nossa missão:&lt;/a&gt; ouvir nossos clientes para alcançar a satisfação daqueles que usam os nossos produtos.&lt;/p&gt;

&lt;p&gt;É isso aí, pessoal, que mais e mais anos da Mobits venham! Parabéns para nós todos!&lt;/p&gt;

&lt;p&gt;Leia também:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="http://www.mobits.com.br/2009/10/2/mais-uma-promoo-do-mobits-button-soccer-somente-hoje"&gt;Promoção: Mobits Button Soccer a preço promocional em comemoração da escolha do Rio de Janeiro como sede das Olimpíadas de 2016&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.mobits.com.br/2009/9/8/mobits-no-dirio-do-comrcio"&gt;Mobits no Diário do Comércio&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.mobits.com.br/2009/8/24/mobits-button-soccer-no-globo"&gt;Mobits Button Soccer no jornal O Globo&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
          &lt;img src="http://feeds.feedburner.com/~r/Mobits-Blog/~4/fKy2vL_UZZE" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://www.mobits.com.br/2009/10/2/mobits-completa-um-ano-de-vida</feedburner:origLink></entry>
  <entry xml:base="http://www.mobits.com.br/">
    <author>
      <name>Afonso Junior</name>
    </author>
    <id>tag:www.mobits.com.br,2009-09-24:270</id>
    <published>2009-09-24T17:40:00Z</published>
    <updated>2009-09-24T17:35:39Z</updated>
    <category term="Blog" />
    <category term="mvc" />
    <category term="windows mobile" />
    <link href="http://feedproxy.google.com/~r/Mobits-Blog/~3/cTGT2r8ntro/programando-para-windows-mobile-usando-mvc-e-delegates-parte-2" rel="alternate" type="text/html" />
    <title>Programando para Windows Mobile usando MVC e Delegates - Parte 2</title>
<content type="html">
            &lt;p&gt;Continuando o &lt;a href="http://www.mobits.com.br/2009/8/5/programando-para-windows-mobiles-usando-mvc-e-delegates"&gt;post&lt;/a&gt; sobre a utilização de MVC em um projeto para Windows Mobile no Visual Studio 2008, falaremos agora como lançar mão dos eventos para poder completar o padrão.&lt;/p&gt;

&lt;p&gt;De acordo com algumas literaturas, a implementação do padrão MVC especifica que o modelo notifique a &lt;em&gt;view&lt;/em&gt; em caso de alterações, de forma que os dados exibidos na &lt;em&gt;view&lt;/em&gt; sejam atualizados.&lt;/p&gt;

&lt;p&gt;&amp;lt;center&gt;&lt;img src="http://www.mobits.com.br/assets/2009/9/22/MVC.gif" alt="Diagrama do modelo MVC" /&gt;&amp;lt;/center&gt;&lt;/p&gt;

&lt;p&gt;Para fazer essa notificação, vamos ampliar um pouco mais o conceito de &lt;em&gt;delegates&lt;/em&gt;, passado &lt;a href="http://www.mobits.com.br/2009/8/5/programando-para-windows-mobiles-usando-mvc-e-delegates"&gt;no primeiro post&lt;/a&gt;, e utilizar também eventos.&lt;/p&gt;

&lt;p&gt;Na verdade, para os mais atentos, o conceito de evento já foi utilizado no post anterior, quando eu criei o seguinte método na &lt;em&gt;view&lt;/em&gt; para adicionar um &lt;em&gt;delegate&lt;/em&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;public void AddSalvarClick(ViewEventsDelegate metodo) {
    BtnSalvar.Click += new EventHandler(metodo);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Estávamos na verdade dizendo que o evento &lt;em&gt;Click&lt;/em&gt; do botão &lt;em&gt;BtnSalvar&lt;/em&gt; iria acionar o método passado por ele por parâmetro. Assim, fica mais fácil entender o funcionamento de um evento:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Os eventos são os "gatilhos" para os &lt;em&gt;delegates&lt;/em&gt;&lt;/strong&gt;: quando um evento é chamado, os métodos adicionados a ele são chamados;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Os eventos não aceitam qualquer tipo de &lt;em&gt;delegate&lt;/em&gt;&lt;/strong&gt;: ao declarar um evento, você deve especificar qual o tipo de &lt;em&gt;delegate&lt;/em&gt; está associado a ele. De uma forma direta, isso implica dizer que os eventos só aceitam os métodos com a assinatura especificada na declaração do &lt;em&gt;delegate&lt;/em&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Voltemos ao nosso exemplo. Como disse acima, a implementação do padrão em camadas pede a notificação da &lt;em&gt;view&lt;/em&gt; em caso de alteração no modelo. Mas aqui é necessário pensar um pouco na forma como essa notificação vai ser feita, principalmente no que diz respeito ao modo como a informação a ser alterada será passada para a &lt;em&gt;view&lt;/em&gt;. Em alguns textos, ao notificar a &lt;em&gt;view&lt;/em&gt;, o objeto de modelo passa como parâmetro ele mesmo, e a &lt;em&gt;view&lt;/em&gt; pega então todos os valores do modelo e preenche. O problema que alguns podem ver aqui é o da &lt;a href="http://en.wikipedia.org/wiki/Coupling_(computer_science)"&gt;acoplagem&lt;/a&gt;, pois eu estaria prendendo a classe &lt;em&gt;view&lt;/em&gt; a um tipo específico de modelo. Uma solução alternativa seria criar notificações para várias alterações, passando então o valor (geralmente em tipos básicos como strings, inteiros, etc) só do que está sendo alterado.&lt;/p&gt;

&lt;p&gt;Não sou puritano, mas acho as duas abordagens válidas. A vantagem da segunda - além da baixa acoplagem - é reduzir para métodos pequenos a alteração do conteúdo. Tenho certo medo de métodos do tipo &lt;em&gt;AlteraTudo(object modelo)&lt;/em&gt;, por ter séria tendência a se tornar um método &lt;a href="http://pt.wikipedia.org/wiki/Frankenstein"&gt;frankenstein&lt;/a&gt;, difícil de dar manutenção.&lt;/p&gt;

&lt;p&gt;Vamos ao código! Em um exemplo fictício, onde tenho um sistema de venda de livros, um modelo óbvio seria um &lt;em&gt;Livro&lt;/em&gt;. Vou criar nesse exemplo um evento que trata a notificação da alteração do preço do livro. Quando o preço for alterado, ele notifica a todos aqueles que "assinaram" o evento.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;  namespace PostMVC {
      //declarando o delegate
      public delegate void PriceChangeDelegate(float price);

      class Book {

          //criando o evento
          private event PriceChangeDelegate OnPriceChange;

          //metodo que adiciona delegates ao evento do preco
          public void AddPriceChangeDelegate(PriceChangeDelegate priceDelegate) {
              OnPriceChange += priceDelegate;
          }

          //o atributo preco
          private float _price;

          // Get e Set do campo preço. Perceba que no set eu chamo o 
          //evento que sera executado por causa da alteracao feita
          public float Price {
              get { return _price; }
              set {
                  _price = value;
                  if (OnPriceChange != null)
                      OnPriceChange(value);
              }
          }
      }
  }
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Percebam a validação feita antes de executar o evento:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;  if (OnPriceChange != null)
        OnPriceChange(value);
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Um evento é nulo se nenhum &lt;em&gt;delegate&lt;/em&gt; está associado a ele. Agora, na &lt;em&gt;view&lt;/em&gt;, o código fica bem simples: basta adicionar um método que tenha a assinatura do &lt;em&gt;delegate&lt;/em&gt; especificada, que faça essa alteração:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;  public void AlteraPrecoNaTela(float preco) {
        //codigo que escreve na tela
  }
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;E no construtor também fica bem tranquila a implementação:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;  class BookController {
        private Book model;
        private BookPriceForm view;

        //construtor
        BookController() {
              model = new Book();
              view = new BookPriceForm();

              model.AddPriceChangeDelegate(view.AlteraPrecoNaTela);
        }
  }
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Com isso, o único que fica acoplado é o &lt;em&gt;controller&lt;/em&gt;, que é quem realmente tem que ter os modelos e as vistas.&lt;/p&gt;

&lt;p&gt;Dessa forma, você evita colocar o código todo no formulário, você traz a sua lógica de negócio para o controlador, seu código fica mais simples, mais fácil dar manutenção, e todos ficam felizes! :)&lt;/p&gt;

&lt;p&gt;Leia também:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.mobits.com.br/2009/8/5/programando-para-windows-mobiles-usando-mvc-e-delegates"&gt;Programando para Windows Mobile usando MVC e Delegates - Parte 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.mobits.com.br/2009/7/30/label-transparente-em-windows-mobile"&gt;Label transparente em Windows Mobile&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.mobits.com.br/2009/7/15/mobits-desenvolve-aplicativo-em-windows-mobile-para-petrobras"&gt;Mobits desenvolve mais um aplicativo em Windows Mobile&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
          &lt;img src="http://feeds.feedburner.com/~r/Mobits-Blog/~4/cTGT2r8ntro" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://www.mobits.com.br/2009/9/24/programando-para-windows-mobile-usando-mvc-e-delegates-parte-2</feedburner:origLink></entry>
  <entry xml:base="http://www.mobits.com.br/">
    <author>
      <name>Felipe Barreto</name>
    </author>
    <id>tag:www.mobits.com.br,2009-09-18:267</id>
    <published>2009-09-18T14:46:00Z</published>
    <updated>2009-09-18T14:50:01Z</updated>
    <category term="Blog" />
    <category term="iphone sdk" />
    <category term="orm" />
    <category term="performance" />
    <category term="sqlite persistent objects" />
    <link href="http://feedproxy.google.com/~r/Mobits-Blog/~3/slfQQCnU_mE/performance-do-sqlite-persistent-object" rel="alternate" type="text/html" />
    <title>Performance do SQLite Persistent Object</title>
<content type="html">
            &lt;p&gt;Da última vez que &lt;a href="http://www.mobits.com.br/2009/3/22/comparacao-entre-as-solucoes-orm-para-iphone"&gt;comparei as soluções ORM para iPhone&lt;/a&gt;, cheguei a conclusão de que o &lt;a href="http://code.google.com/p/sqlitepersistentobjects/"&gt;Sqlite Persistent Object - SPO&lt;/a&gt; era o mais indicado para o projeto que estávamos desenvolvendo. Agora, com o projeto concluído, observamos que a performance não estava adequada às necessidades do cliente e começamos a buscar soluções.&lt;/p&gt;

&lt;p&gt;Minha primeira idéia foi aproveitar a chegada do iPhone OS 3.0 e migrar do &lt;a href="http://code.google.com/p/sqlitepersistentobjects/"&gt;SPO&lt;/a&gt; para &lt;a href="http://developer.apple.com/IPhone/library/documentation/DataManagement/Conceptual/iPhoneCoreData01/index.html"&gt;Core Data&lt;/a&gt; imaginando que, por ser uma solução desenvolvida especificamente para a plataforma, seria bem mais eficiente. Contudo, após estudo da API, vi que a mudança seria um pouco mais complicada, pois ela usa um paradigma diferente da anterior e eu teria que mexer muito além das classes de modelo, possivelmente mexendo em todas as outras classes, controladores principalmente. Embora tenha coberto as classes de modelo com &lt;a href="http://www.mobits.com.br/2009/1/9/testes-no-iphone"&gt;testes unitários&lt;/a&gt;, achei que seria arriscado demais fazer a mudança estando tão próximo da entrada do sistema em produção. Decidi deixar essa idéia na gaveta e parti para tentar melhorar o que já estava implementado e em funcionamento.&lt;/p&gt;

&lt;h3&gt;Avaliando o tempo de cada atividade&lt;/h3&gt;

&lt;p&gt;Não faz sentido buscar melhorias na performance se você não tiver como saber se as modificações estão realmente influenciando no tempo de cada atividade. Para avaliar isso, existem &lt;a href="http://developer.apple.com/iphone/library/documentation/Xcode/Conceptual/iphone_development/140-Tunning_Applications/tunning_applications.html"&gt;algumas ferramentas&lt;/a&gt; disponíveis no Mac OS, como o &lt;a href="http://developer.apple.com/IPhone/library/documentation/DeveloperTools/Conceptual/InstrumentsUserGuide/Introduction/Introduction.html"&gt;Instruments&lt;/a&gt; e o &lt;a href="http://developer.apple.com/iPhone/library/documentation/DeveloperTools/Conceptual/SharkUserGuide/SelectingExecutiontoSampleorTrace/SelectingExecutiontoSampleorTrace.html#//apple_ref/doc/uid/TP40005233-CH13-SW19"&gt;Shark&lt;/a&gt;. Utilizando a segunda, consegui ter uma idéia clara de quais métodos estavam consumindo mais tempo da CPU através da análise de &lt;em&gt;Time Profile&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Mas para medir o tempo de uma atividade completa - que atravessa vários métodos, &lt;em&gt;threads&lt;/em&gt;, &lt;em&gt;callbacks&lt;/em&gt; - eu desenvolvi uma classe simples, porém eficaz, para calcular esses tempos. Uma classe que batizei de &lt;em&gt;Benchmark&lt;/em&gt; e que pode ser usada da seguinte maneira:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;- baixarLista {
    [Benchmark start:@"baixarLista"];
    ....
}

- exibirLista {
    .....
    [Benchmark finish:@"baixarLista"];
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;A saída seria algo parecido com:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;2009-09-17 13:52:49.729 MyAPP[876:20b] BENCHMARK: baixarLista started
2009-09-17 13:52:56.507 MyAPP[876:6b07] BENCHMARK: baixarLista: 6.777050s
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;As vantagens desta abordagem são:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;o código é pouco invasivo, pois você pode dar o &lt;em&gt;import&lt;/em&gt; do &lt;em&gt;Benchmark&lt;/em&gt; no &lt;em&gt;.pch&lt;/em&gt; e usar em todas as classes;&lt;/li&gt;
&lt;li&gt;permite o uso de &lt;em&gt;labels&lt;/em&gt; para identificar o &lt;em&gt;benchmark&lt;/em&gt;, o que permite realizar vários &lt;em&gt;benchmarks&lt;/em&gt; ao mesmo tempo sem se confundir;&lt;/li&gt;
&lt;li&gt;por utilizar somente métodos estáticos, permite que um &lt;em&gt;benchmark&lt;/em&gt; comece num método de uma classe e termine no de outra classe sem que seja necessário o compartilhamento de dados entre as classes.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;O código completo da classe você confere &lt;a href="http://www.mobits.com.br/assets/2009/9/17/Benchmark.zip"&gt;aqui&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;Identificando os gargalos&lt;/h3&gt;

&lt;p&gt;Depois de levantar o tempo gasto e os métodos mais custosos durante a execução de cada atividade, pude me concentrar em encontrar os pontos considerados gargalos e que eu poderia fazer alguma mudança.&lt;/p&gt;

&lt;h4&gt;Datas&lt;/h4&gt;

&lt;p&gt;O &lt;a href="http://code.google.com/p/sqlitepersistentobjects/"&gt;SPO&lt;/a&gt; armazena os campos de data como strings no banco e todas as operações de recuperação ou gravação passam por métodos de conversão definidos em &lt;em&gt;NSDate-SQLitePersistence.m&lt;/em&gt;. Analisando a saída do &lt;a href="http://developer.apple.com/iPhone/library/documentation/DeveloperTools/Conceptual/SharkUserGuide/SelectingExecutiontoSampleorTrace/SelectingExecutiontoSampleorTrace.html#//apple_ref/doc/uid/TP40005233-CH13-SW19"&gt;Shark&lt;/a&gt;, observei que estas conversões estavam tomando muito tempo de processamento e, para minha surpresa, a maior parte do tempo não era gasta com a conversão em si, mas com a instanciação da classe &lt;em&gt;NSDateFormatter&lt;/em&gt;. Para solucionar o problema, bastou declarar o formatador como &lt;strong&gt;estático&lt;/strong&gt; e instanciá-lo somente uma vez, criando uma espécie de &lt;em&gt;cache&lt;/em&gt;. Esta modificação já surtiu um grande efeito, pois a atividade que estava sendo trabalhada envolvia, de uma só vez, o download, gravação e exibição de uma lista de entidades que possuíam 3 campos de data cada uma.&lt;/p&gt;

&lt;h4&gt;Lista dinâmica de propriedades&lt;/h4&gt;

&lt;p&gt;Dentre vários métodos do &lt;a href="http://code.google.com/p/sqlitepersistentobjects/"&gt;SPO&lt;/a&gt;, são feitas chamadas ao método &lt;em&gt;propertiesWithEncodedTypes&lt;/em&gt; das entidades para obter um dicionário com todas suas propriedades e seus respectivos tipos. Esse método é relativamente custoso, pois esse dicionário é montado toda vez que o método é solicitado e, a cada busca por uma lista de entidades, podem ser feitas dezenas - ou centenas - de chamadas a este método.&lt;/p&gt;

&lt;p&gt;Mais uma vez, a solução foi simples: &lt;em&gt;cache&lt;/em&gt;. Depois da primeira chamada do método, o dicionário fica gravado numa variável estática que é consultada nas chamadas subsequentes. Resultado: mais um salto na performance.&lt;/p&gt;

&lt;h4&gt;Strings&lt;/h4&gt;

&lt;p&gt;As propriedades das entidades em Objective C são declaradas em &lt;em&gt;camelCase&lt;/em&gt;, enquanto as respectivas colunas do banco seguem uma &lt;em&gt;notação_com_underscores&lt;/em&gt; e para fazer essa conversão, o &lt;a href="http://code.google.com/p/sqlitepersistentobjects/"&gt;SPO&lt;/a&gt; define dois métodos em &lt;em&gt;NSString-SQLiteColumnName.m&lt;/em&gt;. Como nos casos anteriores, esses métodos são muito solicitados durante as atividades, mas eu consegui fazer uma estatística que mostrava em em mais de 80% dos casos a conversão era desnecessária, pois a propriedade tinha a mesma notação tanto no código quanto na base. A mudança neste caso foi simplesmente verificar antes se o nome já estava no formato certo e retorná-lo imediatamente. Outro salto na performance.&lt;/p&gt;

&lt;h3&gt;Conclusão&lt;/h3&gt;

&lt;p&gt;Com as mudanças acima e utilizando a classe de &lt;em&gt;benchmark&lt;/em&gt;, conseguir registrar melhoras de mais de 60% em diversas atividades do aplicativo. Registrei quedas, por exemplo, de 11 para 4 segundos, outras de 9 para 3.&lt;/p&gt;

&lt;p&gt;Fiquei muito satisfeito com o resultado, principalmente por não ter que encarar uma mudança profunda no mecanismo de armazenamento do aplicativo tão próximo da entrada em produção.&lt;/p&gt;

&lt;p&gt;Se você também utiliza o &lt;a href="http://code.google.com/p/sqlitepersistentobjects/"&gt;SQLite Persistent Objects&lt;/a&gt; na sua app, pode baixar o &lt;a href="http://www.mobits.com.br/assets/2009/9/17/melhoriaNaPerformance.patch"&gt;patch aqui&lt;/a&gt;.&lt;/p&gt;
          &lt;img src="http://feeds.feedburner.com/~r/Mobits-Blog/~4/slfQQCnU_mE" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://www.mobits.com.br/2009/9/18/performance-do-sqlite-persistent-object</feedburner:origLink></entry>
  <entry xml:base="http://www.mobits.com.br/">
    <author>
      <name>Karin</name>
    </author>
    <id>tag:www.mobits.com.br,2009-09-16:266</id>
    <published>2009-09-16T21:56:00Z</published>
    <updated>2009-09-16T21:59:44Z</updated>
    <category term="Blog" />
    <category term="iphone sdk" />
    <category term="lista de contato" />
    <link href="http://feedproxy.google.com/~r/Mobits-Blog/~3/4cWh_OhTP9w/acessando-a-lista-de-contatos-do-iphone-dentro-da-sua-app" rel="alternate" type="text/html" />
    <title>Acessando a lista de contatos do iPhone dentro da sua app</title>
<content type="html">
            &lt;p&gt;Olá pessoal!&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.mobits.com.br/2009/9/1/envio-de-sms-java-me-x-iphone-os"&gt;Depois que descobri que não mais poderia enviar SMS dentro da minha app&lt;/a&gt;, tive que mudar a funcionalidade que estava implementando para deixar de ser envio de SMS para ser de email. Mas eu não queria que este envio de email fosse feito fora da minha aplicação por meio do Mail App. Então decidi criar um formulário de email com a mesma facilidade de poder acessar a lista de contatos do iPhone e escoher o email de um contato já cadastrado.&lt;/p&gt;

&lt;p&gt;Pesquisando, achei a referência no &lt;a href="http://developer.apple.com/IPhone/library/documentation/ContactData/Conceptual/AddressBookProgrammingGuideforiPhone/200-QuickStart/QuickStart.html"&gt;iPhone Dev Center&lt;/a&gt; de como acessar a lista. Mas como sou legal, segue um exemplo.&lt;/p&gt;

&lt;p&gt;Primeiro, adicione um botão à sua &lt;em&gt;view&lt;/em&gt; e crie um método para este botão no &lt;em&gt;controller&lt;/em&gt;. Neste método, a tela de contatos será chamada e exibida:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;- (IBAction)clickAdicionaEmail:(id)sender {
ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init]; 
picker.peoplePickerDelegate = self;
[self presentModalViewController:picker animated:YES]; 
[picker release];   
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;A seguir, o &lt;em&gt;delegate&lt;/em&gt; da classe &lt;em&gt;ABPeoplePickerNavigationController&lt;/em&gt; deve ser implementado, conforme vemos abaixo:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;- (void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker { 
[self dismissModalViewControllerAnimated:YES]; 
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;O método acima é chamado quando a ação de exibir a lista de contatos é cancelada. No nosso exemplo, simplesmente a tela é fechada.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person {
return YES; 
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Este segundo é chamado após um contato da lista é selecionado. Acima, este método retorna YES porque quero selecionar uma informação do contato e não o próprio, ou seja, se fosse necessário somente o nome do contato, era só pegar esta informação e retornar NO no método.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier {
if (property == kABPersonEmailProperty) {
    CFTypeRef emails = ABRecordCopyValue(person, property);
    CFIndex indiceEmail = ABMultiValueGetIndexForIdentifier(emails, identifier);

    self.emailContato.text = (NSString *)ABMultiValueCopyValueAtIndex(emails, indiceEmail);
    [self dismissModalViewControllerAnimated:YES];
}

return NO;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Já o último é quando desejo selecionar um informação do contato, como, por exemplo, o email. No nosso caso, email é uma propriedade multivalorada, ou seja, o contato pode ter mais de um, por isso, precisamos saber exatamente qual queremos. No exemplo, qualquer email selecionado do contato é válido.&lt;/p&gt;

&lt;p&gt;Pronto! É assim que conseguimos selecionar email dos nossos contatos do iPhone na nossa app.&lt;/p&gt;

&lt;p&gt;Até a próxima :)&lt;/p&gt;

&lt;p&gt;Leia também:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="http://www.mobits.com.br/2009/9/1/envio-de-sms-java-me-x-iphone-os"&gt;Envio de SMS: Java ME x iPhone OS&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.mobits.com.br/2009/7/17/base64-encode-decode-para-iphone"&gt;Base64 encode/decode para iPhone&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.mobits.com.br/2009/4/30/saiba-como-customizar-sua-uitableview-2"&gt;Saiba como customizar sua UITableView&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
          &lt;img src="http://feeds.feedburner.com/~r/Mobits-Blog/~4/4cWh_OhTP9w" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://www.mobits.com.br/2009/9/16/acessando-a-lista-de-contatos-do-iphone-dentro-da-sua-app</feedburner:origLink></entry>
  <entry xml:base="http://www.mobits.com.br/">
    <author>
      <name>Hildi</name>
    </author>
    <id>tag:www.mobits.com.br,2009-09-08:265</id>
    <published>2009-09-08T21:41:00Z</published>
    <updated>2009-09-08T21:43:48Z</updated>
    <category term="Blog" />
    <category term="Notícias" />
    <category term="mobits" />
    <link href="http://feedproxy.google.com/~r/Mobits-Blog/~3/0tXHvj8nHf8/mobits-no-dirio-do-comrcio" rel="alternate" type="text/html" />
    <title>Mobits no Diário do Comércio</title>
<summary type="html">&lt;p&gt;Confira a matéria sobre a Mobits no Diário do Comércio!&lt;/p&gt;</summary><content type="html">
            &lt;p&gt;Confira a matéria sobre a Mobits no Diário do Comércio!&lt;/p&gt;
&lt;p&gt;A Mobits acabou de ganhar destaque na matéria do Diário do Comércio. Para conferir acesse: &lt;a href="http://www.dcomercio.com.br/Materia.aspx?id=26483&amp;amp;amp;canal=53"&gt;http://www.dcomercio.com.br/Materia.aspx?id=26483&amp;amp;canal=53&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ficamos muito felizes em ver nosso trabalho mais uma vez exposto na mídia!&lt;/p&gt;

&lt;h4&gt;Leia também&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="http://www.mobits.com.br/2009/8/24/mobits-button-soccer-no-globo"&gt;Mobits Button Soccer no O Globo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.mobits.com.br/2008/9/1/cine-mobits-na-mdia"&gt;Cine Mobits na mídia&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
          &lt;img src="http://feeds.feedburner.com/~r/Mobits-Blog/~4/0tXHvj8nHf8" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://www.mobits.com.br/2009/9/8/mobits-no-dirio-do-comrcio</feedburner:origLink></entry>
  <entry xml:base="http://www.mobits.com.br/">
    <author>
      <name>Felipe Barreto</name>
    </author>
    <id>tag:www.mobits.com.br,2009-09-05:264</id>
    <published>2009-09-05T12:00:00Z</published>
    <updated>2009-09-05T18:40:46Z</updated>
    <category term="Blog" />
    <category term="Notícias" />
    <category term="argentina" />
    <category term="brasil" />
    <category term="mobits button soccer" />
    <category term="promoção" />
    <link href="http://feedproxy.google.com/~r/Mobits-Blog/~3/E5V7L-ctMqQ/promocao-do-mobits-button-soccer" rel="alternate" type="text/html" />
    <title>Promoção do Mobits Button Soccer. Somente hoje!</title>
<summary type="html">&lt;p&gt;Promoção especial no dia de Brasil x Argentina! 50% de desconto! Aproveite e indique aos amigos!&lt;/p&gt;</summary><content type="html">
            &lt;p&gt;Promoção especial no dia de Brasil x Argentina! 50% de desconto! Aproveite e indique aos amigos!&lt;/p&gt;
&lt;p&gt;Não perca! Por causa do clássico internacional &lt;strong&gt;Brasil x Argentina&lt;/strong&gt; - que são os times disponíveis no &lt;a href="http://www.mobitsbuttonsoccer.com"&gt;MBS&lt;/a&gt; - a Mobits decidiu fazer uma promoção do jogo liberando-o por &lt;strong&gt;50% de desconto&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A promoção ficará no ar &lt;strong&gt;somente hoje&lt;/strong&gt;, então não dê bobeira!&lt;/p&gt;

&lt;p&gt;Aproveito para avisar que já estamos devenvolvendo a &lt;strong&gt;próxima versão&lt;/strong&gt; do jogo a partir das sugestões de todos os usuários. As mudanças previstas para entrar são:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Inteligencia Artificial&lt;/li&gt;
&lt;li&gt;Escolha de times&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A previsão é que esta versão esteja disponível dentro de um mês. Então fiquem ligados no nosso twitter (&lt;a href="http://twitter.com/futeboldebotao"&gt;@futeboldebotao&lt;/a&gt;) para saber mais detalhes.&lt;/p&gt;
          &lt;img src="http://feeds.feedburner.com/~r/Mobits-Blog/~4/E5V7L-ctMqQ" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://www.mobits.com.br/2009/9/5/promocao-do-mobits-button-soccer</feedburner:origLink></entry>
  <entry xml:base="http://www.mobits.com.br/">
    <author>
      <name>Karin</name>
    </author>
    <id>tag:www.mobits.com.br,2009-09-01:261</id>
    <published>2009-09-01T22:25:00Z</published>
    <updated>2009-09-01T22:29:24Z</updated>
    <category term="Blog" />
    <category term="iphone" />
    <category term="java me" />
    <category term="sms" />
    <link href="http://feedproxy.google.com/~r/Mobits-Blog/~3/wx2b0pYIYSY/envio-de-sms-java-me-x-iphone-os" rel="alternate" type="text/html" />
    <title>Envio de SMS: Java ME x iPhone OS</title>
<content type="html">
            &lt;p&gt;Olá pessoal,&lt;/p&gt;

&lt;p&gt;estou aqui para contar para vocês a minha última saga com o desenvolvimento de aplicativos em Java ME e iPhone OS. Dessa vez parecia ser uma funcionalidade boba, mas que me rendeu algumas horinhas e trabalho jogado fora. :(&lt;/p&gt;

&lt;p&gt;A funcionalidade era &lt;strong&gt;envio de SMS&lt;/strong&gt;. Primeiro desenvolvi em Java ME. Não foi difícil pesquisar e encontrar o algoritmo que fizesse isso. O mais chato foi ter a certeza de que este algoritmo realmente funcionava para os mais diversos celulares.&lt;/p&gt;

&lt;p&gt;Para que vocês não tenham o mesmo tabalho que tive, segue o algoritmo de envio de email em Java ME:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;try {
        MessageConnection connection = (MessageConnection)Connector.open("sms://99999999");

        TextMessage sms = (TextMessage)connection.newMessage(MessageConnection.TEXT_MESSAGE);
        sms.setPayloadText("Olá");

        connection.send(sms);
        connection.close();
    } 
    catch (SecurityException e) {
        e.printStackTrace();
    } 
    catch (IOException e) {
        e.printStackTrace();
    } 
    catch (Exception e) {
        e.printStackTrace();
    }
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Terminado o desenvolvimento em Java ME, fui em busca do algoritmo que fizesse o mesmo em iPhone. Porém, como para mim era certo de que acharia a solução, fiz logo um formulário de envio de SMS. Mas não estava certa. Depois de inúmeras pesquisas, inclusive em fóruns da própria Apple, a única coisa que descobri foi que os aplicativos para iPhone que desejam enviar SMS, só farão isso fora do mesmo, ou seja, a única coisa que fazemos é chamar o aplicativo de mensagens que o iPhone possui. E para piorar, nem a mensagem pode ser preenchida pelo nosso aplicativo, somente o número. Então, percebi que de nada adiantou meu esforço para fazer o formulário de envio de SMS. Dessa vez a Apple me decepcionou.  :(&lt;/p&gt;

&lt;p&gt;Segue abaixo, como chamar o aplicativo de mensagens do iPhone:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;NSString *stringURL = @"sms:99999999";
NSURL *url = [NSURL URLWithString:stringURL];
[[UIApplication sharedApplication] openURL:url];
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Ah, e não se esqueçam que depois de enviada sua mensagem SMS, o seu aplicativo não volta, ou seja, o usuário precisa novamente acessá-lo.&lt;/p&gt;

&lt;p&gt;É, dessa vez os créditos estão todos com o Java ME! Espero sinceramente que a Apple libere o envio de SMS de dentro de aplicativos desenvolvidos por nós.&lt;/p&gt;

&lt;p&gt;Valeu :)&lt;/p&gt;
          &lt;img src="http://feeds.feedburner.com/~r/Mobits-Blog/~4/wx2b0pYIYSY" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://www.mobits.com.br/2009/9/1/envio-de-sms-java-me-x-iphone-os</feedburner:origLink></entry>
</feed>
