<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>coding &#187; mac</title>
	<atom:link href="http://www.coding.com.br/category/mac/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.coding.com.br</link>
	<description>have you coded today?</description>
	<lastBuildDate>Fri, 23 Jul 2010 02:37:02 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Primeiras impressões de uso do XCode com PyObjC</title>
		<link>http://www.coding.com.br/mac/primeiras-impressoes-de-uso-do-xcode-com-pyobjc/</link>
		<comments>http://www.coding.com.br/mac/primeiras-impressoes-de-uso-do-xcode-com-pyobjc/#comments</comments>
		<pubDate>Mon, 29 Mar 2010 20:36:10 +0000</pubDate>
		<dc:creator>Tiago Maluta</dc:creator>
				<category><![CDATA[mac]]></category>
		<category><![CDATA[pyobjc]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[xcode]]></category>

		<guid isPermaLink="false">http://www.coding.com.br/?p=810</guid>
		<description><![CDATA[Estou utilizando o Mac OS X a pouco tempo com a intenção de aprender um pouco da programação de interface gráficas. Uma opção é utilizar o Qt que é multi-plataforma, mas resolvi fazer um teste com o que a Apple tem a oferecer. Minha escolha inicial para pegar a &#8220;idéia&#8221; foi partir de alguma coisa [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Estou utilizando o Mac OS X a pouco tempo com a intenção de aprender um pouco da programação de interface gráficas. Uma opção é utilizar o Qt que é multi-plataforma, mas resolvi fazer um teste com o que a Apple tem a oferecer. Minha escolha inicial para pegar a &#8220;idéia&#8221; foi partir de alguma coisa que eu já sei, para isso escolhi o <em>binding</em> PyObjC para criar aplicativos utilizando Python.</p>
<p style="text-align: justify;">O primeiro problema que eu resolvi relativamente rápido foi a questão dos templates para criar um novo projeto em PyObjC. A versão que utilizo do XCode (3.2.1) não instala automaticamente, siga os passos <a href="http://ioanna.me/2009/09/installing-pyobjc-xcode-templates-in-snow-leopard/" target="_blank">aqui</a>.</p>
<p style="text-align: justify;">Resolvi fazer um programa bem simples para converter um número na base decimal para base hexadecimal. Isso em Python é feito com meia linha de código, mas o objetivo aqui é aprender como os componentes gráficos são acessados no código. Aprendi duas coisas importantes: <strong>outlets</strong> e <strong>actions</strong>.</p>
<p style="text-align: justify;">No Interface Builder assim como no Qt Designer não fazemos código e sim a tela. Em alguns tutoriais você pode encontrar referência a interface gráfica como um arquivo com a extensão .nib contudo as versões mais novas possuem a extensão .xib (procurando diferenças, li que o .xib gera um XML ao passo que o .nib não) <a href="http://www.coding.com.br/wp-content/uploads/2010/03/hex.png"><br />
<img class="aligncenter size-full wp-image-813" title="hex" src="http://www.coding.com.br/wp-content/uploads/2010/03/hex.png" alt="" width="163" height="232" /></a></p>
<p>O código que irá tratar dos componentes na janela é o arquivo AppDelegate (ex.: <em>NomeDoProjeto</em>AppDelegate.py). Na janela Library ( Tools -&gt; Library ) selecionamos a aba Classes e procuramos pela classe AppDelegate.<br />
<center><br />
<div id="attachment_814" class="wp-caption aligncenter" style="width: 258px"><a href="http://www.coding.com.br/wp-content/uploads/2010/03/outlet.png"><img class="size-medium wp-image-814" title="outlet" src="http://www.coding.com.br/wp-content/uploads/2010/03/outlet-248x300.png" alt="" width="248" height="300" /></a><p class="wp-caption-text">Acesso as duas edits</p></div><br />
</center><br />
Observe que esse processo de criação da interface gráfica no IB é independente da linguagem escolhida.<br />
<center><br />
<div id="attachment_815" class="wp-caption aligncenter" style="width: 259px"><a href="http://www.coding.com.br/wp-content/uploads/2010/03/action.png"><img class="size-medium wp-image-815" title="action" src="http://www.coding.com.br/wp-content/uploads/2010/03/action-249x300.png" alt="" width="249" height="300" /></a><p class="wp-caption-text">A action é equivalente ao SLOT() no Qt</p></div></center></p>
<p style="text-align: justify;">A parte das conexões são feitas segurando o control e clicando no cubo azul (na janela MainMenu.xib) da classe AppDelagete e arrastando até o componente que você deseja utilizar. Atenção na ordem:</p>
<ul style="text-align: justify;">
<li>Outlets das caixas de texto:  clique no cubo e arraste para o componente, para cada selecione o <em>outlet</em> apropriado.</li>
<li>Action do botão: clique no botão e arraste para o cubo, selecione a <em>action</em> apropriada</li>
</ul>
<p style="text-align: justify;">A parte que e gastei um tempo foi para acessar os <em>outlets</em>, mas depois de ver a opção <em>Write Update Class Files </em>o problema foi resolvido (se você já escreveu alguma no código na classe Int2HexAppDelegate.py opte pelo <em>Merge</em> senão pelo <em>Replace</em>)</p>
<p style="text-align: center;"><a href="http://www.coding.com.br/wp-content/uploads/2010/03/write.png"><img class="aligncenter size-medium wp-image-822" title="write" src="http://www.coding.com.br/wp-content/uploads/2010/03/write-179x300.png" alt="" width="179" height="300" /></a></p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">from</span> Foundation <span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #66cc66;">*</span>
<span style="color: #ff7700;font-weight:bold;">from</span> AppKit <span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #66cc66;">*</span>
<span style="color: #ff7700;font-weight:bold;">import</span> objc
<span style="color: #ff7700;font-weight:bold;">class</span> Int2HexAppDelegate <span style="color: black;">&#40;</span>NSObject<span style="color: black;">&#41;</span>:
    edit_hexa = objc.<span style="color: black;">IBOutlet</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    edit_int = objc.<span style="color: black;">IBOutlet</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
    @objc.<span style="color: black;">IBAction</span>
    <span style="color: #ff7700;font-weight:bold;">def</span> converte_<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, sender<span style="color: black;">&#41;</span>:
	    valor_int = <span style="color: #008000;">self</span>.<span style="color: black;">edit_int</span>.<span style="color: black;">intValue</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
	    valor_hexa = <span style="color: #008000;">hex</span><span style="color: black;">&#40;</span>valor_int<span style="color: black;">&#41;</span>
	    <span style="color: #008000;">self</span>.<span style="color: black;">edit_hexa</span>.<span style="color: black;">setStringValue_</span><span style="color: black;">&#40;</span><span style="color: #008000;">str</span><span style="color: black;">&#40;</span>valor_hexa<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span></pre></div></div>

<p style="text-align: justify;">Esse código é bem simples para mostrar o conceito e também porque eu por enquanto não saberia fazer nada muito mais complexo que isso :p</p>
<p style="text-align: justify;">
O acesso as caixas de texto é feita pelas variáveis (outlet) <em>edit_hexa</em> e <em>edit_int</em> e a ação converte_ (lembre-se que o converte: do ObjectiveC vira converte_ no Python)</p>
<p style="text-align: justify;">Fiz um screencast desse exemplo, disponível no <a href="http://www.youtube.com/watch?v=GZ1du3x07JI" target="_blank">Youtube</a> (como estava testando um <em>trial</em> do programa desculpem pela marca d&#8217;agua no video, selecione a qualidade de 720p, depois descobri que o QuickTime faz screencast mas já tinha feito <img src='http://www.coding.com.br/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' />  )</p>
<p>Espero que ajude quem pretende começar.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.coding.com.br/mac/primeiras-impressoes-de-uso-do-xcode-com-pyobjc/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Mac OS X 10.6 &#8211; Snow Leopard</title>
		<link>http://www.coding.com.br/mac/mac-os-x-10-6-snow-leopard/</link>
		<comments>http://www.coding.com.br/mac/mac-os-x-10-6-snow-leopard/#comments</comments>
		<pubDate>Sun, 30 Aug 2009 01:34:48 +0000</pubDate>
		<dc:creator>Celso Fernandes</dc:creator>
				<category><![CDATA[mac]]></category>
		<category><![CDATA[mac os x]]></category>
		<category><![CDATA[snow leopard]]></category>
		<category><![CDATA[SO]]></category>

		<guid isPermaLink="false">http://www.coding.com.br/?p=186</guid>
		<description><![CDATA[24 horas se passaram desde o lançamento do snow leopard, como vivo em um país de terceiro mundo que não teve pré-lançamento do mesmo e também o lançamento esta previsto para daqui 1 mês, não pude conter minha curiosidade, obtive a imagem através do diabo verde e realizei uma &#8220;fresh install&#8221; no meu macbook.
Realmente o [...]]]></description>
			<content:encoded><![CDATA[<p>24 horas se passaram desde o lançamento do snow leopard, como vivo em um país de terceiro mundo que não teve pré-lançamento do mesmo e também o lançamento esta previsto para daqui 1 mês, não pude conter minha curiosidade, obtive a imagem através do diabo verde e realizei uma &#8220;fresh install&#8221; no meu macbook.</p>
<p>Realmente o boot esta mais rápido em comparação ao leopard (ambos depois de instalado), mas ainda não tive tempo de verificar todas as novas funcionalidades, assim que descobrir algo interessante faço um post por aqui, segue o screenshot para aqueles que são um tanto quanto céticos heheh</p>
<p>abraços</p>
<p style="text-align: center;">
<div id="attachment_189" class="wp-caption aligncenter" style="width: 310px"><img class="size-medium wp-image-189" title="Mac OS X Snow Leopard Screenshot" src="http://www.coding.com.br/wp-content/uploads/2009/08/Screen-shot-2009-08-29-at-10.19.20-PM-300x187.png" alt="Mac OS X Snow Leopard Screenshot" width="300" height="187" /><p class="wp-caption-text">Mac OS X Snow Leopard Screenshot</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.coding.com.br/mac/mac-os-x-10-6-snow-leopard/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
