Mostrando entradas con la etiqueta app. Mostrar todas las entradas
Mostrando entradas con la etiqueta app. Mostrar todas las entradas

miércoles, 20 de diciembre de 2017

App sencilla con Ruby




Vamos a instalar la gema rack

gem install rack

Debe salir


Successfully installed rack-2.0.3
Parsing documentation for rack-2.0.3
Done installing documentation for rack after 2 seconds
1 gem installed


Documentación


La gema nos pide que devolvamos un Proc, el cual recibe una variable de entorno “env” en la cual recibe todo lo que tenga la petición del lado del cliente para poderlo usar como necesitemos

Dentro de la carpeta del proyecto creamos una que se llame ruby_web y dentro un archivo llamado config.ru


En el archivo config.ru, ponemos lo siguiente

run Proc.new {|env| [200, {}, ['Hola mundo']]}


En el terminal entro a la carpeta ruby_web y escribo

$rackup config.ru

a lo cual devuelve el puerto localhost:9292

al entrar debe aparecer hola mundo


ahora modificamos el código y decimos que si tiene alguna información nos devuelva no se encuentra la pagina, así


run Proc.new {|env|
  if env['PATH_INFO'] == '/'
    [200, {}, ['Hola mundo']]
  else
    [404, {}, ['No existe esta página']]
  end
}


al entrar al puerto localhost:9292/hola
devuelve no existe esta pagina


Ahora vamos a crear una clase llamada Application, y dentro un método que se llame call, este método se llama asi porque en la documentación dice lo siguiente

To use Rack, provide an "app": an object that responds to the call method, taking the environment hash as a parameter, and returning an Array with three elements:

Ahora refactorizamos nuestro código poniendo la lógica dentro del método de la clase


class Application
  def self.call(env)
    if env['PATH_INFO'] == '/'
      [200, {}, ['Hola mundo']]
    else
      [404, {}, ['No existe esta página']]
    end
end

run Application



Creamos un archivo llamado application.rb

 Y dentro ponemos


class Application
  def self.call(env)
    if env['PATH_INFO'] == '/'
      [200, {}, ['Hola mundo']]
    else
      [404, {}, ['No existe esta página']]
    end
end


y en config.ru

Require ‘/application.rb’
Run Application


Creamos un archivo index.html.erb

Erb es una clase que permite decodificar nuestro código en ruby, es decir primero ejecutarlo en ruby y una vez que tengamos el resultado lo muestra en el archivo



Dentro de index

<h1>Hola</h1>
<%= 2 + 3 %>


dentro de config.ru

require './application'
run Application


dentro de application.rb

require 'erb'

class Application
  def self.call(env)
    if env['PATH_INFO'] == '/'
      body = ERB.new(File.read('index.html.erb'))
      [200, {}, [body.result]]
    else
      [404, {}, ['No existe esta página']]
    end
  end
end




Usar una API


añadimos @mensaje y dentro de result ponemos binding, esto quiere decir que podemos obtener este “mensaje” desde nuestro archivo index.html.erb



require 'erb'

class Application
  def self.call(env)
    if env['PATH_INFO'] == '/'
      @mensaje = 'Hola mundo'
      body = ERB.new(File.read('index.html.erb'))
      [200, {}, [body.result(binding)]]
    else
      [404, {}, ['No existe esta página']]
    end
  end
end



en index ponemos

<h1>Hola</h1>
<%= @mensaje %>


Vamos a obtener datos de una API json


vamos a hacer uso de una gema llamada httparty



Vamos a la consola y ejecutamos

$gem install httparty


en application.rb

require 'httparty'



Vamos a incluir el archivo json

En index lo visualizamos

<h1>Hola</h1>
<%= @posts %>


pero lo llamamos en application.rb

require 'erb'
require 'httparty'

class Application
  def self.call(env)
    if env['PATH_INFO'] == '/'
      url = 'http://jsonplaceholder.typicode.com/posts'
      response = HTTParty.get(url)
      @posts = JSON.parse(response.body)     
      body = ERB.new(File.read('index.html.erb'))
      [200, {}, [body.result(binding)]]
    else
      [404, {}, ['No existe esta página']]
    end
  end
end


cuando no ponemos el = en <%= %>
esta sentencia no imprime lo que retorna

en index

<h1>Hola</h1>
<% @posts.each do |post| %>
  <h2><%= post['title'] %></h2>
  <p><%= post['body'] %></p>
  <hr>
<% end %>






Hacer deploy

Vamos a usar heroku


para Mac

$brew install heroku

Debemos loguearnos

$heroku login

(debemos estar previamente registrados)

$heroku créate ruby-web-camilo

MacBook-Pro-de-camilo:ruby_web camiloandresibarrayepes$ heroku create ruby-web-camilo
Creating ruby-web-camilo... done
https://ruby-web-camilo.herokuapp.com/ | https://git.heroku.com/ruby-web-camilo.git
MacBook-Pro-de-camilo:ruby_web camiloandresibarrayepes$

Nos de el dominio a donde debemos entrar


También nos crea un remote dentro de git

$git remote

heroku


hacemos un push

$git push heroku master

nos da error porque no tenemos registrado el ssh

cd ~

atom .ssh/id_rsa.pub

busco 

ssh-rsa 
AAAAB3NzaC1yc2EAAAADAQABAAABAQCv9BWiNqlrwXSTt88CsG5m1t/0yiJDqRnLQSrbujRmT4f/qAiwjdzPsmUfkQYIfsTbHBnmOIbfiAyIBwSVMMSH/MuhJAB42pjc1tKnB1sA2YTc9M9WDhvQKzcqMI5e1QmCDyK........

un codigo similar a ese, el cual es la clave ssh


voy a heroku en mi cuenta



y la agrego

hacemos $git push heroku master


nos da error diciendo que no encuentra un Gemfile.lock

para esto instalamos la gema bundler


$gem install bundler


y tecleamos el comando

$bundle install


lo cual permite instalar las gemas localmente y crear el Gemfile.lock

después podemos ver que ya lo creo, tecleando

$git status


vemos que se agregó Gemfile.lock, para eso hacemos commit


$git add .

$git commit –m “instalar gemas desde bundler”


ahora si podemos hacer push


$git push heroku master



Ahora ya esta subida nuestra app en ruby






martes, 14 de noviembre de 2017

Creating camera intent app using Kotlin on android - Creando Intent Camara usando Kotlin



Creamos un nuevo Empty Activity llamado Camera, en el Layout activity_camera añadimos un ImageView y un boton




Al imageView le definimos como ID 
android:id="@+id/photoimageView"

al botón
android:id="@+id/button_camera_take"

Codigo de camera.kt
import android.graphics.Bitmap
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.provider.MediaStore
import android.widget.Toast
import kotlinx.android.synthetic.main.activity_camera.*

class camera : AppCompatActivity() {

    val CAMERA_REQUEST_CODE = 0
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_camera)

        button_camera_take.setOnClickListener{              val callCameraIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
            if(callCameraIntent.resolveActivity(packageManager) != null) {
                startActivityForResult(callCameraIntent, CAMERA_REQUEST_CODE)
            }
        }    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)

        when(requestCode){
            CAMERA_REQUEST_CODE -> {
                if(resultCode == Activity.RESULT_OK && data != null){
                    photoimageView.setImageBitmap(data.extras.get("data") as Bitmap)
                }
            }
            else -> {
                Toast.makeText(this, "Unrecognized request code", Toast.LENGTH_SHORT).show()
            }
        }
    }
}

martes, 2 de mayo de 2017

Shake Gesture en Xcode 8 con Switf3.0




Elegimos single view Application para este proyecto


Agregamos una imagen y cubrimos toda la pantalla con ella




Seleccionamos la siguiente opción


Agregamos 3 imágenes diferentes a nuestra biblioteca para poderlas llamar posteriormente, las llamamos 1.jpg, 2.jpg y 3.jpg para esta prueba


Lo que el presente ejemplo hará es que cuando se agite el celular cambie de imágenes, una por cada sacudida, en el simulador lo encontraremos en >hardaware >shake gesture

El código utilizado es el siguiente


import UIKit


class ViewController: UIViewController {

    @IBOutlet var imageView: UIImageView!
    
    let images = ["1", "2", "3"]
    var currentImage = 0
    
    override func motionEnded(_ motion: UIEventSubtype, with event: UIEvent?)
    {
        if event?.subtype == UIEventSubtype.motionShake
        {
            print ("SHAKE")
            imageView.image = UIImage(named: images[currentImage] + ".jpg")
            
            if(currentImage == images.count-1)
            {
                currentImage = 0
            }
            else
            {
                currentImage += 1
            }
        }
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}


Se declaran las imagenes como 1,2y 3, luego se les adiciona el .jpg, declaramos una variable que se llame currentImagen con valor inicial de 0, se define una función motionEnded, el cual detecta el fin de un movimiento.

if event?.subtype == UIEventSubtype.motionShake



Dice que si existe un evento de movimiento que sea shake entonces se imprime por consola la palabra SHAKE y en la vista del usuario se visualiza una imagen.

Después se escriben 2 sentencias, si el numero de la imagen es menor que cero se establece la variable de nuevo en 0, si no a la variable currentImage se le suma 1.

Lo que hará es que cada vez que el celular tenga un movimiento o sea agitado, la imagen cambiará.


COMO CAMBIAR EN EL EMULADOR?

En la pestaña >hardware elegimos >shake gesture y la imagen debe empezar a cambiar por cada vez que presionemos esta opción. 


Tambien, por cada vez que lo presionemos, en la consola aparece la palabra SHAKE