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.

Google Street View Hyperlapse

desde netFlux por
Google Street View Hyperlapse:

A Teehan+Lax Labs experiment for creating interactive Google Street View hyper-lapse animations. Learn more about this project.

Learn Git Branching

desde netFlux por
Learn Git Branching:

This application is designed to help beginners grasp the powerful concepts behind branching when working with git. We hope you enjoy this application and maybe even learn something!

How To Raise The Next Zuckerberg: 6 Coding Apps For Kids

desde netFlux por
How To Raise The Next Zuckerberg: 6 Coding Apps For Kids:

If you want to give your kid every opportunity to succeed, it’s hard to argue with teaching them to code. Some of the wealthiest and most influential people of our time began programming young, and who wouldn’t want that kind of future for our kids?

Improve Your Code with Smart JavaScript Techniques and Patterns

desde netFlux por
Improve Your Code with Smart JavaScript Techniques and Patterns:

In this article we’re going to cover some common, and not so common smart JavaScript techniques and patterns to improve your code in both size and beauty. To follow along with this tutorial it’s important that you have a good understanding of functional programming in JS and regular expressions.

Un Buen Proyecto (2)

desde Angel "Java" Lopez por lopez

Anterior Post

Ya tratamos el principal tema que nuestro proyecto tiene que cumplir para ser un buen proyecto: solucionar el problema al cliente. Puede que sea sólo un colaborador, entre otros proyectos, para llegar a esa solución. Por ejemplo, me pasa muchas veces que el proyecto que me toca es de programación de una aplicación, pero la solución total del problema implica su instalación, mantenimiento y adopción. Otras veces no: nuestro proyecto abarca toda su ciclo de vida, por lo menos de la primer versión.

Puede suceder algo que muchas veces se nos pasa por alto:

- No podemos estar seguros de que lo que entregamos es un buen proyecto al terminarlo y entregarlo.

Hay que ver si realmente funciona en el campo, en la vida real.

Pongamos un ejemplo. Sea nuestro cliente es una compañía de seguros y su problema es que está perdiendo clientes porque los productores de seguros tardan mucho en otorgarle una póliza o no. La solución evaluada es: poner una aplicación en línea que reduzca el tiempo de aceptación o rechazo de un día a quince minutos. Hacemos la aplicación, pero al llegar a desplegarse y ser usado se muere cada media hora por la presión de uso, y la causa es el código de nuestro proyecto. O peor, trabaja bien, soporta la carga, pero otorga aceptaciones a cualquier caso. En ambos casos, nuestro proyecto no habrá sido un “buen proyecto”.

Es por eso que en nuestro proceso es importante las pruebas de carga y las pruebas funcionales. A lo que voy, es que muchas de las actividades que realizamos terminan teniendo su origen en la necesidad de cumplir con ser un buen proyecto. Un proyecto puede parecer “bueno”: tener todo “en regla”, haber sido programado con todos los patrones, ante las entradas correctas dar el resultado correcto, pero fracasar en su implementación porque no revisamos que, así como lo tenemos programado, no soporta más de diez usuarios simultáneos.

Aparece la cuestión de la calidad de nuestro entregable. Podemos discutir luego si la calidad es responsabilidad del equipo ágil, o si hace falta un equipo aparte de QA (Quality Assurance). Pero vemos que todo esto es motivado por la necesidad de cumplir con lo que espera el cliente: la solución de su problema.

Para poner un ejemplo “al revés”: al cliente no le importa que lo que entregamos sea escalable como Facebook, si su problema y solución (digamos, un sistema de compras) necesita solamente atender a veinte usuarios (los representantes de sus proveedores principales).

En próximos posts: si una solución es exitosa, hay que mantenerla; el aporte de TDD y el proceso de desarrollo.

Nota personal: lo de no poder ver si es un buen proyecto al terminarlo, me fue sugerido por Aristóteles. No encuentro la cita ahora, pero cuando habla de “eudamonia” en su “Etica a Nicómaco”, habla de lo que yo traduzco como “buena vida”, “con los dioses a favor”. Dice Aristóteles que muchas veces, un hombre al morir no puede estar seguro de haber llegado a la “buena vida”: puede que el resultado dependa de su influencia en otros hombres, aún luego de su muerte. (me temo que Aristóteles hablaba de “hombres”, ciudadanos con derechos, y no de “seres humanos”; mujeres abstenerse, era el Borat de los filósofos ;-).

Nos leemos!

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

mothran/bunny · GitHub

desde netFlux por
mothran/bunny · GitHub:

Bunny is a wireless. meshing, darknet that uses 802.11 to hide its communications

Imperdibles (mayo 16th – mayo 18th)

desde Hipertextos [desde La Plata] por Christian Silva

Algunos vínculos interesantes que voy coleccionando en Delicious

  • Las 10 grandes novedades de Google (y contra quién van a ir) – El aluvión de novedades lanzadas en el primer día de la conferencia I/O de Google se resumen en torno a un vehículo, la red social Google+, de momento, un enano frente a la pujanza de Facebook o de Twitter. Sin el crecimiento de su red no triunfará en otros sectores en donde no quiere quedar al margen, como son música, videojuegos o pagos.
  • La historia de la World Wide Web y sus tecnologías – ¡Jo, cómo ha cambiado el cuento! La verdad es que vista así gráficamente, la evolución desde la Web primigenia desde su limitado hipertexto en modo texto y monocromo a lo que disfrutamos cada día con páginas interactivas, multitáctiles y adaptables en todo tipo de dispositivos y con infinitas posibilidades gráficas ha sido todo un cambio.
  • Mobile Concerto – Voici en exclusivité le film réalisé pour le lancement européen de la marque Hello bank!, où un orchestre symphonique piège son public grâce à une performance musicale basée sur des outils numériques. Une réalisation de Paul Dugdale (B-Reel) sur la célèbre musique de Georges Bizet – Carmen « Les Toreadors ».
  • Utiliza Dropbox como servidor web – ¿Dropbox?. Sabemos cómo funciona, cuáles son sus peculiaridades comunes y básicas y todas y cada una de las utilidades que nos ofrece esta plataforma. Sin embargo,  a simple vista una de estas características no resalta en el paquete normal de “maravillas” de las que podemos hacer uso. Y sí, queridos lectores, como indica el título, Dropbox puede convertirse en un servidor web, aunque limitado en uso tecnológico, de coste cero. Analicemos este hecho con un poco más de detalle.
  • Las nuevas formas de leer y escribir en la web – El pasado viernes 10 de mayo, en el marco del Congreso Internacional de Promoción de la Lectura y el Libro, en la Feria del Libro, una mesa redonda se dedicó a pensar cómo “Leer, escribir y compartir en el mundo digital”. En ella participaron, con la coordinación de Mabel Kolesas, Beatriz Busaniche, Eduardo Abel Giménez y Fabio Tarasow, coordinador del PENT.

Ejemplo: Implementacion del Patron Singleton en C++

desde < BLOG.H >: por Ignacio Rigoni (noreply@blogger.com)
Buenas! Si, después de casi dos años de inactividad, volví para mostrar la implementación de un patrón Singleton en C++.

Como sabemos, una clase que implementa este patrón, tiene una característica muy importante: no puede crearse mas que una instancia (objeto) de esa clase. Pero claro, esta caracteristica es relevante o toma importancia en algunos casos. Personalmente, donde mas utilizo este patron es cuando creo "fabricas", es decir, utilizo el patron Factory para con alguna finalidad. El patron Factory lo dejo para otro momento, y es igual de interesante y util que el Singleton pero ahora no viene al caso.

Entonces, lo importante que debemos tener en cuenta, es que sin importar cuantos objetos queramos crear, solo estaremos creando una y solo una instancia de esta clase. Si por ejemplo creamos 5 variables de una clase llamada MiClase e instanciamos dichas variables, todas las variables corresponderán a la misma instancia. Es decir, sera indistinto utilizar una u otra de estas variables para acceder a los métodos y atributos del objeto.

Pero este patron tiene dos puntos que hay que tener en cuenta:

Punto 1. No puede inicializarse "manualmente".
Es decir, no podemos hacer la asignación con new:
MiClase ObjetoA = new MiClase();

Es imposible! Y por que? Porque el constructor debe ser privado. De esta forma nos aseguramos que no se pueda andar creando instancias libre y salvajemente por ahí. Bueno, si no se pueden crear instancias... cómo hacemos para exista esa famosa única instancia?

Punto 2. Alguien debe crear la instancia única.
Y si, nada es magia en esto de la programación. Quien puede crear la instancia? Bueno, pues la misma clase! Es decir, que de alguna manera, la clase debe crear una instancia de si misma y asegurarse que sea solo una. Esto lo haremos con un método que le llamaremos, por convención nomás: getInstance().

