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