Páginas

domingo, 2 de noviembre de 2014

Coordova caapital

El viernes estuve presente en el 4to JS Meetup en Info UNLP, @elmasse habló de Apache Cordova y sobre Sencha Touch.

Algo había leído sobre PhoneGap hace un tiempo, pero esta vez nos vamos a meter un poquito más.

En pocas palabras cordova permitirá crear una aplicación nativa para Android, iOS, etc, desarrollando una aplicación HTML-JS-CSS.

Teniendo node.js instalado, instalamos cordova con 
npm install -g cordova
Para crear un nuevo proyecto:
cordova create holamundo com.ejemplos.holamundo HolaMundo
Esto creará una carpeta nueva holamundo y toda la estructura del proyecto, es recomendable agregarle el dominio inverso.

Para agregar la plataforma Android a nuestro proyecto
cordova platform add android
Vamos a necesitar tener instalado el ADT (Android Developer Tools), si estás en windows tal vez sea necesario agregar ANDROID_HOME al PATH cuando agreguemos la plataforma Android en nuestro proyecto cordova (Error: ANDROID_HOME is not set and "android" command not in your PATH. You must fulfill at least one of these conditions.)

Agregar ANDROID_HOME apuntando a la carpeta sdk del ADT
Agregar al PATH %ANDROID_HOME%\tools
Agregar al PATH %ANDROID_HOME%\platform-tools

También vas a necesitar instalado el JDK (Error: Failed to run "javac -version", make sure you have a Java JDK (not just a  JRE) installed.
Poner la variable JAVA_HOME en el PATH (Error: Failed to run "java -version", make sure your java environment is set up including JDK and JRE. Your JAVA_HOME variable is: C:\Program Files\java\jdk1.8.0_25)
Agregar al PATH %JAVA_HOME%\bin

Tataaaaa  Project successfully created.

miércoles, 22 de octubre de 2014

Nuevo sitio de Periodismo - perio.unlp.edu.ar

Finalmente lanzamos el nuevo sitio de Perio!!

http://perio.unlp.edu.ar/


Vista en grandes resoluciones


Vista en Tablets
Vista para celulares



Hecho: Responsive, filtros, votaciones, nuevos actores, sección alumnos, más herramientas para la Secretaría de Prensa, herramientas para las otras secretarías y direcciones, sub menúes desplegables.

ToDo: Mejorar SEO, mejorar compartir en las redes, agregar herramientas de vinculación con otros sitios de Perio como la Web de Cátedras, fotocopiadora, y SeViT. Mejorar la forma en la que se crean los espacios nuevos. Agregar el seguimiento de novedades para cada sección.

Va bien!

Migrando de OJS 2.2.3 a 2.4.5

Por si alguno tiene problemas en la migración, acá algunos problemas que vamos resolviendo...

Problema:
pg_restore: [archiver (db)] Error from TOC entry 2403; 1259 166527 INDEX article_search_keyword_text ojs
pg_restore: [archiver (db)] could not execute query: ERROR: could not create unique index "article_search_keyword_text"
DETAIL: Table contains duplicated values.
Command was: CREATE UNIQUE INDEX article_search_keyword_text ON article_search_keyword_list USING btree (keyword_text);
Resolución: Eliminar los duplicados

DELETE FROM article_search_keyword_list WHERE keyword_id NOT IN (SELECT MIN(keyword_id) FROM article_search_keyword_list GROUP BY keyword_text);
Problema:
Message: WARNING: pg_query(): Query failed: ERROR: index row size 3040 exceeds maximum 2712 for index "article_supp_file_settings_name_value"
SUGERENCIA: Values larger than 1/3 of a buffer page cannot be indexed.
Consider a function index of an MD5 hash of the value, or use full text indexing.

Resolución: Intentamos hacer un vacuum pero no va por ahí. El error viene dado por indexar strings, los cuales pueden superar el límite para los índices. Una alternativa es crear el índice recortando una parte del string, pero quedará para una futura ocasión, por ahora evitamos este índice. Acá una posible solución: http://dba.stackexchange.com/a/25140

Problema:
ERROR: duplicate key value violates unique constraint "c_v_e_s_pkey"
Resolución:
El problema viene dado porque en la actualización 2.3.3 del OJS se empiezan a tabular los intereses, y pasan de ser un campo de texto libre en user_settings a un par de tablas nuevas. Como los textos cargados como intereses están desnormalizados y además las revistas alojadas en nuestro gestor no utilizaban esta funcionalidad, le restamos importancia y solamente migramos el primer interés de cada uno de los que cargaron intereses.

Revistas ACTUALIZADAS! :D

pd.- Desde la versión 2.4.5 hay todo un cambio en como se manejarán los parches y el desarrollo, mucho mejor.

https://pkp.sfu.ca/introducing-the-developers-blog/

lunes, 13 de octubre de 2014

warning: Creating default object from empty value in /sites/default/modules/cck/theme/theme.inc on line 135

En un entorno con PHP 5.4 empiezan a aparecer errores que en versiones anteriores no aparecían.

En el módulo CCK en la linea  de la versión 2.x de Drupal 6 no subieron un fix que ya está en la versión 3.alpha.

Agregar en theme.inc en la linea 131,

if (empty($row->{$child})) $row->{$child} = new stdClass();

jueves, 15 de mayo de 2014

jquery Countdown - fix ie8

Hola!

Para los que estén utilizando este plugin para espectaculares countdowns

http://keith-wood.name/countdown.html

El código que se bajan contiene una versión diferente a la que usan en el sitio. La versión que se bajan produce un error en Internet Explorer 8 (ie8).

http://keith-wood.name/js/jquery.plugin.js

El cambio es en la linea 38 particularmente:
return base[name].apply(this, args);

Cambiar por
return base[name].apply(this, args || []);

o

return base[name].apply(this, [args]);

domingo, 23 de junio de 2013

Utilizando as3HTTPClient para comunicar flash con un Web Service RESTFul

En este post volcaré la experiencia de utilizar as3HTTPClient en un juego creado con AS3 (FlashDevelop) para comunicar el juego con un Web Service RESTFul creado con Slim.

Básicamente el servicio web utiliza los métodos GET, POST y PUT, y voy a tener que utilizar SSL puesto que estará en Facebook además de autenticación... vamos por la api key...

El primer problema
Al insertar el primer código para utilizar el GET necesitaremos esta librería que nos resolverá  los algorítmos criptográficos https://code.google.com/p/as3crypto/ (al momento de escribir esto)
  • Protocols: TLS 1.0 support (partial)
  • Certificates: X.509 Certificate parsing and validation, built-in Root CAs.
  • Public Key Encryption: RSA (encrypt/decrypt, sign/verify)
  • Secret Key Encryption: AES, DES, 3DES, BlowFish, XTEA, RC4
  • Confidentiality Modes: ECB, CBC, CFB, CFB8, OFB, CTR
  • Hashing Algorithms: MD2, MD5, SHA-1, SHA-224, SHA-256
  • Paddings available: PKCS#5, PKCS#1 type 1 and 2
  • Other Useful Stuff: HMAC, Random, TLS-PRF, some ASN-1/DER parsing


Continúo...

Entonces, necesitamos comunicar AS3 con PHP, por lo cual lo métodos de encriptación y desencriptación de los datos deberían funcionar en los 2 lugares. Vamos a utilizar algo simple.

Encontramos esto: http://cambiatablog.wordpress.com/2010/08/24/simple-encryptdecrypt-in-as3-and-php-base64-blues/

y esto: http://flashcodetips.blogspot.com.ar/2011/07/low-level-string-encryption-using-php.html

Pero al utilizar una llave en los AS3 tenemos que también pensar... ¿Qué pasa si decompilan nuestro SWF?
Hay varias herramientas, de encriptación y de ofuscación para los SWF http://bruce-lab.blogspot.com.ar/2012/04/free-swf-encryptor-obfuscator-and.html.

Vamos por ésta que funciona muy bien y es gratuita: http://wonderfl.net/c/6WDD/
La explicación acá: http://makc3d.wordpress.com/2013/01/27/free-swf-obfuscator-update/

(Continuará...)
                   



martes, 11 de diciembre de 2012

Actualizar Esquemas de PostgreSQL

Te puede pasar de muchas formas, puntualmente me ocurrió luego de subir un backup solamente de las tablas. En el sitio empezaron a aparecer errores del tipo:


duplicate key violates unique constraint


Buscando y buscando hay varios scripts dando vueltas. Utilizo PSQL 8.4.
El que me funcionó fue el siguiente:

Para ver las secuencias desactualizadas guardá este código en un archivo:

SELECT
  'SELECT ' ||quote_literal(S.relname)|| ' as seq_name' ||
  ', (select last_value from ' ||S.relname|| ') as seq_val' ||
  ', (select MAX('||quote_ident(C.attname)|| ') FROM ' ||T.relname|| ') as max_id;'

FROM
  pg_class AS S
  ,pg_depend AS D
  ,pg_class AS T
  ,pg_attribute AS C
WHERE
  S.relkind = 'S'
  AND S.oid = D.objid
  AND D.refobjid = T.oid
  AND D.refobjid = C.attrelid
  AND D.refobjsubid = C.attnum
ORDER BY S.relname;

Y ejecutá:

psql -Atq -f mostrar_secuencias.sql -o tmp.sql && psql -Atq -f tmp.sql

teniendo en cuenta de ejecutarlo con el usuario dueño de la base de datos que querés modificar con -U y si ese usuario es dueño de varias bases -d

Te va a aparecer una lista como por ejemplo:
users_user_id_seq|3|5

Para corregir todas las secuencias guardá el siguiente código en algún archivo:

SELECT
  'SELECT SETVAL(' ||quote_literal(S.relname)||
  ', MAX(' ||quote_ident(C.attname)||
  ') ) FROM ' ||quote_ident(T.relname)|| ';'
FROM
  pg_class AS S
  ,pg_depend AS D
  ,pg_class AS T
  ,pg_attribute AS C
WHERE
  S.relkind = 'S'
  AND S.oid = D.objid
  AND D.refobjid = T.oid
  AND D.refobjid = C.attrelid
  AND D.refobjsubid = C.attnum
ORDER BY S.relname;

y ejecutá:

psql -Atq -f arreglar_secuencias.sql -o tmp.sql && psql -Atq -f tmp.sql
Muchas gracias a: http://asynk.ch/blog/