<?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>bugflux.org &#187; pt</title>
	<atom:link href="http://bugflux.org/tag/pt/feed/" rel="self" type="application/rss+xml" />
	<link>http://bugflux.org</link>
	<description>André Prata, nDray</description>
	<lastBuildDate>Fri, 23 Jul 2010 11:30:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>na crista da onda: anfíbio</title>
		<link>http://bugflux.org/blog/1317:na-crista-da-onda-anfibio/</link>
		<comments>http://bugflux.org/blog/1317:na-crista-da-onda-anfibio/#comments</comments>
		<pubDate>Fri, 23 Jul 2010 11:24:05 +0000</pubDate>
		<dc:creator>nDray</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[pt]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[technology]]></category>

		<guid isPermaLink="false">http://bugflux.org/?p=1317</guid>
		<description><![CDATA[depois do fracasso e do sucesso parcial do desenvolvimento para bada, procurei descobrir como seria desenvolver um widget para o telemóvel. surpresa! os widgets não passam de páginas web! apesar de já ter confessado não gostar de programação por eventos, &#8230; <a href="http://bugflux.org/blog/1317:na-crista-da-onda-anfibio/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>depois do <a title="na crista da onda @ bugflux.org" href="/?p=1208" target="_self">fracasso</a> e do <a title="na crista da onda: parte 2 @ bugflux.org" href="/?p=1211" target="_self">sucesso parcial</a> do desenvolvimento para bada, procurei descobrir como seria desenvolver um <em>widget</em> para o <a title="uma nova onda @ bugflux.org" href="/?p=1087" target="_self">telemóvel</a>. surpresa! os widgets não passam de páginas web! apesar de já ter confessado não gostar de programação por eventos, por algum motivo, javascript e html são coisas totalmente diferentes, para mim. talvez por associar <em>scripting</em> tão potente a linguagem de marcação de forma tão simples. não sei, mas gosto!</p>
<p><span id="more-1317"></span>uma coisa que dava jeito era poder ter no ecrã principal atalhos para aplicações. más notícias. para a maioria, não é possível. a samsung implementa uma api <a title="bondi @ omtp.org" href="http://bondi.omtp.org/default.aspx" target="_blank">bondi</a>, mas esta permite o acesso a escassas aplicações. claro que a samsung tem acesso a todas, com widgets até para aceder à aplicação da loja, que nem sequer consta na <a title="samsung widget api reference @ innovator.samsungmobile.com" href="http://innovator.samsungmobile.com/cms/cnts/knowledge.detail.view.do?platformId=12&amp;cntsId=6720" target="_self">documentação</a>. para as aplicações que interessa não deixam aceder&#8230;</p>
<p>além de aceder ao telemóvel, também seria interessante o acesso directo à web. é muito fácil criar pequenos atalhos no ecrã, estilo bookmarks. tive a ideia de ir mais longe, procurando poupar espaço comparativamente a essa solução. um pequeno widget do estilo da google, que vem no telemóvel, mas com botões configuráveis, e potencialmente ilimitados. surge o <a title="all terrain search @ bugflux.org" href="/dev/all-terrain-search/" target="_blank">All Terrain Search</a>:</p>
<p>a ideia é simples. uma caixa de texto e botões. se existir texto nessa caixa, o botão faz uma pesquisa no site. se a caixa estiver em branco, o botão redirecciona para a homepage. 4 botões não são lá grande coisa, portanto um scroll permite ver mais 4, e mais 4, e mais 4, tantos quanto inserir.</p>
<p>a ideia foi estruturar o código de maneira a que fosse simples adicionar novos motores. numa pasta individual colocam-se os ícones dos motores. qualquer que seja o tamanho da imagem, será sempre apresentada a 84&#215;84 pixels. é recomendável redimensionar antes, uma vez que o rendering do browser estraga um pouco a qualidade das imagens.</p>
<p>as imagens são depois usadas num ficheiro javascript, onde o utilizador deve mexer para configurar a seu gosto. a lista de motores não passa de um array de variáveis com 3 propriedades: a homepage, a string para pesquisa e a localização da imagem. se o tamanho do array exceder o número de motores visíveis de uma vez, as restantes serão acedidas por scoll.</p>
<p>não queria usar um botão adicional e desperdiçar espaço, queria que um drag vertical no widget mudasse a lista de motores. o drag horizontal também seria interessante, mas esse será sempre apanhado primeiro pelo home screen, para mudar entre ecrãs. o scroll foi a maior perda de tempo. a samsung tem uma <a title="touch table @ quirksmode.org" href="http://www.quirksmode.org/mobile/tableTouch.html" target="_blank">má implementação</a> dos eventos touch no seu browser. a única coisa que me permitiu gerir com eficiência foi o evento <strong>onmousewheel</strong>, lançado aquando de arrastamentos do dedo. não funcionando como num computador, no entanto, o <strong>Event</strong> associado não tem a propriedade <strong>wheelDelta</strong>, que normalmente devolve a extensão/direcção do scroll. não consigo sequer saber se o scroll é para baixo ou para cima, só sei que houve scroll. ainda para mais, um arrastamento contínuo lança diversos eventos, o que provoca scrolls a mais, acidentais.</p>
<p>para solucionar os dois problemas, o scroll não faz bem scroll, mas faz <em>cycle</em> entre as páginas de motores. para evitar o lançamento consecutivo de vários scroll, quando capturo um primeiro deixo de ouvir o evento para só ouvir um quinto de segundo mais tarde:</p>
<pre class="brush: jscript;">scroll = function(e) { /* more like cycle through */
	page = (page + 1) % Math.ceil(engines.length / visibleEngines);

	/* disable scroll for a fifth of a sec */
	document.onmousewheel = null;
	setTimeout('document.onmousewheel = scroll', 200);

	changePage(page);
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://bugflux.org/blog/1317:na-crista-da-onda-anfibio/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>bolha aviária</title>
		<link>http://bugflux.org/blog/1310:bolha-aviaria/</link>
		<comments>http://bugflux.org/blog/1310:bolha-aviaria/#comments</comments>
		<pubDate>Wed, 21 Jul 2010 09:52:19 +0000</pubDate>
		<dc:creator>nDray</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[pt]]></category>
		<category><![CDATA[economy]]></category>
		<category><![CDATA[politics]]></category>
		<category><![CDATA[society]]></category>

		<guid isPermaLink="false">http://bugflux.org/?p=1310</guid>
		<description><![CDATA[na versão televisiva desta notícia, dizia o jornalista que outras entidades, em particular na wall street, estariam interessadas em adquirir o animal, apesar de a sua esperança de vida não ultrapassar um ano. ao longo do episódio de south park &#8230; <a href="http://bugflux.org/blog/1310:bolha-aviaria/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>na versão televisiva desta <a title="polvo paul vale 100 mil dólares @ sic.sapo.pt" href="http://sic.sapo.pt/online/noticias/desporto/Sociedade+de+apostas+russa+quer+comprar+Paul+o+polvo+por+100+mil+dolares.htm" target="_blank">notícia</a>, dizia o jornalista que outras entidades, em particular na <a title="financial district @ wikipedia.org" href="http://en.wikipedia.org/wiki/Financial_District,_Manhattan" target="_blank">wall street</a>, estariam interessadas em adquirir o animal, apesar de a sua esperança de vida não ultrapassar um ano.</p>
<p><span id="more-1310"></span>ao longo do <a title="margaritaville @ southparkstudios.com" href="http://www.southparkstudios.com/episodes/220760/" target="_blank">episódio</a> de south park emitido em 25 de março de 2009, stan tenta devolver uma misturadora que o pai comprou com um plano de pagamentos. como a loja não trata da dívida gerada com o plano, stan tem que se dirigir junto da companhia financeira responsável para obter a devolução.</p>
<p>acontece que o economista não pode devolver o dinheiro. o que ele faz é simplesmente convencer pessoas sem dinheiro a comprar uma misturadora, empacota as dívidas numa grande, e são os investidores em wall street que tratam delas.</p>
<p>uma vez em wall street, stan descobre que ainda não pode recuperar o seu dinheiro pois os investidores separaram o grande pacote em valores que pudessem vender aos bancos. no entanto os bancos também não podem fazer a devolução pois, uma vez que muita gente foi aos bancos à procura do retorno das misturadoras, o governo teve de comprar os valores aos bancos, para que não falissem.</p>
<p>então stan dirige-se ao departamento do tesouro. ali explica a situação, e dizem-lhe de imediato que não há problema, apenas precisam de consultar as tabelas para ver o valor que que lhe devem devolver. de regresso de uma sala, ensanguentados, os funcionários anunciam o valor de investimento no total de 90 trilhões de dólares (biliões, no nosso sistema).</p>
<p>entretanto surge uma emergência com uma companhia de serguros prestes a falir, e os funcionários têm de ir lá dentro verificar os gráficos para ver o que fazer. stan entra e espreita: solta-se uma galinha decapitada, onde cair é a jogada mais prudente:</p>
<p><a href="http://bugflux.org/wp/wp-content/uploads/2010/07/southpark1.jpg"><img class="aligncenter size-full wp-image-1312" title="southpark" src="http://bugflux.org/wp/wp-content/uploads/2010/07/southpark1.jpg" alt="" width="650" height="374" /></a></p>
<p>metáfora: galinhas<br />
realidade: polvos</p>
<p>humm&#8230; doesn&#8217;t seem that different, to me!</p>
]]></content:encoded>
			<wfw:commentRss>http://bugflux.org/blog/1310:bolha-aviaria/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>na crista da onda: parte 2</title>
		<link>http://bugflux.org/blog/1211:na-crista-da-onda-parte-2/</link>
		<comments>http://bugflux.org/blog/1211:na-crista-da-onda-parte-2/#comments</comments>
		<pubDate>Fri, 16 Jul 2010 21:57:33 +0000</pubDate>
		<dc:creator>nDray</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[pt]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[technology]]></category>

		<guid isPermaLink="false">http://bugflux.org/?p=1211</guid>
		<description><![CDATA[o flash é uma tarefa impossível, mas nada motivo para baixar os braços. outra aplicação que me interessou desenvolver consistia em procurar routers nas redondezas e, com base em vulnerabilidades conhecidas, ligar-se a eles. claro que os algoritmos sobre as &#8230; <a href="http://bugflux.org/blog/1211:na-crista-da-onda-parte-2/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://bugflux.org/wp/wp-content/uploads/2010/07/WifiSmith.png"><img class="alignleft size-thumbnail wp-image-1303" title="WifiSmith" src="http://bugflux.org/wp/wp-content/uploads/2010/07/WifiSmith-150x150.png" alt="" width="150" height="150" /></a>o flash é uma <a title="na crista da onda @ bugflux.org" href="/?p=1208" target="_self">tarefa impossível</a>, mas nada motivo para baixar os braços. outra aplicação que me interessou desenvolver consistia em procurar routers nas redondezas e, com base em vulnerabilidades conhecidas, ligar-se a eles. claro que os algoritmos sobre as vulnerabilidades não são meus, não tenho a destreza para esse trabalho, mas é uma boa maneira de iniciar interfaces. chamei-lhe Wi-Fi Smith. =)</p>
<p><span id="more-1211"></span>desta vez custou um pouco mais começar, pois foi preciso ler um pouco sobre controlos e containers. no fundo não há muita diferença relativamente a outros toolkits gráficos. comparando com gtk, que foi o último que usei, para o bada também tenho duas hipóteses: posso programar e colocar os controlos todos no sítio com código, ou posso desenhar no ide e depois, no código, pedir para que sejam colocados no sítio e obter o handle. nada de especial.</p>
<p>o problema que há com este modo de programação do bada, para mim, é que as callbacks para os módulos geradores de eventos não são passadas explicitamente. o que é passado é uma classe que implemente (herde, em c++) uma interface IModuleEventListener. além disto não podemos definir argumentos para passar a essas funções. resultado: torna-se complicado gerir a partilha de recursos a serem utilizados na rotina de atendimento. o que é que eu fiz? o módulo principal herda tudo&#8230; felizmente não há colisões, mas neste caso não vi que fizesse sentido criar módulos diferentes. uma vez que vou tratar de eventos wifi, e da interface, bem como os genéricos das aplicações, isto é a classe criada:</p>
<pre class="brush: cpp; first-line: 18;">class WifiSmith :
	public Osp::App::Application,
	public Osp::System::IScreenEventListener,
	public Osp::Ui::IActionEventListener,
	public Osp::Net::Wifi::IWifiManagerEventListener,
	public Osp::Ui::IItemEventListener
{</pre>
<p>em vez de dar uma caixa de texto e um botão &#8220;do the magic&#8221; achei que seria mais interessante (e até mais simples) limitar-me a pegar no wi-fi, obter uma lista das redes disponíveis e listá-las. isto foi muito fácil de fazer. ao construir o manifest.xml no site, tive de adicionar privilégio WIFI. isto permite fazer todas as operações com o módulo wi-fi, excepto Connect(). para ligar é necessário permissões WIFI_MANAGER. infelizemente, só parceiros da samsung podem pertencer a este grupo, pois é necessário um nível de acesso SYSTEM. uma parvoíce, a meu ver. qualquer que seja a parte da api, não vejo motivo para que alguém que pague (ou receba?) tenha acesso e os outros não. no entanto esta limitação apenas impede publicação na loja; o grupo pode ser adicionado manualmente no ficheiro xml, mas a aplicação será certamente rejeitada na loja:</p>
<pre class="brush: xml; first-line: 6;">&lt;Privileges&gt;
	&lt;Privilege&gt;
		&lt;Name&gt;WIFI&lt;/Name&gt;
	&lt;/Privilege&gt;
	&lt;Privilege&gt;
		&lt;Name&gt;WIFI_MANAGER&lt;/Name&gt;
	&lt;/Privilege&gt;
&lt;/Privileges&gt;</pre>
<p>para compilar com permissões especiais é preciso, com frequência, adicionar uma biblioteca para linkagem, neste caso FNet. verdade para o simulador, para o telemóvel parece-me estar tudo na mesma biblioteca, FOsp.</p>
<p><a href="http://bugflux.org/wp/wp-content/uploads/2010/07/FNet-library.png"><img class="aligncenter size-full wp-image-1287" title="FNet-library" src="http://bugflux.org/wp/wp-content/uploads/2010/07/FNet-library.png" alt="" width="662" height="594" /></a></p>
<p>a interface da aplicação é muito simples. dois botões em baixo, um &#8220;refresh&#8221; e outro &#8220;back&#8221;. gosto das aplicações que têm botão de saída no ecrã, não gosto de usar o físico. no editor visual: as duas SOFTKEY activas e uma List que ocupa todo o ecrã. a List permite scroll se os elementos excederem o espaço reservado. a SlidableList serve para listas grandes, e alocação dinâmica dos elementos que interessam ver num dado momento apenas. no início desenho esta estrutura, associo as callbacks, e inicializo as variáveis necessárias:</p>
<pre class="brush: cpp; first-line: 31;">bool
WifiSmith::OnAppInitializing(AppRegistry&amp; appRegistry)
{
	// draw the form
	MainForm *pMainForm = new MainForm();
	pMainForm-&gt;Construct(L&quot;IDF_FORM1&quot;);
	Frame *pFrame = GetAppFrame()-&gt;GetFrame();
	pFrame-&gt;AddControl(*pMainForm);
	pFrame-&gt;SetCurrentForm(*pMainForm);
	pMainForm-&gt;SetSoftkeyActionId(SOFTKEY_1, SOFTKEY_1);
	pMainForm-&gt;AddSoftkeyActionListener(SOFTKEY_1, *this); // register back button event
	pMainForm-&gt;SetSoftkeyActionId(SOFTKEY_0, SOFTKEY_0);
	pMainForm-&gt;AddSoftkeyActionListener(SOFTKEY_0, *this); // register refresh button event
	pMainForm-&gt;RequestRedraw();

	// set the wifimanager
	pWifiManager.Construct(*this);

	// get the essid list control
	pEssidListControl = (List*)pMainForm-&gt;GetControl(&quot;IDC_LIST1&quot;);
	pEssidListControl-&gt;AddItemEventListener(*this);

	return true;
}</pre>
<p>que no fim liberto:</p>
<pre class="brush: cpp; first-line: 56;">bool
WifiSmith::OnAppTerminating(AppRegistry&amp; appRegistry, bool forcedTermination)
{
	// decided to use dynamic allocation for the WifiManager and the list of WifiBssInfo (networks)
	delete pEssidListControl;

	return true;
}</pre>
<p>sair da aplicação faz-se chamando o método Application::Terminate(). este método parece só estar acessível no módulo principal. tentei mesmo Application::GetInstance()-&gt;Terminate() noutros módulos, mas nem assim consegui compilar. azelhice minha, talvez. a cada refresh limpa-se e volta-se a preencher a lista de redes disponíveis:</p>
<pre class="brush: cpp; first-line: 136;">void
WifiSmith::OnWifiActivated(result r)
{
	pWifiManager.Scan();
}</pre>
<pre class="brush: cpp; first-line: 86;"> // SOFTKEYs
void
WifiSmith::OnActionPerformed(const Osp::Ui::Control &amp;source, int actionId)
{
	// SOFTKEY_0 is just the actionId I associated with it on line 42, it's not really the key.
	if(actionId == SOFTKEY_0) // refresh
	{
		RefreshList();
	}
	else
	{
		Application::Terminate();
	}
}</pre>
<pre class="brush: cpp; first-line: 163;">void
WifiSmith::RefreshList()
{
	// clear the essid list
	pEssidListControl-&gt;RemoveAllItems();
	pEssidListControl-&gt;RequestRedraw();

	// turn on wifi, if off
	if(!pWifiManager.IsActivated())
	{
		MessageBox vMessageBox;
		vMessageBox.Construct(&quot;Action required!&quot;, &quot;WiFi needs to be ON for scanning! Turn on?&quot;, MSGBOX_STYLE_YESNO, 0);
		int modalResult;
		vMessageBox.ShowAndWait(modalResult);

		if(modalResult == MSGBOX_RESULT_YES)
		{
			pWifiManager.Activate();
		}
		else
		{
			Application::Terminate();
		}
	}
	else
	{
		// get the available networks
		OnWifiActivated(E_SUCCESS);
	}
}</pre>
<p>quando o wi-fi está desligado é na função refresh que pergunto ao utilizador se pretende activar, com uma MessageBox. se não o fizer, a aplicação termina. faria sentido chamar a RefreshList() na inicialização. no entanto há um problema de concorrência. enquanto a aplicação está a arrancar é mostrada uma &#8220;imagem splash&#8221;. por algum motivo a aplicação bloqueia nesse splash se tentar abrir uma MessageBox algures na função OnAppInitializing(). provavelmente funcionaria na função OnForeground(), mas nesse caso tinha de controlar o estado da aplicação com uma nova variável, pois a função OnForeground() é chamada sempre que se volta ao foreground, e não apenas da primeira vez. continuo a achar que o problema é do sistema operativo, algo diferente devia acontecer.</p>
<p>findo o Scan(), preenche-se novamente a lista:</p>
<pre class="brush: cpp; first-line: 102;">
void
WifiSmith::OnWifiScanCompletedN(const Osp::Base::Collection::IList *pWifiBssInfoList, result r)
{
	pNetworkList.RemoveAll();
	pNetworkList.AddItems(*pWifiBssInfoList);

	for(int r = 0; r &lt; pNetworkList.GetCount(); r++)
	{
		WifiBssInfo *currentBssInfo = (WifiBssInfo*)pNetworkList.GetAt(r);
		pEssidListControl-&gt;AddItem(&amp;currentBssInfo-&gt;GetSsid(), null, null, null, r);
	}
	pEssidListControl-&gt;RequestRedraw(true);
}</pre>
<p>para quem não viu até aqui, é fácil perceber que não há muito tratamento de erros. esta função, por exemplo, indica com a variável r se o Scan() teve ou não sucesso. no entanto pouca diferença faz para o código que escrevi. mais, por motivos de eficiência, o mecanismo de controlo de excepções do c++ foi completamente ignorado pela samsung, não existem excepções no bada. o compilador até me avisou que, na linha 111, estou a passar um endereço de uma variável temporária. como nunca me deu problemas, não senti necessidade de copiar os nomes para uma lista.</p>
<p>depois de listadas as redes, é possível ver a listagem no telemóvel. clicando em qualquer rede, tenta-se ligar:</p>
<pre class="brush: cpp; first-line: 149;">void
WifiSmith::OnItemStateChanged(const Osp::Ui::Control &amp;source, int index, int itemId, Osp::Ui::ItemStatus status)
{
	WifiBssInfo *pWifiBssInfo = (WifiBssInfo*)pNetworkList.GetAt(itemId);
	const WifiSecurityInfo *pWifiSecurityInfo = pWifiBssInfo-&gt;GetSecurityInfo();

	// if open and no encryption, go right ahead!
	if(pWifiSecurityInfo-&gt;GetAuthenticationType() == WIFI_AUTHENTICATION_OPEN
			&amp;&amp; pWifiSecurityInfo-&gt;GetEncryptionType() == WIFI_ENCRYPTION_NONE)
	{
		pWifiManager.Connect(*pWifiBssInfo);
	}
}</pre>
<p>lembre-se que, na linha 111, dei um itemId a cada elemento da List igual ao índice dessa rede na lista de redes. no fim da tentativa de ligação à rede, posso informar o utilizador:</p>
<pre class="brush: cpp; first-line: 116;">void
WifiSmith::OnWifiConnected(const Osp::Base::String &amp;ssid, result r)
{
	MessageBox vMessageBox;
	int modalResult;

	if(r == E_SUCCESS)
	{
		vMessageBox.Construct(&quot;Connected:&quot;, ssid, MSGBOX_STYLE_OK, 0);
	}
	else
	{
		vMessageBox.Construct(&quot;Unable to connect:&quot;, ssid, MSGBOX_STYLE_OK, 0);
	}

	vMessageBox.ShowAndWait(modalResult);
}</pre>
<p>por vários motivos, neste código só me ligo a redes abertas. o primeiro é o facto de ainda não ter tratado disso. o segundo é que, quando fui a testar o caso dos routers thomson, por exemplo, acabei por descobrir que a resolução das chaves é um tanto ou quanto probabilística, e nem sequer funcionou para alguns casos que testei. o terceiro motivo é o facto de subscrever um aditivo internet, como faz todo o sentido, com este telemóvel, e até porque não frequento sítios atulhados de redes vulneráveis.</p>
<p>no entanto acrescentar esta funcionalidade, para mim, faz-se do seguinte modo: começa-se por criar uma classe que recebe um WifiBssInfo e, com essa informação (provavelmente só ssi e bssid), identifica o tipo de router com que está a lidar e devolve, de acordo, a chave a utilizar. pode ainda disponibilizar um método booleano do tipo CanSolve() o que permitirá, no tempo da listagem, mostrar apenas as redes com que é possível lidar. por último, uma vez que alguns algoritmos devolvem mais que uma chave, a função OnWifiConnected() deve implementar uma máquina de estados que permita tentar a chave seguinte para a mesma rede, caso a ligação tenha falhado, e até que não existam mais chaves. nada mais!</p>
<p>algumas capturas:</p>
<p style="text-align: center;"><a href="http://bugflux.org/wp/wp-content/uploads/2010/07/20100716205002.jpg"><img class="alignnone size-thumbnail wp-image-1294" title="20100716205002" src="http://bugflux.org/wp/wp-content/uploads/2010/07/20100716205002-150x150.jpg" alt="" width="150" height="150" /></a> <a href="http://bugflux.org/wp/wp-content/uploads/2010/07/20100716205019.jpg"><img class="alignnone size-thumbnail wp-image-1296" title="20100716205019" src="http://bugflux.org/wp/wp-content/uploads/2010/07/20100716205019-150x150.jpg" alt="" width="150" height="150" /></a> <a href="http://bugflux.org/wp/wp-content/uploads/2010/07/20100716205009.jpg"><img class="alignnone size-thumbnail wp-image-1295" title="20100716205009" src="http://bugflux.org/wp/wp-content/uploads/2010/07/20100716205009-150x150.jpg" alt="" width="150" height="150" /></a></p>
<p>(uau, this sucks! é preciso mesmo clicar nas imagens, parece que os thumbnails do wordpress cortam a imagem&#8230;)</p>
]]></content:encoded>
			<wfw:commentRss>http://bugflux.org/blog/1211:na-crista-da-onda-parte-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>na crista da onda</title>
		<link>http://bugflux.org/blog/1208:na-crista-da-onda/</link>
		<comments>http://bugflux.org/blog/1208:na-crista-da-onda/#comments</comments>
		<pubDate>Thu, 15 Jul 2010 20:49:07 +0000</pubDate>
		<dc:creator>nDray</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[pt]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[technology]]></category>

		<guid isPermaLink="false">http://bugflux.org/?p=1208</guid>
		<description><![CDATA[uns dias depois, cá comecei a olhar para o bada numa perspectiva de utilizador avançado. o objectivo não passou de ver simplesmente se seria muito complicado desenvolver qualquer tipo de programa para a plataforma. o primeiro passo foi obter o &#8230; <a href="http://bugflux.org/blog/1208:na-crista-da-onda/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>uns dias depois, cá comecei a olhar para o bada numa perspectiva de utilizador avançado. o objectivo não passou de ver simplesmente se seria muito complicado desenvolver qualquer tipo de programa para a plataforma.</p>
<p><span id="more-1208"></span>o primeiro passo foi obter o <a title="bada sdk/ide @ bada.com" href="http://developer.bada.com/apis/tools/sdk/list.do?categoryID=FC02040100" target="_blank">ide/sdk</a>. nada a assinalar, trata-se do eclipse. o problema é que as tralhas da samsung exigem windows, e logo aqui desmoralizo fortemente. felizmente não estou sozinho, há <a title="linux favourite bada developmen platform @ badadev.com" href="http://www.badadev.com/poll-ends-linux-would-be-the-preffered-bada-development-platform/" target="_blank">mais</a> quem gostasse de desenvolver para bada em linux, vamos confiar nos rumores que tendem a nosso favor! é um pouco estranho ter de esperar, uma vez que o próprio bada é baseado em linux, e o eclipse é até dos poucos ambientes decentes para este sistema operativo.</p>
<p>ligeiramente relutante, lá avancei à descoberta da documentação. o primeiro projecto seria colmatar a falha da loja: não existe uma lanterna. melhor, existe, mas usa o ecrã para iluminar, com um led tão bom do outro lado, junto à câmara.</p>
<p>depressa relembro como não sou grande fã de programação por eventos. o que vale é que c++ permite herança múltipla, e então é mais fácil atulhar a classe principal de métodos para atender eventos desde a bateria ao flash. a minha ideia de aplicação seria que o próprio programa fosse o botão de flash. isto é, ligar o flash seria tão simples como ligar o programa, que saía de imediato. desligar seria iniciar novamente a aplicação. um <em>toggle</em>!</p>
<p>neste caso de utilização não precisava de mais do que criar um objecto de acesso à câmara, que me dá controlo sobre o flash. se o IsFlashOn(), SetFlash(false), senão SetFlash(true). o IsFlashOn() funciona, o problema é que o SetFlash(true) liga o flash, mas não inicia a iluminação, <em>per se</em>. a iluminação é feita apenas ao utilizar a câmara, provavelmente desde que se inicia a focagem até à captura. talvez por este motivo não tenha aparecido a aplicação na loja&#8230;</p>
<p>além desta característica do sistema, tive outro problema. se não libertar a câmara quando a aplicação terminar, azar, tenho de reiniciar o telemóvel! nas funções que o ide cria automaticamente têm o cuidado de dizer na rotina OnAppTerminating(), em comentário, que se deve libertar a memória e os recursos. pergunto-me se o sistema operativo limpa a memória não libertada pelo programador???, caso contrário seria muito problemático deixar qualquer pessoa programar para o bada!</p>
<p>sobre este aspecto, <a title="time until certification @ badadev.com" href="http://forums.badadev.com/viewtopic.php?f=3&amp;t=755&amp;start=0&amp;view=viewpoll" target="_blank">parece</a> que demora muito tempo até que uma aplicação seja admitida na loja. talvez seja esse o motivo para ainda não haver muitas aplicações (sinceramente não estou a ver lugar para muitas mais úteis&#8230;). por um lado é bom saber que as aplicações à disposição foram vistas e revistas, por outro deve ser altamente desmotivante para o programador&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://bugflux.org/blog/1208:na-crista-da-onda/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>no comment</title>
		<link>http://bugflux.org/blog/1199:no-comment/</link>
		<comments>http://bugflux.org/blog/1199:no-comment/#comments</comments>
		<pubDate>Mon, 12 Jul 2010 09:17:09 +0000</pubDate>
		<dc:creator>nDray</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[en]]></category>
		<category><![CDATA[pt]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[technology]]></category>

		<guid isPermaLink="false">http://bugflux.org/?p=1199</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><a href="http://bugflux.org/wp/wp-content/uploads/2010/07/trends.png"><img class="aligncenter size-full wp-image-1200" title="trends" src="http://bugflux.org/wp/wp-content/uploads/2010/07/trends.png" alt="" width="585" height="217" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://bugflux.org/blog/1199:no-comment/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>mouro na costa</title>
		<link>http://bugflux.org/blog/1192:mouro-na-costa/</link>
		<comments>http://bugflux.org/blog/1192:mouro-na-costa/#comments</comments>
		<pubDate>Sun, 11 Jul 2010 10:44:08 +0000</pubDate>
		<dc:creator>nDray</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[pt]]></category>
		<category><![CDATA[personal]]></category>

		<guid isPermaLink="false">http://bugflux.org/?p=1192</guid>
		<description><![CDATA[dizem que um silêncio confortável entre duas pessoas é revelador de uma grande amizade. que maior silêncio do que aquele que dura dias, semanas, meses, mas, chegada uma certa altura, quebra-se como se durasse um instante. é um silêncio à distância &#8230; <a href="http://bugflux.org/blog/1192:mouro-na-costa/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>dizem que um silêncio confortável entre duas pessoas é revelador de uma grande amizade. que maior silêncio do que aquele que dura dias, semanas, meses, mas, chegada uma certa altura, quebra-se como se durasse um instante. é um silêncio à distância de um telefonema ou mensagem; 10 a 100 quilómetros de passeio; 1o minutos a 1 hora de viagem.</p>
<p>podia considerar-me preguiçoso por não despender esse tempo com mais frequência? os amigos com quem hoje estou diariamente ficarão um dia esses contactos esporádicos. não são amizades maiores ou menores, melhores ou piores, mas têm papéis diferentes. relações desiguais que marcam fases da vida. os cheiros, olhares, sorrisos, vozes, que me permitem reviver o passado e ansiar o futuro.</p>
]]></content:encoded>
			<wfw:commentRss>http://bugflux.org/blog/1192:mouro-na-costa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>tudo tem o seu tempo</title>
		<link>http://bugflux.org/blog/1177:tudo-tem-o-seu-tempo/</link>
		<comments>http://bugflux.org/blog/1177:tudo-tem-o-seu-tempo/#comments</comments>
		<pubDate>Sun, 11 Jul 2010 10:37:19 +0000</pubDate>
		<dc:creator>nDray</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[pt]]></category>
		<category><![CDATA[education]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[science]]></category>

		<guid isPermaLink="false">http://bugflux.org/?p=1177</guid>
		<description><![CDATA[já toda a gente pensou em viagens no tempo. talvez voltar ao passado para corrigir alguma coisa, talvez para chegar mais depressa ao futuro. bem, em discussão recorrente dizem-me que não se pode voltar ao passado; ir para o futuro &#8230; <a href="http://bugflux.org/blog/1177:tudo-tem-o-seu-tempo/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>já toda a gente pensou em viagens no tempo. talvez voltar ao passado para corrigir alguma coisa, talvez para chegar mais depressa ao futuro. bem, em discussão recorrente dizem-me que não se pode voltar ao passado; ir para o futuro já se faz, em pequenas escalas; dependendo da velocidade que se consiga atingir, pode-se avançar tanto quanto se queira, em teoria.</p>
<p><span id="more-1177"></span></p>
<p>eu acho que a viagem no tempo é um tema de conversa muito interessante, mas não suporto que se fale dela em termos científicos, muito menos em tom de leis. a primeira:</p>
<blockquote><p>não se pode voltar atrás no tempo, as fórmulas não o permitem. é um mecanismo que a natureza tem de se proteger!</p></blockquote>
<p>parece razoável: como é que se lidava com alterações no passado que criassem paradoxos no presente? boa pergunta, mas não ter resposta prova a impossibilidade? há milhares de anos era &#8220;impossível dar a volta ao mundo&#8221;, pois &#8220;o mundo era plano&#8221;. hoje é impossível voltar atrás no tempo, mas porquê?</p>
<blockquote><p>se voltasses atrás no tempo e morresses, o que é que acontecia agora, que estás a falar comigo?</p></blockquote>
<p>não sei, mas isto não prova que não é possível, só prova ignorância. eu não sei explicar o que acontece no meu cérebro que me permita escrever, no entanto escrevo. mas sei que o cérebro tem um papel no processo, já é qualquer coisa. para defender a resolução deste paradoxo gosto da física quântica, que afirma a existência de ramificações de universos num grande multiverso. isto é, se eu voltar atrás no tempo e morrer, estou a criar uma bifurcação. numa delas estou aqui, a escrever. noutra não estou, e outras coisas totalmente diferentes acontecem.</p>
<blockquote><p>viajar para o futuro é possível, e está provado. os sistemas de gps precisam de ajustes devido ao facto de estarem afastados da terra. segundo einstein, o tempo passa mais devagar perto de objectos de grande massa.</p></blockquote>
<p>bem, duas brincadeiras. claro que é possível viajar no tempo para o futuro. estou a fazê-lo neste preciso momento. não me sinto parado no tempo. corpos de grande massa: sim, se estiver ao pé de uma menina gorda o tempo parece passar mais devagar do que se estiver ao pé de uma menina elegante. =) relatividade de einstein. sabia umas coisas, o homem!</p>
<p>para provar estas teorias, usam-se relógios atómicos. uns na terra, uns no espaço, outros ali pela atmosfera às voltas para um lado e para o outro. no fim juntam-se e todos mostram durações diferentes. o que eu sei sobre os relógios atómicos é que são muito precisos, regulares. o que eu sei também é que um relógio não sustenta a noção de tempo. isto é, porque é que se diz que o tempo contrai e dilata e não se diz que o relógio alterou o seu período? se calhar as diferentes condições de velocidade e de massa condicionam o funcionamento dos relógios, e não o tempo em si.</p>
<blockquote><p>se circundares a terra à velocidade da luz durante 40 anos, quando aterrares passaram 10&#8217;000 anos na terra, ou coisa que o valha.</p></blockquote>
<p>até pode ser, mas o facto de eu ter envelhecido apenas 40 anos não implica que o tempo tenha mudado. explica apenas que eu envelheci a uma taxa de 40 anos por 10&#8217;000. o que mudou, a meu ver, foi a minha percepção do tempo, e a velocidade dos meus mecanismos biológicos. se é essa a noção de tempo, então claro que é fácil viajar, mesmo para trás: qualquer envelhecimento reversível.</p>
<p>não tenho para mim que envelhecer mais rápido ou mais devagar em relação a outros seja viagem no tempo. viagem no tempo consiste em saltar entre momentos diferentes de um tempo a 3 dimensões, se é que existem! há tanta coisa escrita que nem me atrevo a citar (nem a ler!). acredito em viagens no tempo, claro, e que o homem conseguiria controlar, mas acho que a extinção chegará antes desse dia. sem a discussão e as teorias científicas não era possível avançar, mas deixo isso para os tolos. por enquanto, e com tantas incertezas, o tema ao café não passa de filosofia.</p>
]]></content:encoded>
			<wfw:commentRss>http://bugflux.org/blog/1177:tudo-tem-o-seu-tempo/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
