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.

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?

Un buen regalo

desde aurelianito por aurelianito (noreply@blogger.com)
Dentro de poco es mi cumpleaños, así que hay personas que están pensando en qué regalo hacerme (espero!). Para ayudar o quizás complicar a ell@s, voy a escribir lo que creo que es un buen regalo.
Un buen regalo es aquel que l@ agasajad@ no compra pero querría tener.
Esto tiene dos corolarios:
  • Generalmente un juguete es un buen regalo para un@ niñ@, ya que no tienen plata y generalmente les gustaría tener juguetes.
  • Salvo que seas millonari@, es muy raro que tu presupuesto para un regalo exceda la cantidad de plata que una persona adulta puede gastar en sí misma.
Entonces, ¿cómo se hace un buen regalo a un@ adult@? Encontrando algo que l@ agasajad@ querría tener pero no compraría. Voy a dar ejemplos:
  • Cosas que no se consiguen en la ciudad donde vive l@ agasajad@.
  • Cosas que es ilegal comprar.
  • Cosas que son imposibles de comprar.
  • Cosas que no se permite comprarse pero pensás que querría tener.
    • Incluye cosas que l@ agasajad@ dice que no quiere pero pensás que le gustaría hacer/tener.
  • Cosas que no conoce, pero vos sí, y que pensás que querría tener.
  • Cosas que vos sabés dónde comprar y l@ agasajad@ no.
Cosas es en sentido amplio, o sea, pueden ser también servicios y actividades. Por ejemplo, a una amiga le regalaron un día en un spa para su cumpleaños hace poco.
Estas reglas descartan rápidamente la mayoría de los libros y discos. En mi caso solo regalame uno de ellos solamente si pensás que me interesaría particularmente.

Y si no encontrás nada, un buen abrazo y un "feliz cumpleaños" es mucho mejor que un regalo de compromiso ;). Ya que es algo que no puedo comprar pero quiero tener.

¿Qué es un buen regalo para vos?

Abrazo,
Aureliano.

Módulos AMD en sandro

desde aurelianito por aurelianito (noreply@blogger.com)
Ayer implementé en sandro módulos AMD, como los de requirejs. Esto debería hacer más fácil el uso de bibliotecas que usen commonjs. Acá les dejo el changeset donde está la implementación (con tests!).

Happy hacking,
Aureliano.

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.

Imperdibles (octubre 8th – octubre 9th)

desde Hipertextos (desde La Plata) por Christian Silva

Algunos vínculos interesantes que voy coleccionando en Delicious

  • El software como hecho cultural – A partir de la lectura del libro Software takes command de Lev Manovich –disponible online en formatos Word y PDF– emerge una nueva cuestión: la necesidad de realizar estudios culturales sobre el software.
  • Understanding UX Skills – User experience design is a multidisciplinary field. A well-designed product must be visually appealing and simple, and easy to understand, learn, and use. Creating a well-designed product is an endeavor that requires technical skills — an understanding of computer science, human computer interaction, and visual perception and cognition — and tremendous creativity. User experience requires analytical thinking directed toward a great user experience, and that user experience has to be grounded in a deep understanding of what people need, how they think, and why they behave the way they do.
  • Tim Berners-Lee, el creador de la WWW, en defensa de la neutralidad de la red – Tim Berners-Lee el creador de la World Wide Web, subraya la gran importancia que tiene un acceso neutral al contenido albergado en la red y que los usuarios tengan mayor control sobre cómo las compañías y gobiernos usan sus datos.
  • Upgrade Your Brain: Resources for Coding Beginners – Anyone who’s paying attention these days has probably figured out that computer programming is fast becoming the new standard of literacy in our technology-driven economy.

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

 

Imperdibles (septiembre 29th – octubre 6th)

desde Hipertextos (desde La Plata) por Christian Silva

Algunos vínculos interesantes que voy coleccionando en Delicious

  • La tecnología que nos aísla – A comienzos de septiembre, Verizon, uno de los principales operadores de móviles de Estados Unidos, dio discretamente a conocer un nuevo servicio llamado Auto Share. Su lanzamiento está previsto para finales de año y convierte en algo trivialmente fácil reservar y abrir un coche de alquiler por medio de un teléfono inteligente: basta con escanear y validar un código QR que hay en el parabrisas.
  • La dimensión política ignorada de cultura digital – En esta segunda década del siglo XXI se viene consolidando un discurso crítico de la fase más comercial del digitalismo. Considero a esta visión muy valiosa para entender la evolución tecnológica con una mirada de mayor perspicacia, que ponga en perspectiva la brecha entre la rápida evolución tecnológica con la lenta adaptación cognitiva, y alerte a la opinión pública sobre los NUEVOS problemas de la cultura digital. Algunos de estos teóricos críticos son Cass Sunstein, Lev Manovich, Evgeni Morozov, Nicholas Carr, Jaron Lanier, Andrew Keen, Umberto Eco, Ulrich Beck, por citar solo algunos fuera del exitismo digital.
  • Big Data ¿Cómo gestionar la gran ola de información en pos del negocio? – En tiempos de pleno crecimiento de la información, de la mano del auge expansivo de Internet, cómo trabajan las compañías para sacar el mayor provecho posible de esta tendencia llamada Big Data para mantener el negocio de forma eficaz, hacerlo sustentable e incrementar los ingresos.
  • The Next Big Thing In Responsive Design | Co.Design | business design – Responsive design, which allows designers and developers to build websites that adapt to every screen size, is one of the most empowering web tools to be adopted in the last decade. "Responsive philosophy is not just about designing websites that adapt to screen size." But adapting to the screen is only the first frontier of a new, responsive web. Today, users expect online experiences that not only respond to what device they're using, but also their location, time of day, what they’ve already read, and events happening in real time. To capture a user’s attention for the next generation of the web, you’ll need more than just responsive design. You’ll need a responsive philosophy.
  • Arduino, la revolución de las placas azules que se gestó en un bar italiano – Revolucionar el 'hardware' libre es lo que han conseguido Massimo Banzi, David Cuartielles y los otros tres cofundadores de Arduino, que jamás imaginaron la dimensión global que iba a adquirir su proyecto cuando, en 2005, comenzaron a trabajar en una placa barata y sencilla para enseñar electrónica a los alumnos del Instituto de Diseño Interactivo de Ivrea. El nombre homenajea a un bar, pero también a un rey, y el azul salió de las paredes de una antigua fábrica de Olivetti.

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

Pasión, el mundo de los hackers

desde Gastón Ramos por Gastón Ramos

Hace un tiempo bastante considerable tuve que ir a trabajar a las oficinas de una empresa de desarrollo bastante conocida de USA, era mi primer viaje fuera del país. Acortando todos los trámites del viaje Santa Fe – Bs As – Bs As – Estados Unidos, en realidad fué mucho más complicado dado que mi vuelo tenía 3 combinaciones. Al llegar a la empresa en cuestión me presenté y me llevaron con dos tipos, no importa los nombres, pero eran dos tipos con cargos mas o menos altos ahí adentro, ellos me preguntaron que era lo que yo hacía, mi experiencia, entonces les conté un poco lo que me acordé y lo que pude explicarles en el idioma de ellos (inglés) que en ese momento creo que era bastante peor que mi nive actual que ya es bastante malo.
Luego me llevaron al lugar dónde se trabajaba, que era una oficina gigante con más de 50 personas trajando juntas (primer punto en contra). La cuestión que después de que estos dos grandes genios de la programación decidieran cual era el equipo más adecuado, yo ya estaba laburando ahí. Fueron pasando los días y yo pasaba mi tiempo adentro de una oficina muy lujosa, dónde podías desayunar una comida espectacular si llegabas a las 8:30, dónde había heladeras con frutas, snacks y gaseosas gratis todo el tiempo, programando con tipos que no conocía.
La forma de trabajo era la siguiente: Llegábamos y teníamos una reunión stand up general que terminaba con un aplauso único motivador, en esta reunión se comentaban las cosas que de interés para todos los equipos, cosas nuevas, problemas solucionados, etc. luego de esta reunión cada equipo se iba la reunión stand up particular, con la típica estructura (qué hice ayer, que voy hacer hoy, que problemas tuve) luego de la stand up se armaban los pares, a… no les dije? en esta empresa se trabajaba de a pares siempre, y trabajar solo en algo era algo raro y hasta te diría no muy bien visto. Luego de estas reuniones
existían otras, de las que me acuerdo: IPM, Retro, Post-Mortem, Charlas de mediodia (durante el almuerzo), seguramente me estoy olvidano varias.
Continuando covenciendo-hackers-600x310n las prácticas, que eran: Test Driven Development (No tan test driven), poco y nada de refactoring, diría más nada que poco, miedo a cambiar, jugar al ping pong (esta es la que sí me gustó) etc.
Ahora bien, pese a todas estas prácticas de desarrollo “ágil” y todas las cosas extras, comida, ping pong, guitarra, charlas, etc, etc.
Hay algo que no pude encontrar en ninguna de las personas que trabajaba ahí y es Pasión, podemos hacer todas las prácticas que se nos antoje pero si no estamos entusiasmados y en consecuencia motivados con lo que estamos haciendo es muy difícil que las cosas salgan bien, el código que escribían ahí era un código de mierda, nadie estaba entusiasmado por mejorar nada y ni que hablar de cambiar una gema o intentar un refactoring.
Parece que esta empresa tiene buen marketing, hay otras empresas que intentan hacer el mismo proceso con la misma cantidad absurda de reuniones, con horarios extremadamente duros, estructuras, jefes, cosas que no se pueden tocar. Amigo, el mundo de los hackers no funciona así y eso se ve claramente reflejado en el código.


Tagged: hackers, pasión, programación

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

Como bootear tus antiguas aplicaciones para Ms-DOS en CD o USB “Bien Facil”

desde Blog tech-nico.com por soporte

En este paso a paso, vamos a ver como crear un disco booteable en CD para levantar tu viejo sistema hecho para correr en DOS.

Tendremos el beneficio de que emularemos el floppy disk “driver A” por medio del BIOS (unidad 0). Utilizaremos un software que se llama BCD/BFD con el agregado de algunos driver de CDROOM para que permita ademas bootear en dispositivos SCSCI.

Paso 1, descomprimimos esto (descargar).

Paso 2, pegamos los archivos y/o carpetas de nuestro viejo software en la ruta: tech-nico_boot\cds\cdromsi\files\

Paso 3, vamos a la consola de windows. —- Inicio – Ejecutar – cmd

Paso 4, nos movemos con “cd” a la carpeta “tech-nico_boot”

command

Paso 5, Ejecutamos el comando “bcd cdromsi”

Paso 6, si queremos grabar el ISO en un CD presionamos “Enter” y ponemos un CD en blanco (el mismo software se ocupa de grabarlo), y si no lo queremos quemar en CD y solo nos interesa el ISO, miramos cual es la ruta del ISO y lo buscamos antes de presionar cualquier tecla, ya que al presionar “A-abort” nos elimina el ISO.

iso_path

Ya tenemos nuestro disco listo para bootear. Facil no?.
Con el ISO podriamos crear un USB boot. (No lo probe pero deberia funcionar).

Como tip adicional. Si queremos que se auto ejecute un exe o bat al iniciar el CD tenemos que editar el archivo tech-nico_boot\cds\cdromsi\files\autorun.bat

Fuente: http://www.nu2.nu/

Este post se publico primero en tech-nico.com

Noticias relacionadas

Configurar un cliente Linux para autenticar contra un servidor Ldap

desde El blog de Pablo por pablo

Instalamos los paquetes necesarios del lado del cliente

sudo apt-get install ldap-auth-client nscd

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

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

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

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

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

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

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

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

sudo auth-client-config -t nss -p lac_ldap

En el archivo /etc/ldap.conf modificamos las siguientes lineas:

host IP_SERVIDOR_LDAP
base dc=midominio,dc=com,dc=ar
uri ldapi://IP_SERVIDOR_LDAP
uri ldap://IP_SERVIDOR_LDAP/
ldap_version 3
rootbinddn cn=admin,dc=midominio,dc=com,dc=ar
pam_password md5
nss_base_passwd	ou=Users,dc=midominio,dc=com,dc=ar?one
nss_base_shadow	ou=Users,dc=midominio,dc=com,dc=ar?one
nss_base_group	ou=Groups,dc=midominio,dc=com,dc=ar?one

Construido con Eco v0.1