Es decir, que para obtener la unica instancia de una clase que implementa el patron Singleton, haremos algo asi:
MiClase ObjetoA = MiClase()::getInstance();

Súper fácil! Y ahora si, ObjetoA apunta directamente a la instancia única de la clase MiClase. Ahora veamos que se esconde detrás de todo esto, en términos de C++. Como toda clase de C++ tendremos los archivos .h y .cpp:

MiClase.h
En este archivo lo importante a tener en cuenta es:
  • El constructor MiClase() es privado. No podrá usarse la palabra clave new.
  • Tenemos un atributo estático llamado unica_instancia que es un puntero a la clase que lo contiene y que tambien es privado. No podra accederse desde fuera de un objeto.
  • El método getInstance() es también estático! Claro, sino no podría accederse hasta tener un objeto de la clase, y justamente este el método que crea el primer (y único) objeto, con lo cual debe ser estático si o si.
class MiClase
{
private:
 MiClase(void);
 static MiClase* unica_instancia;
 
public:
 ~MiClase(void);
 
 static MiClase *getInstance()
 {
  if(unica_instancia == NULL)
   unica_instancia = new MiClase();
   
  return unica_instancia;  
 } 
};


MiClase.cpp
Acá lo importante es inicializar la variable estática unica_instancia. La inicializamos en NULL de forma que nos aseguremos que no se crea ningún objeto hasta que se llame por primera vez a getInstance().
Atención! El caso particular de C++ requiere que las variables estáticas sean definidas en el archivo .CPP y no en el .H. Caso contrario se obtiene un error de compilación.
#include "MiClase.h"

MiClase* MiClase::unica_instancia = NULL;

MiClase::MiClase(void)
{
}
MiClase::~MiClase(void)
{
}

Por ultimo, cabe explicar brevemente lo que hace el método getInstance(). Básicamente, crea una instancia de la clase solo en el caso de que no exista una (por eso el if). Luego devuelve la instancia creada o, sino creó porque ya existia, devuelve la existente. Asi es seguro que no tendremos mas de una instancia.
Saludos!

Un Buen Proyecto (1)

desde Angel "Java" Lopez por lopez

Siguiente Post

En mis charlas de TDD (Test-Driven Development) comento algunas características de lo que tendría que ser un proyecto bien terminado. Algo ya comenté en TDD y Diseño de Implementación (1). Hoy quiero escribir (es decir, pasar en limpio, compartir, explicar un tema para ver si lo entiendo) sobre un tema más amplio: lo que considero un buen proyecto. Pensé inicialmente que bastaría un solo post, pero nones: éste va a ser el primero, y luego seguiré escribiendo.

Pongo algo de contexto. Voy a escribir sobre un proyecto:

- Profesional

- Con desarrollo ágil en equipo, con iteractiones, backlog, etc..

- Cliente externo, con un representante

- Para ejecutar en producción

Es decir, no necesariamente tiene que ser de código abierto (en mi caso en general no es), no es algo que armamos en nuestro tiempo libre (no, es un proyecto de nuestro trabajo de desarrollo de software), no es una demo, va a estar en producción y tendrá un ciclo de vida (no necesariamente apoyado por nosotros: el proyecto tiene una terminación y una entrega final). Igual admito que es difícil abarcar todos los proyectos profesionales. Pero creo que con lo que voy a describir varios proyectos serán incluidos en esta exposición.

Entonces, en este marco, ¿cuáles son las características que tendría que tener un proyecto terminado para que digamos: “es un buen proyecto”? En el sentido de sentir y pensar que lo que entregamos es bueno. Claro, depende de bueno ¿para quién? Como estamos en un proyecto profesional, lo principal es que sea bueno para el cliente (empresa) que nos contrata. Puede ser bueno para nosotros (“uy, aprendí un montón de MVC”), para el equipo (“nos integramos y conocimos”), para nuestra consultora (“uy, con lo que ganamos podemos comprar nuevas oficinas”, o “ahora podemos ser conocidos por haber trabajado en este gran proyecto”), para el mundo (“ahora hay un nuevo framework que todos podrían usar para ser más productivos, etc… “). Pero lo que importa es:

TIENE QUE SER BUENO PARA EL CLIENTE

Vean que más arriba escribí “cliente (empresa)”. Es decir, tiene que ser bueno para la empresa o sector de la empresa que nos contrata. No hay que medir (en principio) que sea “bueno para Charles”, por ser Charles nuestro contacto principal en la empresa. A no ser que sea Charles el que pague la factura, no es el “cliente”. Es un representante del cliente.

Para ponerlo en claro: no es QUE NO IMPORTA absolutamente que nosotros encontremos que el proyecto haya sido bueno para Charles, para el equipo, o para nosotros mismos. No, estoy tratando de encontrar cuál es lo MAS importante.

Pues bien, después de haber participado en este siglo en varios proyectos ágiles, y también viendo el resultado de otros varios más proyectos, con casos de éxitos y fracasos, lo mejor que puedo decir es:

Un proyecto es un buen proyecto terminado y entregado, SI SOLUCIONA EL PROBLEMA DEL CLIENTE

No nos piden simplemente “necesitamos el sistema X”, sino, “necesitamos el sistema X que solucione el problema P”. Otras veces, nos dan más libertad “necesitamos una solución S que solucione el problema P”, pero es menos frecuente el caso. Pero muchas veces (la mayoría de ellas) nos piden “necesitamos el sistema X” sin poner muy en claro el problema que tiene que solucionar.

Para poner un ejemplo. Supongamos que nos piden “Necesitamos un Sistema de Producción”. Puede ser que el contexto del cliente sea:

“Somos una empresa productora familiar, que en los últimos años, con la entrada de la tercera generación en la gerencia, ha podido expandir el mercado en el exterior”

Entonces, puede el problema a solucionar puede ser uno de éstos, entre tantos:

1 - “Se nos ha ido de las manos la producción, necesitamos un sistema que nos permita manejar mejor la asignación de las máquinas. Hoy las desaprovechamos”

2 - “Las máquinas las asignamos bien, pero tenemos problemas en el seguimiento de los insumos que necesitamos y cuándo los necesitamos. No queremos tener stock de esos insumos en estos tiempos de cambio”

3 - “Nuestros principales clientes del exterior nos piden trazabilidad norma (y aquí viene una sigla desconocida para nosotros) de acá a fin de año, sino perdemos nuestro principal contrato con China”

4 – etc

Vean que entendiendo el problema podemos poner distinto énfasis en lo que vamos a construir, y con el representante del cliente, podemos tener más en claro qué es lo que aporta más valor al cliente. En el caso 1, tendremos que poner mayor esfuerzo en un plan de asignación de máquinas, y no tanto en el stock de insumos. En el caso 2, es al contrario. Y en el caso 3, tendremos que estudiar qué es eso que piden de trazabilidad.

Pero vean a lo que voy: podemos entregar el mejor sistema de producción, que asigne con algoritmos de inteligencia artificial las máquinas de la mejor forma posible, escrito con todos los patrones encima, con la mejor UI para desktop, web, tablet, y hasta TV,  pero no es la solución del problema del cliente, si estamos en el caso 3.

ESO ES LO QUE HAY QUE ENTENDER PRIMERO.

A ver, de nuevo:

EL ENTREGABLE DEL PROYECTO DEBE SOLUCIONAR EL PROBLEMA DEL CLIENTE

Y acá entra la capacidad del representante del cliente para ponernos más en claro cuál es el problema real.

No quisiera terminar el post, sin comentar algo. Hay diferencia entre problema y solución. Como escribía arriba, muchas veces nos piden el sistema. Pero tenemos que esforzarnos, como profesionales, para ver si el sistema inicial pedido soluciona o no el problema, o si es el mejor camino para solucionar el problema. En general, eso ya se definió antes de llegar el proyecto a nuestro equipo. Pero igual deberíamos tenerlo en cuenta. Tal vez, en vez de hacer sistema S, podemos hacer sistema S’ que tenga algunas características sugeridas por nosotros que mejoren alcanzar la solución del problema.

Siempre recuerdo a Henry Ford, diciendo: “Si le hubiera preguntado a mis potenciales clientes qué querian, me hubieran pedido ‘caballos más rápidos’”.

Nos leemos!

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

Entrenamientos en Junio: Honduras

Se brindarán los siguientes entrenamientos y certificaciones en San Pedro Sula, Honduras:

Ubiquiti UAC AirMAX: 10 y 11 de Junio

MTCNA: 3 al 6 de Junio

MTCTCE: 6 y 7 de Junio

La entrada Entrenamientos en Junio: Honduras aparece primero en Un Sanjuanino en Rio Cuarto.

Conociendo los hosts conectados en una red local

Hace un par de meses que me pase al mundo MAC, y debo admitir que la transición de Linux a MacOS ha sido mas simple de lo que esperaba, ya que la mayorías de las aplicaciones que uso son de código libre y las puedo utilizar en cualquier plataforma.

En relación a la administración de redes, el otro día tuve la necesidad de saber cuantos dispositivos conectados habían en un LAN, podría haber utilizado un escaneador de IP como Nmap, pero googleando encontré una solución mucho mas fácil y sin necesidad de instalar nada.

Si hacemos ping a la ip de broadcast y luego visualizamos los ARP podremos conocer los host disponibles en la LAN.

EJ: Teniendo el IP 192.168.10.4/24, el comando quedaría:

ping 192.168.10.255

Luego hacemos un:

arp -a

El resultado sería algo así:

internet.local.com (192.168.10.1) at 0:c:cc:cc:fa:7d on en0 ifscope [ethernet]
? (192.168.10.12) at 0:b:fa:aa:aa:dc on en0 ifscope [ethernet]
? (192.168.10.13) at 0:b:fa:aa:aa:dd on en0 ifscope [ethernet]

Excelente Tip. Vía: superuser

La entrada Conociendo los hosts conectados en una red local aparece primero en Un Sanjuanino en Rio Cuarto.

Imperdibles (mayo 13th – mayo 14th)

desde Hipertextos [desde La Plata] por Christian Silva

Algunos vínculos interesantes que voy coleccionando en Delicious

  • Collage sobre los decálogos para escritores – Existen excepciones al número mágico. Borges enumeró dieciséis cosas que se deben evitar en literatura, Vargas Llosa postula quince principios para un novelista, Vonnegut enunció ocho reglas para escribir ficción, García Márquez llegó a siete y George Orwell alcanzó a dictar cinco. Pero el diez parece predominar: Eduardo Torres, el personaje inventado por Augusto Monterroso en Lo demás es silencio, enuncia doce mandatos pero “da la opción al escritor de descartar dos de estos enunciados y quedarse con los restantes diez”. Y Carlos Fuentes anuncia un “Decálogo para el joven escritor latinoamericano” pero al noveno se le acaba el fuelle, y el último: “10. Lo dejo a la imaginación, la palabra y la libertad del joven escritor”. Entre los treinta de The Guardian, dos terceras partes de los invitados escribieron su formulario para escritores como decálogos. Jonathan Franzen y Helen Dunmore llegan hasta nueve, Neil Gaiman hasta ocho, Joyce Carol Oates y Esther Freud formulan siete mandatos, Annie Proulx y P. D. James, cinco, y Diana Athill, tres.
  • La ilusión de los bienes comunes – Hay una paradoja extraña en los movimientos ciberactivistas. Por un lado, sobreestiman las posibilidades de la tecnología. Por otro, cultivan el atavismo. Los gurús tecnológicos proponen analogías entre los DRM y los enclosures (los procesos históricos de expropiación de las tierras comunales en Inglaterra entre los siglos XVII y XIX). Ven similitudes entre la generosidad digital y el potlach (un sistema de festines tradicionales de los nativos de la costa noroeste norteamericana). Nos sugieren que entendamos Internet como un bazar (una institución secular de intercambio mercantil de origen persa).
  • Secretos del SEO Revelados: Un Enlace Gratuito con Mucha Fuerza – Hoy te voy a explicar un pequeño truco que uso desde hace mucho tiempo y que me está dando muy buenos frutos a la hora de posicionar páginas web. El truco consiste en conseguir un enlace de mucha fuerza, de forma gratuita.  (Enfocado sobre todo a tus proyectos de apoyo que tienes o deberías tener al rededor de tu página principal).  -—Editado: Por favor, leer luego el comentario que he puesto en la sección de comentarios para usar esto de forma correcta—
  • The iPad of 1935 – There’s no denying that devices like the iPad, Kindle and Nook have dramatically changed the way that many people consume media. Last year, online retailer Amazon announced that electronic book sales had surpassed print book sales for the first time in history.
  • ¿Qué diferencias hay entre WordPress.com, Blogger y WordPress.org? – Así que esta situación en concreto me ha inspirado la idea de retomarlo una vez más, pero centrándome en un primer post en las diferencias entre los tres productos y hablando en un segundo post que publicaré un poco más adelante desde la perspectiva inversa: cuándo utilizar WordPress.com (o Blogger) como opción preferente frente a WordPress.org

Aprendiendo Ruby

desde Angel "Java" Lopez por lopez

Como ya había anunciado, ayer dí una charla de introducción a Ruby, pueden ver y descargar la presentación en mi Skydrive.

En la presentación hay tres slides todavía en blanco, y slides al final de temas que quedaron expresamente afuera. Pero lean más abajo donde está toda la presentación explicada en detalle, y los ejemplos que usamos.

Para la instalación de Ruby, comenté:

http://www.ruby-lang.org/en/downloads/
En Windows http://rubyinstaller.org/
Dev Kit https://github.com/oneclick/rubyinstaller/wiki/Development-Kit
Mingw, Minimalist GNU for Windows
http://www.mingw.org/

Para esta charla usé Ruby 2.0.0, y aclaré que lo más usado todavía es 1.9.x. Igual, los cambios son evolutivos, no hay grandes “roturas” en 2.0.0, pero como hay algunas gemas y frameworks que todavían corren solamente en 1.9.x, les conviene revisar cuál quieren usar. Al menos en Windows, se pueden instalar las dos versiones, y luego agregar al PATH cuál es directorio binario que queremos usar.

Estuvimos viendo temas de Ruby como lenguaje dinámico e interpretado, sintaxis básica, todo es un objeto, todo es un valor, módulos (comentando al pasar include, faltó extend), evaluación dinámica, su relación con Smalltalk, clases abiertas, ejemplo de Domain-Specific Language, y levantamos un sitio con tres páginas simples, con Sinatra y ERB.

Algunos temas más:

Mencioné que Sinatra usa WeBrick http://www.ruby-doc.org/stdlib-2.0/libdoc/webrick/rdoc/WEBrick.html incorporado desde hace un tiempo directamente en Ruby.

Mencioné Rack http://rack.github.io/ que habría que estudiar alguna vez para entender la infraestructura web de Sinatra y Ruby On Rails (no es necesario pero es intersante). Rack se inspira en trabajos anteriores, principalmente en Python ver http://en.wikipedia.org/wiki/Web_Server_Gateway_Interface

Los ejemplos (tres páginas en Sinatra, y un DSL), quedaron en:

https://github.com/ajlopez/AprendiendoRuby/tree/master/ejemplos

El ejemplo de DSL fue una simple traducción a español del ejemplo de http://jroller.com/rolsen/entry/building_a_dsl_in_ruby

Si les interesa el tema DSL, estoy publicado enlaces en mi otro blog: http://ajlopez.wordpress.com/category/domain-specific-languages/

Y finalmente, la presentación me sirvió para ir escribiendo las primeras páginas de mi tutorial de Ruby en línea:

https://github.com/ajlopez/AprendiendoRuby#aprendiendo-ruby

Lo voy a ir completando con más capítulos, detalle, referencias, fuentes consultadas, ejercicios. También tengo que poner en línea lo que armé alguna vez en PHP: sitio con exámenes por preguntas y respuestas. Tengo también material (si recuerdan este blog, publicado hace ya un tiempo) de PHP y Java para poner en páginas GitHub. Algo más demandante sería escribir sobre Node.js, pero es candidato. Y sobre Clojure. Como mencioné en otro post, al explicar terminamos entendiendo ;-)

Nos leemos!

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

Resolucion de pantalla en linux - [SiS] 771/671 PCIE VGA

desde [A]NTRAX - [L]ABS por ANTRAX (noreply@blogger.com)
 
Hola a todos, hace unos dias decidi pasar mi Notebook bangho a Linux, pero me encontre con que solo me tomaba la resolucion 640x480 y 800x600

Busque por todos lados la solucion, hasta que logre encontrarla.

Lo que hay que hacer es modificar el xorg.conf que seguramente estara vacio. Para hacer esto, abrimos una terminal (CTRL + ALT + T) y tipeamos:
sudo gedit /etc/X11/xorg.conf
Se nos abrira un editor de texto y colocamos lo siguiente:
# xorg.conf (X.Org X Window System server configuration file)
#
# This file was generated by dexconf, the Debian X Configuration tool, using
# values from the debconf database.
#
# Edit this file with caution, and see the xorg.conf manual page.
# (Type "man xorg.conf" at the shell prompt.)
#
# This file is automatically updated on xserver-xorg package upgrades *only*
# if it has not been modified since the last upgrade of the xserver-xorg
# package.
#
# Note that some configuration settings that could be done previously
# in this file, now are automatically configured by the server and settings
# here are ignored.
#
# If you have edited this file but would like it to be automatically updated
# again, run the following command:
# sudo dpkg-reconfigure -phigh xserver-xorg

Section "Device"
Identifier "Configured Video Device"
EndSection

