Social Icons

sábado, 21 de enero de 2012

Como instalar PHP, Mysql y Apache en Ubuntu usando el paquete lamp-server^

Hace tiempo escribimos una entrada sobre como instalar php de una manera manual, pero esta vez les vamos a mostrar como hacerlo a través de un paquete llamado "lamp-server^".

Lo primero que haremos será ir a la terminal [Ctrl + Alt + t] y escribir lo siguiente:

$ sudo apt-get install lamp-server^


No crean que el símbolo "^" en la orden anterior es un error; resulta imprescindible. No entendemos como un paquete puede llevar un tal símbolo en el nombre, pero así es.

A lo largo de la instalación, les pedirá generar una contraseña para MySql.

Una vez hecho lo anterior, abriremos el navegador web favorito y pondremos en la barra de direcciones:


Si todo ha ido bien, debe aparecer el mensaje:

It works!

Una vez hecho esto, podemos instalar también phpMyAdmin.  Lo haremos con la orden:


$ sudo apt-get install phpmyadmin



podremos en Para generar la contraseña de administración, escribir en la barra del navegador:

http://localhost/phpmyadmin

y hacer lo que se le pida en la ventana que aparece. Si se apareciera, como sugieren el algunos lugares, el mensaje de error:

"The requested URL /phpMyAdmin/ was not found on this server."


Pueden intentar solucionarlo editando el archivo "apache2.conf" por ejemplo así:

$ sudo nano /etc/apache2/apache2.conf


agregando esta línea al final del archivo: 

Include /etc/phpmyadmin/apache.conf

Hecho esto, reiniciaremos el servicio de apache:

$ sudo /etc/init.d/apache2 restart

o bien, si estamos en una distribución basada en Debian, como nuestro Ubuntu, basta con hacer en su lugar:

$ sudo service apache2 restart

y ahora podremos entrar phpMyAdmin y generar la contraseña escribiendo en la barra de navegación del navegador:

http://localhost/phpmyadmin

Y ... esto es todo por hoy.

miércoles, 11 de enero de 2012

Recodificar un fichero .tex a utf-8 en Linux y Mac OS X

Introducción

Este post es heredero de éste otro  ---convendría consultarlo ahora para situarse--- y particulariza la información dada allí a la problemática específica de LaTeX.

La cuestión es que muy frecuentemente echamos mano a unos viejos apuntes escritos de acuerdo con el convenio iso-8899-1, también conocido como "latin1", y encontramos que ahora nos conviene mejor tenerlo bajo el convenio utf-8. O sencillamente, podemos haber recibido un "fichero.tex" escrito en ambiente Windows por alguien, que queremos compilarlo en nuestro Ubuntu y que no podemos por la codificación de los acentos, según indica el mensaje de error.  ¿Cómo recodificamos el fichero para su compilación?

Supondremos, una vez más, que usamos emacs para escribir nuestros ficheros .tex en nuestro sistema Ubuntu, aunque por supuesto esta restricción es sólo por fijar ideas. Lo que se dice para emacs vale para nuestro editor preferido.

Procedimiento en Linux

Supongamos que tenemos un "fichero .tex" codificado en iso-8859-1 y que queremos recodificarlo a utf-8 y producir un fichero "fichero_utf8.tex". Si la codificación del inicial no fuera iso-8859-1, indagaríamos cuál es dicha codificación con la orden:

  $ file -i fichero.tex 

y procederíamos en analogía. La denominación de las diferentes codificaciones las conocemos mediante la orden

  $ iconv -l

En el caso que nos ocupa, actuaremos como sigue:

1) Recodificación del fichero 

$ iconv -f ISO_8859-1 -t UTF-8 -o fichero_utf8.tex fichero.tex

2) Abrimos "fichero_utf8.tex" con emacs y sustituimos, si la hubiera, la línea:
   
    \usepackage[latin1]{inputenc}

   por la línea:

    \usepackage[utf8]{inputenc}

Este tipo de información no suele faltar en los ficheros .tex pues está prescrito indicar en la cabecera del documento qué codificación estamos usando para que no sea tomada la de defecto, que eventualmente no será la nuestra. No obstante, hay ficheros .tex que no llevan esa información y entonces no sería necesario el paso 2 ni el 3 ni el 4.

