Skip to main content

Go daddy ES 728x90

Laravel 5

LARAVEL

Hace tan sólo unos días que la versión 5 de Laravel ha llegado. Tras hacer algunas pruebas, he encontrado que, a pesar de ser uno de los frameworks mejor documentados, hay algunas cosas que no están explicadas. Aquí van un par de ellas:

Problema: He instalado Laravel y sólo veo el árbol de directorios/archivos.

Solución: Si usas Apache, lo más probable sea que necesites el fichero .htaccess en la raíz del DocumentRoot.

RewriteEngine On

RewriteRule ^(.*)$ public/$1 [L]

si ese no funciona, prueba con este

RewriteEngine On

RewriteBase /
RewriteCond %{REQUEST_URI} !^/public/
RewriteCond /public/%{REQUEST_URI} -d
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ /public/$1/

RewriteBase /
RewriteCond %{REQUEST_URI} !^/public/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /public/$1

RewriteBase /
RewriteRule ^(/)?$ /public/index.php [L]

Problema: veo una página en blanco, pero no aparece la vista de welcome de Laravel.

Solución: Si estás trabajando en local (en un entorno de desarrollo) lo más probable es que sea un problema de permisos. La solución rápida es abrir un terminal y escribir:

cd /path/de/mi/proyecto/laravel/
chmod 777 * -R

Atención! Si estás en un entorno de producción, eso es una barbaridad! Lee la documentación de Laravel para conocer qué permisos son los adecuados.

Otra recomendación es configurar laravel en modo debug, para que muestre el error en tu navegador, seguro que te da alguna pista útil. Para hacerlo, hay que modificar el fichero config/app.php y en la linea que pone ‘debug’ escribir:

 'debug' => true,

Problema: No tengo tabla de usuarios en Laravel!

Solución: Sólo necesitas lanzar el comando migrate de artisan

Ahora Laravel tiene preinstalado un sistema de registro y login de usuarios. Es muy cómodo porque después de una instalación ya tienes disponible un template de ejemplo en http://tudominio/home con un bonito formulario hecho con bootstrap:

sreenshot-laravel5
Screenshot Laravel 5

Pero al intentar registrar un usuario o hacer login, aparece el siguiente error:

QueryException in Connection.php line 614:
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'laravel.users' doesn't exist (SQL: select count(*) as aggregate from `users` where `email` = my@email.com )

Para arreglarlo, sólo es necesario lanzar el artisan migrate:

cd /path/de/mi/proyecto/laravel/
php artisan migrate

Y creará una hermosa tabla de usuarios. Si prefieres crear la tabla a mano (no recomendado) aquí la tienes para MySQL.

--
-- Table structure for table `users`
--

CREATE TABLE IF NOT EXISTS `users` (
`id` int(10) unsigned NOT NULL,
  `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `password` varchar(60) COLLATE utf8_unicode_ci NOT NULL,
  `remember_token` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;

--
-- Indexes for table `users`
--
ALTER TABLE `users`
 ADD PRIMARY KEY (`id`), ADD UNIQUE KEY `users_email_unique` (`email`);

--
-- AUTO_INCREMENT for table `users`
--
ALTER TABLE `users`
 MODIFY `id` int(10) unsigned NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=2;

Suerte!

qTranslate y WordPress

Si usas el plugin qTranslate en un WordPress más nuevo que la versión 3.8.1, lo más probable es que al editar páginas ( o cualquier contenido traducible ) aparezca un error en el backend con el siguiente texto:

The qTranslate Editor has disabled itself because it hasn't been tested with your WordPress version yet. This is done to prevent WordPress from malfunctioning. You can reenable it by clicking here (may cause data loss! Use at own risk!). To remove this message permanently, please update qTranslate to the corresponding version.

El caso es que qTranslate, ha dejado de desarrollarse, por lo que hay dos opciones.

  1. Utilizar mqTranslate, un fork basado en el propio qTranslate y totalmente compatible (más info aquí)
  2. Arreglar qTranslate.

Si tu opción es arreglar qTranslate, debes saber que es bastante sencillo, y que funcionará correctamente – comprobado – hasta con la vesión 4.1 de wordpress (la versión más nueva hasta el día de escribir estas líneas).

Lo único que debes hacer es i) dirigirte al directorio siguiente de tu instalación de wordpress:

/wp-content/plugins/qtranslate

ii) Hacer una copia de seguridad del fichero qtranslate.php

iii) Localizar la línea en que aparece define(‘QT_SUPPORTED_WP_VERSION’, ‘3.8.1’) y sustituir el valor de la constante por tu versión de WordPress. En el caso de la versión 4.1, deberás escribir lo siguiente:

define('QT_SUPPORTED_WP_VERSION', '4.1');

Con esto debería quedar solucionado, aunque con el tiempo es más que probable que haya que migrar definitivamente a mqTranslate.

Suerte!

Cómo configurar una impresora WiFi en Linux

En mi caso, voy a configurar una impresora Brother DCP-L2520DW, que es una impresora láser monocromo multifunción (con escáner incluido). La configuración para Linux Mint y Ubuntu son exactamente iguales, y probablemente también lo sea para cualquier otra distribución basada en Debian.

La información recopilada aquí, ha sido extraída de la web oficial de Brother, aunque también he tenido que recurir a otras varias fuentes para poder configurar el escáner vía WiFi. También doy por hecho que la impresora está correctamente conectada a la red inalámbrica y que es accesible desde los PCs.

Empezaremos instalando un par de paquetes del repositorio, que serán necesarios posteriormente:

sudo apt-get install ia32-libs sane-utils

Paso 1. Descargar los drivers.

En la web de Brother, podemos encontrar todos los drivers que necesitamos. En mi caso, pra el modelo DCP-L2520DW, he tenido que descargar desde aquí los siguientes elementos:

  1. Generic LPR printer driver (deb package)
  2. Generic CUPSwrapper printer driver (deb package)
  3. Scanner driver 64bit (deb package)

Los dos primeros, son para la impresora en sí, y el último nos permitirá acceder a escáner. Recuerda seleccionar correctamente tu plataforma para descargar el paquete correcto (deb, para distribuciones basadas en Debian y rpm para distribuciones basadas en RedHat, así como paquetes 64 o 32 bits).

Paso 2. Instalar los drivers.

Una vez descargados los tres paquetes (necesarios en mi caso) .deb, vamos a instalarlos. Para ello, hay que ejecutar los siguientes comandos en un terminal (recuerda que para realizar este paso es necesario tener privilegios de root)

dpkg -i --force-all brscan4-0.4.3-0.amd64.deb
dpkg -i --force-all brgenml1lpr-3.1.0-1.i386.deb
dpkg -i --force-all brgenml1cupswrapper-3.1.0-1.i386.deb

Esto instalará los tres paquetes. Podemos verificar la instalación de los tres con el siguiente comando:

dpkg -l  |  grep  Brother

El comando anterior debería mostrar una lista similar a la siguiente:

ii brgenml1cupswrapper 3.1.0-1  i386   Brother  BrGenML1 CUPS wrapper driver
 ii brgenml1lpr         3.1.0-1  i386   Brother  BrGenML1 LPR driver
 ii brscan4             0.4.3    amd64  Brother  Scanner Driver

 Paso 3. Configuración de impresora

Una vez instalado, deberemos editar el fichero /etc/printcap para adaptarlo a nuestra configuración, de la siguiente manera:

sudo nano /etc/printcap

Y buscaremos la línea que empieza con :lp. Esta línea (sólo para la configuración WiFi) debe ser eliminada, y en su lugar deberemos escribir lo siguiente:

:rm=xx.xx.xx.xx\
 :rp=lp\

Guardamos y salimos.

Ahora añadiremos la impresora al sistema. Para ello, podemos ir a la configuración de impresoras de Mint, en el Configuración del sistema, y configurar o añadir (si no aparece) una nueva impresora.

Los parámetros necesarios para que funcione son:

Si añades una nueva, el dispositivo tiene que ser de tipo:

LPD/LPR Host or Printer" or "AppSocket/HP JetDirect"

Device URI, en el que se debe escribir:

lpd://xx.xx.xx.xx/binary_p1

Guardamos y ya podemos hacer una prueba de impresión. Si todo ha ido bien, saldrá una bonita página de prueba.

Paso 4. Configuración de escáner

Ya tenemos casi todo listo, vayamos a configurar el escáner. Para ello, debemos tener instalado brsaneconfig4 que debería venir dentro del paquete instalado al inicio sane-utils.

Configurar el escáner es facil. Sólo hay que ejecutar:

brsaneconfig4 -a name=scanner model=DCP-L2520DW ip=xx.xx.xx.xx

Esto debería ser suficiente para que al abrir cualquier aplicación para escáner, (en mi caso, simple scan) detecte tu nuevo dispositivo.

Como nota, en los pasos en los que he escrito xx.xx.xx.xx, es necesario que sea sustituido por la IP de la impresora a configurar.

Este procedimiento, ha sido comprobado tanto en Linux Mint 17 Qiana, como en Ubuntu 14.x con la impresora Brother, aunque seguramente será muy similar en otros entornos con otras impresoras.

Próximo objetivo: Configurar la impresora en Android!

Backlight de la pantalla de Acer

Atención! Este artículo puede estar obsoleto. En nuevas versiones de Linux Mint (a partir de la 17.3) ya está solucionado y no es necesario tocar nada para que funcione correctamente.

Me he encontrado en las últimas versiones de Ubuntu y Linux Mint que no funciona correctamente la opción de subir o bajar el brillo de la pantalla en mi portátil Acer, utilizando las teclas [Fn] + izq/der. No sé a que puede ser debido que en las últimas versiones falle, cuando antes funcionaba perfectamente, pero he encontrado aquí cómo solucionarlo:

Editar como root el fichero /etc/default/grub

y en la linea que empieza conGRUB_CMDLINE_LINUX

debe quedar de la siguiente manera:GRUB_CMDLINE_LINUX="quiet splash acpi_osi=Linux acpi_backlight=vendor"

Tras hacer el cambio, ejecutarsudo update-grub

y reiniciar el PC.

Con esto se soluciona el problema. 🙂

Comando grep

Este será un artículo práctico, en el que pondré algunos ejemplos de cómo encontrar archivos que contienen una cadena de texto determinada.

A mi me pasa en muchas ocasiones, intentar encontrar en qué lugar de una aplicación (su código fuente) hay una cadena de texto concreta – ya sea la definición de una constante o una palabra clave que en algún momento puse – resulta en ocasiones más que entretenido.

Es cierto que si utilizas frameworks como Eclipse o similares, estas opciones suelen venir integradas de manera más o menos sencillas, pero trabajando desde un terminal, la cosa cambia.

El comando que nos permitirá realizar una búsqueda de una cadena de texto dentro de uno o más ficheros o incluso toda una estructura de directorios, es grep.

A continuación aquí van algunos ejemplos básicos y muy habituales:

pedro@pedro-laptop:/home/pedro$ cat catalina.out | grep UPDATE

o también

pedro@pedro-laptop:/home/pedro$ grep UPDATE catalina.out

Estos dos comandos hacen lo mismo, muestra por pantalla todas las líneas que contengan la palabra UPDATE dentro del fichero catalina.out.

pedro@pedro-laptop:/home/pedro$ tail -f /var/log/syslog | grep usb
pedro@pedro-laptop:/home/pedro$ tail -f /var/log/apache2/access.log |grep web_concreta.html

Así podremos ver en tiempo real qué dispositivos usb se conectan y desconectan al PC o cuando se está accediendo a una web_concreta.html en Apache, respectivamente.

Si lo que necesitamos es buscar de manera recursiva en la estructura de directorios, basta con usar la opción -r:

pedro@pedro-laptop:/home/pedro$ grep -r UPDATE /path/to/dir

También podemos mostrar el archivo que contiene la cadena que estamos buscando, en vez de mostrar sólo el contenido del fichero:

pedro@pedro-laptop:/home/pedro$ grep -H -r usb /var/log/

El anterior comando muestra los archivos y la linea que contiene usb dentro de /var/log y todos sus subdirectorios.

Si lo que necesitamos es mostrar únicamente el fichero sin mostrar el contenido, también es posible:

pedro@pedro-laptop:/home/pedro$ grep -lr usb /var/log/

Si sabemos el nombre o la extensión del archivo que estamos buscando podemos acotar más la búsqueda, ejecutando el siguiente comando:

pedro@pedro-laptop:/home/pedro$ grep -Hr hidden /ruta/a/directorio |grep nombre_de_archivo

Esto nos mostrará todos los ficheros llamados nombre_de_archivo que se encuentran dentro de /ruta/a/directorio y que contienen hidden.

Si lo que necesitas es encontrar la cadena de texto -r, puedes usar las comillas dobles:

pedro@pedro-laptop:/home/pedro$ grep -H -r “-r” /var/log/

Cabe recordar que si el resultado del comando es un listado demasiado largo, tenemos la opción de añadir al final de cualquiera de los anteriores comandos | more que nos permitirá paginar los resultados encontrados, o bien añadir también al final > resultados.txt para generar un fichero de texto con los resultados obtenidos. Añadiendo >> resultados.txt, añadiremos los resultados al final del fichero.

Un saludo!

Cuanto Meme

ACTUALIZACIÓN: Justo 2 meses después de la publicación del artículo, hemos superado las 10.000 descargas, y contamos con otras tres nuevas aplicaciones!!! Muchas gracias!!!

Fuck YeahHace ya algunos meses que me compré un Samsung Galaxy S y la verdad es que estoy muy contento con la compra. El móvil es una pasada, pero no lo compré únicamente porque fuese cool, (que también), sino porque me quería adentrar en el mundo de la programación Android, y ese móvil parecía lo suficientemente pontente como para empezar a trastear con buen pié. Y eso hice.

He aprendido muchísimo gracias a Raul, que literalmente, es una máquina de hacer aplicaciones para Android. Nos hemos tirado muchas tardes (y noches) programando aplicaciones. Tanto, que nos hemos decidido a subir una al Android Market, bueno, en realidad ya van dos.

La primera que subimos la semana pasada fue Cuanto Meme, una aplicación que extrae las imágenes de Cuanto Cabrón, Cuanta Razón, Visto en Facebook y VayaGif desde su RSS, y las muestra de manera muy sencilla. La verdad es que ha tenido buena acogida, en una semana hemos llegado a las 650 descargas en el Android Market! Genial para ser la primera que subimos, aquí dejo el gráfico de descargas hasta ayer 😀

 

Descargas de Cuanto Meme
Descargas de Cuanto Meme

La segunda aplicación, aprovechando el motor de la anterior, fue Cuanto Meme Gallery, que es la misma idea de aplicación pero con otra interfaz gráfica. Esta lleva en el market tres o cuatro días y ya tenemos 50 descargas! Tampoco está nada mal!

A medida que Raul y yo vayamos subiendo nuevas apps (alguna nueva hay entre manos) lo ire comentando por aquí, y en la web STKDevelopers.com que de momento está en construcción.

Cuanto Meme
Cuanto Meme
Cuanto Meme Gallery
Cuanto Meme Gallery
Cuanto Meme
Cuanto Meme
Cuanto Meme Gallery
Cuanto Meme Gallery

Aquí están algunas capturas de imágenes de las apps y sus respectivos códigos QR para descargar desde tu móvil. Que las disfrutéis, y no olvidéis comentar en el market! 🙂

GPG error

Hace algunos días que aparece un molesto error en mi Ubuntu, relacionado con las actualizaciones del sistema. El error que aparece es:

Reading package lists… Done
W: A error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: http://extras.ubuntu.com oneiric Release: The following signatures were invalid: BADSIG 16126D3A3E5C1192 Ubuntu Extras Archive Automatic Signing Key <ftpmaster@ubuntu.com>W: GPG error: http://archive.canonical.com oneiric Release: The following signatures were invalid: BADSIG 40976EAF437D05B5 Ubuntu Archive Automatic Signing Key <ftpmaster@ubuntu.com>
W: GPG error: http://archive.canonical.com lucid Release: The following signatures were invalid: BADSIG 40976EAF437D05B5 Ubuntu Archive Automatic Signing Key <ftpmaster@ubuntu.com>
W: Failed to fetch http://extras.ubuntu.com/ubuntu/dists/oneiric/Release

W: Some index files failed to download. They have been ignored, or old ones used instead.

Este error viene acompañado del icono permanente en la barra superior. He encontrado en ubuntuforums la manera de solucionarlo. Allá va:

pedro@pedro-laptop:~$ sudo su
[sudo] password for pedro:
root@pedro-laptop:/home/pedro# cd /var/lib/apt
root@pedro-laptop:/var/lib/apt# mv lists lists.old
root@pedro-laptop:/var/lib/apt# mkdir -p lists/partial
root@pedro-laptop:/var/lib/apt# apt-get clean && apt-get update

Listo!! 😀

How to mount a ISO image under Linux

This post will be short. I wil only write the necessary commands to mount an ISO under Linux.

1. Open your terminal and get root

pedro@pedro-laptop:$ sudo su

2. Create the directory where we wanto to mount the ISO image

root@pedro-laptop:$ mkdir /media/iso

3. Mount the image in the directory as shown below

root@pedro-laptop:$ mount -o loop image.iso /media/iso

Where image.iso is the ISO file we want to mount, and /media/iso is the directory we created previously.

That’s all, now we can go to the directory where the ISO is mounted and explore it like a regular CD or DVD!

pedro@pedro-laptop:$ ls -lah /media/iso

In order to umount, just launch the command as superuser

pedro@pedro-laptop:$ sudo umount /media/iso

Montar una ISO en linux

Este post será corto. Tan sólo escribiré los comandos necesarios para montar una imagen ISO en linux.

1. Abrimos la consola y obtenemos root

pedro@pedro-laptop:$ sudo su

2. Creamos el directorio en el que montaremos la imagen ISO

root@pedro-laptop:$ mkdir /media/iso

3. Montamos la imagen en el directorio de la siguiente manera

root@pedro-laptop:$ mount -o loop imagen.iso /media/iso

Donde imagen.iso es el fichero en formatio ISO que queremos montar, y /media/iso es el directorio que hemos creado previamente.

Ya está, ahora ya podemos ir al directorio en que hemos montado la imagen como si de un CD o DVD se tratase!

pedro@pedro-laptop:$ ls -lah /media/iso

Para desmontar la unidad, tan sólo hay que hacer un umount como superusuario

pedro@pedro-laptop:$ sudo umount /media/iso

How to recover a file deleted by SVN if you use Eclipse

If you arrived until here, maybe you have lost a file and you want to recover it, so summon up your patience (and get lucky).

Some days ago I was so happy working with Eclipse writing PHP code when I thought: «This is the moment to commit my work». And I did it.

Usually, making a commit makes your SVN to manage the files, synchronicing the modified ones, and storing the new changes in a secure place. But when more than one person is working on the same file, you have a lot of chances your SVN to become crazy getting in troubles. I lost almost the whole work of this day 🙁

Searching on internet (I can’t remember where) Thanks to Dani Bru and his invaluable help, he found the name of a magic directory where were supposed to rest an automatic set of backups. «Yes… of course!» I thought. I had no hope, but this was the only track to solve the problem, and we get to work.

Apparently, in some obscure and hidden place of your file system, Eclipse makes (at least one) a backup before a commit. And this is how we find the place:

First step

Open your terminal and write:

pedro@pedro-laptop:~$ updatedb

Be patient, this can take a while. Specially if you never did it before. The command updates the file system index, so we can get an accurate search in the next step. When it finalizes, you won’t get any output, just will return to the console.

Second step

Search the string org.eclipse.core.resources, which is the magic directory that can save our lifes (well, our day):

pedro@pedro-laptop:~$ locate org.eclipse.core.resources | grep history
/some/path/to/org.eclipse.core.resources/.history/24/109601fa0cd800101a3dcfaf52c523eb
/some/path/to/org.eclipse.core.resources/.history/24/e077e68009d7001017b898f7b25b1cbb
/some/path/to/org.eclipse.core.resources/.history/25/9095cb8d2bd7001017b898f7b25b1cbb
/some/path/to/org.eclipse.core.resources/.history/26/40fa905e2bd7001017b898f7b25b1cbb
/some/path/to/org.eclipse.core.resources/.history/27/80aeb1582bd7001017b898f7b25b1cbb
/some/path/to/org.eclipse.core.resources/.history/2a/20efb2cb11d800101a3dcfaf52c523eb
/some/path/to/org.eclipse.core.resources/.history/2a/80914b200ed800101a3dcfaf52c523eb
/some/path/to/org.eclipse.core.resources/.history/2d/f0acb5240fd800101a3dcfaf52c523eb
/some/path/to/org.eclipse.core.resources/.history/3/e060608410d800101a3dcfaf52c523eb
/some/path/to/org.eclipse.core.resources/.history/32/a0a33f8f0ad80010160af0d88658fae4
/some/path/to/org.eclipse.core.resources/.history/34/60374f474bd60010182b9a1ddb7c2773
/some/path/to/org.eclipse.core.resources/.history/34/c04a901b4ad60010182b9a1ddb7c2773
/some/path/to/org.eclipse.core.resources/.history/36/c0d19b430bd80010160af0d88658fae4
(…)

Third step

Go into the directory relative to your project. Specifically into the .history hidden directory. In this example I will search something about an android project:

pedro@pedro-laptop:~$ cd /home/pedro/workspace/android/.metadata/.plugins/org.eclipse.core.resources/.history/
pedro@pedro-laptop:~$ ls
0 13 1c 2 24 28 2f 33 38 41 48 4e 52 60 6a 71 7a 7f 84 88 9 9b a3 a9 af b2 b6 be c2 c7 ce da e6 ec f f3 fd 1 16 1d 20 25 2a 3 34 3a 43 49 5 57 61 6e 72 7b 8 85 89 91 9d a4 ab b b3 b7 c c3 c8 d2 db e7 ed f0 f7 10 17 1e 22 26 2b 30 36 3c 44 4a 50 59 63 6f 75 7d 81 86 8a 94 9f a5 ad b0 b4 b8 c0 c5 ca d7 e2 e8 ee f1 f9 12 18 1f 23 27 2d 32 37 3d 45 4c 51 5f 64 7 77 7e 83 87 8d 97 a0 a8 ae b1 b5 b9 c1 c6 cd d9 e3 ea ef f2 fc

Fourth step

Launching a ls, we will get a lot of directory names without any apparent sorting (I couldn’t figure at least). But we can sort them by date with this command:

pedro@pedro-laptop:~$ ls -tlahr

This command will show the directories from older to newest (oldest at top of the list, and newest in the bottom). The only thing we can do at this point is look into these directories, starting by the newest one. Maybe some directories are empty, in this case go to the previous one. Being lucky, you will find some directory containing some strange files named like a MD5 hash. Open them and check if they are what you are looking for:

pedro@pedro-laptop:~$ cd e2
pedro@pedro-laptop:~$ ls -lah
total 20K
drwxr−xr−x   2 pedro pedro 4.0K 2011-09-06 00:30 .
drwxr−xr−x 147 pedro pedro 4.0K 2011-09-06 00:54 ..
−rw−r−−r−−   1 pedro pedro 1.9K 2011-09-06 00:27 1036c7a60ed800101a3dcfaf52c523eb
−rw−r−−r−−   1 pedro pedro  824 2011-09-04 21:14 108c03632ad7001017b898f7b25b1cbb
−rw−r−−r−−   1 pedro pedro 1.3K 2011-09-04 21:25 505f6baf2bd7001017b898f7b25b1cbb

pedro@pedro-laptop:~$ gedit * &

If the force is with you, is possible to find your missing files. I got the force with me and I restored the work of my day! 😀

Luck & thanks to Dani who helped me making this story have a happy end!