viernes, 16 de mayo de 2014

Pulse audio: Servidor remoto de audio

¿Quieres escuchar todas tus PCs en una sóla PC?

En la PC que fungirá como servidor ejecutamos

$ pactl load-module module-native-protocol-tcp auth-ip-acl=xxx.xxx.xxx.0/24 auth-anonymous=1
22

Donde xxx.xxx.xxx.0/24 representa que le quiere dar permiso a PC de su red local, por ejemplo:

192.168.1.0/24

El número que da  se usa para apagar el módulo con

$ pactl unload-module 22

En el/los cliente(s):

 $ pax11publish -e -S xxx.xxx.xxx.xxx

donde las xxx.xxx.xxx.xxx representa la dirección ip del servidor, (ej. 192.168.1.3). Con la siguiente instrucción regresamos el audio al cliente.

 $ pax11publish -e -r


Si el servidor es ubuntu y tienen el firewall activado, con

$ sudo ufw allow 4713/tcp

abren el puerto.

Otro comando del lado del servidor muy útil es

$ pactl load-module module-loopback latency_msec=10

Con esto podremos escuchar la entrada del micrófono, si hay mucho ruido, con el alsamixer o el gnome-alsamixer, disminuyen el nivel de "Mic Boos".

viernes, 31 de enero de 2014

La aventura de los cursos en línea (IV)

Coursera (parte II):

"VLSI CAD: Logic to Layout": Todo un tema, sobre todo porque me gusta, te da una visión de lo que las herramientas para el desarrollo de circuitos tienen que hacer. [Computational boolean algebra; logic verification; logic synthesis(2 level and multi-level); technology mapping; timing analysis; ASIC placement and routing]

"Exploring Quantum Physics": ¿Han escuchado el término de medicina cuántica? Si es así, entra en este curso para darte cuenta que los que los que la promueven usan el termino en forma abusiva para darle un toque de realismo y hacer creer que tienen bases científicas para sus afirmaciones.

"The Hardware/Software Interface": Buen curso para aprender lenguaje ensamblador, desensamblar programas, y ver las formas en como nuestros sistemas operativos administran la memoria.

"Computational Neuroscience": Técnicas computacionales para analizar, modelar y entender el comportamiento de las neuronas.

"Archaeology's Dirty Little Secrets": Curiosidad! ¿Qué esperas? Buen curso para saber que hay detrás de bambalinas en el trabajo de los arqueólogos.

"Computational Molecular Evolution": Introducción a la teoría de la evolución molecular a través  de algoritmos computacionales.

"Coding the Matrix: Linear Algebra through Computer Science Applications": Aprendes álgebra lineal a través de la programación.

"Linear and Integer Programming": El instructor de este curso es uno de los mejores que he visto, ya que tiene la capacidad de explicar la teoría que ha detrás de la Programación Lineal de forma que cualquiera lo pueda entender, y lo mejor que afianzas los conceptos realizando, paso a paso, tu propio programa.

"From the Big Bang to Dark Energy": No podía dejarlo pasar, este es otro tour por nuestro universo.

"Initiation à la programmation (en C++)" y "Initiation à la programmation (en Java)": ¿Quieres afinar el oído para el Francés y programar al mismo tiempo? Estos son tus cursos, si no, no te preocupes se puede demostrar que las matemáticas no son el único lenguaje universal, también la programación es un lenguaje universal :).

"C++ For C Programmers": El curso perfecto para aprender programación orientada a objetos en C++, entender las principales funciones de este lenguaje, y los que hacer y no hacer. Durante el curso se programó el juego de Hex.

$ ./HexGame
Welcome to the Hex Board Game
Hello Human, dou you want to beat me.
I'm so confident that I will play under your rules, muaja, muaja ...
Select Board size (7-?) : 7
Select your color (BLUE|RED) BLUE always play first : BLUE
   0  1  2  3  4  5  6
 0   .  .  .  .  .  .  .  
   1   .  .  .  .  .  .  .  
     2   .  .  .  .  .  .  .  
       3   .  .  .  .  .  .  .  
         4   .  .  .  .  .  .  .  
           5   .  .  .  .  .  .  .  
             6   .  .  .  .  .  .  .  
Human move (x y) : 4 4
   0  1  2  3  4  5  6
 0   .  .  .  .  .  .  .  
   1   .  .  .  .  .  .  .  
     2   .  .  .  .  .  .  .  
       3   .  .  .  .  .  .  .  
         4   .  .  .  .  B  .  .  
           5   .  .  .  .  .  .  .  
             6   .  .  .  .  .  .  .  
Computer move (x y) : 4 1 (Elapsed time = 3.05 seconds)
   0  1  2  3  4  5  6
 0   .  .  .  .  .  .  .  
   1   .  .  .  .  .  .  .  
     2   .  .  .  .  .  .  .  
       3   .  .  .  .  .  .  .  
         4   .  R  .  .  B  .  .  
           5   .  .  .  .  .  .  .  
             6   .  .  .  .  .  .  .  
Human move (x y) : 


Otros:
A través de los foros del curso de VLSI CAD llegué a un curso llamado Digital ASIC (http://go.distance.ncsu.edu/digital-asic/), a pesar de que por cuestiones de tiempo no fue posible finalizar completamente el último ejercicio (arreglar un bug), aprendí sobre la programación en verilog, además de conceptos que ha detrás de un buen diseño.

MiriadaX
  "Desarrollo de Aplicaciones en HTML5 y para Dispositivos Móviles Firefox O.S.": Este es la primera entrega de una serie de cursos destinados a enseñar el diseño de aplicaciones para los dispositivos que vengan el SO de Mozilla.

La aventura de las cursos en línea (III)

Coursera (parte I):

Esta es la plataforma en la que he estado más activo, así que lo voy a dividir.

"Model Thinking": Todo es modelable, desde lo económico hasta el comportamiento humano, en alguna u otra forma ¡somos todos unos borregos noooooooooooo!.

"Cryptography I": Entro los conceptos, los ejercicios y la programación fue todo un reto. WEP ya se porque eres malo, muy malo.

"Algorithms: Design and Analysis, Part 1": Son de ese tipo de cursos que son un parte aguas, de esos cursos que te hacen cambiar de una programación estilo fuerza bruta a pensarle en los algoritmos y las estructuras de datos para optimizar nuestros programas.

"Probabilistic Graphical Models": Este pertenece a una lista de los cursos que más me han gustado.

"Fundamentals of Pharmacology": !Oh curiosidad¡ No podía dejar pasar la oportunidad de conocer como interactúan los medicamentos en nuestro cuerpo.

"Quantum Mechanics and Quantum Computation": Son de esos temas que llaman mucho la atención, tienes un conjunto de compuertas con las que puedes trabajar. Me lo imagino como los GAL, donde tienes un arreglo de compuertas lógicas que combinas de tal forma que realicen la operación u/o algoritmo que desees.

"Introduction to Mathematical Thinking": El instructor mostró una gran pasión (contagiosa) por lo que hace, explicando de forma clara, precisa y con entusiasmo el arte de las demostraciones y del pensamiento matemático, en lugar del proponer algo mecanizado con un "porque yo lo digo".

"Writing in  the Sciences": Buen curso para tomar conciencia de los que hacer y no hacer cuando realizas un escrito científico. Aunque muchas veces suele ser difícil modificar los hábitos.

"Computing for Data Analysis": Mostraron los conceptos y las metodologías más comunes para realizar un análisis estadístico usando R.

"An Introduction to Interactive Programming in Python": Otra forma de aprender python.

"Introduction to Astronomy": Todo un tour guiado por el Universo de Newton, los Planetas, las estrellas, la evolución estelar, la relatividad y los hoyos negros, galaxias y una breve introducción a la cosmología. Muy gratificante y recreacional.

"Galaxies and Cosmology": Una mirada más profunda a la evolución de las galaxias y de nuestro universo.

"Game Theory": Son de esos cursos cuyas ideas y conceptos planteados en ellos jamás olvidas, y te cambian la perspectiva.

"Image and video processing: From Mars to Hollywood with  a stop at the hospital": Técnicamente es procesamiento de imágenes.

"Intermediate Algebra", "Calculus One" , "Calculus: Single Variable" y "Calculus Two: Sequences and Series": Una serie de cursos para re-aprender, afianzar y/o ver como en otros lados enseñan estos temas.

"Control of Mobil Robots": Te has preguntado porque tu robot móvil no funciona adecuadamente, entra y te darás cuenta porque.

La aventura de los cursos en línea (II)

Continuemos con EDX.

"CS169.1x Software as a Service": Esta es la primera parte de un curso enfocado a enseñar las técnicas y conceptos usados en el desarrollo de las apliciones en la nube. En este curso se uso Ruby on Rails.

"CS188.1x Artificial Intelligence": De nuevo, pues si, pero con otro enfoque, me acabé de dar cuenta que mi coco son las heurísticas, jajajaja, era divertido ver al packman suicida corriendo a las garras de los fantasmas, o completamente temeroso incapaz moverse.

"Stat2.2 Introduction to Statitics: Probability": Nunca se termina de aprender, sobre todo porque, según el área de conocimiento de cada instructor, las interpretaciones que le da a cada concepto pueden llegar a ser un poco distintas.

"CS1156x Learning From Data": Todo algoritmo en "Machine Learning" tiene sus fundamentos, y este es un buen curso para comenzar a adquirirlos. Cuenta con un buen balance entre teoría y práctica.

"6.00x Introduction to Computer Science and Programming": Un tour completo en el mundo de la programación, los algoritmos, etc. Se usó python.

"CS50x Introduction to Computer Science I": Versión y visión de Harvardx de lo que una introducción al mundo de las Ciencias Computacionales.

"2.01x Elements of Structures":  Oh curiosidad!. Fuerzas, Momentos, Cargas Axiales, Torque, etc. etc. Casi me termino doblando :) .

