Category Archives: Topic

Ripear DVDs con mplayer

Con mplayer es posible ripear DVDs guardandolos directamente en un formato comprimido, para esto se utiliza el comando mencoder que puede ser usado con multitud de parámetros, aqui vemos unos cuantos:

mencoder -dvd  1 -dvd-device /dev/cdroms/cdrom0  -vop scale=640:480   -o   conferencia.avi   -ovc   lavc   -lavcopts vcodec=mpeg4:vhq:vbitrate=1800 -oac copy

mencoder conferencia.avi -vop scale -zoom -xy 250 -ovc lavc -lavcopts vcodec=mpeg4:vhq -oac copy -o conferencia250.avi

mencoder conferencia250.avi -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=100 -oac copy -o conferencia250l.avi

mencoder -dvd  1 -dvd-device /dev/cdroms/cdrom0  -vop scale=640:480   -o   conferencia.avi   -ovc   lavc   -lavcopts vcodec=mpeg4:vbitrate=800 -oac copy

En todo caso, para más información mirar el manual: ‘man menconder’

SpamAssasin

El filtro de anti-spam que utilizo es SpamAssasin, para mí es lo mejor que hay en estos momentos. Combina la detección de spam mediante cadenas con filtros bayesianos, estos últimos te permiten “enseñar” a spamassasin que correos son basura y cuales no. De esta forma es posible ir mejorando la eficiencia del filtro. Para modificar los filtros bayesianos podemos utilizar los siguientes comandos:

sa-learn --spam --mbox ~/Mail/spam
sa-learn --nonspam --mbox ~/Mail/inbox

Utilizo SpamAssasin en conjunto con Exim, procmail getmail y el antivirus ClamAV. Todo centralizado en un servidor de mi LAN al cual puedo acceder por IMAP con Evolution o por el webmail Squirrelmail.

Perl y CPAN

El lenguaje de programación Perl dispone de un repositorio inmenso de módulos llamado CPAN y permite la instalción de nuevos módulos con resolución de dependencias desde la consola, por ejemplo si queremos instalar “Bundle::Bugzilla” basta con ejecutar en una consola:

perl -MCPAN -e 'install "Bundle::Bugzilla"'

Gentoo, modificar fuentes antes de instalar

Es posible que nos encontremos con la necesidad de retocar el codigo fuente de alguna aplicación antes de instalarla, como podemos hacerlo de forma que siga estando integrado en le portage de Gentoo? Si usamos “emerge programa” directamente, no nos dará oportunidad de realizar ninguna modificación y si copiamos a /usr/portage/distfiles/ nuestro codigo fuente modificado entonces no coincidirá con el MD5 del portage y el emerge no funcionará. Soluciones:

  1. Cambiar el MD5
  2. Realizar la instalación paso a paso

Veremos como se realiza este segundo punto, primero bajamos y desenpaquetamos el programa que deseamos instalar (pondre como ejemplo gaim):

cd /usr/portage/net-im/gaim/
ebuild gaim-0.78-r3.ebuild fetch unpack

A continuación podemos ir al directorio “/var/tmp/portage/gaim-0.78-r3/work/” donde se encuentran las fuentes descomprimidas del gaim que estamos instalando, aqui podemos realizar las modificaciones al codigo fuente que consideremos oportunas y a continuación:

cd /usr/portage/net-im/gaim/
ebuild gaim-0.78-r3.ebuild compile install qmerge

Esto compilara, instalará y fusionara en el portage el programa original junto a nuestras modificaciones.

Cambio de permisos de forma selectiva

En ocasiones queremos cambiar los permisos de un directorio completo, incluyendo todos sus subdirectorios y ficheros. Lo habitual es hacer un cambio de permisos recursivo como:

chmod -R 644 datos/

Con esto pondriamos los permisos: -rw-r–r– Es decir, lectura/escritura para el propietario y lectura para el grupo y los otros. Pero en el caso de que tengamos un subdirectorio dentro de “datos/”, a este también le habremos puesto esos permisos, lo que significa que no podremos entrar en el directorio ya que el permiso de ejecución en un directorio significa que se puede entrar en el.

Esto supone un problema, queremos cambiar los permisos de todos los archivos y subdirectorios de “datos/” pero si lo hacemos como hemos visto asignamos unos permisos a los subdirectorios que no son correctos. La solución:

find data/ -type f -exec chmod 644 '{}' \;
find data/ -type d -exec chmod 755 '{}' \;

Antes de ; va una barra contraria a /, no se pq motivo se pierde al visualizar el post.

Con estos dos comandos estaremos haciendo ‘chmod 644’ solo a los ficheros que esten dentro de “data/” y sus subdirectorios, y se hará ‘chmod 755’ a los subdirectorios de “data/”. Por supuesto se pueden poner los permisos que nos convengan o indicar el directorio que queramos.

