plpgsql para corrigir o “nextId” em bases PostgreSQL (conserta as sequences)

CREATE OR REPLACE FUNCTION "public"."fixsequence"()
 RETURNS "pg_catalog"."int2" AS $BODY$declare v_reg record;
v_sql varchar;
i_count int;
BEGIN
 i_count := 0;

       for v_reg in (
               select t.table_name, c.column_name, t.table_schema, s.sequence_name
               from information_schema.tables t
               inner join information_schema.columns c on
                  c.table_catalog = t.table_catalog and
                  c.table_schema = t.table_schema and
                  c.table_name = t.table_name and
                  c.column_name = 'id'
               inner join information_schema.sequences s on
                  t.table_catalog = s.sequence_catalog and
                  t.table_schema = s.sequence_schema and
                  lower(s.sequence_name) = lower(t.table_name || '_id_seq')
       ) loop
               v_sql := 'SELECT setval(''"'|| v_reg.table_schema || '"."' || v_reg.sequence_name || '"'', (SELECT max("'|| v_reg.column_name ||'")+1 FROM "'||v_reg.table_schema||'"."' || v_reg.table_name || '"))';
               execute v_sql;
               i_count := i_count +1;
       end loop;
       RETURN i_count;
END
$BODY$
 LANGUAGE 'plpgsql' VOLATILE;

Obs.: Note que ali onde tem “c.column_name = ‘id'”, “id” se refere a chave primária de suas tabelas 😉

Retirado de: http://www.danielpk.com.br/blog/2010/04/08/corrigir-as-sequences-do-postgres/comment-page-1/#comment-7822

LaercioRedes

Os conceitos básicos de otimização para mecanismos de pesquisa inclui construir um bom conteúdo e que seja fácil de encontrar. Algumas tecnologias ajudam a garantir mais visibilidade à página. Veja sugestões.

Os princípios do Search Engine Optimization (SEO), otimização de sites em português, incluem criar um conteúdo que os leitores vão querer vincular nas mídias sociais, blogs ou outros sites e contar com um conteúdo fácil de encontrar com palavras-chave relevantes. O mecanismo também garante que seu site não tem questões técnicas que podem impedir os motores de busca de indexar o conteúdo.

Mas como fazer isso e ainda medir o sucesso da iniciativa? Diversas ferramentas SEO podem ajudar nessa tarefa. A seguir você encontra 20 tecnologias, listadas sem nenhuma ordem particular, recomendados por três especialistas: Jill Whalen, consultora SEO da High Rankings; Nicole Munoz, CEO e fundadora da StartRankingNow; e Matt McGee, editor-chefe do Search Engine Land and Marketing…

Ver o post original 1.166 mais palavras

Android – Desabilitar o desligamento automático de tela (Disable screen sleep)

Cópia fiel de: http://zarelli.wordpress.com/

– Não permitir que a tela durma
– Disable screen timeout
– Disable screen turning off
– Disable screen automatically turns off
– Disabling screen sleep
– Disable screen sleep
– Disable sleep activity
– Disable turn off activity

Esse é um termo muito difícil de se encontrar (pelo menos para min), acho que é o post mais complicado de se dar um titulo, afinal como desabilitar o desligamento automatico da tela em sua activity?

Existe somente uma maneira (correta) sem a necessidade de mexer nas configurações do visor. Veja como.

Ou você define no XML da tela ou no código fonte:

android:keepScreenOn=”true”
ou
setKeepScreenOn(true);

Exemplo:

No XML (maneira mais simples e acredito que a melhor):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:keepScreenOn="true"
    >
<TextView  
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:text="Hello World, MainActivity"
    />
</LinearLayout>

no codigo fonte (lembre-se de ter definido o id na tag root do layout):

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    findViewById(R.id.main).setKeepScreenOn(true);
}

Pronto, sua tela/activity não vai mais dormir/desligar.

Fonte:http://developer.android.com/reference/android/view/View.html#setKeepScreenOn%28boolean%29

Buscando dispositivos bluetooth no Android

Cópia fiel de: http://zarelli.wordpress.com/

Bluetooth

