que el apreciar y disfrutar el cuerpo desnudo de una mujer...

Korn Shell Settings

2008-08-12 20:53:07-05

Hacks

He aquí el archivo de configuración del Korn Shell:

#~/.kshrc: Korn Shell Settings

# Enviroment vars
export EDITOR=vi
export FCEDIT=$EDITOR
export HISTEDIT=$EDITOR
export HISTFILE=$HOME/.ksh_hist
export HISTSIZE=2048
export VISUAL=$EDITOR

# Locale settings
if [ $USER != "root" ]; then
    export LANG=en_US.ISO8859-1
    export LC_ALL=$LANG
fi

# Set the editor command line style
set -o vi

# Notify about background processes
set -o notify

# Set the ls style
if [ $USER != "root" ]; then
    alias ls='ls -AF'
fi

# Let's set the prompt
case $KSH_VERSION in

*PD\ KSH*) # pdksh
PS1='
$(whoami)@$(hostname)
$(date)
$(pwd)

[$(tty):!]'
;;

*) # All the rest variants
PS1='[${USER:=$(id -un)}'"@${HOSTNAME:=$(hostname -s)}:!]"
;;

esac

PS1=$PS1'$(if (( $(id -u) )); then print \$; else print \#; fi) '

La configuración para que en cada login se apliquen los cambios:



#~/.profile

# Korn Shell Settings
export ENV=$HOME/.kshrc
fortune -a

Y listo.

Permalink: http://www.mononeurona.org/users/entry/asarch/1492


Hardcore “Got Milk?”

2008-07-20 18:55:04-05

Mujeres

alt

Permalink: http://www.mononeurona.org/users/entry/asarch/1446


LyX

2008-07-20 18:52:44-05

Instalacion

LyX 1.4.5.1 del directorio /usr/pkgsrc/editors/lyx-qt:

alt

LyX 1.4.5.1 del directorio /usr/pkgsrc/editors/lyx-qt:

alt

LyX 1.4.5.1 del directorio /usr/pkgsrc/editors/lyx-xforms:

alt

LyX 1.4.5.1 del directorio /usr/pkgsrc/editors/lyx-xforms:

alt

LyX 1.5.4 del directorio /usr/pkgsrc/editors/lyx15:

alt

LyX 1.5.4 del directorio /usr/pkgsrc/editors/lyx15:

alt

Permalink: http://www.mononeurona.org/users/entry/asarch/1445


Kernel “combinado” de NetBSD (reloaded)

2008-07-20 18:06:57-05

Hacks

Introducción


La laptop que tengo tiene una tarjeta de red inalámbrica Intel PRO/Wireless 3945ABG así como tambien un procesador Intel Duo, que a según dicen tiene doble núcleo y que tambien es bueno para la virtualización “por hardware” del Xen.

El detalle es que con los kernels que trae por default el disco de instalación del NetBSD no puedo ambas cosas:
  • GENERIC.MP <- Solamente puedo usar los dos procesadores sin conexión inalámbrica.

  • GENERIC_LAPTOP <- Aquí si tengo conexión pero nada más puedo usar un sólo CPU.
Asíque buscándole encontré la siguiente solución:

Intel PRO/Wireless 3945ABG y SMP en NetBSD

El siguiente es un script para reducir los pasos de la compilación del kernel “combinado”.

En lugar de hacer:
  • Tomamos una copia del kernel de SMP para el nuevo kernel:
[#] cp GENERIC.MP wanda
  • Le agregamos las bondades del kernel para laptops:
[#] cat GENERIC_LAPTOP >> wanda
  • Comentamos la siguiente directiva
[#] vi wanda
#include "arch/i386/conf/std.i386"
  • Obtenemos las líneas de los errores:
[#] config wanda > wanda-errors.log 2>&1

...
wanda:25: already have options `INCLUDE_CONFIG_FILE=1'
wanda:29: duplicate maxusers parameter
wanda:33: already have options `I486_CPU=1'
wanda:34: already have options `I586_CPU=1'
wanda:35: already have options `I686_CPU=1'
wanda:37: already have makeoptions `CPUFLAGS=-march=i486 -mtune=pentiumpro'
wanda:42: already have options `VM86=1'
wanda:43: already have options `USER_LDT=1'
wanda:46: already have options `ENHANCED_SPEEDSTEP=1'
...
  • Aislamos el número de línea solamente:
[#] cat wanda-errors.log | sed 's/wanda://' | sed 's/: .*//' > wanda-lines.log

...
25
29
33
34
35
37
42
43
46
...
  • Y comentamos todas esas líneas una por una a mano.
Solamente tenemos que hacer:
  • Mezclamos ambos kernels:
[#] cat GENERIC.MP GENERIC_LAPTOP > wanda
  • Corregimos los errores:
[#] preparar_kernel.sh wanda
  • Creamos el directorio de compilación:
[#] config wanda
  • Nos situamos dentro y compilamos:
[#] cd ../compile/urara

Si es que estamos en

/usr/src/sys/arch/i386/conf

[#] make depend && make

Y listo. Ahora Solamente:
  • Renombramos el otro kernel:
[#] mv /netbsd /netbsd.old
  • Y situamos nuestro nuevo kernel recien horneadito:
[#] mv netbsd /
  • Y reiniciamos para probarlo.

Código fuente


Este es el pedazo de “maravilla”:

#!/bin/ksh

#-------------------------------------------------------------------------------
#
# preparar_kernel.sh: Script para comentar las lineas
#                     cuando se combinan dos kernels.
#
#  Copyright (c) 2008, asarch.
#
#  All rights reserved.
#
#  Redistribution and use in source and binary forms, with or without
#  modification, are permitted provided that the following conditions
#  are met:
#
#    1. Redistributions of source code must retain the above copyright
#       notice, this list of conditions and the following disclaimer.
#    2. Redistributions in binary form must reproduce the above copyright
#       notice, this list of conditions and the following disclaimer in the
#       documentation and/or other materials provided with the distribution.
#    3. Neither the name of copyright holders nor the names of its
#       contributors may be used to endorse or promote products derived
#       from this software without specific prior written permission.
#
#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
#  ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
#  TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
#  PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL COPYRIGHT HOLDERS OR CONTRIBUTORS
#  BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
#  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
#  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
#  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
#  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
#  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
#  POSSIBILITY OF SUCH DAMAGE.
#
#-------------------------------------------------------------------------------

#-----------------------------------------------------------
#  Validacion de los argumentos del script
#-----------------------------------------------------------
#
if (( $# == 0 )); then
    echo Forma de uso: $0 nombre_del_nuevo_kernel
    exit 1
fi

#-----------------------------------------------------------
#  Validacion del usuario
#-----------------------------------------------------------
#
if [[ $USER != "root" ]]; then
    echo Necesitas ser el root.
    exit 1
fi

#-----------------------------------------------------------
#  Inicializacion de variables
#-----------------------------------------------------------
#
BASE_DIR="/tmp"
KERN_FILE=$1
ERR_LOG=$BASE_DIR"/"$KERN_FILE".log"
ERR_LINES=$BASE_DIR"/"$KERN_FILE"-err-lines.log"

#-----------------------------------------------------------
#
#  Comentamos la siguiente linea
#
#    include "arch/i386/conf/std.i386"
#
#-----------------------------------------------------------
#
ex - $KERN_FILE << EOS
/std.i386
s/include/#include/
p
w
EOS

#-----------------------------------------------------------
#  Obtenemos los errores
#-----------------------------------------------------------
#
config $KERN_FILE > $ERR_LOG 2>&1

#-----------------------------------------------------------
#  Verificamos que se haya podido crear el registro de errores
#-----------------------------------------------------------
#
if [[ ! -e $ERR_LOG ]]; then
    echo No se pudo crear el registro de los errores: $ERR_LOG
    exit 1
fi

#-----------------------------------------------------------
#  Obtenemos las lineas de los errores
#-----------------------------------------------------------
#
SED_CMD="s/${KERN_FILE}://"
cat $ERR_LOG | sed $SED_CMD | sed 's/: .*//' > $ERR_LINES

#-----------------------------------------------------------
#  Verificamos que se haya podido crear el registro de las lineas
#-----------------------------------------------------------
#
if [[ ! -e $ERR_LINES ]]; then
    echo No se pudo crear el registro de las lineas: $ERR_LINES
    exit 1
fi

#-----------------------------------------------------------
#  Contamos el total de lineas a procesar
#-----------------------------------------------------------
#
TOTAL=$( wc -l < $ERR_LINES )

#-----------------------------------------------------------
#  Verificamos que se hayan encontrado las lineas
#-----------------------------------------------------------
#
if (( $TOTAL == 0 )); then
    echo No hay lineas por corregir
    exit 1
fi

#-----------------------------------------------------------
#  Un hack para que funcione
#-----------------------------------------------------------
#
let "TOTAL--"
I=1

#-----------------------------------------------------------
#  Proceso principal
#-----------------------------------------------------------
#
while (( $I <= $TOTAL )); do
    LINE=$( head -n $I < $ERR_LINES | tail -n 1 )

    echo Editando la linea $LINE

ex - $KERN_FILE << EOS
$LINE
i
#
.
j
p
w
EOS

    echo
    let "I++"
done

Si encuentras un error por favor repórtalo. Muchas gracias.

Permalink: http://www.mononeurona.org/users/entry/asarch/1444


Instalar una serie de paquetes en pkgsrc

2008-07-19 11:53:34-05

Hacks

Introducción


Este script lo hice debido a que a veces quería instalar todos los paquetes que conforman una serie de ellos y eran demasiados para hacerlos manualmente.

Por ejemplo, si buscamos todos los paquetes del reproductor de audio “XMMS”:

[#] find /usr/pkgsrc -type d -name 'xmms*'
/usr/pkgsrc/audio/xmms
/usr/pkgsrc/audio/xmms-alarm
/usr/pkgsrc/audio/xmms-arts
/usr/pkgsrc/audio/xmms-bezier
/usr/pkgsrc/audio/xmms-blursk
/usr/pkgsrc/audio/xmms-bump-scope
/usr/pkgsrc/audio/xmms-crossfade
/usr/pkgsrc/audio/xmms-dflowers
/usr/pkgsrc/audio/xmms-dscope
/usr/pkgsrc/audio/xmms-dspectogram
/usr/pkgsrc/audio/xmms-dspectral
/usr/pkgsrc/audio/xmms-esound
/usr/pkgsrc/audio/xmms-faad
/usr/pkgsrc/audio/xmms-flac
/usr/pkgsrc/audio/xmms-fmradio
/usr/pkgsrc/audio/xmms-funtimedancer
/usr/pkgsrc/audio/xmms-gdancer
/usr/pkgsrc/audio/xmms-infinity
/usr/pkgsrc/audio/xmms-iris
/usr/pkgsrc/audio/xmms-jakdaw
/usr/pkgsrc/audio/xmms-jess
/usr/pkgsrc/audio/xmms-liveice
/usr/pkgsrc/audio/xmms-mac
/usr/pkgsrc/audio/xmms-mad
/usr/pkgsrc/audio/xmms-madspin
/usr/pkgsrc/audio/xmms-meta-input
/usr/pkgsrc/audio/xmms-meta-timidity
/usr/pkgsrc/audio/xmms-modplug
/usr/pkgsrc/audio/xmms-musepack
/usr/pkgsrc/audio/xmms-neato
/usr/pkgsrc/audio/xmms-nebulus
/usr/pkgsrc/audio/xmms-osx
/usr/pkgsrc/audio/xmms-paranormal
/usr/pkgsrc/audio/xmms-sid
/usr/pkgsrc/audio/xmms-synaesthesia
/usr/pkgsrc/audio/xmms-tv-scope
/usr/pkgsrc/audio/xmms-vismsa
/usr/pkgsrc/audio/xmms-wma
/usr/pkgsrc/audio/xmmsctrl
/usr/pkgsrc/x11/xmms-osd

Veremos que existen 40 paquetes disponibles.

Explicación del script


Para ejecutar el script, es necesario darle una mini expresión regular del nombre del paquete, en el caso de la serie de paquetes que conforman al XMMS la palabra en común de todos ellos es la palabra “xmms”.

[#] ./instalar_serie xmms

Cabe hacer mención que la expresión regular *DEBE DE ESTAR AL INICIO DEL NOMBRE DEL PAQUETE Y NO EN MEDIO O AL FINAL* ya que el script fallará en la búsqueda.

Por ejemplo, los siguientes paquetes tienen algo que ver con el XMMS pero ellos forman parte de otra serie de paquetes, por lo tanto el script no los encontrará ni mucho menos los instalará:

/usr/pkgsrc/audio/gkrellm-xmms
/usr/pkgsrc/audio/libvisual-xmms
/usr/pkgsrc/audio/py-xmms

Debes de tomar esto encuenta a la hora de querer instalar una serie de paquetes.

Lo primero hace el script es crear un archivo de registro log con el resultado de la búsqueda en el directorio “/tmp” del sistema. En este caso “/tmp/xmms-packages.log”. La ventaja de esto es que al apagar o reiniciar la máquina el sistema automáticamente los borra y de esta forma no se acumulan los registros. La desventaja es que se crea una serie de archivos con permisos del root para que alguien pueda hacer de las suyas en el sistema. De cualquier forma, recuerda que la seguridad es sólo un estado mental.

Despues, el script lee una por una de las líneas de este archivo, obtiene la ruta de acceso, aisla el nombre del paquete para poder comprobar si el paquete ya ha sido instalada anteriormente por otro paquete como una depedencia de el.

Si el nombre del paquete no se encuentra en la base de datos de los paquetes instalados, se procede con su instalación.

De lo contrario se omite y continua con la otra línea.

Cada uno de los procesos de descarga, compilación, instalación y limpieza del proceso, quedan registrados en un log en el directorio “/tmp”.

Por ejemplo, si se instalar el paquete “/usr/pkgsrc/audio/xmms-alarm” se crea el log del proceso “/tmp/xmms-alarm.log”, de esta forma podrás estudiar la razón por la cual haya fallado el proceso en el caso remoto de un fallo.

El script no valida si el proceso falló o no. Haya fallado o haya salido todo bien la instalación de un determinado paquete, el script se sigue a la siguiente línea.

Es responsabilidad del administrador del sistema revisar cada uno de los logs por si hubo algún fallo.

Aunque esta tarea se puede resumir si al final de cada uno de los logs encuentras líneas parecidas a las siguientes:

...
===> Cleaning for libXi-1.1.3nb1

===> Cleaning for libXinerama-1.0.3
===> Cleaning for libXrandr-1.2.2
===> Cleaning for gtk2+-2.12.10
===> Cleaning for inputproto-1.4.3
===> Cleaning for kbproto-1.0.3
===> Cleaning for randrproto-1.2.1nb1
===> Cleaning for renderproto-0.9.3nb1
===> Cleaning for xextproto-7.0.3
===> Cleaning for xineramaproto-1.1.2
===> Cleaning for xproto-7.0.13
===> Dist cleaning for rhythmbox-0.10.1
...

O tambien volviendo a ejecutar el script y checas cual de todos ellos no se pudo instalar ya que no aparecerá en la base de datos de los paquetes y el script intentará instalarlo de nuevo.

Script


El script es el siguiente:

#!/bin/ksh

#-------------------------------------------------------------------------------
#
#  instalar_serie.sh: Instala todos los paquetes de su regexp.
#
#  Copyright (c) 2008, asarch.
#
#  All rights reserved.
#
#  Redistribution and use in source and binary forms, with or without
#  modification, are permitted provided that the following conditions
#  are met:
#
#    1. Redistributions of source code must retain the above copyright
#       notice, this list of conditions and the following disclaimer.
#    2. Redistributions in binary form must reproduce the above copyright
#       notice, this list of conditions and the following disclaimer in the
#       documentation and/or other materials provided with the distribution.
#    3. Neither the name of copyright holders nor the names of its
#       contributors may be used to endorse or promote products derived
#       from this software without specific prior written permission.
#
#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
#  ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
#  TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
#  PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL COPYRIGHT HOLDERS OR CONTRIBUTORS
#  BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
#  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
#  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
#  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
#  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
#  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
#  POSSIBILITY OF SUCH DAMAGE.
#
#-------------------------------------------------------------------------------

#-----------------------------------------------------------
#  Validacion del argumento del script
#-----------------------------------------------------------
#
if (( $# == 0 )); then
    echo Forma de uso: $0 expresion_regular
    exit 1
fi

#-----------------------------------------------------------
#  Inicializacion de variables
#-----------------------------------------------------------
#

# La expresion regular del nombre de los paquetes
PKG_REGEXP=$1

# Los nombres y rutas de los archivos de apoyo
LOG_PATH="/tmp"
PKG_FOUNDS=$LOG_PATH"/"$PKG_REGEXP"-packages.log"

#-----------------------------------------------------------
#  Procedimiento de busqueda
#-----------------------------------------------------------
#
echo Realizando busqueda...
echo
find /usr/pkgsrc -type d -name "$PKG_REGEXP*" > $PKG_FOUNDS 2>&1

#-----------------------------------------------------------
#  Verificamos si se pudo guardar la busqueda
#-----------------------------------------------------------
#
if [[ ! -e $PKG_FOUNDS ]]; then
    echo No se puede crear el log de la operacion: $PKG_FOUNDS
    exit 1
fi

#-----------------------------------------------------------
#  Validacion de los resultados
#-----------------------------------------------------------
#
TOTAL=$( wc -l < $PKG_FOUNDS )

if (( $TOTAL == 0 )); then
    echo "No se encontraron paquetes."
    exit 1
fi

#-----------------------------------------------------------
#  Confirmacion de instalacion
#-----------------------------------------------------------
#
TOTAL=$( echo $TOTAL | sed 's/ //g' )
cat $PKG_FOUNDS
echo
echo Hay $TOTAL paquetes para instalar.
echo
echo Si desea cancelar presione Ctrl+C ahora.
echo

COUNTER=10

while (( $COUNTER >= 0 )); do
    printf "\033[1A"
    echo -n "Si desea continuar espere $COUNTER"

    if (( $COUNTER == 1 )); then
        echo " segundo. "
    else
        echo " segundos. "
    fi

    sleep 1
    let "COUNTER--"
done


#-----------------------------------------------------------
#  Procedimiento principal de instalacion
#-----------------------------------------------------------
#
I=1
echo

while (( $I <= $TOTAL)); do
    PACKAGE=$( head -n $I < $PKG_FOUNDS | tail -n 1 )
    PKG_NAME=$( basename $PACKAGE )
    PKG_PATH=$( dirname $PACKAGE )
    PKG_LOG=$LOG_PATH"/"$PKG_NAME".log"

    # Obtenemos el porcentaje del proceso
    let "PORCIENTO=(I*100)/TOTAL"

    # Checamos si el paquete ya ha sido instalado
    INSTALLED=$( pkg_info | grep $PKG_NAME )

    if [[ $INSTALLED == "" ]]; then
        echo "Instalado el paquete #$I ($PORCIENTO%): '$PACKAGE'..."

        cd "$PACKAGE"
        make package clean clean-depends distclean > $PKG_LOG 2>&1
    else
        echo "Omitiendo el paquete #$I ($PORCIENTO%): '$PACKAGE'."
    fi

    let "I++"
done

Cualquier cosa que llegase a fallar, reportalo inmediatamente.

Ejemplo


Despues de haber instalado el meta-paquete “/usr/pkgsrc/meta-pkgs/xfce4”, le indicamos al script que instale el resto de los paquetes de la serie:

[#] ./instalar_serie.sh xfce
Realizando busqueda...

/usr/pkgsrc/audio/xfce4-mixer
/usr/pkgsrc/audio/xfce4-xmms-plugin
/usr/pkgsrc/devel/xfce4-dev-tools
/usr/pkgsrc/editors/xfce4-mousepad
/usr/pkgsrc/graphics/xfce4-icon-theme
/usr/pkgsrc/meta-pkgs/xfce4
/usr/pkgsrc/meta-pkgs/xfce4-extras
/usr/pkgsrc/misc/xfce4-weather-plugin
/usr/pkgsrc/multimedia/xfce4-mpc-plugin
/usr/pkgsrc/net/xfce4-wavelan-plugin
/usr/pkgsrc/print/xfce4-print
/usr/pkgsrc/sysutils/xfce4-appfinder
/usr/pkgsrc/sysutils/xfce4-battery-plugin
/usr/pkgsrc/sysutils/xfce4-cpugraph-plugin
/usr/pkgsrc/sysutils/xfce4-diskperf-plugin
/usr/pkgsrc/sysutils/xfce4-fsguard-plugin
/usr/pkgsrc/sysutils/xfce4-genmon-plugin
/usr/pkgsrc/sysutils/xfce4-netload-plugin
/usr/pkgsrc/sysutils/xfce4-quicklauncher-plugin
/usr/pkgsrc/sysutils/xfce4-systemload-plugin
/usr/pkgsrc/sysutils/xfce4-thunar
/usr/pkgsrc/sysutils/xfce4-xarchiver
/usr/pkgsrc/sysutils/xfce4-xkb-plugin
/usr/pkgsrc/textproc/xfce4-dict-plugin
/usr/pkgsrc/time/xfce4-datetime-plugin
/usr/pkgsrc/time/xfce4-orage
/usr/pkgsrc/time/xfce4-timer-plugin
/usr/pkgsrc/wm/xfce4-wm
/usr/pkgsrc/wm/xfce4-wm-themes
/usr/pkgsrc/x11/xfce3
/usr/pkgsrc/x11/xfce4-clipman-plugin
/usr/pkgsrc/x11/xfce4-desktop
/usr/pkgsrc/x11/xfce4-exo
/usr/pkgsrc/x11/xfce4-eyes-plugin
/usr/pkgsrc/x11/xfce4-gtk2-engine
/usr/pkgsrc/x11/xfce4-mcs-manager
/usr/pkgsrc/x11/xfce4-mcs-plugins
/usr/pkgsrc/x11/xfce4-notes-plugin
/usr/pkgsrc/x11/xfce4-panel
/usr/pkgsrc/x11/xfce4-places-plugin
/usr/pkgsrc/x11/xfce4-screenshooter-plugin
/usr/pkgsrc/x11/xfce4-session
/usr/pkgsrc/x11/xfce4-terminal
/usr/pkgsrc/x11/xfce4-utils

Hay 44 paquetes para instalar.

Si desea cancelar presione Ctrl+C ahora.
Si desea continuar espere 0 segundos.
 

Omitiendo el paquete #1 (2%): '/usr/pkgsrc/audio/xfce4-mixer'.
Instalado el paquete #2 (4%): '/usr/pkgsrc/audio/xfce4-xmms-plugin'...
Omitiendo el paquete #3 (6%): '/usr/pkgsrc/devel/xfce4-dev-tools'.
Omitiendo el paquete #4 (9%): '/usr/pkgsrc/editors/xfce4-mousepad'.
Omitiendo el paquete #5 (11%): '/usr/pkgsrc/graphics/xfce4-icon-theme'.
Omitiendo el paquete #6 (13%): '/usr/pkgsrc/meta-pkgs/xfce4'.
Instalado el paquete #7 (15%): '/usr/pkgsrc/meta-pkgs/xfce4-extras'...
Omitiendo el paquete #8 (18%): '/usr/pkgsrc/misc/xfce4-weather-plugin'.
Omitiendo el paquete #9 (20%): '/usr/pkgsrc/multimedia/xfce4-mpc-plugin'.
Omitiendo el paquete #10 (22%): '/usr/pkgsrc/net/xfce4-wavelan-plugin'.
Omitiendo el paquete #11 (25%): '/usr/pkgsrc/print/xfce4-print'.
Omitiendo el paquete #12 (27%): '/usr/pkgsrc/sysutils/xfce4-appfinder'.
Omitiendo el paquete #13 (29%): '/usr/pkgsrc/sysutils/xfce4-battery-plugin'.
Omitiendo el paquete #14 (31%): '/usr/pkgsrc/sysutils/xfce4-cpugraph-plugin'.
Omitiendo el paquete #15 (34%): '/usr/pkgsrc/sysutils/xfce4-diskperf-plugin'.
Omitiendo el paquete #16 (36%): '/usr/pkgsrc/sysutils/xfce4-fsguard-plugin'.
Omitiendo el paquete #17 (38%): '/usr/pkgsrc/sysutils/xfce4-genmon-plugin'.
Omitiendo el paquete #18 (40%): '/usr/pkgsrc/sysutils/xfce4-netload-plugin'.
Omitiendo el paquete #19 (43%): '/usr/pkgsrc/sysutils/xfce4-quicklauncher-plugin'.
Omitiendo el paquete #20 (45%): '/usr/pkgsrc/sysutils/xfce4-systemload-plugin'.
Omitiendo el paquete #21 (47%): '/usr/pkgsrc/sysutils/xfce4-thunar'.
Omitiendo el paquete #22 (50%): '/usr/pkgsrc/sysutils/xfce4-xarchiver'.
Omitiendo el paquete #23 (52%): '/usr/pkgsrc/sysutils/xfce4-xkb-plugin'.
Omitiendo el paquete #24 (54%): '/usr/pkgsrc/textproc/xfce4-dict-plugin'.
Omitiendo el paquete #25 (56%): '/usr/pkgsrc/time/xfce4-datetime-plugin'.
Omitiendo el paquete #26 (59%): '/usr/pkgsrc/time/xfce4-orage'.
Omitiendo el paquete #27 (61%): '/usr/pkgsrc/time/xfce4-timer-plugin'.
Omitiendo el paquete #28 (63%): '/usr/pkgsrc/wm/xfce4-wm'.
Omitiendo el paquete #29 (65%): '/usr/pkgsrc/wm/xfce4-wm-themes'.
Instalado el paquete #30 (68%): '/usr/pkgsrc/x11/xfce3'...
Omitiendo el paquete #31 (70%): '/usr/pkgsrc/x11/xfce4-clipman-plugin'.
Omitiendo el paquete #32 (72%): '/usr/pkgsrc/x11/xfce4-desktop'.
Omitiendo el paquete #33 (75%): '/usr/pkgsrc/x11/xfce4-exo'.
Omitiendo el paquete #34 (77%): '/usr/pkgsrc/x11/xfce4-eyes-plugin'.
Omitiendo el paquete #35 (79%): '/usr/pkgsrc/x11/xfce4-gtk2-engine'.
Omitiendo el paquete #36 (81%): '/usr/pkgsrc/x11/xfce4-mcs-manager'.
Omitiendo el paquete #37 (84%): '/usr/pkgsrc/x11/xfce4-mcs-plugins'.
Omitiendo el paquete #38 (86%): '/usr/pkgsrc/x11/xfce4-notes-plugin'.
Omitiendo el paquete #39 (88%): '/usr/pkgsrc/x11/xfce4-panel'.
Omitiendo el paquete #40 (90%): '/usr/pkgsrc/x11/xfce4-places-plugin'.
Omitiendo el paquete #41 (93%): '/usr/pkgsrc/x11/xfce4-screenshooter-plugin'.
Omitiendo el paquete #42 (95%): '/usr/pkgsrc/x11/xfce4-session'.
Omitiendo el paquete #43 (97%): '/usr/pkgsrc/x11/xfce4-terminal'.
Omitiendo el paquete #44 (100%): '/usr/pkgsrc/x11/xfce4-utils'.

A pesar de que eran muchos los paquetes, no todos ellos fueron procesados, de esta manera no solamente no sobrecargamos al procesador sino tambien reducimos el trabajo del disco duro.

Recuerda, si encuentras un error por favor repórtalo inmediatamente. Muchas gracias.

Permalink: http://www.mononeurona.org/users/entry/asarch/1442


¿Se imaginan cuando sea grande?

2008-07-19 10:47:14-05

General

Si así es de chico ¿cómo será cuando crezca este chamaco?

Mision Impossible:



Besame Mucho:


Más videos:


http://www.youtube.com/watch?v=5IXa2pNGVj8

Permalink: http://www.mononeurona.org/users/entry/asarch/1441


Korn Shell Settings

2008-07-18 20:30:16-05

Hacks

Este es mi ~/.kshrc:

# ~/.ksrch: Korn Shell Settings
#

# Variables de entorno del shell
export EDITOR=vi
export FCEDIT=$EDITOR
export HISTEDIT=$EDITOR
export HISTFILE=~/.ksh_history
export HISTSIZE=1024
export VISUAL=$EDITOR

# A la cuenta del root no le gusta los locales
if [ $USER != "root" ]; then
#export LANG=en_US.UTF-8
export LANG=en_US.ISO8859-1
export LC_ALL=$LANG
fi

# Usamos el estilo de vi para la linea de comandos
set -o vi

# El estilo del commando ls
if [ $USER != "root" ]; then
alias ls='ls -AF'
fi

# El estilo del prompt
export PS1='
$(whoami)@$(hostname)
$(date)
$(pwd)

[$(tty):!]# '

# Otras rutas de acceso
export PATH=$PATH:

Y esto es lo que tengo en ~/.profile:

export ENV=~/.kshrc

Ejemplo de mi prompt:

asarch@hell
Fri Jul 18 20:28:12 CDT 2008
/usr/pkgsrc/emulators/wine

[/dev/ttyp2:1035]$

Permalink: http://www.mononeurona.org/users/entry/asarch/1440


El despertar del Dæmonio

2008-07-18 20:09:53-05

Hacks

Desde que me inicié en esto de Unix (como filosofía y no como la marca registrada UNIX®), el editor vi siempre ha sido para mi uno de los grandes y fascinantes enigmas .

No entendía el por qué de su naturaleza (un tanto chocante para el iniciado), sus modos, sus variantes, sus clones, las diferencias entre ellos, sus licencias, el por qué de tantos de ellos, etc., y sobre todo, la médula en la que se centra su edición y su naturaleza: el editor ex.

Para tratar de comprender mejor esta mantra me compré el libro “Learning the vi editor” junto con su versión de bolsillo de Arnold Robins, me leí de cabo a rabo (más o menos) la ayuda en línea del vim, la ayuda en línea de su otro clón: el Elvis (el vi oficial de los slackers y de donde se inspiró Keith Bostic para hacer el nvi, el "New VI", el vi *OFICIAL* de los *BSD), el man page del nvi de los BSD, el comando “:visuage” del nvi asi como tambien el comando “:exusage” y seguía sin poder comprender.

En fin, todo lo relacionado con vi/ex (y por lo ende, todo lo que sea relacionando con el editor estándar de Unix: el editor ed).

“...y al buscar, en el aliento de otras bocas, el perfume que engañara mis tristezas...”.
— Canción popular, Falsa.

Hubo incluso un tiempo en que decidí engañarme y usar el otro mantra de Unix (que en realidad no nació en Unix sino en una PDP-10 que usaba el sistema operativo TOPS-10 y nació en Unix por la frustación de no poder asimilar el mantra de vi. Por eso me atrevo a decir que un usuario de Emacs es un usuario fracasado de vi en potencia. Si tan solo los usuarios fracasados del editor vi pudieran contarse con las... !momento! !ya se puede: vi vs emacs!), el editor Emacs y olvidarme de vi como aquél cuyo amor imposible hace que se olvide de la mujer que tanto quiso pero que nunca le pudo o hubo manera de entregarle todo el amor que sentía por ella.

Incluso imprimí todo sus manuales porque tenía las esperanzas falsas de que en este mantra finalmente iba a encontrar mi felicidad hasta que una noche cansado de hacer tantas “muecas” con las manos por presionar las teclas del “método abreviado” tan mamones que tiene este editor decidí volver derrotado una vez más para ver si en esta ocasión podía conquistar el amor de vi/ex de una vez por todas.

Todas las noches leía con vehemencia el manual del editor Sam, la versión oficial y gráfica del editor ed para el que iría ser el sucesor de Unix pero por falta de tiempo no lo fue (jubilaron a los desarrolladores): el sistema operativo Plan 9, pero no me cabía en la cabeza cómo es que alguien pudiera siquiera preferir un editor de “líneas” a un editor normal, hice miles de anotaciones, leía y leía sin comprender hasta que un día...

Suponiendo que vas a escribir un sencillo programa en C:
  • Abres una ventana del emulador de terminal y tecleas:
[$] ed

y te aparece lo siguiente:



¡Nada porque aún no hay nada escrito!
  • Para empezar a escribir el código fuente es necesario decirle a ed que vamos a agregar texto, para eso usamos el comado “a” (del inglés “append”, ¡d'oh!):
a
  • Y empezamos a hackear:
#include

main (int argc, char* argv[])
{
fprintf (stdout, "Hello, world!\n");
return (EXIT_SUCCESS);
}
  • Ahora vamos a detener la inserción de texto para poder guardar el archivo:
.

por cierto, es un sólo punto (“.”).
  • Guardamos con el comando “w” (“write”) más el nombre del archivo:
w main.c
116

El número que aparece enseguida es el total de bytes que ed guardó en el disco.
  • Compilamos:
[$] gcc -o saludo main.c
main.c: In function 'main':
main.c:6: error: 'EXIT_SUCCESS' undeclared (first use in this function)
main.c:6: error: (Each undeclared identifier is reported only once
main.c:6: error: for each function it appears in.)

Y vemos con tristeza que por las prisas nos hemos olvidado de agregar la cabecera estándar “stdlib.h” para el “EXIT_SUCCESS”.
  • Ahora editamos el archivo:
[$] ed main.c
  • Y le inidicamos que en la línea número 1 le vamos a agregar texto:
1a
  • y corregimos:
#include
  • Detenemos la inserción de texto:
.

Recuerda, es un sólo punto (“.”).
  • Compilamos y probamos:
[$] gcc -o saludo main.c

[$] ./saludo
Hello, world!

Pero suponiendo que por algún motivo ya no vamos querer la salida estándar (“stdout”) para mostrar el saludo sino la salida estándar de error (“stderr”).

He aqui el meollo de vi/ex y ed:

Con un editor normal habriamos que presionar la tecla flecha abajo unas cinco veces y presionar la tecla flecha derecha unas 10 veces, dependendiendo claro si habriamos ocupado el shortcut de Ctrl+Flecha derecha, para saltarnos palabra por palabra hasta llegar al lugar del reemplazo.

Lo primero que tenemos que hacer con ed es “seleccionar” la linea que vamos a editar y eso lo conseguimos con

/printf

Segun Arnold Robins hay básicamente tres formas de poder seleccionar las líneas (digo, despues de todo ex y ed son “editores de líneas”):
  1. De manera explícita através del número de línea.

  2. Con símbolos que te ayuden a especificar el número de línea apartir de la dirección actual.

  3. Por medio de expresiones regulas (“regexp”), que es el método mas eficaz, poderoso y confuso y es el que usamos con “/printf”).
Cuando ed abre un archivo para su edición, su “dirección” interna se sitúa en la última línea del archivo (Sam le dice a esta dirección “texto actual, current text” o “punto, dot”).

Viéndolo gráficamente:

1
#include
2
#include
3

4
main (int argc, char* argv[])
5
{
6
fprintf (stdout, "Hello, world!\n");
7
return (EXIT_SUCCESS);
8
}

Con el comando “/printf” lo que hacemos es seleccionar la línea número 6, que es básicamente:
  • /” <- Busca

  • printf”<- La expresión regular indicada.
1
#include
2
#include
3

4
main (int argc, char* argv[])
5
{
6
fprintf (stdout, "Hello, world!\n");
7
return (EXIT_SUCCESS);
8
}

Despues de haber seleccionado la línea que buscamos le vamos a indicar que en esa línea realice una sustitución de texto, para eso usamos el siguiente comando:

s/stdout/stderr/

Que es básiamente:
  • s/” <- Realiza un reemplazo de

  • stdout/” <- La siguiente expresión regular por

  • stderr/” <- La siguiente expresión regular.
Quedando el archivo de la siguiente manera:

1
#include
2
#include
3

4
main (int argc, char* argv[])
5
{
6
fprintf (stderr, "Hello, world!\n");
7
return (EXIT_SUCCESS);
8
}

Si queremos comprobar que se haya realizado dicha sustitución o comprobar que se haya efectuado en el lugar que indicado, imprimimos el contenido de la dirección actual con el comando “p”:

p
fprintf (stderr, "Hello, world!\n");

Y vemos que satisfactoriamente el cambio se ha realizado.

Guardamos el archivo:

w
120

Compilamos:

[$] gcc -o saludo main.c

Y ejecutamos:

[$] ./saludo
Hello, world!

Y ¡listo! Esta es la manera, expresado de la manera más simple, en la que ed/ex o cualquier otro editor de líneas operan.

Lo que hace muy poderoso a un editor de líneas es la posibilidad de poder usar las expresiones regulares (esas todavía me hacen falta por comprender) como por ejemplo, del libro de Arnold Robins:

Tenemos la siguiente base de datos:

Name: Feld, Ray; Areas: PC, UNIX; Phone: 123-4567
Name: Joy, Susan S.; Areas: Graphics; Phone: 999-333
...

Y queremos cambiar el orden de los nombres:

Name: Ray Feld; Areas: PC, UNIX; Phone: 123-4567
Name: Susan S. Joy; Areas: Graphics; Phone: 999-333
...

Sólo con teclear el siguiente poderoso comando con la siguiente poderosa expresión regular: