sexta-feira, 6 de julho de 2012

Tratando excessões no Oracle via código de erro

A solução é declarar uma exception e inicializá-la com o tipo:



begin
  DECLARE  test_exce EXCEPTION;
   PRAGMA EXCEPTION_INIT(test_exce, -20002);
  begin
    raise_application_error(-20002, ':)');
  exception when test_exce
    THEN
    BEGIN
      NULL;
    END;
  end;
end;


Bem mais elegante do que capturar todas (com o OTHERS) e testar o código do erro (SQLCODE). ;)

Fonte: http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/errors.htm#i1863

quarta-feira, 30 de maio de 2012

Oracle XE

Para permitir acesso de qualquer host ao Apex (interface em HTML para administração):
BEGIN DBMS_XDB.SETLISTENERLOCALACCESS(FALSE); END;
Solução para o erro:
ORA-12519: TNS:no appropriate service handler found
Executar o seguinte SQL:
ALTER SYSTEM SET PROCESSES=300 SCOPE=SPFILE;

terça-feira, 29 de novembro de 2011

(re)gerando build.xml de um projeto Android

Pode ser que, ao pegar um projeto criado no Eclipse para o Android, o projeto gerado não tenha alguns arquivos necessários para trabalhar via CLI - seu professor pode não tê-los incluído, por exemplo ;). O build.xml e o local.properties são necessários para usar o "ant" no projeto. É possível, entretanto, gerá-los. Basta o comando:
android update project --path <caminho> --name <nome> --target <versão>
<caminho> é o path para o projeto. Os demais parâmetros podem ser conferidos no post Hello Android World

terça-feira, 16 de agosto de 2011

Usando o Log no Android

No meio do desenvolvimento, certamente você precisará de algumas informações pra descobrir o que está acontecendo de errado. O SDK do Android tem uma ferramenta de log que pode ser usada facilmente.

No código, só é necessário incluir, em pontos estratégicos, uma chamada para a classe estática "Log":

Log.d("MyTAG", "message");
Para "ouvir" o log, é necessário executar o seguinte comando:
$ adb logcat
Também é possível usar uma variável de ambiente para filtrar as mensagens pela TAG: ANDROID_LOG_TAGS
export ANDROID_LOG_TAGS="ActivityManager:I MyTAG:D *:S"
"ActivityManager" são os logs de atividades do Android. Serão mostradas mensagens de informação (o "I" indica isso).
"MyTAG" é a TAG que interessa, com mensagens de debug (o "D") ;)
O asterisco é para silenciar (S) todas as demais mensagens.

O valor dessa variável pode ser sobrescrito via linha de comando:
$ adb logcat MyTAG:D *:S
Com isso, a variável de ambiente é completamente ignorada.

Mais informações:
$ adb logcat --help
http://developer.android.com/reference/android/util/Log.html
http://developer.android.com/guide/developing/tools/logcat.html

terça-feira, 9 de agosto de 2011

Hello Android World

Depois de anos, reativando o blog com um post sobre o Android...

Comprei um Nexus S, da Samsung e pretendo criar algumas apps pro Android. O emulador do Android é muito (muito mesmo) lento. Então, a ideia é usar um dispositivo "real" pra testes e debug.

Instalando o SDK
Primeiro, as dependências: precisa instalar o Java (estou usando o OpenJDK 1.6.0_22 e o ant). Use o yum ou o apt, funciona! ;)
 
Depois, é necessário instalar o SDK do Android, que está disponível em http://developer.android.com/sdk/. No Linux, primeiro precisa baixar e descompactar em algum lugar.

Eu baixei e descompactei em /home/rodolfo/source/android/android-sdk-linux_x86.

Depois, é necessário instalar a versão da API que se quer usar. Para isso, executamos "android" que está na pasta "tools".



Seguindo a interface, acesse "Available Packages" e  marque a versão do Android no celular. Atualmente, a última para celulares (a 3.* é para trablets) é o "SDK Plataform Android 2.3.3, API 10, revision 1".

Atenção para o número 10 da API, será útil no futuro. Espere o download e era isso. :)

Tipos de Aplicações no Android
  • Activities => interface gráfica onde o usuário pode interagir
  • Services => parte/software que fica executando em segundo plano
  • Broadcast Receivers => aplicações que respondem a determinados eventos, como receber um SMS, por exemplo. 
No nosso "HelloWorld", vamos criar uma "Activity", com um texto "HelloWorld" na tela. Simples assim.

Ajustando o ambiente
Como não pretendo usar o eclipse, uma dica é configurar o shell para usar diretamente os comandos do SDK.

export PATH="$PATH:/home/rodolfo/source/android/android-sdk-linux_x86/tools:/home/rodolfo/source/android/android-sdk-linux_x86/platform-tools"
Lembre-se de ajustar o path para onde você descompactou o SDK. ;)


Criando o projeto

No shell:
android create project -t 10 -k meu.HelloWorld -a HelloWorld -n myHelloWorld --path ./myHelloWorld
Os parâmetros:
  • -t , onde o é o nro que está na API, quando instalamos
  • -k indica o nome do projeto, que sempre precisa ter 2 palavras, separadas por "." (deve ser culpa do Java).
  • -n indica o nome da atividade. Quando vc instalar a app no celular, é esse o nome que vai aparecer no menu do android.
  • --path é o local onde os arquivos do projeto serão criados
O projeto, obviamente, não faz nada. Vamos alterar só pra escrever o HelloWorld na tela.


O primeiro código

No "path" do projeto existe uma pasta "src" que - obviamente - contém os fontes. Lá dentro, edite o arquivo HelloWorld.java:

package meu.HelloWorld;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class HelloWorld extends Activity
{
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        TextView tv = new TextView(this);
        tv.setText("Hello, Android!");
        setContentView(tv);
    }
}
Sem muitas explicações, vamos logo rodar isso...


Compilando...
Voltando ao path do projeto, execute:
ant debug
Sim, por enquanto, debug ativo. E só.
O ant já cria, no diretório "bin" do projeto, os arquivos .apk para serem instalados.


... configurar o celular...
É preciso habilitar o celular para rodar aplicações de fora do Android Market. Isso fica nos ajustes (settings) do celular.
E mais algumas configurações que podem ser encontradas em http://developer.android.com/guide/developing/device.html
 
... e rodar!
No projeto, é só executar
ant install
A aplicação será transferida para o celular. A partir de agora, só precisa clicar nela pra tudo sair funcionando..


Melhor que usar o eclipse, né!? ;)




Fontes:
http://developer.android.com/guide/developing/device.html
http://blogs.nitobi.com/joe/2010/03/26/android-without-eclips/

sábado, 30 de outubro de 2010

RailsRumble 2010

Já faz um bom tempo que terminou (foi no final de semana dos dias 16 e 17 de Outubro), mas os resultados ainda estão aí. Participei do RailsRumble convidado pelo @juliogreff. A meta: programar alguma coisa usando RoR em 48h. Detalhe: nem eu, nem ele tínhamos feito nada em Rails antes da equipe Nuby on Rails (que contava com o talento do @rafaelmarin e do @herminiotorres).

A aplicação também foi ideia do Júlio: http://choons.fm. É uma rede social para bons ouvintes (de boa música).


A experiência foi incrivelmente única. Eu não acreditava que a gente conseguiria terminar, mas conseguimos. A estratégia não foi das melhores: Extreme Go Horse (extreme). Talvez por isso o código precise ser refeito... e eu disse talvez... haha

Falando sério, passar 48h programando, dormindo pouco e sob pressão pode não parecer muito divertido, mas o aprendizado no processo foi grande. É muito bom colocar em prática o que foi lido no Caindo na Real (ou Getting Real) - que agora tem nova versão chamada Rework. Acaba dando muita energia para discutir nas reuniões e pra querer mudar o rumo das coisas...

E acontece de às vezes querer pedir demissão, né Júlio?!

Ah, só pra constar: ficamos em 3º lugar (atrás do BeerCheckIn e do Owe Me Cash) na classificação geral, de 180 equipes que conseguiram terminar em 48h, de 300 equipes que se inscreveram. Nada mal para marinheiros de primeira viajem, não?! :)


Então: recomendo pra todo mundo participar, mesmo que não saiba nada de RoR. E mesmo que não consiga terminar a app, o que se aprende vai muito além do código-fonte!

domingo, 3 de outubro de 2010

Primeiros passos com RoR

Comecei a ver RoR seguindo o Getting Started. Tive um problema logo no começo. Foi ao usar o console:

rodolfo@rodolfoNote:~/RoR/blog$ rails console/opt/RoR/ruby/lib/ruby/1.9.1/irb/completion.rb:9:in `require': no such file to load -- readline (LoadError)
from /opt/RoR/ruby/lib/ruby/1.9.1/irb/completion.rb:9:in `<top (required)>'
from /opt/RoR/ruby/lib/ruby/gems/1.9.1/gems/railties-3.0.0/lib/rails/commands/console.rb:3:in `require'
from /opt/RoR/ruby/lib/ruby/gems/1.9.1/gems/railties-3.0.0/lib/rails/commands/console.rb:3:in `<top (required)>'
from /opt/RoR/ruby/lib/ruby/gems/1.9.1/gems/railties-3.0.0/lib/rails/commands.rb:20:in `require'
from /opt/RoR/ruby/lib/ruby/gems/1.9.1/gems/railties-3.0.0/lib/rails/commands.rb:20:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'

A solução foi encontrada em http://snippets.aktagon.com/snippets/57-Solution-to-require-no-such-file-to-load-readline-LoadError-problem, mas a solução não foi suficiente:

root@rodolfoNote:/opt/RoR/src/ruby-1.9.2-p0/ext/readline# ruby extconf.rb 
checking for tgetnum() in -lncurses... yes
checking for readline/readline.h... no
checking for editline/readline.h... no

O script indica que não encontrou o "readline.h". A solução é instalar o pacote libreadline6-dev via apt e repetir o processo. Essa falha não acontecerá se essa lib estiver instalada no momento de compilar o ruby. :)

Depois, é só tocar ficha:

cd /ruby-1.9.2-p0/ext/readline
ruby extconf.rb
make
make install

Por hoje é só. Logo posto mais resultados... :)