Noticias Weblogs Código

Arragonán

Semana 377

September 01, 2015 11:32 PM

Última semana del mes de Agosto, y aunque fuera un mes complicado para estas cosas no quisimos dejar pasarlo sin una edición de Zaragoza Ruby el último jueves del mes.

Al ser verano Pedro ha venido proponiendo sesiones de katas al estilo randori como alternativa a las habituales charlas. En esta ocasión fue Compras en el Mall, una kata alrededor de la que surgió bastante debate y resultó divertido.

A parte de esto no pudo dar mucho más de sí la semana además de los proyectos en los que vengo trabajando, que ando con bastante lío. Estuve haciendo un puñado de pequeñas cosas y algunas no tan pequeñas:

  • Mejoré la importación de salas/lugares en Mosica, a raíz detectar que tenía duplicidades que no tenían mucho sentido (con vistas de que algún día le dedicaré tiempo a las páginas de salas).
  • Con Maubic principalmente continué con mi trabajo en el backend con node/loopback implementando algunas funcionalidades y cambios en los microservicios existentes. Además continué definiendo y documentando los detalles de sus APIs para la gente de frontend y que quede constancia de ello en el futuro.
  • Dejé mhop funcionando con stripe, que era el proyecto que aún tenía coleando el hacer el cambio de pasarela de pago.
  • Estuve haciendo algún pequeño cambio en la nueva Bichomanía e hicimos paso a fase beta.
  • En Alchups implementé la importación de rutas desde KML para mostrar rutas en google maps vía su API, hice algún pequeño refactor para dejar el código un poco más majo y continué con temas de coordinación.

Buena semana.

» Leer más, comentarios, etc...

xailer.info

Xailer Enterprise a mitad de precio por tiempo limitado

September 01, 2015 02:59 PM

Estimados usuarios de Xbase,

Tenemos el placer de anunciaros una importante oferta que es difícil que se vuelva a repetir. Que consiste en una reducción de casi el 50% en el precio de Xailer Enterprise durante todo el mes de septiembre de 2015. Para poder acceder a esta oferta tan sólo es necesario cumplir alguno de los siguientes requisitos:

  1. Haber comprado con anterioridad cualquier versión de Xailer, para lo cual habrá que facilitar su número de serie o factura de compra.
  2. Ser usuario registrado de cualquiera de los siguientes productos xBase:
  • Visual FoxPro
  • Alaska Xbase++
  • Cualquier versión de xHarbour de xHarbour.com
  • Cualquier versión de Fivewin de Fivetech software

Para lo cual se le requerirá por correo electrónico que nos envíe comprobante de su compra.

Esta gran oferta pretende hacer accesible Xailer a todos aquellos usuarios que después de más de diez años que llevamos desarrollándolo aún no han querido o podido dar el salto. Esperamos que con este incentivo podamos contar con alguno de ellos en un futuro próximo.

Es posible que más de un incondicional de Xailer que lleva con nosotros muchos años se sienta molesto por esta oferta, pero os rogamos que entendáis que esta oferta sólo intenta consolidar el futuro de Xailer y que por lo tanto es buena para toda nuestra comunidad.

A todos los que aún no conocéis Xailer os animo a que preguntéis en nuestros foros de soporte técnico sobre sus beneficios y funcionalidades con respecto a otros productos xBase. Espero que muchos de los actuales usuarios de Xailer os puedan contar sus experiencias y opinión respecto a Xailer.

Podéis acceder directamente a la orden de pedido desde el siguiente enlace:

Pedido de Xailer Enterprise (oferta competitiva)

Por último y no menos importante: queremos agradecer la labor realizada por todos los miembros que han colaborado activamente con el equipo de desarrollo de Harbour. Todos ellos, pueden contar, si lo desean, con una versión completamente gratuita de Xailer Enterprise. Para ello sólo deben enviarnos un Email a ventas@xailer.com con el asunto ‘Regalo Xailer‘ indicando su nombre, dirección de correo electrónico y alias de contribución en GitHub o SourceForge. La cuenta de Email deberá coincidir con el que se muestre en GitHub o SourceForge.

Un cordial saludo

[El equipo de Xailer]

» Leer más, comentarios, etc...

Koalite

A contracorriente

August 31, 2015 05:06 AM

Hace unos meses Microsoft anunció que Windows 10 soportaría aplicaciones de Android e iOS y recientemente ha publicado el código de uno de los bridges (que es cómo se llama el invento), concretamente el de iOS.

Esto de dar soporte para las APIs de un sistema operativo en otro no es algo tan extraño, es algo que lleva haciendo (¿intentando?) wine desde hace mucho tiempo en linux, pero que Microsoft dé el paso es representativo del escenario actual.

Todo esto de tener que buscarte la vida para poder ejecutar aplicaciones que otros sistemas operativos tienen y el tuyo no, me ha hecho recordar algo y es que, hace mucho…

Yo fui linuxero

Sí, lo reconozco. Todos tenemos un pasado y, a principios de los 2000, durante cosa de 5 años, fui linuxero. Y no un linuxero cualquiera, no. Un linuxero de los malos, pesado y tenaz como un runner vegano que siempre intenta convencerte de lo bueno que es ser como él.

Nunca llegué a ser ningún experto en linux (nada más lejos de la realidad), pero sí aprendí a manejarme con soltura en ese entorno, compilando cosas cuando era necesario y cogiéndole cierto cariño (que a día de hoy aún dura) a la línea de comandos. Llegó un momento en que me sentía muy cómodo en linux, e incluso su escritorio (yo usaba KDE) me resultaba mucho más práctico y usable que Windows.

Pero también llegó un día que me harté.

Me harté de que la web de mi banco funcionase en Internet Explorer y no en Konqueror. De tener que sudar un par de tardes para configurar mi módem ADSL por USB. De que para hacer la declaración de la renta tuviera que conectarme por Citrix a un servidor de hacienda porque el programa PADRE no tenía versión para linux. De tener que buscar alternativas a las aplicaciones que usaban todos mis amigos (desde el MSN Messenger hasta el eMule) que, sí, funcionaban, pero nunca tan bien ni con todas las opciones que tenían las versiones oficiales. De acabar usando wine para intentar medio ejecutar algunas aplicaciones de Windows.

Y como me harté, me rendí. Cuando llegó el momento de comprar el siguiente portátil, no tuve ganas de pasarme varios días buscando uno que tuviera todo el hardware compatible con linux, así que decidí dejarle Windows puesto, que ya más adelante le instalaría linux.

Pero ya no tenía ganas de tener que andar buscando aplicaciones alternativas, pegándome con el hardware o enviando emails a mi banco quejándome porque su web no funcionaba en un navegador con el 0,3% de cuota de mercado (el día a día de los usuarios de Windows Phone).

En mi caso, preferí dejar de nadar contracorriente, dejarme llevar, usar Windows, y dedicar mi tiempo a otros menesteres.

Nota para talibanes linuxeros: Antes de enfadaros en nombre de linux, del software libre, de Richard Stallman y hablarme sobre libertad y cosas así, recordad que ésta es mi experiencia personal usando linux hace 10 años. No estoy muy al tanto de la situación actual, pero estoy seguro de que, aunque haya mejorado bastante, sigue siendo un sistema operativo minoritario a la hora de decidir invertir en dar soporte para él en aplicaciones y hardware “de consumo”.

Y ahora desarrollo en Windows

Hoy en día me siento cómodo con Windows. Es verdad que, como usuario “normal”, paso el 90% del tiempo en un browser y me daría igual usar un sistema operativo u otro, pero me resulta cómodo Windows, estoy familiarizado con él, es razonablemente estable y seguro y, cuando quiero hacer algo más, como por ejemplo jugar un rato, no tengo que preocuparme de si el juego estará disponible o no.

Excepto cosas extrañas para hipsters, rara es la aplicación que no está disponible para Windows antes que para linux o OSX: el escritorio sigue siendo “Windows First”.

