viernes, 5 de julio de 2013

Wordpress error : THE PLUGIN GENERATED XXX CHARACTERS OF UNEXPECTED OUTPUT DURING ACTIVATION

Mientras trabajo en la creacion de un plugin me encontre con el siguiente error en la activacion del plugin:

"The plugin generated xxx characters of unexpected output during activation. If you notice “headers already sent” messages, problems with syndication feeds or other issues, try deactivating or removing this plugin."

Wodpress no es muy claro para decirnos el tipo de error que necesitamos corregir , por lo tanto
necesitamos encontrar una manera para saber cual es el error que ocurrio durante la activacion
del plugin , wordpres trabaja con algo llamado "hook" donde podemos ejecutar algun
metodo entonces escribimos en nuestro plugin la siguiente linea

function catchErrorPlugin()
{
    file_put_contents('./wp_plugin_error.log', ob_get_contents());
}
add_action('activated_plugin', 'catchErrorPlugin');

Esto va crear un archivo con la descripcion exacta del error que necesitamos corregir .

miércoles, 3 de julio de 2013

Wordpress: Creando plugin con WP_List_Table y undefined function convert_to_screen()

Trabajando en la creacion de un plugin para wordpress donde tengo que usar  la clase " WP_List_Table " me encontre con el siguiente error en la parte del front-end  cuando instancias la clase para crear la tabla.

undefined function convert_to_screen() 

El problema con esto es que WP_List_Table no encuentra el metodo que se encuentra en "wp-admin/includes/template.php " buscando en interent fue todo un caos , algunos dicen que es un bug , otros dicen que pasa por que ese ese metodo solo accesible para el area de admin ya que ahi no pasa el error.

Bueno solo escribo aqui para postear como he solucionado el error tienes que agregar estas linea donde estas extendiendo la clase WP_List_Table.

if(!class_exists('WP_List_Table')){
    require_once( ABSPATH .'wp-admin/includes/template.php');
    require_once( ABSPATH .'wp-admin/includes/class-wp-list-table.php' );
}   

Al agregar "template.php" WP_List_Table tendra acceso al metodo que necesita , estoy seguro que en terminos de seguridad no es correcto acceder a metodos admin en el front-end pero tenia que solucionar el problema.

martes, 2 de julio de 2013

Como mandar informacion secreta encriptada




Con todo el asunto que paso recientemente con el caso de PRISM el proyecto ultra secreto del EEUU donde nos espía a todos en el planeta  y tiene acceso todos nuestros datos de google , facebook , twitter , yahoo , etc.

Viene la pregunta y ahora que hacemos ? como puedo enviar alguna información sin que el gobierno de EEUU tenga acceso a ellos , ya que si envías un sms , email o haces una llamada telefónica ten por seguro que el gobierno tiene esos datos por que la compañías no encriptan esa información en sus bases de datos.

Bueno con esto en mente hay una web que te permite enviar información de carácter ultra secreto encriptado y una vez que es leído destruye el mensaje todo esto de manera totalmente anónimo y gratuito , por ahora es lo seguro que se puede usar para enviar información , ya que si quieres enviar tu numero de tarjeta de crédito por correo es una mala idea . link del servicio abajo

link: https://www.noteshred.com/

lunes, 1 de julio de 2013

Para que sirve Underscore.js



En este post quiero hablar de underscore.js una libreria javascript que nos ofrece muchas utilidades que nos harán las vida mas fácil al trabajar con tipos de datos object y array , la razón por la que hago este  post es para ofrecer ejemplos un poco mas prácticos  de lo que puede hacer underscore.js.

Hace un tiempo atrás yo no conocía esta librería y por razones de trabajo tuve a revisar su pagina oficial para saber de que se trataba , la primera vez que leí la documentación y ver algunos ejemplos de la pagina no me termino de convencer y no le preste mucha atención a la librería e incluso pensé que era una perdida de tiempo , pero después varios amigos del trabajo me explicaron el uso de underscore.js aplicados con ejemplos reales en proyectos y hasta ese momento me di cuenta del potencial de esta librería.

Si nadie me hubiera explicado el uso de underscore.js con usos prácticos nunca me hubiera interesado en la librería   , creo que los ejemplos de la pagina oficial no lograron transmitirme el verdadero potencial de esta librería por esta razon escribo este post para tratar transmitir a otros lo que yo no entendi en su momento.

Para los siguientes ejemplos puedes usar el modo consola de google chrome para ejecutarlos o puedes crear un proyecto pequeño en tu maquina , todas las instrucciones de como usar la librería están en la pagina oficial de underscore.js aqui solo veremos ejemplos practicos de algunos metodos.

Lo primero que necesitamos es un arreglo de objetos que nos simulen datos provenientes de una BD : 

var json = [ 
{ "id": "18741DB9-B869-B378-8624-0B9F593F84BA", "name": "Ross", "email": "lobortis@arcuetpede.ca", "about": "nisl. Quisque fringilla euismod enim.", "title": "Mr." }, { "id": "E2D7A39E-4583-A27A-BC55-98489F062FB1", "name": "Bruno", "email": "egestas.nunc@eratvitaerisus.edu", "about": "Donec tincidunt. Donec vitae erat", "title": "Ms." }, { "id": "26CC1826-2BBA-5ABB-CB7E-D06AD96D1A23", "name": "Audra", "email": "tincidunt.vehicula.risus@tempus.com", "about": "Nullam suscipit, est ac facilisis", "title": "Mr." }, { "id": "4F0FCC7A-A715-4AC2-B64F-830AA3441995", "name": "Kelsey", "email": "sodales.at@quis.net", "about": "mi felis, adipiscing fringilla, porttitor", "title": "Mr." }, { "id": "8A3A6AF5-225D-D812-ABB0-3668D27F677F", "name": "Blaine", "email": "suscipit.est.ac@aclibero.ca", "about": "lorem eu metus. In lorem.", "title": "Mr." }, { "id": "8B7A6266-5CDD-AF5A-6C15-ECF6273A26FB", "name": "Brielle", "email": "Morbi.metus@nislQuisque.net", "about": "ullamcorper eu, euismod ac, fermentum", "title": "Dr." }, { "id": "3C1D2DF8-CB72-EF58-2B7D-DD266E54710A", "name": "Susan", "email": "rutrum@aliquet.org", "about": "mattis. Cras eget nisi dictum", "title": "Mrs." }, { "id": "1F391F0E-DE13-5089-7A92-8BA9B1264245", "name": "Brent", "email": "nibh.dolor@magna.edu", "about": "fringilla. Donec feugiat metus sit", "title": "" }, { "id": "340DCB7E-428E-EA04-E394-513893AE2E56", "name": "Cally", "email": "Cras.lorem@eunullaat.net", "about": "nunc. In at pede. Cras", "title": "" }, { "id": "C061F9A3-EC77-6B24-E0A4-218134EA240E", "name": "Edan", "email": "vel.mauris@sed.ca", "about": "sit amet orci. Ut sagittis", "title": "Ms." } ] ;

Con este ejemplo vamos comenzar nuestra practica. En la variable json estamos asignando un arreglo de objetos donde cada elemento del arreglo es un objecto con la siguiente estructura :


"id": "18741DB9-B869-B378-8624-0B9F593F84BA",
"name": "Ross",
"email": "lobortis@arcuetpede.ca",
"about": "nisl. Quisque fringilla euismod enim.",
"title": "Mr." 
}


En total hay 10 elementos en nuestro arreglo , con la misma estructura pero con diferente datos a simple vista no puede parecer mucho pero ahora imagina este arreglo pero de 200 elementos que fueron devueltos de una consulta a alguna BD.

Ahora vamos a ver algunos métodos , no voy explicar las definiciones estas las puedes revisar en la pagina oficial solo comentare algunas ideas de como usarlos :

each : Puede usarse para realizar operaciones por cada elemento del arreglo ejemplo :

_.each( json , function(element){ console.log(element.title + element.name) });

El resultado de esto sera :

Mr.Ross Ms.Bruno Mr.Audra Mr.Kelsey Mr.Blaine Dr.Brielle Mrs.Susan Brent Cally Ms.Edan

Has notado lo simple que fue iterar en cada elemento del arreglo y concatenar 2 propiedades de el mismo en una sola linea de codigo ? Si no usaramos underscore.js para hacer esto tendríamos que usar un ciclo FOR que nos tomaría fácilmente mas de 4 lineas de código.

map: Lo podemos usar para para extraer solo las propiedades que nos interesan de cada uno de los elementos del arreglo . ejemplo:

_.map(json, function(element){ return {"name": element.name ,"email" : element.email } });

El resultado sera un arreglo de 10 elementos donde la estructura de cada elemento es la siguiente :


{
email: "lobortis@arcuetpede.ca"
name: "Ross"
}

Aquí solo hemos extraído los datos que necesitábamos de todo el conjunto original.

find : Podemos usarlo para encontrar un elemento en especifico que necesitemos . ejemplo :

_.find(json, function(element){ return element.id == "8A3A6AF5-225D-D812-ABB0-3668D27F677F" });

El resultado sera :

{
id: "8A3A6AF5-225D-D812-ABB0-3668D27F677F",
name: "Blaine", 
email: "suscipit.est.ac@aclibero.ca", 
about: "lorem eu metus. In lorem.",
title: "Mr."
}

filter : Se usa para filtrar los resultados según una condición , por ejemplo si queremos saber cuales son los elementos del arreglo que tienen "Mr ." en la propiedad title. ejemplo:

_.filter(json, function(element){ return element.title == "Mr."; });

El resultado sera un arreglo de 4 elementos donde cada elemento tiene "Mr.s" en la propiedad title.

some : podemos usarlo para saber si existe algun valor en especifico esta presente en los elemento , ya que este metodo devuelve true si es encontrado. ejemplo :

_.some(json, function(element){ return element.name == "Brent" })

El resultado sera : true.

every : puede ser usado para saber si todos los elementos del arreglo son del tipo "Mr." ejemplo :

_.every(json,function (element) { return element.title == "Mr." });

El resultado sera : false por que en nuestro arreglo tenemos "Mr." y "Ms." presentes.


groupBy : Usado para agrupar colecciones de objetos, ejemplo :

var data = ["a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "a10", "a11", "a12", "a13"];
var n = 3;
var lists = _.groupBy(data, function(element , index) {
                            return Math.floor(index/n);
                    });


El resultado sera: Un arreglo donde cada elemento es una coleccion de 3 elementos.

sortBy : Usado para ordenar arreglos en order ascendente  

_.sortBy([3, 2, 1, 4, 6, 5], function(num){ 
return num; 
});
 
El resultado sera : [1, 2, 3, 4, 5, 6]

Si quieres hacerlo en order descendente solo tienes que usar metodo reverse del objecto array()

_.sortBy(that.currentSession.players, function(player){ 
return player.points; 
}).reverse();

uniq : usado para remover objetos duplicados de un arreglo

var data = [{'name': 'Amir', 'surname': 'Rahnama'}, {'name': 'Amir', 'surname': 'Stevens'}];
 

 _.uniq(data,false, function(element){ return element.name; }); 


 Hasta aquí he cubierto el uso básico de Underscore.js , te recomiendo que leas la documentación para saber que otras cosas puedes hacer con el como usar los templates y encadenar métodos espero haber aclarado un poco el uso de esta libreria

Link : http://underscorejs.org/




Icon Fonts La nueva manera de insertar iconos en tu web


Icon Fonts es una idea genial para insertar iconos en tu web sin usar archivos de  imágenes como lo hacemos normalmente , tiene muchas ventajas sobre la manera tradicional.

Iba a escribirlas aquí pero encontré un link muy bueno donde las describen mejorde lo que yo lo haria y para que reinventar la rueda verdad ? de todas formas me extraño que en mi blog no haya escrito nada sobre este tema , ya que tiene su buen rato esto de los Icon Fonts.