Subscribirse al RSS Feed
(CodeAR)

codeAR es un Agregador de Noticias que intenta capturar los blogs de los desarrolladores Argentinos. Para saber que piensan, que están desarrollando, que están leyendo, que están imaginando.
Si tenes un blog sobre desarrollo de sistemas o relacionado al tema, te invitamos a participar de este Planeta, envianos un mail con la dirección de tu blog.

Como lo hice yo

desde aurelianito por aurelianito (noreply@blogger.com)
Estuve avanzando y empecé un módulo nuevo en sandro. Se llama comoLoHiceYo en honor a la canción de Sandro con el mismo nombre y tiene las configuraciones "opinionated" que hacen falta para unir cosas y que sea fácil compartir código entre cliente y server. Antes era posible, ahora es una pavada.
Éste es el código de una página de ejemplo que corre un pedacito en el cliente y otro en el server. Primero en el server, app/endpoint/clientCode.js es así:
define([], function() {
  return function(params) {
    var d3 = params.d3
    var startClientJs = params.startClientJs
   
    d3.select("body").append("div").text("Generated on the server")
    startClientJs("app/shared/clientCode")
  }
})

Y para el cliente está app/shared/clientCode.js:
define(["external/d3"], function(d3) {
  d3.select("body").append("div").text("Generated on the client")
})

Ya se empieza a ver que hay un montón de cosas que se pueden hacer en los dos lados. En este ejemplo, uso d3 tanto en el cliente como en el server para manipular el DOM.
¿Querés usar sandro? Decime y te ayudo.

Wake up!

Esto es una chorrera de casi ochocientas palabras de algo personal que poco interés puede tener para cualquiera que no me conozca. Sobra decir que lo más sano es obviarlo y volver en breve, cuando escriba algo más interesante. Pero es una de esas catarsis que uno hace “porque el blog es mío y hago lo que quiero” y porque espero que sirva para marcar un hito a partir del cual pueda reconciliarme con mi alto ego (con O) de programador y que se note. :)

Qué pasó que dejé de escribir? Un amigo diría que pasó la vida, pero me parece que perdí el rumbo (como tantas veces, que parece que uno es adicto a adoptar los estándares sociales) y terminé haciendo vida de empleado.

Aca viene la aclaración de siempre (y que calculo que como siempre, va a salir mal). No tengo nada en contra de la gente que es feliz trabajando por un sueldo fijo, durante un horario fijo, teniendo como mayor responsabilidad la de cumplir con el horario para poder una o dos veces por año, disfrutar de merecidas vacaciones. Simplemente me parece que trabajando y viviendo así la creatividad se va durmiendo y la vida deja de tener proyectos realizables para convertirse en un gran racconto  de anécdotas pasadas para realzar el ego actual (golpeado por la realidad, que le gusta repartir palos a diestra y siniestra).

Volviendo a mi rumbo, el año pasado conseguí dos clientes que me dieron la falsa sensación de estabilidad económica (dos ingresos bastante fijos, del orden de los U$400 cada uno), que si bien no son mucho para vivir en Argentina, alcanza para pagar los gastos de la oficina (desde alquiler hasta la contadora) y mantener la falsa idea de “programador freelance” (en lugar de empleado sin horario pero a tiempo completo). Esto hizo que fuera aplazando proyectos hasta que perdieran sentido, interés o ya los viera realizados (mejor y más bonitos de lo que los había planteado yo :) ).

El ver que en las weeknotes se repetían los proyectos, no se cerraban todo lo que quisiera y demostraran más un estancamiento profesional (tanto por las tecnologías usadas como por la incapacidad de hacer avanzar el desarrollo) que lo mucho que me gusta programar tampoco colaboraba con el estado de ánimo necesario para todos los días levantarse y sentarse a programar como un desquisiado hasta la próxima reunión o si el día estaba tranquilo, hasta la hora de la cena.

Un tercer factor (algo más tonto) fue el hecho de ver que lo único que estaba haciendo por estos lares era comentar los libros que leía. Como ejercicio de escritura está bueno, pero dado que pasaba más tiempo programando que leyendo, el no escribir sobre lo que más me gusta y hago, calculo que se debe a un estancamiento profesional más que a falta de tema.

Estos tres factores hacían que viviese bien, sin documentar mucho lo que hacía (no sea que alguien también se diese cuenta de mi somnolencia programadoril) y preocupandome principalmente de cumplir con “los dos clientes que pagan la olla”, manteniendo más que atendiendo bien al resto de la cartera (suena a decir “vivia en la Matrix y no me molestaba”).

Hace no mucho tiempo, se sucedieron una serie de cuestiones que me sacudieron un poco las ideas con uno de los clientes/patrones. Básicamente se juntaron dos factores que me molestaron mucho. Un exceso de maltrato profesional (metricas absurdas para minimizar los trabajos, requerimientos estrambóticos sobre tecnologías obsoletas y la necesidad de dar soporte presencial a la vez que cumplía los plazos de desarrollo), sumado a un par de cuestiones “de principios” que nunca toleré, me hicieron dejar de tener una relación comercial con ese cliente (con la gente que conocí ahí la relación sigue, el problema fue simplemente en el ámbito laboral).

Al venir “durmiendo en los laureles”, la realidad empezó a golpear (primero la puerta y después la cara). Economica y anímicamente. Se juntaron gastos que venían retrasándose por motivos ajenos desde hace tiempo, llegó a casa Emiliano Luciano (pero le decimos “Taca” por un tic que tiene) lo que nos obliga a pasar más tiempo en casa y con la tensión que lleva integrar un perro macho en un ambiente donde hay dos familias, cada una con su perro macho (y sus límites) sin que se produzcan mucho derramamiento de sangre  y La Torre empezó a reclamar atención, en algunos casos de forma urgente.

Con todo este sacudón, no había forma de no despertar y volver al ruedo. A nivel proyectos, por suerte (muchísima suerte la verdad), hace no mucho volví a programar con Eduardo, lo que me obligó a desentumecer unas cuantas neuronas y ver si podemos sacar conjuntamente un proyecto adelante. También tengo un par de proyectos medio dormidos (GTV por ejemplo) en los cuales estoy trabajando.

Si bien uno es animal de costumbres, (más estilo Sísifo que Heracles), estoy tratando de reorientar los procesos (desde la parte comercial hasta el espacio de desarrollo) para evitar caer en los mismos errores y mejorar tanto mi performance profesional como la calidad de vida.

 

What makes us feel good about our work?

desde Gastón Ramos por Gastón Ramos

Anoche vi esta charla TED, me pareció excelente:


Tagged: motivación, work

Imperdibles (octubre 27th – octubre 29th)

desde Hipertextos (desde La Plata) por Christian Silva

Algunos vínculos interesantes que voy coleccionando en Delicious

  • Las mejores aplicaciones para ver torrents en streaming – Descargar series o películas a tu ordenador puede ser ilegal en muchas partes del mundo, ya que no estás pagando por acceso al contenido. Pero, ¿qué pasa cuando no existe forma de pagar porque nadie te da siquiera la oportunidad de ser un cliente?
  • Opportunity Valley – La idea de Opportunity Valley. Lecciones no aprendidas de treinta años de contracultura digital (2014), es enfatizar y sintetizar algunos aprendizajes consolidados de tres décadas de desarrollo de una contracultura digital, de nacimiento en California pero de alcance mundial. Sin pretender ser un trabajo con enfoque tecnocéntrico, este ensayo analiza las buenas prácticas y las lecciones para ser aplicadas en campos de acción específicos, con foco en Iberoamérica.
  • Twitter facilita la creación de aplicaciones – Twitter presentó Fabric, un SDK para que se construyan apps con su plataforma. Conoce los detalles de esta iniciativa. Con la intención de que los desarrolladores sean más productivos, teniéndolo más fácil a la hora de incorporar características de Twitter en sus propias aplicaciones.
  • Dudas sobre el voto electrónico en la Argentina – Las recientes elecciones en Venezuela, donde se utiliza el sistema de voto electrónico, han reavivado los deseos de algunos sectores políticos (tanto del oficialismo, como de la oposición) de implementar ésta tecnología en las elecciones generales argentinas. En éste artículo delineamos el estado actual de la situación en nuestro país y las razones fundadas por las cuales es importante pensarlo dos veces.
  • El porno como educación sexual – La educación sexual de los menores no vive un buen momento en España. Al contrario que en muchos de nuestros países vecinos, aquí no figura en el currículum escolar. Los expertos la califican de “desastrosa”. “Se deja al criterio de los centros educativos, en muchas comunidades se necesita el consentimiento paterno para que los menores la reciban y la puede impartir cualquiera”, se duele Raquel Hurtado, de la Federación de Planificación Familiar Estatal.

Imperdibles (octubre 22nd – octubre 27th)

desde Hipertextos (desde La Plata) por Christian Silva