Mientras siga desarrollando sobre .NET, Windows me ofrece las mejores herramientas para ello: Visual Studio y ReSharper. Además Office sigue siendo la mejor opción para conectarme a Exchange y me resulta cómodo para hacer esa presentación que me toca de vez en cuando o preparar el Excel de turno para analizar algunos datos.

Lo malo de Windows como plataforma de desarrollo es cuando sales del mundo Microsoft. En cuanto sales de Visual Studio y lo que le rodea, parece que más que “Windows First”, el mundo del desarrollo es más bien “Windows Last” y a veces hay que dar demasiadas vueltas para que todo funcione.

Javascript, el lenguaje de moda. Llevo varios años desarrollando bastante en Javascript usando herramientas basadas en node.js sobre Windows, y seguro que al igual que muchos de vosotros me ha tocado pegarme con los problemas de las rutas excesivamente largas.

En realidad ni siquiera es un problema de Windows, que puede soportar rutas mucho más largas, sino de ciertas aplicaciones (el caso más sangrante es el del propio Explorer), pero es una vuelta a mis tiempos de linuxero: la culpa es de otros que no hacen las cosas bien, pero el que paga los platos rotos soy yo. Por cierto, no os preocupéis, que parece que solucionan el problema en npm 3, nada más y nada menos que 6 años después de la primera versión de node.js.

Si quieres trabajar con Ruby o Python, efectivamente, hay instaladores e incluso puedes usar Chocolatey, pero la instalación es… rara. No siguen las convenciones de Windows, crean sus propias carpetas con una estructura estilo linux y sí, funcionan, pero en cuanto quieres hacer algo un poco más complicado, como instalar rvm acabas necesitando cygwin o algún “emulador de linux”.

Las herramientas multiplataforma, por ejemplo emacs, muchas veces funcionan peor en Windows porque sus usuarios son usuarios de linux (bueno, en este caso de GNU/linux, que no se enfade el señor Stallman) y se apoyan en la existencia de herramientas típicas de linux como find o grep, lo que hace que la experiencia en Windows no sea la mejor.

En general, todas estas cosas se pueden acabar salvando y, con un poco de paciencia, puedes desarrollar en Windows para casi cualquier lenguaje y plataforma, especialmente cuando Microsoft decide que así sea e integra las herramientas en su (cada vez más) mastodóntico Visual Studio.

Lo malo es que al final cansa y la gente se va a aburriendo de dar vueltas para hacer lo que en otros sistemas operativos es algo directo. Windows seguirá siendo una plataforma predominante para los que trabajen con tecnologías Microsoft y para los desarrolladores “empresariales”, pero cada vez veo más desarrolladores usando otros sistemas operativos como sistema operativo principal.

Como ejemplo puramente anecdótico, si no recuerdo mal ni una sola de las charlas a las que asistí el año pasado en el codemotion se dio utilizando un equipo con Windows. Ni las de C++, ni las de Scala, ni las de Ruby, ni las de Python, ni siquiera la de Java. Hubo linux y Mac OSX a partes iguales.

Está claro que los ponentes del codemotion no son representativos del desarrollador medio sobre Windows, pero incluso entre estos conozco a más de uno que empieza a flirtear con linux o, sobre todo, MacOSX.

Además, no olvidemos que estos “alpha geeks” que usan a diario plataformas distintas de Windows son los que acaban desarrollando los proyectos open source que luego queremos usar en Windows, y si ellos no usan Windows, es normal que no se preocupen mucho por cómo será la experiencia de uso en Windows.

Nota para los fanboys de Microsoft: No os preocupéis que Windows no se va a ir a ninguna parte a corto plazo, no estoy diciendo eso. Podréis seguir defendido a la empresa que más os guste durante, por lo menos, unos cuantos años más. Sólo digo que para los que no viven dentro de Visual Studio, Windows se ha convertido en una plataforma de segundo nivel para el desarrollo.

La vida da muchas vueltas

Cuando llevas cierto tiempo en el mundo de la tecnología es bueno volver al vista atrás y ver cómo cambian las cosas. Ayuda a relativizar la importancia que le damos a las plataformas y las tecnologías que usamos actualmente y ser más conscientes de lo importante que es dominar los conceptos básicos que nos permitan independizarnos de la tecnología/plataforma/fabricante concreto con el que estemos trabajando, porque nunca sabes cuándo dejará de ser tan preponderante como es ahora.

No hay posts relacionados.

» Leer más, comentarios, etc...

Una sinfonía en C#

Links útiles para desarrollar en Windows 10

August 29, 2015 04:47 PM

Les comparto un conjunto de links a recursos para desarrollar en Windows 10

image

Las herramientas

Desde acá se pueden descargar las herramientas de desarrollo incluídas las versiones gratuítas

Qué hay de nuevo?

En éste link encontramos qué podemos hacer con Windows 10, Universal app, Juegos.

Empezar a desarrollar

Éste link tiene recursos para empezar, qué usar, qué se puede hacer y más.

Diseñar Universal App

Si queremos aprender sobre lineamientos para que nuestra aplicación se vea bien en todas las plataformas éste es el link.

Cómo hago para?

Un listado de artículos y referencias para aprender a usar la API de Universal Apps.

Y cómo publico las aplicaciones?

Una vez que tengamos nuestra app lista para público podemos aprender a publicar desde este link.

Y los IT pro?

También hay recursos para la gente de IT en éste link.

Videos, Channel 9

El recurso principal si nos interesan los webcast y video tutoriales sobre todo lo relacionado con Windows muy recomendable.

Nos leemos.

» Leer más, comentarios, etc...

Una sinfonía en C#

Novedades de C#6: inicializar propiedaes

August 29, 2015 02:22 AM

Esta versión de C# tiene muchas nuevas características muy interesantes, acá va la primera.

Ejemplo

Ahora podemos asignar un valor a una propiedad sin necesidad de declarar el backing field, o sea, en lugar de hacer esto:

private string name = "pedro";
public string Name
{
    get
    {
        return name;
    }
    set
    {
        name = value;
    }
}

Ahora podemos hacer esto

public string Name { get; set; } = "pedro";

Nos leemos.

» Leer más, comentarios, etc...

Arragonán

Semanas 375 y 376

August 27, 2015 09:06 AM

De nuevo se me acumulan semanas sin retro, que entre unas cosas y otras he ido dejando el escribirla. Parte de la “culpa” fue el estar un par de días de vacaciones, que últimamente los días de antes y de después de tomarme unos días libres van coincidiendo con fechas cercanas de entregas/demos/… En fin, que en ese sentido me lo monto fatal, debería conseguir tener un ritmo más sostenible.

Aunque en este par de semanas también vengo sacando ratos para leer bastantes posts y verme un buen puñado de videos. De temática variada: testing, novedades, diseño de software

Y en cuanto a proyectos y colaboraciones en curso:

  • De nuevo mucha dedicación con Maubic. Empecé a mirar un poco ExtJS, que es con lo que se está trabajando el frontend, con la idea de empezar a ayudar en cómo hacer el testing, pero al tener otras prioridades lo dejamos un poco aparcado. Sí dejé lista la infraestructura y unos primeros tests de aceptación con Cucumber y Phantom/Selenium. Mi trabajo principalmente sigue estando dedicado a trabajar en la definición de las APIs y en temas de backend, donde tuve algún problemas a causa de mi falta de rodaje con Loopback.
  • Estuve refactorizando el importador de conciertos de Mosica e incluí una nueva pequeña feature en la versión web, se genera el icalendar de los conciertos para quien quiera añadírselo en la agenda. También empecé con una sección especial con los conciertos de las Fiestas del Pilar 2015 que espero ir mejorando.
  • En Bichomanía dejé fina la importación de datos, estuve con las páginas de contenido estático, resolví un par de pequeños bugs y estuvimos finiquitando algunos detalles en el frontend con Pablo para dejarlo todo prácticamente listo.
  • También tocó trabajar en Alchups. Estuvimos definiendo a modo de boceto la arquitectura de información de la web con Lizano y ya dejó listo el diseño de la home, además estuve implementando la sección de gestión de rutas a nivel de backoffice.
  • Para cerrar la semana pasada, dejé migrada la pasarela de pago de OutreachTool a stripe. Y, aprovechando, estuve refactorizando como estaba implementada esa parte, que no estaba demasiado bien.

Buena semana.

» Leer más, comentarios, etc...

Ingenieria de Software / Software Engineering / Project Management / Business Process Management

Iterative

August 26, 2015 12:57 PM

An Iterative Waterfall Isn’t Agile

http://www.mountaingoatsoftware.com/blog/an-iterative-waterfall-isnt-agile#When:15:43:00Z

» Leer más, comentarios, etc...

Una sinfonía en C#

Cómo instalar Live Writer en Windows 10

August 25, 2015 01:57 PM

Hace tiempo que no posteo por varios motivos: vacaciones, cambios de proyectos y el más reciente: pasé a Windows 10 y no podía instalar Windows Live Writer, acá un resumen para hacerlo:

wlsetup-all.exe /AppSelect:Writer /q /log:C:\temp\Writer.Log /noMU /noHomepage /noSearch

Y en unos instantes lo instala, listo.

Les dejo el link a la nota original donde encontré la solución.

Nos leemos.

» Leer más, comentarios, etc...

Poesía Binaria

Obtener diferencia entre una zona horaria y UTC en PHP

August 17, 2015 08:23 AM

2744390812_c6e2aa449b_o

Puede parecer extraño pero, a veces, cuando nuestros visitantes son de diferentes franjas horarias conviene adaptar las horas a cada uno de los usuarios. No es plan que en pleno 2015 obliguemos a los usuarios a hacer las conversiones.

También es posible que, estemos extendiendo un CMS que ignore por completo el default_timezone_set o que lo defina a placer, y nos encontremos en un dilema cuando tenemos que tratar con la hora.

Lo más sencillo es utilizar DateTimeZone::offset, podemos hacerlo de la siguiente manera:

1
2
3
<?php
$timezone = new DateTimeZone('Europe/Madrid');
echo $timezone->getOffset(new DateTime());

Teniendo en cuenta que estamos en pleno horario de verano, ahora mismo, en la España peninsular estamos en UTC+2, por lo tanto el Offset devuelto es de 7200 segundos (2horas).
Es más a mí me gusta también mirar el Offset de Caracas, para probar que esto funciona, si hacemos:

1
2
3
<?php
$timezone = new DateTimeZone('America/Caracas');
echo $timezone->getOffset(new DateTime());

Nos devolverá -16200 (un número muy raro, porque allí están en UTC-4:30.

Hasta aquí bien, pero ahora lo queremos almacenar en horas y minutos, más que nada para expresar la fecha y hora en formatos compatibles con ISO 8601 (yyyy-mm-ddTHH:MM:ss+xx:yy, por ejemplo 2015-08-20T15:20:55+0200) o RFC 2822 (Thu, 20 Aug 2015 15:21:09 +0200). Con la función date(), podemos hacerlo con date(‘c’) y date(‘r’) respectivamente pero, a veces, no es posible (si la zona horaria no está bien definida, por ejemplo).

Lo que queremos es obtener ese desfase en horas y minutos, para ello, podemos utilizar esta función:

1
2
3
4
5
6
7
8
9
10
11
12
<?php
function getUTCOffset($timezone, $colon=true)
{
  $dtz = new DateTimeZone($timezone);
  $offset = $dtz->getOffset(new DateTime());
  $format=($colon)?'%+03d:%02u':'%+03d%02u';

  return sprintf($format, $offset / 3600, abs($offset) % 3600 / 60);
}

echo getUTCOffset('Europe/Madrid')."\n";
echo getUTCOffset('Europe/Madrid', false)."\n";

Con esta función consultamos el desfase a la hora actual entre la zona horaria especificada y UTC.
¿Quieres un listado de las zonas horarias soportadas?

1
2
<?php
print_r(DateTimeZone::listIdentifiers());

Ahora bien, si lo que quieres es conocer ese desfase sin tener en cuenta el horario de verano, algo así como la hora “normal”, tendremos que hacer una consulta un poco más detallada:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
function getUTCOffset2($timezone, $colon=true)
{
  $dtz = new DateTimeZone($timezone);
  $transitions = $dtz->getTransitions(time());
  $format=($colon)?'%+03d:%02u':'%+03d%02u';
  foreach ($transitions as $transition)
    {
      if (!$transition['isdst'])
    return sprintf($format, $transition['offset'] / 3600, abs($transition['offset']) % 3600 / 60);
    }
  return false;
}

foreach (DateTimeZone::listIdentifiers() as $tz)
  {
    echo $tz." - ".getUTCOffset2($tz)."\n";
  }

Con getTransitions() podemos obtener las fechas en las que se realizan los cambios de hora, junto con más información como si es horario de verano (isdst), por eso, recorremos los cambios de hora, y si es horario de verano, lo ignoramos. Para reducir el número de elementos del array devuelto por getTransitions() decimos que se genere a partir de la marca de tiempo actual (time()), podemos recortarlo con array_slice() si queremos para tener menos elementos, de todas formas, a la hora de recorrerlo no avanzaremos mucho, ya que el primer elemento que no tenga horario de verano, nos hará salir del bucle.

Por supuesto, podemos hacer una función que englobe las dos y diferenciar si hacemos caso del horario de verano o no por un argumento:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function getUTCOffset($timezone, $colon=true, $ignoreDST=false)
{
  $dtz = new DateTimeZone($timezone);
  $format=($colon)?'%+03d:%02u':'%+03d%02u';

  if (!$ignoreDST)
    {
      $offset = $dtz->getOffset(new DateTime());
      return sprintf($format, $offset / 3600, abs($offset) % 3600 / 60);
    }
  else
    {
      $transitions = $dtz->getTransitions(time());
      foreach ($transitions as $transition)
    {
      if (!$transition['isdst'])
        return sprintf($format, $transition['offset'] / 3600, abs($transition['offset']) % 3600 / 60);
    }
      return false;
    }
}

Foto: leoplus (Flickr CC-by)

The post Obtener diferencia entre una zona horaria y UTC en PHP appeared first on Poesía Binaria.

» Leer más, comentarios, etc...

El blog de Adrián Arroyo

Probando OpenIndiana

August 13, 2015 10:00 PM

Me he decidido a instalar OpenIndiana. Para esto he usado la última nightly disponible fechada a 30 de marzo de 2015.

OpenIndiana instalador

OpenIndiana entra por defecto en GNOME 2 en modo Live. Desde allí podemos lanzar el instalador para instalarlo en el disco.

Instalando paquetes

OpenIndiana usa IPS como gestor de paquetes. Para poder instalar paquetes debemos usar los siguientes comandos

sudo su
pkg install git
pkg install gcc-48

Para buscar paquetes

pkg search -pr NOMBRE_PAQUETE

IPS puede estar desactualizado. Afortunadamente, ya que SmartOS y OpenIndiana comparten el kernel illumos es posible usar los paquetes de SmartOS. Para ello hay que instalar pkgin. Añadimos al PATH las rutas /opt/local/sbin y /opt/local/bin. Usamos el archivo .profile.

PATH=/opt/local/sbin:/opt/local/bin:$PATH
export PATH

Después usamos el instalador

curl http://pkgsrc.joyent.com/packages/SmartOS/bootstrap/bootstrap-2015Q2-x86_64.tar.gz | gtar -zxpf - -C /

Una vez hecho esto podemos actualizar la base de datos de pkgin

pkgin -y update

Y podemos instalar normalmente

pkgin in mercurial
pkgin in wxGTK30

De todos modos yo no instalaría ninguna aplicación GUI vía pkgin.

OpenIndiana

» Leer más, comentarios, etc...

Arragonán

Semana 374

August 10, 2015 07:25 PM

Son un poco raras estas semanas veraniegas, será que esto de ver a mucha gente de vacaciones hace que no apetezca demasiado trabajar. Pero no queda otra, para mi más con lo de pagantis, que encima no pude dejar listo la semana pasada.

No tengo mucho que destacar más allá que los proyectos en los que ando:

  • Dejé lista buena parte del frontend de Bichomanía, a falta del contenido estático y terminar con algunas cosas de layout. También hice un pequeño ajuste a la configuración de despliegue con capistrano relacionado con las imágenes de productos.
  • En el proyecto con Maubic, además de andar echando una mano a los desarrolladores frontend cuando era necesario e ir pendiente de que el trello estuviera actualizado, me centré en adelantar trabajo de backend. Estuve implementando un pequeño servicio de logging que utilizarán el resto de servicios para notificar los eventos ocurridos en cada uno de ellos, además de seguir trabajando en tareas relacionadas con las historias/épicas de usuario que tenemos definidas. Terminé la semana encontrándome un problema a partir de ver resultados extraños escribiendo los tests, me fui el fin de semana bastante mosqueado y con encontrar la raíz del problema sigo.
  • En Alchups hice un pequeño arreglo y estuve dándole vueltas a unos prototipos en papel.
  • Resolví un problema en Minchador, para el formato de fecha en los envíos de los emails se estaba utilizando el locale en inglés.

Buena semana.

» Leer más, comentarios, etc...

Poesía Binaria

Baterías compatibles chinas versus Baterías originales

August 10, 2015 02:41 PM

bateriasLlega un momento en la vida en el que te quieres comprar un nuevo aparato, por hobbie o por necesidad, pero puede ser una cámara de vídeo, de fotos, un móvil, un drone, no sé, cualquier cosa. En definitiva, son cacharros que no están permanentemente enchufados y requieren pilas o baterías para sobrevivir.

Personalmente, hace tiempo me compré una cámara de vídeo Canon, de gama baja, el caso es que, cuando abro la caja y la estudio un poco, veo que la batería que viene con la cámara sólo dura 1h. Y en 1h no da tiempo a hacer nada. Eso no te lo puedes llevar a ningún sitio porque la batería se agota nada más salir de casa. En comparación con la cámara que tenía anteriormente, que pasó a mejor vida, que su batería duraba 3h. Y, tras ver el panorama, me pongo a buscar baterías adicionales por Internet, si es posible, de más capacidad.

Cuál fue mi sorpresa que al poco rato de estar buscando, veo baterías originales, de la misma capacidad que la que trae la cámara (recordemos, 1h), por unos 110€ de media (tras consultar varias tiendas), es decir, más de la mitad de lo que me costó la cámara. Parece que la sangre de unicornio no es algo exclusivo de las tintas de impresora. Por lo que, al poco tiempo, para no deprimirme tras comprar la cámara, me puse a buscar baterías compatibles en tiendas chinas por Internet. (Preguntad en los comentarios si queréis saber de algunas de ellas). Y, mi siguiente sorpresa fue que encontré baterías compatibles desde 10€, con el doble de capacidad.

No quiero entrar en otro debate de, productos compatibles sí o no, pero es que si una vale unas 10 veces menos que otra, es algo normal que no me pensara mucho el comprar la compatible o no. El problema es que, tras adquirir esa batería me di cuenta de que no era totalmente compatible con la cámara. La cámara no era capaz de indicar el nivel de carga de la batería, ni siquiera cargarla de la forma habitual, enchufando la cámara al cargador que trae de fábrica, por lo que era necesario adquirir un cargador exclusivo para ese tipo de baterías (los hay universales y baratos), pero bueno, son más cosas que había que comprar), aún así seguía saliendo muchísimo más barato que la batería original. El principal problema es que no puedes saber cuándo se agota la batería, sencillamente cuando ésta llega a su fin, la cámara se apaga. En mi caso, es cierto que la cámara se apaga con seguridad, es decir, se cierra el sistema de archivos y se realiza volcado de datos en la SD, por lo que la grabación termina bien, aunque puede que no sea el caso de otras cámaras.