3) Guardamos los cambios del paso anterior en la línea mencionada y procedemos a cerrar el fichero "fichero_utf8.tex" saliendo de emacs.

4) Abrimos nuevamente el "fichero_utf8.tex" y ya deben ser visibles correctamente los acentos en él y ser compilable.

Procedimiento en Mac OS X

En Mac OS X el procedimiento es análogo. Para encontrar la codificación del fichero ejecutaríamos en terminal:

file -I file.tex

Para encontrar la lista de codificaciones usamos la misma orden que en Ubuntu:

iconv -l

y para cambiar la codificación del fichero (por ejemplo de iso_8859-1 a utf-8) ejecutaremos:

iconv -f iso-8859-1 -t utf-8 file.tex > newfile.tex

lo cual modificará el fichero, por lo que habríamos de tener copia aparte, si queremos conservar el original. Es posible que tengamos que editar el fichero y operar dentro cambiando los acentos.

Y ... esto es todo por hoy.

domingo, 1 de enero de 2012

Mi primera clase de C y C++

Introducción

C, diseñado en 1972 por Dennis M. Ritchie en los Laboratorios Bell, es la evolución de B. Tanto uno como otro fueron diseñados para servir como base en la implementación de sistemas operativos, concretamente Unix.

C es un lenguaje de nivel medio con muchas características de los lenguajes de bajo nivel, si bien cuenta con las estructuras típicas de los lenguajes de alto nivel. Genera código muy eficiente, por lo que es muy apreciado en el diseño de software de sistemas.

C++ fue creado a mediado de los 80 del siglo 20 por Bjarne Stroustrup. Se planteó como una extensión de C para poder manejar objetos.  Se admite que C++ es un lenguaje multiparadigma.

Instalación

En Mac OS X tendremos el compilador de C y C++  tras instalar Xcode en la versión que nos sirva el App Store o que traiga nuestro dispositivo de instalación. Si se quiere instalar Xcode del App Store, lo cual recomendamos dado que entonces estará actualizado en todo momento, es preciso saber que Apple lo sirve "gratis".

En Ubuntu C viene instalados por defecto, por lo que no tendremos que hacer nada especial antes de comenzar a compilar. Si no se tuviera instalado C++, se haría con

$ sudo apt-get install g++

El editor

Para editar código de C y C++ usaremos, una vez más, como mejor prueba de lo que venimos sosteniendo, nuestro Emacs en el caso de Linux o Windows  o bien nuestro Aquamacs si usamos Mac OS X. Ni uno ni otro necesitan adecuaciones a los lenguajes C y C++, pues Emacs y Aquamacs vienen por defecto adaptados, al ser tan conocidos los lenguajes y ser Emacs tan usado como editor por los grandes equipos de programación.

En definitiva, como no podía ser menos, recomendamos Emacs como editor de C y C++.

El caso de C

Los ficheros que contienen programas en C deben tener la extensión ".c". Como primer ejemplo de programación en C presentamos el famoso holaMundo.c cuyo código y contenido es:


#include <stdio.h>
int main()
{
printf("Hola mundo");
printf("\n");
return 0;
}

Para compilar el fichero, debemos abrir la terminal e ir hasta el lugar donde tenemos el fichero. Una vez allí, la compilación se lleva a cabo con la orden:

$ gcc holaMundo.c -o holaMundo

y la ejecución del programa se realiza mediante:

$ ./holaMundo

Otro ejemplo en código C podría ser suma.c con el siguiente código:

#include <stdio.h>
int x,y,z;
int main(){
printf("Dame el primer numero: ");
scanf("%d",&x);
printf("\n");
printf("Dame el segundo numero: ");
scanf("%d",&y);
z=x+y;
printf("\n\n El resultado de la suma es :%d\n",z);
return 0;
} 

que compilamos con:

$ gcc suma.c -o suma

y ejecutamos con:

$ ./suma

El caso de C++

Los ficheros que contienen programas en C++ deben tener la extensión ".cpp". Como primer ejemplo de programación en C++ presentamos de nuevo el famoso holaMundo.cpp cuyo código y contenido es:

#include <iostream>
using namespace std;

int main()
 {
  cout << "\nHola mundo\n";
  return 0;
 }

Para compilar el fichero, debemos abrir la terminal e ir hasta el lugar donde tenemos el fichero. Una vez allí, la compilación se lleva a cabo con la orden:

$ g++ holaMundo.cpp -o holaMundo

y la ejecución del programa se realiza mediante:

$ ./holaMundo

El programa de la suma en C++, que llamaremos suma_c++.cpp podría tener el siguiente código:

#include <iostream>
using namespace std;


int main()
{
  int x,y,z;
  cout << "Introducir el primer entero: ";
  cin >> x;
  cout << "Introducir el segundo entero: ";
  cin >> y;
  z = x + y;
  cout << "La suma de ambos enteros es: " << z << endl;
  return 0; 
} 


La compilación del fichero suma_c++.cpp se lleva a cabo con la orden:

$ g++ suma_c++.cpp -o suma_c++

y la ejecución del programa se realiza mediante:

$ ./suma_c++


Y ... esto es todo por hoy.

sábado, 19 de noviembre de 2011

Instalación estándar de Ubuntu 11.10 y una adecuación para uso científico


 Supuestos y ayuda

Suponemos instalado Ubuntu 11.10. Si no se tuviera, podrá ser instalado en una forma similar a la que indica Slice of Linux  que por desgracia no está actualizada. Otra página que puede ayudar algo es ubuntulife.

Nota:

Tradicionalmente hemos venido instalando el repositorio de "software de los colaboradores" de Ubuntu. Esto se haría como sigue:

 sudo add-apt-repository "deb http://archive.canonical.com/ubuntu   oneiric partner"

 sudo apt-get update

No obstante, esta vez no lo hemos necesitado, por lo que recomendarlo dejar su instalación hasta que sea imprescindible, si llega ese momento.

Adecuación

Instalar Google Chromium

 sudo apt-get install chromium-browser  chromium-browser-l10n

Nos agrada usar Chromium decorado con el motivo Mulberry, que era ofrecido por Google pero que ha dejado de serlo. No obstante, si nos gusta ese motivo lo podemos cargar desde aquí.

Si queremos que Chromium abra los .pdf dentro del mismo navegador, una de las opciones es usar la extension de Google al efecto. Se puede visitar el Chrome Web Store y buscar "Visualizador de archivos PDF/PowerPoint" y dar la orden de añadir o directamente ir al nexo actual de dicha extensión Visualizador de archivos PDF/PowerPoint  y pulsar en "añadir a chrome". ¡Verán ustedes qué bien funciona!

Instalar los complementos (plugins) para firefox

 sudo apt-get install mozplugger

Instalar ssh

Puede que necesitemos administrar remotamente nuestro ordenador. Para ello nada mejor que ssh

sudo apt-get install ssh


Instalar los extras de software restringido

 sudo apt-get install ubuntu-restricted-extras 


Instalar Emacs 

sudo apt-get install emacs emacs23-el m17n-docs gawk
sudo apt-get install html-helper-mode 

Instalar aspell para español

  sudo apt-get install aspell-es

Instalar un gestor de lanzadores

Para modificar y/o crear lanzadores, trabajo tan difícil en Oneiric Ocelot, existe una utilidad que se llama alacarte. Para instalarlo hacemos:

sudo apt-get install alacarte

y para usarlo, muy importante,

sudo alacarte

Instalar gnome-do

La aplicación "gnome-do" es algo análogo a la exitosa aplicación de Apple llamada "Alfred". Se trata de que abre una pequeña ventana para buscar aplicaciones o documentos. Se activa con la secuencia "Super + barra espaciadora" (la tecla "Super" es la que está junto a "Alt" y a su izquierda, suele tener grafiado el anagrama de Windows o una casita dentro de un círculo). La instalación es con:

sudo apt-get install gnome-do

Instalar el "Gestor de paquetes Synaptic"

Como podéis comprobar preferimos la consola en detrimento del conocido "Gestor de paquetes Synaptic" y Canonical nos da la razón en Ubuntu 11.10 y deja sin instalar por defecto esta utilidad. No obstante, no podemos dejar a nuestro lectores sin esa herramienta. Para instalarla haremos:

  sudo apt-get install synaptic

Instalar texlive

  sudo apt-get install texlive auctex

posteriormente debemos completar la instalación básica con los paquetes que más nos gusten o necesitemos añadir. Hemos ilustrado esta operación en nuestro blog justo aquí.

