Configurar git para hacer deploys

Bueno este post es sobre configuración de nuestro servidor ya sea desarrollo, pruebas o producción para todos es lo mismo ya depende del ambiente en el que anden.

Paso 1:

Saber que carpetas son las de trabajo por ejemplo /var/www/elsitio o /home/user/myapp bueno no se como tengan configurado esto, solo identifiquen para que sepan si se esta haciendo el deploy.

Paso 2:

Crear una carpeta para nuestro repositorio git, entrar en ella, en este caso nuestra carpeta de trabajo sera /var/www/elsitio (se supone que tenemos montado un sitio con apache en esa carpeta)

mkdir -p /home/git/elsitio.git
cd /home/git/elsitio.git

Paso 3:

Crear un repositorio vacio dentro de la carpeta elsitio.git, este repositorio es el que cuando le hagan un push obtendra los archivos nuevos y luego los colocara en /var/www/elsitio

git init --bare 

Paso 4:
Una vez creada el repositorio entramos en la carpeta hooks y creamos el archivo post-recieve, este hook, se ejecutara cuando el repositorio reciba un push, y automaticamente copiara hacia nuestra carpeta de trabajo.

cd hooks
vi post-recieve

Paso 5:
Añadir el siguiente contenido a nuestro archivo para que ejecute la instruccion, despues guardarlo y hacerlo ejecutable con chmod+x

#!/bin/sh
git --work-tree=/var/www/elsitio --git-dir=/home/git/elsitio.git checkout -f

Lo guardas y lo haces ejecutable

chmod +x post-receive

Y listo ya quedo configurado el servidor, ahora en nuestro repositorio local hacemos lo siguiente:

git remote add production ssh://usuario@dominio/home/git/elstio.git

Ya con eso queda listo, cuando vayas a enviar todo a produccion solo haces

git push production

Y solo se encargara, bueno te pedira la contraseña de ssh pero esa ya la debes tener.

Aca una referencia en la que me base para hacer este tutorial.
Si quieren hacerlo con Rails es algo parecido solo que usen capistrano que ya viene medio configurado.

GIT DEPLOYS

Horizontal Scrolling Images List Swift

Bueno aqui les traigo una función para crear una lista horizontal de imagenes con swift para su aplicacion para iphone o ipad, así tipo cuando seleccionas marcos de instagram, como se muestra en la siguiente imagen:

list view

Suponiendo que lo que se muestra en el cuadro es la pantalla de tu dispositivo movil y los otros son los elementos que haran scroll horizontal.

Primero definimos una variable que sea de tipo UIScrollView donde pondremos las miniaturas para seleccionarlas

var myScrollView:UIScrollView!

Luego un arreglo de los nombres de las imagenes que queremos mostrar

 
var imageStrings:[String] = [] 

Despues las variables para el tamaño de nuestras miniaturas y del scroll y un outlet para mostrar la imagen seleccionada entonces

    @IBOutlet weak var previewView: UIImageView!
    var scrollWidth : CGFloat = 320 
    let scrollHeight : CGFloat = 100
    let thumbNailWidth : CGFloat = 80
    let thumbNailHeight : CGFloat = 80
    let padding: CGFloat = 10

