Instalación de sistemas para I1M 2017-18

Índice

1 Introducción

  • Nota: La instalación está en la máquina virtual de I1M: I1M.ova (con usuario I1M y contraseña i1m).
  • El sistema operativo en Ubuntu 16.04
  • Con Synaptic se han instalado:
    • emacs
    • gnuplot: Command-line driven interactive plotting program
    • maxima: Computer algebra system
    • maxima-emacs: Computer algebra system – emacs interface
    • maxima-src: Computer algebra system – source code
    • maxima-test: Computer algebra system – test suite
    • wxmaxima: GUI for the computer algebra system Maxima

2 Desinstalar versiones anteriores

  • Con Synaptic desinstalar
    • alex
    • cabal-install
    • doctest
    • ghc
    • happy
    • haskell-platform
    • hlint
    • hscolour
  • En el directorio personal, borrar los directorios
    • .cabal
    • .ghc

3 Instalación de de la plataforma Haskell

  • Instalar con
cd /tmp
wget https://www.haskell.org/platform/download/8.0.2/haskell-platform-8.0.2-unknown-posix--minimal-x86_64.tar.gz .
tar xf haskell-platform-8.0.2-unknown-posix--minimal-x86_64.tar.gz
sudo ./install-haskell-platform.sh

4 Configuración de emacs

  • En ~/.emacs escribir
;;; Uso de paquetes
(require 'package)

(setq package-archives
      '(("gnu"          . "http://elpa.gnu.org/packages/")
        ("marmalade"    . "http://marmalade-repo.org/packages/")
        ("melpa-stable" . "https://stable.melpa.org/packages/")
        ))

(package-initialize)
  • Con 'M-x list-packages' instalar los siguientes paquetes de emacs
Paquete Versión Descripción
haskell-mode 16.1 A Haskell editing mode
ghc 5.8.0.0 Sub mode for Haskell mode
  • Escribir en ~/.emacs
;;; Emacs
;;; =====

;;; Permite buscar en la historia
(setq comint-history-isearch t)

;;; Suprime el mensaje inicial:
(setq inhibit-startup-message t)

;;; No hace sangrado con tabuladores:
(setq-default indent-tabs-mode nil)

;;; Permite la evaluación de expresiones en el mini-buffer:
(put 'eval-expression 'disabled nil)    ; M-:

;;; Escribe 79 caracteres por línea:
(setq-default fill-column 79)

;;; No hace copias de seguridad:
(setq backup-inhibited t)

;;; Envía los fichero borrados a la papelera:
(setq delete-by-moving-to-trash t)

;;; Añade una nueva línea al final del fichero
(setq require-final-newline t)

;;; Muestra en la línea del modo la fila y columna del cursor.
(column-number-mode 1)   ; en prueba

;;; Completaciones
(dynamic-completion-mode)

;;; Por defecto, en dired no escribe el grupo:
(setq dired-listing-switches "-alGv")

