ff-multiconverter, multimedia, audio, video, linux, ubuntu ubuntu kylin, china, releases, linux terminal, ubuntu, linux, comandos, shell conky, gadgets, ubuntu, linux SpeedTest-Cli, velocidad, red, consola, terminal tag foto 6 pinta, grafica, linux, ubuntu djl, juegos, yum, synaptic, paquetes ubuntu, releases, canonical psensor, ubuntu, linux, sistema, monitor

10 Artículos Recomendados sobre Seguridad en Ubuntu.

ubuntu-TuxLa mayor amenaza de seguridad informática no son los programas en sì mismos, es el hombre, el usuario.

Siempre hablamos de los virus y de la seguridad informática, de cómo es muy difícil penetrar en un sistema Gnu/Linux y muy fácil entrar en Windows.

Pero difícil no significa imposible y cada vez más y más amenazas se crean para Gnu/Linux y en especial para Ubuntu, al ser uno de los sistemas más usados dentro de la familia Gnu/Linux. Los rootkits son un buen ejemplo de amenaza que se ha llegado a Ubuntu, aunque al igual que hay una forma de que llegue, siempre hay una forma de sacarlo de nuestro sistema.

Linux, y en nuestro caso Ubuntu, cuenta con algunos elementos para minimizar, neutralizar o directamente eliminar estos riesgos.

De la larga lista que hay me he tomado la atribuciòn de elegir 10, sepan disculpar los que he dejado de lado:
1.- Como recuperar una clave de root olvidada (y cambiarla), metodo 1.

clave root olvidadaPodemos encontrarnos con la situación de que hemos perdido u olvidado la contraseña de superusuario o root que creamos cuando instalamos Ubuntu y ahora nos encontramos con la poco agradable sorpresa de que no podemos administrar nuestro sistema.
En ese caso caso: què hacer?
Cuando inicias el ordenador y en el arranque muestra el pantallazo inicial, es decir el pantallazodel grub, tenemos que seleccionar editar con la letra "e" y nos apoarecerà de inmediato una ventana de edicion como lo muestran las dos imàgenes a continuaciòn:

2.- Como recuperar una clave de root olvidada, metodo 2.

clave root olvidadaPodemos encontrarnos con la situación de que hemos perdido u olvidado la contraseña de superusuario o root que creamos cuando instalamos Ubuntu y ahora nos encontramos con que no podemos administrar nuestro sistema.
Al iniciar el ordenador y cuando nos sale el Grub, seleccionamos arrancar en modo recovery (recuperación).
Nota: para los que os arranca Ubuntu directamente sin poder ver el Grub: lo haremos después de que carge la placa base pulsando escape, si no funciona pulsa shift, para entrar en el menú del grub.
Y en el menu del Grub que nos aparece, elige recovery mode (recuperación)
  • En el submenú que aparece elige "netroot" ("root" en las nuevas versiones), para colocarnos como superusuario sin contraseña.
  • Con este comando podemos solucionar el error: "Authentication token manipulation error passwd: password unchanged":
    Montamos de nuevo la raíz del sistema con permisos de escritura y lectura con el comando:

3.- Deborphan es una utilidad que detecta los paquetes huérfanos en Debian.

debian_logoCuando instalas un paquete éste suele tener dependencias, las cuales se instalan automáticamente.
Si desinstalas ese paquete padre, las dependencias se quedarán en el disco ocupando un espacio inútil.
A estos paquetes se les llama huérfanos (no tienen padre). Nunca está de más ver si tenemos paquetes huérfanos ocupando espacio en nuestro disco.
Deborphan es una utilidad que detecta los paquetes huérfanos.
Imagen:Nota clasica.png Este comando es muy útil si utilizas apt o dpkg para administrar los paquetes de tu sistema. Si usas aptitude no hace falta usarlo porque él mismo se encarga de eliminar los paquetes huérfanos.

4.- Ubuntu Rescue Remix resulta muy útil para rescatar archivos de discos duros con problemas o defectuosos o reconstruir sistemas de archivos.

Ubuntu Rescue Remix es una recopilación de distintas utilidades para recuperación de datos montadas en un Live CD que permite el arranque del sistema.
Resulta muy útil para rescatar archivos de discos duros con problemas o defectuosos o reconstruir sistemas de archivo de discos duros formateados con distintos sistemas operativos.
Ofrece un entorno gráfico que facilita la puesta en marcha de las operaciones. Dispone también de programas para realizar “autopsias” de los problemas del disco.

5.- Advanced Onion Router es un excelente programa para proteger tu privacidad mientras navegas.
Advanced Onion Router
Para  entender claramente el concepto de navegar anónimamente tener que saber que son los dominios .onion.
En Tor podrás comenzar una navegación anónima simplemente introduciendo cualquier dirección o IP de la web superficial de todos los días, pero no nos engañemos más y pasemos a lo que realmente llama la atención en todo este asunto de la Deep Web.
La entrada propiamente dicha a la parte más invisible de la Deep Web se realiza a través de lo que se llama Onionland, o también -mal- denominada Darknet. Estos son sitios reglados bajo dominios del tipo .onion que tienen la particularidad de no revelar el título de su contenido en su dirección (ej. Facebook.com), sino que se lo esconde con URLs del tipo kj369k76352k3hte.onion (16 caracteres alfa numéricos).
Este protocolo (Onion Router) que Tor toma como base para su funcionamiento, será el que presente los sitios más interesantes en cuanto a anonimato en la deep web. Para acceder a ellos tendrás que saber su IP e introducirla en Tor a través de la barra de direcciones.

6.- Dkopp software libre para crear copias de seguridad de nuestros archivos y documentos.
dkop_1Dkopp es una interesante herramienta de seguridad que nos permitirá realizar todo tipo de respaldo de la información, archivos y documentos que tengamos almacenados en CD, DVD o Blue-ray.
De esta manera, podemos tener copias de seguridad extra para evitar que se pierdan los datos de los discos por cualquier eventualidad.
Dkopp también es utilizado para crear discos de almacenamiento, donde podemos ingresar nuestras copias de seguridad lo que aumenta el atractivo de la aplicación.
La funcionalidad de Dkopp no se limita a crear copias de seguridad y realizar almacenamiento de archivos importantes, también puede ser utilizado para realizar verificaciones de distintos tipos de copias de discos, así podemos saber si la copia de un DVD, CD o Blue-ray está bien hecha y carece de errores.