y bueno solo falta inicializar todo en el metodo viewDidLoad lo cual esta sencillo es algo así:

    override func viewDidLoad() {
  super.viewDidLoad()
     imageStrings = ["image01","image02","image03","image04","image05","image06","image07","image08"]

     //setup scrollView
     myScrollView = UIScrollView(frame: CGRectMake(0,self.view.frame.height - scrollHeight,self.view.frame.width, scrollHeight))

 //setup content size for scroll view
        let contentSizeWidth:CGFloat = (thumbNailWidth + padding) * (CGFloat(imageStrings.count))
        let contentSize = CGSize(width: contentSizeWidth ,height: thumbNailHeight)

        myScrollView.contentSize = contentSize
        myScrollView.autoresizingMask = UIViewAutoresizing.FlexibleWidth

     
     for(index,value) in enumerate(imageStrings) {
            var button:UIButton = UIButton.buttonWithType(.Custom) as! UIButton
            //calculate x for uibutton
            var xButton = CGFloat(padding * (CGFloat(index) + 1) + (CGFloat(index) * thumbNailWidth))

            //size of button
            button.frame = CGRectMake(xButton,padding, thumbNailWidth, thumbNailHeight)

            //tag for show image
            button.tag = index
            
            let image = UIImage(named:value)
            button.setBackgroundImage(image, forState: .Normal)

            //selector when touch in side of button 
            button.addTarget(self, action: Selector("changeImage:"), forControlEvents: .TouchUpInside)
            
            myScrollView.addSubview(button)
        }
        previewView.image = UIImage(named: imageStrings[0])
        self.view.addSubview(myScrollView)
}

func changeImage(sender:UIButton){
        let name = imageStrings[sender.tag]
        previewView.image = UIImage(named: name)
    }

Bueno ahora una breve explicación

        myScrollView = UIScrollView(frame: CGRectMake(0, self.view.frame.height - scrollHeight, scrollWidth, scrollHeight))

En esta linea inicializamos el scrollView, que debera aparecer en x=0, y=el tamaño del dispositivo – la altura del scroll(para que aparesca hasta abajo), los otros dos parametros son el ancho y el alto del scroll.

        let contentSizeWidth:CGFloat = (thumbNailWidth + padding) * (CGFloat(imageStrings.count))
        let contentSize = CGSize(width: contentSizeWidth ,height: thumbNailHeight)

Aqui se calcula el ancho del contenido del scroll, lo cual es el ancho de cada boton mas la separacion por el numero de elementos entonces si tenemos 8 elementos sera (80+10) * 8 = 720 que medira en total de ancho y de alto pues 80, tendremos una vista de contenido que mide (720,80) pero solo se mostrara una parte.

            var xButton = CGFloat(padding * (CGFloat(index) + 1) + (CGFloat(index) * thumbNailWidth))

En esta linea calculamos la posición en X de los botones dentro del scrollview, como son 8 elementos cada vez que se agrega uno tiene que tener una posición diferente por ejemplo para el index 0 la posición en X seria igual a (10 X (0+1)) + (0*80)) seria 11, para el index 1 seria (10 X (1+1)) + (1*80)) = 20 +80 = 100.

Entonces el elemento 0 empieza en 11 X y termina en 91 X por que el ancho es 80 y se separa del elemento 1 un total de nueve x por eso es que los botones saldrán un poco separados.

Aqui el resultado:

iOS Simulator Screen Shot Aug 3, 2015, 23.33.45

Bueno aqui les dejo el codigo fuente para que lo prueben.

HorizontalScrolling

Se puede refactorizar, este es solo un ejemplo

Aprender a programar es como aprender a cocinar o algo parecido..

El otro dia un estudiambre del tec me pregunto:

Estudiambre: oye godi “¿Como aprendo a programar?”

Godi:  le dije pues tirando código, programando, cagandola, y asi loco vas a aprender.

Estudiambre: no seas mamon enseñame mejor.

Godi: Simon we, pero programar es mas de razonar y pensamiento logico tienes que desarrollarlo  e irte a los putazos con el codigo y ver los errores y mejorar.

Estudiambre: no seas mamon, enseñame no seas culero, tu que sabes machin.

Godi: Mira we, tu sabes cocinar?

Estudiambre: pues dos tres, por que?

Godi: a mira Programar es como Cocinar we, tienes que ver la receta y quemar el platillo, o improvisar un ingrediente que no tienes, meterle coco o mejorar la receta que te dieron, pero nunca vas a aprender a cocinar bien si no lo intentas y lo haces tu, pasa lo mismo con la programación tienes que meterte a los golpes, hay mucho codigo ya escrito que puedes buscar leer y entenderlo pero si nunca lo haces no vas a aprender por que lo hizo de esa forma y ni como mejorarlo.