;;; Para poner acentos
(require 'iso-transl)

;;; Para mostrar paréntesis
(show-paren-mode)

;;; Elimina los ecos en la shell
(setq comint-process-echoes t)

;;; Portapapeles
;;; ------------
(menu-bar-enable-clipboard)
(setq x-select-enable-clipboard t)

;;; Pone una región en minúscula
(put 'downcase-region 'disabled nil)

;;; Haskell
;;; =======

(eval-after-load "haskell-mode"
  '(progn
    (define-key haskell-mode-map (kbd "C-x C-d") nil)
    (define-key haskell-mode-map (kbd "C-c C-z") 'haskell-interactive-switch)
    (define-key haskell-mode-map (kbd "C-c C-l") 'haskell-process-load-file)
    (define-key haskell-mode-map (kbd "C-c C-b") 'haskell-interactive-switch)
    (define-key haskell-mode-map (kbd "C-c C-t") 'haskell-process-do-type)
    (define-key haskell-mode-map (kbd "C-c C-i") 'haskell-process-do-info)
    (define-key haskell-mode-map (kbd "C-c M-.") nil)
    (define-key haskell-mode-map (kbd "C-c C-d") nil)))


(add-hook 'haskell-mode-hook 
          '(lambda ()
             (turn-on-auto-fill)
             (setq fill-column 79
                   haskell-process-show-debug-tips nil
                   haskell-ask-also-kill-buffer nil
                   haskell-process-suggest-language-pragmas nil
                   haskell-process-suggest-no-warn-orphans nil
                   haskell-process-suggest-overloaded-strings nil
                   )
             ))        

;;; Maxima
;;; ======

(autoload 'maxima-mode "maxima" "Maxima mode" t)

(autoload 'imaxima "imaxima" "Frontend for maxima with Image support" t)

(autoload 'maxima "maxima" "Maxima interaction" t)

(autoload 'imath-mode "imath" "Imath mode for math formula input" t)

(setq imaxima-use-maxima-mode-flag t)

(add-to-list 'auto-mode-alist '("\\.ma[cx]" . maxima-mode))

(add-hook 'maxima-mode-hook 
          '(lambda ()
             (turn-on-auto-fill)
             (setq fill-column 79)
             ))

;;; Variables de configuración
;;; ==========================

(custom-set-variables
 ;; custom-set-variables was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 )

(custom-set-faces
 ;; custom-set-faces was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 '(default ((t (:family "Ubuntu Mono"
                :foundry "DAMA"
                :slant normal
                :weight normal
                :height 181
                :width normal)))))
  • Escribir en ~/.emacs.d/elpa/haskell-mode-16.1/haskell-commands.el (y compilarlo)
(defun haskell-process-cd (&optional _not-interactive)
  ;; FIXME optional arg is not used
  "Change directory."
  (interactive)
  (let* ((session (haskell-interactive-session))
         (dir (haskell-session-prompt-set-current-dir session)))
    (haskell-process-log
     (propertize (format "\nTrabajando en el directorio %s ...\n\n" dir)
                 'face font-lock-comment-face))
    (haskell-process-change-dir session
                                (haskell-interactive-process)
                                dir)))

(defun haskell-process-change-dir (session process dir)
  "Change SESSION's current directory.
Query PROCESS to `:cd` to directory DIR."
  (haskell-process-queue-command
   process
   (make-haskell-command
    :state (list session process dir)
    :go
    (lambda (state)
      (haskell-process-send-string
       (cadr state) (format ":cd %s" (cl-caddr state))))

    :complete
    (lambda (state _)
      (haskell-session-set-current-dir (car state) (cl-caddr state))
      (haskell-interactive-mode-echo (car state)
                                     (format "\nDirectorio: %s\n"
                                             (cl-caddr state)))))))
  • Escribir en ~/.emacs.d/elpa/haskell-mode-16.1/haskell-process.el (y compilarlo)
(defconst haskell-process-greetings
  (list "Todo lo que se ignora, se desprecia. ~ Antonio Machado"
        "Todo necio confunde valor y precio. ~ Antonio Machado"
        "Caminante no hay camino, se hace camino al andar. ~ Antonio Machado"
        "Despacito y buena letra, que el hacer las cosas bien, importa más que el hacerlas"
        "Todo lo que se ignora, se desprecia. ~ Antonio Machado"
        "Con cada paso que das alcanzas tu meta. ~ Dicho Zen"
        "La esencia de la matemática es su libertad. ~ G. Cantor"
        "Programación, en sentido amplio, es resolución de problemas. ~ Paul Hudak"
        "Un programa de ordenador es una demostración. ~ Igor Rivin"
        "Matemática es una ciencia experimenta y la computación es el experimento ~ Rivin"
        "El control de la complejidad es la esencia de la programación. ~ B.W. Kernigan"
        "La iteración es humana, la recursión es divina. ~ L. Peter Deutsch"
        "Los ordenadores son inútiles. Sólo pueden darte respuestas. ~ Pablo Picasso"
        "Lo que tenemos que aprender a hacer, lo aprendemos haciéndolo. ~ Aristóteles" 
        )
  "Greetings for when the Haskell process starts up.")

5 Instalar las librerías usadas en I1M

  • Actualizar cabal
cabal update

Crea el directorio ~/.cabal

  • Instalar las librerías usadas en I1M
cabal install primes matrix gnuplot easyplot

Las librerías se instalan en ~/.cabal/lib/x8664-linux-ghc-8.0.2

6 Instalar la librería de I1M

  • Instalar la librería de I1M
cd /tmp
wget http://github.com/jaalonso/I1M/archive/master.zip .
unzip master.zip
cd I1M-master
cabal install I1M.cabal

Se instala I1M-0.1.0.0 en ~/.cabal/lib/x8664-linux-ghc-8.0.2

7 Instalar la librería Gloss

  • Instalar siguientes librerías de Ubuntu
sudo apt-get install libglfw-dev
sudo apt-get install freeglut3 freeglut3-dev
sudo apt-get install libxi-dev libxrandr-dev  libxcursor-dev libxinerama-dev
  • Instalar Gloss
cabal install gloss

Se instala la librería gloss-1.10.2.3 en ~/.cabal/lib/x8664-linux-ghc-8.0.2

  • Instalar los ejemplos de Gloss
cabal install glos-examples
  • Nota: En la MV no se instalan los ejemplos, pero se pueden compilar y ejecutar. Por ejemplo,
cd /tmp
wget https://hackage.haskell.org/package/gloss-examples-1.11.1.1/gloss-examples-1.11.1.1.tar.gz
cd ~/.cabal/packages/hackage.haskell.org/gloss-examples/1.10.1.1/gloss-examples-1.10.1.1/picture/Zen
ghc --make Main.hs 
./Main

8 Instalación de otras librerías con cabal

  • Instalar en ~/.cabal/lib/x8664-linux-ghc-8.0.2
cabal install hspec codeworld-api hlint doctest hspec

José A. Alonso

2017-09-07 jue 19:58