martes, marzo 13, 2012

jQuery Mobile borrar item en listview usando swipe

En este momento estoy usando jQuery Mobile para desarrollar algunas interfaces para unas aplicaciones móviles. Gracias a PhoneGap puedo compilarlas para Android y pasan de ser un desarrollo 100% a una desarrollo que sigue siendo web, pero tiene olor a aplicación.

Dentro de la interfaz me enfrenté al problema que lo limitado del espacio en pantalla no me permite incluir demasiados botones, y requería de una manera para eliminar ítemes de una lista en modo inset. Quise copiar un poco la interfaz de webOS (de la difunta Palm)  para esto, una interfaz muy similar a la que provee iOS en el iPhone.


La idea:

  • Deslizar el dedo desde izquierda a derecha para eliminar un ítem.
  • Deben aparecer botones que permitan borrar el ítem o cancelar la operación de borrado.
  • Al seleccionar borrar se debe confirmar la eliminación antes de hacerla efectiva.


El código y el ejemplo:

Observaciones:
La variable onswipe marca como activa la acción de eliminación. Si se está eliminando un item, no se podrán eliminar otro.
Una vez que se hacen aparecer los botones para la eliminación es necesario desactivar los eventos tap y click sobre el ítem de la lista, sino va a tomar la acción por defecto y los botones no van a poder capturar el evento de click sobre ellos.
Se ha utilizado la etiqueta "button" en vez de "a" (para enlaces) para evitar que el framework aplique los estilos de lista (en este caso lista tipo inset).

Está probado en Android y en iOS y funciona. Seguramente alguien lo va a poder mejorar.
El código toma bastantes referencias de lo discutido en https://forum.jquery.com/topic/adding-an-iphone-style-swipe-to-delete-button-to-a-listview . Lamentablemente el código original no me funcionó.

martes, febrero 07, 2012

Uso de bicicletas, ni licencias ni patentes son la solución


Señor director: 
Respecto a la carta de don Luis Villagra, sobre el uso de bicicletas, las infracciones en que incurren los ciclistas, y a su pregunta ¿Cómo es posible que una persona se monte en una bicicleta y salga a la calle sin tener la menor idea de las normas y la ley del tránsito?
Respondo: De la misma manera que hay automovilistas que por su manera de conducir se cuestiona su conocimiento sobre la Ley de Tránsito. Está demostrado que la licencia no es indicador de competencia que los valide para circular en las calles, quizás si lo sería complementar con un test psicológico.
 
El problema radica en que carecemos totalmente de cultura vial. No existe concepción de sana convivencia entre peatones, ciclistas y automovilistas, siendo que por fuerza debemos compartir las mal diseñadas vías de la ciudad. Los casi nulos intentos para que deje de primar la ley del más fuerte, o aquellos para la integración entre las partes con la incorporación de ciclovías de juguete, u originalidades como el bicicletero móvil, no son suficientes para promover el desarrollo de cultura vial. 
Las calles SI PUEDEN COMPARTIRSE entre vehículos motorizados y bicicletas, y las veredas SI PUEDEN COMPARTIRSE entre peatones y ciclistas, el secreto está en que ninguno se crea el dueño y señor de estos espacios, los países desarrollados así lo han demostrado. 
José Ignacio Santa Cruz
Peatón y ciclista

Enviada al diario La Tercera en respuesta a la  carta de don Luis Villagra. Veamos si la publican.

Actualización: 
Y salió publicada mi carta, aunque me vuelve a quedar claro que el comité editorial puede editar las cartas según su propio criterio:
http://diario.latercera.com/2012/02/15/01/contenido/opinion/11-100662-9-uso-de-bicicletas.shtml Vean las sutiles diferencias.
Y si quieren seguir el tema desde la carta original:

martes, enero 10, 2012

STPivot: JPivot con esteroides vs Open Source

Errata: En el artículo enfatizo en el tema distribución pagada. Revisando en más detalle la licencia GPL (v3 que es la actual)  se refieren precisamente al tema:
"If I distribute GPL'd software for a fee, am I required to also make it available to the public without a charge? (#DoesTheGPLRequireAvailabilityToPublic)
No. However, if someone pays your fee and gets a copy, the GPL gives them the freedom to release it to the public, with or without a fee. For example, someone could pay your fee, and then put her copy on a web site for the general public."
Resumiendo, puedes cobrar por la distribución de tu software, que es lo que sucede en este caso. También se refieren a que si compras el software, puedes publicarlo libremente sin "represalias" por parte de los creadores.

Hace un tiempo atrás me enteré de STPivot, un proyecto muy interesante que buscaba ser una alternativa bastante más novedosa al JPivot que viene por defecto en la edición Community de Pentaho.



Dado que es un proyecto que estaba siguiendo, me interesé y fui al sitio de Google Code para ver desde donde podía descargar la nueva versión y probarla.

Sorpresas:
  1. STPivot tiene nuevo sitio, y se ve muy prometedor.
  2. El enlace download me lleva a una ÚNICA opción de pago en Paypal. Por la módica suma de 95 euros puedo obtener el código fuente (aún publicitado como "Open Source" bajo licencia GPL v3), documentación y ejemplos.

Noten ciertas observaciones que puse en rojo:

  • Licencia  GPL v3
  • Nueva versión, ie no se trata de un producto distinto.

Al principio pensé que podía optar a una opción de descarga "recortada", sin documentación, ni ejemplos, pero no, es un todo o nada.   Google Code  sigue con la versión del 2010 en el SVN del STPivot.


  • Contribuciones de pago mínimo de 95 euros. No digo que no sea válido, ya verán cuál es el motivo de mi molestia.
  • Enlace a Paypal. Único medio para obtener el pack completo.
Haciendo mis tareas, revisé las "sutilezas" de la licencia GPL v3:


Resumiendo:
SI EXIGES un pago entonces tu software NO ES Open Source. 
Fácil y bonito, no hay que tener más de 2 dedos de frente para entenderlo.

Errata: La cita al GPLv3 se refiere puntualmente a pagos a posteriori, ie recibes el software y después te cobran por ello (imagino que algo así como "Me enteré que Ud. está usando mi software. Por favor págueme ene cientos USD.")

No me molestaría hacer una donación por este software. Tampoco me molestaría pagar por la documentación, tutoriales, manuales, ejemplos o capacitación (lo que parece bastante razonable).
SI me molesta que; independiente del destino de los fondos, lo loable de la causa, el costo de haber desarrollado el software; te quieran meter el dedo en el ojo de esta manera, disfrazando de Open Source algo que derechamente no lo es.
Este STPivot es otro producto, con otra licencia; y debiera incluso llevar otro nombre. No es una actualización al STPivot cuyo código está en el SVN de Google Code.

En el peor de los casos hagan lo que hace OpenBravo, entreguen una suite completa, con todo el código fuente sin documentar, con pocos y crípticos manuales o instrucciones online, y vendan todo el resto. Una estrategia que parece funcionar cuando decoras tu nombre con "Open" algo. Pero no le falten el respeto al Open Source, la gente puede no conocer, pero no son tontos.

miércoles, diciembre 21, 2011

Crónica de una muerte anunciada: Cierre de cuenta bancaria

Por innumerables motivos, con el pasar de los años me hice acreedor de varias cuentas bancarias, en distintas instituciones. Muchas de ellas me cobraban más por tener menos productos (irónico considerando que lo normal es lo contrario), otras me cobraban más todos los meses, otras buscaban como fidelizarme ofreciéndome "beneficios" por ser un "cliente especial", ¿desde cuando los beneficios implican un cobro mensual?

Con el Banco BCI no fue la excepción, siendo supuestamente una banca digamos "premium" o "exclusiva", la atención siempre fue regular a mala. Vez que trataba de contactar vía correo electrónico a mi ejecutivo o ejecutiva de turno, debía rezar para que me contestarán de vuelta. No respondieron ninguna de mis consultas, como si me fuera a enojar si me decían que no podían aprobar el crédito de consumo para comprar la Ducati, no cuesta nada tener contentos a tus clientes, o en el peor de los casos conformes con la sensación de "al menos contestaron".

La primera vez que pensé en cerrar la cuenta del Banco BCI fue cuando infructuosamente intenté contactar a mi ejecutivo para solicitar un aumento de cupo en la tarjeta de crédito. Más de 2 años como cliente, y un depósito mensual no menor. No se hizo NINGUNA gestión al respecto.

Cuando me robaron los documentos, incluidas las tarjetas del  Banco BCI  fue otra batalla. Las tarjetas fueron mal utilizadas, y aún existiendo la denuncia de robo, y el bloqueo de las tarjetas, el  Banco BCI  sólo convino a restituirme un pequeño porcentaje del monto que utilizaron los malhechores. Es lógico, uno de los productos es un seguro precisamente contra el robo de las tarjetas, y si mal no recuerdo la superintendencia se pronuncia al respecto de como deben responder los bancos frente a situaciones similares.
En esa oportunidad el Banco BCI me estaba dando más problemas que soluciones, y pensé nuevamente en cerrar la cuenta.

"Somos diferentes" es la frase comercial y vendedora del Banco BCI, claramente diferentes. Su sitio web vs el de otros bancos no te permite realizar más de 2 transacciones sin caerse en el camino.
La única vez que logré una respuesta, que me dejó tranquilo pero no conforme, fue cuando hice tanto ruido a través de las redes sociales debido a los constantes problemas que tenía con el sitio web del banco, que la misma encargada del Twitter y Facebook del  Banco BCI  me contactó telefónicamente. Irónicamente al mes después los problemas persistieron, pero a esas alturas y dada la prefabricada respuesta de "Limpie el caché y las cookies de su navegador web e ingrese nuevamente al sitio del banco" la resignación a que no funcionara era parte de lo esperado.

Por una cosa de sentido práctico hice unos intentos de quedarme en el Banco BCI, tenía sucursales muy cercanas a mis lugares de trabajo. Ilusamente les consulté para tomar un hipotecario con ellos. está bien que quieran resguardarse como banco, de hecho el hipotecario de cualquier banco te somete a todas las penas del infierno si te llegas a atrasar. El Banco BCI te pide una cantidad casi absurda de antecedentes, dan lo mismo tu antigüedad como cliente, o tu comportamiento de pago, o el nivel de depósitos que hayas hecho, o incluso tu nivel de renta. El Banco BCI requiere que el postulante al hipotecario acredite patrimonio casi equivalente a la propiedad que se pretende comprar (al menos eso me dieron a entender), y las tasas tampoco son las más convenientes. ¿Fidelización de clientes? ¡Las pelotas!

El mediocre funcionamiento del sitio web, sumado a la NULA respuesta de mi ejecutiva frente a mis consultas, y sumado a los costos de mantener la cuenta en el Banco BCI, que son bastante altos comparativamente hablando, fueron las gotas que rebalsaron el vaso. Da lo mismo si un cliente "no es rentable" para el Banco, o el calificativo que le quieran poner al cliente, es mejor decírselo antes de dejarlo sin NINGUNA RESPUESTA, ¿marketing? ¿alguien?
Se suma además una muy atractiva oferta de otro Banco, muy famoso por su agresiva (y evidentemente efectiva) estrategia de captación de clientes "Te ofrecemos el Cielo, la Luna y Júpiter, pero si no nos pagas te torturaremos en vida y te haremos ver el final de 'Los 80' 100 veces seguidas". No será precisamente el mejor de los Bancos (de hecho el movimiento que le doy a la cuenta está fríamente calculado), pero cumple y responden los correos.

Así que terminé cerrando mi cuenta. Recién cuando hice las gestiones; donde nuevamente mi ejecutiva hizo NADA por intentar retenerme, claramente no es su trabajo, pero un mínimo esfuerzo por su cartera; me llamó una "ejecutiva de retención" ofreciéndome "costo cero" por la mantención de la cuenta. El "costo cero" ,  por muy tentador que parezca, NO SIRVE PARA NADA, es la muestra gratis, el vale por hamburguesa, el "para que te quedes callado un rato". El "costo cero" no es garantía que el servicio deficiente va a mejorar. Incluso al momento de cerrar definitivamente la cuenta hubo problemas, ya que estaba esperando a que se resolviera un depósito final antes de cerrarla, pero eso ya "complicaba la operación", era casi para tirarles la cuenta por la cabeza. Cerré la cuenta y resolví el pendiente por fuera.
Y solamente por una mínima consideración a mi ejecutiva (que poco hizo), que una única vez se comunicó conmigo para consultar un cheque, alegué que mis razones para cerrar la cuenta eran única  y exclusivamente por un tema de costos.

Eximo de culpa a la encargada de las redes sociales del Banco BCI, ella no tiene ninguna culpa que la institución para la  cual trabaja sea "diferente", ni de tener que dar aspirinas pre-escritas como respuesta (un Banco JAMÁS va a admitir públicamente que tiene un problema en sus sistemas informáticos, las cabezas ruedan igual, pero bajo cuerdas).

Así que OJO con el Banco BCI, es un banco CARO, sumamente elitista, extremadamente impersonal (cosa que esperaría del TBanc, pero no del Banco BCI), y cerrado a mejorar. Ellos dicen "Somos diferentes".

lunes, diciembre 05, 2011

Combobox con Autocomplete & jQuery

Parte de las barbaridades que hago a diario requieren ciertas consultas HTTP recurrentes. Para poder atenderlas hice un formulario energizado por jQuery. Funciona, pero muchas veces tenía que referirme a datos estáticos y para no tener que llenarlos a cada rato los puse en un combobox.

El problema es que el combobox empezó a crecer y se empezó a volver tedioso encontrar el dato correcto en la cada vez más larga lista de registros.
La solución fue hacer que el combobox fuera editable y que desplegara los registros que respondían a una búsqueda parcial, tal como el ejemplo de jQuery UI para el componente autocomplete. Sin embargo el ejemplo provisto para los comboxes (select boxes) no me gustó. Demasiado complejo para algo "tan simple".

Mi solución (actualizada):

Dejé todo el código para que lo puedan ver y probar en http://jsfiddle.net/jsanta/CBjVz/3/

En mi opinión este código es mucho más fácil, más entendible y más ajustable que el del ejemplo original.
TO DO (pendiente) convertir esto a un plugin.

jueves, noviembre 17, 2011

Gnome-Shell, LXDE, Compiz y los atajos de mouse

Mi computador normalmente está en modo experimental, y este períoo no ha sido la excepción. Estuve usando un Ubuntu Daily con Gnome-Shell un tiempo. Me dejé seducir por la promesa de funcionalidad sobre lo regular, y ¡FUNCIONÓ! Gnome-Shell merece ser instalado y utilizado, pero sin "ajustarlo". Como buen Giro-sin-tornillos instalé cuanto plugin encontré y Gnome-Shell se suicidó sin vuelta.
Solución radical, cambiarme a LXDE, un entorno liviano, sencillo, sin fuegos artificiales. Pero "necesitaba" ciertas cosas, como cambiar de escritorio con el toque de uno de los 7 botones de mi mouse, o el selector global de ventanas al poner el mouse en una esquina de la pantalla, son cosas que no transo. Así que instalé Compiz.

Para mi sorpresa, la configuración "habitual" que me resultaba más familiar, no funcionó. El cambio de escritorios utilizando el plugin  Desktop Wall tiene un error no resuelto. Los atajos de mouse no funcionan, y tampoco funcionan los atajos de teclado para Next y Prev (usados para desplazarse a los escritorios siguiente y anterior). Por eso olvídense de tener un muro de 2x2 (a lo Mac), a menos que sobrevivan con Ctrl+Alt+Izq/Der/Arriba/Abajo , lo que según yo es soportable pero a la larga intolerable.

Si bien recomiendan volver a una versión anterior de Compiz, el proceso es  más complicado que instalar un adicional y configurarlo.

La solución es instalar la herramienta xdotool para simular instrucciones de teclado (algo así como macros por decirlo de alguna manera):
sudo apt-get install xdotool

Y después configurar el plugin de Comandos, asignando como comandos:
  1. Command 0: xdotool key ctrl+alt+Left
  2. Command 1: xdotool key ctrl+alt+Right
Noten las mayúsculas, son importantes ya que o si no no reconoce el comando (si no me creen pruébenlo en un terminal).

Y luego configurar los correspondientes atajos de mouse para cada comando:
  1. Run command 0: Button8
  2. Run command 0: Button9
Y listo. FUNCIONA. Claro que  por sanidad mental en la configuración general indiqué tener un espacio de trabajo de 4 escritorios, dispuestos en una fila (matriz de 1x4). Además marqué la opción de Allow Wrap Around en la pestaña Viewport Switching del plugin Desktop Wall.

Basado en: http://askubuntu.com/questions/41058/how-can-i-enable-bindings-in-desktop-wall

A mi me gusta, y con esto seré feliz hasta que no me cautive XFCE.

Si van a jugar con LXDE, les recomiendo no instalar el Cairo Composite Manager (ni siquiera les pondré el enlace para que no se tienten), es insufríblemente lento.

miércoles, noviembre 16, 2011

Comandos *nix para archivos de texto

Hace poco me enfrenté al siguiente problema, una aplicación desarrollada para una importante empresa internacional de confites realiza una descarga de información desde una base de datos. Ya que el desarrollo fue ad-hok, los archivos de descarga inicial de datos quedaban con líneas en blanco cada ciertos intervalos. Esto se generaba ya que estos archivos son resultado de una concatenación de consultas parciales más pequeñas.
Ya que los colegas manifestaron una ineptitud imposibilidad informática (ni les explico mi cara, mi respuesta, y mi indignación al respecto) para eliminar las líneas en blanco, el problema debí resolverlo yo.

Esto es plataforma Ms Windows, utilizando las GNU Utils, que son herramientas de línea de comandos para *nix (Unix y Linux, en sus diversos sabores).
Cualquiera de estos enlaces les sirve:


Cuento corto, terminé haciendo una llamada a un .bat con el comando sed:
@echo Limpiando archivosed.exe "/^$/d" %1 > %1.delete@exit 1 

De aquí vamos a desprender algunos comandos relevantes:

  • sed.exe "/^$/d" archivo > archivo2sirve para eliminar las líneas en blanco del archivo. Los que tengan algún tipo de familiaridad con vi (el editor de textos para hombres en *nix), o con expresiones regulares, reconocerán el patrón:
    • ^$cadena que empieza y termina inmediatamente (^ empieza, $ termina), sin nada entremedio. Esto es una línea vacía (sólo por si no lo hubieran notado)
    • /ddelete, ie borrar, es decir borra la línea (¡BRILLANTE! no se cómo no me han llevado los rusos)
    • archivo > archivo2 : le indica al comando que opere sobre archivo y redirija los resultados a archivo2. Si archivo2 existiera previamente, este será sobreescrito.
  • wc -l archivo : Cuenta el total de líneas de un archivo de texto
  • grep -c "^$" archivo : cuenta las líneas vacías que hay dentro del archivo.
Y cualquier duda al respecto pueden revisar los manuales de cada comando (con man comando (nótese man de manual)), o la ayuda correspondiente con comando --help ó comando -h . Incluso hay veces que ejecutar el comando sin parámetros da un pincelazo de como se usa cada instrucción.