Section "Monitor"
Identifier "Configured Monitor"
Vendorname "Generic LCD Display"
modelname "LCD Panel 1024x768"
Horizsync 31.5-64.0
Vertrefresh 56.0 - 65.0
modeline "1024x768_60.00" 63.50 1024 1072 1176 1328 768 771 775 798 -hsync +vsync
Gamma 1.0
# modeline "640x480@60" 25.2 640 656 752 800 480 490 492 525 -vsync -hsync
# modeline "800x600@56" 36.0 800 824 896 1024 600 601 603 625 +hsync +vsync
# modeline "800x600@60" 40.0 800 840 968 1056 600 601 605 628 +hsync +vsync
# modeline "1024x768_60.00" 63.50 1024 1072 1176 1328 768 771 775 798 -hsync +vsync
# modeline "1280x800_60.00" 40.0 800 840 968 1056 600 601 605 628 +hsync +vsync
EndSection

Section "Screen"
Identifier "Default Screen"
Monitor "Configured Monitor"
Device "Configured Video Device"
EndSection

Con esto logre llevar mi resolución a 1280x768

Espero que les sirva!

Saludos!

Imperdibles (mayo 10th – mayo 13th)

desde Hipertextos [desde La Plata] por Christian Silva

Algunos vínculos interesantes que voy coleccionando en Delicious

  • Las 8 motivaciones del videojugador – Es importante cuando planificamos cualquier estrategia de presencia u optimización de la presencia en los Social Media, conocer el perfil de nuestros usuarios, de nuestro target. En el caso de la Gamificación, que no es más que una estrategia de optimización, vale la pena tener en cuenta, además de las Motivaciones más universales del ser humano, las específicas de cada tipo de videojugador online. Estaremos con Bartle, autor de una de las clasificaciones más conocidas en el Gamification World Congress, en el que también impartiré una ponencia.
  • Escribir y publicar un libro… apoyándote en Internet – Muy interesante la secuencia de tres artículos -hasta la fecha, porque vienen más- que Luis Jiménez ha compartido en su blog acerca de “auto-publicar y vender tus libros“. Lo recomiendo al cien por cien. Entre otras cosas porque están basados en su experiencia personal y parten de algo que se agradece: nos cuenta lo que le ha funcionado y lo que no.
  • W3C decide implementar DRM en HTML5 pese a la oposición – Pese a la oposición de la Electronic Frontier Foundation (EFF) y una petición con 25.600 firmas, el organismo encargado de los estándares de la web, World Wide Web Consortium (W3C) decidió seguir adelante con el plan para integrar una especie de DRM para video en HTML5, anunció su ejecutivo jefe, Jeff Jaffe.
  • Diseño web: Técnicas de persuasión para ofrecer tus servicios – Conocer algunas de las más poderosas técnicas de persuasión te ayudará a mejorar tu presentación, comunicarte en forma más eficiente con tus clientes e incrementar tus chances de conseguirlos. En este artículo te acercamos unos tips al respecto que te serán de mucha ayuda.
  • Folding GNU for Freedom. Conferencia de Richard Stallman – Richard Stallman, figura fundamental del software libre, imparte una conferencia eminentemente práctica sobre obras libres y las licencias adecuadas para "liberar" y poner a disposición pública los resultados de proyectos tanto digitales como analógicos. El fundador del movimiento del software libre a nivel internacional explora en esta presentación los principios y métodos para desarrollar proyectos libres tomando como base un proyecto concreto: la creación de un ñu de Origami (papiroflexia), que viene a representar metafóricamente el GNU, o sistema operativo libre que fue creado por él en los años 80. nos acompaña en una sesión dedicada a la metodología de creación de obras libres y las licencias asociadas.
  • Curso básico de HTML 5 y CSS (I) – En esta guía vamos a detallar los pasos para maquetar y desarrollar una página web desde cero en el lenguaje HTML5. La guía está enfocada para personas que desconocen en su totalidad el lenguaje de programación; si tienes algún conocimiento en HTML estos primeros pasos te parecerán muy básicos. Una de las grandes diferencias de HTML5 con sus versiones anteriores, es que resume la forma de trabajar en los estándares.

Mass Lenguaje de Programación (4) Lexer y Parser

desde Angel "Java" Lopez por lopez

Anterior Post

En la implementación del lenguaje Mass, tengo una enumeración y una clase:

Un Token representa una palabra del código a procesar. El encargado de separar el código en palabras es el Lexer. Y con el Parser se transforma esa corriente de Tokens en expresiones y comandos:

El constructor de Lexer recibe un string:

public Lexer(string text)
{
    this.text = text;
}

Y ese string es procesado para separarlo en tokens. Vean que el Lexer distingue entre operadores (como +) y separadores (como los paréntesis). También toma en cuenta al fin de línea como token (en otros lenguajes, como C, un fin de línea se puede tomar como un espacio en blanco en muchas situaciones). El principal método de Lexer es NextToken, que devuelve el próximo Token del texto. En algunas pocas situaciones, se hace necesario devolver el Token consumido, y para eso está PushToken y varianes.

El Parser interamente maneja un Lexer. Le podemos pedir el próximo comando con ParseCommand, y la próxima expresión con ParseExpression. Cuando el texto en proceso se acaba, esos métodos devuelven null.

Voy a modificar el Lexer para consumir un stream de texto, para poder procesar, por ejemplo, entrada de consola

Tengo que seguir pensando si internamente, unifico comandos y expresiones, como pasa en Ruby, donde cada “comando” tiene un valor (en Mass también es así), y no solamente eso, sino que puede ser usado como expresión en el contexto de un comando.

Nos leemos!

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

Tabla periodica del HTML

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

Encontre esta tabla periodica de HTML y me parecio muy buena, ya que no solo nombra a todos los tags, sino que tambien da una referencia de cada uno de ellos


Imperdibles (mayo 8th – mayo 9th)

desde Hipertextos [desde La Plata] por Christian Silva

Algunos vínculos interesantes que voy coleccionando en Delicious

  • Manejando el fracaso de tu startup – Dos mantras parecen ser parte de la moda del emprendedorismo; “hacemos esto para cambiar el mundo” como si estuviera mal hacerlo para ganar plata y “si no fracasás es que no lo intentás” pero pocos saben como manejarlo o incluso salir a explicarlo… y esta crítica trata de ser constructiva.
  • Fakes, la dinastía tuitera argentina – El diario virtual The Huffington Post realizó un relevamiento de los seguidores de las diez cuentas con más “followers” de Twitter y encontró que el usuario @justinbieber, perteneciente al cantante canadiense y líder del ranking, tiene un 45 % de seguidores considerados “fakes”. El fenómeno de las cuentas falsas en esta red social no es nuevo y representa uno de los puntos más interesantes de la misma.
  • Hernán Casciari: “La industria editorial vende cada vez menos porque la gente lee cada vez más” – Excelente entrevista a Hernán Casciari en la revista extra large Jot Down. En casi 60mil caracteres el escritor/periodista repasa la creación de la Revista Orsai, la economía que la sustenta y el márketing; habla de los lectores, de la política, del Papa, de Messi y de sus adicciones.
  • Trace What You See: The NeoLucida is the First Portable Camera Lucida to be Manufactured in Nearly a Century – Years before the first photographic print and two centuries before Google Glass, was the Camera Lucida, a clever optical device designed by Sir William Hyde Wollaston that utilized a prism to project an image onto a piece of paper so you can trace it, a method that would transform life-drawing for nearly a century. Have you ever used one or seen for sale? Likely not. Your best chance would be scouring Ebay where antique Camera Lucidas sell for upwards of $300. Enter university professors Pablo Garcia (previously) from the Art Institute of Chicago and Golan Levin from Carnegie Mellon who have teamed up to design the NeoLucida, the first portable camera lucida in nearly a century.
  • El cerebro lector en la era digital – Es impresionante cómo nos afecta la textura del papel, de qué manera guardamos lo que leemos. Por ejemplo, solemos recordar partes de lectura de la misma manera que relacionamos accidentes geográficos con los mapas. El papel afecta por cuánto tiempo recordamos lo leído, qué tan fácil nos es mantener la atención en la lectura y otras cuestiones más.
  • Casos de éxito con Drupal Commerce: Edukame – La gestión integra de la tienda se ha implementado con un Drupal Commerce personalizado para el estilo gráfico y el comportamiento de navegación, donde destaca sobre todo lo demás el estilo pinterest de la portada y páginas de categoría que han logrado con la ayuda del módulo Views Fluid Grid que incorpora un plugin muy interesante de jQuery llamado masonry cuya función es organizar los elementos dentro de la página sin que haya espacios entre ellos, proporcionando un resultado muy vistoso. Por supuesto, también hay un modulo que incluye esta librería de forma genérica para facilitar la integración en Drupal sin usar Views Fluid Grid.
  • Cuando los memes atacan – Lo que es un chiste para uno puede ser un insulto para otro, y si bien se le puede pedir a la sociedad una mayor madurez a la hora de separar lo que se dice con malas intenciones de lo que se dice con la mera intención de reír, en última instancia es la víctima de una burla quien da la connotación final a las palabras de alguien, encontrándose con un sentido que le hiere, aunque la idea original no lo quiera. Esto sucede con muchos memes, comentarios y contenido en internet, que en pos de una risa fácil, olvidan que quienes son protagonistas de los mismos también son humanos. El ciberbullying, la imposibilidad de parar un meme, la ambigüedad de la ley, la inerme situación de las víctimas y el humor a costa de otros puestos en cuestionamiento, en un caso único pero que es reflejo de muchos. 
  • Doctoral degrees: The disposable academic – ON THE evening before All Saints' Day in 1517, Martin Luther nailed 95 theses to the door of a church in Wittenberg. In those days a thesis was simply a position one wanted to argue. Luther, an Augustinian friar, asserted that Christians could not buy their way to heaven. Today a doctoral thesis is both an idea and an account of a period of original research. Writing one is the aim of the hundreds of thousands of students who embark on a doctorate of philosophy (PhD) every year.
  • eBooks para profesores universitarios – Los profesores universitarios que son a la vez autores de textos de referencia para sus materias tienen la posibilidad de percibir ingresos adicionales por derechos de autor sobre sus libros en papel. Claro que estos ingresos adicionales están limitados por el 10% sobre el precio de tapa de las unidades que la editorial – como Norma, Granica, Macchi y EUDEBA – reconoce haber vendido.

ncurses es un sentimiento

desde Bunker Blog por Sergio Alonso (noreply@blogger.com)

Todos aquellos que alguna vez jugaron con conio.h, seguramente descubrirán con agrado a ncurses.

Aquí puede verse algunas de las tantas aplicaciones hechas con esa magnifica librería.

WM: LXDE
Terminal: Terminator

Aplicaciones: finch (google chat + skype + irc + etc), turses (twitter), cplay, mutt (con gmail), mytop

Estas app vienen muy bien si les toca una computadora limitada en recursos para trabajar. En este caso, en un Celeron con 1.6 GB de RAM

Si, ya se que estamos en el año 2013. Pero al linuxero le dan estas cosas, total, "se las arregla".

Introducción a Ruby, en Buenos Aires

desde Angel "Java" Lopez por lopez

Gracias a la gente del Microsoft User Group de Argentina, el próximo lunes daré una charla sobre

Introducción a Ruby para Programadores .NET (o para programadores)

http://www.mug.org.ar/Eventos/3893.aspx

(vean de visitar la página porque hay que inscribirse)

El evento es gratuito, y es el lunes 13 de Mayo, desde las 18:30 hasta las 20:30. La idea es explicar algo de Ruby, introductorio, para programadores (sean de .NET o de otros lenguajes/tecnologías) que no sepan Ruby.

Los temas a visitar:

- Sintaxis básica
- Valores básicos: números, string, arreglos, hashes
- Comandos if, for, ciclos
- Clases y objetos
- Herencia
- Creación de objetos
- Variables de instancia y de clase
- Módulos
- Elementos de metaprogramación
- Definiendo DSL (Domain Specific Languages) internos en Ruby
- Gemas (paquetes de Ruby)
- Ecosistema de desarrollo
- Desarrollo Web, especialmente Sinatra, que usa Rack

Espero poder explicar en dos horas cuál es el panorama de desarrollo Ruby, para cualquier programador interesado en comenzar con este lenguaje.

Nos leemos!

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

Imperdibles (mayo 4th – mayo 7th)

desde Hipertextos [desde La Plata] por Christian Silva

Algunos vínculos interesantes que voy coleccionando en Delicious

  • Marc Augé: “Las redes sociales no harán la revolución” – ¿Estamos concediendo demasiado poder a esas redes sociales? Les estamos otorgando unos poderes que no tienen. Esos medios de comunicación son medios, no son una finalidad, no crean un mundo por sí mismos. Por supuesto no hay que condenarlos pero sí entender qué podemos esperar de ellos. No te permiten ser más sabio, ni tomar más conciencia sobre tu propia vida.
  • MetricSpot. Análisis SEO gratuito para tu web – Desde PuntoGeek nos llega una herramienta online que puede venir bien a la hora de realizar un primer análisis SEO gratuito de nuestra web. Se trata de MetricSpot y está claro que este tipo de servicios online gratuitos son muy básicos y no acaban de ofrecer demasiados datos precisos, ya que la realidad muchas veces tiene detalles que se le escapan a un análisis en el que solo debes poner un dato (la URL), pero aún así, nos ofrece una primera visión (repito, seguramente sesgada) sobre SEO, contenido, usabilidad, aspectos técnicos y redes sociales, que pueden ayudarnos a modificar alguna cosilla y mejorar un poco nuestro SEO.
  • Serendipia, la innovación como sorpresa – Los encuentros imprevistos, los descubrimientos casuales y los ambientes informales empiezan a poner patas arriba la innovación clásica. La ‘serendipia’ comienza a impregnar sectores tan diversos como el urbanismo o el empreendedorismo. Hubo una época —no tan lejana— en la que la innovación dependía exclusivamente de departamentos de I+D (Investigación y Desarrollo). Las ideas se mantenían cerradas a cal y canto.
  • ¿Qué ocurre con tu vida cuando dejas Internet durante un año? – Paul Miller decidió, a sus 26 años, clausurar su intensa vida digital para envolverse en un arduo experimento; al final de está etapa el ex-célibe nos comparte sus lecciones y vivencias. Una parte de mí estaría encantada con la posibilidad de presentarme como el protagonista de está crónica, pero no es el caso. En lo personal considero que Internet ha revolucionado la realidad humana, desde procesos cognitivos que se llevan a cabo a nivel neuronal, hasta múltiples hábitos sociales, patrones económicos y vértices de la conciencia. Sin embargo, también he presenciado el lado oscuro de esta apasionante herramienta: compulsividad, reemplazo digital de encuentros físicos, atracción desbordada por ‘vivir’ frente a una pantalla, etc.
  • El pequeño milagro en el escritorio de Tim – Muchas grandes cosas han tenido inicios humildes. Pero pocas tan colosales y a la vez de arranque tan humilde como la Web, que 20 años después tiene no ya un solitario sitio alojado en una computadora de escritorio, sino más de 630 millones de sites operando en inmensas granjas de servidores.

Debugueando en root con pydev

desde aurelianito por aurelianito (noreply@blogger.com)
Quiero poder debuguear cosas que estoy desarrollando y requieren root. Para eso, me hice un pequeño wrapper que sirve para ejecutar cualquier programa de python y se conecta a un pydevd server

#!/usr/bin/env bash
PYDEVD_LOCATION=/home/aure/Aptana_Studio_3/plugins/org.python.pydev_2.7.0.2013032300/pysrc
export PYTHONPATH=$PYDEVD_LOCATION:$PYTHONPATH
echo PYTHONPATH=$PYTHONPATH
python $PYTHONARGS -c "import pydevd;pydevd.settrace(suspend=False,trace_only_current_thread=False);import sys;print sys.argv;sys.argv=sys.argv[1:];print sys.argv;execfile(sys.argv[0])" $@


Para usarlo, copienlo en un archivo ejecutable que esté en el path y cambien PYDEVD_LOCATION para que apunte a dónde tienen pydev (en el script de arriba está como es en mi compu).

A partir de ahora puedo debuguear en root haciendo sudo pydevd my_script_que_corre_como_root.py y lo abre en el debugger de eclipse.

Happy hacking,
Aureliano.

Kernel de Google Glass disponible

Hace un par de semana comente la posibilidad en Estados Unidos de probar o ser parte del proyecto Google Glass.

Hoy me encuentro que está disponible el Kernel (código fuente GPL) de Google Glass.

Excelente noticias para quienes les guste la fantasia ;)

La entrada Kernel de Google Glass disponible aparece primero en Un Sanjuanino en Rio Cuarto.

Las Malvinas son Argentina…

Acabo de encontrar algo que me ha llamado la atención y hasta me ha agradado mucho. Haciendo unas conversiones de divisas en XE.com, me encontré que tienen a las Islas Malvinas como Argentina.

En la siguiente captura se puede apreciar que al intentar colocar Pesos Argentinos, me daba como opción a las Islas Malvinas.

Esto es bueno porque no la toman como Islas Falklands como las llaman los británicos y si por el nombre que les llamamos el resto del mundo, Islas Malvinas.

Internamente me da mucha bronca que en los tiempos que estamos viviendo y los maduras que están las sociedades, aún hayan este tipo de colonialismo, acto de pirateria y demás en un territorio. Discusión que será a lo mejor tratada en otro post.

Tan solo quería notar el llamado de Islas Malvinas como soberanía Argentina.

La entrada Las Malvinas son Argentina… aparece primero en Un Sanjuanino en Rio Cuarto.

Las compañias de telefono nos engañan..?

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

Hola a todos, en este post quiero poner al descubierto a estas 3 compañias "Claro, Movistar, Personal"...
Como es normal, cuando realizamos una llamada y esta persona nos atiende, se nos descuenta credito. Pero que pasa si esta persona no atiende..?
Cuando la persona no atiende, se activa algo llamado "Desvio de llamadas". El desvio de llamadas, lo que hace es desviar justamente la llamada a otro numero preestablecido, pero como en su mayoria nadie configura esto, por defecto manda a la contestadora y esto es cobrado como una llamada.

Por suerte existe una forma muy facil para solucionar esto y es marcando ##002# y el boton para llamar. Y esto desactiva el desvio de llamadas del telefono.

 
Y para aquellos que los hayan desactivado y lo quieran volver a poner tienen que marcar **62*555# send para contestador cuando esta el celu apagado, **67*555# send para activar el contestador cuando estas hablando y te llega otra llamada, y **61*555# send para activarlo cuando no lo podes contestar.


Primeros pasos con Kali-Linux

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

Hola a todos, esta es una guia rapida de que hacer despues de instalar Kali-Linux.

Como todos ya sabemos, Kali Linux es la continuacion del Backtrack y es una distro avanzada de Pentesting. Por comentarios que he leido y por lo que he alcanzado a comprobar, es una distro bastante estable basada en Debian y que puede ser usada como sistema base. Obviamente no estilo oficina, pero si para desarrollar, navegar y pentestear.

Para aquellos que ya hayan instalado el sistema operativo y no se puedan loguear, lo unico que deben hacer es presionar en Otro.. y loguearse con los siguientes datos:

User: root
Pass: (password que colocaron en la instalacion)

Una vez adentro, modificaremos los repo. En una consola coloquemos:
# nano /etc/apt/sources.list

Esto nos abrira el sources.list y colocamos las siguientes lineas debajo de la de kali

deb http://http.kali.org/kali kali main contrib non-free 
deb http://security.kali.org/kali-security kali/updates main contrib non-free

Y ahora para actualizar el sistema con los nuevos repositorios, colocamos lo siguiente en la consola:

# apt-get update && apt-get upgrade && apt-get dist-upgrade



Una vez finalizado, podremos instalar las aplicaciones normales como gedit, synaptic, etc

Espero que les sea de utilidad!

Evil Foca

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

Evil Foca (Alpha Version) es una herramienta para pentester y auditores de seguridad que tiene como fin poner a prueba la seguridad en redes de datos IPv4 / IPv6.

La herramienta es capaz de realizar distintos ataques como:

    MITM sobre redes IPv4 con ARP Spoofing y DHCP ACK Injection.
    MITM sobre redes IPv6 con Neighbor Advertisement Spoofing, Ataque SLAAC, fake DHCPv6.
    DoS (Denegación de Servicio) sobre redes IPv4 con ARP Spoofing.
    DoS (Denegación de Servicio) sobre redes IPv6 con SLAAC DoS.
    DNS Hijacking.

Automáticamente se encarga de escanear la red e identificar todos los dispositivos y sus respectivas interfaces de red, especificando sus direcciones IPv4 e IPv6 y las direcciones físicas.


 Evil Foca está dividida en 4 paneles, a la izquierda el panel encargado de mostrar los equipos encontrados en la red, donde se podrá agregarlos a mano, y filtrar los resultados obtenidos.

El segundo panel, dispuesto en el centro con todos los posibles ataques a realizar con la herramienta, y a su derecha una breve descripción de cada uno de ellos.

Colocado bajo el panel anterior, se muestran los ataques que se están realizando, su configuración y su estado, permitiendo activarlo o desactivarlo.

Por último, el panel inferior donde se imprime un log de los eventos de la Evil Foca.

Fuente y Descarga

API MIKROTIK Tercera parte – Nuestro primer ejemplo (codigo abierto)

desde Blog tech-nico.com por soporte

Hola amigos.

Tal como lo habíamos anunciado en la Segunda parte, vamos a dar un caso de uso real,
en esta ocasión dedicado para el señor Nemox de Micromax Computación R.L. (Barinas – Venezuela) El nos pidio hacer algo especifico: Poder controlar la lista de “Hotspot > IP-Bindings” desde su celular; y  para comprobar que con el API se puede hacer prácticamente todo, tome su caso como un desafió.

Y e aqui el resultado:
API-hotspot_ipbindingsapi_desde_iphone

A la izquierda esta visto desde el Iphone de Nemox. Y a la derecha desde el google chrome.

Muestra la lista de Hotspot – Ip Bindings y permite eliminar, habilitar y deshabilitar un cliente. El boton “agregar” no esta programado, pero dejo el código abierto para que cualquiera pueda editarlo y agregar o quitar funcionaliedades.

Esta armado el esqueleto del sitio en HTML5 y CSS3, los eventos y funcionalidades estan hechos con JQuery y el manejo del API con PHP5.

Vamos por partes:

El codigo de los 4 botones, Agregar, Eliminar, Habilitar, Deshabilitar, esta en el archivo index.html; si lo abrimos y vamos hacia el final, mas precisamente en la linea 110 veremos el codigo de cada boton. Pueden notar que cada boton tiene un codigo muy parecido. Lo que hace es, si esta seleccionado algun cliente (binding), toma su ID de un campo oculto (hidden field) para luego enviarlo como parametro al PHP que ejecuta la accion dentro del routerOS.
En la linea 119 vemos como ejemplo la ruta api/hotspot_general.php?ac=enable&id=numero  que tiene 2 parametros: “ac” (accion) que en nuestro caso son  las de los botones e “id” que es el codigo que identifica al IP Binding seleccionado con 1 click.

index.html
APIcodigobotones

APIcodigoPHP

 

api/hotspot_general.php
Este es el archivo que se comunica con tu RouterOS por medio del API, tienes que editar las primeras lineas con los datos de tu servidor: Revisen los otros archivos de la carpeta “api”.

$ipRouteros=”192.168.33.200″;
$Username=”usuario”;
$Pass=”contraseña”;
$api_puerto=8727;

A partir de la linea 30 comenzamos a ver los casos para el parametro “ac” y depende el parametro que le pasemos es lo que ira a ejecutar. Creo que esta muy facil de entender. Para el boton “Agregar” debemos añadir un nuevo “case” con el parametro correspondiente.

El codigo que ejecuta la accion en el Mikrotik es este:

case “enable”:
$API->write(“/ip/hotspot/ip-binding/enable“,false);
$API->write(“=.id=”.$id,true);
$READ = $API->read(false);
$API->parse_response($READ);
break;

Es muy facil de entender:

Hay comandos que nos solicitan datos. Antes de ejecutar el codigo con PHP lo probamos en la consola. Escribimos /ip hotspot ip-binding print  y vamos a saber quien esta desabilitado y su codigo ID.
Tomemos cualquier nro para testear y probemos:  /ip hotspot ip-binding enable.(enter) y nos va a pedir el ID, en nuestro ejemplo de prueba ponemos el 7 que esta deshabilitado.

API-consola

Bien, aqui tenemos estas 2 lineas:

$API->write(“/ip/hotspot/ip-binding/enable”,false);
$API->write(“=.id=”.$id,true);

El flag false o true se refiere a que si este comando requiere de un dato, id, etc todavia no ejecuta el comando hasta no tener todo lo que necesita. Como vemos en la segunda linea el flag es true ya que el comando esta completo y lo manda a ejecutar.

Las siguientes 2 lineas…

$READ = $API->read(false);
$API->parse_response($READ);

son la respuesta de lo que ejecutamos, que en nuestro codigo no la estamos mostrando. Si el numero de ID no existiera, nos devolvería un error de “no such item”. O si el comando ejecutado nos traeria una lista deberiamos recorrer el array $READ con un for para mostrar lo que se nos antoje.

Hay cosas que no las estoy explicando porque estan muy bien comentadas. Si no se entiende algo por favor pregunten.

Acá va el código abierto del ejemplo: mikrotik-test

Enjoy the saturday!
_______________________________________
Primero en tech-nico.com Autor Nicolas Daitsch

Especialización Wireless en Rosario, Argentina

Estaremos brindando una excelente jornada de especialización Wireless tanto de MikroTik RouterOS como Ubiquti en Rosario a mediados de Mayo.

MTCWE: 13 y 14 de Mayo – Ubiquiti AirMAX 15 y 16 de Mayo.

Mas información en www.AcademiaDeEntrenamientos.com

La entrada Especialización Wireless en Rosario, Argentina aparece primero en Un Sanjuanino en Rio Cuarto.