7.- Gcipher es una herramienta, sencilla y útil para encriptar archivos.
gciher3Suponga que quiere mandar un mensaje “cifrado” a un colega, amigo, y/o compañero de trabajo, por diversas razones que no enlistaré, necesita cierta “privacidad” para que nada más la persona a la que está dirigida dicho mensaje la lea.

Este programa se encuentra en los repositorios de Debian, Ubuntu y muy probablemente en su distribución favorita, por lo que lo animamos a testearla y al menos divertirse un momento al intercambiar mensajes, tuits o lo que se le ocurra con familiares, amigos, clientes, etc.

8.- FreeFileSync compara y sincroniza tus archivos sin problemas.
FreeFileSync te ayuda a gestionar tus copias de seguridad comprobando los cambios realizados en el fichero original y aplicándolos a las copias.
Puede comprobar cambios por tamaño, fecha o contenido, y sincronizarlos en modo Mirror (los cambios de una carpeta se aplican a la otra borrando lo demás), Update (copia archivos de un sitio a otro respetando la carpeta destino) y Two Way (copia nuevo contenido y actualiza el existente usando las dos carpetas como origen y destino).
FreeFileSync permite guardar la configuración de una tarea y cargarla posteriormente, así como crear un fichero CSV con una lista de los archivos presentes en una carpeta

9.- DuckDuckGo el motor de búsqueda que hace hincapié en la privacidad del usuario.

duckduckgoDuckDuckGo es un motor de búsqueda establecido en Valley Forge, Pensilvania, Estados Unidos, que utiliza la información de sitios de origen público (como Wikipedia) con el objetivo de aumentar los resultados tradicionales y mejorar la relevancia. La filosofía de DuckDuckGo hace hincapié en la privacidad y en no registrar la información del usuario.
Historia
Duck Duck Go fue fundada por Gabriel Weinberg, un empresario cuya última aventura The Names Database (la base de datos de nombres) fue adquirida por United Online (NASDAQ:UNTD) en el 2006 por U$S 10 millones.
Weinberg tiene una licenciatura en Física y un M.S. en Tecnología y Política en el MIT.
10.- Lightweight Portable Security.

lps_logoLightweight Portable Security (LPS-Public) nace de una iniciativa del Departamento de Defensa de los EEUU de poner en línea una distribución Linux creada bajo la dirección de su Fuerza Aérea en mancomunión con equipos del gobierno.
Lightweight Portable Security (LPS) es lo que su nombre indica, una distribución ligera, que arranca desde un CD o un dispositivo USB, y que pone el gran acento en la seguridad de la información.
Este sistema operativo funciona integralmente en la memoria RAM del computador, no monta los dispositivos locales (disco/s duro/s o rígido/s) y se asegura de no dejar ningún rastro de la actividad de los usuarios. Nada queda almacenado.
Prevista para que los empleados del Departamento de Defensa puedan utilizar cualquier equipo público en toda seguridad, el sistema propone especialmente un sistema de criptado de datos y un navegador web Firefox concebido para funcionar con las cartas de acceso CAC y PIV que el gobierno estadounidense utiliza para securizar los accesos distantes a los servidores de la administración.

Si te ha gustado el artículo inscribete al feed clicando en la imagen más abajo para tenerte siempre actualizado sobre los nuevos contenidos del blog:

Guia Python: conceptos de programación y atributos de clase.

python logoPython es un lenguaje de script desarrollado por Guido van Rossum.

Podemos codificar empleando programación lineal, estructurada y orientada a objetos (tengamos en cuenta que esta última es la que se ha impuesto en la actualidad)

Se cuenta con intérpretes de Python en múltiples plataformas: Windows, Linux, Mac etc. Se pueden desarrollar aplicaciones de escritorio como aplicaciones web. Empresas como Google, Yahoo, Nasa etc. utilizan este lenguaje para sus desarrollos (actualmente el creador de Python Guido van Rossum trabaja para Google.)

Se puede ejecutar instrucciones de Python desde la línea de comando o creando archivos con extensión *.py. Cuando uno comienza a aprender este lenguaje la línea de comandos nos provee una retroalimentación del resultado en forma inmediata.

El objetivo de este tutorial es presentar en forma progresiva los conceptos fundamentales de este lenguaje y poder analizar los problemas resueltos y codificar los problemas propuestos en este mismo sitio, sin tener que instalar en un principio el Python en su equipo (o luego de instalado poder avanzar con el tutorial en cualquier máquina conectada a internet).

Conceptos de programación orientada a objetos.
python Atributos de una clase
Habíamos dicho que Python nos permite combinar las metodologías de programación Lineal, Estructurada y Orientada a Objetos. A partir de este concepto mostraremos en forma sencilla la metodología de Programación Orientada a Objetos.
Se irán introduciendo conceptos de objeto, clase, atributo, método etc. y de todos estos temas se irán planteando problemas resueltos.
Prácticamente todos los lenguajes desarrollados en los últimos 15 años implementan la posibilidad de trabajar con POO (Programación Orientada a Objetos)
El lenguaje Python tiene la característica de permitir programar con las siguientes metodologías:
  • Programación Lineal: Es cuando desarrollamos todo el código sin emplear funciones.
  • Programación Estructurada: Es cuando planteamos funciones que agrupan actividades a desarrollar y luego dentro del programa llamamos a dichas funciones que pueden estar dentro del mismo archivo o en una librería separada.
  • Programación Orientada a Objetos: Es cuando planteamos clases y definimos objetos de las mismas (Este es el objetivo de los próximos conceptos, aprender la metodología de programación orientada a objetos y la sintaxis particular de Python para la POO)
