Laravel como tal trabaja especificamente con "Routes with Closures" en lugar de un MVC tradicional con el objetivo de hacer el código más claro. Aun así permite el uso de MVC tradicional.

Este (y posiblemente otros) post serán una pequeña introducción para entender un poco Laravel.

Puesta en marcha

Requerimientos previos:

``` aptitude install php5-cli ```
Luego:
``` curl -sS https://getcomposer.org/installer | php sudo mv composer.phar /usr/local/bin/composer ```
Y ya con esto podemos ejecutar composer en cualquier otro proyecto que lo necesite :) Obteniendo Laravel ------------------ Existen dos formas de obtener laravel - La primera: Un .ZIP desde el repo de github haciendo clic (link: https://github.com/laravel/laravel/archive/master.zip text: aquí popup: yes) - La segunda: Clonando el repo https://github.com/laravel/laravel Yo, seleccione el .ZIP :problem: Manos a la obra --------------- Procedemos a obtener todo lo necesario para poder trabajar con laravel usando composer:
``` composer install ```
**BTW**... Si de casualidad presentan algun tipo de error con php5-mcrypt hagan esto:
``` aptitude install mcrypt aptitude install php5-mcrypt ```
Y luego:
``` sudo ln -s /etc/php5/conf.d/mcrypt.ini /etc/php5/mods-available sudo php5enmod mcrypt sudo service apache2 restart ```
update NOTA: El primer cambio que hice fue renombrar server.php a index.php Escribimos en la terminal:
``` php artisan serve ```
Y vamos a obtener algo como esto:
``` Laravel development server started on http://localhost:8000 ```
Y listo :) Ajá... Si ya no tenemos ningun tipo de error procedemos: Usando nuestro editor de texto preferido navegamos hasta:
``` app/controllers/HomeController.php ```
Y vamos a ver algo parecido a esto:
``` public function showWelcome() { return View::make('hello'); } ```
En este punto, estamos "trabajando" con el controlador pero necesitamos saber a donde va ( o viene sengun como lo quieran ver) los llamados que se hacen para mostrar las paginas que estemos visualizando y es por esto que debemos revisar el siguiente archivo:
``` app/routes.php ```
Donde, vamos a ver algo como esto:
``` Route::get('/', function() { return View::make('hello'); }); ```
Ahí esta llamando a una "**vista**" llamada "_hello_" entonces navegamos hasta:
``` app/views/hello.php ```
Y vemos que es el "hello world" de Laravel. ¿Que les parece si cambiamos todo lo que esta ahí por:
```

Hola mamá, estoy usando Laravel

```
Guardamos el archivo que modificamos y listo, al ejecutar laravel nuevamente en nuestro web server local vamos a ver los cambios que hicimos. Si, nada del otro mundo pero, poco a poco iremos haciendo más cosas :D Dejemos esto por los momentos en este punto, luego seguiremos con esto.

Alt Text

El Festival Latinoamericano de Instalación de Software Libre (FLISoL) es el evento de difusión de Software Libre más grande en Latinoamérica. Se realiza desde el año 2005 y desde el 2008 se adoptó su realización el 4to Sábado de abril de cada año.

En esta oportunidad se dictarán charlas, instalaciones y demos de las siguientes distribuciones linux:

  • Ubuntu
  • Fedora
  • Xanadu
  • Canaima Wadameka (Live)

Requisitos mínimos para la instalación:

  • Debe poseer una partición en disco de por lo menos 8 GB
  • Si llevas tu Pc de escritorio, debes llevarla con todo (monitor - case - teclado - mouse)
  • Ganas de aprender ;)

Ubicación y fecha:

  • Fecha: Viernes, 02 de mayo de 2014
  • Hora: 9:00 am - 01:00 pm (corrido)
  • Lugar: Casa de la Cultura, Calle Salón c/Av. Universidad. Naguanagua, frente a INSALUD.

Charlas

  • Eduardo Echeverría Docker. Framework que permite crear containers lxc con todas las dependencias de una aplicación dada.
  • Jesús Palencia - ViSerProject Presentacion de Xanadu
  • Héctor A. Mantellini Protege tus trabajos usa Licencias Libres
  • Alexander Salas & Angel Cruz Gestión de Proyectos con GitHub
  • Enis Sanches Lista de Recursos y Herramientas Libres para la Educación