Si se pretendiera además escribir texto árabe con LaTeX, haríamos:

  sudo apt-get install arabtex 

Si se añade algún paquete a mano, es preciso no olvidar el ejecutar seguidamente:

  sudo texhash

pues si no se hace, estará el paquete ... pero no constará en la tabla hash de la instalación y será como si no estuviera.

Hay un editor muy famoso para el código LaTeX, se llama texmaker. No recomendamos su uso, pues nos hará dependientes del ratón y estorbará en la memorización de las órdenes LaTeX, así como en el uso de las no incluídas; en definitiva será un freno para un trabajo ágil y preciso. El paso a LaTeX debe producirse a la vez que se olvida la filosofía WordOffice, y para ello nada mejor que usar Emacs como editor de LaTeX.  No obstante la instalación de texmaker es con:

 sudo apt-get install texmaker

Instalar Haskell

Por desgracia la versión de Haskell que nos sirve Canonical/Debian es aún la 6. Para la instalación ejecutaremos:

sudo apt-get install ghc6 libghc6-mtl-dev libghc6-gtk-dev  haskell-mode 

Instalar Glade

Si deseamos usar Glade en combinación con Haskell, ejecutaremos

sudo apt-get install glade libghc6-glade-dev libghc6-glade-doc glade-xfce

Instalar Java 

Lo más importante queda instalado con la orden:

 sudo apt-get install openjdk-7-jre openjdk-7-jdk icedtea-7-plugin

donde "icedtea-7-plugin" permitirá el uso adecuado de java a los navegadores. Si se necesitara, también podríamos instalar:

sudo apt-get install visualvm openjdk-7-demo openjdk-7-source

Instalar Prolog

Ejecutaremos la orden

sudo apt-get install swi-prolog prolog-el ncurses-doc swi-prolog-doc

Aún habiendo instalado el paquete "prolog-el" sigue siendo necesario, hoy por hoy, incluir en el fichero ".emacs" lo siguiente:

(autoload 'run-prolog "prolog" "Start a Prolog sub-process." t)
    (autoload 'prolog-mode "prolog" "Major mode for editing Prolog programs." t)
    (autoload 'mercury-mode "prolog" "Major mode for editing Mercury programs." t)
    (setq prolog-system 'swi)
    (setq auto-mode-alist (append '(("\\.pl$" . prolog-mode)
                                    ("\\.m$" . mercury-mode))
                                   auto-mode-alist))

Si no existiese el fichero .emacs en el directorio raíz del usuario, sería necesario abrirlo con el contenido anterior. Recuérdese que en nautilus, el navegador interno, es preciso hacer Ctrl+h para ver los ficheros ocultos (los que comienzan por .). Advertimos también que no debe ser confundido el "fichero .emacs" con el "directorio .emacs.d", el cual sí puede existir.

Instalar Ruby

 sudo apt-get install ruby irb rdoc ri ruby-dev

y para completar la instalación se puede consultar este nexo.

Instalar php, mysql y apache

Consultar para ello en nuestro blog  este nexo  o este otro. Para adecuar php a emacs:

sudo apt-get install php-elisp

Instalar R

sudo apt-get install r-base r-cran-rodbc ess

Instalar descompresores:

 sudo apt-get install arj rar p7zip-full unace unzip p7zip-rar file-roller

 sudo apt-get install atool

 sudo apt-get install arc lzop nomarch rpm p7zip unalz lzip

Instalar visores

sudo apt-get install djview djvulibre-bin djvulibre-plugin


Instalar vlc

 sudo apt-get install vlc vlc-plugin-pulse mozilla-plugin-vlc videolan-doc


Instalar wine

 sudo apt-get install wine

será necesario "aceptar" y aceptar de nuevo sobre "si". Para seleccionar las repuestas adecuadas, usar el tabulador (aparecerá un sombreado rojo sobre la opción) y pulsar intro.

Instalar PlayOnLinux

Hay información detallada al respecto para distintas distribuciones y sistemas, así como para diferentes versions de Ubuntu en la página oficial. Para Ubuntu 11.10 hemos probado y funciona:

wget -q "http://deb.playonlinux.com/public.gpg" -O- | sudo apt-key add -
sudo wget http://deb.playonlinux.com/playonlinux_oneiric.list -O /etc/apt/sources.list.d/playonlinux.list
sudo apt-get update
sudo apt-get install playonlinux

Instalar DOSBox

Para ver los detalles consultar este post nuestro.

Instalar dosemu

 sudo apt-get install dosemu

si al hacer

$ dosemu

no funciona, ejecutamos

$ sudo sysctl -w vm.mmap_min_addr=0

y ya debe de funcionar.

Instalar Midnight Commander

Este programa es una pieza de yacimiento arqueológico muy apreciado por los viejos usuarios. Es un cliente rudimentario de navegación interna que abre dos ventanas de ficheros para facilitar el trabajo. Para su instalación ejecutamos:


 sudo apt-get install dbview odt2txt gv catdvi djvulibre-bin python-boto python-tz


si arj no está instalado, no olvidar incluirlo en la lista inmediatamente precedente. Ahora hacemos la instalación de Midnight Commander con la orden:

 sudo apt-get install mc

Si preferimos el entorno gráfico a la consola, podemos usar, en lugar de mc, el famoso gnome-commander

sudo apt-get install gnome-commander

Instalar gftp

 sudo apt-get install gftp

Instalar algunos paquetes científicos (maxima y stellarium)

sudo apt-get install maxima wxmaxima xmaxima
sudo apt-get install libqt4-dev stellarium

Instalar google-earth

sudo apt-get install googleearth-package
make-googleearth-package --force
sudo apt-get -f install
sudo apt-get install ttf-dejavu ttf-bitstream-vera 
sudo apt-get install msttcorefonts lsb-core
sudo dpkg -i googleearth*.deb

El conrrecto funcionamiento de Google-earth se verá tras reiniciar el equipo.

Si al arrancar fracasa puede ser por causa de la "guía de trucos". Si la
"guía de trucos"  da problemas, entonces hay que suprimirla del arranque como sigue. Primero editamos el fichero, por ejemplo con:

gedit ~/.config/Google/GoogleEarthPlus.conf

y entonces buscamos el renglón

enableTips=true

que será cambiado por

 enableTips=false

sin olvidar guardar antes de salir.

Instalar un grabador del escritorio

 sudo apt-get install recordmydesktop gtk-recordmydesktop

Instalar conversores entre formatos

  • de vídeo
           sudo apt-get install mencoder
  • de sonido 
             sudo apt-get install lame mpg123

Instalar Gimp y PDFedit

 sudo apt-get install gimp gimp-plugin-registry gimp-resynthesizer gimp-ufraw

 sudo apt-get install pdfedit

Instalar pdftk

Es una herramienta para pegar pdf, poner y quitar constraseñas, etc.

 sudo apt-get install pdftk

Su manual está disponible en la forma habitual, es decir:

$ man pdftk

Y ... esto es todo por hoy.

sábado, 29 de octubre de 2011

Como instalar PHP, Mysql y Apache en Ubuntu

Contamos con otra versión de este post aquí.

*) Primero instalamos apache con la siguiente orden:
-----------------------------------------------------------------
sudo apt-get install apache2
-----------------------------------------------------------------

*) Después debemos instalar php con la orden:
-----------------------------------------------------------------
sudo apt-get install php5                                        
-----------------------------------------------------------------

*) Instalamos las librerias que permitiran interaccion entre MySql, apache y php:
-----------------------------------------------------------------
sudo apt-get install libapache2-mod-auth-mysql php5-mysql
-----------------------------------------------------------------

*) Instalar MySql server 5 o MySql 4.1, según prefieran:
----------------------------------------------------------------
MySql 5 : sudo apt-get install mysql-server-5.

MySql 4.1 : sudo apt-get install mysql-server-4.1
----------------------------------------------------------------

*) Reiniciamos los servicios para ponerlos a prueba:
---------------------------------------------------------------
sudo /etc/init.d/apache2 restart

sudo /etc/init.d/mysql restart
---------------------------------------------------------------

*) Ponemos a prueba que todo funcione:
- Primero abrimos nuestro navegador y ponemos en la barra de dirección:

http://localhost/

Tiene que aparecer un mensaje como:

It works!

-) Comprobamos que MySql funciona escribirndo en la terminal:

mysql -u root

debería salirnos un mensaje de bienvenida y la etiqueta de la línea de órdenes, es decir,