Conceptos básicos de Objetos.
Un objeto es una entidad independiente con sus propios datos y programación. Las ventanas, menúes, carpetas de archivos pueden ser identificados como objetos; el motor de un auto también es considerado un objeto, en este caso, sus datos (atributos) describen sus características físicas y su programación (métodos) describen el funcionamiento interno y su interrelación con otras partes del automóvil (también objetos).
El concepto renovador de la tecnología Orientación a Objetos es la suma de funciones a elementos de datos, a esta unión se le llama encapsulamiento. Por ejemplo, un objeto página contiene las dimensiones físicas de la página (ancho, alto), el color, el estilo del borde, etc, llamados atributos. Encapsulados con estos datos se encuentran los métodos para modificar el tamaño de la página, cambiar el color, mostrar texto, etc. La responsabilidad de un objeto pagina consiste en realizar las acciones apropiadas y mantener actualizados sus datos internos. Cuando otra parte del programa (otros objetos) necesitan que la pagina realice alguna de estas tareas (por ejemplo, cambiar de color) le envía un mensaje. A estos objetos que envían mensajes no les interesa la manera en que el objeto página lleva a cabo sus tareas ni las estructuras de datos que maneja, por ello, están ocultos. Entonces, un objeto contiene información pública, lo que necesitan los otros objetos para interactuar con él e información privada, interna, lo que necesita el objeto para operar y que es irrelevante para los otros objetos de la aplicación.
python Atributos de una clase1
Declaración de una clase y creación de objetos.
La programación orientada a objetos se basa en la programación de clases; a diferencia de la programación estructurada, que está centrada en las funciones.
Una clase es un molde del que luego se pueden crear múltiples objetos, con similares características.
Un poco más abajo se define una clase Persona y luego se crean dos objetos de dicha clase.
Una clase es una plantilla (molde), que define atributos (lo que conocemos como variables) y métodos (lo que conocemos como funciones).
La clase define los atributos y métodos comunes a los objetos de ese tipo, pero luego, cada objeto tendrá sus propios valores y compartirán las mismas funciones.
Debemos crear una clase antes de poder crear objetos (instancias) de esa clase. Al crear un objeto de una clase, se dice que se crea una instancia de la clase o un objeto propiamente dicho.
Confeccionaremos nuestra primer clase para conocer la sintaxis en el lenguaje Python, luego definiremos dos objetos de dicha clase.
Implementaremos una clase llamada Persona que tendrá como atributo (variable) su nombre y dos métodos (funciones), uno de dichos métodos inicializará el atributo nombre y el siguiente método mostrará en la página el contenido del mismo.
class Persona:
    def inicializar(self,nom):
        self.nombre=nom

    def imprimir(self):
        print 'Nombre:'
        print self.nombre
        print '<br>'

persona1=Persona()
persona1.inicializar('Juan')
persona1.imprimir()

persona2=Persona()
persona2.inicializar('Ana')
persona2.imprimir()
Siempre conviene buscar un nombre de clase lo más próximo a lo que representa. La palabra clave para declarar la clase es class, seguidamente el nombre de la clase y luego dos puntos.
Los métodos de una clase se definen utilizando la misma sintaxis que para la definición de funciones.
Como veremos todo método tiene como primer parámetro el identificador self que tiene la referencia del objeto que llamó al método.
Luego dentro del método diferenciamos los atributos del objeto antecediendo el identificador self:
self.nombre=nom
Con la asignación previa almacenamos en el atributo nombre el parámetro nom, los atributos siguen existiendo cuando finaliza la ejecución del método. Por ello cuando se ejecuta el método imprimir podemos mostrar el nombre que cargamos en el primer método.
Decíamos que una clase es un molde que nos permite definir objetos. Ahora veamos cual es la sintaxis para la definición de objetos de la clase Persona:
persona1=Persona()
persona1.inicializar('Juan')
persona1.imprimir()
Definimos un objeto llamado persona1 y lo creamos asignándole el nombre de la clase.
Luego para llamar a los métodos debemos anteceder el nombre del objeto el operador . y por último el nombre del método.
En el caso que tenga parámetros se los enviamos (salvo el primer parámetro (self) que el mismo Python se encarga de enviar la referencia del objeto que se creó):
persona1.inicializar('Juan')
También podemos definir tantos objetos de la clase Persona como sean necesarios para nuestro algoritmo:
persona2=Persona()
persona2.inicializar('Ana')
persona2.imprimir()
Esto nos da una idea que si en una página WEB tenemos 2 menúes, seguramente definiremos una clase Menu y luego crearemos dos objetos de dicha clase.
Esto es una de las ventajas fundamentales de la Programación Orientada a Objetos (POO), es decir reutilización de código (gracias a que está encapsulada en clases) es muy sencilla.
Atributos de una clase.
Ahora trataremos de concentrarnos en los atributos de una clase. Los atributos son las características, cualidades, propiedades distintivas de cada clase. Contienen información sobre el objeto. Determinan la apariencia, estado y demás particularidades de la clase. Varios objetos de una misma clase tendrán los mismos atributos pero con valores diferentes.
Cuando creamos un objeto de una clase determinada, los atributos declarados por la clase son localizadas en memoria y pueden ser modificados mediante los métodos.
Plantearemos un nuevo problema para analizar detenidamente la definición, sintaxis y acceso a los atributos.
Problema: Implementar una clase que muestre una lista de hipervínculos en forma horizontal (básicamente un menú de opciones)
Lo primero que debemos pensar es que valores almacenará la clase, en este caso debemos cargar una lista de direcciones web y los títulos de los enlaces. Podemos definir dos listas paralelas que almacenen las direcciones y los títulos respectivamente.
Definiremos dos métodos: cargaropcion y mostrar.
class Menu:
    enlaces=[]
    titulos=[]
    def cargaropcion(self,en,tit):
        self.enlaces.append(en)
        self.titulos.append(tit)

    def mostrar(self):  
        for indice in range(0,len(self.enlaces)):
            print '<a href="'+self.enlaces[indice]+'">'+self.titulos[indice]+'</a>'


menu1=Menu()
menu1.cargaropcion('http://www.google.com.ar','Google')
menu1.cargaropcion('http://www.yahoo.com.ar','Yahoo')
menu1.cargaropcion('http://www.live.com.ar','Msn')
menu1.mostrar()
En este caso los atributos son de tipo listas y estamos obligados a definirlos dentro de la clase y previo a la declaración de los métodos:
enlaces=[]
    titulos=[]
Estamos definiendo dos listas vacías.
El método cargaropcion recibe el enlace y el título y los almacena al final de cada lista empleando el método append de la lista (tengamos en cuenta que Python administra las listas como objetos)
self.enlaces.append(en)
        self.titulos.append(tit)
El método que imprime todos los enlaces utiliza un for para recorrer las listas y acceder a cada elemento de las listas y mostrarlos dentro de la página:
for indice in range(0,len(self.enlaces)):
            print '<a href="'+self.enlaces[indice]+'">'+self.titulos[indice]+'</a>'
Luego creamos un objeto de la clase Menu y llamamos tantas veces al método cargaropcion como opciones tenga nuestro menú
menu1=Menu()
menu1.cargaropcion('http://www.google.com.ar','Google')
menu1.cargaropcion('http://www.yahoo.com.ar','Yahoo')
menu1.cargaropcion('http://www.live.com.ar','Msn')
Finalmente llamamos al método mostrar que imprime cada hipervínculo en la página:
menu1.mostrar()
python banner
Si te ha gustado el artículo inscribete al feed clicando en la imagen más abajo para tenerte siempre actualizado sobre los nuevos contenidos del blog:

Guia Python: implementación de módulos y funciones de uso común.

python logoPython es un lenguaje de script desarrollado por Guido van Rossum.

Podemos codificar empleando programación lineal, estructurada y orientada a objetos (tengamos en cuenta que esta última es la que se ha impuesto en la actualidad)

Se cuenta con intérpretes de Python en múltiples plataformas: Windows, Linux, Mac etc. Se pueden desarrollar aplicaciones de escritorio como aplicaciones web. Empresas como Google, Yahoo, Nasa etc. utilizan este lenguaje para sus desarrollos (actualmente el creador de Python Guido van Rossum trabaja para Google.)

Se puede ejecutar instrucciones de Python desde la línea de comando o creando archivos con extensión *.py. Cuando uno comienza a aprender este lenguaje la línea de comandos nos provee una retroalimentación del resultado en forma inmediata.

El objetivo de este tutorial es presentar en forma progresiva los conceptos fundamentales de este lenguaje y poder analizar los problemas resueltos y codificar los problemas propuestos en este mismo sitio, sin tener que instalar en un principio el Python en su equipo (o luego de instalado poder avanzar con el tutorial en cualquier máquina conectada a internet).

Implementación de módulos.
Cuando uno codifica un programa en Python lo almacena en un archivo con extensión *.py
Una vez instalado el Python en forma local podemos llamar un programa desde la línea de comando del sistema operativo.
Si tenemos un programa mínimo llamado: programa1.py
def holamundo():
    print('Hola Mundo')

holamundo();
Luego desde la carpeta donde hemos instalado el Python debemos ejecutarlo con la siguiente sintaxis:
c:\Python25>python c:\pruebaspython\programa1.py
Luego de esto veremos en pantalla el mensaje 'Hola Mundo'
Este archivo en Python se lo llama módulo.
Un programa pequeño puede estar formado por un único módulo, pero programas de mayor tamaño deben dividirse en distintos módulos para facilitar su mantenimiento. Cada módulo normalmente almacena un conjunto de funciones relacionadas.
La sintaxis para llamar a una función que se encuentra en otro módulo es la siguiente:
modulo1.py
def funcion1():
    print 'Función 1'   
modulo2.py
import modulo1

def funcion2():
    modulo1.funcion1()
    print 'Función 2'

funcion2()
      
Luego desde la línea de comandos ejecutamos el modulo2.py:
c:\Python25>python c:\pruebaspython\modulo2.py
Y como resultado tenemos en pantalla
Función 1
Función 2
Veremos más adelante que Python nos provee de una gran biblioteca de módulos. Recordemos que ya hemos estado utilizando la función randint que se encuentra en el módulo random:
import random

x=random.randint(1,1000)
print x
Funciones de uso común (range - type - str - dir).
Como hemos visto en el punto anterior Python agrupa las funciones en módulos que serán importados en el caso que nuestro programa los necesite. Pero hay un pequeño grupo de funciones que Python las importa de forma automática, esto quiere decir que podemos hacer uso sin tener que hacer un import.
Funciones incorporadas en Python
  • range([inicio],fin,[paso])
    La función range devuelve una lista de valores enteros, comienza con el valor pasado al parámetro [inicio], en caso de omitir este parámetro comienza en cero y finaliza con el valor indicado en el parámetro 'fin' sin incluirlo. En caso de indicar el parámetro [paso] la lista de valores crece según dicho número, sino se incrementa de a uno.
lista1=range(5,10)
print lista1  # [5, 6, 7, 8, 9]
lista2=range(10)
print lista2  # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
lista3=range(-5,5)
print lista3  # [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4]
lista4=range(1,10,3)
print lista4  # [1, 4, 7]
Es muy común utilizar esta función para generar un contador con la estructura for in, por ejemplo si queremos mostrar los números del 1 al 10:
for x in range(1,11):
    print x
    print '-'
  • str(variable)
    Convierte el contenido del parámetro a cadena y lo retorna. Funciona para cualquier tipo de dato como puede ser un entero, real, tupla, lista etc.
    Muy útil cuando tenemos que generar un string a partir de un conjunto de variables heterogeneas.
x=10
y=2.5
fin=False
edades=(40,50)
print str(x) + str(y) + str(fin) + str(edades)
En el ejemplo concatenamos el contenido de cuatro variables de distinto tipo, para ello debemos llevarlas a todas a tipo string.
  • type(variable)
    Retorna el tipo de una variable.
x=10
print type(x) # <type 'int'>
y=2.5
print type(y)  # <type 'float'>
fin=False
print type(fin) # <type 'bool'>
edades=(40,50)
print type(edades) # <type 'tuple'>
  • dir(variable)
    Si pasamos como parámetro a la función dir un objeto luego nos devuelve todos los métodos que tiene definidos la clase de dicho objeto (veremos más adelante en profundidad cada uno de los métodos de la clase lista y diccionario):
lista1=[2,4,6]
print dir(lista1) #['__add__', '__class__', '__contains__', '__delattr__',
                  # '__delitem__', '__delslice__', '__doc__', '__eq__', '__ge__',
                  # '__getattribute__', '__getitem__', '__getslice__', '__gt__',
                  # '__hash__', '__iadd__', '__imul__', '__init__', '__iter__',
                  # '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__',
                  # '__reduce__', '__reduce_ex__', '__repr__', '__reversed__',
                  # '__rmul__', '__setattr__', '__setitem__', '__setslice__',
                  # '__str__', 'append', 'count', 'extend', 'index', 'insert',
                  # 'pop', 'remove', 'reverse', 'sort']
                 
dic1={'juan':44,'ana':3}
print dir(dic1)   # ['__class__', '__cmp__', '__contains__', '__delattr__', '__delitem__',
                  # '__doc__', '__eq__', '__ge__', '__getattribute__', '__getitem__', '__gt__',
                  # '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__ne__',
                  # '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__',
                  # '__str__', 'clear', 'copy', 'fromkeys', 'get', 'has_key', 'items', 'iteritems',
                  # 'iterkeys', 'itervalues', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']


