Archivo de la categoría: IT

IT, Information Technologies, Tecnologías de la Información

[2016 Aug] ImageCaching for CellForRow

La carga de una imagen suele ser lenta, y en general considero recomendable realizarlo de manera asíncrona. Así el proceso de cargar la imagen desde disco, interpretarla, redimensionarla se pueden realizar sin interferir en el hilo de atención a las acciones del usuario.

El mecanismo utilizado es una clase que tiene un diccionario (arreglo asociativo) en memoria e identifica a las imágenes con un key.

El nombre del key debe trabajarse de acuerdo a sí tendremos distintas dimensiones de imágenes en el mismo caché, o si deseamos poder controlar caching para otros elementos. Seguramente podemos utilizar también un library (ej. Haneke).

Aunque esta implementación es simple, sencilla y suficiente para muchos casos.

La fuente de este método es un artículo de Ray Wenderlich acerca de la utilización de Instruments. Y, pues, al verificar el consumo de tiempo de procesador, resalta el trabajo por hacer un Resize de las fotos. Esta tarea desaparece cuando se cuenta con las fotos ya redimensionadas en el caché.

https://www.raywenderlich.com/97886/instruments-tutorial-with-swift-getting-started

[2016 Aug] Core Data, migrations to App Group Container

Cuando necesitamos que dos Apps utilicen los mismos datos vamos a tener que darles la capacidad de compartir un mismo repositorio de datos.

Core Data puede manejar varias opciones, pero en general, podemos considerar que se trata de un archivo sqlLite

No solo es el caso en el que tengamos dos apps, que muy probablemente sean de la misma empresa, sino que un App Extension también puede ser considerada como un segundo App, en la perspectiva del acceso a datos.

Para esto vamos a necesitar crear un App Group y asignarlo, desde los properties del target del Extension y del App principal.

Luego nuestra configuración de core data, en AppDelegate y en el código del Extension deben utilizar otro enfoque, así

Luego es similar a cuando se trabaja con CoreDara por default

Algunas validaciones serán necesarias si ya estábamos trabajando inicialmente sin considerar el escenario de App Group Container, entonces habrá que validar la existencia del archivo sqlite.

Y si ya teníamos datos, debemos efectuar una migración

Esta migración no considera el orden de los registros. Y en general, el orden no se lo dejamos a la base de datos, sino a alguna columna con timestamp. Debemos incorporar esa especie de ORDER BY en nuestro query. Se trata de un sortDescriptor.

Executing action with Ajax in RoR, and modifying html without refreshing the page

In index.html.erb we produce a link that triggers an ajax action when clicked by means of :remote => true. In this example the entity or model is Day and the action is total.

Notice that we render day.id as id for the html element we want to manipulate. This is how we could identify and work with that specific element (any element in the identified row).

Let’s look at myentity_controller.erb. There we got the repond_to block and the condition format.js {}. This indicates that javascript will be sent as response and the correspondent code must be included in a js.erb view with the name of the action (e.g. myaction.js.erb).

In myaction.js.erb we can use JQuery to manipulate the dom and html elements with the powerful help of Rails bindings.

Visit more tips in our dev adventure Adagio Dev

Magento

Compartimos un poco acerca de Magento

Una plataforma Open Source para el comercio electrónico, para las tiendas online.

Existen soluciones de pago para armar tiendas en línea, incluso algunos servicios de hosting las ofrecen como parte de algunos de sus paquetes así como ofrecen tener con un click un sistema manejador de contenidos como WordPress, Drupal, Joomla, etc… y así muy rápido ya tener nuestros blogs, websites, etc.

Las plataformas de código abierto permite la personalización y en algunos casos su popularidad facilita el intercambio de experiencias en la implementación de casos particulares. Incluso se llegan a encontrar casos muy recurrentes como errores desde la instalación o verdaderos trucos que nos ayudan a tener un sitio web estable luego de que llegamos a encontrarnos en un verdadero callejón sin salida.

Drupal, por ejemplo, tiene una amplia comunidad. Con la evolución del núcleo y de los módulos, se requieren soluciones muy actualizadas, las cuales están disponibles. Para quienes van muy por delante se encuentran los ajustes aún en fase de prueba y también uno mismo puede corregir al menos parcialmente temas que no funcionan del todo bien. No nos asustemos, así es la web, no todo brilla y funciona de maravilla tras bambalinas.

Magento, tema de este artículo, es una buena solución para el e-commerce. Una opinión personal es que no suficientes técnicos, ingenieros ni entusiastas ingresan al mundo del commercio electrónico. Ello también suma a que el commercio electrónico esté algo atrasado. Magento, tiene el soporte de eBay, y es desarrollado principalmente por la empresa Varien. Cuando tengamos dudas o problemas, y busquemos soluciones, llegaremos a foros y blogs del año 2008. Con suerte, del año 2011. La comunidad, y lo compartido para el desarrollo con Magento debe ser menos del 10% de lo que podemos encontrar sobre Drupal.

Sin embargo, mi opinión es positiva. Magento incluye Órdenes de Compra, Facturas, Registro de Clientes, Soporte para Múltiples Tiendas y Versiones de Tiendas (StoreViews), Soporte Multi-idioma, Pasarelas de Pago, Emails transaccionales. Sin duda es una excelente solución cuando se trata de tienda de artículos. Los plugins o extensiones no son tantas como en WordPress o Drupal. Si algo no funciona bien tendremos que tener suerte en poder arreglarlo o que el soporte técnico adquirido lo haga por nosotros.

Como todas las plataformas, si evaluamos varias plataformas para lo que querramos tener, Magento puede ser lo que requerimos, tal vez integrado con algunas extensiones y de la mano de un CMS como WordPress o Drupal, Drupal mejor 😄

Sitios web en Inglés y Español

En este artículo vamos a compartir algunas observaciones acerca de sitios web multilenguaje, conocido también como Internacionalización.

En los sitios web cuando se desea manejar varios idiomas, o al menos dos, se debe considerar que:

  • Los contenidos puedan ser ingresados en los idiomas requeridos.
  • La interfaz (botones, títulos, alertas, encabezados) permita ser personalizada para cada caso de acuerdo al idioma.

Hay distintas estrategias e implementaciones para el multi-idioma.

Para el caso de las interfaces, los distintos lenguajes de programación suelen emplear un mecanismo de reemplazado de texto. Por lo cual se debe considerar un idioma por default o principal. Esto también ayudará a que siempre se muestre algún texto, incluso cuando el proceso de traducción no esté al 100%.

Para el caso de los contenidos, que se van creando con frecuencia y que también requieren ser editados, la opción es tener por separado la versión en Inglés y en Español, por ejemplo. Los contenidos se segmentan en título, contenido principal, texto introductorio, imagen principal, galería de imágenes, etiquetas, categoría, etc. Esta estructuración permite que reutilicemos imágenes que podrían ser las mismas para todos los idiomas, o que los nombres de las categorías sean traducidas desde la administración de las mismas y no desde la edición de los contenidos.

También debemos considerar que la administración del sitio web, conocido como backend, también puede tener la opción de visualizarse en un idioma u otro. Esto puede o no ayudar a que de acuerdo al idioma en que administramos un sitio estemos ingresando el contenido para ese idioma. Algunos sistemas son muy flexibles para el manejo de múltiples idiomas y emplean los valores por default de manera ligera, en otros sistemas cambiar de idioma a otro no es tan rápido en la administración sino que cargan muchos campos y valores para editar, en muchos casos al cambiar a un idioma puede que tengamos que volver a ingresar todos los datos.

Como vemos, desde el lado de la administración no es un tema sencillo manejar múltiples idiomas. Les comento que por ejemplo en Drupal, hasta la versión 7 son al menos dos formas de hacerlo y módulos de terceros suelen funcionar bien con uno u otro, pero no con ambos. Esta es una complicación.

A pesar de las dificultades, para algunos rubros es vital, por ejemplo en turismo. Ya que los visitantes, clientes finales, o intermediarios, suelen manejar otro idioma y esperan que la web esté al menos en inglés. En el caso de los nuevos negocios, si pueden cobrar a nivel mundial se debe considerar como pérdida de oportunidad el no tenerlo en los idiomas que incluyen al público objetivo.

Idea suelta. Un truco es manejar idiomas para lograr segmentación en la comunicación. Digamos que podríamos mostrar una tienda sobria y otra con lenguaje con mucha carga emocional, un lenguaje con mucha energía. A pesar de que es en el mismo idioma, se pueden considerar estas variaciones, o los ya conocidos giros lingüísticos de cada país.

Aviso. Entre los detalles que se deben tener en cuenta, está que el diseño de un sitio web se realiza en un idioma, y puede que los títulos o contenidos requieran mayor espacio al ser traducidos.