"MCB80.1x Fundamentals of Neuroscience, Part 1: The Electrical Properties of the Neuron": Todas esas animaciones y simulaciones fueron imprescindibles para visualizar el funcionamiento de las neuronas. Existe la opción de comprar un kit para que no te digan, que no te cuenten, si lo puedes comprobar por ti mismo.

La aventura de las cursos en línea (I)

Esta aventura la comencé con las primeras ofertas que fueron "Introduction to Artificial Intelligence" por parte de Sebastian Thrun y Peter Norving, "Introdution to Databases" por Jennifer Widom y "Machine Learning" por Andrew Ng.

Grandiosa experiencia fue el tomar esos cursos y más el haberlos terminado, porque de los miles que se inscribieron, por diversas causas, sólo un porcentaje pequeño fueron los que terminaron.

Estas plataformas representan una forma alternativa de explorar varios puntos de vistas y formas de enseñar una misma materia, explorar otras ramas del conocimiento humano y una fuente inagotable de conocimientos.

"Introduction to Artificial Intelligence": Nunca había tenido contacto con este tema, pero es algo fascinante ver y programar algunos de los algoritmos que ayudan a que una máquina realice algo que parezca inteligente.

"Introduction to Databases": Aquí aprendí que las bases de datos son más que un select,insert, update. La lógica y el álgebra que están detrás son impresionantes. Mis más sinceros respetos a los que las diseñan.

"Machine Learning": Sin palabras.

De este experimento surgieron las plataformas UDACITY y COURSERA. Sin dejar al lado otro experimento (MITx) del cual surgió la plataforma EDX.

6002x Circuits and Electronics (Agarwal): Gran experiencia, sobre todo la parte cómica, en la que presentaba algunos conceptos.

En este y otros post hablaré brevemente de cada uno de los cursos que he finalizado en cada una de las plataformas.

Iniciemos por UDACITY, cuyo objetivo es que te la lleves tranquilo y a tu propio ritmo:

"Introduction to Computer Science": Aprendes los conceptos básicos de la programación (python) por medio de un proyecto donde se realiza un web crawler.

"Artificial Intelligene for Robotics": Continuación de la saga "Introduction to Artificial Intelligence".

"Intro to Statistics": Siempre es bueno recordar y/o pedir una segunda opinión. Buen curso si se quiere iniciar o recordar, además de programar en python.

"Design of Computer Programs": Un tour guiado en la programación usando python aprovechando algunas características avanzadas de este lenguaje.

"Applied Cryptography": Excelente curso para entender las bases de los algoritmos usados para encriptar nuestras comunicaciones entre otras cosas.

Lo bueno: Con el beneficio que da el llevarlo a tu propio ritmo, no tienes fechas límites más las que uno se imponga. Puedes iniciar cualquier curso en cualquier tiempo, a diferencia de las otras plataformas.
Lo malo: Si no se tiene cuidado se puede terminar inscribiéndose a todos los cursos, y de tantos no saber por cual ir.

viernes, 24 de enero de 2014

Instalando Tiva C Launchpad en Ubuntu GNU/Linux

Con motivo de curso ofrecido en la plataforma www.edx.org llamado Embedded Systems - Shape The World (https://www.edx.org/course/utaustinx/utaustinx-ut-6-01x-embedded-systems-1172), he adquirido el Tiva C Launchpad de TI. Pero como usarlo en Linux, ya que es el SO que más uso.

Toolchain

Primero añadimos el PPA del toolchain, para ellos abrimos una terminal y ejecutamos los siguientes comandos.

sudo add-apt-repository ppa:terry.guo/gcc-arm-embedded
sudo apt-get update
sudo apt-get install gcc-arm-none-eabi


lm4flash

Instalamos los siguientes paquetes:

sudo apt-get install flex bison libgmp3-dev libmpfr-dev libncurses5-dev libmpc-dev autoconf texinfo build-essential libftdi-dev git libusb-1.0-0-dev


Clonamos el repositorio del lm4tools:

git clone https://github.com/utzig/lm4tools.git
cd lm4tools/lm4flash/
make
sudo cp lm4flash /usr/bin/


Añadimos una nueva regla udev para darle acceso al Tiva C Launchpad a los usuarios normales.

$ cat /etc/udev/rules.d/99-tivac.rules
ATTR{idVendor}=="15ba", ATTR{idProduct}=="0004", GROUP="plugdev", MODE="0660" # Olimex Ltd. OpenOCD JTAG TINY
ATTR{idVendor}=="067b", ATTR{idProduct}=="2303", GROUP="plugdev", MODE="0660" # Prolific Technology, Inc. PL2303 Serial Port
ATTR{idVendor}=="10c4", ATTR{idProduct}=="ea60", GROUP="plugdev", MODE="0660" # USB Serial
ATTR{idVendor}=="1cbe", ATTR{idProduct}=="00fd", GROUP="plugdev", MODE="0660" # TI TivaC/Stellaris Launchpad

sudo udevadm control --reload-rules

Tiva C Ware

Descargamos SW-EK-TM4C123GXL-1.0.exe de http://www.ti.com/tool/sw-ek-tm4c123gxl. Si no tienen cuenta se va a tener que crear para poder descargarlo.

Ya descargado procedemos a descomprimirlo con unzip y lo compilamos

unzip SW-EK-TM4C123GXL-1.0.exe
make

Si todo ha ido bien podremos subir alguno de los ejemplos en nuestra tarjeta de desarrollo

$ lm4flash examples/boards/ek-tm4c123gxl/blinky/gcc/blinky.bin


lunes, 26 de diciembre de 2011

Simulación BPSK en python/numpy/matplotlib

Una pequeña prueba



import numpy as np
from scipy.special import erfc
#from scipy import weave
#from scipy.weave import converters
import matplotlib.pyplot as plt
from time import time

N = 5000000
ip = np.random.rand(1,N)>0.5;
s = 2*ip-1
t = time()
n = 1.0/np.sqrt(2.0)*(np.random.randn(1,N)+1j*np.random.randn(1,N))
print(time()-t)
Eb_N0_dB = np.arange(-3.0,11.0,1.0) #-3 a 10 dB
errors = []
terrors = []
for EbN0 in Eb_N0_dB:
t = time()
y = s+10**(-EbN0/20.0)*n
ipHat = y.real>0
err = float((ip != ipHat).sum())/N
errors.append(err)
terrors.append(0.5*erfc(np.sqrt(10**(EbN0/10.0))))
print("time = %s, EbN0 = %s, ber = %s"%(time()-t,EbN0,err))
plt.semilogy(Eb_N0_dB,errors,'-o')
plt.semilogy(Eb_N0_dB,terrors,':v')
plt.legend(('simulation','theory'),'upper right',shadow=True,fancybox=True)
plt.title('Bit Error Rate for BPSK')
plt.xlabel(r'$\frac{Eb}{N0}$, dB')
plt.ylabel('Bit Error Rate')
plt.grid(True)
plt.show()



viernes, 29 de julio de 2011

Una prueba de code2html

code2html es una aplicación destinada a convertir tu código en html para poder publicarlo.

$ code2html -h
Code2Html, version 0.9.1, Jan 2002, peter@palfrader.org
Usage: code2html [options] [input_file [output_file]]

Convert a program source to syntax highlighted HTML,
or any other format for wich rules are defined.

-l, --language-mode set language mode
--fallback LANG fallback language mode
-v, --verbose prints progress information to STDER
-n, --linenumbers print out the source code with line numbers
-P, --prefix optional prefix to use for linenumber anchors
-N, --linknumbers linenumbers will link to themselves
-t, --replace-tabs[=TABSTOP-WIDTH]
replace with spaces
-L, --language-file=LANGUAGE-FILE
specify an alternate file for definitions
-m, --modes print all available modes
-h, --help print this message
-V, --version print version
-c, --content-type prints a Content-Type header
-o, --output-format selects the output-format
-H, --no-header don't use the template
--template=FILE override template
-T, --title set title

-w, --linewidth max characters per line
-b, --linebreakprefix prefix of the new lines

see the man-page code2html for further help


$ code2html -m
Defined modes: ada, ada95, awk, c, c++, cc, cpp, cxx, gpasm, groff, html, java, javascript, js, lisp, m4, make, makefile, pas, pascal, patch, perl, plain, pov, povray, python, ruby, sh, shellscript, sql.
Defined outputformats: html, html-dark, html-fntlck, html-light, html-nobg, html-nocolor, html-simple.

ejemplos:

code2html pex.py -H
import xlrd
import
xlwt
from
xlutils.copy import copy

class
xls(xlwt.Workbook):
def __init__(self, encoding='ascii', style_compression=0):
xlwt.Workbook.__init__(self,encoding, style_compression)

def add_sheet2(self,worksheet):
if
isinstance(worksheet,xlwt.Worksheet):
self._Workbook__worksheet_idx_from_name[worksheet.name.lower()] = len(self._Workbook__worksheets)
self._Workbook__worksheets.append(worksheet)
else
:
raise
Exception("invalid worksheet")

file_name = 'tb_wbdh13.xls'
rb = xlrd.open_workbook(file_name,formatting_info=True)

print
rb
print
rb.name_and_scope_map
print
rb.name_map
print
rb.name_obj_list
print
"____________________________________"
for
name in rb.name_obj_list:
print
name
print
name.name
print
name.raw_formula
print
name.result.text
print
name.scope

sheet = rb.sheet_by_index(0)
print
sheet.colinfo_map
print
sheet.rowinfo_map
print
sheet.col_label_ranges
print
sheet.row_label_ranges
print
sheet.cell(1,3).xf_index
print
sheet.colinfo_map[0].xf_index
print
dir(sheet)
#print xlrd.dump(file_name)
wb = copy(rb)
ws = wb.get_sheet(0)
doc = xls()
doc.add_sheet("CLK_PROCESS_0")
doc.add_sheet("CLK_PROCESS_1")
doc.add_sheet("CLK_PROCESS_bak")

doc.add_sheet2(ws)
doc.save('out.xls')


code2html -n pex.py -H
 1 import xlrd
2 import
xlwt
3 from
xlutils.copy import copy
4
5 class
xls(xlwt.Workbook):
6 def __init__(self, encoding='ascii', style_compression=0):
7
xlwt.Workbook.__init__(self,encoding, style_compression)
8
9 def add_sheet2(self,worksheet):
10
if
isinstance(worksheet,xlwt.Worksheet):
11
self._Workbook__worksheet_idx_from_name[worksheet.name.lower()] = len(self._Workbook__worksheets)
12
self._Workbook__worksheets.append(worksheet)
13 else
:
14 raise
Exception("invalid worksheet")
15
16
file_name = 'tb_wbdh13.xls'
17
rb = xlrd.open_workbook(file_name,formatting_info=True)
18
19 print
rb
20 print
rb.name_and_scope_map
21 print
rb.name_map
22 print
rb.name_obj_list
23 print
"____________________________________"
24 for
name in rb.name_obj_list:
25 print
name
26 print
name.name
27 print
name.raw_formula
28 print
name.result.text
29 print
name.scope
30
31
sheet = rb.sheet_by_index(0)
32 print
sheet.colinfo_map
33 print
sheet.rowinfo_map
34 print
sheet.col_label_ranges
35 print
sheet.row_label_ranges
36 print
sheet.cell(1,3).xf_index
37 print
sheet.colinfo_map[0].xf_index
38 print
dir(sheet)
39
#print xlrd.dump(file_name)
40
wb = copy(rb)
41
ws = wb.get_sheet(0)
42
doc = xls()
43
doc.add_sheet("CLK_PROCESS_0")
44
doc.add_sheet("CLK_PROCESS_1")
45
doc.add_sheet("CLK_PROCESS_bak")
46
47
doc.add_sheet2(ws)
48
doc.save('out.xls')


code2html -o html-nocolors -H prex.py
import xlrd
import xlwt
from xlutils.copy import copy

class xls(xlwt.Workbook):
def __init__(self, encoding='ascii', style_compression=0):
xlwt.Workbook.__init__(self,encoding, style_compression)

def add_sheet2(self,worksheet):
if isinstance(worksheet,xlwt.Worksheet):
self._Workbook__worksheet_idx_from_name[worksheet.name.lower()] = len(self._Workbook__worksheets)
self._Workbook__worksheets.append(worksheet)
else:
raise Exception("invalid worksheet")

file_name = 'tb_wbdh13.xls'
rb = xlrd.open_workbook(file_name,formatting_info=True)

print rb
print rb.name_and_scope_map
print rb.name_map
print rb.name_obj_list
print "____________________________________"
for name in rb.name_obj_list:
print name
print name.name
print name.raw_formula
print name.result.text
print name.scope

sheet = rb.sheet_by_index(0)
print sheet.colinfo_map
print sheet.rowinfo_map
print sheet.col_label_ranges
print sheet.row_label_ranges
print sheet.cell(1,3).xf_index
print sheet.colinfo_map[0].xf_index
print dir(sheet)
#print xlrd.dump(file_name)
wb = copy(rb)
ws = wb.get_sheet(0)
doc = xls()
doc.add_sheet("CLK_PROCESS_0")
doc.add_sheet("CLK_PROCESS_1")
doc.add_sheet("CLK_PROCESS_bak")

doc.add_sheet2(ws)
doc.save('out.xls')

domingo, 24 de julio de 2011

[Python] Descargando desde rapidshare usando la api

Sólo por probar como funciona la api de rapidshare que se encuentra documentada en http://images.rapidshare.com/apidoc.txt
#!/usr/bin/env python

import sys
import urllib2
import urllib
import time
url =  "http://rapidshare.com/#!download|958tl|40"
url += "20022538|NarutoKizunaDriveSaveData.rar|222|"
url += "R~3187F38923AB1D7B76BF6D2C55ADDCEE"
print url #link de prueba
url_api = "http://api.rapidshare.com/cgi-bin/rsapi.cgi"

status_file = {0:'File not found',
1:'File OK',
3:'Server down',
4:'File marked as illegal',
5:'Direct download'
}

headers = {'User-Agent':'Firefox Mozilla 7.0'}

class opener(urllib.FancyURLopener):
version = headers['User-Agent']

def check_files(link):
#Aquí vamos a verficar que el link sea válido
#?sub=checkfiles_v1&filenames=?&files=?
try:
file_id, file_name = link.rsplit('/')[3].split('|')[2:4]
except:
print("No rapidshare link")
sys.exit(1)

params = {'filenames':file_name,
'files':file_id,
}
params_string = urllib.urlencode(params)
check_link = "%s?sub=checkfiles_v1&%s"%(url_api,params_string)
request = urllib2.Request(url=check_link, headers=headers)
conn = urllib2.urlopen(request)
file_id, file_name,size,serverid,status,short_host,fmd5 = conn.read().split(',')
print("check_files -----------------|\n")
print(status_file[int(status)])
if status == '1':
print("File ID: %s\nFile Name: %s\nsize: %s bytes"%(file_id,file_name,size))
print("Server ID: %s\nShort host: %s\nmd5_hex: %s"%(serverid,short_host,fmd5))
return file_id,file_name,size,serverid,fmd5
else:
print('Aborting download')
sys.exit(1)


def get_download_auth(file_id,file_name):
#Para usuarios con cuentas gratuitas obtenemos primero el la autorización de descarga
# y el tiempo de espera para descargar
#?sub=download_v1&filname=?&fileid=?
params = {'filename':file_name,
'fileid':file_id
}
params_string = urllib.urlencode(params)
link = "%s?sub=download_v1&%s"%(url_api,params_string)
request = urllib2.Request(url=link, headers=headers)
conn = urllib2.urlopen(request)
key, value = conn.read().split(':')
if key == "ERROR":
print("Error:%s"%value)
sys.exit(1)
host, dlauth, countdown, fmd5 = value.split(',')
print("get_download_auth ---------------|\n")
print(link)
print("\nHost: %s\ndlauth: %s\ncountdown: %s seconds"%(host,dlauth,countdown))
return host, dlauth, countdown, fmd5

def download_file(file_id,file_name,host,dlauth, countdown, fmd5):
#Descargamos el archivo
params = {'fileid':file_id,
'filename':file_name,
'dlauth':dlauth
}
params_string = urllib.urlencode(params)
download_link = "http://%s/cgi-bin/rsapi.cgi?sub=download_v1&%s"%(host,
params_string)
time.spleep(int(countdown))
print("download_file --------------|\n")
print(download_link)
download_opener = opener()
filename, headers = download_opener.retrieve(download_link, file_name)
print('Download Completed')
print("File Name: %s"%filename)
print("Headers: %s"%headers)

if __name__== '__main__':
file_id,file_name,size,serverid,fmd5 = check_files(url)
host,dlauth,countdown,fmd5 = get_download_auth(file_id,file_name)
download_file(file_id,file_name,host,dlauth,countdown, fmd5)

Salida

http://rapidshare.com/#!download|958tl|4020022538|NarutoKizunaDriveSaveData.rar|222|R~3187F38923AB1D7B76BF6D2C55ADDCEE
check_files -----------------|

File OK
File ID: 4020022538
File Name: NarutoKizunaDriveSaveData.rar
size: 222575 bytes
Server ID: 958
Short host: tg
md5_hex: 41C7C90CDA303BDBBF90A053130255F6

get_download_auth ---------------|

http://api.rapidshare.com/cgi-bin/rsapi.cgi?sub=download_v1&fileid=4020022538&filename=NarutoKizunaDriveSaveData.rar

Host: rs958tl2.rapidshare.com
dlauth: 189BDE52B120B121E40E4B492293947FFB6A0EDB426797339B9045C39527BC28EFEAE1F4FAE96472AFC73963140F1485706FC8FCE1E931D4ADB4A3B0AD3F5A4E505C6225F0C4F70DB7CA37B9D9E35886189BDE52B120B121E40E4B492293947FFB6A0EDB426797339B9045C39527BC283F2A732A85F08C6E98E793B05368EB42
countdown: 0 seconds
download_file --------------|

http://rs958tl2.rapidshare.com/cgi-bin/rsapi.cgi?sub=download_v1&filename=NarutoKizunaDriveSaveData.rar&dlauth=189BDE52B120B121E40E4B492293947FFB6A0EDB426797339B9045C39527BC28EFEAE1F4FAE96472AFC73963140F1485706FC8FCE1E931D4ADB4A3B0AD3F5A4E505C6225F0C4F70DB7CA37B9D9E35886189BDE52B120B121E40E4B492293947FFB6A0EDB426797339B9045C39527BC283F2A732A85F08C6E98E793B05368EB42&fileid=4020022538
Download Completed
File Name: NarutoKizunaDriveSaveData.rar
Headers: Date: Sun, 24 Jul 2011 19:50:00 GMT
Connection: close
Content-Type: application/octet-stream
Accept-Ranges: bytes
Content-Disposition: Attachment; filename=NarutoKizunaDriveSaveData.rar
Content-Length: 222575


Es un ejemplo sencillo y nada elaborado, que no pretende ser de uso diario, para eso tenemos plowshare (http://code.google.com/p/plowshare/).

jueves, 14 de julio de 2011

[Python] manejando parámetros con optparser

import sys
from optparse import make_option,OptionParser


def opciones(argv):
usage = "usage: %prog [options] Archivo"
usage +="\nManejo de parametros desde la linea de comandos"

option_list = (
make_option("-o","--opcion_1",action='store', dest='opcion_1', default ="", help="Opcion 1"),
make_option("-p","--pi",action='store', type="float", dest='pi', default = 3.1416, help="Constante Pi"),
make_option("-v",action='store_true', dest='verbose', default = True),
make_option("-q",action='store_false', dest='verbose'),
)

parser = OptionParser(prog = argv[0],
usage=usage,
option_list = option_list
)

options, args = parser.parse_args(argv[1:])

if argv[1:] == []:
parser.print_help()
elif argv[1] in ('-h','--help'):
parser.print_help()
elif args == []:
parser.print_help()
else:
print(options.opcion_1)
print(options.pi)
print(options.verbose)
print(args[0])
if __name__ == "__main__":
opciones(sys.argv[:])



ej.


$ python options.py
Usage: options.py [options] Archivo
Manejo de parametros desde la linea de comandos

Options:
-o OPCION_1, --opcion_1=OPCION_1
Opcion 1
-p PI, --pi=PI Constante Pi
-v
-q
-h, --help show this help message and exit

martes, 20 de abril de 2010

nvidiactl

Después de actualizar a kubuntu 10.04 Beta 2 y reinstalar los drivers de la tarjeta nvidia como usuario normal perdí la aceleración 3D.

cuando le daba

glxinfo | grep render

me salia una línea que rezaba así

NVIDIA: could not open the device file /dev/nvidiactl (Permission denied).


solución:

Agregamos a nuestro usuario al grupo de video:

¿Porque?

si hacemos un ls -l al dispositivo veremos

ls -l /dev/nvidiactl
crw-rw---- 1 root video 195, 255 2010-04-20 08:02 /dev/nvidiactl


El dispositivo pertenece a root y al grupo de video

Si vemos el contenido de /etc/group veremos que nuestor usuario no pertenece a ese grupo

cat /etc/group | grep video
video:x:44:


Editamos el archivo para agregarnos y que quede algo como

cat /etc/group | grep video
video:x:44:usuario


Cerramos la sesión actual, nos logeamos de nuevo y ya tendremos la aceleración perdida:

glxinfo | grep render
direct rendering: Yes
OpenGL renderer string: GeForce Go 6150/PCI/SSE2
GL_NVX_conditional_render, GL_SGIS_generate_mipmap, GL_SGIS_texture_lod,


glxgears
Running synchronized to the vertical refresh. The framerate should be
approximately the same as the monitor refresh rate.
7866 frames in 5.0 seconds
9066 frames in 5.0 seconds
9059 frames in 5.0 seconds

martes, 23 de febrero de 2010

webcam como camara IP en Linux (debian, ubutu)

Primero tenemos que tener instalado los siguientes paquetes, y tener configurado un servidor web (puede ser apache o cualquier otro)

sudo apt-get install webcam lib4l-0

No se crea ningún archivo de configuración por lo cual no creamos en nuestro home, o si vamos a usar la ruta principal del servidor web (/var/www) creamos el archivo webcam.conf dentro de /etc

vim .webcamrc (o con el editor de texto que uses)
vim /etc/webcam.conf (como root o anteponiendo sudo, en caso de pertenecer a los sudoers)

El archivo va contener algo como lo que se muestra enseguida

[ftp]
host = localhost
user = nobody
pass = xxxxxx
dir = /home/usuario/public_html
file = webcam.jpg
tmp = imageup.jpg
local = 1

[grab]
device = /dev/video0
width = 320
height = 240
text = "Webcam %Y-%m-%d %H:%M:%S"
delay = 0
input =sonixj
quality = 75
trigger = 180
fg_red = 255
fg_green = 255
fg_blue = 255
rotate = 2

Como mi webcam pone de cabeza las capturas, con rotate = 2 lo arreglo (1=90 grados 2= 180, etc.)

¿Como saber cual es el nombre de la webcam(input = nombrewebcam)? con v4l-info (dese la terminal)

$ v4l-info

Las partes que nos interesan es la que nos dice el nombre de la camara (sonixj) y la altura y el ancho máximo

inputs
VIDIOC_ENUMINPUT(0)
index : 0
name : "sonixj" <---Este es el valor de input =sonixj type : CAMERA audioset : 0 tuner : 0 std : 0x0 [] status : 0x0 []

y
### video4linux device info [/dev/video0] ###
general info
VIDIOCGCAP
name : "USB camera"
type : 0x1 [CAPTURE]
channels : 1
audios : 0
maxwidth : 640
maxheight : 480
minwidth : 48
minheight : 32


Ahora si lo probamos con

@anaconda-server:~$ webcam
reading config file: /home/usuario/.webcamrc
can't get rgb24 data

Ops! ¿Qué hace ese rgb24 data? si nunca lo mandé llamar.

Solución:

Se me ocurrió que se podría asociar con el LD_PRELOAD=/usr/lib/libv4l/v4l1compat.so webcam, por lo que es la misma solución que para algunas webcam es necesaria para poderlas usar con skype

https://wiki.ubuntu.com/SkypeWebCams

$ LD_PRELOAD=/usr/lib/libv4l/v4l1compat.so webcam
reading config file: /home/usuario/.webcamrc
video4linux webcam v1.5 - (c) 1998-2002 Gerd Knorr
grabber config:
size 320x240 [none]
input sonixj, norm (null), jpeg quality 75
rotate=2, top=0, left=0, bottom=240, right=320
write config [ftp]:
local transfer /home/usuario/public_html/imageup.jpg => /home/usuario/public_html/webcam.jpg
compare: max=50,avg=4
compare: max=255,avg=78
compare: max=8,avg=0
compare: max=24,avg=0
compare: max=17,avg=0
compare: max=33,avg=0
compare: max=29,avg=0
compare: max=35,avg=0
compare: max=34,avg=0
compare: max=42,avg=0
compare: max=39,avg=0
compare: max=46,avg=0
compare: max=52,avg=0

Ya sólo queda ver el resultado en la web, mover la camara y recargar el navedador para ver los resultados. Para probar su funcionamiento utilicé la siguiente página web.

<html>
<head>
<title>WebCam</title>
<meta http-equiv="REFRESH" content="1"></meta>
</head>
<body>
<img src="webcam.jpg"></img>
</body>
</html>


Recargo la página cada segundo.



webcam a 320x240



webcam a 640x480

miércoles, 30 de diciembre de 2009

PCTel Winmodem Debian Testing

Linux anaconda-server 2.6.30-2-686 #1 SMP Fri Dec 4 00:53:20 UTC 2009 i686 GNU/Linux

1.- Creamos un directorio temporal

mkdir tmp
cd tmp

2.- Descargamos el driver de http://linmodems.technion.ac.il/pctel-linux/pctel-0.9.7-9-rht-10.tar.gz
wget http://linmodems.technion.ac.il/pctel-linux/pctel-0.9.7-9-rht-10.tar.gz

3.- Descomprimimos

tar -xvzf pctel-0.9.7-9-rht-10.tar.gz
cd pctel-0.9.7-9-rht-10


tratamos de instalar logueandonos como root (o en su defecto con sudo si es que lo tenemos habilitado para el usuario)

sudo ./setup
checking for running kernel version...2.6.30
checking for ptserial...ptserial-2.6.c
checking for gcc...4.3.4
checking for kernel gcc version...4.3.4
searching for kernel includes...found at /lib/modules/2.6.30-2-686/build/include
checking for autoconf.h.../lib/modules/2.6.30-2-686/build/include/linux/autoconf.h
checking for asm/mach-default...** error <


Después de andar busque y busque por internet no encontré nada, así que me dí a la tarea de ver el directorio de los source y headers del kernel. Para mi sorpresa el mach-default no existe, así que procedí a modificar el archivo configure dentro del src

vim src/configure

Ubicamos la línea siguente (línea 424)
echo -n "checking for asm/mach-default..."
kernel_inc2=${kernel_inc}
if [ ! -d ${kernel_inc}/asm/mach-default ]
then
# SuSE 9.3 doesn't have 'asm' under the build directory, so revert to
# /usr/src/linux
if [ -d /usr/src/linux/include/asm/mach-default ]
then
kernel_inc2=/usr/src/linux/include
else
echo "** error"
echo include/asm/mach-default directory could not be found
echo you probably need to configure your kernel, please read the FAQ
echo about no include/asm/mach-default directory.
exit 1
fi
fi
echo "yes"
extra_includes=-I${kernel_inc2}/asm/mach-default



y las modificamos para que quede


echo -n "checking for asm..."
kernel_inc2=${kernel_inc}
if [ ! -d ${kernel_inc}/asm ]
then
# SuSE 9.3 doesn't have 'asm' under the build directory, so revert to
# /usr/src/linux
if [ -d /usr/src/linux/include/asm/mach-default ]
then
kernel_inc2=/usr/src/linux/include
else
echo "** error"
echo include/asm directory could not be found
echo you probably need to configure your kernel, please read the FAQ
echo about no include/asm/mach-default directory.
exit 1
fi
fi
echo "yes"
extra_includes=-I${kernel_inc2}/asm


Quitamos todo lo referente a /mach-default (líneas 424,426 y 442)


~/tmp/pctel-0.9.7-9-rht-10$ sudo ./setup
checking for running kernel version...2.6.30
checking for ptserial...ptserial-2.6.c
checking for gcc...4.3.4
checking for kernel gcc version...4.3.4
searching for kernel includes...found at /lib/modules/2.6.30-2-686/build/include
checking for autoconf.h.../lib/modules/2.6.30-2-686/build/include/linux/autoconf.h
checking for asm/mach-default...yes
checking for kernel version in utsrelease.h...UTS_RELEASE is 2.6.30-2-686
checking type of tty_struct.count...int
checking for presence of udev...present (kernel version 2.6.13 or later)
detecting your modem...found. Your modem is a cm8738 type modem.

compilation done

installation done

modem activated

~/tmp/pctel-0.9.7-9-rht-10$ ls -l /dev/modem
lrwxrwxrwx 1 root root 11 dic 30 21:49 /dev/modem -> ttyS_PCTEL0

Por lo que se ve ya esta funcionando, para probarlo

sudo minicom -s

con las flechas nos movemos hasta configuración de la puerta serial y le damos enter

Presionamos A para modificar la ruta del dispositivo colocando /dev/modem

Le damos un segundo enter para regresar al menu anterior y con la flechas buscamos Salir y le damos enter, despues de esto vamos a ver que el minicom consulta al modem.

Welcome to minicom 2.4-rc1

OPCIONES: I18n
Compilado en Nov 23 2009, 17:11:14.
Port /dev/modem

Presione CTRL-A Z para obtener ayuda sobre teclas especiales

AT S7=45 S0=0 L1 V1 X4 &c1 E1 Q0
OK


Si aparece algo como lo de arriba, quiere decir que si esta trabajando el modem.

sábado, 21 de noviembre de 2009

KylinOS

Sólo para recordar, pero será Ciencia Ficción o realidad o una divertida exageración a la que nos suelen tener acostumbrados. Lo bueno es que lo puede descargar para que lo prueben (los enlaces los debo, ya que desde donde los baje ya estan fuera de linea)

http://www.securityfocus.com/brief/964

In a statemen (pdf) before the U.S.-China Economic and Security Review Commission, consultant Kevin Coleman characterized the Kylin operating system as a technology that could give China the upper hand in the race to use cyberspace for national ends.

"This race was intensified when China created Kylin, their own hardened server operating system and began to convert their systems back in 2007," Coleman, a senior fellow at Technolytics, "This action also made our offensive cyber capabilities ineffective against them given the cyber weapons were designed to be used against Linux, UNIX and Windows.

Si pueden lean el pdf


http://muycomputer.com/FrontOffice/ZonaPractica/Especiales/especialDet/_wE9ERk2XxDCMnF402YF5BaZxlsgTTBLDTKDOQ73uRx5Wj6RUU6-QWs7AijiQYxTk

Junto al sistema operativo, los chinos también habrían fabricado e instalado un microprocesador "invulnerable" que aseguraría una defensa sólida de la plataforma. “En el área cibernética, China está jugando al ajedrez y Estados unidos a las damas”, dijo al periódico el especialista en seguridad militar Kevin Coleman, que advirtió de una guerra fría cibernética militar.
http://news.smh.com.au/breaking-news-technology/china-deploys-secure-computer-operating-system-20090513-b24h.html

http://diariored.com/blog/001107.php
(2005)

Y el culpable:
http://www.kylin.org.cn/

Pues en su momento lo baje para probar (KylinOS 2.1) y esta son sus capturas





Otras más que acabo de sacar hoy





Si encuentran los ISOs para probar y necesitan ayuda, pueden encontrarla en los foros de este SO que se encuentran en
http://www.kylin.org.cn/KylinForum/
Aunque literalmente "esta en Chino"

jueves, 22 de octubre de 2009

Karmic Koala: Spartan 3E Starter Kit y cable usb

El problema fue que al actualizar a Karmic Koala, me dejo de detectar la tarjeta. Que es lo que pasa cuando conectamos la Tarjeta a la PC:

1.- Cuando conectamos la tarjeta a un puerto USB, udev detecta el dispositivo.
2.- Ya que lo detecto el siguiente paso es que le actualize el firmware con fxload (según las reglas que tenga para dicho dispositivo, y se encuentran en el archivo /etc/udev/rules.d/xusbdfwu.rules).
3- Si tuvo exito se enciende un led de color verde que se encuentra a lado derecho del conector usb de la tarjeta y además al hacer lusb veremos que que el dispositivo lo identifica como 03fd:0008, en el caso contrarío veremos 03fd:000d.

¿Como solucionar este problema?

En caso de que hicieron una actualización de Jaunty a Karmic:

1.- Tienen que editar el archivo de reglas, que se encuentra en /etc/udev/rules.d

sudo gedit /etc/udev/rules.d/xusbdfwu.rules

Y reemplazar todos los $TEMPNODE por $tempnode

2.- Reinicar el servicio udev

sudo service udev restart o sudo /etc/init.d/udev restart

En caso de ser una instalación nueva:

0.- Requisitos: Tener instaldo el ISE Webpack y los paquetes fxload, libusb-dev y el build-essential.

sudo apt-get install fxload libusb-dev build-essential


1.- Suponiendo que ya tenemos instalado el ISE Webpack 11.1 (ó el 10.x), nos movemos al la ruta donde quedó instalado.

cd /ruta_instalación_Xilinx/11.1/ISE/bin/lin/ o cd /ruta_instalación_Xilinx/11.1/ISE/bin/lin64/

Ahí encontraremos los siguientes archivos

$ ls *.hex
xusbdfwu.hex xusb_emb.hex xusb_xlp.hex xusb_xp2.hex xusb_xpr.hex xusb_xse.hex xusb_xup.hex

Los cuales copiaremos a /usr/share

sudo cp xusb*.hex /usr/share/

2.- Enseguida editamos el archivo xusbdfwu.rules

gedit xusbdfwu.rules
# version 0003
SYSFS{idVendor}=="03fd", SYSFS{idProduct}=="0008", MODE="666"
BUS=="usb", ACTION=="add", SYSFS{idVendor}=="03fd", SYSFS{idProduct}=="0007", RUN+="/sbin/fxload -v -t fx2 -I /usr/share/xusbdfwu.hex -D $TEMPNODE"
BUS=="usb", ACTION=="add", SYSFS{idVendor}=="03fd", SYSFS{idProduct}=="0009", RUN+="/sbin/fxload -v -t fx2 -I /usr/share/xusb_xup.hex -D $TEMPNODE"
BUS=="usb", ACTION=="add", SYSFS{idVendor}=="03fd", SYSFS{idProduct}=="000d", RUN+="/sbin/fxload -v -t fx2 -I /usr/share/xusb_emb.hex -D $TEMPNODE"
BUS=="usb", ACTION=="add", SYSFS{idVendor}=="03fd", SYSFS{idProduct}=="000f", RUN+="/sbin/fxload -v -t fx2 -I /usr/share/xusb_xlp.hex -D $TEMPNODE"
BUS=="usb", ACTION=="add", SYSFS{idVendor}=="03fd", SYSFS{idProduct}=="0013", RUN+="/sbin/fxload -v -t fx2 -I /usr/share/xusb_xp2.hex -D $TEMPNODE"
BUS=="usb", ACTION=="add", SYSFS{idVendor}=="03fd", SYSFS{idProduct}=="0015", RUN+="/sbin/fxload -v -t fx2 -I /usr/share/xusb_xse.hex -D $TEMPNODE"


Cambiando $TEMPNODE por $tempnode, si lo dejan tan y como esta, no les va a funcionar. El contenido les debe de quedar algo como:

# version 0003 SYSFS{idVendor}=="03fd", SYSFS{idProduct}=="0008", MODE="666" BUS=="usb", ACTION=="add", SYSFS{idVendor}=="03fd", SYSFS{idProduct}=="0007", RUN+="/sbin/fxload -v -t fx2 -I /usr/share/xusbdfwu.hex -D $tempnode" BUS=="usb", ACTION=="add", SYSFS{idVendor}=="03fd", SYSFS{idProduct}=="0009", RUN+="/sbin/fxload -v -t fx2 -I /usr/share/xusb_xup.hex -D $tempnode" BUS=="usb", ACTION=="add", SYSFS{idVendor}=="03fd", SYSFS{idProduct}=="000d", RUN+="/sbin/fxload -v -t fx2 -I /usr/share/xusb_emb.hex -D $tempnode" BUS=="usb", ACTION=="add", SYSFS{idVendor}=="03fd", SYSFS{idProduct}=="000f", RUN+="/sbin/fxload -v -t fx2 -I /usr/share/xusb_xlp.hex -D $tempnode" BUS=="usb", ACTION=="add", SYSFS{idVendor}=="03fd", SYSFS{idProduct}=="0013", RUN+="/sbin/fxload -v -t fx2 -I /usr/share/xusb_xp2.hex -D $tempnode" BUS=="usb", ACTION=="add", SYSFS{idVendor}=="03fd", SYSFS{idProduct}=="0015", RUN+="/sbin/fxload -v -t fx2 -I /usr/share/xusb_xse.hex -D $tempnode"

3.- Ya que lo modificamos lo copiamos a /etc/

sudo cp xusbdfwu.rules /etc/udev/rules.d/

4.- reiniciamos el servicio udev

sudo service udev restart o sudo /etc/init.d/udev restart

5.- Ahora nos movemos al $HOME creamos una carpeta tmp

cd
mkdir tmp

cd tmp

Vamos a http://www.rmdir.de/~michael/xilinx/

Y descargamos de ahí el archivo usb-driver-HEAD.tar.gz en la carpeta que acabamos de crear

6.- estando en tmp descomprimimos el archivo y entramos al directorio recién creado y ejecutamos el make

tar -xvzf usb-driver-HEAD.tar.gz
cd usb-driver
make

7.- Lo anterior nos generará dos archivos, libusb-driver-DEBUG.so y libusb-driver.so los cuales copiaremos a /usr/lib/

sudo cp *.so /usr/lib/

8.- Ya podemos conectar nuestra tarjeta al la PC con el Karmic Kola y ver

$ lsusb | grep Xilinx Bus 001 Device 007: ID 03fd:0008 Xilinx, Inc.

en lugar del

$ lsusb | grep Xilinx
Bus 001 Device 007: ID 03fd:000d Xilinx, Inc.


Que al actualizar de versión me venía saliendo

En la versión 11.1 para que el impact use el libusb-driver.so en vez de los windrvr, ya no es necesario hacer lo de "export LD_PRELOAD=/ruta/libusb-driver.so" antes de ejecutarlo.


martes, 29 de septiembre de 2009

Actualización a Debian Testing

He actualizado anaconda a Debian Testing, pero no si problemas, el problema que me topé fue con el paquete netatalk, que sirve para compartir en una Red con MACs, pero ni tengo MACs, entonces para que lo quiero, y mas si me estaba dando problemas, sobre todo para poder instalar otros programas.

apt-get install linux-sound-base alsa-tools
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
linux-sound-base ya está en su versión más reciente.
fijado linux-sound-base como instalado manualmente.
Se instalaron de forma automática los siguientes paquetes y ya no son necesarios.
libswfdec-0.6-90 libstlport4.6ldbl libhsqldb-java-gcj menu-xdg libuser-identity-perl libwpd8c2a libartsc0 libxfce4mcs-client3 fakeroot libmd5-perl
libraw1394-8 libicu38 libmime-types-perl libvorbisfile3 doc-base libbeecrypt6 libhyphen0 libwpg-0.1-1 bsh-gcj kdelibs-data libjaxp1.3-java-gcj
python-numeric libmagick10 libterm-readkey-perl postgresql-doc-8.3 libsqlite0 libfile-remove-perl libservlet2.4-java tsocks libsuitesparse-3.1.0 socat
libxerces2-java-gcj libmysqlclient15off libmail-sendmail-perl libdirectfb-1.0-0 ttf-liberation bluez-utils libakode2 bsh libavahi-qt3-1 libmikmod2
xfce4-icon-theme libio-stringy-perl libjaxp1.3-java ttf-opensymbol libpoppler3 libjline-java libmldbm-perl libxerces2-java libuuid-perl libbluetooth2
libobject-realize-later-perl libwps-0.1-1 libxalan2-java libsdl-mixer1.2 libconfuse0 libfreezethaw-perl libavcodec51 xfce4-mcs-manager svgalibg1
libhsqldb-java html2text xfce4-mixer-alsa libqt3-mt libxfce4mcs-manager3 libcupsys2 xfce4-minicmd-plugin libavahi-core5 libsys-hostname-long-perl
libcucul0 libxalan2-java-gcj libltdl3 libpoppler-glib3 libsdl-image1.2 libsmpeg0
Utilice «apt-get autoremove» para eliminarlos.
Se instalarán los siguientes paquetes extras:
netatalk
Paquetes sugeridos:
texlive-base-bin quota timeout db4.2-util libpam-cracklib
Se instalarán los siguientes paquetes NUEVOS:
alsa-tools
Se actualizarán los siguientes paquetes:
netatalk
1 actualizados, 1 se instalarán, 0 para eliminar y 0 no actualizados.
5 no instalados del todo o eliminados.
Se necesita descargar 81.7kB/997kB de archivos.
Se utilizarán 766kB de espacio de disco adicional después de esta operación.
¿Desea continuar [S/n]?
Des:1 http://ftp.fr.debian.org testing/main alsa-tools 1.0.20-1 [81.7kB]
Descargados 81.7kB en 2s (32.3kB/s)
(Leyendo la base de datos ... 00%
114186 ficheros y directorios instalados actualmente.)
Preparando para reemplazar netatalk 2.0.3-11+lenny1 (usando .../netatalk_2.0.4-1_i386.deb) ...
hostname: Name or service not known
invoke-rc.d: initscript netatalk, action "stop" failed.
dpkg: warning: script de `pre-removal' antiguo returned error exit status 1
dpkg - probando el script del nuevo paquete en su lugar...
hostname: Name or service not known
invoke-rc.d: initscript netatalk, action "stop" failed.
dpkg: error al procesar /var/cache/apt/archives/netatalk_2.0.4-1_i386.deb (--unpack):
el subproceso script pre-removal nuevo devolvió el código de salida de error 1
hostname: Name or service not known
invoke-rc.d: initscript netatalk, action "start" failed.
dpkg: error al reorganizar:
el subproceso installed post-installation script devolvió el código de salida de error 1
Seleccionando el paquete alsa-tools previamente no seleccionado.
Desempaquetando alsa-tools (de .../alsa-tools_1.0.20-1_i386.deb) ...
Procesando disparadores para man-db ...
Se encontraron errores al procesar:
/var/cache/apt/archives/netatalk_2.0.4-1_i386.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

Entonces intente copiar el deb e instalarlo con el dpkg para después desinstalarlo

anaconda:~# cp /var/cache/apt/archives/netatalk_2.0.4-1_i386.deb .
anaconda:~# ls
netatalk_2.0.4-1_i386.deb null p.sh
anaconda:~# dpkg -i netatalk_2.0.4-1_i386.deb
(Leyendo la base de datos ... 00%
114224 ficheros y directorios instalados actualmente.)
Preparando para reemplazar netatalk 2.0.3-11+lenny1 (usando netatalk_2.0.4-1_i386.deb) ...
hostname: Name or service not known
invoke-rc.d: initscript netatalk, action "stop" failed.
dpkg: warning: script de `pre-removal' antiguo returned error exit status 1
dpkg - probando el script del nuevo paquete en su lugar...
hostname: Name or service not known
invoke-rc.d: initscript netatalk, action "stop" failed.
dpkg: error al procesar netatalk_2.0.4-1_i386.deb (--install):
el subproceso script pre-removal nuevo devolvió el código de salida de error 1
hostname: Name or service not known
invoke-rc.d: initscript netatalk, action "start" failed.
dpkg: error al reorganizar:
el subproceso installed post-installation script devolvió el código de salida de error 1
Se encontraron errores al procesar:
netatalk_2.0.4-1_i386.deb

Y de nuevo nada, el siguiente paso fue descomprimir el deb y cambiar los scripts de pre y post instalación, y borrarle el contenido de los scripts que invocaban el /etc/init.d/netatalk, que era el del problema.

anaconda:~# ar x netatalk_2.0.4-1_i386.deb
anaconda:~# ls
control.tar.gz data.tar.gz debian-binary netatalk_2.0.4-1_i386.deb null p.sh
anaconda:~# mkdir tmp
anaconda:~# cd tmp/
anaconda:~/tmp# mkdir DEBIAN
anaconda:~/tmp# cd DEBIAN/
anaconda:~/tmp/DEBIAN# vim ../../debian-binary
anaconda:~/tmp/DEBIAN# cd ..
anaconda:~/tmp# tar xzvpf ../data.tar.gz
anaconda:~/tmp# cd DEBIAN/
anaconda:~/tmp/DEBIAN# tar xzvpf ../../control.tar.gz
anaconda:~/tmp/DEBIAN# ls
conffiles control md5sums postinst postrm prerm
anaconda:~/tmp/DEBIAN# vim prerm
anaconda:~/tmp/DEBIAN# vim postinst
anaconda:~/tmp/DEBIAN# cd ..

Y construir el nuevo paquete

anaconda:~/tmp# dpkg --build . ..
dpkg-deb: construyendo el paquete `netatalk' en `../netatalk_2.0.4-1_i386.deb'.

Instalé el nuevo paquete

anaconda:~# cd ..
anaconda:~# dpkg -i netatalk_2.0.4-1_i386.deb
Seleccionando el paquete netatalk previamente no seleccionado.
(Leyendo la base de datos ... 00%
114224 ficheros y directorios instalados actualmente.)
Preparando para reemplazar netatalk 2.0.3-11+lenny1 (usando netatalk_2.0.4-1_i386.deb) ...
hostname: Name or service not known
invoke-rc.d: initscript netatalk, action "stop" failed.
dpkg: warning: script de `pre-removal' antiguo returned error exit status 1
dpkg - probando el script del nuevo paquete en su lugar...
dpkg: ... parece que todo fue bien.
Desempaquetando el reemplazo de netatalk ...
Configurando netatalk (2.0.4-1) ...
Instalando una nueva versión del fichero de configuración /etc/logcheck/ignore.d.server/netatalk ...
Instalando una nueva versión del fichero de configuración /etc/init.d/netatalk ...
Instalando una nueva versión del fichero de configuración /etc/netatalk/afpd.conf ...
Instalando una nueva versión del fichero de configuración /etc/netatalk/AppleVolumes.default ...
Instalando una nueva versión del fichero de configuración /etc/default/netatalk ...
Instalando una nueva versión del fichero de configuración /etc/pam.d/netatalk ...
Procesando disparadores para man-db ...

Y enseguida lo removí
anaconda:~# apt-get remove netatalk
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Se instalaron de forma automática los siguientes paquetes y ya no son necesarios.
libswfdec-0.6-90 libstlport4.6ldbl libhsqldb-java-gcj menu-xdg libuser-identity-perl libwpd8c2a libartsc0 libxfce4mcs-client3 fakeroot libmd5-perl
libraw1394-8 libicu38 libmime-types-perl libvorbisfile3 doc-base libbeecrypt6 libhyphen0 libwpg-0.1-1 bsh-gcj kdelibs-data libjaxp1.3-java-gcj
python-numeric libmagick10 libterm-readkey-perl postgresql-doc-8.3 libsqlite0 libfile-remove-perl libservlet2.4-java tsocks libsuitesparse-3.1.0 socat
libxerces2-java-gcj libmysqlclient15off libmail-sendmail-perl libdirectfb-1.0-0 ttf-liberation bluez-utils libakode2 bsh libavahi-qt3-1 libmikmod2
xfce4-icon-theme libio-stringy-perl libjaxp1.3-java ttf-opensymbol libpoppler3 libjline-java libmldbm-perl libxerces2-java libuuid-perl libbluetooth2
libobject-realize-later-perl libwps-0.1-1 libxalan2-java libsdl-mixer1.2 libconfuse0 libfreezethaw-perl libavcodec51 xfce4-mcs-manager svgalibg1
libhsqldb-java html2text xfce4-mixer-alsa libqt3-mt libxfce4mcs-manager3 libcupsys2 xfce4-minicmd-plugin libavahi-core5 libsys-hostname-long-perl
libcucul0 libxalan2-java-gcj libltdl3 libpoppler-glib3 libsdl-image1.2 libsmpeg0
Utilice «apt-get autoremove» para eliminarlos.
Los siguientes paquetes se ELIMINARÁN:
netatalk
0 actualizados, 0 se instalarán, 1 para eliminar y 0 no actualizados.
5 no instalados del todo o eliminados.
Se liberarán 2310kB después de esta operación.
¿Desea continuar [S/n]?
(Leyendo la base de datos ... 00%
114228 ficheros y directorios instalados actualmente.)
Desinstalando netatalk ...
Procesando disparadores para man-db ...
Configurando lockfile-progs (0.1.13) ...
Configurando ntp (1:4.2.4p6+dfsg-2) ...
Starting NTP server: ntpd.
Configurando ntpdate (1:4.2.4p6+dfsg-2) ...
Configurando rc (1.7.1-3) ...
Configurando alsa-tools (1.0.20-1) ...
Procesando disparadores para menu ...

Y ya pudo configurar los programas que no había podido configurar por el problema con el paquete netatalk