Si le pasamos como parámetro el nombre de un módulo la función dir nos retorna todas las funciones definidas entre otros datos (recordemos que hemos estado utilizando la función randint para generar un valor aleatorio y como podemos ver se encuentra listado al llamar a la función dir):
import random

print dir(random) # ['BPF', 'LOG4', 'NV_MAGICCONST', 'RECIP_BPF', 'Random', 'SG_MAGICCONST',
                  # 'SystemRandom', 'TWOPI', 'WichmannHill', '_BuiltinMethodType', '_MethodType',
                  # '__all__', '__builtins__', '__doc__', '__file__', '__name__', '_acos', '_ceil',
                  # '_cos', '_e', '_exp', '_hexlify', '_inst', '_log', '_pi', '_random', '_sin',
                  # '_sqrt', '_test', '_test_generator', '_urandom', '_warn', 'betavariate',
                  # 'choice', 'expovariate', 'gammavariate', 'gauss', 'getrandbits', 'getstate',
                  # 'jumpahead', 'lognormvariate', 'normalvariate', 'paretovariate', 'randint',
                  # 'random', 'randrange', 'sample', 'seed', 'setstate', 'shuffle', 'uniform',
                  # 'vonmisesvariate', 'weibullvariate']
Función de uso común (help).
La función help tiene por objetivo ayudar al programador dando información de documentación definidas en módulos, funciones, clases etc.
Veamos que nos devuelve la función help si le pasamos como parámetro la función randint:
import random

help(random.randint) # Help on method randint in module random: randint(self, a, b)
                     # method of random.Random instance Return random integer in
                     # range [a, b], including both end points.
Podemos observar que nos informa el módulo donde se almacena, sus parámetros y el objetivo de la misma.
Nosotros podemos crear cadenas de documentación para nuestras funciones con la siguiente sintaxis:
def sumar(v1,v2):
    """El objetivo de esta funcion es realizar la
       suma de los dos valores que recibe como
       parametro y retornarlo."""
    su=v1+v2
    return su

help(sumar) # Help on function sumar in module __main__: sumar(v1, v2)
            # El objetivo de esta funcion es realizar la suma de los
            # dos valores que recibe como parametro y retornarlo.
El string que definamos inmediatamente después de la cabecera se tomará como cadena de documentación de la función. Como en este caso nuestra cadena de documentación ocupa varias líneas en Python podemos encerrarla entre triples comillas y no deberemos indicar el caracter de continuación de línea (Si la cadena de documentación es una sola línea podemos emplear una sola comillas al principio y al final)
Si utilizamos una sola comillas debemos indicar al final de cada línea que continúa:
def sumar(v1,v2):
    "El objetivo de esta funcion es realizar la \
    suma de los dos valores que recibe como \
    parametro y retornarlo."
    su=v1+v2
    return su
Podemos crear cadenas de documentación para definir objetivos del mismo.
Si tenemos un módulo mínimo llamado: modulo1.py, podemos definir las siguientes cadenas de documentación
"cadena de documentacion del modulo"

def holamundo():
    "cadena de documentacion de funcion"
    print('Hola Mundo')
Si te ha gustado el artículo inscribete al feed clicando en la imagen más abajo para tenerte siempre actualizado sobre los nuevos contenidos del blog:

Guia Python: asignaciones y funciones con una cantidad variable de parámetros.

python logoPython es un lenguaje de script desarrollado por Guido van Rossum.

Podemos codificar empleando programación lineal, estructurada y orientada a objetos (tengamos en cuenta que esta última es la que se ha impuesto en la actualidad)

Se cuenta con intérpretes de Python en múltiples plataformas: Windows, Linux, Mac etc. Se pueden desarrollar aplicaciones de escritorio como aplicaciones web. Empresas como Google, Yahoo, Nasa etc. utilizan este lenguaje para sus desarrollos (actualmente el creador de Python Guido van Rossum trabaja para Google.)

Se puede ejecutar instrucciones de Python desde la línea de comando o creando archivos con extensión *.py. Cuando uno comienza a aprender este lenguaje la línea de comandos nos provee una retroalimentación del resultado en forma inmediata.

El objetivo de este tutorial es presentar en forma progresiva los conceptos fundamentales de este lenguaje y poder analizar los problemas resueltos y codificar los problemas propuestos en este mismo sitio, sin tener que instalar en un principio el Python en su equipo (o luego de instalado poder avanzar con el tutorial en cualquier máquina conectada a internet).
python asignaciones multiples
Asignaciones múltiples.
Python permite asignaciones múltiples:
x1,x2,x3=1,2,3
print x1 # 1
print x2 # 2
print x3 # 3
Para entenderlo mejor podemos también utilizar esta sintaxis:
x1,x2,x3=(1,2,3)
print x1 # 1
print x2 # 2
print x3 # 3
Es decir lo que estamos haciendo inicializar cada una de las variables de la izquierda con las componentes homólogas (de la misma posición) de la tupla.
Esta característica es útil si tenemos que recuperar por ejemplo de una lista que contiene tuplas de dos elementos que representan puntos en el plano (x,y):
puntos=[(10,2),(4,2),(9,3)]
for x,y in puntos:
    print 'Coordenada x:%d y:%d' % (x,y)
    print '<br>'
Cada vuelta del for se almacena en x e y los valores de la tupla a procesar.
Otra aplicación muy útil es si queremos intercambiar el valor de dos variables la forma más simple es:
x=10
y=20
print x # 10
print y # 20
x,y = y,x
print x # 20
print y # 10
En una asignación pueden intervenir valores de distinto tipo (enteros, reales, string etc.):
nombre,edad,sueldo=('juan',32,1500.30)
print 'Nombre:%s Edad:%d Sueldo%10.2f' % (nombre,edad,sueldo)
      # Nombre:juan Edad:32 Sueldo 1500.30
Podemos con esto hacer que una función retorne más de un dato (por lo menos en apariencia), esto lo logramos retornando una tupla:
def sumadiferencia(x1,x2):
    suma=x1+x2
    diferencia=x1-x2
    return (suma,diferencia)

