Un dia quise vaciar una tabla pero me salió un error que decía que esa tabla tenia llaves foráneas y entonces no pudo completar la acción y eso esta bien por que si borras datos con llaves foráneas referenciadas, la integridad de tus datos no va ser muy confiable entonces, esta bien que salga ese error, pero lo malo es que como estaba en un ambiente de desarrollo, queria borrar los datos para resetear la base de datos ya que los datos de prueba que ya tenia, tenian que ser eliminados entonces, decidi googlear el problema y encontre la solución mas optima.

este es el error:

ERROR 1701 (42000): Cannot truncate a table referenced in a foreign key constraint (mytest.instance, CONSTRAINT instance_ibfk_1 FOREIGN KEY (GroupID) REFERENCES mytest.mygroup (ID))

Para solucionarlo tendremos que tener permisos para poder ejecutar el siguiente comando:


SET FOREIGN_KEY_CHECKS = 0;

Despues ejecutar tus TRUNCATE

TRUNCATE table1;

 

Y al final volver a activar la bandera que revisa las constrains.


SET FOREIGN_KEY_CHECKS = 1;

Ya con eso resuelves el problema de que no te deja borrar tus datos de una tabla con constrains..

Link de referencia stackoverflow


El whatsapp se cayo este miercoles 3 se mayo, creo que la mayoria se usuarios de internet se dio cuenta, y mientras estaba caido la forma más efectiva para comunicarse con alguien podrian ser:

  • Facebook messenger
  • Telegram
  • Snapchat 😏
  • sms
  • Podrias llamar
  • Skype
  • Instagram
  • Twitter 

Estas alternativas pueden ser utilizadas las mas parecidas seriam Telegram y skype que utilizan tu numero de telefono para registrarte, otras cosas que puedes hacer es seguir tu vida normal, ya despues volvera a estar arriba el servicio para que sigas enviando memes en los grupos. 

Primero Si la imagen la vamos a cargar desde una url que no sea segura debemos modificar nuestro Info.plist para que nos deje cargar la imagen entonces en nuestro archivo Info.plist agregamos esto:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

Ahora crea la siguiente funcion en algun controller o bien en una clase de utilidad que tengas, o bien se puede hacer como una extension de la Clase UIImageView, como se te antoje igual pondre los tres ejemplos que son casi iguales:

func downloadImage(_ uri : String, inView: UIImageView){
        
        let url = URL(string: uri)
               
        let task = URLSession.shared.dataTask(with: url!) {responseData,response,error in
            if error == nil{
                if let data = responseData {
                    
                    DispatchQueue.main.async {
                        inView.image = UIImage(data: data)
                    }
                    
                }else {
                    print("no data")
                }
            }else{
                print(error)
            }
        }
        
        task.resume()
        
    }

Con esta funcion lo metemos dentro de un Controller y bueno nuestro controller quedaria asi:

Continúa leyendo

Al querer instalar cocoapods en la mac con el osx el capitan
sudo gem install cocoapods

Salio el siguiente error
ERROR: While executing gem ... (Errno::EPERM)
Operation not permitted - /usr/bin/xcodeproj

Para resolver este problema solo ejecuten esta linea de codigo
sudo gem install -n /usr/local/bin cocoapods

Para mas informacion en:
http://stackoverflow.com/questions/30812777/cannot-install-cocoa-pods-after-uninstalling-results-in-error/30851030#30851030

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

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