sábado, 12 de noviembre de 2016

Recuperando archivos modificados por el scandisk de windows

A menudo suele suceder que insertamos un pen drive en una maquina windows y aceptamos que escanee en busca de errores. A partir de ahi nuestros archivos desaparecen. Scandisk hace una verificación de la estrtructura de archivos y si es inconsistente mueve todo a una carpeta 0000.found
y renombra los archivos.

una manera de recuperar eso archivos es con las facilidades que ofrece Linux para trabajar desde consola.
Aqui publico el script (incocncluso) a partir del cual se puede recuperar esos archivos:




 #!/bin/bash
# buscar archivos pdf por meta datos
# for f in  `file *|grep PDF| awk '{print $1 }'|tr -d :`; do
#buscar archivos word 2007
#for f in  `file *|grep 2007+|grep Word|awk '{print $1 }'|tr -d :`; do
# buscar archivos PowerPoint
#for f in  `file *|grep "Office PowerPoint"|awk '{print $1 }'|tr -d :`; do
# buscar archivos Word
#for f in  `file *|grep "Office Word"|awk '{print $1 }'|tr -d :`; do
#buscar archivos Excel 2007
#for f in  `file *|grep 2007+|grep Excel|awk '{print $1 }'|tr -d :`; do
#for f in  `file *|grep JPEG|awk '{print $1 }'|tr -d :`; do
# buscar archivos Excel
#for f in  `file *|grep "Microsoft Excel"|awk '{print $1 }'|tr -d :`; do
# buscar archivos word 10
#for f in  `file *|grep "Microsoft Word 10"|awk '{print $1 }'|tr -d :`; do
# buscar archivos word 9
for f in  `file *|grep "Microsoft Word 9"|awk '{print $1 }'|tr -d :`; do

NEWFILE=`echo $f | sed 's/.CHK$//'`

# renombrar los seleccionados
mv $f ../$NEWFILE.xls
done

jueves, 9 de junio de 2016

The house of the rising sun



La versión de The House of the Rising Sun de The Animals sonaba nueva. Dave Marsh la describe como el "primer éxito de folk rock".

El escritor Ralph McLean, de la BBC, está de acuerdo con este planteamiento: "Es sin duda la primera canción folk rock", a la que calificó como "un sencillo revolucionario", agregó que "el rostro de la música moderna ha cambiado para siempre".

En algunas versiones, el tema se interpreta desde la perspectiva de una mujer que sigue a un apostador a Nueva Orleans y que termina prostituyéndose en La Casa del Sol Naciente y que aconseja, en fragmentos de la canción, no seguirle los pasos (Not to do what I have done). The Animals la interpretó desde la perspectiva de un hombre, jugador y borracho, que cuenta cómo esta casa es la perdición de varios, y cómo ha perdido su vida inmerso en pecado y miseria.

The Animals comenzó a interpretarla durante una gira de conciertos con Chuck Berry, con quien la utilizó como cierre para diferenciarse de las otras actuaciones que finalizaban con canciones rockeras.3 Generó una reacción sorprendente por parte de la audiencia, inicialmente reacia. El productor Mickie Most vio en esta versión un éxito en potencia.

Grabada en una sola toma el 18 de mayo de 1964, comienza con el famoso arpegio en la menor del guitarrista Hilton Valentine, que ha sido inspiración para muchos guitarristas. La destacada y particular ejecución vocal de Eric Burdon ha sido definida como "aulladora"," conmovedora", y "profunda y gravosa como el carbón del noreste inglés en la ciudad de Newcastle". Finalmente, el palpitante órgano de Alan Price completa el sonido de la canción.

Burdon diría tiempo después:

    "Estábamos buscando una canción que captara la atención de la gente"

Lo lograron: House of the Rising Sun fue un verdadero éxito transatlántico, llegó al primer lugar en el Reino Unido (julio de 1964) y en los Estados Unidos (en septiembre, mes en que resultó ser el primer número 1 de la invasión británica que no era de The Beatles).
https://es.wikipedia.org/wiki/The_House_of_the_Rising_Sun


Hay una casa en Nueva Orleans,
la llaman "El Sol Naciente",
y ha sido la ruina de muchos pobres chicos.
Dios sabe que yo soy uno de ellos.
Mi madre era sastre,
ella cosió mis nuevos pantalones vaqueros,
mi padre era un jugador,
ahí abajo en Nueva Orleans.
Ahora, lo único que necesita un jugador,
es una maleta y un maletero (de un coche).
Y el único momento en que está satisfecho
es cuando está en una borrachera.
Oh madre, dile a tus hijos,
que no hagan lo que yo he hecho,
gastar sus vidas en pecado y miseria,
en la casa del sol naciente
Bueno, tengo un pie en el andén,
el otro pie en el tren.
Voy de vuelta a Nueva Orleans,
a ponerme esa bola y esa cadena (de preso).
Hay una casa en Nueva Orleans,
la llaman "el Sol Naciente",
y ha sido la ruina de muchos pobres chicos.
Y Dios, sé que yo soy uno de ellos.

jueves, 7 de abril de 2016

Mikrotik Address list Limitar ancho de banda por archivos

Mikrotik dispone de la facilidad de crear listas de direcciones para manejar pool de direcciones IP.

Vamos a mejorar el script creado en esta entrada: http://jaskolowski.com.ar/2012/09/mikrotik-limitar-ancho-de-banda-por.html
generamos una nueva lista para evitar que los servidores de email caigan en la clase de bajo ancho de banda.
Para ello creamos la lista download y la lista Emails

# apr/06/2016 12:58:21 by RouterOS 5.20
# software id = W5EY-LHT9
#
/ip firewall filter
add action=add-dst-to-address-list address-list=download \
    address-list-timeout=15m chain=forward content=.mpeg disabled=no \
    dst-address-list=!Emails protocol=tcp src-address=10.10.10.0/24
add action=add-dst-to-address-list address-list=download \
    address-list-timeout=15m chain=forward content=.mpg disabled=no \
    dst-address-list=!Emails protocol=tcp src-address=10.10.10.0/24
add action=add-dst-to-address-list address-list=download \
    address-list-timeout=15m chain=forward content=.dat disabled=no \
    dst-address-list=!Emails protocol=tcp src-address=10.10.10.0/24
add action=add-dst-to-address-list address-list=download \
    address-list-timeout=15m chain=forward content=.exe disabled=no \
    dst-address-list=!Emails protocol=tcp src-address=10.10.10.0/24
add action=add-dst-to-address-list address-list=download \
    address-list-timeout=15m chain=forward content=.msi disabled=no \
    dst-address-list=!Emails protocol=tcp src-address=10.10.10.0/24
add action=add-dst-to-address-list address-list=download \
    address-list-timeout=15m chain=forward content=.gz disabled=no \
    dst-address-list=!Emails protocol=tcp src-address=10.10.10.0/24
add action=add-dst-to-address-list address-list=download \
    address-list-timeout=15m chain=forward content=.bin disabled=no \
    dst-address-list=!Emails protocol=tcp src-address=10.10.10.0/24
add action=add-dst-to-address-list address-list=download \
    address-list-timeout=15m chain=forward content=.mp3 disabled=no \
    dst-address-list=!Emails protocol=tcp src-address=10.10.10.0/24
add action=add-dst-to-address-list address-list=download \
    address-list-timeout=15m chain=forward content=.zip disabled=no \
    dst-address-list=!Emails protocol=tcp src-address=10.10.10.0/24
add action=add-dst-to-address-list address-list=download \
    address-list-timeout=15m chain=forward content=.swf disabled=no \
    dst-address-list=!Emails protocol=tcp src-address=10.10.10.0/24
add action=add-dst-to-address-list address-list=download \
    address-list-timeout=15m chain=forward content=.deb disabled=no \
    dst-address-list=!Emails protocol=tcp src-address=10.10.10.0/24 \
    src-address-list=download
add action=add-dst-to-address-list address-list=download \
    address-list-timeout=15m chain=forward content=.iso disabled=no \
    dst-address-list=!Emails protocol=tcp src-address=10.10.10.0/24
add action=add-dst-to-address-list address-list=download \
    address-list-timeout=15m chain=forward content=.avi disabled=no \
    dst-address-list=!Emails protocol=tcp src-address=10.10.10.0/24
add action=add-dst-to-address-list address-list=download \
    address-list-timeout=15m chain=forward content=.rm disabled=no \
    dst-address-list=!Emails protocol=tcp src-address=10.10.10.0/24
add action=add-dst-to-address-list address-list=download \
    address-list-timeout=15m chain=forward content=.bz2 disabled=no \
    dst-address-list=!Emails protocol=tcp src-address=10.10.10.0/24
add action=add-dst-to-address-list address-list=download \
    address-list-timeout=15m chain=forward content=.z disabled=no \
    dst-address-list=!Emails protocol=tcp src-address=10.10.10.0/24
add action=add-dst-to-address-list address-list=download \
    address-list-timeout=15m chain=forward content=.dropbox disabled=no \
    dst-address-list=!Emails protocol=tcp src-address=10.10.10.0/24
add action=add-dst-to-address-list address-list=download \
    address-list-timeout=15m chain=forward content=.psf disabled=no \
    dst-address-list=!Emails protocol=tcp src-address=10.10.10.0/24
add action=add-dst-to-address-list address-list=download \
    address-list-timeout=15m chain=forward content=.vpx disabled=no \
    dst-address-list=!Emails protocol=tcp src-address=10.10.10.0/24
add action=add-dst-to-address-list address-list=download \
    address-list-timeout=15m chain=forward content=sphoto disabled=no \
    dst-address-list=!Emails protocol=tcp src-address=10.10.10.0/24
add action=add-src-to-address-list address-list=Emails address-list-timeout=\
    0s chain=forward comment="Email :: mail.google.com" disabled=no \
    src-address=172.217.28.37
add action=add-src-to-address-list address-list=Emails address-list-timeout=\
    0s chain=forward comment="Email :: hotmail.com" disabled=no src-address=\
    156.56.172.28
add action=add-src-to-address-list address-list=Emails address-list-timeout=\
    0s chain=forward comment="Email :: hotmail.com" disabled=no src-address=\
    65.55.77.28
add action=add-src-to-address-list address-list=Emails address-list-timeout=\
    0s chain=forward comment="Email :: hotmail.com" disabled=no src-address=\
    65.55.85.12
add action=add-src-to-address-list address-list=Emails address-list-timeout=\
    0s chain=forward comment="Email :: hotmail.com" disabled=no src-address=\
    157.55.152.112
add action=add-src-to-address-list address-list=Emails address-list-timeout=\
    0s chain=forward comment="Email :: live.com" disabled=no src-address=\
    65.55.206.154
add action=add-src-to-address-list address-list=Emails address-list-timeout=\
    0s chain=forward comment="Email :: mail.google.com" disabled=no \
    src-address=172.217.28.5
add action=add-src-to-address-list address-list=Emails address-list-timeout=\
    0s chain=forward comment="Email :: crub.uncoma.edu.ar" disabled=no \
    src-address=170.210.81.23
add action=add-src-to-address-list address-list=Emails address-list-timeout=\
    0s chain=forward comment="Email :: uncoma.edu.ar" disabled=no \
    src-address=170.210.81.106

 Creamos una entrada en nuestro queue tree

# apr/07/2016 11:01:42 by RouterOS 5.20
# software id = W5EY-LHT9
#
/queue tree
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 \
    max-limit=0 name=download-files packet-mark=download-packet parent=\
    3QoS_down_Web priority=8 queue=default



miércoles, 9 de septiembre de 2015

Consejo Deliberante Bariloche - Migración a Software Libre




Municipalidad de Bariloche







MIGRACIÓN A SOFTWARE LIBRE EN EL CONSEJO MUNICIPAL DE LA CIUDAD DE BARILOCHE.

La Legislatura de la provincia de Río Negro sanciono en el año 2012 la ley provincial 4747, la cual establece las políticas de incorporación y gestión progresiva de Software Libre en el ámbito del Estado Provincial, Poder Ejecutivo, Legislativo, Judicial, entes descentralizados y empresas con
participación estatal. Por tal motivo y siguiendo los lineamientos de la ley antes mencionada, el Concejo Municipal de la localidad de San Carlos de Bariloche adoptó el uso de Software Libre en el ámbito de este organismo público municipal mediante la ordenanza 2338-CM-13. Con este y otros
avances que se están realizando en materia de cambios; la Provincia de Río Negro se convierte en una de las pioneras junto con Buenos Aires y Santa Fe en adoptar e impulsar la migración a Software Libre en la administración publica.




LOS MOTIVOS PARA CAMBIAR A SOFTWARE LIBRE.

Los motivos para llegar a esta decisión son varios, pero se destaca que el software libre tiene un enorme potencial en lo que respecta al desarrollo y la investigación del software en la sociedad. Tanto universidades, empresas y particulares; son algunos de los que día a día trabajan para optimizar las funciones de los distintos software para su uso cotidiano, todo esto sin las
barreras que el software privativo impone. Dentro de esto podemos destacar las siguientes características:

-Independencia tecnológica:

Mediante el uso de software libre, el estado deja de tener sus sistemas controlados por una entidad externa (con frecuencia empresas extranjeras). De esta forma rompe la dependencia tecnológica que lo tiene actualmente atado y obtiene las libertades que el software libre otorga. Además al migrar a este sistema, existirán requerimientos de aplicaciones específicas que se deben realizar mediante la inversión en materia tecnológica por parte de empresas nacionales y cooperativas que comparten los principios de participación; solidaridad y desarrollo para comunidad.

-Control de la información:

el uso del software libre permite saber exactamente las funciones que realiza un programa, qué tipo de información maneja y cómo lo hace. La transparencia en estos aspectos garantiza la seguridad en el tratamiento de los datos, lo que resulta esencial para un Estado; como es resguardar su información. En el software propietario, este principio de transparencia no está garantizado porque al no tener acceso al código fuente de los programas, no se sabe con certeza si posee funcionalidades que facilitarían el envío de los datos privados a otros equipos u otros sistemas.

-Economía:

Además hoy en día está la posibilidad de adquirir software libre sin necesidad de realizar un gasto económico. Si bien la cuestión económica nunca fue fijada como concepto inicial en lo que es el software libre, es un hecho que en los sitios donde se utiliza este sistema se obtiene una ventaja al no tener que abonar licencias de software. El ahorro que puede conseguirse es
constante ya que no se generan los gastos extras que existirían al tener que renovar o actualizar las licencias en las distintas aplicaciones propietarias.

-Reutilización:

Otra de las ventajas comparativas que tiene es que aquellos equipos que han sido considerados obsoletos pueden volverse nuevamente funcionales con la utilización de distribuciones livianas, pensadas por sus desarrolladores para estos equipos; que poseen las mismas prestaciones que en cuanto a software se refiere.

-Legalidad:

el Estado debe preocuparse de dar alternativas que permitan romper la dependencia tecnológica en la que nos encontramos, así como a los problemas que de ello se derivan, como la situación de ilegalidad que implica utilizar programas sin licencias. Esa alternativa de uso informático es el denominado software libre. Llamado así precisamente porque se basa en el
libre empleo de los programas informáticos.

Referentes

Los referentes para la realización, promulgación y posterior implementación de la Ordenanza municipal son:

Autora: Concejal Carmen Giménez (AFSP).

Colaboradores: Mariángeles Dallavía, Limay Brouckaert y Richard Gavini (Departamento de Informática y Digesto).

PROCESO DE MIGRACIÓN Y SOFTWARE UTILIZADO.

Una vez promulgada la ordenanza municipal se comenzó con el proceso de migración; para ello se llamo a licitación publica para seleccionar la empresa que se encargaría de realizar el trabajo. Así fue que en el mes de diciembre de 2013, Ramón Chiocconi, presidente del Consejo de municipal de Bariloche, firmó un convenio con el grupo precooperativo Coopetica para llevar adelante
todo lo necesario para la migración a GNU-Trisquel (SO elegido) en ese organismo público. El software elegido como Sistema Operativo para los equipos fue la distribución GNU/Trisquel versión Toutatis 6.0 LTS; la cual utiliza el sistema operativo GNU con el kernel Linux. Esta distro esta incluida por la Free Software Foundation en la lista de distribuciones GNU/Linux 100% libres disponibles en el website de GNU, siguiendo el proceso de verificación para asegurar el compromiso del equipo de desarrollo de Trisquel y su comunidad para promover y distribuir tan solo software 100% libre. A continuación especificare algunas de las características principales que la destacan:

-Paquetes disponibles:

Para la gestión de paquetes utiliza dpkg y como método de actualización usa APT. Fue inicialmente desarrollada como una distribución basada en Debian pero los repositorios se cambiaron por los de Ubuntu. El proyecto hospeda sus propios repositorios, que derivan de los
"main" y "universe" de Ubuntu, pero se ha eliminado todo el software privativo; además de que se ha sustituido el kernel Linux original por la versión sin firmware privativo llamada Linux-libre.

-Fácil utilización:

esta distribución tiene varias versiones destinadas a distintos requerimientos pero la principal que está diseñada para uso doméstico, incluye herramientas de red, multimedia, software de diseño y ofimática, así como algunos juegos. Además incluye una aplicación de media
center capaz de reproducir DVD protegidos y la mayoría de los formatos de vídeo y audio.

-Versiones estables:

desde la versión Toutais no se realizan lanzamientos regulares STS; sino que se centran solo en el desarrollo y liberación de versiones de soporte extendido a largo plazo o LTS.


Algunos de los programas utilizados para la administración en el Concejo Municipal de Bariloche son:


-Navegadores web: Abrowser (basado en Mozilla Firefox), Konqueror y Epiphany.

-Ofimática: LibreOffice y OpenOffice (Por defecto).

-Complemento para Youtube: utiliza HTML5 y el formato WebM ya que Adobe Flash es propietario.

-Entorno de escritorio: por defecto viene con GNOME y LXDE.

-Cliente de Correo y Mensajería Instantánea: Evolution y pidgin.

-Cliente de Escritorio remoto: Remmina.

-Visor de imágenes: Gimp y gThumb.

-Reproducción multimedia: Exaile Music player para reproducir audio y Totem para los vídeos.



DIFICULTADES EN EL USO DE SOFTWARE LIBRE.

Las principales dificultades que se presentaron fueron en torno a los siguientes aspectos:

Compatibilidad de formatos:

esto problema se da mayormente en los documentos de texto (generalmente creados con OpenOffice y LibreOffice), ya que al tratar de abrirlos con Microsoft Word da un mensaje de error o se pierden datos. Pero está claro que si Microsoft Word creara sus documentos con un formato abierto (o público) esto no sucedería.

Mayores costos de implantación (no directamente):

dado que el software constituye "algo nuevo", ello supone afrontar un costo de aprendizaje, de instalación, de migración, de interoperabilidad, etc; cuya cuantía puede verse disminuida por mayor facilidad en las instalaciones; además del uso de
emuladores cuando se trata de aplicaciones especificas.

Rechazo por parte de los usuarios:

Al principio se produce un rechazo y quejas por parte de los usuarios por no conocer en profundidad el nuevo software instalado. Además de tener que acostumbrarse a las funcionalidades y aspectos generales de los programas que utilizan cotidianamente.

Problemas multimedia:

Poca estabilidad y flexibilidad en el campo de multimedia y juegos.

Incompatibilidad con algunos equipos:

Menor compatibilidad con el hardware; aunque esto se produjo en casos muy particulares.

Aun así se implemento con éxito y hoy Bariloche se encuentra como unas de las ciudades pioneras en la implementación de distribuciones 100 % libres en la Argentina; que demuestra una vez más que se puede cambiar y conseguir las mismas funcionalidades por el camino de la libertad de software.


martes, 25 de agosto de 2015

Ubuntu server 14.04 LTS VirtualBox vdi imagen de 170MB

Ubuntu server dispone de la opción al momento de instalarse, en un host ubuntu, de optar por una instalación mínima para Máquina Virtual.
Cualquier imagen  que uno quiera bajar de los mirrors oficiales de ubuntu pesa entre 1.8GB y 2.5GB.
Ante esta situación, he decidido publicar una imagen de disco virtual (vdi) de un sistema ubuntu server en su instalación básica. El tamaño del mismo, comprimido con 7zip es de 176MB. Obviamente algo más rápido y sencillo para descargarse.
El usuario administrador es "ubuntu" y la clave "ubuntu"

DESCARGAR

Para utilizarlo, lanzamos virtualbox y creamos una nueva VM

Hemos elegído "ubuntu14" por la versión del mismo pero es indistinto el nombre a usar.
Aceptamos las opciones por defecto hasta llegar a la opción de discos.



Aquí seleccionamos  un disco existente y desde el icono de carpeta buscamos la imagen .vdi descargada y descomprimida.

NOTA:
Para tener ordenado el sistema de discos de virtualbox es aconsejable hacer lo siguiente:
a) La imagen descargada en formato 7z la descomprimimos.
b)  al hacerlo seleccionamos extraerlo en el directorio creado por virtualbox en el paso anterior que en nuestro caso es "ubuntu14" y esta en nuestra carpeta personal/VirtualBox VMs/ubuntu14/

Seleccionamos la imagen que acabamos de extraer y creamos la VM



 Una vez terminado iniciamos la nueva VM y en el login ponemos usario: ubuntu password: ubuntu
Es el único usuario y por tanto el administrador del sistema


















sábado, 15 de agosto de 2015

Convertir base de datos de texto a csv

Seguramente en los próximos años, cuando lea este post, terminaré lamentando mi ignorancia en el tema,
O, posiblemente, encuentre aquí la "chuleta" que me permita salir del paso.
Tarea número 1: aprender a usar sed. Claramente es la solución a este problema pero mi manejo del mismo es terriblemente básico.

Aquí el escenario:
Tengo un extracto de un sistema de biblioteca (OMP) que por las limitaciones del mismo no llega a cumplir las necesidades del momento (no se puede filtrar la salida por campos, no se puede seleccionar períodos, no se puede, no se puede, etc)
De este extracto, que termina siendo una página html con formato de base de datos semejante a vcf, tengo que obtener al menos un archivo csv.
Todo parece muy sencillo pero sin conocimiento no hay nigún programa ni conversor en linea que resuelva la necesidad.
Asi es que, de un archivo que tiene este formato:

Texto 
TL : 574.526.323 A327 Resultado 1 de 179
Autor : Albariño, Ricardo J
Título : Análisis de la fracción macrozoobentónica en un cuerpo lótico andino
Ocultar Detalles
Institución : Universidad Nacional del Comahue, Centro Regional Universitario Bariloche
Ciudad : San Carlos de Bariloche
Año : 1994
Páginas : 66 p
Descriptores : LIMNOLOGIA - PATAGONIA - TL -
Grado Académico : TL.
Tengo que obtener un archivo de campos separados por comas.
la forma en que lo logré es la siguiente:

quitamos las lineas vacías:
cat graduados.txt |sed -e '/^$/d'>grad.txt


Sacamos aquellos campos que generan conflicto y rompen el loop:
 grep -v Editorial grad.txt|grep -v Ciudad|grep -v Ocultar|grep -v Páginas>grad1.txt

concatenamos los campos separandolos con el caracter "@"
cat grad1.txt|sed '$!N;s/\n/@/;$!N;s/\n/@/;$!N;s/\n/@/;$!N;s/\n/@/;$!N;s/\n/@/;$!N;s/\n/@/;'>grad2.txt

Depuramos columnas con desprolijidades
 cat sacar.txt |awk '{print $1,$2,$7}'
Y ya tenemos nuestra base de datos para manippularla a placer y hacer estadísticas, etc,etc.

______________________________________________________

Esto no es un tutorial de "copy&paste" sino una bitacora que puede servir de ayuda

Fuentes:
https://jinetedeldragon.wordpress.com/2009/06/22/sed-en-una-linea-sed-one-liners-parte-i/

jueves, 9 de julio de 2015

HFSC. El secreto mejor guardado de Linux controlando el tráfico

La siguiente es una traducción a español del la introducción al script HFSC-SHAPE pubicado por Bradoaks en github


#!/bin/bash
# Como la gente de "bufferbloat" ha recientemente re-descubierto y / o más ampliamente
# publicitado, los algoritmos para evitar la congestión (como las que se encuentran en TCP) hacen
# Un gran trabajo permitiendo a los puntos finales de la red negociar las tasas de transferencia que
# Maximizan el uso de ancho de banda de un enlace sin penalizar indebidamente ningún stream.
# Esto permite a los bulk-stream  utilizar el máximo disponible de Ancho de banda
# sin afectar la latencia del non-bulk (por ejemplo stream interactivo)
#

# En otras palabras, TCP le permite tener su pastel y comérselo también - a la vez Descargas
# rápidas y baja latencia, todo al mismo tiempo.

# Sin embargo, esto sólo funciona si los Algoritmos para evitar la congestión de TCP
# antes mencionada realmente funcionan. El método más fiable de señalización de
# Congestión es descartar paquetes. (Hay otras maneras, tales como ECN, pero
# Lamentablemente todavía no están en amplio uso.)

# Descartar paquetes para que la red funcione mejor es un poco contra-intuitivo.
# Pero, así es como funciona TCP. Y si uno se aprovecha de eso, puede hacer que
# TCP funcione muy bien.

# Descartar paquetes llama rapidamente la atención de TCP. El criterio de valoración del envío
# es revisado para evitar una mayor congestión de la red. En otras palabras, si la
# Descarga rápida se ralentiza se baja la velocidad de envío y, siempre y cuando no haya más congestión,
# El que envia aumenta gradualmente la velocidad de transferencia repitiendo el ciclo.
# Se puede dar una explicación más compleja que esta, pero el Punto principal es:
# descartar paquetes cuando hay congestión es bueno.

# control de tráfico es reducir la velocidad y / o descartar (o marcado ECN) paquetes.
# La cosa es que, es mucho mejor para la latencia simplemente descartar paquetes
# que frenarlos. Linux tiene un par de cotroladores de tráfico que no dudan
# en descartar paquetes. Uno de los más conocido es TBF  "Token Bucket Filter".
# Normalmente se ralentizan paquetes a una tasa específica. Pero también acepta una opción
# de "límite" para especificar el número máximo de paquetes de Cola. Cuando se supera
# el límite, los paquetes se descartan.

# El Algoritmo "tail-drop" de TBF es en realidad uno de los peores tipos de (AQM)
# "Gestión de cola activa"  que se puede hacer. sin embargo, este puede hacer
# Una gran diferencia. Aplicando solo TBF (con un límite lo suficientemente corto) puede hacer un
# enlace de alta latencia utilizable de nuevo en poco tiempo.

# La gran desventaja de TBF es que es un shaper "sin clases". Eso significa que
# No se puede dar prioridad a un flujo TCP sobre otro. Ahí es donde entra HTB, la
# Hierarchical Token Bucket. HTB utiliza el mismo algoritmo general como
# TBF al mismo tiempo que le permite filtrar el tráfico específico de colas de prioridad.

# Pero HTB tiene una gran debilidad: no tiene una buena y fácil forma de especificar un
# límite de Cola como sí TBF. Eso significa que, en comparación con TBF, HTB opta por
# ralentizar paquetes en lugar de descartarlos. lo cual no es bueno para la latencia.

# Así que ahora llegamos al secreto mejor guardado de Linux controlando el tráfico: el shaper HFSC.
# HFSC significa "Curva jerárquica Justa de Servicio". La implementación en Linux es tremendamente
# compleja, lo suficiente como para tener una pregunta de 9 páginas en serverfault
# ( http://serverfault.com/questions/105014/does-anyone-really-understand-how-hfsc-scheduling-in-linux-bsd-works ).
# No obstante, HFSC puede entenderse de una manera simplificada como HTB con límites.
# HFSC le permite clasificar el tráfico (como HTB, a diferencia de TBF), pero también puede
# descartar paquetes (a diferencia de HTB, como TBF).

# HFSC hace un gran trabajo al mantener una baja latencia. Con ella, es posible
# Saturar totalmente un enlace mientras se mantiene una sesión de trafico interactivo .
# Es el santo grial de la modulación del tráfico, y esta en los kernel existentes.

# Para obtener los mejores resultados, HFSC debe combinarse con SFQ (Stochatic
# Fairness Queueing) y opcionalmente un filtro de entrada. Si los tres se utilizan,
# Es posible mantener sesiones interactivas de baja latencia, incluso sin ningúna
# Priorización de tráfico. Si además añadimos priorización entonces maximizamos la
# Interactividad.

# Here's how it's done:

# set this to your internet-facing network interface:
WAN_INTERFACE=eth1

# set this to your local network interface:
LAN_INTERFACE=eth0

# how fast is your downlink?
MAX_DOWNRATE=2550kbit

# how close should we get to max down? e.g. 90%
USE_DOWNPERCENT=0.90

# how fast is your uplink?
MAX_UPRATE=1792kbit

# how close should we get to max up? e.g. 80%
USE_UPPERCENT=0.80

# what port do you want to prioritize? e.g. for ssh, use 22
INTERACTIVE_PORT=22

## now for the magic

# remove any existing qdiscs
/sbin/tc qdisc del dev $WAN_INTERFACE root 2> /dev/null
/sbin/tc qdisc del dev $WAN_INTERFACE ingress 2> /dev/null
/sbin/tc qdisc del dev $LAN_INTERFACE root 2> /dev/null
/sbin/tc qdisc del dev $LAN_INTERFACE ingress 2> /dev/null

# computations
MAX_UPNUM=`echo $MAX_UPRATE | sed 's/[^0-9]//g'`
MAX_UPBASE=`echo $MAX_UPRATE | sed 's/[0-9]//g'`
MAX_DOWNNUM=`echo $MAX_DOWNRATE | sed 's/[^0-9]//g'`
MAX_DOWNBASE=`echo $MAX_DOWNRATE | sed 's/[0-9]//g'`

NEAR_MAX_UPNUM=`echo "$MAX_UPNUM * $USE_UPPERCENT" | bc | xargs printf "%.0f"`
NEAR_MAX_UPRATE="${NEAR_MAX_UPNUM}${MAX_UPBASE}"

NEAR_MAX_DOWNNUM=`echo "$MAX_DOWNNUM * $USE_DOWNPERCENT" | bc | xargs printf "%.0f"`
NEAR_MAX_DOWNRATE="${NEAR_MAX_DOWNNUM}${MAX_DOWNBASE}"

HALF_MAXUPNUM=$(( $MAX_UPNUM / 2 ))
HALF_MAXUP="${HALF_MAXUPNUM}${MAX_UPBASE}"

HALF_MAXDOWNNUM=$(( $MAX_DOWNNUM / 2 ))
HALF_MAXDOWN="${HALF_MAXDOWNNUM}${MAX_DOWNBASE}"

# install HFSC under WAN to limit upload
/sbin/tc qdisc add dev $WAN_INTERFACE root handle 1: hfsc default 11
/sbin/tc class add dev $WAN_INTERFACE parent 1: classid 1:1 hfsc sc rate $NEAR_MAX_UPRATE ul rate $NEAR_MAX_UPRATE
/sbin/tc class add dev $WAN_INTERFACE parent 1:1 classid 1:10 hfsc sc umax 1540 dmax 5ms rate $HALF_MAXUP ul rate $NEAR_MAX_UPRATE
/sbin/tc class add dev $WAN_INTERFACE parent 1:1 classid 1:11 hfsc sc umax 1540 dmax 5ms rate $HALF_MAXUP ul rate $HALF_MAXUP

# prioritize interactive ports
/sbin/tc filter add dev $WAN_INTERFACE protocol ip parent 1:0 prio 1 u32 match ip sport $INTERACTIVE_PORT 0xffff flowid 1:10
/sbin/tc filter add dev $WAN_INTERFACE protocol ip parent 1:0 prio 1 u32 match ip dport $INTERACTIVE_PORT 0xffff flowid 1:10

# add SFQ
/sbin/tc qdisc add dev $WAN_INTERFACE parent 1:10 handle 30: sfq perturb 10
/sbin/tc qdisc add dev $WAN_INTERFACE parent 1:11 handle 40: sfq perturb 10

# install ingress filter to limit download to 97% max
MAX_DOWNRATE_INGRESSNUM=`echo "$MAX_DOWNNUM * 0.97" | bc | xargs printf "%.0f"`
MAX_DOWNRATE_INGRESS="${MAX_DOWNRATE_INGRESSNUM}${MAX_DOWNBASE}"
/sbin/tc qdisc add dev $WAN_INTERFACE handle ffff: ingress
/sbin/tc filter add dev $WAN_INTERFACE parent ffff: protocol ip prio 1 u32 match ip sport $INTERACTIVE_PORT 0xffff flowid :1
/sbin/tc filter add dev $WAN_INTERFACE parent ffff: protocol ip prio 1 u32 match ip dport $INTERACTIVE_PORT 0xffff flowid :1
/sbin/tc filter add dev $WAN_INTERFACE parent ffff: protocol ip prio 50 u32 match ip src 0.0.0.0/0 police rate $MAX_DOWNRATE_INGRESS burst 20k drop flowid :2

# install HFSC under LAN to limit download
/sbin/tc qdisc add dev $LAN_INTERFACE root handle 1: hfsc default 11
/sbin/tc class add dev $LAN_INTERFACE parent 1: classid 1:1 hfsc sc rate 1000mbit ul rate 1000mbit
/sbin/tc class add dev $LAN_INTERFACE parent 1:1 classid 1:10 hfsc sc umax 1540 dmax 5ms rate 900mbit ul rate 900mbit
/sbin/tc class add dev $LAN_INTERFACE parent 1:1 classid 1:11 hfsc sc umax 1540 dmax 5ms rate $HALF_MAXDOWN ul rate $NEAR_MAX_DOWNRATE

# prioritize interactive ports
/sbin/tc filter add dev $LAN_INTERFACE protocol ip parent 1:0 prio 1 u32 match ip sport $INTERACTIVE_PORT 0xffff flowid 1:10
/sbin/tc filter add dev $LAN_INTERFACE protocol ip parent 1:0 prio 1 u32 match ip dport $INTERACTIVE_PORT 0xffff flowid 1:10

# add SFQ
/sbin/tc qdisc add dev $LAN_INTERFACE parent 1:10 handle 30: sfq perturb 10
/sbin/tc qdisc add dev $LAN_INTERFACE parent 1:11 handle 40: sfq perturb 10

### End of Script

Nota:
podemos chequear las estadísticas del queue con:
watch -d -- '/sbin/tc -s qdisc'