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.

GNU Mediagoblin ha lanzado una campaña de financiación colectiva, para sufragar el trabajo de uno o más desarrolladores que se puedan dedicar a tiempo completo para hacer avanzar el proyecto.

Página web de la campaña de financiación de MediaGoblin. ¡Con un vídeo genial!

Página web de la campaña de financiación de MediaGoblin. ¡Con un vídeo genial!

MediaGoblin es un sistema de publicación en la web que puede alojar contenidos de todo tipo (como un YouTube + Flickr + SoundCloud + otros). Es software libre, así que está disponible para personas, comunidades, organizaciones y empresas que quieran utilizarlo, desplegarlo en su propia infraestructura, o adaptarlo.

Mediagoblin es uno de los proyectos en los que participo, traduciendo la interfaz al español, y junto con Debian, ocupa una parte especial de mi corazón (y mi tiempo libre). Me gusta el estilo de su comunidad, muy inclusiva, y Chris Webber, el desarrollador principal del proyecto, anima mucho esa inclusividad y buen rollo que se respira. Sólo estando un rato en el canal IRC de FreeNode (#mediagoblin) uno se da cuenta de la capacidad resolutiva de muchos de sus miembros, a la par que siempre intentan trabajar a gusto para ser feliz y viceversa.

El software en sí es muy prometedor. Sólo el hecho de tener una interfaz limpia, traducida a varios idiomas, y la capacidad para alojar y visualizar muchos tipos de archivo usando siempre estándares abiertos y hace que me guste.

El que me conoce, sabe que amo la simplicidad de por ejemplo el archivo multimedia de Debian o el de la conferencia FOSDEM: un árbol de carpetas y archivos. Navegas hasta donde está lo que te interesa, te lo descargas, y ya está, lo ves en tu equipo. Pero cuando vi el archivo multimedia de LibrePlanet 2013 (que usa MediaGoblin), con miniaturas de todas las charlas allí mismo, la interfaz en español (por la detección de idioma de mi navegador), la etiqueta de licencia en cada charla, poderla descargar en varios formatos o verla dentro del navegador, entendí que mucha gente prefiere algo así, visualmente más atractivo, y eso no tiene por qué suponer una gran carga adicional en el lado del que despliega la infraestructura (MediaGoblin es más ligero respecto a recursos y administración que un gestor de contenidos estándar, por ejemplo, y está pensado para escalar bien tanto hacia arriba como hacia abajo).

LibrePlanet multimedia archive

Archivo multimedia de la conferencia LibrePlanet

 

Sé que tanto Debian como FOSDEM funcionan con el trabajo voluntario de personas (a veces poquitas) en su tiempo libre, y con un presupuesto muy ajustado, soy feliz con sus elecciones respecto a repositorios de vídeo. Pero si algún día deciden animarse o encuentran los recursos necesarios para desplegar y mantener un MediaGoblin, ¡serán aún más geniales!

Mis cosas están en una cuenta gobblin.se, de Joar Wandborg, otro desarrollador de MediaGoblin, que amablemente ofrece cuentas gratuitas en el servidor que mantiene. Ahí sólo tengo cositas públicas. En mi familia hemos comentado varias veces el tema de alojar y compartir fotos y vídeos nuestros: yo vivo en una ciudad distinta, y por ahora, cada uno mantiene su archivo multimedia en su ordenador, enviando por correo, de vez en cuando, una selección de las fotos y vídeos más interesantes, o pasándonoslo en un pincho USB cuando nos vemos. De cuando en cuando hablamos por videoconferencia, pero por ejemplo, yo no las grabo, porque serían archivos grandes difíciles de compartir por correo.

Así que a menudo me planteo la posibilidad de montarme un servidor MediaGoblin con control de acceso, para que todos podamos subir y ver la historia digital de la familia, y espero hacerlo a lo largo del año, cuando compre un equipo fijo que pueda tener encendido permanentemente.

Entretanto, acabo de donar por segunda vez (lo hice también en la primera campaña en 2012). Me parece muy importante que los proyectos comunitarios también salgan adelante y mantengan su independencia, con una planificación guiada por las prioridades de la propia comunidad. La financiación colectiva puede hacer esto posible, y MediaGoblin ya ha demostrado que sabe materializar las expectativas de los que le apoyan, y con creces (y si no, echa un vistazo al vídeo, donde muestran todo lo hecho el pasado año. Puedes poner subtítulos en español pulsando en el iconito “CC” que hay junto al volumen). ¿Te animas a unirte a la Fuerza Goblin? No te arrepentirás.

(Si tienes dificultad para donar porque la página de la campaña y la de la donación están en inglés, puedes echar un vistazo a este artículo de GNU/Linux Vagos  donde explican (en español) casi todo lo que pone en la página de la campaña, y también, contactar conmigo, y te aclararé todas las dudas que pueda).

The Onion Ring (TOR) protege tu privacidad haciendo que tu conexión navegue a través de una red distribuida por todo el mundo. Evita que alguien malintencionado o un gobierno totalitario se de cuenta que sitios visitas y al mismo tiempo que sitios malintencionados sepan tu ubicación geográfica.

La instalación en dispositivos Android es sencilla y configurar el cliente oficial de Twitter para que navegue por esta red es aun mas facil como lo puedes ver en este video.

Como ven el procedimiento es fácil y una vez instalada ORBOT en cuestión de segundos pueden tener el cliente oficial de Android configurado para que use como proxy HTTP la IP 127.0.0.1 a través del puerto 8118. Cabe destacar que a pesar de que mi tablet tiene acceso a root en ningún momento me pidio autorizacion para usar el modo super usuario asi que esto debería de funcionar en teléfonos o tablets sin acceso a root.

Las aplicaciones que use en este video las pueden descargar desde el Play Store de Google.



Y para Facebook como hago?

En el caso de Facebook recomiendo usar Tinfoil for Facebook y configurar el HTTP Proxy, Puedes descargar la aplicación directo desde el Play Store . Si quieres saber mas de esta aplicación hecha por un Venezolano no dejes de pinchar en Tinfoil Facebook: funcional y respeta tu privacidad.

Aquí les dejo una captura de pantallas que les muestra como configurar Tinfoil for Facebook, usen los mismos datos para el proxy que usaron para configurar twitter (127.0.0.1 a través del puerto 8118).

Configurar TOR en Tinfoil for Facebook


Desde la computadora.

Si también quieres mayor privacidad desde tu computadora puedes usar TOR Browser Bundle que es una suite the software que incluye el cliente de TOR y una versión de Firefox pre-configurada para usar este cliente. Tor Browser Bundle soporta distintas versiones de los sistemas operativos Windows, Linux y Mac OS X.