Algunos vínculos interesantes que voy coleccionando en Delicious

  • Enrique Dans: ““Tras seis clases on-line conozco tan bien al alumno que podría recomendarlo” “ – Lo que deberíamos hacer en online es aprovechar lo que la tecnología nos ofrece para crear comunidades que estén más interconectadas, que puedan interactuar con más facilidad de la que puede haber en un entorno presencial, en los que el número de minutos en los que puedes hablar es muy limitado.
  • Jim Groom: ¿Programar o ser programado? – El caso del Edupunk bien podría ser visto como un síntoma de esta época: a principios del 2008, Jim Groom usó el término por primera vez en su blog y cuando nadie se lo esperaba, una docena de influencers comenzó a propagar el término por cada rincón del planeta. Y el concepto se apropió, mutó y se transformó en uno de los proyectos ideológicos más interesantes de la actualidad.
  • ¿Por qué Symfony? – En el momento en el que uno comienza a pensar en el diseño técnico que necesita para desarrollar el back-end de una aplicación web de complejidad media/alta, enseguida se da cuenta que intentar abarcarlo todo con código PHP nativo no es práctico. Tareas como gestionar las plantillas de front-end, acceso a base de datos, gestión de formularios, validaciones, variables de sesión, etc … tienen una implementación un tanto costosa en PHP nativo, y en muchos casos obligan a casarse con determinadas herramientas, cuando fácilmente podría abstraerse de ellas (como puede ser la elección del gestor de base de datos).
  • Tecnología para la política en las protestas: el capítulo de Hong Kong – Las protestas de Hong Kong no pueden resumirse a una petición de democracia y muestran algunos patrones del ciclo de revueltas que comenzó en el mundo árabe a finales de 2010
  • Los ‘hackers’ no quieren ser “piratas” – El creador del movimiento del software libre, Richard Stallman, se definió más de una vez como hacker. Steve Jobs y Steve Wozniak, los creadores de Apple, empezaron siendo hackers. Tim Berners-Lee, uno de los llamados padres de internet, comenzó destripando ordenadores en la Universidad de Oxford. Hasta hay quienes aseguran que Bill Gates hizo sus pinitos en el hacking cuando era joven. Pues para el nuevo diccionario de la Real Academia de la Lengua (RAE) todos son piratas informáticos.

Novedades en sandro

desde aurelianito por aurelianito (noreply@blogger.com)
Tengo varias novedades de sandro. La primera es que separé el desarrollo del site de la biblioteca. Para eso hice el proyecto sandro-lib, donde tiene el proyecto sandro y sus tests. Por lo tanto, el proyecto queda así:
  • sandro: Site principal. Corre los tests. En un futuro va a tener toda la documentación. Es el primer site hecho en sandro y siempre va a usar la última versión. Si tenés alguna duda sobre cómo hacer algo, podés mirar el código acá.
  • sandro-lib: Biblioteca de base para hacer sites con sandro
  • domino: Port del proyecto domino para correr en sandro
La segunda es que hice mi primer visualización en d3 corriendo en el server, como parte de las cosas que hice en el Hackaton de la fundación Sadosky sobre agro. Lo siento, no tengo commit de esto por ahora.

La tercera es que cambié la forma de exponer los scripts que se ejecutan en el cliente. Ahora hay una acción del módulo alFinal que expone los scripts, tomando por parámetro una función que decide si un módulo puede ser expuesto dado el nombre de su recurso. Acá el ejemplo de cómo anda:
      router = c.camino()
      router.register(c.prefixPath("/js"), alFinal.jsCode({
        published: function(resource) {
          resource = "" + resource
          return (
            resource.startsWith("/sandro/") ||
            resource.startsWith("/app/shared/") ||
            resource.startsWith("/external/")
          )
        },
        prefix: "/js"
      }))

Muchos avances en muy poco tiempo. Espero poder seguir así,
Aureliano

IPython, matplotlib y transporte público en Bahía Blanca

desde Millón de Monos por manuel

Hace un tiempo, la ciudad de Bahía Blanca introdujo tarjetas de proximidad para el pago de la tarifa del servicio de transporte público. Junto con el sistema AVL con el que cuentan las unidades, los registros de uso de las tarjetas de proximidad son una fuente de información valiosa.

Como excusa para aprender un poco más sobre IPython Notebook, matplotlib y Basemap, estuve jugando con aproximadamente 4.3 millones de registros del sistema de transporte público bahiense, puestos a disposición por la Agencia de Innovación y Gobierno Abierto de la ciudad.

El notebook completo se puede ver acá: Datos de Automated Fare Collection del sistema de transporte público de Bahía Blanca

La información

Los campos más importantes de los registros sobre los que trabajamos son:

  • Fecha y Hora — momento en que se registró la transacción
  • ID tarjeta — identificador numérico, único y no vinculable con los datos personales del usuario
  • Línea Ómnibus — Línea (servicio) de ómnibus
  • Locación — Lectura del GPS de la unidad al momento de realizarse la transacción
  • Tipo Pasaje — Normal, frecuente, escolar, etc.

Una vez procesados y guardados en una tabla de una base de datos PostgreSQL/PostGIS, podemos empezar a hacer algunos análisis simples.

Promedio de viajes por hora

Podemos ver, por ejemplo, la cantidad promedio de viajes efectuados en cada hora del día para los días hábiles de la semana. El pico de actividad en el mediodía, quizás se deba al horario comercial “cortado” que se acostumbra en Bahía Blanca y otras ciudades del interior.

Cantidad promedio de viajes por ahora, durante los días hábiles

“Perfil” de usuario.

Es razonable considerar análisis que requieran tipificar usuarios en base a sus patrones de uso. Una posible forma de construir estos perfiles es la siguiente:

Perfil de uso semanal para un usuario

Perfil de uso semanal para un usuario

Los gráficos muestran la cantidad de viajes por hora y día de la semana para un período determinado. En el primero vemos uso consistente alrededor de las 7 de la mañana y de las 6 de la tarde.

Viajes encadenados

Nos interesa ver las combinaciones más frecuentes de dos líneas de ómnibus. Esta estadística puede indicarnos qué áreas de la ciudad no están bien conectadas por una única línea.

Decimos que los viajes v1 y v2 del pasajero p están encadenados si:

  • La diferencia de tiempo entre v2 y v1 es menor a 45 minutos
  • v1 y v2 fueron realizados en diferentes líneas (o sea, no consideramos viajes de retorno hacia el punto de partida)

Graficamos la matriz de combinaciones de líneas de omnibus:

Matriz de cantidad de viajes entre líneas

También es interesante ver dónde comienzan sus viajes los usuarios que realizan la combinación 514-517, una de las más frecuentes:

viajes 514-517

Financiación de sandro

desde aurelianito por aurelianito (noreply@blogger.com)
Como ya conté en este blog, hace un tiempo que estoy trabajando en hacer un framework para hacer páginas web que permita compartir fácilmente código entre cliente y server. A este trabajo lo denominé sandro, en analogía a los ya existentes sinatra y dyango.
Sandro, ya tiene bastante esfuerzo dedicado, pero necesita mucho más. Por lo tanto, está llegando el momento en que tengo que encontrar alternativas que me permitan financiar el proyecto, porque tengo que seguir comiendo pero quiero seguir haciendolo, y aparte en cualquier momento va a empezar a generar gastos (por ejemplo, hosting).
Estas son mis ideas, si se les ocurre algo más soy todo oídos:
  • Donaciones
    • gratipay
    • vía Paypal
    • ¿se les ocurren otros mecanismos fáciles de implementar?
  • Features requests/bug fixes con recompensa o donación.
    • Estos tendrían prioridad ("put your money where your mouth is")
  • Consultoría, capacitación, etc sobre sandro
    • Incluye dar cursos, desarrollar sites, dar charlas.
  • Libro sobre sandro (¿alguien gana plata escribiendo un libro sobre su propio proyecto?)
  • Venta de discos/canciones de sandro a través del site, cobrando una comisión.
    • Creo que Amazon, iTunes y MercadoLibre ofrecen algo así en sus programas de afiliados.
  • Inversión de venture capital en sandro
Si se les ocurre algo más, o quieren poner plata con alguno de los mecanismos arriba mencionados (o algún otro) no duden en escribir.

Happy hacking,
Aureliano.

Chequeo de integridad de archivos con AIDE

desde El blog de Pablo por pablo

AIDE es una aplicación tipo IDS (Intrusion Detection System),  substituta del conocido Tripwire, que permite tomar una “foto” a la integridad del sistema de archivos en linux y ayuda a identificar cuales fueron modificados desde un punto inicial.

Para  instalar la aplicacion en Ubuntu, ejecutamos el siguiente comando:

sudo apt-get install aide exim4

Por defult AIDE instala postfix como servidor de correo, pero en este caso preferimos utilizar Exim4.

En /etc/aide.conf agregamos una linea con  verbose = 5 para ajustar el nivel de detalle de los informes.

En la instalación por default AIDE genera una carpeta (/etc/aide/aide.conf.d/) con varios archivos de configuración que permiten realizar multiples chequeos. Estos son “armados” mediante una serie de reglas basadas en los siguientes parámetros:

p:      permissions
ftype:  file type
i:      inode
n:      number of links
l:      link name
u:      user
g:      group
s:      size
b:      block count
m:      mtime
a:      atime
c:      ctime
S:      check for growing size
I:      ignore changed filename
md5:    md5 checksum
sha1:   sha1 checksum
sha256: sha256 checksum
sha512: sha512 checksum
rmd160: rmd160 checksum
tiger:  tiger checksum
haval:  haval checksum
crc32:  crc32 checksum
R:      p+ftupe+i+l+n+u+g+s+m+c+md5
L:      p+ftype+i+l+n+u+g
E:      Empty group
>:      Growing logfile p+ftype+l+u+g+i+n+S
acl:    access control list
selinux SELinux security context
xattrs:  extended file attributes
e2fsattrs: file attributes on a second extended file system

A partir de estas, se pueden armar reglas propias como:

MyRule = p+i+n+u+g+s+b+m+c+md5+sha1

Muchas ya vienen generadas en el archivo /etc/aidse/aide.conf

Checksums = sha256+sha512+rmd160+haval+gost+crc32+tiger
OwnerMode = p+u+g+ftype
Size = s+b
InodeData = OwnerMode+n+i+Size+l+acl+xattrs+e2fsattrs+selinux
StaticFile = m+c+Checksums
RamdiskData = InodeData-i
Full = InodeData+StaticFile
VarTime = InodeData+Checksums
VarInode = VarTime-i
VarFile = OwnerMode+n+l+acl+xattrs+e2fsattrs+selinux
VarDir = OwnerMode+n+i+acl+xattrs+e2fsattrs+selinux
VarDirInode = OwnerMode+n+acl+xattrs+e2fsattrs+selinux
VarDirTime = InodeData
Log = OwnerMode+n+S+acl+xattrs+e2fsattrs+selinux
FreqRotLog = Log-S
LowLog = Log-S
SerMemberLog  = Full+I
LoSerMemberLog = SerMemberLog+ANF
HiSerMemberLog = SerMemberLog+ARF
LowDELog = SerMemberLog+ANF+ARF
SerMemberDELog = Full+ANF
LinkedLog = Log-n

Nosotros preferimos eliminar el contenido de la carpeta /etc/aide/aide.conf.d y crear un archivo con las siguientes reglas:

cat /etc/aide/aide.conf.d/60_aide_custom
 
/etc/init.d/firewall Full
/etc/passwd Full

Con ello podemos verificar si nuestro archivo que inicia las reglas de firewall o el passwd fueron modificados. Los chequeos realizados sobre dichos archivos corresponden a la regla:
Full = InodeData + StaticFile
donde:
InodeData = OwnerMode + n + i + Size + l + acl + xattrs + e2fsattrs + selinux
StaticFile = m + c + Checksums
y donde:
OwnerMode = p + u + g + ftype
Size = s + b
Checksums = sha256 + sha512 + rmd160 + haval + gost + crc32 + tiger

Luego editamos el archivo /etc/default/aide agregando/modificando los siguientes parámetros:

CONFIG_FILE=/etc/aide/aide.conf
MAILSUBJ="Cambios de configuración en: $FQDN"
MAILTO=pablo@mailserver.com
MAILFROM=aide-noreply@mailserver.com

En nuestro caso modificamos la línea del  envío de mail editando el archivo /etc/cron.daily/aide agregando -a “From: $MAILFROM” entre el asunto y el mailto

"$MAILFILE" /usr/bin/mail -s "$MAILSUBJ" -a "From: $MAILFROM"  "$MAILTO"

Para configurar el Exim4 ejecutamos dpkg-reconfigure exim4-config donde nos guiará un asistente. Luego de finalizar la configuración, la podemos verificar de la siguiente manera:

cat /etc/exim4/update-exim4.conf.conf
 
dc_eximconfig_configtype='satellite'
dc_other_hostnames='server'
dc_local_interfaces='127.0.0.1 ; ::1'
dc_readhost='mailserver.com'
dc_relay_domains=''
dc_minimaldns='false'
dc_relay_nets=''
dc_smarthost='smtp.mailserver.com'
CFILEMODE='644'
dc_use_split_config='false'
dc_hide_mailname='true'
dc_mailname_in_oh='true'
dc_localdelivery='mail_spool'

Lo único que resta es inicializar la base de datos de AIDE, con el siguiente comando:

sudo aideinit

Este comando genera la base de conocimiento ubicada en /var/lib/aide/ y es la “foto” contra la que se compara cada día (por el cron.daily) nuestro sistema. Ante un cambio de firmas, se nos enviará la notificación por mail, y quedará registrado en los logs ubicados en /var/log/aide/aide.log

Si por ejemplo, modificamos el archivo firewall, recibiremos un mail similar a este:

This is an automated report generated by the Advanced Intrusion Detection
Environment on MISERVIDOR started at 2014-10-23 13:16:28.
 
AIDE returned with exit code 4. Changed files detected!
AIDE produced no errors.
 
Output of the daily AIDE run (15 lines):
AIDE 0.15.1 found differences between database and filesystem!!
Start timestamp: 2014-10-23 13:16:28
 
Summary:
  Total number of files:        14
  Added files:                  0
  Removed files:                0
  Changed files:                1
 
 
---------------------------------------------------
Changed files:
---------------------------------------------------
 
f >.... mc..C.. .: /etc/init.d/firewall
 
End of truncated AIDE output.
 
The full output can be found in /var/log/aide/aide.log.
sha256sum: f6c427a4d929c92a3ea9dba5a5835bb21efccf44f12599fdce3b6b30d1fa0472  /var/log/aide/aide.log
 
The check was done against /var/lib/aide/aide.db with the following characteristics:
 Size     : 2754
 Bcount   : 8
 Mtime    : 2014-10-23 11:00:42
 Ctime    : 2014-10-23 11:00:42
 Inode    : 397505
 RMD160   : OllQD5FWPYOUbSO30bYCg5eLsh0=
 TIGER    : c1A9ydM6/K9iKktyfAdfoKaFil+4aMoD
 SHA256   : x+t8B1aOzpIlrWEoCJv8ijW3pvBIOQTh
 SHA512   : BXHVekA1IkcV0KRtES6CFTnffs1o1bPB
 CRC32    : TH0bcg==
 HAVAL    : WKs6jHEakzOxVe+2Az8TS6mFPmZqq9Mn
 GOST     : dDtQsq6PoPEGFq7jxz/t6744uTKmGlpE
 
The AIDE run created a new database /var/lib/aide/aide.db.new with the following characteristics:
 Size     : 2756
 Bcount   : 8
 Mtime    : 2014-10-23 13:16:28
 Ctime    : 2014-10-23 13:16:28
 Inode    : 391812
 RMD160   : 3WE1eu701xV/vjg0FxFPZoVKJfE=
 TIGER    : jafohtkCmOASKCgK9obJG2tdB+CNztK/
 SHA256   : OW/t343tGx7Mb7mNxIz2i50wvcA7qrDr
 SHA512   : im1WeB3b1tb9NhICwcMMRHByHhVNYrIU
 CRC32    : j+mtHQ==
 HAVAL    : x/9q2R7JlsH0g1kb4A6bDdlgC+/Qe0IP
 GOST     : Cejkg+EGQcZKUxHEqU+oF28Umt1MvwoC
 
End of AIDE daily cron job at 2014-10-23 13:16, run time 1 seconds

Ref: http://aide.sourceforge.net/stable/manual.html

Yesware! controlando tu correo electrónico

Hace tiempo vengo utilizando Yesware, una aplicación que se instala como una extensión del Chrome o Firefox que te permite llevar un control de tu correo electrónico de manera muy simple.

La extensión trabaja con varios clientes de correo electrónico, yo la utilizo para Gmail y se adapta muy bien a la interfaz propia del Correo de Google. Una vez instalada la extensión del navegador, es posible empezar a trabajar con la herramienta.

Con Yesware uno puede saber muchas cosas relacionadas con el correo electrónico, yo la utilizo principalmente para saber cuando el destinatario de mi correo ha leído o respondido mi mensaje. con eso ya no hay excusa de que te digan “no leí tu correo” porque queda fácilmente escrachado o en evidencia de su lectura.

Su funcionamiento es muy simple, tan solo hay que instalar la extensión y al momento de enviar un correo electrónico el sistema te agrega las siguientes opciones que puedes utilizarla al enviar el correo

Dentro del mismo Gmail tiene su sección para llevar el reporte de los correos que uno envía. El sistema también tiene Templates para responder fácilmente los correos cuando siempre tienen la misma respuesta.

Además dispone de un CRM y Sales Manager, pero son opciones que no las he utilizado porque no son de mi interés.

Si quieres probar la aplicación, deberás bajar la extensión y luego con recargar tu Gmail ya puedes empezar a trackear tus correos.

Pueden leer mas sobre su funcionamiento en el sitio oficial de la aplicación.

Yesware

La entrada Yesware! controlando tu correo electrónico aparece primero en Un Sanjuanino en Rio Cuarto.

Desbloquear Netbook del gobierno CX 100nzc 2013

desde [A]NTRAX - [L]ABS por ANTRAX (noreply@blogger.com)

Hola a todos,
Hace un tiempo hice un tutorial de como desbloquear las netbook del gobierno:

http://underc0de.org/foro/hardware/desbloqueo-definitivo-de-la-netbook-del-gobierno-con-un-clip-%28antrax%29/

Pero no sirve para todos los modelos, ahora voy a explicar como desbloquear la CX100, que es similar.


Examen conectar Igualdad (Ingreso como Tecnico)

desde [A]NTRAX - [L]ABS por ANTRAX (noreply@blogger.com)



Hola a todos! 
Les traigo el examen que están tomando para ingresar como técnicos en las escuelas en el plan conectar igualdad.
Para aquellos que no sepan, todos los años se toma este examen para entrar a trabajar en las escuelas arreglando las netbooks del gobierno.




Desbloqueo de las Netbook del gobierno (2013-2014)

desde [A]NTRAX - [L]ABS por ANTRAX (noreply@blogger.com)

He visto que muchos usuarios aun quieren desbloquear las netbooks del gobierno puenteando las patas del chip TPM. El metodo sigue vigente, pero SOLO para las netbooks del año 2011 - 2012 y algunas del 2013.

A partir del 2013, cambiaron el chip, dificultando asi su desbloqueo.
Investigando un poco en internet, me tope con esto:

Rompiendo el mito del desbloqueo ilegal:

se estima que un 10% de las primeras computadoras que se entregaron vinieron con fallas de fabrica y debido a este inconveniente se podian desbloquear temporalmente (no en su totalidad).

ministerio de educacion


En las nuevas computadoras se corrigio este error y tienen el doble de seguridad: se les agrego un interruptor DIP y se presume que otro chip alterno que controla la secuencia de arranque; lo que basicamente hace esta nueva seguridad implementada es que si alguien interrumpe el ciclo normal de arranque la pc tiende a autoapagarse mostrando una pantalla negra que no llega ni a encenderse.. 
La UNICA forma de desbloquear las netbooks ahora, es termiando el ultimo año del secundario. En caso de que encuentre alguna forma nueva para desbloquearlas, lo estaré posteando.


Wardriving con Android

desde [A]NTRAX - [L]ABS por ANTRAX (noreply@blogger.com)

Según Wikipedia:

Se llama wardriving a la búsqueda de redes inalámbricas Wi-Fi desde un vehículo en movimiento. Implica usar un coche o camioneta y un ordenador equipado con Wi-Fi, como un portátil o una PDA, para detectar las redes.


En este caso, yo les voy a enseñar a como realizar wardriving sin la necesidad de un coche y PC. Es decir, que por medio de un teléfono móvil con Android y caminar algunas cuadras, podremos tener el mismo resultado.
Lo que necesitaremos será instalar una aplicación llamada Wardrive, la cual pueden descargar desde la colección de aplicaciones de Underc0de

 


Una vez instalado, lo abrimos y veremos un mapa, el cual señala en donde estamos parados actualmente.
Lo que debemos hacer ahora, es comenzar a caminar por la calle, o si se prefiere en coche para alcanzar una cobertura aun mayor y la aplicación comenzara a dibujar la ruta que vamos haciendo con todas las redes inalámbricas que detecte. 


Si tocamos en la opción MAP MODE, la aplicación muestra al mapa con un poco más de detalle


Y si hacemos Zoom, podremos ver e identificar bien las casas que tienen Wifi.
Una vez que hayamos recorrido toda la zona, debemos exportar el mapa a KML (Keyhole Markup Language, lenguaje de marcas de Keyhole), KML es un formato de archivo que puede mostrar varios tipos de datos geográficos de nuevas formas. Para exportarlo, presionamos en el móvil el botón de menú y colocamos Exportar.


Y debemos seleccionar la opción KML para Google Earth


Una vez hecho esto, la aplicación guarda el archivo en la raíz del teléfono con el nombre wardrive.kml
Ahora solo debemos subir ese archivo a algún host, en mi caso lo he subido a 


Y lo colocamos en la url de Google Maps de la siguiente forma

 
Como se puede ver, la url llega hasta https://maps.google.com/maps?q= y le he añadido luego del igual la url en donde se encuentra el archivo KML. Esto nos dará como resultado el mapa con todas las redes inalámbricas capturadas.


También podemos hacer que filtre únicamente por las redes abiertas:


Otra de las cosas que se puede hacer, es seleccionar una sola red y ver bien de donde proviene:


En mi caso, esta red que he seleccionado, proviene de una escuela.


Post realizado por ANTRAX. Para saber más sobre Wardriving, haz click acá.



Imperdibles (octubre 15th – octubre 21st)

desde Hipertextos (desde La Plata) por Christian Silva

Algunos vínculos interesantes que voy coleccionando en Delicious

  • Data Visualization with JavaScript – It’s getting hard to ignore the importance of data in our lives. Data is critical to the largest social organizations in human history. It can affect even the least consequential of our everyday decisions. And its collection has widespread geopolitical implications. Yet it also seems to be getting easier to ignore the data itself. One estimate suggests that 99.5% of the data our systems collect goes to waste. No one ever analyzes it effectively.
  • Por una ley de encuestas (Uruguay) – La aplicación de probabilidad elemental muestra que los resultados que publicitan las encuestadoras son tan erróneos como improbables. Es imperiosa la promulgación de una Ley de Encuestas que defienda a la sociedad de semejante abuso.
  • PreD8 – This distribution aims to pull in many of the modules that have been gobbled up into D8 core, giving you close to feature parity with the upcoming release.
  • Alfabetismo transmedia: un programa de investigación – Los cruces entre medios y educación son muchos y no siempre han funcionado. En la primera parte de este post repasaré muy rápidamente algunos de esos cruces para después centrarme en un proyecto de investigación internacional dedicado a los alfabetismos transmedia (transmedia literacy).
  • The Guide to UX Design Process & Documentation – A master collection of frameworks, examples, and expert opinions at every stage. The process and byproducts of building great products quickly and thoroughly as researched across the web and practiced by industry leaders.

Conferencias en Argentina: Ruby, Python, Smalltalk, PHP, Uqbar, JSConf

desde Angel "Java" Lopez por lopez

Esta es la época de las conferencias, en la primavera de mi pais, Argentina. Tenemos para todos los gustos. Las que tengo presentes son:

RubyConf 2014
http://rubyconfargentina.org/
Octubre 24, 25, Buenos Aires

PyCon 2014
http://myconference.co/pyconar2014/
del Jueves 13 de Noviembre al Sábado 15, Rafaela, Santa Fé

Smalltalks 2014
http://www.fast.org.ar/smalltalks2014
Noviembre 5 al 7, Córdoba, Córdoba

PHP Conference 2014
http://2014.phpconference.com.ar/
Noviembre 7 y 8, Buenos Aires

Uqbar WISIT 2014
http://www.uqbar-project.org/events/wisit-2014
Noviembre 28 y 29, 2014, Buenos Aires

JSConf 2014
http://www.jsconfar.com/
Noviembre 29, Buenos Aires (parece que es un solo día)

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

Pure feeling

desde Gastón Ramos por Gastón Ramos

La otra vez escuchando una entrevista a la nueva banda “Resistencia” antes llamada “Resistencia Suburbana” escuché que el nuevo batero antes tocaba en una banda de Brasil llamada “Pure Feeling”, se me ocurrió buscar esta banda en youtube, como siempre. La verdad me encantó, es el tipo de Reggae que más me gusta, bien Hipnótico, creo que la definición sería Root Reggae, pero no estoy seguro.


Tagged: gustos, musica, reggae

D3 en sandro

desde aurelianito por aurelianito (noreply@blogger.com)
Basándome en la integración a sandro de domino, y el módulo comoTeDire, ¡hice andar d3 en el server en sandro! Con esto espero que podamos generar SVGs y visualizaciones indistintamente en cliente y server, y también quiero basar el sistema de templating de sandro en eso.
¿Alguien quiere financiar el proyecto? ¡Ya sandro hace cosas que ningún otro framework hace!

0-day para FreePBX

A inicios del mes se descubrió una vulnerabilidad en el FreePBX, uno de los entornos web de programación de una centralita Asterisk, y que ha sido catalogado como 0-day.

Una vulnerabilidad 0-day indica que es super critica, que tiene que ser algo resuelto ahora, que se deben tomar medidas de seguridad urgente porque estamos susceptible a ataques.

Con este bug es posible tomar control administrador sin tener que autenticarnos y luego se podrá tener acceso total a la central telefónica y la posible ejecución de comandos.

La vulnerabilidad es para todas las versiones de FreePBX y como medida de contingencia hay que bloquear el acceso web a terceros de nuestra red.

Estuve leyendo un foro sobre el tema y comentan que hay detectado robots que van escaneando las redes en Internet para encontrar centrales IP vulnerable para luego atacarlas.

Como medida simple de protección es solo necesario bloquear el acceso web de la central y solo dejar los de la VoIP únicamente abierto.

  • Para esto hay que bloquear el TCP 80 para redes externas de nuestra red interna
  • Abrir unicamente y si es necesario los puertos SIP/5060 y RTP/10000-20000

Recuerden que es 0-day y si tienes una centralita asterisk de cara a internet puedes ser atacado!

Mas información sobre la vulnerabilidad en el sitio de FreePBX

La entrada 0-day para FreePBX aparece primero en Un Sanjuanino en Rio Cuarto.

Domino en sandro!

desde aurelianito por aurelianito (noreply@blogger.com)
Acabo de hacer el primer POC de manejo del DOM en el server con el mismo API que en el cliente. Para eso, porté domino a mi sistema de módulos e hice un POC.
¡Esto está tomando forma! ¿Cuántos frameworks web hay que puedas hacer código de presentación que corra tanto en el cliente o en el server?

¿Quién quiere ser early adopter?

Imperdibles (octubre 14th – octubre 15th)

desde Hipertextos (desde La Plata) por Christian Silva

Algunos vínculos interesantes que voy coleccionando en Delicious

  • Si cada vez más internautas bloquean la publicidad, ¿por qué los anuncios siguen dando tanta guerra? – La publicidad web puede convertirse en la pesadilla de los navegantes, así que muchos deciden cortan de raíz: la única solución pasa por instalar un complemento en el navegador que inhabilite los anuncios. Desde el año pasado, hay un 134% más de usuarios españoles que recurren a esta medida de bloqueo. Las campañas invasivas en internet tienen cada vez menos audiencia, pero no todas las marcas pueden permitirse recurrir a la creatividad para promover acciones más respetuosas.
  • Colegios de la UNLP: debutó con algunas fallas la inscripción digital #ux – La nueva modalidad de inscripción a los colegios de la Universidad, que requiere rellenar una planilla de preinscripción por internet, no resultó sencilla para muchos padres, que se vieron obligados a llamar a los establecimientos -o a concurrir personalmente- para quitarse dudas. Dudas que, directamente, no les permitían completar el formulario.
  • Datafest 2014: En la Rural de Palermo – El 31 de octubre y 1 de noviembre, LA NACION y la Universidad Austral (Facultades de Comunicación e Ingeniería) realizarán la tercera edición del Datafest, el primer evento de apertura, minería y visualización de datos públicos del país, que en 2012 y 2013 reunió a más de 300 participantes.
  • 35 Useful HTML5, JavaScript Tools and jQuery Plugins – Web development is always play a dynamic role in the internet world. There is lots of HTML5 tool, J-query plugins and Javascript resources are available on the web to get started with the latest development in the Web. In this post we come with the cool collection of 35 useful web development tools and resources that you can use in your daily project building and to serve your clients best

Imperdibles (octubre 10th – octubre 14th)

desde Hipertextos (desde La Plata) por Christian Silva

Algunos vínculos interesantes que voy coleccionando en Delicious

  • Creating Your First Prototype with Framer – No longer can your product just be usable and look good. Beautiful, subtle movement enhances the user experience and makes products more engaging, dynamic, and memorable. Paul Stamatiou, designer for Twitter, recently wrote that motion design is now a required skill for designers.
  • Technarte 2015, Conferencia Internacional de Arte y Tecnología. Call for Papers 2015 – Technarte lanza una nueva convocatoria de ponencias para su nueva edición del 2015 coincidiendo con el 10º aniversario de las Conferencias. Estamos buscando ponentes que quieran mostrar al mundo sus creaciones innovadoras en las que la tecnología es la protagonista en alguna etapa de su proceso de creación o producción.
  • Crowdfunding, la modalidad 2.0 para financiar emprendimientos – Conseguir dinero es, probablemente, el principal obstáculo con que se topa la producción cultural en el país, en especial en lo que se refiere a proyectos independientes. Pero no solo en ese ámbito. Muchas personas también tienen dificultades para conseguir un capital inicial con el que comenzar sus emprendimientos. Sin embargo, desde hace un tiempo internet ofrece una solución. Libros, revistas, películas, documentales, obras de teatro o incluso un pequeño negocio de crochet o de manualidades pueden encontrar ese puntapié material con el que ser concretados gracias al crowdfunding.
  • VOSE (Documental interactivo) – Versión Original Subtitulada en Español · Documental interactivo que apropiándose de diálogos de películas, juega con las relaciones entre palabras e imágenes y los nuevos sentidos que genera su mezcla. ¿Por qué se van nuestros ojos tras los subtítulos sin que nos demos cuenta? Hagamos como Rembrandt, miremos a los seres humanos atentamente.

Emacs, show trailing whitespace

desde Gastón Ramos por Gastón Ramos

Hace un tiempo que estaba buscando una forma de mostrar los trailing whitespaces en emacs y no encontraba una forma decente de hacerlo, hasta el momento estaba usando

 whitespace-mode

pero me mostraba muchas cosas que yo no quería, cómo los saltos de línea y los espacios en blanco, todos, no sólamente los trailing. La solución es esta, agregar esta línea al init.el:

;; show trailing whitespaces                                                                               
(show-ws-toggle-show-trailing-whitespace)

Además podemos configurar una combinación de teclas para eliminar los trailing whitespaces:

(global-set-key (kbd "C-c x") 'whitespace-cleanup)

El cable submarino que le brinda internet a la Argentina

Allá por el 2008 había escrito sobre un video de como se extienden los cables submarinos por el mundo y las herramientas, robots y demás que se utilizan en la tarea.

Hoy día el portal MinutoUno ha colocado un artículo que explica como le llega a la Argentina uno de los cables submarinos que tiene, particularmente habla del punto de Las Toninas, lugar donde llega la fibra óptica submarina.

El cable del cual habla el artículo es el de Level3, uno de los carrier mas grande del mundo, el cual hace unos años compro a Global Crossing, otro gran carrier que por cierto tenía presencia mundial y varios cables submarinos por ahí; al momento de la compra / fusión, Level3 aumento su tamaño y su red también.

En la nota se comenta que el cable de fibra óptica tiene unos 7cm de diámetro con 4 pares de pelos -fibra óptica- que logran transferir unos 1.6TB por segundo. También informa sobre que sucede cuando se corta un cable y como es el proceso de detectar dicho corte y su reparación. Por suerte en Argentina si se llega a cortar uno de los cables submarinos internacionales del Atlántico, tenemos contingencia por el lado del Pacifico vía Chile.

Esta buena la nota para leerla y enterarnos uno poco mas sobre como nos llega el internet a nuestro país.

Vía MinutoUno

La entrada El cable submarino que le brinda internet a la Argentina aparece primero en Un Sanjuanino en Rio Cuarto.

Resoluciones del Nuevo Mes: Octubre 2014

desde Angel "Java" Lopez por lopez

Hora de escribir las resoluciones del nuevo mes. Pero antes, repasar las de septiembre:

- Aktores con ejemplo distribuido [completo] ver repo
- AjErl con ejemplo distribuido [pendiente]
- Soporte web y ejemplo para RuScript [parcial] ver repo
- Completar Mochy [parcial] ver repo
- Mejorar RSharp [completo] ver repo
- Trabajar con NodeJs en los temas Deep Learning, Internet of Things, Artificial Intelligence [pendiente]
- Trabajar en Code Generation usando AjGenesis para Node [completo] ver repo principal ver repo Express ver repo Sinatra ver repo Laravel
- Trabajar en Liqueed Project [completo] ver repo

También estuve trabajando en:

- Mejorar AjScript [completo] ver repo
- Refactor BasicScript tests para usar SimpleUnit [completo] ver repo
- Crear SimpleColls, simple collection functions in JavaScript, alone or a la Linq [completo] ver repo
- Refactor SimpleStore tests para usar SimpleUnit [completo] ver repo
- Mejorar AjTalkJs, Smalltalk in JavaScript, soporte de primitiva super, primeros ejemplos Express 4 [completo] ver repo
- Refactor MProc tests para usar SimpleUnit [completo] ver repo
- Refactor AjLogoJs tests para usar SimpleUnit [completo] ver repo
- Refactor SimpleKeeper tests para usar SimpleUnit [completo] ver repo
- Refactor SimpleTags tests para usar SimpleUnit [completo] ver repo
- Mejorar SimpleUnit, publicar nueva versión [completo] ver repo
- Refactor SimplePipes tests para usar SimpleUnit, y publicar nueva versón [completo] ver repo

Las resoluciones de este nuevo mes:

- Dar una charla de introducción a Aktores, actor model distribuido en C#
- Armar AjErl ejemplo distribuido
- Más ejemplos Express en AjTalkJs
- Explorar redes neuronales en JavaScript
- Explorar algoritmos genéticos en JavaScript
- Explorar otros temas de Inteligencia Artifical en JavaScript
- Más Aktores distribuidos
- Comenzar Distributed Smalltalk en AjTalkJs

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

La mudita & Windows 8.1

laMuditaHace un tiempo que tengo una máquina nueva dando vueltas pero que por una cosa u otra no me decidía a pasarla a “producción”.

La máquina en si es una Acer Aspire M5-481T, pero le puse LaMudita porque el sistema de sonido no le funciona (recientemente descubrí que sí le funciona el sonido por HDMI, así que tan mal no está la cosa). Viene con un I3 y 4Gb de RAM, los cuales en poco tiempo se convirtieron en 6Gb que es lo máximo que admite.

El principal problema de la máquina es su sistema operativo, el cual sobrevivió a las primeras 48hrs de estar conmigo gracias a su característica uEFI. Básicamente me complicó tanto bootearla desde otro sistema operativo que no fuera Windows, que me dió tiempo a encontrarle utilidad a tenerlo instalado (punto para la gente de marketing de MS).

Dado que estoy teniendo problemas con los programas desktop viejos en Windows 8.1 (siempre hay algo que no les funciona), el tener una máquina para desarrollar con esto me gustó bastante. Para el día a día, podría tener Ubuntu en una máquina virtual y tendría lo mejor de los dos mundos en un equipo extremadamente portatil (mi otra maquina tiene 17″).

Pero a mi falta de práctica en el mundo Windows, se sumó una intefaz de usuario totalmente cambiada (algo parecido a lo que pasó con Ubuntu y Unity). Bastante perdido, los primeros días me la pasé aprendiendo atajos de teclado y personalizando la intefaz (el nuevo menú de programas es al día de hoy que sigue sin gustarme).

El problema empezó cuando intenté montar una infraestructura de desarrollo usando vagrant+fabric+virtualbox2. La instalación en Windows da para un post aparte, que en algún momento publicaré. Mi primer intento fue el de instalar todo esto en una máquina virtual con ubuntu a fin de mantenerme trabajando igual que antes del cambio de máquina, pero francamente no pude hacer funcionar la conexión ssh con el servidor creado por vagrant. Tras navegar un poco, parece que es un error común con los usuarios Windows, así que pasé al plan B. Instalar todo en Windows.

La instalación en Windows tuvo sus bemoles, pero finalmente quedó andando. Los servidores se instalaron y parecieron funcionar… hasta que llegué al servidor que tiene Nginxs. Hasta este momento no encontré la forma de evitar un error de archivo inexistente que me aparece cada vez que quiero levantar el servicio. La instalación es correcta y la VM funciona perfectamente en MAC y Linux, pero sobre Windows hay problema. Tras ver en Google que el problema es bastante común con Windows, voy a tener que ver cómo solucionarlo de alguna manera poco ortodoxa (o montando ese servidor en otra máquina o pasando todo el desarrollo a otro equipo).

En resumen, llevo aproximadamente quince días siendo usuario de Windows, y sigo sumando. La experiencia me demostró que para el usuario promedio Windows 8.1 no es tan malo como lo pintan, pero que para el desarrollador  “promedio” es excesivamente controlador (ni a la BIOS se puede acceder sin pasar por el SO), generando problemas sin sentido en las aplicaciones. Si bien todavía se mantiene firme como SO base, no descarto la posibilidad de tenerlo virtualizado y volver a linux como sistema base, pero para eso falta un tiempo, ya que los dolores de cabeza que me está dando hoy día son los que quiero tener frescos para la actualización de los viejos programas a Windows 8.1

 

Code Coverage y Calidad de Código

desde Angel "Java" Lopez por lopez

Voy a usar directamente la expresión en inglés “code coverage” para lo que en español es cubrimiento de código. La pregunta de hoy es ¿hay relación entre un gran nivel de code coverage y calidad de código?

Primero, el code coverage es una métrica: simplemente eso, ni más ni menos. Si conseguimos el porcentaje de code coverage luego, digamos, de ejecutar todos los tests del sistema, un alto porcentaje con todos los tests en verde sólo indica que al ejecutar los tests pasamos por una gran cantidad de líneas de nuestro código, sin provocar un error.

Pero cualquiera que se ponga a meditar sobre eso, no puede concluir así por que sí, que eso indique una buena calidad de código. Bien podemos imaginarnos código que cumpla con todo eso (buen métrica, pruebas que pasan) y que NO TENGA UNA BUENA CALIDAD de código. Por ejemplo, bien podemos refactorizar todo el sistema para que el código quepa en una clase, con cientos de métodos, y el code coverage seguirá alto y las pruebas pasarán. Y así se nos pueden seguir ocurriendo refactorizaciones, que bajen la calidad de código, sin que la métrica de code coverage se vea afectada en gran medida.

Tenemos que ponernos de acuerdo en qué es calidad de código, pero para este post, podemos tomar algunas cualidades:

- Que el código ejecute lo que se espera
‘- Que sea modificable/extensible de una forma accesible

Vean que no pongo que sea “entendible” porque me imagino que esa cualidad es un requisito de la segunda que puse arriba. La primera cualidad se puede dividir en:

- Que el código de el resultado esperado ante las entradas correctas
- Que el código reaccione de la manera esperada ante las entradas incorrectas

y así podríamos seguir refinando. Igual es tema para discutir. Pero aún no podemos esperar, con las cualidades de arriba u otras que se nos ocurran, que ante un gran nivel de code coverage obtengamos, de forma casi mágica, una buena calidad de código.

Entonces, si alguien espera que subiendo el code coverage de una aplicación/sistema/librería, escribiendo pruebas para subir esa métrica, de esa forma vamos a obtener/mejorar la calidad de código, les digo una cosa: es loable lo suyo, pero es tan inútil como alinear las sillas en la cubierta del Titanic. Están haciendo algo que parece bueno, pero no es lo que hay que hacer.

Alguien podría decir: ¿pero acaso las pruebas que acompañan al aumento de code coverage, no nos aseguran que el código inicial tenga la calidad esperada? Si hacen las pruebas DESPUES de escribir el código, muchas veces eso no se cumple. Porque se van a ver motivados a elevar la métrica, no la calidad del código. Pongamos un ejemplo en concreto. Sea un método que recibe los argumentos a y b, y revuelve a/b (su división). Al principio no está cubierta, agregamos una prueba que invoca a ese método pasando a=1, b=2 y vemos que devuelve 0.5. Ahora el code coverage subió, de 0 a 100%. Las pruebas pasan. Pero no tenemos idea de haber cubierto los (MINI)CASOS DE USO de ese método. Por ejemplo, nunca probamos que pasa cuando b=cero.

Ese es uno de los problemas de los “pruebas después”. No se cubren los casos de uso de nuestra aplicación. Y si encima nos dejamos guiar por aumentar el code coverage, menos vamos a concentrarnos en los casos de uso. Y si siguen el camino “pruebas después” también se encontrarán, más frecuentemente de lo necesario, que el código ya armado es difícil de probar, o lo van a modificar de formas extrañas para que podamos tener la recompensa del día: uy! aumentamos el code coverage! ¡Qué buenos programadores que somos, qué buena calidad de código!

No me malinterpreten: el code coverage sirve, pero NO ASEGURA calidad de código. Ni siquiera la mantenibilidad de un sistema. No es difícil encontrar sistemas con alto code coverage, uno los modifica, las pruebas pasan, pero luego, el sistema web vuela luego de dos clicks en las páginas. ¿Por qué? De nuevo, porque el code coverage alto y las “pruebas después” no aseguran para nada que hayamos contemplado todos los casos de uso (como el simple de más arriba, dividor por b igual a cero, el método tiene 100 por ciento de code coverage, pero no tiene el 100 por ciento de los casos de uso).

Algo de valor agrega el subir el code coverage, porque al final, alguna de las pruebas adicionales algo nuevo cubre. Pero es lo que alguien ha llamado “pica pica bajada de cordón (de vereda)”, trabajo que agrega poco valor en general a lo que programamos, y que lleva tiempo.

Bueno, luego de esta larga diatriba, algo de agua para mi molino:

Si en vez de intentar subir el code coverage con pruebas después, seguimos el FLUJO DE TRABAJO de Test-Driven Development, el code coverage alto es como que viene de la mano de ese flujo de trabajo, sin gran esfuerzo. Si aplicamos ese flujo a cubrir cada caso de uso, vamos construyendo software que va creciendo, como un organismo, paso a paso, de la manera más simple, y asegurándonos que cada prueba que agregamos responde a una necesidad del sistema que estamos armando. El código va fluyendo, naciendo, transformándose, y la etapa de refactor es de importancia para aumentar la calidad, no para el code coverage.

Espero que se haya entendido: sin TDD, no hay paraíso :-)

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

Cortando la cola del pavo

desde Angel "Java" Lopez por lopez

Había una vez una familia que se reunía una vez por año, para celebrar juntos. La dueña de casa solía cocinar al horno un pavo relleno. Una receta que habia pasado de generación a generación, por vía oral, especificaba qué colocarle, cuánto tiempo cocinarlo, cómo preparar el relleno. Pero había algo que hacía siempre: cortarle la cola al pavo. Alguien preguntó: “¿Por qué hay que cortarle la cola al pavo? ¿Por qué está esa instrucción en la receta?”. Sorprendentemente, la cocinera sólo atinó a responder: “No sé, así lo hacía mi mamá, así me lo enseñó”. Fueron a preguntarle a la madre: “No sé, a mí también me lo enseñó así mi mamá”. Le preguntaron a la abuela: “Yo tampocó sé, así me lo enseñó mi mamá, en mi infancia”. Y al final, llegaron a la bisabuela: “Bueno, cuando vivíamos en Europa, en una casita en el campo, el pavo no entraba en el horno, y teníamos que cortarle la cola”.

¿Cuántas veces nos pasa, en nuestras actividades, profesionales o no, “cortar la cola al pavo”, sin notar que las fuerzas que llevaban a esa conducta ya desaparecieron?

Para poner un poco de contexto, veamos un ejemplo en el desarrollo de software. Cuando aparecieron las primeras microcomputadores, no había discos duros, solamente discos flexibles. Y muchas veces, la computadora sólo tenía disponible una dispositivo de discos flexibles (la “diskettera”). Recuerdo un sistema de sueldos y jornales, a principio de los ochenta. A fin de año había que calcular por empleado cuánto tenía que abonarse de aguinaldo. La ley había cambiado: ya no era un monto asociado al último sueldo, sino lo que había cobrado por cada cada mes. No había forma que un disco flexible tuviera toda esa información. Así que el operador, para calcular el aguinaldo, tenía que introducir y retirar uno por uno los discos de las liquidaciones mensuales. Eran las limitaciones de esos tiempos.

Y en minicomputadores, los discos duros no eran el último lugar de resguardo. Se usaban cintas, para sacar copias de los programas y los datos.

Desde los “mainframes” fue llegando la implementación de bases de datos (relaciones, jerárquicas, en red, aunque sólo sobrevivieron las primeras; la nueva “onda” de NoSQL no es tan nueva :-). Y la próximas implementaciones de los sistemas en computadores personales pasaron a usar bases de datos, en general relacionales.

Y siguió el progreso. Pero algo quedó de resabio, de reliquia, algo como “cortar la cola del pavo”: hoy se piensa en tener todo en la base de datos. Pero hoy tenemos gran cantidad de memoria disponible. Muchas veces, podemos tener nuestro dominio TOTALMENTE en memoria, y muchos casos de uso son de “muchas lecturas, escrituras esporádicas”. Pero en vez de aprovechar directamente la memoria (vean que puse TODO el dominio en memoria, no estoy hablando de “cache” selectivo), todavía se inicia el desarrollo de un sistema viendo el esquema de base de datos.

No digo que sea aplicable a todos los casos, pero en muchos sistemas, la base de datos (o el disco, al final), es la “nueva cinta”: la forma de resolver la persistencia. Pero la operación bien podría hacerse completamente en memoria. Aún en memoria distribuida. Por ejemplo, en Facebook, en su implementación, todo es un objeto (una persona, una relación, un mensaje, una foto, …), y se almacena en un sistema que llaman TAO (de The Abstract Object). Usan MySql (muchas bases) sólo para persistencia. La operación la resuelvan en memoria: TAO corre en multitud de máquinas distribuidas en varios data center, y usa MySQL principalmente para persistencia, y replicación, apenas para el negocio.

No hace falta ser Facebook para aprovecharse de “primero la memoria”, en vez de “hay que cortar la cola del pavo, hay que usar base de datos relacionales”. En un sistema que estuve examinando, con un caso de “muchas lecturas, pocas escrituras”, pude implementar el caso de uso principal en memoria, quedando CUATROCIENTAS VECES más rápido (no digo 400 por ciento, digo 400 VECES). Y otro proceso, que tardaba en el orden de las ocho horas, paso a ejecutarse en minutos, adoptando un modelo en memoria.

Y ése es sólo un ejemplo. Ahora, agua para mi molino:

Test-Driven Development (TDD), al empujarme, como flujo de trabajo, hacia la implementación más simple, casi como que me impide complicarme con soluciones que níngún caso de uso pidió. Sólo se adopta una base de datos relacional, o un NoSQL, cuando el caso de uso lo pide. Y siguiendo TDD he notado que esa decisión, que puede ser diferida, aún cuando se tome, se puede cambiar en el futuro. Por eso soy escéptico cuando alguien quiere plantear cuáles herramientas usar ANTES DE PASAR por los casos de uso.

Con el caso de uso “nuevo horno más grande” desde el principio, nunca se llega a implementar “cortar la cola del pavo”.

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

Colectivos Rio Cuarto, aplicación si vives en la ciudad

Un proyecto que surgió de unos estudiantes de la Universidad Nacional de Rio Cuarto -UNRC- terminó siendo una aplicación con un gran potencial.

Esta aplicación llamada Colectivos Rio Cuarto, que también puede ser consultada vía web, permite conocer el horario y los recorridos de los colectivos urbanos de la ciudad.

A través de Google Maps se puede seleccionar una linea en particular y conocer las calles por las que hace su recorrido, así también como el horario del mismo.

Según comenta la página, la idea surgió entre los creadores en momentos de tiempo libre y deliberar propuestas para desarrollar una aplicación para Android.

Los datos con lo que se ha realizado la aplicación fueron obtenidos de la empresa SAT -Sociedad Anónima de Transporte-.

Esta aplicación es muy útil para estudiantes, trabajadores y cualquier persona que se movilice por el transporte público, para no tener que estar esperando mucho tiempo en la parada y poder coordinar los viajes.

La entrada Colectivos Rio Cuarto, aplicación si vives en la ciudad aparece primero en Un Sanjuanino en Rio Cuarto.

Git tip: Deshacer un “git add”

desde Gastón Ramos por Gastón Ramos

Siguiendo con la traducción del man de git-reset:

$ edit                                     (1)
$ git add frotz.c filfre.c
$ mailx                                    (2)
$ git reset                                (3)
$ git pull git://info.example.com/ nitfol  (4)

1. Estás felizmente trabajando en algo, y vez que los cambios en esos archivos están bien. No querés seguir viéndolos cuando hacés “git diff”, por que planeás trabajar en otros archivos y cambios mientras que estos archivos te distraen.

2. Alguien te pide que hagas “git pull” y los cambios son dignos de ser mergeados.

3. Sin emargo ya ensuciaste el índice (tu índice ya no apunta al HEAD commit). Y sabes que el pull no va a afectar a frotz.c o filfre.c, entonces reviertes el índice para estos dos archivos. Los cambios en el directorio de trabajao siguen ahí.

4. Entonces podés hacer pull y merge, dejando que los cambios de frotz.c y filfre.c sigan en el directorio de trabajo.

Nota del traductor:
La verdad excelente, no sabía esta forma de usar reset :).


Tagged: git, man, traducciones

El Mundo Según JuanCPovE: Día de la Tierra, ese pequeño punto azul pálido en...

desde Bunker Blog por Sergio Alonso (noreply@blogger.com)
El Mundo Según JuanCPovE: Día de la Tierra, ese pequeño punto azul pálido en...: Siempre en este día cito a Carl Sagan y su obra "Pale Blue Dot". Una buena razón para reflexionar y cambiar de una buena vez nue...

Mis próximas Charlas en Buenos Aires: Actores en C#, Single Page Applications

desde Angel "Java" Lopez por lopez

Tengo varios temas que quiero tratar, en distintos lenguajes y tecnologías. Hoy quiero comentar dos charlas que se vienen, que puedo dar gracias al Microsoft User Group:

Aplicaciones Distribuidas en C#, un modelo de actores

http://www.mug-it.org.ar/Event.aspx?Event=180

Lugar: Auditorio del MUG, Rivadavia 1479 Primer Piso “A”, Buenos Aires.
Fecha y Horario: Miércoles 8 de octubre de 2014 de 18:30 a 20:30 hs.

La idea es presentar conceptos de actores, y actores distribuidos, comentar la principal implementación en Java: Akka. Y luego pasar a discutir y mostrar una implementación en C#

Luego

Desarrollando Single Page Applications con JavaScript

http://www.mug-it.org.ar/Event.aspx?Event=181

Lugar: Auditorio del MUG, Rivadavia 1479 Primer Piso “A”, Buenos Aires.
Fecha y Horario: Miércoles 29 de octubre de 2014 de 18:30 a 20:30 hs.

Veremos las fuerzas que llevan a la aparición de aplicaciones web compuestas de una sola página, con dinámica en JavaScript. Siguiendo “baby steps” y simplicidad, exploraremos cómo podemos armar algún ejemplo con simple JavaScript y JQuery, cómo alimentar los datos desde un servidor con una API expuesta (agnóstico de la tecnología) y luego visitaremos algunas librerías JavaScript del lado cliente que nos ayudan, como Angular y Backbone.

Espero que estas charlas aporten algo a estos temas, entre tantos que son interesantes en estos tiempos. Estoy preparando otras charlas, como Inteligencia Artificial en JavaScript para la JSConf 2014 de Argentina. Y espero que me aceptan alguna más, sobre JavaScript y Ruby, en la RubyConf 2014 de Argentina.

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

Git tip: Deshacer un merge o pull

desde Gastón Ramos por Gastón Ramos

Lo que sigue es una traducción hecha por mí de una parte de “man git-reset”, es útil por ejemplo cuando estamos en una rama local
y hacemos git pull y tenemos un conflicto y en el caso de que nuestros cambios locales no nos interesen:

               $ git pull                         (1)
               Auto-merging nitfol
               CONFLICT (content): Merge conflict in nitfol
               Automatic merge failed; fix conflicts and then commit the result.
               $ git reset --hard                 (2)
               $ git pull . topic/branch          (3)
               Updating from 41223... to 13134...
               Fast-forward
               $ git reset --hard ORIG_HEAD       (4)

1. Intentar actualizar desde el upstream resultó en montón de conflictos; vos no estás listo para perder un montón de tiempo en mergear ahora, entonces decides hacer esto más tarde.

2. “pull” no ha hecho el merge commit, entonces “git reset –hard” que es sinónimo de: “git reset –hard HEAD” limpia el desorden desde el índice en el working tree.

3. Mergear el topic-branch en el branch actual resultó en un fast-fordward.

4. Pero decidiste que el topic- branch no está listo para abrirlo al público aún. “pull” o “merge” siempre dejan el tip original del branch actual en ORIG_HEAD, entonces haciendo reset hard hacia este va a dejar tu archivo de índice y el working tree de nuevo en ese estado, reseteando el tip del branch a ese commit.

Qué es el archivo índice de git?


fast-forward-git-merge


Tagged: git, tip

An in-depth analysis of SSH attacks on Amazon EC2

The research study investigates Secure Shell (SSH) attacks on Amazon EC2 cloud instances across different AWS zones by means of deploying Smart Honeypot (SH). It provides an in-depth analysis of SSH attacks, SSH intruders profile, and attempts to identify their tactics and purposes.

desde Blog de UsabilidadWeb.com.ar por Carlos (noreply@blogger.com)

Curso Full Stack Python, Estándares Web W3C y Javascript

Descripción del curso:

Full Stack Python El entrenamiento comienza con el estudio de Python, luego su asociación con la base de datos MySQL, luego se accede al desarrollo basado en el Sofware de Desarrollo de Código Abierto web2py. Lo que debe quedar claro es que no usaremos un Framework porque desconocemos Python, sino a pesar de ello. Se incluye el estudio detallado de los Estándares web W3C, HTML5, CSS3 y Javascript en Usabilidad Web - Full Stack Python, Estándares Web W3C y Javascript

Comparando costos de Amazon EC2 y Google Computing Engine

Estuve mirando y por suerte son prácticamente similares las tablas disponibles en cada site (EC2 / GCE) y es relativamente sencillo compararlas [1][2].

Para sus Data Centers en USA, establecí las siguientes relaciones:

  • En las versiones de VMs “standard“, los precios son exactamente iguales, con configuraciones llamativamente similares.
  • En las versiones “high memory“, es más barato Google (la mitad), aunque Amazon te da el doble de CPUs por una VM con la misma cantidad de memoria.
    Ej: Google te da 4 CPUs / 26 GB de RAM y Amazon en cambio te da 8 CPUs para su configuración de 26 GB de RAM. Dado que estamos en “high memory“, igualé a cantidad de memoria disponible para luego decir “Google es la mitad de barato”.
  • En las versiones “large” (“high cpu” de Google), Amazon es un 15% más caro para igual cantidad de CPUs, pero te da el doble de memoria en sus VMs.

Observaciones:

  • Se desprende de lo anterior Amazon EC2 ofrece perfiles más simétricos que Google comparando la relación de cantidades de CPU/Memoria. Puede ser útil para algunas aplicaciones o no, ya que va obviamente asociado al costo.
  • Amazon tiene configuraciones con más CPUs ya que llega a 32 CPUs y más memoria también: 244 GB; Google llega a 16 CPUs y 104 GB de memoria.
  • No comparé tamaños de almacenamiento, asumo que no tiene tanta relevancia para nuestra aplicación (se disponen de varias decenas de GB en disco en ambos).
  • Amazon dice que te incluye discos de estado sólido (SSD). Google te cobra ambos (?) 0,04 USD por GB/mes el disco estándar, 0,325 USD GB/mes el SSD.
  • Fundamental para la región en la que vivo: Amazon tiene Data Center en San Pablo (Brasil), Google no; sólo sirve VMs desde USA, Europa y Asia/Pacífico.
  • Amazon tiene diferentes tipo de instancias, en este caso comparé las “Bajo demanda” aka “Dedicadas” (según el lugar que se mire en la documentación), que son las más caras. Las otras son tipo prepagas (“Instancias Reservadas”), donde según entiendo, uno abona un importe fijo y después usa X cantidad de tiempo y se descuenta del fijo.
    Hay otros tipos de instancias pero no se ajustan a nuestro uso (“Instancias Puntuales” y “Instancias optimizadas para EBS”). En este apartado, pareciera que Amazon tiene largamente muchas más ofertas y más desarrollo del negocio que Google.

Bonus Track: versus Linode.com

  • Linode tiene hasta 20 CPUs / 96 GB RAM máximo [3].
  • Linode es mucho más barato que ambos; es más simple su tabla de precios y más “1 a 1″ la distribución de CPUs / RAM (4GB / 4CPUs, 8 GB / 6 CPUs, y así hacia arriba), además de que da bastante más storage en SSD.
    Por ejemplo, 4 GB / 4 CPUs en Linode: USD 0,06/hora (USD 40/mes), mientras que en Amazon estamos en USD 0,28/hora por 15GB / 4 CPUs o USD 0,105/hora por 3,75GB / 2 CPUs. Eso sí, Linode está en USA (Newark/Atlanta/Dallas/Fremont), Europa (Londres) y Asia (Tokio), no en Sudamérica.
  • Comparando Linode contra GCE:
    • 1 Linode (2 GB de RAM/ 2 CPUs / 3 TB transfer / 48 GB SSD): U$S 20/mes.
    • 1 GCE (1,70 GB RAM / CPUs “shared” (?) / 48 GB SSD): U$S 33.29/mes (no dicen si hay límite de transferencia).
  • A Linode lo conocemos los que estamos “en la pomada”, y hay casos en donde suena mucho mejor “lo tengo repartido en la nube de Amazon/Google”, nobleza obliga.

[1] http://aws.amazon.com/es/ec2/purchasing-options/dedicated-instances/
[2] https://cloud.google.com/products/compute-engine/
[3] https://www.linode.com/pricing

¿Sugerencias, comentarios?

Saludos

Se viene el Emprender 2014 Rio Cuarto

El evento emprendedor mas importante del interior de Argentina se realizará el 26 de Septiembre en el Teatro Municipal de Río Cuarto, se trata del Emprender 2014.

Tal como se viene realizando hace un par de años, éste evento esta dirigido a jóvenes emprendedores o aspirantes, empresarios y estudiantes de secundario / universidad, profesionales y quien sea que tenga espíritu emprendedor.

Como siempre la entrada es libre y gratuita, lo que si por un tema de lugar físico (se realiza en el Teatro Municipal) es que se requiere una inscripción previa para poder confirmar el lugar.

Dentro del mismo sitio web, se encuentra el formulario de inscripción y mas información sobre el evento.

La entrada Se viene el Emprender 2014 Rio Cuarto aparece primero en Un Sanjuanino en Rio Cuarto.

desde Blog de UsabilidadWeb.com.ar por Carlos (noreply@blogger.com)

Curso Full Stack JavaScript MEAN: MongoDB, Express, AngularJS, Node.js

Curso Integral Estándares Web W3C y Full Stack JavaScript MEAN (MongoDB, Express, Angular, Node). Desarrollo de Aplicaciones Web Escalables.

MEAN hace referencia a las Arquitecturas desarrolladas con la base de datos noSQL MongoDB, Express.js , Angular.js y Node.js, con estas tecnologías tenemos todo lo necesario para desarrollar aplicaciones web Frontend, Backend y Base de Datos.

MEAN permite escribir una aplicación web de principio a fin usando sólo javascript, con sus diferentes librerias. El stack MEAN permite escribir aplicaciones SPA (Single Page Application) en las que el cliente web mantiene gran parte de la lógica de aplicación y el lado del servidor implementa la API necesaria para darle soporte, evitando así los continuos requests HTTP de todo el documento html. Node.js permite el uso de JavaScript en el servidor y establece el concepto de programación no-bloqueante. Curso Full Stack JavaScript MEAN: MongoDB, Express, AngularJS, Node.js

Sudoers en Ldap

desde El blog de Pablo por pablo

Agregar el esquema Sudoers desde un archivo .ldif

Descargamos sudo.ldif y lo copiamos a /opt/sudo.ldif

dn: cn=sudo,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: sudo
olcAttributeTypes: ( 1.3.6.1.4.1.15953.9.1.1 NAME 'sudoUser' DESC 'User(s) who may  run sudo' EQUALITY caseExactIA5Match SUBSTR caseExactIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
olcAttributeTypes: ( 1.3.6.1.4.1.15953.9.1.2 NAME 'sudoHost' DESC 'Host(s) who may run sudo' EQUALITY caseExactIA5Match SUBSTR caseExactIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
olcAttributeTypes: ( 1.3.6.1.4.1.15953.9.1.3 NAME 'sudoCommand' DESC 'Command(s) to be executed by sudo' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
olcAttributeTypes: ( 1.3.6.1.4.1.15953.9.1.4 NAME 'sudoRunAs' DESC 'User(s) impersonated by sudo (deprecated)' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
olcAttributeTypes: ( 1.3.6.1.4.1.15953.9.1.5 NAME 'sudoOption' DESC 'Options(s) followed by sudo' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
olcAttributeTypes: ( 1.3.6.1.4.1.15953.9.1.6 NAME 'sudoRunAsUser' DESC 'User(s) impersonated by sudo' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
olcAttributeTypes: ( 1.3.6.1.4.1.15953.9.1.7 NAME 'sudoRunAsGroup' DESC 'Group(s) impersonated by sudo' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
olcObjectClasses: ( 1.3.6.1.4.1.15953.9.2.1 NAME 'sudoRole' SUP top STRUCTURAL DESC 'Sudoer Entries' MUST ( cn ) MAY ( sudoUser $ sudoHost $ sudoCommand $ sudoRunAs $ sudoRunAsUser $ sudoRunAsGroup $ sudoOption $ description ) )

Importamos el esquema a nuestra base Ldap

ldapadd -Y EXTERNAL -H ldapi:/// -f /opt/sudo.ldif
service slapd restart

Generamos una Unidad Organizacional y la configuración para el usuario Usuario1

##########################################
# ARCHIVO /opt/crearSudoers.ldif 
##########################################
dn: ou=Sudoers,dc=midominio,dc=com,dc=ar
objectClass: organizationalUnit
ou: Sudoers
 
dn: cn=defaults,ou=Sudoers,dc=midominio,dc=com,dc=ar
objectClass: top
objectClass: sudoRole
cn: defaults
description: Default sudoOption's go here
sudoOption: env_keep+=SSH_AUTH_SOCK
 
dn: cn=seguridad,ou=Sudoers,dc=midominio,dc=com,dc=ar
cn: seguridad
objectclass: top
objectclass: sudoRole
sudocommand: /sbin/iptables -L -n
sudohost: ALL
sudouser: usuario1

Agregamos dicha estructura al Ldap

ldapadd -x -D cn=admin,dc=midominio,dc=com,dc=ar -W -f /opt/crearSudoers.ldif

Debería quedar algo similar a la siguiente captura

Captura de pantalla de 2014-09-10 13:10:59

Configuracion del lado del cliente

Instalamos el sudo modificado para ldap, para esto debemos permitir que se elimine sudo

export SUDO_FORCE_REMOVE=yes
apt-get install sudo-ldap

Si ejecutamos sudo -V como root, vemos sus parámetros aplicados, buscamos “–with-ldap-conf-file=NOMBRE_ARCHIVO” (en mi caso /etc/sudo-ldap.conf) que es de donde toma el archivo de configuración y creamos un enlace simbolico a /etc/ldap.conf

ln -s /etc/ldap.conf /etc/sudo-ldap.conf

Definimos el path donde se encuentra la UO de sudoers agregando la siguiente linea en /etc/ldap.conf

sudoers_base ou=Sudoers,dc=midominio,dc=com,dc=ar
sudoers_debug 1

Solo falta modificar la configuración del nsswitch (en /etc/nsswitch.conf) para que busque primero en el archivo /etc/sudoers y en caso de no existir en el directorio Ldap.

sudoers: files ldap

desde Blog de UsabilidadWeb.com.ar por Carlos (noreply@blogger.com)

Cursos Full-Stack JavaScript MEAN y Full Stack Web Developer (Python/web2py)

Curso Desarrollo Full-Stack JavaScript MEAN (MongoDB - Express - Angular - Node). Javascript en Frontend, Backend, Base de datos. Curso Full Stack Web Developer (Python/web2py) en usabilidadweb.com.ar

Construido con Eco v0.1