mysql>
Si hemos puesto password durante la instalación es posible que necesitemos introducirlo en esta prueba, por lo que ejecutaremos en consola la orden:

mysql -u root -p

y ahora se nos pedirá el password, que escrito correctamente nos llevará a un mensaje de bienvenida y la línea:

mysql>

-) Comprobar que php funcione:

Para esto primero debemos dar permisos a la carpeta www escribiendo en la terminal:

sudo chmod 777 -R /var/www/

Después abriremos nuestro editor de texto y escribiremos:

    <?

    echo ” que onda wey?”;

    phpinfo();

    ?>

Esto lo guardamos en la carpeta "/var/www/" con el nombre que nosotros queramos pero con la extensión ".php"

Ya, por fin, iremos a "localhost/el_nombre_que_hayamos_puesto.php"

-----------

Tamaños de archivos a descargar:
*php: (7766kB)

*msql, apache, php: Necesitarán descargar 0B/64,2kB de archivos. Después de desempaquetar se liberarán 426kB.

Y ... esto es todo por hoy.

domingo, 23 de octubre de 2011

GHCi, version 7.0.3 no admite el patrón (n+k) en las definiciones de funciones

Introducción

Con las versiones de Haskell provistas en los Ubuntu anteriores a Ubuntu 11.10, los programadores de Haskell han venido usando un truco permitido, aunque no muy ortodoxo, que era incluir el patrón (n+k) en las definiciones de funciones, a la izquierda del igual definitorio. Por ejemplo, la implementación del factorial era entendida por muchos así:

factorial :: Integer -> Integer
factorial 0 = 1
factorial (n+1)  =  (n+1) * factorial n

en lugar de:

fact :: Integer -> Integer
fact 0 = 1
fact n  =  n * fact (n-1)

El lector se preguntará intrigado por la diferencia entre factorial y fact. Es muy sutil, tanto que ni algunos desarrolladores la captan ... y todo se debe a un comportamiento sui géneris  del intérprete/compilador. Resulta que al intentar calcular factorial (-1) el diálogo que se producía antes, por ejemplo bajo GHCi version 6.10.4, era:

*Main> factorial (-1)
*** Exception: factorial.hs:(2,0)-(3,36): Non-exhaustive patterns in function factorial


*Main> fact (-1)
*** Exception: stack overflow

Explicación

Con fact ocurre lo siguiente:

fact (-1)  = (-1) * fact (-2)
           = (-1) * (-2) * fact (-3)
           = etc ... por siempre


Con factorial ocurría algo distinto. Al intentar calcular factorial (-1) el intérprete busca si (-1) unifica con el argumento de la primera línea, y esto no ocurre porque -1 es distinto de 0; así pués intenta ver si (-1) unifica con (n+1) para algún valor de n, pero en las antiguas versiones (n+k), con k natural fijo pero arbitrario, únicamente unificaba con valores enteros superiores o iguales a k. Por tanto, (-1) no unificaba con el patrón de ninguna de las líneas definitorias de factorial y, siendo -1 una instancia del tipo Integer, la definición de factorial debería estar incompleta, de ahí el mensaje "Non-exhaustive patterns in function factorial".

Total, lo que hacía el programador era optimizar el esfuerzo al escribir código y conjurar el peligro de caer en un bucle infinito, promoviendo una definición incompleta cuya excepción siempre se podría capturar.

Los desarrolladores, creemos que con buen criterio, han impedido estas estratégias y han impedido definiciones como la de factorial en beneficio de definiciones como las de fact. De hecho, si con GHCi, version 7.0.3 intentamos interpretar un fichero que contuviera a factorial, se produciría un error como el siguiente:


$ ghci factorial.hs
GHCi, version 7.0.3: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
[1 of 1] Compiling Main             ( factorial.hs, interpreted )

factorial.hs:3:12: Parse error in pattern: n + 1
Failed, modules loaded: none.
Prelude> 

donde se dice explícitamente que no admite el patrón (n+1). 

Problema

Creemos que lo adecuado y aconsejable es programar sin el patrón (n+k) dando definiciones exhaustiva, con mensajes de error cuando sea conveniente; pero ... ¿qué hacemos con lo ya programado? 