Ecriptar – Desencriptar datos utilizando una clave privada PKCS12 con JAVA ANDROID

desde Exequiel Catalani por exequielc
Este tutorial esta destinado a desarrolladores que quieran incorporar seguridad dentro de sus programas. Con el fin de crear una firma digital  necesitaremos crear nuestra clave privada ( en nuestro caso del tipo P12 o PKCS12) para ello ejecutamos la siguiente linea de codigo en la consola de windows o CMD keytool -genkeypair -alias my_certificate [...]

Que es una firma digital?

desde Exequiel Catalani por exequielc
Que es una firma digital? Bien según Wikipedia una firma digital es  .. un mecanismo criptográfico que permite al receptor de un mensaje firmado digitalmente determinar la entidad originadora de dicho mensaje (autenticación de origen y no repudio), y confirmar que el mensaje no ha sido alterado desde que fue firmado por el originador (integridad)1 2   La firma digital se aplica [...]

Learn by doing with emacs

desde Gastón Ramos - Ruby, Rails... por Gastón Ramos

Continúo con el tutorial práctico de Emacs, hoy aprendí las teclas básicas para mover el cursos através del texto, les dejo un pequeño resúmen:

	C-f	Move forward a character
	C-b	Move backward a character

	M-f	Move forward a word
	M-b	Move backward a word

	C-n	Move to next line
	C-p	Move to previous line

	C-a	Move to beginning of line
	C-e	Move to end of line

	M-a	Move back to beginning of sentence
	M-e	Move forward to end of sentence


Ahora a practicar!


Tagged: editor, emacs, tutorial

Learn by doing with emacs

desde Gastón Ramos - Ruby, Rails... por Gastón Ramos

Hoy empecé a hacer el tutorial de emacs (estoy usando emacs24) que viene “de fábrica”, Learn by doing.
Aprendí cosas básicas que no sabía (muy mal lo mío), por ejemplo, como moverme en la pantalla:

C-v moverme hacia adelante un pantalla
M-v moverme hacia atrás una pantalla

Y algo que me gustó mucho es esto, apretando

C-l

hacemos que la pantalla se redibuje y deje en el centro
el texto que tenemos dónde está el cursor, genial!

Otra cositas para moverme por el texto:

			  Previous line, C-p
				  :
				  :
   Backward, C-b .... Current cursor position .... Forward, C-f
				  :
				  :
			    Next line, C-n

Estas combinaciones de teclas no son caprichosas y uno de los objetivos que
tiene es que mantengamos las manos en la posición standard.
Para arrancar el tutorial presionar las teclas C-h t dentro del editor emacs.


Tagged: editor, emacs

Recuperación de datos con Autopsy Forensic Browser

desde El blog de Pablo por pablo

autopsy-01

Cuando borramos datos en nuestro disco (ya sea intencional o accidentalmente), lo que estamos haciendo en realidad es marcar los sectores que antes ocupaban como espacios libres. Es por eso que si nos damos cuenta a tiempo que esta acción no era adrede, es posible recuperar parte de los archivos eliminados con la ayuda de alguna herramienta de análisis forense como por ejemplo, Autopsy Forensic Browser. Claro que para que este tipo de herramientas sea funcional, no deberíamos seguir escribiendo en la unidad a recuperar para evitar pisar el espacio libre con nuevos archivos. Es por eso que lo primero que debemos hacer es crear una imagen del disco y trabajar sobre dicha imagen.

Entonces antes que nada lo que debemos hacer es crear la imagen de disco, para lo cual no existe mejor herramienta que el comando dd de linux.

$ dd if=/dev/sdd of=/media/hd/imagen_a_recuperar.dd

Si no contamos aún con Autopsy, procedemos a su instalación descargando la aplicación desde el sitio web o desde los repositorios propios de cada distribución y luego ejecutando la misma desde la linea de comandos y accediendo desde un browser vía http://localhost:9999/autopsy .

$ sudo aptitude install autopsy
$ autopsy
 
============================================================================
 
                       Autopsy Forensic Browser 
                  http://www.sleuthkit.org/autopsy/
                             ver 2.24 
 
============================================================================
Evidence Locker: /var/lib/autopsy
Start Time: Thu Apr  4 15:26:19 2013
Remote Host: localhost
Local Port: 9999
 
Open an HTML browser on the remote host and paste this URL in it:
 
    http://localhost:9999/autopsy
 
Keep this process running and use <ctrl-c> to exit

Una vez que accedemos a la interfaz, se debe crear un nuevo caso y agregar la imagen del disco a recuperar. Los siguientes pasos son bastante intuitivos, en donde debemos elegir la unidad a analizar, y luego los archivos que encontramos y los borrados que se puedan recuperar. Toda esta información tiene varias formas de revisión (ascii, hexa) y desde la misma herramienta se pueden generar reportes con la información general, los meta-datos y el contenido de los archivos.

autopsy-02

autopsy-03

autopsy-04

autopsy-05

autopsy-06

autopsy-07

autopsy-08

autopsy-09

autopsy-10

Generación de reportes

Por cada evidencia encontrada Autopsy genera un completo reporte sobre el estado, atributos, características y contenido de dicha evidencia. Estos reportes son de gran ayuda en el momento del análisis de la evidencia y como elemento probatorio, en caso de que exista un proceso legal llevado a juicio. El reporte permite visualizar el estado de MD5 y SHDA1, con el fin de comprobar que la evidencia examinada desde una copia no ha sido modificada o alterada con respecto a la evidencia que reside originalmente.

autopsy-11

Escuchando los gritos del disco!

Generalmente antes de perdidas de datos por falla en el disco, este nos avisa pero hay que estar atentos y saber escuchar. Para identificar estos avisos podemos utilizar SmartMonTools, quien nos señalará los errores de I/O de la unidad.

Al igual que Autopsy, SmartMonTools se encuentra en los repositorios de casi todas las distribuciones de GNU/Linux, sino se puede instalar descargando desde la página web oficial.

$ sudo aptitude install smartmontool

Descomentamos y editamos las siguientes lineas del archivo de configuración /etc/default/smartmontools:

enable_smart="/dev/sda /dev/sdb"
start_smartd=yes

e iniciamos el servicio:

$ sudo /etc/init.d/smartmontool start

Para verificar que funciona correctamente usaremos el siguiente comando

$ sudo smartctl -i /dev/sda
smartctl 5.41 2011-06-09 r3365 [x86_64-linux-3.0.0-32-generic] (local build)
Copyright (C) 2002-11 by Bruce Allen, http://smartmontools.sourceforge.net
 
=== START OF INFORMATION SECTION ===
Model Family:     Western Digital Caviar SE16 Serial ATA
Device Model:     WDC WD2500KS-00MJB0
Serial Number:    WD-WCANKK622193
Firmware Version: 02.01C03
User Capacity:    250.059.350.016 bytes [250 GB]
Sector Size:      512 bytes logical/physical
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   7
ATA Standard is:  Exact ATA specification draft version not indicated
Local Time is:    Thu Apr  4 17:13:40 2013 ART
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

Para proceder al test de un disco duro de los listados anteriormente, ejecutamos

$ sudo smartctl -d scsi -H /dev/sda

Y si todo va bien, en ese disco duro deberíamos obtener un mensaje parecido a éste:

smartctl 5.41 2011-06-09 r3365 [x86_64-linux-3.0.0-32-generic] (local build)
Copyright (C) 2002-11 by Bruce Allen, http://smartmontools.sourceforge.net
 
SMART Health Status: OK

Invalid private key

desde aurelianito por aurelianito (noreply@blogger.com)
Poner un certificado nuevo en un ELB debería ser fácil, pero no. Genero un .csr y una clave privada a partir de un .conf usando openssl, lo mando a la autoridad certificante y cuando lo quiero subir a AWS se queja, "Invalid private key".  ¿Qué carajo te pasa AWS?

Lo que pasa es que es hincha bolas. Solo toma claves RSA. Si tu clave privada empieza así:
-----BEGIN PRIVATE KEY-----

Hay que transformarla en una que empiece así:
-----BEGIN RSA PRIVATE KEY-----

Para eso, hay que correr un comandito en openssl:
openssl rsa -in my.private.key -text

La salida está en el formato que necesito :D. Por suerte esto ya lo habían descubierto antes, porque sino hubiera estado mucho más tiempo para encontrarlo.

Happy hacking,
Aureliano.

Tip Linux/Bash: rename, un comando muy cheto para renombrar un conjunto de archivos

desde Gastón Ramos - Ruby, Rails... por Gastón Ramos

Hace un tiempo atrás tuve que renombrar un conjunto de archivos, como soy vago, no quería hacerlos a mano uno por uno, así que buscando un poquito
me encontré con este hermoso script en perl: rename, que en realidad es un symlink a /usr/bin/prename. Rename sirve para renombrar un conjunto de archivos
utilizando un regex, por ejemplo para eliminar la extensión .bak de todos los archivos:

rename 's/\.bak$//' *.bak

o para cambiar todas la letras mayúsculas por minúsculas:

rename 'y/A-Z/a-z/' *

como pueden ver las limitaciones están en la imaginación y el conocimiento de regex de cada uno.

Este fué el primer tip Linux/Bash, dicho sea esto, me comprometo a escribir uno por semana.

Los ejemplos de este artículo fueron extraídos/copiados del manual de rename (man rename).


Tagged: bash, debian, linux, rename

API MIKROTIK Segunda parte – Usando el API con PHP

desde Blog tech-nico.com por soporte

En la primera parte, explicamos cual podría ser su uso y para que sirve.
Ahora vamos a explicar como se configura el API en pocos pasos, con un poco de PHP y usando las clases creadas por Denis Basta. (version 1.3 o 1.4), con apenas un minimo cambio hecho para que la clase “connect” permita pasar ademas el numero de puerto del RouterOS como parametro.

Yo estoy familiarizado con programar en PHP pero para el que no, pueden hacerlo con el lenguaje que desee. En la Wiki de Mikrotik podran encontrar ejemplos para:

Paso 1: Configura tu RouterOS

a) Habilitar el servicio API.
desde IP > Services. Seleccionas la fila que dice “api” y la habilitas, luego doble click sobre ella para editar. Puedes asignarle el puerto que quieras, pero por defecto usa el 8728 tcp. Si te gusta tener todo ecualizado podrías agregarlo en los mangles para darle QoS. Finalmente donde dice “Avaliable From” es la direccion IP desde donde estara el API corriendo. En nuestro caso, como usaremos PHP puede ser el servidor Apache.  (sigue los pasos de la imagen).
ip-services-api

 

b) Crear un grupo
Para darle seguridad necesitamos crear un usuario y un grupo nuevo dentro del RouterOS donde queremos ordenar nuestras tareas diarias. Para ello vamos a “System > Users > Groups” y presionamos en el icono “+”. En esta ventana simplemente escribimos el nombre del grupo, (para este ejemplo yo le puse “tugrupoapi”) y elegi las politicas “read, write, api”. Damos click en OK
user_api_group

c) Crear un usuario
Luego de crear el Grupo, nos movemos a la pestaña Users como esta en la imagen a continuacion. Presionamos el icono “+” para crear un usuario nuevo.
Name: aqui escribiremos nuestro nuevo nombre de usuario: Ejemplo blog.tech-nico.com, (puedes crear el tuyo).
Group: elegimos el grupo “tugrupoapi” (ver el punto “b”),
Address allowed:  Es la IP que tiene permitido acceder a nuestro RouterOS a través del API. “El apache server en nuestro caso”,
Password: tipeamos nuestro password, asegurate que sea fuerte.
Finalmente click en el boton “OK”.

user_api_user_add

Paso 2: Crear un script para testear el acceso: conectar_test_api.php

<?php require_once(‘api_mt_include2.php’); ?>
<?php
$ipRouteros=”200.20.30.40″; // tu RouterOS.
$Username=”blog.tech-nico.com”;
$Pass=”tupassword”;
$api_puerto=8728;

$API = new routeros_api();
$API->debug = false;
if ($API->connect($ipRouteros , $Username , $Pass, $api_puerto)) {
$API->write(“/system/ident/getall”,true);
$READ = $API->read(false);
$ARRAY = $API->parse_response($READ);
$name = $ARRAY[0]["name"];
if(count($ARRAY)>0){ // si esta conectado
$API->write(“/system/licen/getall”,true);
$READ = $API->read(false);
$ARRAY = $API->parse_response($READ);
$nlevel = $ARRAY[0]["nlevel"];
$API->write(“/system/reso/getall”,true);
$READ = $API->read(false);
$ARRAY = $API->parse_response($READ);
$cpu = $ARRAY[0]["cpu"];
$cpu_frequency = $ARRAY[0]["cpu-frequency"];
$arquitectura = $ARRAY[0]["board-name"];
$API->write(“/system/pack/getall”,true);
$READ = $API->read(false);
$ARRAY = $API->parse_response($READ);
$version = $ARRAY[0]["version"];

echo ‘<img src=”icon_led_green.png” />&nbsp;’;
echo “<strong>”.$name.”(” .$arquitectura. “)</strong>&nbsp;&nbsp;”;
echo “v:” . $version. “&nbsp;&nbsp;”;
echo “level:” . $nlevel . “&nbsp;&nbsp;”;
echo $cpu.”(“.$cpu_frequency.” Mhz.)”;
}else{ //el usuario esta of line
echo ‘<img src=”icon_led_grey.png” />&nbsp;’.$ARRAY['!trap'][0]['message'];
}

}else{
echo “<font color=’#ff0000′>La conexion ha fallado. Verifique si el Api esta activo.</font>”;
}
$API->disconnect();
?>

Paso 3: Editamos las lineas que dicen:

$ipRouteros=”200.20.30.40″; // tu RouterOS.
$Username=”blog.tech-nico.com”;
$Pass=”tupassword”
$api_puerto=8728;

Paso 4: Finalmente subimos por FTP los archivos a nuestro servidor Web y ejecutamos en el navegador el archivo conectar_test_api.php;
test_php_navegador
Si todo salio bien, vamos a ver una pantalla parecida a la de arriba. Lo que hicimos fue loguearnos mediante el API a nuestro servidor, y luego traer el nombre “Identity”, la plataforma, la version del ROS, que licencia tiene instalada, etc.

Descarga aqui todos los archivos de este ejemplo.

Como veran, este seria el primer paso para comenzar a programar tus scripts. Ya teniendo esto funcionando vamos a poder realizar varios ejemplos que voy ir posteando en mi tiempo libre.

Cualquier cosa comenten que les respondo enseguida.

_______________
Nicolas tech-nico.com/blog

Cambiando el MTU

desde aurelianito por aurelianito (noreply@blogger.com)
Por algún motivo, mi conexión wifi está dropeando paquetes. No creo que sea el aparato, ya que probé con 2 distintos. Ahora voy a probar otra cosa. Lo que voy a hacer es cambiar el MTU (o sea el tamaño máximo de cada paquete) para la conexión wifi para ver si eso lo arregla.

Hacer eso en Windows 7 es re-oscuro. Googleando encontré acá cómo hacerlo. Dejo las instrucciones abajo para que quede claro:


  1. Abrí un cmd cómo Administrator (botón derecho en Todos los Programas > Accessorios > Símbolo de Sistema y elegí Ejecutar como administrador) ...
  2. Escribí netsh y esperá el prompt
  3. Escribí interface y esperá el prompt
  4. Escribí ipv4 y esperá el prompt
  5. Escribí show interfaces y fijate cuál es la conexión que querés tocar (en mi compu fue Conexión de red inalámbrica)
  6. Escribí set subinterface "Aca va el nombre de la conexion que queres cambiar" mtu=1400 store=persistent
Creo que eso arregla el problema.

Happy hacking,
Aureliano.

Configurar acentos con teclado US en GNU/Linux Debian

desde Gastón Ramos - Ruby, Rails... por Gastón Ramos

Hace poco adquirí una laptop Sony Vaio S series ultrabook con teclado US, y por unos días estuve escribiendo sin acentos, obviamente esta no era una forma correcta de escribir, así que después de un poco de investigación encontré la forma de configurar el teclado correctamente, así:

Editar el archivo /etc/default/keyboard

XKBMODEL="pc105"
XKBLAYOUT="us"
XKBVARIANT="intl"
XKBOPTIONS="lv3:ralt_switch,terminate:ctrl_alt_bksp"

BACKSPACE="guess"

básicamente lo que tengo es un teclado pc105, pero el detalle
a tener en cuenta es en XKBOPTIONS la opción “lv3:ralt_switch”
que hace que cuando apretamos la tecla alt derecho, las funciones de algunas teclas cambien, entonces para escribir una a acentuada, lo que tenemos que hacer es apretar “alt-der” + “‘” y luego la “a”.

Así que ahora podemos disfrutar de los acentos, y para escribir una “ñ” tenemos que apretar: “alt-der” + “shift” + “~” y luego la “n”.


Tagged: configuración, debian, teclado

Línea de comando svn por proxy http

desde aurelianito por aurelianito (noreply@blogger.com)
Para salir a través de un proxy usando la línea de comando de svn hay que cambiar la configuración del cliente de svn. Una opción es ir a tocar el archivo ~/.subversion/servers, otra opción es pasarle por línea de comando host y port del proxy así:

svn --config-option servers:global:http-proxy-host=the.proxy.server --config-option servers:global:http-proxy-port=3128  checkout http://some.svn/repo

Happy hacking!

Construido con Eco v0.1