Comandos mldonkey para limitar descargas

El cliente P2P que utilizo es mldonkey, se pueden configurar diversos parámetros mientras esta en ejecución y los que me resultan más utiles són los que limitan las descargas o subidas:

# Sin limites = 0
set max_hard_download_rate 5
set max_hard_upload_rate 3
set max_concurrent_downloads 0
set max_upload_slots 3

Este ejemplo limitaria los downloads a 5 KB/s y los uploads a 3KB/s, permite que se descarguen un numero ilimitado de archivos a la vez pero solo permite que se suban 3 archivos simultaneamente.

Texto “cifrado”

Es muy curioso este texto invertido/cifrado/…. no se bien bien como catalogarlo 😉

“Sgeun un etsduio de una uivenrsdiad ignlsea, no ipmotra el odren en el que las ltears etsan ersciats, la uicna csoa ipormtnate es que la pmrirea y la utlima ltera esten ecsritas en la psiocion cocrrtea. El rsteo peuden estar ttaolmntee mal y aun pordas lerelo sin pobrleams. Etso es pquore no lemeos cada ltera por si msima snio la paalbra cmoo un tdoo. Pesornamelnte me preace icrneilbe…”

Libros recomendados por un amigo

Luis me recomendó hace tiempo unos libros, tengo guardado los nombres en un fichero de mi HD y no quiero perderlos así que mejor los pongo en el blog. Los libros que me recomendó fueron:

“La oración de la rana” Anthony de Mello
“Veronika decide morir” de Paulo Cohelo
“La trilogía de Nueva York” de Paul Auster
“El caballero de la armadura oxidada”de Robert Fisher

Visual Basic for Applications (MS Access)

Entre ayer y hoy he aprendido a utilizar VBA en Access para realizar unas modificaciones en unas bases de datos, lo pongo aqui como referencia por si vuelvo a necesitar hacer algo del estilo:

' ExecuteQuery: Realitza una modificació a la BD
' Provar amb:
'  ExecuteQuery "INSERT INTO CamaraEnvasadoPreenvasado VALUES ('test', 'borrar')"
Sub ExecuteQuery(strSQL As String)
   Dim cnn          As ADODB.Connection
   Dim lngAffected  As Long
   
   ' Open the connection.
   Set cnn = CurrentProject.Connection

   ' Execute the query.
   cnn.Execute CommandText:=strSQL, _
               RecordsAffected:=lngAffected, _
               Options:=adExecuteNoRecords

   'Debug.Print "Records Affected = " & lngAffected
   
   ' Close connection and destroy object variables.
   cnn.Close
   Set cnn = Nothing
End Sub

' TransformDB: Agafa els registres de Frustas_Hortalizas amb el
' camp "checkField" a true i guarda el num. suscriptor junt amb
' "idEnvase" a la taula RelacionEnvase
' Provar amb: TransformDB "Pre_codigo_PLU", 25
Sub TransformDB(checkField As String, idEnvase As Integer)
    Dim cnnDB As ADODB.Connection
    Dim recordSt As New ADODB.Recordset
    Dim strSQL As String
    Dim idSuscriptor As String
    Dim i As Integer
   
    ' Connectar a la BD actual:
    Set cnnDB = CurrentProject.Connection

    ' Obtenim els registres que tenen el camp indicat a true
    strSQL = "SELECT * FROM Frustas_Hortalizas WHERE " & checkField & " = -1"
    With recordSt
        Set .ActiveConnection = cnnDB
        .CursorType = adOpenKeyset
        .CursorLocation = adUseClient
        .LockType = adLockOptimistic
        .Open strSQL
    End With
    
    ' Insertar a la taula RelacionEnvases una relacio entre
    ' l'idSusbcriptor dels registres trobats i el idEnvas corresponent
    ' al camp que hem comprovat
    i = 0
    If Not recordSt.EOF Then
        recordSt.MoveFirst
    End If
    Do While Not recordSt.EOF
        idSuscriptor = recordSt.Fields("Numero de suscriptor").Value
        ' Insertar amb ID de "envasado" 26
        ExecuteQuery "INSERT INTO RelacionEnvases VALUES ('" & idSuscriptor & "','" & idEnvase & "')"
        i = i + 1
        recordSt.MoveNext
    Loop
    'Debug.Print "Fields " & recordSt.Fields.Count
    Debug.Print "Found " & i & " registers with field " & checkField & " = true. idEnvase = " & idEnvase
   ' Close Connection object and destroy object variable.
   cnnDB.Close
   Set cnnDB = Nothing
End Sub

Mientras editamos el modulo en MS Access podemos pulsar CTRL+G para mostrar la ventana “Inmediato” y ahi se pueden ejecutar las funciones.