Duración de cada charlas: 30 Min

(link: http://flisol.info/FLISOL2014/Venezuela/Valencia text: Visita la wiki popup: yes)

Hacer defer el javascript es uno de esos temas que preocupan a quienes tienen una pagina web en cuanto al tema de la optimización de la misma.

Hay gente que hace esto:

``` <script type="text/javascript" defer="defer"> ... </script> ```
O también te encuentras con quienes dicen que uses async o que lo pongas al final de la pagina para todos ellos les tengo noticias: ESO NO FUNCIONA --------------- Google, en su gran sabiduría nos deja este script:
``` <script type="text/javascript"> function downloadJSAtOnload() { var element = document.createElement("script"); element.src = "deferredfunctions.js"; document.body.appendChild(element); } if (window.addEventListener) window.addEventListener("load", downloadJSAtOnload, false); else if (window.attachEvent) window.attachEvent("onload", downloadJSAtOnload); else window.onload = downloadJSAtOnload; </script> ```
Creo que no tiene explicación ¿cierto? Por si mismo se explica pero, de igual manera acá les dejo este (link: https://developers.google.com/speed/docs/best-practices/payload#DeferLoadingJS text: enlace popup: yes) para que lean un poco más :) Update: Bueno si, creo que debo explicarlo un poco xD Lo que debemos cambiar del script es lo siguiente:
``` element.src = "deferredfunctions.js"; ```
donde: deferredfunctions.js es nuestro script.

No hace mucho hice un shell script que mostraba la fecha de creación de una cuenta de Twitter pero a las pocas semanas quedo obsoleto por la implementación del API 1.1 que requiere que este tipo de llamas al API sean autenticadas vía OAuth lo cual no es tan sencillo si solo quieres usar bash.

Esta versión esta hecha en Python y a diferencia del anterior proporciona mas información sobre la cuenta. de hecho puede procesar varias cuentas al mismo tiempo, veamos el código fuente de este programa hecho en Python:

from __future__ import print_function, unicode_literals
import requests
from requests\_oauthlib import OAuth1
from urlparse import parse\_qs

handles = raw_input('Enter twitter handles: ').split()

CONSUMER_KEY = " "
CONSUMER_SECRET = " "
OAUTH_TOKEN = " "
OAUTH_TOKEN_SECRET = " "

def get_oauth():
  oauth = OAuth1(CONSUMER_KEY,
  client_secret=CONSUMER_SECRET,
  resource_owner_key=OAUTH_TOKEN,
  resource_owner_secret=OAUTH_TOKEN_SECRET)
  return oauth

if __name__ == "__main__":
  oauth = get_oauth()
  payload={'screen_name':handles}
  r = requests.post(url="https://api.twitter.com/1.1/users/lookup.json",data=payload,auth=oauth)
  user_obj = r.json()
  for line in user_obj:
    print("Handle: " , line['screen_name'])
    print("User ID: " , line['id'])
    print("Verified: " , line['verified'])
    print("Name: " , line['name'])
    print("Account Created: " , line['created_at'])
    print("Followers: " , line['followers_count'])
    print("Following: " , line['friends_count'])
    print("Tweet Count: " , line['statuses_count'])
    print("Favorites: " , line['favourites_count'])
    print('- - - - - - - - - - -\n')

El producto de este script usando mi Twitter handle (orvtech) luce así:

Handle: orvtech
User ID: 4412471
Verified: False
Name: Oliver
Account Created: Thu Apr 12 21:35:06 +0000 2007
Followers: 5710
Following: 558
Tweet Count: 20233
Favorites: 6514


¿Como ver la información de varias cuentas?

Para ver de varias cuentas de Twitter solo debes dárselas a este programa hecho en Python, separadas por espacios en blanco, sin el símbolo de arroba como lo puedes ver aquí:

$ ./user-info.py
Enter twitter handles: orvtech twitter protected


¿Que necesito para correr este script de Python?

Para ejecutar este script necesitas registar tu aplicación y generar unas llaves en apps.twitter.com/app/new para lo que deberás iniciar sesión con tu usuario de Twitter. Una vez registrada tu aplicacion deberas asignar los valores de las constantes CONSUMER_KEY, CONSUMER_SECRET, OAUTH_TOKEN y OAUTH_TOKEN_SECRET en el código fuente del script.

¿Qué es la extensión mysqli de PHP?

La extensión mysqli, o como a veces se le conoce, la extensión de MySQL mejorada, se desarrolló para aprovechar las nuevas funcionalidades encontradas en los sistemas MySQL con versión 4.1.3 o posterior. La extensión mysqli viene incluida en las versiones PHP 5 y posteriores.

La extensión mysqli contiene numerosos beneficios, siendo estas las mejoras principales respecto a la extensión mysql:

  • Interfaz orientada a objetos
  • Soporte para Declaraciones Preparadas
  • Soporte para Múltiples Declaraciones
  • Soporte para Transacciones
  • Mejoradas las opciones de depuración
  • Soporte para servidor empotrado

Para saber más clic (link: http://www.php.net/manual/es/mysqli.overview.php text: aquí popup: yes)

Ahora, vamos a la practica:

Primer paso

``` // Variables para la conexion define('host', 'localhost'); define('user', ''); define('pass', ''); define('db' , ''); //Abriendo una nueva conexion al MySQL server $mysqli = new mysqli(host, user, pass, db); //Salida por si hay algun error en la conexion if ($mysqli->connect_error) { die('Error: ('. $mysqli->connect_errno .') '. $mysqli->connect_error); } ```
Segundo paso: SELECT ====================
``` // Indicamos que es lo que queremos buscar por ejemplo, el id 1 de la tabla user $search_id = "1"; $query = "SELECT * FROM user WHERE id=?"; $statement = $mysqli->prepare($query); //bind parameters for markers, where (s = string, i = integer, d = double, b = blob) $statement->bind_param('s', $search_id); //execute query $statement->execute(); //bind result variables $statement->bind_result($id, $username, $password); //fetch records while($statement->fetch()) { echo '$id'; echo '$username'; echo '$password'; } ```
Tercer paso: DELETE ===================
``` // Indicamos que es lo que queremos buscar por ejemplo, el id 1 de la tabla user $search_id = "1"; $query = "DELETE FROM user WHERE id=?"; $statement = $mysqli->prepare($query); //bind parameters for markers, where (s = string, i = integer, d = double, b = blob) $statement->bind_param('s', $search_id); //execute query $statement->execute(); //bind parameters for markers, where (s = string, i = integer, d = double, b = blob) $statement->bind_param('s', $search_id); //execute query if ($statement->execute()){ echo 'Eliminado'; }else{ die('Error:('.$mysqli->errno.')'.$mysqli->error); } ```
NOTA: Algo que me percate fue que al realizar el DELETE si le colocaba el asterisco me daba un error, quite dicho asterisco y funciono... Extraño no? :| Cuarto paso: insert =================== Este paso lo dejare pendiente porque aun, no logro entender ciertas cosas ;) Quinto paso: Cerrar las conexiones abiertas ===========================================
``` //Esto debemos incluirlo en TODOS y cada uno de las consultas que hagamos $statement->close(); //Cerrando la conexion al MySQL server, debe ser incluido al final para no dejar conexiones abiertas mysqli_close($conexion); ```
Bueno, espero que les sea de utilidad :D FUENTE: (link: http://www.sanwebe.com/2013/03/basic-php-mysqli-usage text: PHP MySqli Basic usage popup: yes)
En una de nuestras publicaciones anteriores les hablamos sobre el proceso de cambio de "Sabor" de Ubuntu (recuerden que los sabores son distribuciones basadas en Ubuntu pero con cambios principales en: Escritorio, Netbook y/o Servidores). Este cambio se realizaba sin tener que instalar el sistema completo, específicamente cambiar de Ubuntu a Xubuntu.

Como comentamos en esa publicación este proceso tiene sus pro y sus contras por lo que hoy, como parte de las publicaciones por el lanzamiento de la nueva versión de Ubuntu Trusty Tahr (este 17 de abril), les vamos a enseñar como en unos pocos pasos pueden realizar la instalación de esta distribución sin mayores implicaciones.
En la imagen a continuación, podrás ver los pasos que debes realizar en cada una de las pantallas que se presentan, al momento de comenzar el proceso de instalación:
Clic para ampliar la imagen
Si quieres una instalación más detallada puedes ver nuestra publicación de instalación de Ubuntu, donde especificamos como hacer particiones en el disco, el procedimiento es el mismo.

 Si tienen alguna consulta o alguna duda, pueden escribirnos a consulta_friki@kioscofriki.com.ve
Y recuerda, si esta información te ayudó y quieres colaborarnos puedes hacer tu donación aquí
 Visita nuestra tienda K!0$C0 FRIKI

Actualización 04/12/2014

[D E P R E C A T E D]

Usar bajo su responsabilidad.


Script para preparar el entorno para compilar una ROM para Firefox OS [DEBIAN]

Firefox OS

Como usar

Simplemente en nuestra consola como ROOT ejecutamos:

``` ./configure.sh ```
Luego, ejecutamos sin ser ROOT:
``` ./b2g.sh ```
Para automatizar el proceso de clonación, actualización y sincronización del repo B2G. userconfig ---------- Este archivo debe ir dentro de B2G/
``` .userconfig ```
Ahí ya tiene todas las variables de entorno necesarias para compilar nuestra ROM. Solo debemos cambiar unas cosas y son:
``` export GAIA_DISTRIBUTION_DIR=/home/abr4xas/B2G export L10NBASEDIR="/home/abr4xas/B2G/gecko-l10n" ```
Por:
``` export GAIA_DISTRIBUTION_DIR=/home/usuario/B2G export L10NBASEDIR="/home/usuario/B2G/gecko-l10n" ```
Donde: usuario es, obviamente tu nombre de usuario y listo. Inari ----- Para iniciar el proceso de creación (UNICAMENTE) de la ROM para el ZTE Open (inari) debemos hacer lo siguiente:
``` ./config.sh inari ```
Esto va a tardar un poco dependiendo la conexión que tengamos contratada ;) Esperamos que termine y luego seguimos con el siguiente paso. vegnuxmod.sh ------------ Luego de darle permisos de ejecución:
``` ./vegnuxmod.sh ```
Este script va fuera de la carpeta
``` B2G ```
NOTA ---- Funciona para debian TESTING :) Recuerden que hay que colocar permisos de ejecución a los archivos para que puedan funcionar ;) Licencia de uso --------------- GPL v2 Ir a (link: https://github.com/abr4xas/workbench text: github popup: yes)

Luego de (link: actualizando-zte-open-de-firefox-os text: actualizar el ZTE Open popup: yes) me di la tarea de buscar información de como "cocinar" (compilar/instalar) una ROM para mi ZTE Open aquí les resumo un poco lo que encontré y lo que hice:

No encontré nada

Si bueno, pase varios días y no encontré mucha información hasta que me tope con: (link: http://rowehl.com/blog/2013/10/24/firefoxos-1-dot-2-on-zte-open/ text: esto popup: yes) y (link: http://gnulinuxvagos.es/topic/2090-compilandoinstalando-la-%C3%BAltima-versi%C3%B3n-de-firefox-os-para-el-zte-open/#entry11912 text: esto popup: yes) y basándome en eso hice este (link: https://github.com/abr4xas/workbench text: script en bash popup: yes).

Aja... Y ahora?

Bueno, si bien podemos seguir completamente este (link: http://gnulinuxvagos.es/topic/2090-compilandoinstalando-la-%C3%BAltima-versi%C3%B3n-de-firefox-os-para-el-zte-open/#entry11912 text: tutorial popup: yes) también podemos ejecutar el (link: https://github.com/abr4xas/workbench text: script en bash popup: yes) que nos adelanta un poco el trabajo.

Efectos secundarios?

Si, absolutamente... Si compilamos para la v1.3 luego de aplicar el ./flash.sh notamos:

  • La imagen del logo de Firefox OS no funciona es decir, no se le mueve la cola al zorro.
  • Luego de unos días de usar la ROM perdí la opción del vibra call (no se la razón de esto).

Y por lo que entiendo todo es al momento de compilar si no queremos tener las herramientas de desarrolladores aplicamos:

``` BRANCH=v1.3 VARIANT=user ./config.sh inari ```
Pero al hacerlo e instalar la ROM me instala todas las herramientas de desarrolladores. Entonces, no se como modificar eso... Si sabes algo escríbeme al twitter @abr4xas :)
Como les comentamos en la publicación previa, esta semana estaremos escribiendo para ustedes diversas informaciones como parte de la celebración para el Día de la Libertad de los Documentos (Document Freedom Day - DFD), adicionalmente en nuestra cuenta en twitter @kioscofriki estaremos recordando publicaciones anteriores de este mismos tema.

En esta oportunidad les vamos a explicar como actualizar su suite ofimática LibreOffice cuando exista una versión nueva. En una oportunidad ya les explicamos como se realiza esta instalación, pero como hubo un ligero cambio en el procedimiento decidimos volver a mostrarles la manera de hacerlo. Adicionalmente, queríamos presentarle esta nueva versión de LibreOffice, específicamente la 4.2.2 que viene con algunos cambios algo novedosos.

Para empezar, deben descargar en su equipo la nueva versión a instalar, para luego remover la existente e instalarla. Para buscar la nueva versión, nos dirigimos a la sección de Descarga de la página de LibreOffice, si tienen algún sistema Operativo o Arquitectura distinta a la que esta predeterminada, pueden buscar en esta misma página la versión requerida. Es recomendable para la versión en Español descargar tanto la aplicación, como el archivo de lenguaje, y la ayuda. Ya que todas estas en conjunto harán que la aplicación tenga el idioma requerido, en este caso especifico en Español. Esta descarga les dejará en su equipo paquetes con la extensión .tar.gz, por lo que deberán descomprimirlos y luego deberán seguir los siguientes pasos:

1.- Abrir la Terminal
2.- Hacer una búsqueda para verificar el nombre correcto de la versión a eliminar  aptitude search libreoffice 
3.- Verificar el nombre de la versión instalada, en esta caso  libreoffice4.1 
4.- Para desinstalar colocamos  sudo aptitude purge libreoffice4.
5.- Para instalar la aplicación:
     5.1.- cd /directorio/LibreOffice_4.2.2.1_Linux_x86_deb/DEBS [Enter]
     5.2.-  dpkg -i *.deb  [Enter]
     5.3.- cd /directorio/LibreOffice_4.2.2.1_Linux_x86_deb_langpack_es/DEBS [Enter]
     5.4.-  dpkg -i *.deb  [Enter]
     5.5.- cd /directorio/LibreOffice_4.2.2.1_Linux_x86_deb_helppack_es/DEBS [Enter]
     5.6.-  dpkg -i *.deb  [Enter]

Y Listo! tienen instalada la nueva versión de LibreOffice.
**Recuerda que donde dice "directorio" es la ruta donde tienes descargado los archivos.

Si tienen alguna consulta o alguna duda, pueden escribirnos a consulta_friki@kioscofriki.com.ve
Y recuerda, si esta información te ayudó y quieres colaborarnos económicamente puedes hacer tu donación aquí
 Visita nuestra tienda www.kioscofriki.com.ve

Para los meses de Noviembre pasado la gente de ZTE lanzo su correspondiente actualización para los dispositivos ZTE Open, con esta versión la mayoría de las personas se han quedado sin ROOT pero esto no es así del todo...

Lo que hay que hacer, grosso modo:

  • Downgrade
  • ROOT
  • Instalar la v1.3
  • Disfrutar del ZTE :D

El único detalle es que la ROM esta en ingles y pueden existir algunos cierres inesperados de las aplicaciones.

Alt Text

Enlaces de interés:

Acá esta todo lo necesario para hacer la actualización:

(link: http://neuronadicta.com/post/haciendo-downgrade-en-un-zte-open-con-firefoxos-v11/ text: Haciendo downgrade en un ZTE Open con FirefoxOS v1.1 popup: yes) (link: http://neuronadicta.com/post/conseguir-hacer-upgrade-de-firefoxos-10-a-12--13-en-un-zte-open/ text: Upgrade de FirefoxOS v1.0 a las versiones 1.2 / 1.3 en un ZTE Open popup: yes)

Cabe destacar que, estos pasos son para los equipos de movistar Venezuela... Igual pueden intentarlo.