Estudiambre: aaa bueno esta bien, pero enseñame algo mamon, no te quieras barrer.

Godi: simon mira este es un if…..

 

Bueno esa fue la historia de como saque que estudiar era como programar bueno no es igual pero a lo que me referia es que tienes que meterte de lleno al codigo, cagarlar, volver a intentarla, ver snipets, estudiar patrones y lo mas importante hacer ejercicio de logica para estar al cien.

NOTA: cagarla o cagandola quiere decir Equivocarse para los que no entiendan esa palabra.

Armored trooper votoms – Anime

votoms

Armored trooper votoms un anime de mechas de alla por los 80’s, cuando esto del anime estaba muy alejado de la sociedad occidental, bueno este anime va de la premisa que hay una guerra que esta por terminar y ya ni saben por que están luchando, es un futuro muy lejano donde los humanos ya invadieron y conquistaron el universo.  Y bueno la guerra no recuerdo por que en realidad no dicen, el chiste es que ya se andaban arreglando los acuerdos de paz, y le pasa algo al personaje principal que es el que esta narrando la historia.

El primer capitulo a Chirico Cuvie  lo envían a una misión a una base amiga y boom la desarman y el no entiende por que atacan a aliados-amigos, entonces eso le crea un conflicto de si seguir ordenes o confiar en su criterio, al final termina siguiendo ordenes como buen militar, pero investiga que es lo que andan buscando, para su sorpresa se encuentra una mujer en una cápsula,  lo que causa que lo abandonen en la base y lo den por muerto ya que era secreto y nadie tenia que ver ni saber por que estaban ahi solo el capitán de la flota.

Bueno pero Chirico no muere y lo rescatan para luego torturarlo para que dijera que estaba haciendo en la base y por que la habían destruido, lo cual es imposible que dijera algo por que no sabia nada, fue engañado y bueno así comienza su historia de sufrimiento y de tratar de descubrir quien le tendió la trampa.

Es un anime de mechas y peleas bueno para la epoca en que salió ya que la animación era a mano y están muy bien hechas, la historia no esta demasiado buena pero un poco entretenida, hay partes que me han aburrido pero como ya lo empece quiero terminarlo, los dibujos si están algo raros pero bueno creo que ese era el estilo de dibujo de aquellos años.

 

HillBilly Frog El juego de la rana jijalachingada

Hola hoy vengo a hablarles del juego HillBilly Frog una rana que tiene que brincar de hoja en hoja para llegar a su hogar, el objetivo del juego es saltar y saltar de aquí para allá, siempre en horizontal, es un juego casual el cual puedes jugar en cualquier momento, es uno de esos juegos castrosos como los que ya conocemos que hacen que te envicies sin darte cuenta ya que al ser un poco frustrante te obliga a seguir jugando para llegar mas lejos.

Cuenta con varios skins los cuales vas desbloqueando conforme saltas las hojas, son acumulables los puntos así que mientras mas hagas mas rápido desbloquearas todos y podrás jugar con las diferentes ranas que tiene este juego.

Este juego fue desarrollado por los compas de pixcomp.

Hitsugi no Chaika Anime

Chaka
Hitsugi no Chaika es un anime tipo medieval donde la personaje principal es una chica con un ataud que anda buscando los restos de su padre que fue un tirano y  un gran mago(invento toda la magia) que vivio por 500 años y fue derrotado por 8 heroes los cuales cada uno tomo una parte del cuerpo del mago y la mision de Chaika es reunir las partes para darle un funeral a su difunto padre o por lo menos asi pinta la historia.
Al principio me parecio un poco aburrido el anime pero al paso de los capítulos, el misterio de las chaikas se hace mas interesante y solo te pones a ver la serie por saber que va a pasar con chaika y sus acompañantes.
Ademas que luego aparecen mas chaikas y estan locas fin.