lunes, 21 de noviembre de 2016

Android Http peticiones con variables muy largas en post se truncan


Problema: Cuando realizamos peticiones Http estas se truncan a un numero si no mal recuerdo a 2000, no importa el numero, el hecho es que las cadenas te las trunca al menos en las peticiones post, donde se suelen enviar cadenas largas de datos, esto es comun en consumo de Web Services Restful.

Solución: Por ejemplo si estamos usando la librería HttpClient de Apache, lo que debemos hacer es enviar la siguiente cabecera Http, aqui el codigo:




cl = new DefaultHttpClient();

post = new HttpPost("http://www.dominio.com");

post.setHeader("Content-Type", "application/x-www-form-urlencoded");


Nota: Esta es una entrada de una serie que constituirá una base de datos de soluciones a problemas con los que me ido encontrando como desarrollador, en diferentes tecnologías como PHP, JS, Android, Swift, Python, etc. Espero que también sea de utilidad para otros colegas. Aqui esta la pagina con el indice que iré actualizando.

domingo, 20 de noviembre de 2016

Plugins indispensables para Atom, que todo desarrollador web debe tener

Bueno esta es una recopilación de plugins que uso con Atom, el cual es mi editor definitivo, pienso que son indispensables para todo desarrollador Web, seguramente conocen muchos o conocen algunos mas, aquí van:

Autocomplete-PHP: Mas descriptivo que su nombre no puede ser, este plugin nos ayuda a autocompletar código PHP.

Color-Picker: Nos desplegara un selector de color, en los códigos CSS, evitando tener que apañarnos con otros malabares.

File-icons: este sencillo plugins nos pintara un icono por cada tipo de archivo (CSS, PHP, JS, etc.) dándonos una referencia visual mas cómoda y rápida para ubicar nuestros scripts.

Git-time-machine: Este maravilloso plugins nos abrirá en la parte inferior (alt+t) una linea del tiempo con los cambios que ha sufrido un archivo, siempre que tengamos Git en nuestro proyecto, mostrándonos las diferencias.

Goto-definition: Este plugin nos permitirá buscar la definición de una función en nuestro proyecto, muy útil para encontrar los métodos de nuestras clases en proyectos complejos, como por ejemplo un proyecto con diseño MVC donde podríamos estar usando un método de un modelo dentro de un controlador, ubicar lo sera mas fácil con este plugin

Highlight-line: Este plugin podría parecer inútil, pero nos facilitara bastante nuestro quehacer pues nos indica la linea actual donde se encuentra el cursor, algo que no hace Atom por defecto ¡muy raro!

Highlight-selected: Con el podremos ver resaltadas todas las coincidencias a lo largo de nuestro script de aquella palabra que hayamos seleccionado con doble clic, bastante útil.

Jquery-snippets: Nos ayudara a usar la famosa librería Jquery de una manera mas productiva.

PHP-Linter: este plugin corrige errores de sintaxis que podamos cometer mientras escribimos código, depende del plugin linter, como nota adicional para usuario Linux, si al princicipio no funciona o roja un error el plugin, puede ser porque tenemos instalado algún todo en uno como xampp, por lo que para solucionarlo habremos de crear un enlace simbólico en /usr/local/bin que apunte a nuestro binario PHP que usualmente esta en /opt/lampp/bin/

Minimap: Este plugin crea un mini mapa que nos ayuda a tener una referencia visual de nuestro código a través nuestro script, algo que yo he encontrado ya indispensable en mi trabajo, ya no puedo codificar de otra forma, me siento perdido sin este plugin.

Php-twig: Nos permite utilizar la sintaxis de Twig.

Pigments: colorea códigos de colores en HEX que usamos en los CSS.

Todo-Show: Muestra los todos (pendientes) al oprimir las teclas Alt+Shift+T. lo hace  en diferentes niveles, Script, Carpeta, Proyecto.

Este es especifico para desarrolladores que usan Codeigniter.

Codeigniter: Una serie de snippets que nos ayudan a escribir rápidamente código para este framework.


Saludos y felices codigos.

Atom, plugin php-linter no funciona o arroja error al iniciar

Problema: Para los usuario Linux que instalaron un todo en uno como Xampp y no el stack convencional, este instala el binario usualmente en la ubicación /opt/lampp/bin por lo que el plugin intenta llamar al binario php el sistema lo intenta localizar en /usr/local/bin

Solución: crear un enlace simbólico, abrir una terminal y teclear:



sudo ln -s /opt/lampp/bin/php /usr/bin/php


Nota: Esta es una entrada de una serie que constituirá una base de datos de soluciones a problemas con los que me ido encontrando como desarrollador, en diferentes tecnologías como PHP, JS, Android, Swift, Python, etc. Espero que también sea de utilidad para otros colegas. Aqui esta la pagina con el indice que iré actualizando.

domingo, 14 de agosto de 2016

Google ¿Perfecto?

No pero casi…

Todos los informáticos sabemos que Google esta rodeado de un halo de perfección que nadie o prácticamente nadie pone en duda, bien ahora les pondré la prueba de no es perfecto y que como todos comete errores.

Esta imagen fue tomada el 7 de julio del presente año y prueba que Google no revisa sus códigos jeje, todos los que conocen PHP sabrán que el trozo de código que exponen en la siguiente documentación tronaría como chinampina (disculpen la mala calidad de la imagen)






Fuente:  https://developers.google.com/api-client-library/php/guide/aaa_idtoken

jajaja ya se que es una nimiedad, es que no tenia nada mejor que hacer XD, algo de humor no viene mal.

Felices códigos.

domingo, 19 de junio de 2016

Opera esta de regreso?

Muy probablemente …

Hablare de algo un poco off-topic, se trata de mi navegador favorito, bueno de nuevo favorito jajaja, Opera. Seguramente a estas alturas todos saben de este navegador, pues de hecho no conozco programador, administrador de sistemas, administrados de bases de datos, etc. que no conociera este legendario navegador, parece ser el conocido de todo los profesionales de la rama informática.

No es para poco, pues ya todos sabemos su historia, por años marco el ritmo, marco la tendencia, Opera decía y todos los demás obedecían. Creo que esta ademas mencionar cuales hitos hicieron a los navegadores modernos lo que son y que se lo debemos a Opera. Cuando los responsables de este navegador anunciaron que abandonaban Presto para sumarse al barco de Webkit con Chrome a la cabeza, mas de uno pegamos el grito en el cielo y no fue exageración, pues sabíamos exactamente lo que eso significaría, Opera se estanco, paso ser uno mas.

 




Pero parece ser que lo tenemos de vuelta, hace unos días apareció una actualización con un par de características que si bien no son lo non plus ultra, si marcan desde mi punto de vista personal, el deseo de Opera por volver a ser el protagonista, por recuperar la vieja gloria. Las dos características de las que les hablo es de un ad-blocker, espera… ¡pero los ad-blocker ya vienen existiendo desde hace mucho! si pero no built-in esto le permite usarse también en la version para teléfonos ademas de que hizo la navegación un poco menos molesta y un poco mas rápida. La segunda característica que me pareció bastante útil (esto dependerá totalmente de cada persona) es la capacidad de ver videos, por ejemplo de youtube, en una ventana flotante y continuar navegando.

Bueno, pues en conclusión espero que esto sea el comienzo de parte de Opera para volver a sorprendernos con sus hitos históricos.

Saludos y felices códigos.

viernes, 22 de abril de 2016

Swift y la comprensión de listas

cada vez mas enganchado a este lenguaje

Ultimamente he estado sumergido en Swift, aprendiendo este nuevo y maravilloso lenguaje, como ya sabemos, Swift es el nuevo lenguaje de Apple, el cual fue inspirado por varios lenguajes, entre ellos Python. Como seguramente ya sabrán, una de las características que mas suelen ser útiles en Python y otros, es la comprensión de listas, pero nada como un ejemplo practico. Pueden usar un playground en Xcode para seguir estos ejemplos.

Primero partamos de una clase persons y un array de instancias de esta.

class person {
    var name = ""
    var age = 0
   
    // construct
    init(name:String, age:Int) {
        self.name = name
        self.age = age
    }
}

let persons:[person] = [person(name: "Ivan", age: 29),
                        person(name: "Rodrigo", age: 28),
                        person(name: "Juan", age: 15),
                        person(name: "Pedro", age: 10),
                        person(name: "Antonio", age: 18),
                        person(name: "Jose", age: 12),
                        person(name: "Ruben", age: 25)]


En Python estamos familiarizados con sintaxis como la siguiente:

minors = [ x for x in persons if p.age < 18 ]

En Swift podemos hacerlo por medio de las clausuras, usando la función filter de la siguiente forma:

let minors = persons.filter { $0.age < 18 }

Otro ejemplo para aclararlo aun mas, con la función map podemos incluso interactuar con el resultado:

let adults = persons.filter({ $0.age > 17 }).map({ $0.name + " Y es mayor de edad" }) // agrega la leyenda al nombre de los mayores de edad




Si bien la sintaxis no es tan clara como en Python, si que es posible y el poder alcanzado con Swift es asombroso. Hasta la próxima y

Felices códigos.

martes, 5 de abril de 2016

Conversor Divisas MX

Presentando mi primera app en iOS, toda una odisea subir la app, pero al fin lo logre :)

La publicacion en la AppStore esta pendiente.

Por cierto que ya tambien esta publicada la version para android, aqui:
https://play.google.com/store/apps/details?id=ivansoftmx.conversordivisasmx

A su vez esta es la agina de soporte para esta app, cualquier comentario es bienvenido aqui.

Saludos.