bateria_canonDe todas formas, aunque tenía una batería que duraba 2h y media (que por 10€ no estaba mal), quise una tercera batería (por si fallaban, o por si me iba fuera a grabar algo, no quedarme colgado). Aunque, pasados unos meses de comprar la primera batería, empecé a ver baterías compatibles con el mismo modelo, pero un poco más caras (más o menos 20€), pero estas baterías especificaban que eran “Full-decoded“, pues bien. Éste tipo de baterías, sí que son compatibles con la cámara al 100%, permiten ser cargadas con el cargador de la cámara (lo cual es mucho más cómodo) y también indican la carga restante de la batería, por lo que, aunque nos gastemos un poco más de dinero, compensa muchísimo a la hora de utilizarlas, y, en mi caso, no dan el molesto mensaje de la foto anterior cada vez que cargas la batería.

Fotos: Son mías !! :)

The post Baterías compatibles chinas versus Baterías originales appeared first on Poesía Binaria.

» Leer más, comentarios, etc...

Ingenieria de Software / Software Engineering / Project Management / Business Process Management

Avance de Proyecto

August 07, 2015 07:21 PM

Buena aportacion de Ivan Rivera, http://ivanrivera-pmp.blogspot.mx/2015/08/cual-es-la-forma-adecuada-de-registrar.html?utm_source=dlvr.it&utm_medium=linkedin

» Leer más, comentarios, etc...

Ingenieria de Software / Software Engineering / Project Management / Business Process Management

Strategy with CRM

August 06, 2015 07:03 PM

http://community.dynamics.com/crm/b/crmsoftwareblog/archive/2015/07/30/how-ceos-can-boost-customer-satisfaction-strategies-with-crm

» Leer más, comentarios, etc...

Picando Código

Emacs – Personalizando el mode line

August 06, 2015 02:00 PM

En Emacs existe el Mode Line, una barra que describe lo que está pasando en el buffer actual. Por defecto, la línea tiene un formato bastante gris con información que puede o no sernos útil:

Emacs Mode Line por defecto

Los primeros guiones pertenecen al character set, seguidos de unos asteriscos si el archivo tiene cambios que no guardamos, nombre del buffer, posición, número de línea, información de los modos, etc. En general por lo menos en mi caso no le daba mucha importancia, más allá del nombre del archivo que estaba editando.

Hasta ahora lo único que le había agregado a mi Mode Line era Nyan Mode. Que de todas formas no es que se lo haya agregado, simplemente agregué el modo y el querido Nyan Cat paseaba por mi línea de modos a medida que avanzaba o retrocedía en un archivo.

Investigando un poco por Internet sobre formas de personalizar esta parte de Emacs para que me fuera un poco más útil, me encontré con un post de Amit Patel y su personalización:

Emacs: custom mode line – From Amit’s Thoughts

Me gustó bastante porque además de mostrar información útil de manera más visual, también usa Nyan Mode. Así que usé su código como plantilla y empecé a modificarlo hasta que quedó a mi gusto.

Cambié colores, tamaños y dejé de mostrar algunas cosas. El número de línea por ejemplo no me parece útil tenerlo en la barra de Mode Line porque en los archivos de código ya lo tengo activado por cada línea. También cambié de lugar el Nyan Cat para que se vea aunque tenga el frame dividido en varias ventanas (en Emacs el frame es lo que cualquier usuario llama “ventana” y la ventanas son divisiones dentro del frame).

A la izquierda quedó el directorio y nombre del archivo siendo editado. También cuando el archivo tiene cambios sin guardar aparece un asterisco rojo sobre fondo blanco. En el medio información de control de versiones, el modo mayor que estoy usando, Nyan Cat, y después los modos menores activados sobre el buffer.

Así quedó visualmente:

Emacs Mode Line personalizado

Y pueden encontrar el código en GitHub.

Es otra cosa interesante en la que se puede experimentar y meter mano en Emacs. Un comando que usé mucho fue eval-buffer. Cuando estamos editando un buffer con código Elisp, podemos usar eval-buffer para que Emacs evalúe el código, y en caso de ser algo que afecte el comportamiento del editor de texto, los cambios se ven en el momento. Por eso mientras iba probando meter mano en el archivo modeline-custom.el, ejecutaba eval-buffer a cada rato para ver lo que cambiaba o rompía.

Espero que les haya servido el post, aunque sea para tomar en cuenta la posibilidad de meterle mano a sus Mode Lines. Recuerden que los comentarios están abiertos si precisan cualquier ayuda con Emacs, prometo responder dentro de mi reducido conocimiento del tema.

» Leer más, comentarios, etc...

Blog Bitix

A Microsoft no le importa que uses Windows u Office sin licencia

August 04, 2015 07:15 PM

Si Microsoft quisiera no habría usuarios de Windows sin la correspondiente licencia de uso. Pero lo consiente, tampoco le importa que para un uso personal se haga de forma «pirata». Pocos días después del señalado 29 de julio Windows 10 aparecerá en las redes de compartición de archivos y páginas de descarga, también pocos días después aparecerá un programa que evite el sistema de validación como ha ocurrido con anteriores versiones.

Microsoft

Microsoft ha lanzado a la venta y preinstalará la licencia por el derecho de uso (que no propiedad del producto) de su próximo sistema operativo, Windows 10. Aunque la mayoría adquirirán esa licencia a través del impuesto Windows al comprar un nuevo equipo (aunque no quieran) y aunque (raramente) es posible conseguir su reembolso aún con trabas, la gran mayoría no lo hará bien por desconocimiento de que el equipo y su sistema operativo son dos productos distintos (muchos no saben tampoco que es un sistema operativo), desconocimiento de la posibilidad del reembolso o por no realizar el esfuerzo (me declaro culpable) del cual el fabricante es habitual que proporcione cero información sobre cómo proceder y cuando se realiza es con dificultades. Muchos pagamos la licencia de Windows aunque no la queremos y aunque Microsoft lógicamente prefiere que adquieras la licencia creo que no le importa que no la pagues para un uso personal.

¿Por qué digo que no le importa que no pagues la licencia? Porque versión tras versión la medidas incluidas en Windows u Office para protegerlos de un uso sin licencia son evitadas sin aparentemente muchas dificultades y al cabo de muy poco tiempo aparecen en las páginas de descargas las imágenes junto con las instrucciones a seguir para instalarlo sin ningún tipo de problema. Y en Windows 10 será igual. ¿Por que las medidas de validación incluidas no evitan el uso sin licencia? Porque le conviene a Microsoft no ser muy restrictivos. Si lo fueran algunos pagarían la licencia pero otros muchos dirían ¡¿que? ¿que la licencia cuesta 119 € (o 199, o 50 según lo que se consigue con devolución en un equipo nuevo)? ¿un tercio (aprox.) de lo que me costó el ordenador?!, y eso solo Windows, si además le sumamos Office y otros programas el coste de las licencias podría superar con creces el precio del equipo. Peor aún, cantidad a desembolsar cada unos pocos años por la obsolescencia y nuevas versiones. ¿Y qué harían esos que no pudiesen usar Windows u Office? Buscar alternativas y… ¿cuál creéis que eligirían? La también cara competencia de Apple con sus Mac o alguna distribución GNU/Linux como Ubuntu, Linux Mint, Debian, Fedora, openSUSE, etc… Que la gente supiese y pagase el coste de las licencias de software probablemente sería una de las mejores formas de fomentar el uso del software libre y GNU/Linux.

¿Alguien cree que una empresa como Microsoft con los recursos y capacidad que posee no podría implementar una validación que impidiera su uso indebidamente, más ahora donde la conexión a internet es común? No, la respuesta es que no quiere y tiempo ha tenido para demostrar lo contrario. Perdiendo muchos usuarios a favor de sus alternativas haría que esas personas estuvieran capacitadas para usar esas mismas alternativas en el trabajo (incluidas escuelas y empresas de formación), el mundo empresarial donde Microsoft les es más fácil exigir su derecho legalmente en vez de individualmente a personas y de donde obtendrá sus mayores ingresos. Hacerlo provocaría que bajase su cuota de uso en niveles monopolísticos actualmente y posiblemente a largo plazo un peligro de sus ingresos.

Solo hay que ver las millonadas obscenas que se adjudican en contratos para la compra de licencias en la administración pública. Dinero que salen de tus impuestos que aún muchos políticos y funcionarios (ir)responsables de tales adjudicaciones no comprenden (o no quieren comprender) que dicho abultado gasto recurrente está mucho mejor invertido en empresas locales que crean puestos de trabajo en la región y en software libre del que cualquiera puede beneficiarse en vez de en una empresa que para poco de su desarrollo realiza en cada país donde es usado (notar la diferencia entre gasto e inversión como se comenta en El blog de danitxu). El coste de las alternativas de software libre pueden ser igual de obsceno, más abultado aún o mucho menor pero la diferencia entre otras es que muy seguramente no sea por las licencias sino por los servicios de consultoría o desarrollo que pueden ser ofrecidos por empresas locales y de los que dependiendo del caso cualquiera podría beneficiarse.

Microsoft sabe que estás usando su software sin la correspondiente licencia y te lo dice mostrándote un mensaje cada cierto tiempo o te quita el fondo de pantalla, incordia un poco pero que no impide su uso. Voluntariamente o negligentemente los sistemas de validación incorporados en Windows u Office consienten que muchos usuarios usen la versión la versión Pirated, usuarios que no están dispuestos a pagar el considerable coste de la licencia. Aunque preferirá que los usuarios compren la licencia Microsoft permite en cierta medida el uso de su software sin ella, la alternativa sería perder la posibilidad de convencer a algunos a usar el software legalmente aparte de perder couta de uso a favor de otras alternativas, quizá le es más provechosa una situación donde se use su software ilegalmente que una alternativa. Microsoft también comete las injusticias que la ley le deja o nadie le exige, preinstalado su sistema indeseable por algunos que no lo queremos al mismo tiempo que no proporciona información clara y el proceso sea sencillo para conseguir su devolución junto con el reembolso de su coste y en los impuestos que usando ingeniería fiscal Microsoft junto con otras empresas se llevan a donde menos pagan.

Una nueva versión de Windows o un nuevo equipo es una ocasión ideal para en vez de migrar a la nueva versión de Windows dar el salto a GNU/Linux y dejar de preocuparte de estar violando esclavizantes licencias o aceptando cláusulas que la mayoría de personas si leyera y comprendiera no aceptaría tan alegremente. Yo lo hice hace unos años pasando por varias distribuciones, de Windows a Arch Linux, y después de casi seis años aun sigo en Arch, De Arch Linux a Arch Linux.

Referencia:
De Windows a Arch Linux
De Arch Linux a Arch Linux
Misión cumplida: me han reembolsado la licencia de Windows
Los usuarios de portátiles no pueden obtener reembolso en caso de elegir un SO distinto a Windows
Casado con Windows
Concurso millonario para migrar de Windows XP a 8.1 en la Comunidad de Madrid
Devolución del canon Windows
¿Cuánto gana Microsoft por cada PC con Windows que se vende?

» Leer más, comentarios, etc...

El blog de Adrián Arroyo

¡Haz scripts!

August 03, 2015 10:00 PM

¡Haz scripts! ¡Escribe scripts! ¡Programa scripts! ¡Ejecuta scripts! ¡Automatiza! Escribir scripts tiene muchas ventajas. Escribir scripts es la mejor manera de ser productivo, mantener el entorno actualizado y evitar el error humano. ¡Automatiza!

Automation

Se es más productivo

Escribir scripts es la mejor manera de ser productivo. Perdemos parte de nuestro tiempo inicialmente para posteriormente recuperarlo en el futuro. Escribir un script es una inversión.

Estan siempre actualizados

Puede que hoy sepas el procedimiento exacto a realizar para una determinada tarea pero en el futuro puede que no lo sepas. El script siempre está actualizado, pues en cuanto deja de funcionar se debe reparar para seguir usándose. La documentación por ejemplo

Bash

Menos errores

Tener un script reduce la posibilidad de error humano. Piensa que cada vez que hacemos algo de memoria podemos fallar. ¡Y puede que no sepamos cuando ha pasado eso!

Fáciles de compartir

Hoy día es muy fácil compartir scripts con el mundo. Cualquier programa de ‘paste’ funciona y sirve. Pastebin, BitBin.it, DesdeLinux Paste, GitHub Gist, BitBucket Snippets, Mozilla Paste, Ubuntu Paste, CryptoBin, Pasted, …

Algunos incluso te pagan por las visitas

Son TUS herramientas

Eres programador. Usas herramientas diseñadas por otros programadores. ¿Por qué no hacer tú alguna de tus herramientas? Agilizan tu entorno de trabajo como solo tu sabes. El verdadero maestro conoce sus herramientas al dedillo, si las diseñas todo ya tendrás mucho trecho hecho.

Microsoft PowerShell

¿A qué esperas?

Creo que se ha quedado demostrado que quiero que hagas scripts; que automatices. Da igual el lenguaje que uses, pero usa tus propios scripts. Puedes usar Perl, Python, JavaScript, Ruby, Tcl, Bash, Fish, PowerShell, Lua y muchos más.

» Leer más, comentarios, etc...

Arragonán

Semanas 371, 372 y 373

August 03, 2015 08:15 PM

Tres semanas sin hacer retro semanal, TRES! Igualando el record al que he llegado un par de ocasiones. Al menos no es un mes completo, que ya me daría mucha vergüenza.

Me hubiera gustado sacar un rato este domingo para escribirla mientras volvía de unas insuficientes y rápidas cortas vacaciones en Salamanca, pero al final preferí ponerme a terminar de leer Extreme Programming Explained. Ya hace mucho que XP es lo que más me convence del mundillo agile y no me había dado la ocasión de leer el libro de referencia, desde hacía varias semanas que tenía pendiente dedicarle tiempo para acabarlo y por fin pude hacerlo.

Casi toda la semana pasada me la pegué de vacaciones, sólo trabajé 2 días y salvo responder algunos emails y un hacer un par de commits furtivos, estuve de relax.

En cambio las otras 2 semanas no fueron precisamente tranquilas.

Han sido y son semanas en las que me he acordado y acuerdo mucho de los amigos de pagantis, que me han dejado sin pasarela de pago en 3 proyectos diferentes. Proyectos que hemos empezado a mover a Stripe. Dieron un aviso de que en 30 días iban a dejar de dar servicio, pero que ya si eso igual vuelven otro rato… Me gustaría conocer las razones del genio al que se le ocurrió mandar a tomar viento a toda la clientela de ese modo.

Volví a unas Geek’s Talks tras varios meses sin hacerlo. Noté mucho mi falta de asistencia, a ver si vuelvo a hacerme de los habituales y aunque siga pronunciando fatal consigo soltarme un poco de nuevo.

Estuvimos en la gala de entrega de los premios del Heraldo de Aragón para los que seleccionaron Mosica como finalista en la categoría de aplicación móvil. Ya al proponerlo no veíamos mucho recorrido, esperábamos que nos seleccionaran entre los finalistas con el objetivo de que nos diera algo de tráfico/visibilidad y para ir a la gala en modo comando canapé; lástima que en lo del tráfico y la visibilidad no cubrió las expectativas.

Le estuve dando una vuelta a un pequeño sideproject al que no sé si vale la pena darle dedicación. Últimamente se me han acercado empresas de varios tipos preguntando sobre programadores para trabajar en sus empresas y proyectos, tanto freelancers como contratados. Por eso se me ha pasó por la cabeza montar un pequeño job board para que quienes se me acercan publiquen sus ofertas de empleo, rememorando un poco mis tiempos con Jobsket :). Le dediqué algunos ratos a ver con más detalle algunos job boards que me parecían interesantes, a hacer algún boceto en papel y a tomar notas de ideas de cómo desarrollaría una primera versión.

Si tuviera un verano más libre sería un proyecto ideal con el que experimentar un poco, pero por el momento no va a ir mucho más lejos de esas anotaciones, que no hay mucho tiempo y bastantes cosas que cerrar. Sólo hay que ver un resumen de estas semanas sin excesivo detalle:

  • Dejamos desplegada la versión marca blanca de Minchador en un entorno de pruebas y tocó limar algunas cosas que se habían colado de la versión comercial. Si todo va bien no tardaremos demasiado de pasar a producción.
  • En el proyecto de Alchups dejamos ya finiquitado el backoffice con Razvan. Aparte yo estuve haciendo tareas de coordinación tanto con el cliente como con Lizano para el diseño, la generación de códigos QR para carteles físicos y el despliegue en un entorno de preproducción donde ya se ha empezado a cargar el contenido.
  • Con Outreach Tool y Mhop estuve haciendo algo de trabajo para la migración a Stripe. En ambos proyectos la integración es casi calcada, por lo que espero acabarla esta semana.
  • En Bichomanía dejé lista la integración con stripe y continué trabajando en la adaptación de las vistas de Spree al diseño.
  • Y como viene siendo habitual en las últimas semanas, mi trabajo como contractor en Maubic es lo que ha centrado la mayor parte de mi tiempo.
    Estuve definiendo y documentando los contratos de las APIs de los 2 primeros microservices, donde el uso de API Blueprint y Apiary están siendo de gran ayuda.
    Continué trabajando en implementar parte de los primeros servicios y en investigar como están hechas algunas cosas en LoopBack para ver como se puede adaptar el framework a algunas de nuestras necesidades.
    Tocó pasar a paneles rollo kanban tanto las historias/épicas de usuario como las tareas; inicialmente empezamos con uno físico y otro en trello, ya ha dado tiempo de ver que tal y como está planteado el panel físico carece de utilidad y acabará pasando a uno en trello en breves.

Buena semana.

» Leer más, comentarios, etc...

Poesía Binaria

Facebook y otras redes sociales para “espiar” y vivir mejor

August 03, 2015 08:42 AM

cortina-ducha-facebook1

Bueno, seguro que muchos de vosotros ya lo ponéis en práctica. Y es que, gran porcentaje de la gente, no puede vivir sin Internet, sin estar conectado, y revela gran cantidad de datos personales en Internet, ¿por qué? porque confía en que unas páginas tan grandes manejen de forma correcta sus datos, no revelen nada a nadie y, porque gente de sus círculos más próximos lo hacen también.

Además, muchas de estas personas, no configuran bien su privacidad, y hacen caso a cualquier cosa que les pregunta Facebook. Por otro lado, otras personas no configuran demasiado las opciones de privacidad porque les interesa tener una vida pública en la red (puede que por su negocio o sus servicios), y también pueden dar información valiosa.

Perfil en redes sociales cuando buscas trabajo

No sólo de LinkedIn viven los reclutadores. Y es que, cuando buscas trabajo, estaría bien hacer un poco de limpieza de redes sociales, es decir, todo contenido que pueda incriminarte o manchar tu imagen, debe ser eliminado… a ver, no me imagino a fotos de una fiesta o algo así, yo considero que todos tenemos derecho a divertirnos en algún momento. A ver, si todas las fotos que tenemos son de fiestas, eso dice mucho acerca de nuestras preferencias, al menos asegurarnos de que los contenidos son para todos los públicos.
Lo ideal sería no tener que hacer limpieza, y mantener un perfil limpio. Pero si yo fuera a contratar a una persona, lo primero que haría sería buscarlo en todas las redes sociales que pueda, badoo, hi5 y myspace incluidas. Que cuando hay algo abandonado, puedes conocer parte de su pasado y saber si ha hecho una limpia de emergencia de Facebook.

Me mudo a un nuevo edificio

Hay edificios que tienen un humo negro sobre su vecindario. Sus inquilinos pueden tener mal carácter, o ser de los que, se quejan mucho, demasiado ruidosos, vengativos, etc. Afortunadamente, muchos comparten su vida, y cuando visitamos el edificio por primera vez podemos echar una foto de los buzones. Muchos de ellos tienen el nombre y apellidos de los que viven ahí y seguro que al menos la mitad está en Facebook, y podemos encontrar el Twitter de alguien. Incluso podemos buscarlos en Google.
En otros casos, podemos ver el trabajo que tienen algunas personas. Muchas empresas pequeñas, o muchas sucursales de empresas más o menos grandes tienen comentarios en Internet, que pueden decir mucho sobre sus trabajadores.
En otras ocasiones, los hijos no suelen estar en los buzones, por lo que podemos buscar también por los apellidos, y más o menos por la zona, si no son muy comunes, tal vez no encontremos muchos y podamos dar con la persona correcta.
Por otro lado, en ocasiones el piso es de alquiler y en el buzón figuran los dueños, pero si hay alguna foto publicada que no coincide mucho con la distribución del piso o con la zona podemos imaginar que es de alquiler.

De todas formas, esto sólo es algo orientativo para hacer un ejercicio de radio-patio e imaginarte y conocer un poco a la gente de un edificio.

Un contacto improvisado

Esto es experiencia propia, a menudo me llegan correos para pedir consejo, colaboración, ayuda, o incluso preguntando por clases particulares. Siempre suelo responder, pero es interesante buscar el correo electrónico en redes sociales, para ver de quién se trata. A veces puedes llevarte sorpresas, otras veces, responder de forma más personal, o incluso captar la atención de quien te habla haciendo referencia a un gusto que se ha publicado por Facebook, por ejemplo.

Números desconocidos

Esto es una práctica extendida ya, nos llaman de un número desconocido, y lo buscamos en Google, a ver si es una llamada de publicidad, o de acoso telefónico. Así que podemos encontrar muchas quejas o, al menos saber quién es para ponerlo en una lista negra de nuestro móvil y que se cuelgue solo o no nos moleste con la llamada.

Pero, ¿ y si es un particular ? A veces, la gente suele dar su número en las redes sociales, para recuperar la contraseña, o para verificar los usuarios, etc. Si lo añadimos a nuestra agenda del teléfono lo podemos sincronizar con Facebook o Twitter, pero en Facebook podemos buscar escribiendo el móvil en la caja de búsqueda, arriba del todo.

Otras aplicaciones como Line, cuando añadimos a alguien a la agenda, nos permite hacernos “amigos” de esa persona, aunque a la otra persona también se le notifica.

E-mails en google

Se pueden buscar direcciones de correo en google, y hay personas participativas en foros y en otro tipo
de páginas web en las que dejan su correo electrónico a la vista. No es una práctica recomendada (dejar
el correo en cualquier sitio), pero a veces, puede contactar con nosotros alguien desconocido y esto
nos puede dar más información.

Cuentas de amigos

Algo que no recomiendan (incluso penalizan) en redes como Facebook. Se trata de crearte una cuenta, e ir añadiendo gente, con cierto control, ya que es una práctica perseguida y Facebook enseguida se da cuenta y nos penalizará para que no agreguemos a gente y nos hará exámenes con fotos de “amigos” nuestros para que los identifiquemos.
Muchísima gente suele aceptar la petición de amistad sin preguntar, pocos preguntarán y en ocasiones alguien te rechazará, pero puedes crear una cuenta con muchas personas de diversa índole… algunos, tal vez serán amigos nuestros, por proximidad, Facebook sugerirá a algunos amigos hacerse amigos de esta cuenta también.

Por supuesto hay mucha gente más propensa a aceptar que otra, por ejemplo los jugadores en Facebook, quieren tener amigos para poder jugar más, los buscadores de ofertas o concursos también, aunque son un público directamente interesado en esas dos cosas.
Además de para enviar las peticiones de juegos a quien realmente las quiera, enviar publicidad, concursos, promociones y demás. Por otro lado, podemos sacar mucha información de amigos de amigos. Hay mucha gente que puede ser directamente contactada sin tener amistad, incluso revela sus números de teléfono, sus e-mails.

A ver, esta última, no está aquí porque sea un tío muy malvado, simplemente es que aún hay muchísima gente que acepta solicitudes de amistad (y con ello abre la puerta a una cantidad ingente de datos personales). Está claro que el método más seguro para nuestra identidad es no utilizar ninguna red social, aunque para algunos casos también puede ser contraproducente, pero actualmente las redes nos proporcionan herramientas que podemos utilizar para que nuestros datos estén un poquito más seguros.

The post Facebook y otras redes sociales para “espiar” y vivir mejor appeared first on Poesía Binaria.

» Leer más, comentarios, etc...

El blog de Adrián Arroyo

¿Qué hacer ante la falta de espacio en Android?

August 01, 2015 10:00 PM

Me pide mucha gente que les ayude a liberar espacio de su teléfono. Así que voy a juntar un poco todo lo que conozco. En algunos pasos voy a asumir que tenemos el teléfono con root.

Bien predica quien bien vive - Muñeco Android

0. Pasar imágenes, vídeo y WhatsApps a la SD

Pongo 0 porque esto lo deberías haber hecho nada más recibir el teléfono. Si el teléfono no soporta SD, borrar cosas y si se consideran importantes pasar al ordenador.

1. Borrar la caché de las aplicaciones

Se puede hacer desde la interfaz de ajustes de Android o desde Link2SD.

2. Pasar aplicaciones a la tarjeta SD

Usa Link2SD. Tiene un modo básico con el script app2sd y otro más avanzado que funciona con particiones.

3. Borrar aplicaciones innecesarias de usuario

Usa Link2SD o en los ajustes de Android.

4. Borrar aplicaciones innecesarias del sistema

Usa Link2SD. Usa esto con cuidado. Me encuentro que mucha gente puede borrar sin problemas las Play cosas (menos Play Store) y las aplicaciones de la operadora. También puedes:

mount -o remount,rw /system
rm /system/app/APLICACION.apk
mount -o remount,ro /system

5. Limpia la Dalivk Cache

Usa Link2SD. Si no lo puedes usar

rm /data/dalvik-cache/*

6. Borrar datos de algunas aplicaciones

Ciertas aplicaciones usan datos a lo tonto. Mejor borrar y empezar de nuevo. Sé cuidadoso.

7. Pasar SD Maid

Si lo tienes instalado perfecto. Si no, sigue más adelante.

8. Cambiar el porcentaje de alerta

En la terminal o usando adb shell.

sqlite3 /data/data/com.android.providers.settings/databases/settings.db
insert into secure (name, value) VALUES('sys_storage_threshold_percentage','5');
insert into gservices (name, value) VALUES('sys_storage_threshold_percentage','5');
.quit

¿Y si no tengo SQlite 3 instalado en mi teléfono? Algo totalmente comprensible, en cuyo caso deberás descargar una versión ya compilada (también puedes compilarla tú con el Android NDK). En este hilo de XDA Developers lo puedes encontrar actualizado.

9. Optimizar bases de datos

for i in $(find /data -iname "*.db"); do
sqlite3 $i 'VACUUM;';
done

quizá esto también valga

find /data -iname "*.db" -exec sqlite3 {} "VACUUM;" \;

10. Borrar archivos generados por Android

rm /data/tombstones/*
rm /data/system/dropbox/*
rm /data/system/usagestats/*

11. Reseteo de fábrica

Solo en caso excepcional deberías plantearte empezar de nuevo. En muchos dispositivos se accede al recovery por Volumen Bajo + Boton Power. Desde allí buscamos la opción de Factory Reset o directamente instalamos otra ROM más ligera.

Más

Si alguien conoce más métodos para reducir el espacio usado en Android me lo puede comentar.

» Leer más, comentarios, etc...

Blog Bitix

Implementación de máquina de estados finita (FSM) con Java 8

August 01, 2015 10:00 AM

Es raro pero no he encontrado una librería adecuada en Java con una implementación de una máquina de estados. Stateless4j puede ser una candidata pero también tiene algunas deficiencias que pueden hacer que no nos sirva. Basándome en Stateless4j y usando Java 8 he creado una implementación de FSM con una funcionalidad similar y más ligera donde una única instancia de la máquina de estados es independiente del número de instancias de objetos en las que se use.

Java

Hace un par de años escribía un artículo sobre cómo implementar una máquina de estados usando el patrón de diseño State. El patrón de diseño State y el ejemplo era válido sin embargo podía tener algunas deficiencias. Una de ellas es que necesitaba una clase por cada estado diferente, si los estados son una docena el número de archivos necesarios son altos. Por otro lado cada estado debe implementar todas las posibles transiciones o métodos de la interfaz del estado que también pueden ser altos dependiendo del numero de estados y transiciones que se haga en ellos, aunque con la clase abstracta AbstractCompraState del estado solo necesitamos implementar los métodos de transiciones propias del estado. Se podría añadir pero el ejemplo del patrón de diseño estado no tiene operaciones para saber si una determinada transición u operación puede realizarse y en el caso de añadir esa funcionalidad si tuviésemos varias máquinas de estados probablemente duplicaríamos parte del código en cada una de ellas. También viendo el código el flujo de estados no es muy obvio. Por todo ello en este artículo comentaré otra posibilidad, creo que mejor, que es implementando una máquina de estados finita (FSM, Finite State Machine) y usando Java 8 aprovechando sus nuevas características como los streams e interfaces funcionales.

Me ha parecido raro pero no he encontrado muchas librerías en Java que implementen una máquina de estados, la mejor que he visto ha sido Stateless4j. Es perfectamente usable, sin embargo, al hacer un ejemplo me he dado cuenta de que también tiene un defecto importante. Y es que si queremos aplicar una máquina de estados a una instancia de cierta clase, Stateless4j necesita una instancia de la máquina de estados por cada instancia de esa clase, puede ser usado para controlar, por ejemplo, el estado de unos cuantos personajes de un juego o del juego mismo pero si tenemos unos cuantas miles de instancias como puede ser en una aplicación de gestión el código será poco eficiente y el consumo de memoria mayor. Además usa Java 7 y con Java 8 algunas cosas son más fáciles y claras.

Basándome en Stateless4j he creado una nueva implementación y usando Java 8 la tarea ha sido más sencilla y potente. Las funcionalidades que posee la implementación de esta máquina de estados son:

  • Definir estados.
  • Definir transiciones, manejadores de transiciones y opcionalmente condiciones que se deben dar para realizar el cambio de estado.
  • Definir manejadores de entrada y salida por transición.
  • Conocer el estado actual y si se está en un determinado estado.
  • Conocer los eventos aceptados para cambiar de estado.
  • Provocar eventos en la máquina de estados proporcionando un objeto y unos datos con información adicional para procesar el evento.
  • Definir manejadores para excepciones al realizar alguna transición o intentos de transiciones cuando no hay manejador definido.

La API de la máquina de estados se compone de dos builders que proporcionan una API fluida, uno para crear los estados (StateBuilder) y otro para la máquina de estados (StateMachineBuilder). Además de la máquina de estados (StateMachine) y la clase que representa un estado (State).

<noscript><pre><a href="https://gist.githubusercontent.com/picodotdev/9ec847b69fb1bc81700a/raw/StateMachineBuilder.java">StateMachineBuilder.java</pre></a></noscript>
<noscript><pre><a href="https://gist.githubusercontent.com/picodotdev/9ec847b69fb1bc81700a/raw/StateBuilder.java">StateBuilder.java</pre></a></noscript>
<noscript><pre><a href="https://gist.githubusercontent.com/picodotdev/9ec847b69fb1bc81700a/raw/StateMachine.java">StateMachine.java</pre></a></noscript>
<noscript><pre><a href="https://gist.githubusercontent.com/picodotdev/9ec847b69fb1bc81700a/raw/State.java">State.java</pre></a></noscript>

Internamente se usa la clase TransitionBehiavour que define el comportamiento en una transición y ante un evento. Si posee una función de protección (guard) se comprueba antes de ejecutar la acción (selector) y que devolverá el nuevo estado.

<noscript><pre><a href="https://gist.githubusercontent.com/picodotdev/9ec847b69fb1bc81700a/raw/TriggerBehaviour.java">TriggerBehaviour.java</pre></a></noscript>

El siguiente es un ejemplo de uso similar al del artículo del patrón de diseño State con un hipotético flujo de estados para una compra junto con el código de la máquina de estados necesario para implementarlo y con unas pruebas unitarias. El enumerado State define los posibles estados y el enumerado Trigger define los posibles eventos, en constructor static se define la única instancia de máquina de estados necesaria para manejar cualquier número de instancias de Purchase usando las clases builder.

<noscript><pre><a href="https://gist.githubusercontent.com/picodotdev/9ec847b69fb1bc81700a/raw/Purchase.java">Purchase.java</pre></a></noscript>
<noscript><pre><a href="https://gist.githubusercontent.com/picodotdev/9ec847b69fb1bc81700a/raw/PurchaseTest.java">PurchaseTest.java</pre></a></noscript>

La interfaz Subject proporciona las operaciones para que la máquina de estados pueda obtener y modificar el estado del objeto manejado en una transición, en este caso de una instancia de Pruchase.

<noscript><pre><a href="https://gist.githubusercontent.com/picodotdev/9ec847b69fb1bc81700a/raw/Subject.java">Subject.java</pre></a></noscript>

Otra posibilidad a las máquinas de estados son las herramientas de procesos de negocio o BPM (Business Process Management) pero salvo que tengamos algo muy complejo la máquina de estados de este ejemplo será más que suficiente para la mayoría de situaciones. Hace un tiempo escribir varios artículos sobre Activiti y Drools:

El código fuente completo está disponible en mi repositorio de ejemplos en GitHub.

Referencia:
Stateless4j
Recommended FSM (Finite State Machine) Library for Java
A programmable Finite State Machine

» Leer más, comentarios, etc...

Variable not found

¡Vacaciones!

July 29, 2015 05:30 PM

Y de nuevo llegó la mejor época del año, una de las escasas ocasiones en las que podemos separarnos un poco de de las pantallas y dedicarnos a disfrutar de lo que hay fuera, eso que algunos llaman mundo real :) Toca desconectar un poco, oxigenarse y recargar pilas, que ya va siendo hora.

Variable not found quedará a la deriva hasta septiembre, cuando volveremos listos para afrontar la nueva temporada, que promete ser intensa :)

Felices vacaciones, nos vemos a la vuelta!!

Playas de Rota (Cádiz)

» Leer más, comentarios, etc...

Meta-Info

¿Que es?

Planeta Código es un agregador de weblogs sobre programación y desarrollo en castellano. Si eres lector te permite seguirlos de modo cómodo en esta misma página o mediante el fichero de subscripción.

rss subscripción

Sponsors

Puedes utilizar las siguientes imagenes para enlazar PlanetaCodigo:
planetacodigo

planetacodigo

Si tienes un weblog de programación y quieres ser añadido aquí, envíame un email solicitándolo.

Idea: Juanjo Navarro

Diseño: Albin