Para programas antiguos concebidos con esas estratégias,  programas que no estamos dispuestos a modificar pues podría suponer un gran esfuerzo: ¿qué solución hay, si la hay?

Solución

Pues sí la hay y ... la hemos encontrado. Mejor dicho, conocemos dos soluciones:

a) La primera sería incluir en la cabecera del fichero el siguiente texto:

-- posible comentario
 {-# LANGUAGE NPlusKPatterns #-}
 module Main where

con lo que quedaría

-- posible comentario
 {-# LANGUAGE NPlusKPatterns #-}
 module Main where


factorial :: Integer -> Integer
factorial 0 = 1
factorial (n+1)  =  (n+1) * factorial n
...

que sería admitido por el nuevo ghci sin error. No es necesario poner aquí  "Main" en "module Main where", podríamos haber puesto otro nombre, pero dejo este para sugerir que podríamos estar ante el módulo "main" de un proyecto, que podría ser compilado también con ghc.

b) Al compilar el fichero factorial.hs que contiene, o llama, a la función factorial, haríamos lo siguiente:

$ ghci -XNPlusKPatterns factorial.hs

Creemos que también funciona

$ ghc  -XNPlusKPatterns .... factorial.hs

En realidad, cualquiera de las dos soluciones lo que hace es forzar al intérprete/compilador de Haskell a volver al pasado, volver a los esquemas que sí admitían el patrón definitorio (n+k).

Y ... esto es todo por hoy.




lunes, 17 de octubre de 2011

Instalación y uso básico de dosemu

Introducción

dosemu es una utilidad similar a DosBox que hoy por hoy sólo está disponible para Linux.  Nos permite hacer lo mismo que DosBox, por lo que no hay nada que añadir a la introducción hecha en nuestro post de DosBox.

Entonces, ¿podemos prescindir de dosemu? La respuesta es negativa; hemos constatado que hay múltiples  ejecutables hechos para MS-Dos que funcionan mejor en dosemu, al menos en algunos de sus rasgos. Lo ideal es tener en nuestro Ubuntu una instalación de DosBox y otra de dosemu para usar en cada caso lo que mejor nos venga.

Instalación

Suponemos instalada la versión preferida de Ubuntu y plena capacidad de uso de apt-get. En este caso ejecutamos desde la línea de órdenes de una terminal:

sudo apt-get install dosemu
cuando termine el proceso ejecutamos desde la misma línea de órdenes:

dosemu
Si tenemos poca memoria RAM en el equipo, lo normal es que falle esta orden; pero no hay que preocuparse. En caso de fallo ejecutamos desde la línea de órdenes:

sudo sysctl -w vm.mmap_min_addr=0
Se ejecuta una vez por sesión y antes de ejecutar dosemu.

Una vez se ha conseguido ejecutar dosemu la primera vez, es generado el directorio oculto

/home/mi_usario/.dosemu
que será el directorio de trabajo. En DosBox cualquier directorio del ordenador podía ser nuestro directorio de trabajo. A diferencia, en dosemu todo lo que deseemos ejecutar tendrá que estar situado en .dosemu

Para poder ir hasta él con el navegador interno Nautilus, haremos Ctrl+h desde él y ya  tendremos a nuestra vista y alcance el directorio de trabajo .dosemu, entre otros.


Uso de dosemu

Si entramos en el directorio /home/mi_usuario/.dosemu veremos  una carpeta o directorio llamado

drive_c
Todos los programas que queramos usar, deberán ser colocados en éste directorio drive_c. Sugerimos colocarlos ordenados en subdirectorios de este directorio de trabajo. Recordamos que en MS-Dos muy poco se instalaba, aunque lo que se instalaba también se podrá instalar en dosemu, tal y como hacíamos allí. Ahora cada vez que queramos ejecutar uno de nuestros programas, iremos al directorio .dosemu, lo buscaremos en él o entre sus carpetas y lo ejecutaremos en el modo habitual.

Nota Final

Recomendamos usar junto a dosemu  la famosa reimplementación  de la interfaz de programación de aplicaciones de Win16 y Win32 para sistemas operativos basados en Unix,  que se conoce con el nombre de wine (acrónimo recursivo en inglés para  Wine Is Not an Emulator, que significa "Wine no es un emulador" y que inicialmente fue un acrónimo para WINdows Emulator).

Y ... esto es todo por hoy.