lunes, 3 de septiembre de 2018

UIlabels con UIAppearance



Cuando usamos la colección de metodos UIAppearance nos encontramos con una gran variedad de métodos supremamente útiles, en este caso hablaremos como primera instancia de como cambiar la apariencia de las labels, pero no de todas las labels, me explico, podemos usar el método:

UILabel.appearance esto cambiará la apariencia de todas las labels en el proyecto, y es lógico hasta cierto punto, si queremos cambiar el estilo a algún componente, lo cambiará todo, a menos que manualmente cambiemos el que queramos, con swift podemos hacer algo diferente y muy útil.


UILabel.appearance(whenContainedInInstancesOf:  Lo cual nos permite modificar instancias de algo en concreto, en este caso pondremos un ejemplo, que se cambien los labels contenidos en celdas

UILabel.appearance(whenContainedInInstancesOf: [UITableViewCell.self]).textColor = UIColor.black

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






domingo, 17 de diciembre de 2017

Instalar node.js en MAC, configurando nvm



Para instalar oficialmente node.js debemos entrar a la página: https://nodejs.org/es/, descargamos la versión de node.js que se prefiera, generalmente se recomiendo descargar la versión LTS

Para manejar distintas versiones de node.js en la misma maquina podremos instalar NVM: Node Versión Management


Aquí en la sección de instalación nos piden que ejecutemos un comando en la terminal

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash

A partir de esto después de la instalación nos entrega dos lineas las cuales permitirán cargar NVM cada vez que abramos la sesión de terminal, como las siguientes


Al copiar estas lineas abrimos el archivo bashrc con el editor de texto preferido, en mi caso utilizo atom, por lo que escribo el comando

$atom . bashrc


El archivo generalmente estará vacío, dentro del el pego las lineas y doy guardar

Despues cargamos este archivos para que ejecute estas dos lineas con el siguiente comando

$source . bashrc

Actualmente debemos tener instalada la versión 8 de node.js con el archivo descargado e instalado, si queremos instalar la versión 6 ejecutamos el comando

$nvm install 6


Lo cual permite instalar la versión 6 de node.js sin desinstalar o perder la 8

Si queremos usar la versión 8, podemos decirle a NVM que use la versión instalada en el sistema

$nvm use system


Con esta herramienta tenemos facilidad de trabajar en desarrollo con diferentes versiones de node





lunes, 11 de diciembre de 2017

Cambiando base de datos SQLite3 a PostGresql en Ruby On Rails


Iniciando un proyecto con Ruby on Rails se define por defecto la base de datos sqlite3, lo podemos ver en el archivo database.yml dentro de la carpeta config




Para cambiar el gestor de base de datos por postgresql debemos cambiar los campos adapter, database dentro de development, de test y de production, un ejemplo puede ser el siguiente, teniendo como nombre de la app "musicapp"



Ahora debemos instalar la gema de postgresql en el archivo Gemfile, comentamos sqlite3


Ahora en la consola escribimos el comando

$bundle install

Para instalar las gemas



NOTA: Se debe tener las dependencias de postgresql instaladas, en caso de no tenerlas 

First, install the pg gem:


1
gem install pg -- --with-pg-config=/usr/local/bin/pg_config

Make sure you include the pg gem in your Gemfile, and run


1
bundle install


Esta guía funciona para Mac o Linux, Para ver mas sobre esta guía 



Despues de tener postgres correctamente configurado y la gema instalada, debemos crear nuestra base de datos, suponiendo que ya contamos con un archivo de migración previo usamos el comando

$ rake db:setup

en donde creará todas las tablas en la base de datos que hayamos establecido


NOTA: en ocasiones sale el error fe_sendauth: no password supplied
una solución es poner en el archivo database.yml los campos username: y password de nuestro posgres