A plataforma Android inclui suporte para a pilha de rede Bluetooth, que permite que um dispositivo troque dados com outros dispositivos Bluetooth. A estrutura do framework fornece acesso à funcionalidade Bluetooth através do Bluetooth Android APIs. Essas APIs permitem que as aplicações estabeleção comunicação sem fio com outros dispositivos Bluetooth.

Usando as APIs de Bluetooth, uma aplicação Android pode executar o seguinte:

  • Verificar se há outros dispositivos Bluetooth
  • Consultar o adaptador Bluetooth local para dispositivos Bluetooth emparelhados
  • Estabelecer canais RFCOMM
  • Conectar a outros dispositivos através do serviço de descoberta
  • Transferir dados para e de outros dispositivos
  • Gerenciar conexões múltiplas

Abaixo vamos mostrar algumas funcionalidades como a busca de dispositivos.

Buscando dispositivos

Antes de tudo, lembre-se de inserir as permissões no seu Manifest.xml. A primeira permissão é para a busca de dispositivos e outras coisas relacionadas ao bluetooth (como transferência). A segunda permissão é utilizada para controle do dispositivo, ex: ativar o bluetooth.

android:name="android.permission.BLUETOOTH"/>
android:name="android.permission.BLUETOOTH_ADMIN"/>

Como o exemplo vai ser bem simples, vamos mostrar os itens em um ListView, assim teremos apenas um Layout “main.xml”

<!--?xml <span class="hiddenSpellError" pre="xml "-->version="1.0" encoding="utf-8"?>
xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
>
    <ListView
        android:id="@+idMain/listview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
    />
</LinearLayout>

Agora vamos mostrar a classe responsável por TUDO a Bluetooth.java, essa classe extende BroadcastReceiver porque ela vai ser um receiver do sistema, vamos definir alguns filtros sobre o que ela vai “ouvir” e implementar o que vamos fazer com isso. Caso você não saiba o que é um Broadcast tentem ler algo sobre pois vai facilitar o entendimento.

public class Bluetooth extends BroadcastReceiver
{
    [...]
    private BluetoothListener listener;
    private ArrayList lista;
    private BluetoothAdapter dispositivo;

    private Bluetooth(BluetoothListener listener)
    {
        this.listener = listener;
        lista = new ArrayList();
    }
    [...]
}

Como a classe é muito grande vou explica-la por partes para nao ficar muito confuso. No final do topico vou inserir um link do projeto também.

Tudo que irei mostrar vai estar dentro da classe Bluetooth.
Abaixo defini um listener que vai ser responsável em informar as ações da busca.

public static interface BluetoothListener
{
        public static final String ACTION_DISCOVERY_STARTED = BluetoothAdapter.ACTION_DISCOVERY_STARTED;
        public static final String ACTION_FOUND = BluetoothDevice.ACTION_FOUND;
        public static final String ACTION_DISCOVERY_FINISHED = BluetoothAdapter.ACTION_DISCOVERY_FINISHED;

        public void action(String action);
}

No método abaixo é realizado o registro dos broadcast para ler as ações do bluetooth e iniciar a busca.

public static Bluetooth startFindDevices(Context context, BluetoothListener listener) throws IOException
{
    Bluetooth bluetooth = new Bluetooth(listener);

    //Pego o adapter
    bluetooth.dispositivo = BluetoothAdapter.getDefaultAdapter();

    // verifico se o bluetooth esta desabilitado, se tiver habilito
    //retorno null pois esta ação demora para ser concluida. (tratar)
    if (!bluetooth.dispositivo.isEnabled())
    {
        bluetooth.dispositivo.enable();
        return null;
    }

     // Registro os Broadcast necessarios para a busca de dispositivos
    IntentFilter filter = new IntentFilter(BluetoothListener.ACTION_FOUND);
    IntentFilter filter2 = new IntentFilter(BluetoothListener.ACTION_DISCOVERY_FINISHED);
    IntentFilter filter3 = new IntentFilter(BluetoothListener.ACTION_DISCOVERY_STARTED);
    context.registerReceiver(bluetooth, filter);
    context.registerReceiver(bluetooth, filter2);
    context.registerReceiver(bluetooth, filter3);

    //inicio a busca e retorno o objeto que vai ter alista de dispositivos
    bluetooth.dispositivo.startDiscovery();
    return bluetooth;
}

Beleza, estamos iniciando a busca, mas como vamos descubrir o que está chegando? você deve sobrescrever o método onReceive do BroadcastReceiver. Abaixo vamos tratar cada Broadcast que foi registrado e chamar o listener para informar o que está acontecendo.

@Override
public void onReceive(Context context, Intent intent)
{
    String action = intent.getAction();

    //caso encontre um dispositivo:
    if ( action.compareTo(BluetoothDevice.ACTION_FOUND) == 0 )
    {
        //pega as o dispositivo encontrado:
        BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

        //se a lista já tiver esse dispositivo eu retorno para o proximo
        //isso permite que sejá mostrado somente uma vez meu dispositivo
        //problema muito comum em exemplos
        if ( lista.contains(device) )
        {
            return;
        }

        //adiciono o dispositivo na minha lista:
        lista.add(device);
    }
    else if ( action.compareTo(BluetoothAdapter.ACTION_DISCOVERY_FINISHED) == 0 )
    {
        //caso o discovery chegue ao fim eu desregistro meus broadcasts
        //SEMPRE FAÇA ISSO quando terminar de usar um broadcast
        //(aqueles IntentFilter que criei anteriormente)
        context.unregisterReceiver(this);
    }

    if (listener != null)
    {
        //se foi definido o listener eu aviso a quem ta gerenciando.
        listener.action(action);
    }
}

Pronto, agora como usar essa classe ?
abaixo temos a Main do projeto:
Resumindo, implementei o Listener da classe Bluetooth para que podemos ler a ação, no onCreate damos o start na busca e definimos um adapter para o listview.
no método do listener (action) vamos tratar as ações do Bluetooth. quando chega no fim da busca pegamos os dispositivos da classe bluetooth e exibimos no listview.

public class MainActivity extends Activity implements Bluetooth.BluetoothListener
{
    private static final String TAG = "BuscaBluetooth";
    private Bluetooth bluetooth;
    private ArrayAdapter arrayAdapter;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        try
        {
            bluetooth = Bluetooth.startFindDevices(this, this);
        }
        catch (Exception e)
        {
            Log.e(TAG, "Erro: ", e);
        }

        arrayAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1);
        ListView listView = (ListView) findViewById(R.idMain.listview);
        listView.setAdapter(arrayAdapter);
    }

    public void action(String action)
    {
        if ( action.compareTo(ACTION_DISCOVERY_STARTED) == 0 )
        {
            arrayAdapter.add("-Busca iniciada");
        }
        else if ( action.compareTo(ACTION_DISCOVERY_FINISHED) == 0 )
        {
            preencherLista();
            arrayAdapter.add("-Fim de busca.");
        }
    }

    private void preencherLista()
    {
        for (BluetoothDevice device : bluetooth.getDispositivos())
        {
            arrayAdapter.add(device.getName() + "\n" + device.getAddress());
        }
    }
}

Se rodarmos a aplicação veremos algo como:
busca-bluetooth
Como opcional inseri um método na classe Bluetooth que pega os dispositivos já pareados.

public static Bluetooth getBondedDevices(Context applicationContext) throws IOException
{
    Bluetooth bluetooth = new Bluetooth(null);

    // Pega o dispositivo
    bluetooth.dispositivo = BluetoothAdapter.getDefaultAdapter();

    if ( !bluetooth.dispositivo.isEnabled() )
    {
        bluetooth.dispositivo.enable();
    }

    // Pega a lista de dispositivos pareados
    Set pairedDevices = bluetooth.dispositivo.getBondedDevices();

    // Adiciono na lista e depois retorno a mesma.
    if ( pairedDevices.size() > 0 )
    {
        for (BluetoothDevice device : pairedDevices)
        {
            bluetooth.lista.add(device);
        }
    }

    return bluetooth;
}

Talvez para leigos(ou nao) fica um pouco complicado para entender o conceito do listener dos Broadcasts e da minha pouca explicação, no link abaixo coloquei o projeto completo.

LINK DO PROJETO (DropBox)

Fonte: http://goo.gl/D7ekO