su,di=sumadiferencia(10,4)
print su # 14
print di # 6
Como vemos llamamos a una función y le asignamos el valor devuelto a dos variables.
Si queremos inicializar tres variables con el mismo valor la sintaxis que podemos utilizar es:
x1=x2=x3=10
print x1 # 10
print x2 # 10
print x3 # 10
Funciones con parámetros por defecto.
python Funciones con parámetros por defecto
Como habíamos visto una función es una estructura de programación que agrupa un conjunto de instrucciones y resuelve un problema particular. Una función puede tener parámetros, los mismos almacenan los valores que se le pasan cuando la llamamos.
En algunos casos si queremos que la función sea mas flexible podemos definir parámetros con valores por defecto. Esto nos permite llamar a la función pudiendo o no pasar datos a dichos parámetros.
Veamos con un ejemplo este concepto, vamos a desarrollar una función que reciba un dato a imprimir, con la posibilidad de indicarle el color de fuente y el color de fondo, en caso de no indicarle dichos valores la función muestra el dato con color negro y fondo blanco.
def mostrartitulo(dato,colorletra='#000',colorfondo='#fff'):
    print '<h1 style="color:'+colorletra+';background-color:'+colorfondo+'">'+dato+'</h1>'

mostrartitulo('Primer titulo')
mostrartitulo('Segundo titulo','#f00')
mostrartitulo('Tercer titulo','#f00','#000')
Como podemos ver para indicar a Python que un parámetro es por defecto debemos utilizar el operador de asignación en la declaración de la cabecera de la función junto al valor que tomará dicho parámetro en caso de no pasarlo desde donde la llamamos:
def mostrartitulo(dato,colorletra='#000',colorfondo='#fff'):
Cuando llamamos la función mostrartitulo podemos hacerlo de diferentes maneras:
mostrartitulo('Primer titulo')
mostrartitulo('Segundo titulo','#f00')
mostrartitulo('Tercer titulo','#f00','#000')
La primer llamada es pasando un único dato, es decir solo el título que debe mostrar, en este caso el segundo y tercer parámetro toman como valor el indicado en el declaración:
colorletra='#000',colorfondo='#fff'
Podemos llamar a la función mostrartitulo pasando el primer parámetro y el segundo, lo que hace que el tercer parámetro se inicialice con el indicado en la declaración de la función:
mostrartitulo('Segundo titulo','#f00')
En el ejemplo la tercer llamada a la función se hace pasando tres parámetros:
mostrartitulo('Tercer titulo','#f00','#000')
Como podemos ver los parámetros por defecto nos permiten implementar funciones más generales, con esto podemos hacer que las funciones sean útiles para mayor cantidad de situaciones.
Que pasa si queremos llamar la función indicando el primer y último parámetro, esto solo se puede hacer si al llamar la función indicamos que dato se le pasa a cada parámetro:
def mostrartitulo(dato,colorletra='#000',colorfondo='#fff'):
    print '<h1 style="color:'+colorletra+';background-color:'+colorfondo+'">'+dato+'</h1>'

mostrartitulo(dato='Primer titulo',colorfondo='#00f')
Si bien se hace más engorroso la llamada a la función al tener que indicar el nombre de cada parámetro junto al valor, nos trae como beneficio que sea aún más flexible.
Funciones con una cantidad variable de parámetros.
python Funciones con parámetros por defecto1
Otra posibilidad en la declaración de una función en Python es la definición de una cantidad variable de parámetros.
Para definir una cantidad variante de parámetros debemos antecederle el caracter asterísco (*) al último parámetro de la función.
Supongamos que necesitemos implementar una función que le enviemos una serie de enteros y nos retorne la suma de todos ellos (como mínimo le enviamos 2 y no hay un máximo de valores):
def sumar(x1,x2,*xn):
    s=x1+x2
    for valor in xn:
        s=s+valor
    return s

print sumar(1,2)
print '<br>'
print sumar(1,2,3,4)
print '<br>'
print sumar(1,2,3,4,5,6,7,8,9,10)
Lo que en realidad el lenguaje Python hace es una tupla con todos los valores de los parámetros a partir del tercero.
Luego nuestro algoritmo debe recorrer la tupla para procesar los elementos propiamente dichos, en nuestro caso con un for in y los sumamos junto al primer y segundo parámetro.
Luego cuando hacemos la llamada a la función:
print sumar(1,2)
Si pasamos solo dos parámetros la tupla se inicializa vacía, por lo que el for in no ejecuta el bloque contenido.
Si llamamos la función con 10 parámetros:
print sumar(1,2,3,4,5,6,7,8,9,10)
Luego la tupla se crea con 7 elementos.
Si te ha gustado el artículo inscribete al feed clicando en la imagen más abajo para tenerte siempre actualizado sobre los nuevos contenidos del blog:

Crea tus propios ritmos con Hydrogen (3a parte).

Hydrogen_drum_machine_iconHydrogen es un avanzado sintetizador de batería que te permite programar sencillos patrones de ritmo con resultados verdaderamente profesionales.

Hydrogen cuenta con una interfaz totalmente gráfica y relativamente fácil de usar, con soporte para simples, un secuenciador basado en patrones, múltiples capas disponibles para los diversos instrumentos y hasta 32 pistas de composición.

Pros
  • Interfaz muy visual y fácil de utilizar
  • Hasta 32 pistas
Contras
  • Algunos problema
  • Faltan algunos sonidos de batería
7.- El Editor de instrumentos.
En cada patrón pueden aparecer hasta 32 instrumentos. Y cada instrumento puede ser un único sonido basado en una muestra de audio o bién una combinación de hasta 16 capas de muestras.
Los instrumentos con múltiples capas permiten crear sonidos más ricos y sobretodo más realistas. Tienes más información sobre este efecto en una caja amarilla.

La siguiente figura muestra una caja (snare) con 5 capas de muestras.

 
 
