O que é node.js, para que serve e como crio um servidor web simples com uma página simples, tutorial rápido e que funciona

Depois de um certo tempo, estamos de volta com novidades. Desta vez  vamos falar o que é node.js. Hã!?? Isso mesmo, dá uma conferida no projeto que já rola há muito tempo e você nem imaginava https://nodejs.org/en/. No site você vai encontrar, obviamente, tudo a respeito de node.js como documentação, novas versões, notícias, enfim é o site oficial dos caras. Vamos ver o que é node.js e como usar com um tutorial rápido.

O node.js é um projeto que tem por base o bom e velho javascript que nos acompanha desde os primórdios de quando o flash dominava. No início dos tempos com erro para caramba e aos poucos os navegadores foram aceitando e hoje é sem javascript não teríamos sequer jquery (que fica para uma próxima). Claro que o node.js não é simplesmente um javascript e pronto, ele é um tanto quanto que mais poderoso, afinal a base dele é realmente o V8 (https://developers.google.com/v8/) que é um interpretador que roda no servidor, é aí mano, no servidor e não no cliente. Aí é que está o pulo do gato. Afinal todo o processamento pesado é feito diretamente no servidor permitindo uma infinidade de situações em que ele pode quase tudo desde acessar banco de dados como criar pastas, conexão TCP, utilizar VOIP, XMPP, MQTT etc.

Para aplicativos e para internet das coisas, comece por aqui , o node.js.

Trocando em miúdos, hoje o node.js é uma das ferramentas mais simples para subir um servidor web com banco de dados até mesmo em um raspberry, pois é leve, aceita uma quantidade gigante de conexões, altamente escalável, relativamente fácil de programar e tem uma comunidade que cresce quase que exponencialmente (tá, exagerei), mas tem gente pacas desenvolvendo e disponibilizando seus frameworks.

Vamos do básico, como instalar o node.js no seu servidor linux (é bem mais fácil e rápido em servidores que você tenha acesso normal shell) e criar o básico e “isso aqui ta funfando!!! uhuu”.

Vamos ao nosso conhecido SSH e conferimos se temos bzip e python corretamente instalados e nas versões necessárias:

rpm -qa|grep bzip2-devel
python -V

A resposta tem que ser algo mais ou menos assim pelo menos:

bzip2-devel-1.0.5-7.el6_0.x86_64

Python 2.6.6

Depois disso você escolhe onde vai fazer a instalação do node.js. Normalmente aconselhamos instalar no /usr/local, mas como sabemos, às vezes a coisa tá meio lotada lá, verifique onde você tem um espaço legal para não prejudicar nada também, afinal não é legal comprometer o servidor por causa de um único software. Para saber onde tem espaço utilize o comando abaixo que vai ter dar uma “geral” do seu servidor.

df -h

Blz, por hora vamos dizer que vamos instalar no /usr/local, então siga os passos abaixo:

cd /usr/local/src
wget http://nodejs.org/dist/latest-v0.10.x/node-v0.10.40.tar.gz
tar -zxvf node-v0.10.40.tar.gz
cd node-v0.10.40
./configure --prefix=/usr/local
make
make install

Vamos trabalhar com a versão 0.10, se você digitar somente http://nodejs.org/dist/, vai ver que tem um monte delas, mas por hora esta versão é bem estável e a grande maioria dos frameworks funcionam bem nela.

Confira se está instalado:

node -v

Se retornar v0.10.40tá de boa, tá instalado corretamente. MAS se você fez isso e não apareceu nada, verifique seu PATH, com o comando abaixo

echo $PATH

Isto possivelmente só acontecerá se você instalar em um diretório diferente de /usr/local, pois o PATH não existirá, dai basta colocar o novo.

Então blz, tudo instalado corretamente e vamos criar a nossa página.

Ah sim, uma coisa legal, você não precisa colocar dentro do seu diretório “public_html” e nem nada parecido para que o seu .js funcione, ou seja, pode estar em qualquer lugar. PORÉM, se você abrir uma porta 8080 por exemplo, TODOS os domínios que estão no mesmo servidor se o cara digitar para acessar a porta 8080, vai acessar sua área de node.js, manjou?

Bora criar, vou usar o nano porque acho mais amigável, mas pode usar pico, vi, tanto faz:

nano falai.js

var http = require('http');

http.createServer(function (request, response) {
    response.writeHead(200, {'Content-Type': 'text/plain'});
    response.end('isso aqui ta funfando\n');
}).listen(8080);

console.log('isso aqui ta funfando');

Feito isso e tendo salvado o arquivo falai.js, é só rodar:

node falai.js

já era, ele vai te dar uma mensagem no console (ssh) e agora você pode acessar seu site por exemplo www.yesbr.com.br:8080 e verá a mensagem “isso aqui ta funfando”.

É isso aí, o conceito é legal e as possibilidades são muitas, se tiver algum comentário de algum vacilo que eu tenha cometido aqui, por favor já avise ai abaixo ou mande e-mail para não ficar público rsrs

Trabalhando com pickerView em swift

Bom pessoal vamos trabalhar neste post com um pickerView, este componente é bem interessante e pode ser utilizado para alguns fins, neste post não vamos nos aprofundar muito no componente iremos basicamente criar um componente para selecionar valores dentro de nosso pickerView.

Vamos começar com nosso storyboard, não precisaremos da nada muito complexo apenas vamos colocar nosso pickerView e uma label, o label só estará la para quando selecionarmos um valor em nosso picker possamos ver o que selecionamos.

telaApp

Bom com nosso pickerView e o label devidamente ligados a nossa classe vamos ao código agora. Mas antes disso vamos ligar importar o delegate e o dataSource para nosso projeto para isso vamos mudar na declaração da classe, agora ficou da seguinte maneira:

class ViewController: UIViewController,UIPickerViewDataSource,UIPickerViewDelegate

É possível que ao importa-los você tenha recebido alguns erros, vamos ignora-los por enquanto pois basicamente o xcode está reclamando pois importamos, e não estamos usando.

Vamos agora implementar o delegate e o dataSource ao picker com apenas duas linhas de código dentro de nosso viewDidLoad:

PickerTeste.delegate = self

PickerTeste.dataSource = self

Antes de prosseguir, nós temos um pickerView, mas o que iremos mostrar nele ? Bom para isso iremos criar um array (caso ainda tenha alguma dúvida quanto aos arrays você pode dar uma olhada neste post onde trabalhamos um pouco mais com eles).

Nosso array está da seguinte maneira:

let arrayDados = [“categoria 1”,“categoria 2”,“categoria 3”,“categoria 4”,“categoria 5”,“categoria 6”,“categoria 7”,“categoria 8”,“categoria 9”,“categoria 10”,“categoria 11”]

Com nosso array criado podemos continuar, vamos criar os métodos necessários para nosso picker funcionar.

Assim como em uma tableView precisamos de um método que retorne quantos itens serão mostrados pelo componente, para nosso picker esse método é o numberOfRowsInComponent

a função completa fica assim:

func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {

return arrayDados.count

}

Assim como fazemos quando usamos um array retornamos o count (numero de itens) do array, pois caso o array tenha um tamanho diferente (no caso de um valor ter sido inserido, ou retirado) não teremos problemas.

Caso tenha dúvidas sobre funções você pode dar uma olhada neste post onde trabalhamos com elas.

Com este método agora vamos atribuir o valor dos array ao picker, porém vamos fazer de maneira diferente, vamos atribuir valores customizados para nossas linhas do picker, com o seguinte método:

Por ela já estar comentado acredito que não será necessário explicar parte por parte do método.

func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView!) -> UIView {

var pickerLabel = view as UILabel!

if view == nil {

pickerLabel = UILabel()

// alterando o background do label, baseando no valor da linha

let hue = CGFloat(row)/CGFloat(arrayDados.count)

pickerLabel.backgroundColor = UIColor(hue: hue, saturation: 1.0, brightness: 1.0, alpha: 1.0)

}

// atribuindo o valor correspondendo do array para a linha

let titleData = arrayDados[row]

// atribuindo fonte e tamanho de fonte para as linhas

let myTitle = NSAttributedString(string: titleData, attributes: [NSFontAttributeName:UIFont(name: “Georgia”, size: 26.0)!,NSForegroundColorAttributeName:UIColor.blackColor()])

pickerLabel!.attributedText = myTitle

// retorno do método

return pickerLabel

}

Por fim vamos fazer o método para que quando nosso usuário selecione uma linha esse valor seja passado para nosso label, para isso usamos um método igual ao de tableView, usamos o didSelectRow, para o pickerView o método completo fica assim:

func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {

labelTeste.text = arrayDados[row]

}

Lembrando que “labelteste” é o label que eu criei, se você tiver usado outro nome para seu label, você deverá alterar isso. Esses são apenas alguns métodos que temos a disposição para implementar em nosso pickerView, temos outros como por exemplo:

func pickerView(pickerView: UIPickerView, rowHeightForComponent component: Int) -> CGFloat

Onde podemos retornar um valor do tipo float para alterar o tamanho das linhas selecionadas, ou

func pickerView(pickerView: UIPickerView, widthForComponent component: Int) -> CGFloat

Onde podemos retornar a largura da linha selecionada.

Bom espero ter ajudado, por hoje ficamos por aqui.

Como criar uma Activity no Android

Fala galera! Hoje vamos ver como criar uma Activity no Android.

Basicamente, Activity é uma classe que gerencia uma UI (interface com o usuário). Todas as aplicações Android começam por uma Activity. Ou seja, quando um aplicativo é iniciado, sua Activity principal é lançada.

Se você ainda não viu o último tutorial da série, clique no link a seguir: exibir mensagens no Android. Se você ainda continua é preguiçoso e apenas baixou o projeto, importe-o para sua workspace. Para tal, vá em File → Import… → Existing Projects into Workspace, dentro de General.

Ciclo de vida de uma Activity

Antes de começar, é muito importante conhecer o funcionamento de uma Activity. Observe o diagrama abaixo:

Como criar uma Activity no Android

A partir deste diagrama, fica mais fácil de entender o funcionamento. Implicitamente, ele introduz os estados que uma Activity pode assumir. Veja a próxima imagem:

Como criar uma Activity no Android

Segue uma breve explicação de cada método nativo da classe Activity:

  • onCreate(): É a primeira função a ser executada quando uma Activity é lançada. Geralmente é a responsável por carregar os layouts XML e outras operações de inicialização. É executada somente uma vez durante a “vida útil” da Activity.
  • onStart(): É chamada imediatamente após a onCreate() – e também quando uma Activity que estava em background volta a ter foco.
  • onResume(): Assim como a onStart(), é chamada na inicialização da Activity (logo após a própria onStart()) e também quando uma Activity volta a ter foco. Qual a diferença entre as duas? A onStart() só é chamada quando a Activity não estava mais visível na tela e volta a ter o foco, enquanto a onResume() sempre é chamada nas “retomadas de foco”.
  • onPause(): É a primeira função a ser invocada quando a Activity perde o foco (ou seja, uma outra Activity vem à frente).
  • onStop(): Análoga à onPause(), só é chamada quando a Activity fica completamente encoberta por outra Activity (não é mais visível).
  • onDestroy(): A última função a ser executada. Depois dela, a Activity é considerada “morta” – ou seja, nao pode mais ser relançada. Se o usuário voltar a requisitar essa Activity, outro objeto será contruído.
  • onRestart(): Chamada imediatamente antes da onStart(), quando uma Activity volta a ter o foco depois de estar em background.

Como criar uma Activity

Para criar uma nova Activity, são três passos básicos: criar o layout (como já visto neste link), criar a classe que estende a classe Activity, declarar essa nova classe no AndroidManifest.xml.

Vamos então alterar nosso projeto, de forma que a primeira tela seja apenas para listar os carros cadastrados no banco de dados.

Primeiramente, vamos alterar o arquivo activity_main.xml para que ele exiba somente a lista, e também um botão para cadastrar novos veículos.
PS: Não se esqueça de criar a constante “cadastrar” no arquivo /res/values/strings.xml.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:orientation="vertical" >
 
   <Button
       android:id="@+id/cadastrar"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="@string/cadastrar" />
 
   <ListView
       android:id="@+id/lista"
       android:layout_width="match_parent"
       android:layout_height="wrap_content" >
   </ListView>
 
</LinearLayout>

Vamos atualizar nossa Activity principal ListaCarros, fazendo as adaptações para o novo layout.

public class ListaCarros extends ActionBarActivity {
                Button cadastrar;
                ListView lista;
                List listaCarros;
                ArrayAdapter<String[]> adaptador;
                Dados dados;
                Cursor carros;
                @Override
                protected void onCreate(Bundle savedInstanceState) {
                               super.onCreate(savedInstanceState);
                               setContentView(R.layout.activity_main);
                               cadastrar = (Button) findViewById(R.id.cadastrar);
                               lista = (ListView) findViewById(R.id.lista);
                               listaCarros = new ArrayList();
                               adaptador = new Adaptador();
                               dados = new Dados(this);
                               cadastrar.setOnClickListener(new OnClickListener() {
                                               @Override
                                               public void onClick(View v) {
                                                               Intent i = new Intent(ListaCarros.this, CadastrarCarros.class);
                                                               startActivity(i);
                                               }
                               });
                               lista.setAdapter(adaptador);
                               atualizaLista();
                }
                @Override
                public boolean onCreateOptionsMenu(Menu menu) {
                               // Inflate the menu; this adds items to the action bar if it is present.
                               getMenuInflater().inflate(R.menu.main, menu);
                               return true;
                }
                @Override
                public boolean onOptionsItemSelected(MenuItem item) {
                               // Handle action bar item clicks here. The action bar will
                               // automatically handle clicks on the Home/Up button, so long
                               // as you specify a parent activity in AndroidManifest.xml.
                               int id = item.getItemId();
                               if (id == R.id.action_settings) {
                                               return true;
                               }
                               return super.onOptionsItemSelected(item);
                }
                // Classe responsável por criar um adaptador para as linhas do ListView
                class Adaptador extends ArrayAdapter {
                               Adaptador() {
                                               // Chama o construtor da classe ArrayAdapter, passando a classe
                                               // atual,
                                               // um layout padrão e a lista dos itens que serão adicionados.
                                               super(ListaCarros.this, android.R.layout.simple_list_item_1,
                                                                              listaCarros);
                               }
                               // Vamos sobrepor o método getView, pois é aqui que vamos chamar nosso
                               // layout
                               // customizado
                               @Override
                               public View getView(int position, View convertView, ViewGroup parent) {
                                               // Instanciando os itens necessários: linha atual, classe
                                               // Armazenador
                                               // e o conteúdo que será inserido
                                               View linha = convertView;
                                               Armazenador armazenador = null;
                                               final String[] item_linha = (String[]) listaCarros.get(position);
                                               // Neste trecho é que chamaos nosso layout. Usamos o método
                                               // getLayoutInflater()
                                               // e depois indicamos o layout. Também já inserimos os dados na
                                               // posição atual
                                               // através da classe Armazenador.
                                               if (linha == null) {
                                                               LayoutInflater inflater = getLayoutInflater();
                                                               linha = inflater.inflate(R.layout.linha_carro, null);
                                                               armazenador = new Armazenador(linha, position);
                                                               linha.setTag(armazenador);
                                               } else {
                                                               armazenador = (Armazenador) linha.getTag();
                                               }
                                               // Agora sim, vamos jogar os dados nos seus respectivos campos do
                                               // layout da linha
                                               armazenador.popularFormulario((String[]) listaCarros.get(position));
                                               // Retorno obrigatório do método
                                               return linha;
                               }
                }
                // Classe responsável por "jogar" os dados nos campos corretos
                class Armazenador {
                               // Declaração dos campos
                               private TextView nomeCarro = null;
                               private TextView anoCarro = null;
                               private TextView corCarro = null;
                               // Construtor que instancia os campos
                               Armazenador(View linha, int position) {
                                               nomeCarro = (TextView) linha.findViewById(R.id.nomeCarro);
                                               anoCarro = (TextView) linha.findViewById(R.id.anoCarro);
                                               corCarro = (TextView) linha.findViewById(R.id.corCarro);
                               }
                               // Método para "jogar" os textos nos respectivos campos
                               void popularFormulario(String[] c) {
                                               nomeCarro.setText(c[0]);
                                               anoCarro.setText(c[1]);
                                               corCarro.setText(c[2]);
                               }
                }
                private void atualizaLista() {
                               adaptador.clear(); // Limpa o adaptador para evitar duplicados
                               carros = dados.obterTodos();
                               carros.moveToFirst(); // Move o ponteiro para o primeiro registro
                               while (!carros.isAfterLast()) {
                                               String veiculo = carros.getString(1).toString();
                                               String ano = carros.getString(2).toString();
                                               String cor = carros.getString(3).toString();
                                               String id = String.valueOf(carros.getInt(0));
                                               String[] c = { veiculo, ano, cor, id }; // Cria um array com os
                                                                                                                                                                                                            // dados do carro
                                               adaptador.add(c); // Adiciona no ArrayList
                                               carros.moveToNext(); // Move o ponteiro para o próximo registro
                               }
                               adaptador.notifyDataSetChanged(); // Atualiza a lista
                }
}

Vamos então criar nosso layout para cadastrar os novos veículos. Vamos chama-lo de cadastrar.xml.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:orientation="vertical" >
 
   <EditText
       android:id="@+id/veiculo"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:hint="@string/veiculo" >
 
       <requestFocus />
   </EditText>
 
   <EditText
       android:id="@+id/ano"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:ems="10"
       android:hint="@string/ano" />
 
   <EditText
       android:id="@+id/cor"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:ems="10"
       android:hint="@string/cor" />
 
   <Button
       android:id="@+id/salvar"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="@string/salvar" />
 
   <Button
       android:id="@+id/listar"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="@string/listar" />
 
</LinearLayout>

Como criar uma Activity no Android

E agora, vamos criar a nova Activity CadastrarCarros, que será a nova responsável por inserir os registros no banco de dados.

public class CadastrarCarros extends ActionBarActivity {
                EditText veiculo, ano, cor;
                Button salvar, listar;
                Dados dados;
                @Override
                protected void onCreate(Bundle savedInstanceState) {
                               super.onCreate(savedInstanceState);
                               setContentView(R.layout.cadastrar);
                               veiculo = (EditText) findViewById(R.id.veiculo);
                               ano = (EditText) findViewById(R.id.ano);
                               cor = (EditText) findViewById(R.id.cor);
                               salvar = (Button) findViewById(R.id.salvar);
                               listar = (Button) findViewById(R.id.listar);
                               dados = new Dados(this);
                               salvar.setOnClickListener(new OnClickListener() {
                                               @Override
                                               public void onClick(View v) {
                                                               dados.inserir(veiculo.getText().toString(), ano.getText()
                                                                                                              .toString(), cor.getText().toString());
                                                                              Toast.makeText(CadastrarCarros.this,
                                                                                                              "Registro inserido com sucesso!",
                                                                                                              Toast.LENGTH_SHORT).show();
                                                               veiculo.setText(null);
                                                               ano.setText(null);
                                                              cor.setText(null);
                                               }
                               });
                               listar.setOnClickListener(new OnClickListener() {
                                               @Override
                                               public void onClick(View v) {
                                                               Intent i = new Intent(CadastrarCarros.this, ListaCarros.class);
                                                               startActivity(i);
                                               }
                               });
                }
                @Override
                public boolean onCreateOptionsMenu(Menu menu) {
                               // Inflate the menu; this adds items to the action bar if it is present.
                               getMenuInflater().inflate(R.menu.main, menu);
                               return true;
                }
                @Override
                public boolean onOptionsItemSelected(MenuItem item) {
                               // Handle action bar item clicks here. The action bar will
                               // automatically handle clicks on the Home/Up button, so long
                               // as you specify a parent activity in AndroidManifest.xml.
                               int id = item.getItemId();
                               if (id == R.id.action_settings) {
                                               return true;
                               }
                               return super.onOptionsItemSelected(item);
                }
}

Como criar uma Activity no Android

E não podemos nos esquecer de declarar a nova Activity no arquivo AndroidManifest.xml.

<activity android:name="br.com.yesbr.tutorial.CadastrarCarros" ></activity>

Rode a aplicação e veja como ficou.

E no final das contas, como criar uma Activity no Android?

Para criar uma nova Activity, devemos instanciar um objeto da classe Intent, passando como parâmetros o contexto atual da aplicação e a nova classe que será chamada. As ações foram inseridas nas ações dos botões Cadastrar na classe ListaCarros e Salvar na classe CadastrarCarros. Depois, chamamos o método startActivity(), passando como parâmetro o objeto Intent que foi criado.

Considerações Finais

Agora que já sabemos como criar várias Activities, podemos separar as ações da nossa aplicação em várias telas. Porém, ainda não foi criada a parte de edição dos dados, e iremos ver essa etapa no próximo tutorial, quando veremos como passar parâmetros para uma Activity.

Baixe o projeto atual aqui.

Falou, galera!

Funções em swift introdução ao conceito

Nesse post vamos aprender a trabalhar com funções, usando suas principais variações, como por exemplo usando funções com retorno ou com múltiplos valores.

Primeiramente vamos explicar o que é uma função, quando temos um trecho que código que usamos em vários lugares de nosso projeto, nós podemos simplesmente copiar e colar ele, ou fazer algo mais decente, que seria criar uma função, a função não é nada mais que um trecho de código que precisa ser usado em vários pontos, podemos passar variáveis para serem usadas dentro de funções, ou trabalhar usando seu retorno (quando existir).

Nossa primeira função será uma simples, sem retorno, e sem parâmetros, uma função assim pode ser usada para por exemplo para fazer uma conta, ou realizar determinada ação, em swift nossa função mais simples é assim:

func minhaFuncaoSemRetornoParametro() {

println(“Nessa função não passamos nenhum parametro e tambem não temos retorno”)

}

Embora não seja muito usada ela pode ser útil, outra função que podemos utilizar é uma função com parâmetros, um parâmetros é uma variável que podemos usar em nossa função, por exemplo, nosso código precisa executar uma mesma equação em vários pontos diferentes do projeto, porém nem sempre esses valores serão os mesmos, para esse tipo de situação podemos simplesmente criar uma função que receba parâmetros, que por sua vez podem ser alterados a cada vez que chamamos nossa função.

func minhaFuncaoComParametro(stringPassada: String) {

println(“Essa função vai mostrar a String passada, e não tem retorno”)

println(\(stringPassada))

}

Nesta função quando a chamamos, podemos alterar o valor da variável “stringPassada”, quando alteramos esse valor nossa função passa a trabalhar com o valor passado para a variável.

Até aqui, tudo bem, porém e se precisarmos passar vários valores de uma única vez? Para isso temos funções com vários parâmetros.

func minhaFuncaoComMultiplosParametros(stringPassada: String, inteiroPassado: Int){

println(“A string passada foi \(stringPassada), o inteiro passado \(inteiroPassado))

}

nessa função podemos passar vários parâmetros de uma única vez.

Outro aspecto interessante sobre as funções é seu retorno, quando criamos uma função com retorno é como se o código passasse as variáveis para a função, e não se interessa pelo que acontece la dentro apenas se interessa no que a função vai retornar.

func minhaFuncaoComRetorno() -> (Int){

return 10

}

Nessa função temos uma estrutura um pouco diferente das anteriores temos nosso → (int) isso significa que nossa função terá um retorno do tipo inteiro (int) porém podemos usar vários outros tipos de variáveis como strings booleanos e afins.

Juntando tudo

Vamos criar agora uma função completa agora abordando tudo o que falamos nesse post.

func minhaFuncaoComRetornoComParametros(primeiroValor: Int, segundoValor: Int) -> (String) {

var variavel: Int

variavel = primeiroValor + segundoValor

return (“O valor Passado é \(variavel))

}

Nessa função agora passamos 2 parâmetros, do tipo inteiro, e retornamos uma string.

Mas como chamar nossas funções?

Para chamar nossa função é algo extremamente simples em swift, precisamos apenas escrever o nome dela (se a função estiver na mesma classe que você esta trabalhando), e para pegar apenas o retorno de nossa função? Como fazer?

println(\(minhaFuncaoComRetorno()))

É uma maneira simples de exemplificar como podemos trabalhar com o retorno das funções.

Exibir mensagens no Android

Fala galera! No tutorial de hoje vamos aprender a exibir mensagens no Android.

Se você ainda não viu o último tutorial da série, clique no link a seguir: manipulando dados do banco no Android. Se você ainda continua é preguiçoso e apenas baixou o projeto, importe-o para sua workspace. Para tal, vá em File → Import… → Existing Projects into Workspace, dentro de General.

Exibir mensagens no Android

Vamos exibir mensagens no Android sempre que uma ação for executada em nosso projeto: cadastro, alteração ou exclusão de registros do banco. Para tal, vamos estudar duas classes: AlertDialog e Toast.

Toast exibe uma mensagem rápida ao usuário em uma pequena janela. Ela fica visível por um tempo determinado, e depois desaparece. Não tem interação com o usuário, sendo utilizado apenas para informações rápidas.

Exibir mensagens no Android

AlertDialog nada mais é que uma caixa de diálogo. Ela não ocupa toda a tela e é normalmente utilizada para eventos modais, requerendo uma interação por parte dos usuários antes de prosseguir. Ele pode exibir um título, até três botões, uma lista de itens selecionáveis, ou algum layout personalizado.

Exibir mensagens no Android

Como você já deve ter percebido, um AlertDialog já foi implementado em nosso projeto. Ao clicar em algum item da lista de carros, uma caixa de diálogo aparece na tela questionando qual ação deverá ser tomada. Então, vamos implementar a classe Toast. Ela é muito simples, e pode ser implementada com apenas uma linha de código.

Primeiro, vamos adicionar logo após o método inserir() na ação do botão Salvar.

Toast.makeText(ListaCarros.this, "Registro inserido com sucesso!", Toast.LENGTH_SHORT).show();

E também depois do método alterar() no mesmo botão.

Toast.makeText(ListaCarros.this, "Registro alterado com sucesso!", Toast.LENGTH_SHORT).show();

E por último, após o método excluir() no nosso AlertDialog.

Toast.makeText(ListaCarros.this, "Registro inserido com sucesso!", Toast.LENGTH_SHORT).show();

E agora, execute o código e realize alguma das três operações para ver o resultado.

Exibir mensagens no Android

Considerações Finais

Nosso projeto está simples, porém bem funcional. A classe Toast é bem simples de se implementar, sem necessidade de conhecimento mais aprofundado.
No próximo tutorial, vamos aprender a criar novas telas no Android.

Baixe o projeto atual aqui.

Até mais!

Manipulando dados do banco no Android

Fala, galera!

Hoje vamos continuar o tutorial anterior: vamos aprender a alterar e excluir registros, manipulando dados do banco no Android.

Se você ainda não viu o último tutorial da série, clique no link a seguir: banco de dados em Android. Se você continua é preguiçoso e apenas baixou o projeto, importe-o para sua workspace. Para tal, vá em File → Import… → Existing Projects into Workspace, dentro de General.

Manipulando dados do banco no Android

No tutorial anterior modificamos nosso projeto para que os dados fossem salvos diretamente no SQLite. Os princípios para alterar e excluir os dados são os mesmos: o próprio SQLite possui métodos próprios para gerenciar os dados, e são bem simples de entender.

Vamos adicionar dois novos métodos na nossa classe Dados. Um será responsável por alterar os dados, e o outro fará a exclusão. O método para alterar receberá como parâmetros os dados do carro em questão, além do seu ID. Já o método de exclusão receberá apenas o ID.

public void alterar(String veiculo, String ano, String cor, int id) {
    ContentValues valores = new ContentValues();
    valores.put("veiculo", veiculo);
    valores.put("ano", ano);
    valores.put("cor", cor);
    getWritableDatabase().update("carros", valores, "id="+id, null);
}
 
public void excluir(int id) {
    getWritableDatabase().delete("carros", "id="+id, null);
}

Agora temos que alterar nossa lista, para que ao clicar em algum item seja exibido um box perguntando para o usuário se ele deseja alterar ou excluir o registro. Porém, antes de implementar o box, precisamos adicionar o ID dos registros no nosso adaptador. Ele não será exibido em nenhum lugar, mas é essencial para manipular os registros. Vamos então alterar o método atualizaLista().

private void atualizaLista() {
    adaptador.clear(); // Limpa o adaptador para evitar duplicados
    carros = dados.obterTodos();
    carros.moveToFirst(); // Move o ponteiro para o primeiro registro
    while (!carros.isAfterLast()) {
        String veiculo = carros.getString(1).toString();
        String ano = carros.getString(2).toString();
        String cor = carros.getString(3).toString();
        String id = String.valueOf(carros.getInt(0));
        String[] c = { veiculo, ano, cor, id }; // Cria um array com os
                                                // dados do carro
        adaptador.add(c); // Adiciona no ArrayList
        carros.moveToNext(); // Move o ponteiro para o próximo registro
    }
    adaptador.notifyDataSetChanged(); // Atualiza a lista
}

É necessário também adicionarmos um novo atributo do tipo int. Ele servirá para armazenamento do ID do carro que está sendo alterado. Ele está com valor -1 para que saibamos quando um registro está sendo alterado.

int id = -1;

Agora sim, vamos alterar a ação ao clicar em algum item da lista.

// Ao clicar na linha, será exibida um box perguntando ao
// usuário se ele deseja alterar ou excluir o registro. Coloque seu
// código dentro do método onClick().
linha.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        new AlertDialog.Builder(ListaCarros.this)
                       .setTitle("Tutorial YESbr")
                       .setCancelable(false)
                       .setMessage("Selecione uma ação:")
                       .setPositiveButton("Alterar",
                           new DialogInterface.OnClickListener() {
                               public void onClick(
                                   DialogInterface dialog,
                                   int which) {
                                       // Ao clicar em alterar, os dados do
                                       // registro em questão
                                       // serão passados para os campos de
                                       // texto
                                       veiculo.setText(item_linha[0]);
                                       ano.setText(item_linha[1]);
                                       cor.setText(item_linha[2]);
                                       id = Integer.parseInt(item_linha[3]);
                                   }
                               })
                       .setNegativeButton("Excluir",
                           new DialogInterface.OnClickListener() {
                               public void onClick(
                                   DialogInterface dialog,
                                   int which) {
                                       // Ao clicar em excluir, o registro
                                       // é excluído do banco de dados e
                                       // atualiza a lista
                                       dados.excluir(Integer
                                           .parseInt(item_linha[3]));
                                       atualizaLista();
                                   }
                               }).show();
    }
});

Por último, temos que alterar a ação do botão salvar para que seja chamado o método correto em caso de inserção ou alteração de registro.

salvar.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        if (id == -1) {
            dados.inserir(veiculo.getText().toString(), ano.getText()
                .toString(), cor.getText().toString());
        } else {
            dados.alterar(veiculo.getText().toString(), ano.getText()
                .toString(), cor.getText().toString(), id);
            id = -1; // reseta o ID
        }
        atualizaLista();
    }
});

Finish him! Rode o projeto e veja como ficou.

Manipulando dados do banco no Android

Notas Importantes

1- Anteriormente, nosso projeto não iniciava com a lista já preenchida caso existissem dados salvos no banco. Para fazê-lo, bastaria chamar o método atualizaLista() logo após definirmos o adaptador na nossa lista, dentro do método onCreate().

2- Ao salvar ou alterar algum registro, os campos do formulário ainda continuavam preenchidos. A partir de agora, eles serão “zerados”.

Considerações Finais

Agora já conhecemos as quatro operações básicas do SQLite: selecionar, inserir, alterar e excluir. No próximo tutorial vamos aprender a exibir mensagens na tela do smartphone, informando ao usuário o resultado de uma operação.

Baixe o projeto atual aqui.

Até lá!

Por que abrir uma loja virtual?

Loja virtual é um site e-commerce que possibilita que os clientes façam a visualização e a escolha de produtos, lançando-os em um carrinho de compras, onde a confirmação da compra e pagamento são efetuados em um processo totalmente online e rápido.

O investimento inicial é menor em relação às que necessitam de um espaço físico e ainda assim funciona 24 horas por dia. Oferecem serviços personalizados conforme as características do consumidor. O mercado virtual aproxima oportunidades entre pequenas, médias e grandes empresas e permite melhor mensuração e gerenciamento das informações sobre o mercado consumidor.loja-virtual

Com as inovações tecnológicas, as lojas virtuais podem ter layouts personalizados, cuja função é despertar a atenção, o interesse e a identificação do cliente com a plataforma de e-commerce, uma vez que os layouts customizados tornam a loja diferenciada em relação às outras. Também existe a integração com as redes sociais, permitindo assim a participação de clientes através de blogs e mensagens instantâneas para a divulgação do sistema.

Com o constante crescimento do mercado virtual brasileiro e a ampliação no volume de e-consumidores, possuir uma loja virtual significa investir em um empreendimento duradouro, com grandes perspectivas de sucesso, sendo suas expectativas atingidas a cada ano.

 

E você já possui uma Loja Virtual?loja-virtual-aberta-24h

– Funcionamento 24 horas, 7 dias por semana, 365 dias por ano;
– Venda sem fronteiras: o cliente pode estar em qualquer lugar do mundo;
– Fortalecimento da marca da empresa
– Canal democrático: pequenas empresas podem competir de igual para igual com grandes corporações;

Veja mais alguns dados sobre a importância que uma loja virtual poderá ter para o seu negócio segundo a Cartilha do Sebrae. Se você acha que as pessoas têm receio de comprar pela internet, saiba que o comércio eletrônico cresce muito no Brasil:

– O Brasil movimentou R$ 15 bilhões no comércio online em 2010, 40% a mais que o ano anterior;
­ O Natal de 2010 movimentou R$ 2,2 bilhões em compras pela internet;
­ O valor médio das compras foi de R$ 370;
­ 70% dos internautas brasileiros que acessam a Web diariamente estão nas classes C e D;
– 94% dos internautas pesquisam sobre produtos e serviços antes de comprar. Se a sua empresa ou o seu produto não estiver presente na internet, há uma boa chance do seu cliente (ou potencial cliente) comprar do concorrente;

Ficou interessado? Solicite um Orçamento.

Introdução a mapKit com objective-C

Bom pessoal neste tutorial iremos ensinar a colocar uma annotation no mapa, basicamente iremos usar isso para definir algum ponto no mapa usando o componente mapKit.

Bom antes de começarmos nosso código propriamente dito precisaremos pedir permissão do usuário para acessar o mapa.

O requerimento das permissões mudou um pouco no IOS 8 para fazer o requerimento precisamos adicionar uma linha na aba “info” de nosso projeto.

mapkit-Foto1

NSLocationWhenInUseUsageDescription

Com esta linha nosso app irá perguntar para o usuário se ele pode fazer uso do mapa, caso o usuário concorde o aplicativo continuará o funcionamento.

Para usarmos o mapa marcando o ponto onde estamos precisaremos de duas bibliotecas a mapKit e CoreLocation.

mapkit-Foto2

Vamos para nossa viewController nossa tela será bem simples, vamos colocar apenas um mapa nela e ligar a nosso .h, nosso arquivo.h ainda precisa de 2 delegates o do mapkit e o userLocation, em nosso .h também precisamos criar um CLLocationManager que será nossa ferramenta para gerenciar a localização do usuário. No fim nosso arquivo viewController.h fica assim:

#import <UIKit/UIKit.h>

#import <CoreLocation/CoreLocation.h>

#import <MapKit/MapKit.h>

@interface ViewController : UIViewController <MKMapViewDelegate,CLLocationManagerDelegate>

@property (strong, nonatomic) CLLocationManager *gerenciadorDeGPS;

@property (weak, nonatomic) IBOutlet MKMapView *mapa;

@end

Agora precisamos partir para nosso ViewController.m onde vamos realmente trabalhar com nosso mapa, como estamos fazendo apenas um tutorial bem simples vamos criar o seguinte código dentro de nosso ViewDidLoad, precisaremos iniciar nosso gerenciadorDeGps requer de nosso usuário a permissão de usar sua localização e começar a “seguir” nosso usuário. Vamos também implementar nosso delegate, e mostrar a localização do usuário.

self.mapa.delegate = self;

self.mapa.showsUserLocation = YES;

// iniciando alocando nosso gerenciador que usaremos para pegar a poisção do usuário

self.gerenciadorDeGPS = [[CLLocationManager alloc]init];

[self.gerenciadorDeGPS requestWhenInUseAuthorization];

[self.gerenciadorDeGPS startUpdatingLocation];

Agora vamos dizer para nosso mapa qual a região nosso mapa vai representar para isso precisamos da latitude e da longitude em que nosso usuário está, por isso criamos nosso gerenciadorDeGPS.

self.mapa.region = MKCoordinateRegionMakeWithDistance(CLLocationCoordinate2DMake(self.gerenciadorDeGPS.location.coordinate.latitude, self.gerenciadorDeGPS.location.coordinate.longitude), 250, 250);

Com essa linha definimos a latitude e a longitude, e também nosso zoom (no caso usamos 250 por 250, porem você poderá brincar com ele a vontade dependendo da necessidade do app).

Vamos por fim fazer uma annotation que seria uma pequena anotação no mapa, ou uma marcação de um ponto especifico, também precisamos da latitude e da longitude do ponto a ser mostrado:

MKPointAnnotation *annotation =[[MKPointAnnotation alloc]init];

annotation.coordinate = CLLocationCoordinate2DMake(self.gerenciadorDeGPS.location.coordinate.latitude, self.gerenciadorDeGPS.location.coordinate.longitude);

Bom para evitar estender muito o tutorial usei a mesma localização do ponto anterior porem você poderá escolher outra latitude e longitude.

Por fim vamos dar um titulo para nosso ponto e também colocar no mapa.

annotation.title = [NSString stringWithFormat:@”Onde Estou”];

[self.mapa addAnnotation:annotation];

No fim nosso método ViewDidLoad ficou assim:

– (void)viewDidLoad {

[super viewDidLoad];

self.mapa.delegate = self;

self.mapa.showsUserLocation = YES;

// iniciando alocando nosso gerenciador que usaremos para pegar a poisção do usuário

self.gerenciadorDeGPS = [[CLLocationManager alloc]init];

[self.gerenciadorDeGPS requestWhenInUseAuthorization];

[self.gerenciadorDeGPS startUpdatingLocation];

// iniciando nosso mapa na posição em que estamos

self.mapa.region = MKCoordinateRegionMakeWithDistance(CLLocationCoordinate2DMake(self.gerenciadorDeGPS.location.coordinate.latitude, self.gerenciadorDeGPS.location.coordinate.longitude), 250, 250);

MKPointAnnotation *annotation =[[MKPointAnnotation alloc]init];

annotation.coordinate = CLLocationCoordinate2DMake(self.gerenciadorDeGPS.location.coordinate.latitude, self.gerenciadorDeGPS.location.coordinate.longitude);

annotation.title = [NSString stringWithFormat:@”Onde Estou”];

[self.mapa addAnnotation:annotation];

}

Bom pessoal por hoje é isso foi um tutorial bem rápido só para dar uma introdução a ferramenta, poderemos em outros tutorias continuando com a ferramenta.

Banco de Dados em Android

Banco de Dados em AndroidFala galera!

Hoje vamos aprender a salvar dados de um formulário no banco de dados em Android! Com isso, sua aplicação poderá salvar informações, e um novo leque de possibilidades de aplicações foi aberto!! (lista de contatos, informações pessoas, etc.)

Se você ainda não viu o último tutorial da série, aproveite e aprenda um pouco mais sobre como criar um ListView personalizado no Android. Se você continua é preguiçoso e apenas baixou o projeto, importe-o para sua workspace. Para tal, vá em File → Import… → Existing Projects into Workspace, dentro de General.

Banco de dados em Android

Nativamente, o Android disponibiliza uma forma de persistir dados utilizando o SQLite. Ele é leve e muito fácil de utilizar.

Se você não tem experiência com SQL, não se preocupe: o aprendizado é fácil e rápido, e logo você estará entendido dos conceitos.

Inicialmente, vamos criar uma classe chamada Dados, que irá estender SQLiteOpenHelper.

public class Dados extends SQLiteOpenHelper {

    @Override
    public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub
    }
 
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub
    }
 
}

Ao fazer o procedimento, será acusado um erro: o construtor da classe não foi criado. O construtor serve para acessar os métodos desta classe. Para cria-lo, antes vamos definir dois atributos privados, estáticos e finais NOME_BANCO e VERSAO_SCHEMA. Como o próprio nome diz, estes atributos são referentes ao nome e versão do schema do banco de dados que vamos criar.

private static final String NOME_BANCO = "listacarros.db";
private static final int VERSAO_SCHEMA = 1;

Feito isso, vamos instanciar nosso construtor da classe (que necessita de um parâmetro do tipo Context), chamando o método super() e passando os atributos necessários.

public Dados(Context context) {
    super(context, NOME_BANCO, null, VERSAO_SCHEMA);
}

Depois de criar o construtor, vamos modificar o método onCreate(). Nesse método deverão ser passados os SQLs de criação das tabelas. No nosso caso, vamos criar apenas uma tabela chamada carros.

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("CREATE TABLE carros("
                                   + "id INTEGER PRIMARY KEY AUTOINCREMENT, veiculo TEXT, ano TEXT, cor TEXT);");
}

O método onUpgrade() não será modificado, pois ele somente é chamado quando há uma atualização. Porém, ele não pode ser apagado, pois é obrigatório na classe.

O próximo passo será criar um método que irá salvar os dados no banco. Este método irá receber como parâmetros os dados do carro em questão.

public void inserir(String veiculo, String ano, String cor) {
   ContentValues valores = new ContentValues();
   valores.put("veiculo", veiculo);
   valores.put("ano", ano);
   valores.put("cor", cor);
   getWritableDatabase().insert("carros", null, valores);
}

Precisamos também criar um método para recuperar todos os carros cadastrados no banco.

public Cursor obterTodos() {
    return getReadableDatabase().rawQuery(
                                   "select * FROM carros ORDER BY veiculo", null);
}

OBS: Corrija todos os erros de importação com Ctrl + Shift + O.

Vamos agora modificar nossa classe principal ListaCarros, alterando como a listagem é recuperada e modificando a ação do botão Salvar.

Primeiro, vamos criar um atributo do tipo Dados, nossa classe previamente criada.

Dados dados;

No método onCreate(), vamos chamar o construtor da classe Dados passando o contexto da classe ListaCarros (atributo this).

dados = new Dados(this);

Feito isto, estamos prontos para salvar os dados no banco!

Modifique a ação do botão salvar de maneira que os dados sejam armazenados no banco de dados através do método inserir() que criamos. Vamos também chamar o método atualizaLista(), o qual falaremos a seguir.

salvar.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        dados.inserir(veiculo.getText().toString(), ano.getText().toString(), cor.getText().toString());
    }
});

Vamos agora modificar nossa lista. De início, criar um novo atributo chamado carros do tipo Cursor, que servirá para armazenar todos os registros do banco de dados.

Cursor carros;

Finalmente, vamos criar o método atualizaLista(), que será responsável por popular nossa lista. Nele, vamos salvar o retorno do método obterTodos() da classe Dados. Logo após, vamos percorrer todos os registros e inserir cada um em nosso adaptador. Só não se esquece de limpar o adaptador para não adicionar registros duplicados.

private void atualizaLista() {
    adaptador.clear(); // Limpa o adaptador para evitar duplicados
    carros = dados.obterTodos();
    carros.moveToFirst(); // Move o ponteiro para o primeiro registro
    while (!carros.isAfterLast()) {
        String veiculo = carros.getString(1).toString();
        String ano = carros.getString(2).toString();
        String cor = carros.getString(3).toString();
        String[] c = { veiculo, ano, cor }; // Cria um array com os dados do carro
        adaptador.add(c); // Adiciona no ArrayList
        carros.moveToNext(); // Move o ponteiro para o próximo registro
    }
    adaptador.notifyDataSetChanged(); // Atualiza a lista
}

Já era! Execute seu projeto e tenha sonhos maravilhosos!

Banco de Dados em Android

Considerações Finais

Muito simples, não? Com pouco trabalho, nossa aplicação ficou um pouco mais interessante. Agora temos banco de dados! No próximo tutorial, vamos aprender a editar e excluir os registros do banco de dados.

Baixe o projeto atual aqui.

Falou, galera!

Loja Virtual Magento

O Magento é uma plataforma CMS líder em lojas virtuais segundo dados recentes do Google Trends. Ela oferece recursos ótimos e flexíveis, administração intuitiva, facilidade na otimização para resultados de busca (SEO), gerenciamento de catálogos e conteúdo.

Projetado para ser totalmente escalável tanto backend e frontend para otimizar a venda online e aumentar a experiência de compras de seus clientes.

Customizamos e personalizamos temas Magento de acordo com a sua necessidade, por isso cada uma de nossas lojas possui características próprias, buscando atender o seu modelo de negócio.

A plataforma magento nos permite trabalhar com as mais variadas formas de pagamento existentes no mercado, como Intermediadores PagSeguro, Bcash e Gatways de pagamento Cielo e Moip.

Você poderá visualizar relatórios detalhados de toda sua operação e conseguir ter um acompanhamento de carrinhos abandonados, termos mais buscados, produtos mais acessados, estoque, pedidos entre outras ferramentas de marketing.

Tenha sua loja virtual com todo o potencial do Magento Responsivo em diversos dispositivos móveis como celulares e tablets. Assim todos poderão comprar seus produtos de qualquer lugar a qualquer momento.

Diferenciais Magento

– Criação de Loja Virtual Magento
– Otimização (Seo) Loja Virtual Magento
– Otimização de Desempenho Loja Virtual Magento
– Migração de Servidor Loja Virtual Magento
– Instalação de Loja Virtual Magento
– Instalação de Extensões e Módulos Magento

Ficou interessado? Solicite um Orçamento.