8.- Transformando una caja en un bombo.
Hydrogen, como buen instrumento basado en muestras (o directamente "sampler" que es, permite ajustar parámetros de la reproducción de las muestras, para diseñar el sonido a tu gusto:
Estas opciones se encuentran en la ventana Instrument editor
Vamos a ver un ejemplo práctico del uso de estos controles. El objetivo de este ejemplo es crear un sonido de bombo a partir de una muestra de caja. Para empezar, asegúrate que Hydrogen está en pattern mode, sino ponlo en este modo usando el botón mode de la barra de transporte.
Pon una pista de caja (snare) en modo solo. Tienes dos formas de hacer esto: Desde el Pattern editor haciendo clic con el botón derecho sobre la pista de caja, o bien, desde el Mixer activando el botón del canal correspondiente.

Rellena unos cuantos golpes de caja en el patrón actual para oír constantemente el sonido que vamos a manipular. Si no lo está, selecciona el instrumento de caja en el Pattern editor.

Ahora ya estamos listos para ajustar parámetros de la ventana Instrument. Primero de todo, vamos a bajar el tono o afinación del instrumento. Para ello gira al máximo a la izquierda el botón pitch que se encuentra en la pestaña Layers. Si se tratara de un instrumento multi capa, debes repetir la operación para todas las capas.

El sonido es más grave pero aún es demasiado largo y ruidoso.
Sitúate en la pestaña Instrument y modifica el envolvente ADSR (attack, decay, sustain, release) de la siguiente forma: Gira el sustain el máximo a la izquierda, situa el decay alrededor de un 25% y asegúrate que el tiempo de ataque, botón attack está al mínimo. Con esto conseguimos que solamente suene un ataque corto de la caja.

Por último, atenua los agudos fijando un cutoff bastante bajo, y sube la resonance para realzar el efecto de filtro, tal como mostramos en la captura de pantalla.
 
9. Reciclando un loop de batería 
Selecciona un canal vacío en el Pattern Editor, abre el Instrument Editor, ve a la pestaña Layer y carga el archivo WAV correspondiente mediante el botón Load.

Repite la operación con el resto de sonidos que quieras cargar.

Utiliza tus conocimientos musicales y experimenta con los sonidos que cortaste, seguro que saldrá algo original. Debes tener en cuenta que dependiendo de si los sonidos que utilices contienen más de un golpe de percusión, estos irán al tempo original del loop y por lo tanto tendrás que ajustar el tempo de Hydrogen con el del loop original.

Finalmente, usa la opción File-Export para exportar toda tu canción en un archivo WAV.

10.- Crea tus propios drumkits .
El Drumkit Manager es, como su propio nombre indica en inglés, el gestor de los drumkits que usamos en Hydrogen. Permite exportar los kits de percusión que hayas creado con el editor de instrumentos, o importar conjuntos de instrumentos creados por otros usuarios.

Para exportar los drumkits que estes utilizando en el programa, primero debes guardarlos en la lista de drumkits. Cuando tengas tu kit listo para guardar, abre el Drumkit Manager por el panel de Save y escribe un nombre para tu kit, añade si quieres el nombre del autor (tu mismo!) y una breve descripción y guárdalo. Vuelve al panel Load y aparecerá listado junto a los kits por defecto de Hydrogen. Ahora ya puedes exportar cualquiera de los kits que aparezcan en esta lista.

Selecciona el kit a exportar, dale un nombre y haz clic en el botón Export. El archivo resultante tendrá la extensión *.h2drumkit y contendrá los ajustes de todas tus muestras así como los propios sonidos que has utilizado. Para importar sonidos que hayas descargado de internet o que tengas archivados pero no cargados en el programa, deberás importarlos primero mediante el panel Import. Localiza el archivo a importar y haz clic en Open. Ahora el archivo estará disponible en tu lista de kits para ser cargado en Hydrogen desde el panel Load.

Si te ha gustado el artículo inscribete al feed clicando en la imagen más abajo para tenerte siempre actualizado sobre los nuevos contenidos del blog:

4 Infografías de LibreOffice.

libreoffice 4LibreOffice es una suite ofimática libre y gratuita multiplataforma que cuenta con un procesador de texto (Writer), un editor de hojas de cálculo (Calc), un gestor de presentaciones (Impress), un gestor de bases de datos (Base), un editor de gráficos vectoriales (Draw), y un editor de fórmulas matemáticas (Math).


LibreOffice fue creada por la fundación The Document Foundation como una bifurcación (fork) de la suite OpenOffice.org en octubre de 2010. Está disponible bajo la licencia GNU Lesser General Public License.


La compra de Sun Microsystems (líder del desarrollo de OpenOffice.org) por Oracle fue el desencadenante de esta bifurcación debido a la orientación dada por Oracle.

LibreOffice 3.3 ha sido descargado más de 1,3 millones de veces. Es la suite ofimática predeterminada en Debian (versión testing), Ubuntu, openSUSE, Fedora y Mageia

libreoffice infografica

libreoffice infografica2

libreoffice infografica1

libreoffice infografica3

Si te ha gustado el artículo inscribete al feed clicando en la imagen más abajo para tenerte siempre actualizado sobre los nuevos contenidos del blog:

Cómo sincronizar tu teléfono móvil en Ubuntu con Wammu.

wammu-logoWammu es un programa para manejar los datos en el teléfono celular como los contactos, calendario y mensajes.

Está creado sobre la biblioteca Gammu, que provee una capa de abstracción para trabajar con diferentes teléfonos celulares de diferentes proveedores (incluyendo Nokia, Sony-Ericsson, Motorola, Samsung, Siemens, Huawei y otros).

Con Wammu, podremos sincronizar teléfonos móviles Symbian sin ningún problema, además de incluir soporte para otros terminales con sistema operativo propiedad de la marca como pueden ser Nokia, Samsung, Alcatel, Siemens, Motorola o Sharp entre otros modelos.

Para revisar el soporte de un modelo de teléfono la mejor fuente es la Base de datos de teléfonos Gammu que contiene la experiencia de los usuarios con Gammu y diferentes modelos de teléfono.

Familia Gammu.

Gammu ya no es solo un único programa sino que también hay muchas herramientas útiles que comparten la misma biblioteca.

Wammu.

Programa con Interfaz gráfica para manejar contactos, tareas, calendario y mensajes en tu teléfono.

Gammu.

Utilidad de línea de comandos que permite usar todas las funciones de libGammu.

libGammu.

Biblioteca que exporta una API C para comunicarse con teléfonos celulares.

Gammu SMSD.

Servicio de demonio SMS para recibir y mandar mensajes automaticamente.

Python-Gammu.

Vinculaciones Python para libGammu para poder utilizala desde scripts Python.

Kalkun.

Manejador web de SMS («Short Message Service») de código abierto de terceras partes que utiliza Gammu SMSD.

wammu wizard-8 kalkun-dark

Descargas:

Ultima versión estable: 1.33.0

Gammu.

Wammu.

 

Capturas de pantallas.

wammu wizard-1

wammu wizard-2

wammu wizard-3

wammu wizard-5

wammu wizard-7

wammu wizard-8

wammu-edit

Si te ha gustado el artículo inscribete al feed clicando en la imagen más abajo para tenerte siempre actualizado sobre los nuevos contenidos del blog:

Los 10 artículos más leídos en El Mundo de Ubuntu en el mes de Junio 2013.

 

1.- DJL es un instalador de juegos que proporciona una interfaz sencilla y muchas utilidades.

djl_depotDJL es es un administrador de juegos escrito en Python, que nos permitirá instalar una gran cantidad de títulos (ver el detalle al final del post) en Linux. Es un gestor de juegos, que nos sirve tanto para lanzar los juegos que hemos instalado con él, como para instalar juegos desde la red. He mirado los juegos disponibles en el repositorio y no me puedo quejar, están tanto los más famosos como los no tan conocidos. Para usarlo debemos descargar la última versión, descomprimirla e instalarla.

 

2.- 11 excusas para no usar Ubuntu.

ubuntu vs windowsEstos son algunos de los argumentos que los usuarios de Windows utilizan para no usar Ubuntu ( incluye a Linux en general). Los escucho a diario cuando dicen ,,,,"como podés usar eso y no tener Windows". Los tengo , tanto XP y Seven ( originales) y los he usado por mucho tiempo, solo que los quité de mis ordenadores de uso privado. Algunos cuestionamientos que se hacen por desconocimiento.

 

3.- Ubuntu 13.04 disponible para descarga (Información de pantalla, video, tutorial).

raring ringtail open developmentCanonical oficialmente ha publicado hoy su version 13.04 nombre en codigo “Raring Ringtail”. Se están notando las ventajas de optimizar el sistema operativo para dispositivos móviles con pocos recursos. El sistema consume menos Ram y se agiliza su utilización. Los cambios más destacados, respecto al consumo son:

  • Se ha reducido el uso de memoria que hacían algunos paquetes, cargando datos e imágenes CSS de GTK3, sólo cuando se necesitan.
  • Se arreglaron problemas de memoria en los paquetes libdbusmenu, update-notifier, upower, whoopsie y otros más.
  • LightDM PPS cayó de un uso de 25.7M a 0.6M
  • Algunos procesos fueron modificados para que terminen si no se usan y se reinicien cuando se demandan, por ejemplo signond, signon-ui.

 

4.- Guía HTML: introducción y estructura interna de una página.

html-questionsEn una reciente limpieza a mi disco duro he encontrado esta guia que tenia guardada por ahi y creo que esta muy buena para empezar y conocer las nociones basicas del HTML.
Introducción.
HTML es el lenguaje que se emplea para el desarrollo de páginas de internet.
Este lenguaje está constituido de elementos que el navegador interpreta y las despliega en la pantalla de acuerdo a su objetivo. Veremos que hay elementos para disponer imágenes sobre una página, hipervínculos que nos permiten dirigirnos a otra página, listas, tablas para tabular datos, etc.

 

5.- Guia Python: funciones, estructuras y formatos (2a parte).

python logoPython es un lenguaje de script desarrollado por Guido van Rossum. Podemos codificar empleando programación lineal, estructurada y orientada a objetos (tengamos en cuenta que esta última es la que se ha impuesto en la actualidad). Se cuenta con intérpretes de Python en múltiples plataformas: Windows, Linux, Mac etc. Se pueden desarrollar aplicaciones de escritorio como aplicaciones web. Empresas como Google, Yahoo, Nasa etc. utilizan este lenguaje para sus desarrollos (actualmente el creador de Python Guido van Rossum trabaja para Google.)

 

6.- Diseño Gráfico en Linux: completo videotutorial de Gimp (28 vídeos).

GIMP (GNU Image Manipulation Program) es un programa de edición de imágenes digitales en forma de mapa de bits, tanto dibujos como fotografías. Es un programa libre y gratuito. Forma parte del proyecto GNU y está disponible bajo la Licencia pública general de GNU. Es el programa de manipulación de gráficos disponible en más sistemas operativos (Unix, GNU/Linux, FreeBSD, Solaris, Microsoft Windows y Mac OS X, entre otros).

 

7.- Guia Python: operadores y estructuras (2a parte).

python logoPython es un lenguaje de script desarrollado por Guido van Rossum. Podemos codificar empleando programación lineal, estructurada y orientada a objetos (tengamos en cuenta que esta última es la que se ha impuesto en la actualidad). Se cuenta con intérpretes de Python en múltiples plataformas: Windows, Linux, Mac etc. Se pueden desarrollar aplicaciones de escritorio como aplicaciones web. Empresas como Google, Yahoo, Nasa etc. utilizan este lenguaje para sus desarrollos (actualmente el creador de Python Guido van Rossum trabaja para Google.)

 

8.- FreetuxTV excelente aplicación para ver la TV o escuchar la radio en Ubuntu.

Si buscas una aplicación que te permita ver la televisión en directo o escuchar la radio de cualquier parte del mundo en GNU/Linux puede que FreeTuxTV te sea de gran utilidad ya que nos permite hacer esto mismo de forma sencilla. La interfaz de FreetuxTV es muy sencilla y cuando lo iniciamos ya podremos agregar los canales en español, también podremos grabar lo que estamos viendo muy útil si quieres mantenerlo en tu equipo para verlo cuando quieras.

 

9.- Guia Python: funciones, estructuras y formatos (3a parte).

python logoPython es un lenguaje de script desarrollado por Guido van Rossum.Podemos codificar empleando programación lineal, estructurada y orientada a objetos (tengamos en cuenta que esta última es la que se ha impuesto en la actualidad). Se cuenta con intérpretes de Python en múltiples plataformas: Windows, Linux, Mac etc. Se pueden desarrollar aplicaciones de escritorio como aplicaciones web. Empresas como Google, Yahoo, Nasa etc. utilizan este lenguaje para sus desarrollos (actualmente el creador de Python Guido van Rossum trabaja para Google.)

 

10.- Workarround para usar PulseAudio y Jack de forma sencilla.

Para los que están metidos en el mundo de grabación y producción musical en GNU/Linux de seguro están más que familiarizados con JACK (una herramienta excelente), y seguramente tengan más de una placa de audio (alguna interfaz profesional, la placa de sonido onboard, el micrófono incorporado en las cámaras web, etc) y la forma más fácil de tener todas las placas en orden es a través de PulseAudio.

Si te ha gustado el artículo inscribete al feed clicando en la imagen más abajo para tenerte siempre actualizado sobre los nuevos contenidos del blog: