¿Qué es LaTeX?

LaTeX es un lenguaje de marcado de uso obligatorio para todo aquel que quiera realizar un trabajo, tesis o cualquier texto con calidad profesional. Su uso está orientado especialmente a la composición de artículos científicos, lo que no implica que no se pueda usar en otros ámbitos. Trabajar con LaTeX no es igual que trabajar con cualquier procesador de textos del estilo de OpenOffice u Microsoft Office. No necesitaremos ningún editor especial (aunque posteriormente veremos algunos), únicamente necesitaremos escribir en cualquier archivo la estructura de nuestro documento (por ejemplo, con el Bloc de Notas o el editor GEdit) y utilizar un compilador para que nos genere el documento. Así pues, al escribir nuestros documentos con LaTeX, no estaremos viendo realmente como va a ser nuestro resultado final aunque, creerme, el compilador nos reordenará nuestros párrafos, dará el formato adecuado a cada uno de nuestros textos y nos guardará el resultado en un archivo PDF, DVI o Postscript. Si todavía no sabes muy bien de que va la cosa, no te preocupes, será más fácil de lo que parecerá y al terminar de leer este documento serás capaz de crear una memoria/proyecto/tesis como en este ejemplo. El índice que seguirá este tutorial consta de los siguientes temas:

  1. Estructura básica de un documento en LaTeX
  2. Dando formato al texto
    1. Antiguo problema con las tildes y las eñes
  3. Posicionamiento del texto
  4. Creando una portada y un índice
  5. Capítulos: secciones y subsecciones
  6. Enumeraciones y listas
  7. Código fuente
  8. Compilando documentos LaTeX desde MS-Windows y GNU-Linux Ubuntu
    1. Instalación en MS-Windows
    2. Instalación en GNU-Linux Ubuntu
  9. Algunas plantillas de LaTeX

Este tutorial es la segunda edición de otro más antiguo que hice y que aún conservo. Podéis encontrar la versión anterior aquí.

1. Estructura básica de un documento LaTeX

La estructura básica de un archivo de código LaTeX es la siguiente:

  1. %Tamanyo y tipo de documento que queremos escribir
  2. \documentclass[10pt,graphicx,caption,rotating]{article}
  3.  
  4. %Paquetes para el idioma, las ti­ldes, etc.
  5. \usepackage[activeacute,spanish]{babel}
  6. \usepackage[utf8]{inputenc}
  7.  
  8. %Abrimos el bloque para escribir el documento
  9. \begin{document}

  10.   Aquí empezaremos a escribir nuestro documento. Pueden ser trabajos, tesis, cartas, etc.

  11. \end{document}
  12. %Cerramos el bloque para escribir el documento

Código 1.1: Estructura básica de un documento LaTeX

Como podemos ver en el código 1.1 la línea 2 nos indica que clase de documento queremos crear. En ese caso un documento de tipo artículo y con un tamaño de letra 10 por defecto. Las líneas de la 5 a la 7 nos indican paquetes que se van a utilizar en el documento. Los paquetes añaden nueva funcionalidad y formatos a nuestro documento LaTeX. Estos paquetes se aprenden a usar según avancen nuestros conocimientos en el uso de LaTeX. Por ahora, dejaremos éstos por defecto en nuestro tutorial.

Podemos añadir comentarios en LaTeX (que no aparecerán en el resultado final) añadiendo % al principio de una línea. Los comentarios nos servirán como “notas mentales” mientras escribimos el documento. Podemos ver varios comentarios en las líneas 1,4,9 y 15.

LaTeX tiene una estructura por bloques, es decir, cada una de las secciones que queramos escribir (enumeraciones, portada, tablas, etc.) se escriben entre bloques que empiezan con \begin{…} y terminan con \end{}.En la estructura básica existe un bloque en el que se nos permite empezar a escribir el documento: entre \begin{document} y \end{document} (líneas 10 y 14). Para finalizar, hemos escrito un ejemplo de texto en la linea 12 (que no tiene por qué pertenecer a la estructura). El resultado de este pequeño ejemplo se muestra a continuación:

Latex tutorial - Imagen del resultado

2. Dando formato al texto

Ahora que tenemos la estructura básica de un documento en LaTeX, empezaremos a escribir dentro de él. Todo aquello que escribamos, lo deberemos hacer dentro del bloque document como vimos anteriormente.

Otra de las características esenciales en un documento es el formato que tiene el texto. Para aplicar un formato a un texto, tendremos que usar palabras clave que veremos en la siguiente lista y encerrar el texto entre corchetes:

  • \textit{texto aquí}

    Con esta expresión, el texto “texto aquí” se transformará en itálica.

  • \textbf{texto aquí}

    Con esta expresión, el texto “texto aquí” se transformará en negrita.

  • \underline{texto aquí}

    Con esta expresión, el texto “texto aquí” se subraya.

  • \large{texto aquí}

    Con esta expresión, el texto “texto aquí” se verá mucho más grande.

  • \huge{texto aquí­}

    Con esta expresión, el texto “texto aquí” se verá muchísimo más grande.

Pongamos en práctica lo comentado anteriormente con un ejemplo. Escribamos éste ejemplo más completo:

  1. %Tamanyo y tipo de documento que queremos escribir
  2. \documentclass[10pt,graphicx,caption,rotating]{article}
  3.  
  4. %Paquetes para el idioma, las ti­ldes, etc.
  5. \usepackage[activeacute,spanish]{babel}
  6. \usepackage[utf8]{inputenc}
  7.  
  8. %Abrimos el bloque para escribir el documento
  9. \begin{document}
  10.  
  11.   \textit{España es un país} en el que \underline{cada} vez \textbf{más gente} usa \textit{LaTeX}.
  12.  
  13. \end{document}
  14. %Cerramos el bloque para escribir el documento

Código 2.1. Ejemplo de texto con formato.

No es común el uso de las etiquetas \large{} y \huge{} en párrafos. Ésta clase de etiquetas son más comunes en las portadas. El resultado del código 2.1 podemos verlo a continuación:

Latex tutorial - Imagen del resultado

2.1. Antiguo problema con las tildes y las eñes

No hace mucho, la gente que escribía documentos en LaTeX tenía que usar las tildes y las eñes de una forma muy especial. Esta forma consistía en poner una barra y una tilde antes de la letra a tildar, de esta manera: \’a. Lo mismo pasaba con las eñes: \~n. En la actualidad disponemos de unos paquetes para evitar esto:

  1. %Paquetes para el idioma, las ti­ldes, etc.
  2. \usepackage[activeacute,spanish]{babel}
  3. \usepackage[utf8]{inputenc}

Si en algún momento tenéis problemas con vuestros documentos y las tildes, aseguraros de tener correctamente estas líneas escritas.

3. Posicionamiento del texto

A la hora de posicionar el texto, tenemos las tres posiciones básicas: izquierda, centrado y a la derecha. Éstas se definen mediante bloques, en los cuales en el interior escribimos el texto.

  • Izquierda (por defecto):

    \begin{flushleft} \end{flushleft}

  • Derecha:

    \begin{flushright} \end{flushright}

  • Centrado:

    \begin{center} \end{center}

A continuación vemos un ejemplo de su implementación y su resultado.

  1. \documentclass[10pt,graphicx,caption,rotating]{article}
  2. \usepackage[activeacute,spanish]{babel}
  3. \usepackage[utf8]{inputenc}
  4.  
  5. %Abrimos el bloque para escribir el documento
  6. \begin{document}
  7.  
  8.   \begin{flushleft}
  9.     Izquierda
  10.   \end{flushleft}
  11.  
  12.   \begin{center}
  13.     Centrado
  14.   \end{center}
  15.  
  16.   \begin{flushright}
  17.     Derecha
  18.   \end{flushright}
  19.  
  20. \end{document}
  21. %Cerramos el bloque para escribir el documento

Código 3.1. Posicionamiento del texto.

Latex tutorial - Imagen del resultado

4. Creando una portada y un índice

El diseño de una portada es algo imprescindible en un trabajo, tesis o memoria. Las portadas son algo personal de cada uno, pero durante esta sección aprenderemos a crear una de las portadas predeterminadas que yo suelo usar.

Para crear una portada, crearemos un nuevo bloque dentro del bloque document llamado titlepage. El bloque titlepage encerrará todo lo relacionado con la creación de la portada. Ahora haremos uso de los formatos \large{} y \huge{} para resaltar el título y otra información que necesitemos. Otra de las características de las portadas es el espacio entre párrafos que marcaremos mediante la expresión \\ o la expresión \\[3cm] (el número 3 es un ejemplo, podemos aplicar cualquier tamaño) al final de cada linea. A continuación vemos el ejemplo completo de mi portada:

  1. \documentclass[10pt,graphicx,caption,rotating]{article}
  2. \usepackage[activeacute,spanish]{babel}
  3. \usepackage[utf8]{inputenc}
  4.  
  5. %Abrimos el bloque para escribir el documento
  6. \begin{document}
  7.  
  8.   %Abrimos el bloque para escribir la portada
  9.   \begin{titlepage}
  10.  
  11.     \begin{center}
  12.       {\Large PROCESADORES DE TEXTO AVANZADOS}\\
  13.       {\Large Ingeniería en Informática}\\[2cm]
  14.       {\Large Curso 2008-2009}\\[3cm]
  15.  
  16.       {\Huge Práctica 1:}\\
  17.       {\Huge Uso del \LaTeX}\\[4cm]
  18.  
  19.       {\Large Alumno: Miguel Ángel Domínguez Coloma}\\[3cm]
  20.       {\Large Escuela Técnica Superior de Ingeniería Informática}
  21.     \end{center}
  22.  
  23.   \end{titlepage}
  24.   %Cerramos el bloque para escribir la portada
  25.  
  26. \end{document}
  27. %Cerramos el bloque para escribir el documento

Código 4.1. Ejemplo completo de portada.

El resultado del código 4.1 es mostrado en la siguiente imagen:

Latex tutorial - Imagen del resultado

Para crear un índice, ponemos a continuación de la portada la siguiente instrucción:

  1. \documentclass[10pt,graphicx,caption,rotating]{article}
  2. \usepackage[activeacute,spanish]{babel}
  3. \usepackage[utf8]{inputenc}
  4.  
  5. %Abrimos el bloque para escribir el documento
  6. \begin{document}
  7.  
  8.   %Generamos un indice de los contenidos
  9.   \tableofcontents
  10.   \newpage
  11.  
  12. \end{document}
  13. %Cerramos el bloque para escribir el documento

Código 4.2. Añadiendo un índice.

Ya que aun no hemos generado ningún contenido, el índice aparecerá vacío. Sin embargo, el ejemplo mostrado a continuación nos da una idea de como se genera el índice en un trabajo ya terminado:

Latex tutorial - Imagen del resultado

5. Capítulos: secciones y subsecciones

Los capítulos o secciones, en cualquier trabajo, nos ayudan a envolver trozos de texto, imágenes, código, etc. bajo el mismo nombre, ayudándonos a tener el documento bien organizado. Además, nos servirán para la generación del índice. Por ejemplo, en este tutorial, las secciones serían todos aquellos títulos numerados y en grande. En LaTeX ocurre lo mismo. Además, genera los números automáticamente sin tener que escribirlos nosotros mismos. Esto nos ayuda a no tener que preocuparnos de que número de sección estamos trabajando, y en el caso de insertar uno nuevo, se reconfigurarían los números de nuevo. Podemos crear dos tipos de secciones: secciones y subsecciones. Las secciones se numeran por un número y las subsecciones dentro de una sección se enumeran con dos números: el primero es el número de sección y el segundo el número de subsección. Podemos tener hasta tres tipos de niveles para las secciones: sección ,\section{T\’itulo}, subsección \subsection{T\’itulo} y \subsubsection{T\’itulo}. Esta explicación se verá mejor siguiendo el siguiente ejemplo:

  1. \documentclass[10pt,graphicx,caption,rotating]{article}
  2. \usepackage[activeacute,spanish]{babel}
  3. \usepackage[utf8]{inputenc}
  4.  
  5. %Abrimos el bloque para escribir el documento
  6. \begin{document}
  7.  
  8.   %Comenzamos nuestro documento
  9.   \section{Estructura b’asica de un documento en LaTeX}
  10.     La estructura b’asica de un archivo de c’odigo LaTeX es la siguiente…
  11.  
  12.   \section{Dando formato al texto}
  13.     \subsection{Tildes y e\~nes}
  14.       Ahora que tenemos la estructura b’asica…
  15.  
  16.     \subsection{Formato del texto}
  17.       \subsubsection{Formato}
  18.         Otra de las caracter’isticas esenciales en un documento…
  19.  
  20.       \subsubsection{Ejemplo de c’odigo}
  21.         Pongamos en pr’actica lo comentado anteriormente…
  22.  
  23. \end{document}
  24. %Cerramos el bloque para escribir el documento

Código 5.1. Secciones y subsecciones.

Como podemos ver en el código 5.1 a las secciones no se las requiere señalar el fin de sección. Una vez que aparece una nueva sección del mismo nivel, se indica explicitamente que la anterior ya ha terminado. No es recomendable usar secciones de tercer nivel si nuestro documento no es muy extenso, ya que se generan multitud de títulos y dividimos nuestro trabajo en demasiadas secciones. El resultado obtenido está representado en la siguiente imagen.

Latex tutorial - Imagen del resultado

6. Enumeraciones y listas

Disponemos de dos clases de listas en LaTeX: enumeradas y no enumeradas. Las listas, al contrario de las secciones, siguen el modelo de bloque, es decir, hay que indicar el comienzo y el fin de cada lista:

  • Listas no enumeradas

    \begin{itemize}

    \end{itemize}

  • Listas enumeradas

    \begin{enumerate}

    \end{enumerate}

Los elementos añadidos dentro de las listas comenzarán por el código \item. Los elementos en las listas enumeradas no necesitan que les añadamos el número de la secuencia, LaTeX la genera automáticamente. Veamos un ejemplo de los dos tipos de listas:

  1. \documentclass[10pt,graphicx,caption,rotating]{article}
  2. \usepackage[activeacute,spanish]{babel}
  3. \usepackage[utf8]{inputenc}
  4.  
  5. %Abrimos el bloque para escribir el documento
  6. \begin{document}
  7.  
  8.   % Listas ordenadas
  9.   \textbf{Vida diaria:}
  10.   \begin{enumerate}
  11.     \item Levantarse
  12.     \item Ir a la universidad
  13.     \item Trabajar
  14.     \item Dormir
  15.   \end{enumerate}
  16.  
  17.   % Listas no ordenadas
  18.   \textbf{Trabajos pendientes:}
  19.   \begin{itemize}
  20.     \item Trabajo de redes
  21.     \item Trabajo de bases de datos
  22.     \item Trabajo de sistemas operativos
  23.   \end{itemize}
  24.  
  25. \end{document}
  26. %Cerramos el bloque para escribir el documento

Código 6.1. Listas enumeradas y no enumeradas.

Las listas podemos anidarlas y crear listas dentro de listas. Como podemos ver, los elementos de las listas no necesitan indicar el fin de cada elemento, una vez que encuentra otro elemento \item, se añade uno nuevo automáticamente. El resultado del código 6.1 es el siguiente:

Latex tutorial - Imagen del resultado

7. Código fuente

En LaTeX podemos añadir código fuente, en el caso de que estemos redactando una memoria en la que necesitemos añadir lineas de código. Para ello, añadiremos el código entre los bloques \begin{verbatim} y \end{verbatim}. A continuación, vemos un ejemplo de la insercción de un código entre estos bloques:

  1. \documentclass[10pt,graphicx,caption,rotating]{article}
  2. \usepackage[activeacute,spanish]{babel}
  3. \usepackage[utf8]{inputenc}
  4.  
  5. %Abrimos el bloque para escribir el documento
  6. \begin{document}
  7.  
  8.   %Codigo fuente
  9.   \begin{verbatim}
  10.     public class Server()
  11.     {
  12.       public Server()
  13.       {
  14.         // Inicializar servidor
  15.       }
  16.  
  17.       public void Stop()
  18.       {
  19.         // Parar el servidor
  20.       }
  21.     }
  22.   \end{verbatim}
  23.  
  24. \end{document}
  25. %Cerramos el bloque para escribir el documento

Código 7.1. Listas enumeradas y no enumeradas.

El resultado del código 7.1 podemos verlo a continuación:

Latex tutorial - Imagen del resultado

El uso de bloques para añadir código fuente en nuestro documento de LaTeX implica un cambio de letra a “Courier New” y se imprimen los espacios y tabuladores tal y como añadimos el código.

8. Compilando documentos desde MS-Windows y GNU-Linux Ubuntu

Para crear crear documentos en LaTeX necesitaremos dos cosas: por una parte un compilador y por otra un editor. El editor, como dijimos anteriormente, es opcional, pero nos ayuda con la sintaxis.

8.1. Instalación para MS-Windows

Para MS-Windows, necesitaremos descargarnos e instalar los siguientes programas en orden: MikTeX (buscar un enlace que se llama Download “Basic MikTeX” Installer para descargarlo y la instalación es de esas de “Siguiente“, “Siguiente“, …); y TeXnicCenter (buscar un enlace que se llama TeXnicCenter Setup, Version … y al lado pondrá SourceForge.net que deberéis pulsar para descargarlo y la instalación es igual de fácil que la anterior pero con la palabra “Next”).

Una vez que tenemos los dos programas instaladas, ejecutaremos el programa de “TeXnicCenter“. La primera vez que lo abramos, nos saldrá unas ventanas para configurarlo. Cuando lleguemos a una ventana que nos pide la localización de los archivos TeX, LaTeX, etc, tendremos que buscar, en la carpeta donde instalamos MikTeX, la siguiente ruta:

Imagen 10.1. Apertura del programa TeXnicCenter.

Puede que no sea exactamente la misma, pero muy parecida (por el tema de la versión que se haya descargado). Y ahora solo hay que abrir un nuevo documento (como en cualquier programa) y escribir el archivo en LaTeX. Una vez que lo tengamos y queramos obtener el archivo PDF. Elegiremos “LaTeX => PDF”, después pulsaremos el botón llamado “Build” que está al lado y luego el de “View” más a su derecha, tal y como vemos en esta imagen.

Imagen 10.2. Cómo compilar un documento desde TeXnicCenter.

8.2. Instalación en GNU-Linux Ubuntu

Para Ubuntu, necesitaremos habilitar los repositorios universe y multiuniverse. Para ello, abriremos en modo root el archivo /etc/apt/sources.list de la siguiente forma desde consola:

  1. sudo gedit /etc/apt/sources.list

Ahora, buscaremos las siguientes lineas y quitaremos la almohadilla # del principio, dejándolo de la siguiente forma (la versión de Ubuntu dependerá de la instalada):

  1. deb http://es.archive.ubuntu.com/ubuntu/ [versionUbuntu] universe
  2. deb-src http://es.archive.ubuntu.com/ubuntu/ [versionUbuntu] universe
  3. deb http://es.archive.ubuntu.com/ubuntu/ [versionUbuntu] multiverse
  4. deb-src http://es.archive.ubuntu.com/ubuntu/ [versionUbuntu] multiverse

Ahora, siguiendo en consola, instalaremos el programa Kile, que a mi opinión es de los mejores para Linux:

  1. sudo apt-get update
  2. sudo aptitude install -y kile

Con esto nos instalará los compiladores de LaTeX y el programa Kile que es el editor. Lo siguiente será escribir el documento en LaTeX, compilarlo y verlo:

Imagen 10.3. Cómo compilar un documento desde Kile.

En la captura 10.3 podemos observar dos botones que nos ayudarán en el proceso de compilación del documento LaTeX. El primer botón remarcado compilará el documento. El segundo botón remarcado nos mostrará el documento generado.

9. Algunas plantillas de LaTeX

A veces, ciertas empresas incluyen plantillas en LaTeX que ofrecen a sus trabajadores y que formatean el texto de forma que siguen su mismo estándar. A veces las encontramos en Internet para su libre descarga. Algunas de las que he encontrado y he usado en mis trabajos, derivan de plantillas de universidad. Éstas ofrecen reformateo de títulos, secciones, listas, código fuente, etc. Además, ajustan los márgenes y nos ofrecen otro tipo de portadas. La más completa y llamativa que encontré proviene de Deusto (en la lista). A continuación iré dejando algunas plantillas que me han servido de ayuda:

1. El problema

Firefox es, sin duda, un navegador excelente y rápido. Y lo mejor es sin duda la acoplación de nuevos plugins que añaden nuevas funcionalidades. En las versiones de Ubuntu ha sido el navegador por defecto aunque, como en mi caso, en una máquina algo lenta puede tardar bastante en iniciarse.

Buscando por Internet, encontré varios manuales de como acelerar su velocidad, pero lo que no he encontrado es como acelerar su apertura.

2. Truco casero

Durante este tutorial se realizará un truco casero para que al querer iniciar Firefox, aparezca instantáneamente. El funcionamiento principal de este truco es dejar Firefox corriendo desde que iniciamos el ordenador y cada vez que queramos iniciarlo, lanzar el proceso que ya está corriendo. Read the rest of this entry »

0. Introducción

Hace poquito adquirí un nuevo hosting con la posibilidad de acceso con SSH. Lo primero que se me ocurrió fue probar si podría instalar Subversion para poder administrar mis programas y colaborar con más gente en éstos. Durante este tutorial aprenderemos a instalar Subversion en un hosting compartido (es decir, los que la mayoría de las personas se compra para uso individual) y WebSVN, que es un gestor de Subversion vía web. Para poder seguir este tutorial deberemos tener un hosting Linux y acceso a una cuenta mediante SSH. Durante el tutorial veremos los siguientes puntos:

  1. Compilando e instalando Subversion en el hosting
  2. Creando la carpeta del repositorio e iniciando Subversion
  3. Creando un proyecto de prueba
  4. Instalando WebSVN para acceder a Subversion vía web
  5. Accediendo a nuestro repositorio remotamente
  6. Cuales son las direcciones y usuarios para un servidor 1&1

El resultado de esta ardúa tarea podría ser como el siguiente: http://websvn.eridem.net

Note pictureNOTA: Este tutorial sigue los pasos para instalar los programas en un hosting de la compañía 1&1. Es posible que en tu hosting no tengas los programas, accesos o librerías para compilarlo y ejecutarlo.

Note pictureNOTA: Hay gente que me ha dicho que 1&1 ya no permite la instalación de Subversion en sus servidores, incluso recibiendo emails advirtiendo de la cancelación de las cuentas. No me responsabilizo de los problemas que pueda tener tu cuenta.

1. Compilando e instalando Subversion en el hosting

Lo primero que deberemos hacer es entrar en nuestra cuenta mediante SSH. Los datos de tu usuario y contraseña te los debe proporcionar la empresa. Imaginemos que el usuario es “user” y la contraseña es “pass” y la máquina dónde esta nuestro espacio es “host”. Ejecutaremos en consola:

  1. ssh user@host

Cuando nos pida la contraseña, escribiremos “pass” para poder entrar. Una vez que estamos en nuestra cuenta, nos descargaremos las fuentes de Subversion (comprobar en la web la versión actual) y las descomprimiremos:

  1. wget http://subversion.tigris.org/downloads/subversion-1.5.4.tar.bz2
  2. tar jvxf subversion-*
  3. rm subversion-*.bz2
  4. cd subversion-*

Lo siguiente será compilarlo e instalarlo. Para poder instalarlo, lo instalaremos en nuestra carpeta $HOME:

  1. ./configure –prefix=$HOME
  2. make
  3. make install

Ahora añadiremos la dirección de la instalación de Subversion a la variable de entorno $PATH para que sea accesible desde cualquier lugar y así ejecutar sus programas:

  1. cd ~
  2. vi .bashrc

Añadiremos las siguientes lineas en el editor de texto:

  1. PATH=$PATH:$HOME/bin
  2. export PATH

Guardamos y cerramos el editor.

2. Creando la carpeta del repositorio e iniciando Subversion

Lo que haremos a continuación será crear una carpeta dónde meteremos todos nuestros proyectos e indicaremos a Subversion que ese será nuestra carpeta de repositorios. La carpeta podrá ser cualquiera, pero recomiento que esté dentro de la carpeta de nuestro home. Así pues, en este tutorial crearemos una carpeta llamada “projects”:

  1. cd ~
  2. mkdir projects
  3. cd projects
  4. svnserve -d -r .

3. Creando un proyecto de prueba

Más adelante escribiré un tutorial básico de como usar Subversión. Ahora, lo único que necesitamos, será crear un nuevo proyecto en nuestro repositorio y añadir algún archivo.

Primero crearemos un proyecto cualquiera en nuestra carpeta de usuario. Por ejemplo, crearemos un proyecto que tenga un archivo “hola.txt” con el contenido “hola”:

  1. cd ~
  2. mkdir prueba
  3. cd prueba
  4. echo “hola” > hola.txt

Ahora crearemos un repositorio para nuestro proyecto en Subversion y subiremos el que acabamos de crear como version 1.

  1. cd ~/projects
  2. svnadmin create prueba
  3. svn import $HOME/prueba file://$HOME/projects/prueba -m “Version inicial”

Como podemos ver, hemos creado un proyecto en nuestro repositorio llamado “prueba” y le hemos enviado una nueva copia de nuestro proyecto para que la tome como proyecto principal.

4. Instalando WebSVN para acceder a Subversion vía web

Desde nuestro navegador, nos descargaremos la última versión de WebSVN desde su página oficial:

http://websvn.tigris.org/servlets/ProjectDocumentList

lo descomprimiremos y editaremos el archivo “/include/distconfig.php”, el cual cambiaremos las siguientes líneas:

  1. // $config->setSVNCommandPath(‘Path/to/svn and svnlook/ e.g. c:\program files\subversion\bin’);
  2. // $config->setDiffPath(‘Path/to/diff/command/’);
  3. // $config->setSedPath(‘Path/to/sed/command/’);
  4. // $config->setTarPath(‘Path/to/tar/command/’);
  5. // $config->setGZipPath(‘Path/to/gzip/command/’);
  6. // $config->parentPath(‘Path/to/parent (e.g. c:\svn)’);

Por estas otras:

  1. $config->setSVNCommandPath(‘/direccionDeTuHome/bin/’);
  2. $config->setDiffPath(‘/usr/bin/’);
  3. $config->setSedPath(‘/bin/’);
  4. $config->setTarPath(‘/bin/’);
  5. $config->setGZipPath(‘/bin/’);
  6. $config->parentPath(‘/direccionDeTuHome/projects/’);

Como podemos ver, hemos quitado las líneas de comentarios al principio de las instrucciones y hemos asignado las rutas de los programas que utilizará. Hay que fijarse bien de poner la dirección de tu carpeta de usuario correctamente, ya que en este caso yo no he puesto nada porque no puedo saber esa dirección (lo que está en negrita es lo que debes cambiar).

Una vez cambiada la configuración del archivo lo renombraremos el archivo “distconfig.php” a “config.php” y lo subiremos a nuestro hosting. Ahora ya tendréis un gestor de SVN visual y vía web.

5. Accediendo a nuestro repositorio remotamente

Una vez que tenemos nuestro Subversion instalado y hemos creado un proyecto de prueba, podremos acceder a éste usando SSH.

Para bajarse la última versión de nuestro proyecto “prueba”, entraremos en consola y escribiremos:

  1. svn co svn+ssh://usuario@host/direccionDeTuHome/projects/prueba

De esta forma, nos aparecerá una carpeta con la última copia del proyecto en nuestro ordenador. Los demás comandos que se pueden utilizar en Subversion, como la actualización, se hará con sus respectivos comandos, pero lo importante aquí era saber la URL de nuestro repositorio.

6. Cuales son las direcciones y usuarios para un servidor 1&1

Esto está fuera de lugar en este tutorial genérico para cualquier tipo de hosting. Pero si has entrado en este post porque tienes un hosting 1&1 y quieres montarlo ahí, te daré las direcciones del HOME y el usuario que debes poner.

La dirección para entrar en un repositorio creado en la carpeta “projects” de tu Home mediante subversión será:

  1. svn+ssh://tuUsuario:elNombreDeDominioQueTeDanPorDefecto/kunden/homepages/xx/xxxxxxxxxx/htdocs/projects/tuProyecto

Así pues, en un ejemplo real como el mío, mi dirección es:

  1. svn+ssh://u47339777@eridem.net/kunden/homepages/6/d226538314/htdocs/projects/XMLTraceAdministrator

Indice general de los manuales

  1. Introducción, instalación en Ubuntu y creación de una calculadora.
  2. Modos de compartición de objetos. Creando nuestra primera calculadora distribuida.
    1. Modos de compartición de objetos: Singlecall.
    2. Modos de compartición de objetos: Singleton.
    3. Modos de compartición de objetos: CAO.  «  [Leyendo]
  3. Canales: TCP y HTTP. Configuración en archivo XML.
  4. Uso de interfaces para separar el código entre cliente y servidor.

CAO

La última de las formas de compartir los objetos desde el servidor es CAO: Client Activated Object. De esta forma, cada cliente que acceda al servidor, podrá crear un objeto en el y usarlo de forma independiente. En nuestro ejemplo, cada cliente tendrá su propia calculadora.

cao

Como vemos, cada cliente tiene su propia calculadora, y cada calculadora guarda su estado.

Aunque el nuevo código del servidor es muy parecido a los anteriores, pongo el cuerpo de Main entero:

  1. // Archivo: Servidor.cs
  2. // Descripcion: programa servidor que comparte
  3. // la clase Calculadora remotamente.
  4.  
  5. // Biblioteca estandar y remoting
  6. using System;
  7. using System.Runtime.Remoting;
  8.  
  9. // Bibliotecas para usar un canal HTTP
  10. using System.Runtime.Remoting.Channels;
  11. using System.Runtime.Remoting.Channels.Http;
  12. using Calculo;
  13.  
  14. public class Servidor
  15. {
  16.   // arg[0] representa el puerto del servidor
  17.   public static void Main (string[] args)
  18.   {
  19.     // Creamos un nuevo objeto para el canal HTTP
  20.     HttpChannel chnl = new HttpChannel(int.Parse(args[0]));
  21.  
  22.     // Le decimos a la máquina que nos reserve ese canal
  23.     ChannelServices.RegisterChannel(chnl);
  24.     
  25.     // Opciones para la comparticion de la clase
  26.     RemotingConfiguration.ApplicationName =
  27.        “ServidorDeCalculadoras”;
  28.     RemotingConfiguration.RegisterActivatedServiceType(
  29.       typeof(Calculo.Calculadora));
  30.  
  31.     // Mensajes de espera en la pantalla
  32.     Console.WriteLine(“Atendiendo las peticiones…”);
  33.     Console.WriteLine(“Pulse Enter para salir…”);
  34.     Console.ReadLine();
  35.   }
  36. }

La configuración del servidor la hemos dividido en dos partes, le hemos adjudicado un nombre que será el del servidor, no el de una calculadora; y después hemos compartido la calculadora.

Vamos a modificar el cliente por completo, para que no tengamos que hacer dos clientes diferentes para ver el funcionamiento de esta forma de compartir.

  1. // Archivo: Cliente.cs
  2. // Version: 2.0
  3. // Descripcion: cliente que usara la clase remota Calculadora
  4.  
  5. // Biblioteca estandar y remoting
  6. using System;
  7. using System.Runtime.Remoting;
  8.  
  9. // Bibliotecas para usar un canal HTTP
  10. using System.Runtime.Remoting.Channels;
  11. using System.Runtime.Remoting.Channels.Http;
  12. using Calculo;
  13.  
  14. public class Cliente
  15. {
  16.   // arg[0] representa el host del servidor
  17.   // arg[1] representa el puerto del servidor
  18.   // arg[2] representa el numero que guardamos en LaBase
  19.   public static void Main (string[] args)
  20.   {
  21.     // Creamos un nuevo objeto para el canal HTTP
  22.     HttpChannel chnl = new HttpChannel();
  23.  
  24.     // Le decimos a la máquina que nos reserve ese canal
  25.     ChannelServices.RegisterChannel(chnl);
  26.  
  27.     // Opciones para la utilizacion remota de la clase
  28.     RemotingConfiguration.RegisterActivatedClientType(
  29.       typeof(Calculo.Calculadora),
  30.       “http://” + args[0] + “:” + args[1]);
  31.  
  32.     // Creamos un objeto
  33.     Calculadora calc = new Calculadora();
  34.  
  35.     // Practicamos
  36.     calc.LaBase = int.Parse(args[2]);
  37.     Console.WriteLine(“Cambiado a: “ + cacl.LaBase);
  38.  
  39.     Console.WriteLine(“Pulse Enter para ver el estado…”);
  40.     Console.ReadLine();
  41.  
  42.     Console.WriteLine(“Hemos cambiado la base a “ + calc.LaBase);
  43.   }
  44. }

 

Podemos ver varios cambios en este nuevo cliente:

  • A diferencia de los anteriores, solo necesitamos saber el host y el puerto del servidor, no nos hace falta saber el nombre con el que el servidor se ha autodenominado.
  • Hemos añadido un nuevo argumento al ejecutar el programa, que será el número que queremos adjudicar a LaBase, y así poder hacer varias pruebas para cambiar el estado desde el cliente sin tener que crear dos.
  • Para comprobar que cada cliente tiene su propia calculadora, hemos interrumpido el programa a la mitad (pulsando Enter) para cambiar el estado desde dos clientes diferentes que se ejecutan a la misma vez y comprobar después que cada uno tiene una calculadora con su propio estado.

Ahora solo nos queda compilar los archivos:

mcs -target:library Calculo.cs
mcs -r:Calculo.dll -r:System.Runtime.Remoting.dll Servidor.cs
mcs -r:Calculo.dll -r:System.Runtime.Remoting.dll Cliente.cs

Ejecutaremos los archivos en diferentes consolas:

Ejecutar el servidor:

./Servidor.exe 9999

El cliente 1:

./Cliente.exe localhost 9999 5

Y su resultado:

Cambiado a: 5
Pulse Enter para ver el estado…

Y el cliente 2:

./Cliente2.exe localhost 9999 8

Y su resultado:

Cambiado a: 8
Pulse Enter para ver el estado…

Una vez que tenemos los dos clientes cargados, pulsamos Enter en cada uno de ellos y vemos que conservan su estado:

El Cliente 1:

Hemos cambiado la base a 5

El Cliente 2:

Hemos cambiado la base a 8

En el servidor solo veremos como cada cliente crea un nuevo objeto.

Atenciando las peticiones…
Pulse Enter para salir…
Contructor.
Constructor.

Ya que cada cliente puede crearse su propia calculadora, podríamos replantearnos dejar que cada objeto “muera” pasado un tiempo (el tiempo de vida que vimos en el capítulo anterior) o controlar todas las instancias que se hacen desde los servidores con un atributo estático que vaya aumentando por cada instancia. Deberíamos pensar esto ya que puede que alguien malintencionado haga miles de clientes que llamen a nuestro servidor, creando miles de instancias y bloqueando el servidor.

Aunque ya está escrita la parte más importante del manual, en los siguientes capítulos veremos trucos y formas de usar la teoría que hemos dado hasta ahora.

El código fuente de uno de los comentarios expuestos abajo, se encuentra aquí.

Indice general de los manuales

  1. Introducción, instalación en Ubuntu y creación de una calculadora.
  2. Modos de compartición de objetos. Creando nuestra primera calculadora distribuida.
    1. Modos de compartición de objetos: Singlecall.
    2. Modos de compartición de objetos: Singleton.
    3. Modos de compartición de objetos: CAO.  «  [Leyendo]
  3. Canales: TCP y HTTP. Configuración en archivo XML.
  4. Uso de interfaces para separar el código entre cliente y servidor.

1. Introducción

En un tutorial anterior explicamos la manera de crear un servidor Apache con PHP y MySQL. Ahora nos toca instalar una herramienta para el diseño de las bases de datos. Si nunca has usado una y manejas bases de datos, te recomiendo leer este tutorial. La aplicación que vamos a instalar se llama DBDesigner, y la instalaremos bajo [X]Ubuntu. Es una herramienta de fácil uso y de una interfaz muy intuitiva. Aquí os dejo un ejemplo de una captura:

DBDesigner_Screenshot

El ejemplo es de un ejercicio que tenía que hacer en la universidad. ¿A qué queda bonito?

Con este programa podemos crear tablas y relaciones entre ellas. El propio programa crea nuevas tablas en caso de necesitarlas, como es en el caso de las relaciones N:M. Podemos decir cuales campos son PRIMARY KEY, FOREIGN KEY, decir cuales son los tipos de datos de cada campo, etc… . Además, podremos conectar el programas a nuestra base de datos MySQL y sincronizar el programa y la base de datos. También podremos hacer ingeniería inversa, es decir, el programa recoge las tablas de nuestra base de datos y nos diseña el modelo automáticamente. El programa también es capaz de conectarse a bases de datos de Oracle, SQLite y ODBC.

2. Instalación

Espero que te haya animado a seguir leyendo, pues ahora empezamos con la instalación en [X]Ubuntu. Hay que decir que es una instalación algo larga, así que vamos a abrir una consola y crear una carpeta donde descarguemos todos los archivos y hagamos todas las operaciones:

cd ~
mkdir tmp-dbd
cd tmp-dbd

Vamos a empezar descargando todo lo necesario para no tener que volver a abrir el navegador. Tendremos que bajarnos cuatro cosas: el programa DBDesigner, librerías de xlibs, librerías de Kylix y el driver para usar MySQL. Todos los archivos los guardamos en la carpeta que habíamos creado (~/tmp-dbd/):

Una vez que tenemos los cuatro archivos en la carpeta ~/tmp-dbd/ empezaremos con la instalación.

2.1. Instalación de xkeyboard-config

sudo aptitude reinstall xkb-data
sudo dpkg -i xkeyboard*.deb

2.2. Instalación de las xlibs

sudo dpkg -i xlibs_*.deb

2.3. Instalación de las librerías de Kylix

sudo dpkg -i kylixlibs3-borqt_*.deb
sudo ln -s /usr/lib/kylix3/libborqt-6.9-qt2.3.so
sudo ldconfig
sudo ln -s /usr/lib/kylix3/libborqt-6.9.0-qt2.3.so /lib/libborqt-6.9-qt2.3.so

2.4. Instalación del programa DBDesigner

sudo aptitude install alien
sudo alien DBDesigner*
sudo rm DBDesigner*.rpm
sudo dpkg -i dbdesigner*

2.5. Instalación del driver para MySQL

sudo tar -zxvf dbxmda.tar.gz
sudo mv DbxMda/libsqlmda.so.3.20 /usr/lib
sudo ldconfig

Con esto hemos instalado los cuatro archivos que nos habíamos bajado. Como apunte opcional, diré que la instrucción dpkg -i sirve para instalar un archivo .deb; que ln -s sirve para crear un enlace hacia un archivo, como si fuera un acceso directo; aptitude sirve para instalar programas que tenemos en los repositorios; alien sirve para convertir un archivo de instalación de Red Hat (rpm) a un archivo de instalación de Debian (deb); y que ldconfig sirve para actualizar las librerías de la dirección /usr/lib/ y /lib/. A veces es mejor comprenderlo, que hacerlo y no saber por qué.

3. Configuración

Bueno, ya tenemos todo listo. Tenemos el programa y todo configurado. Ahora solo nos falta abrir el programa y empezar a usarlo. El programa se encuentra en la dirección /opt/DBDesigner4/DBDesigner4 (en el caso de habernos bajado esa versión 4). Así que podemos crear un enlace en el escritorio con esa dirección o ejecutarlo desde la consola directamente.

Ahora necesitamos saber como conectarnos a la base de datos MySQL desde nuestro programa. Para ello, una vez abierto, creamos un nuevo documento (File -> New) y después pulsamos sobre el menú (Database -> Connect to Database):

DBDesigner_ConnecttoDatabase

Una vez en ese menú, creamos una nueva conexión pulsando New Database Connection.

DBDesigner_NewDatabaseConnection

Ahora nos saldrá una ventana para configurar la nueva conexión MySQL. Os pongo unas capturas para que lo dejéis exactamente igual (menos el hostname, el username, el password y la database que serán vuestros datos de la conexión). Hay que prestar atención a la pestaña Advanced, porque son los datos que sirven para conectar con el driver de MySQL.

DBDesigner_DatabaseConnectionGeneral

En la siguiente captura lo dejáis casi igual, excepto en LibraryName y VendorLib, que deberéis poner: libsqlmda.so.3.20 (no actualizo la imagen porque cada dos por tres actualizan el driver).

DBDesigner_DatabaseConnectionAdvanced

NOTA IMPORTANTE: Fijaos bien en que esta configuración está tal y como se ve aquí, incluyendo las mayúsculas y las minúsculas. A veces al instalar el programa por primera vez, nos pone “MYSQL” todo en mayúsculas, en lugar de “MySQL” como debe ser. Esto provocará que no funcione la conexión con la base de datos.

Ahora sí que sí. Ya tenemos todo preparado. Cada vez que queramos conectar con nuestra base de datos MySQL elegiremos de la lista de All Database Conections nuestra conexión, pondremos el password y pulsaremos el botón Connect. Y listo.

4. Ingeniería inversa

Ahora que he terminado de explicar como instalar y configurar DBDesigner con MySQL en [X]Ubuntu… no me podía ir sin explicar como hacer ingeniería inversa y como subir nuestro diseño a la base de datos MySQL.

4.1. Como hacer ingeniería inversa (de las tablas al diseño)

Si ya teníamos creadas nuestras tablas en la base de datos y ahora queremos tener el diseño, lo único que tenemos que hacer es crear un nuevo documento (File -> New), y después pulsar sobre el menú (Database -> Reverse Engineering).

Ahora nos pedirá que elijamos una de las conexiones MySQL que creamos anteriormente, y la conectamos pulsando Connect.

En la siguiente ventana, nos saldrá una lista de tablas. Elegiremos de las que querramos tener el diseño y pulsaremos el botón Execute. Y… sorpresa! Ya tienes un diseño de tu base de datos!

4.2. Como subir nuestro diseño a la base de datos

Una vez que tengamos un diseño con sus tablas, sus interrelaciones y demás y querramos pasar del diseño a las tablas, pulsaremos el menú (Database -> Database Synchronisation).
Ahora nos pedirá que elijamos una de las conexiones MySQL que creamos anteriormente, y la conectamos pulsando Connect (que fácil es copiar y pegar).

Y en la nueva ventana que nos sale, pulsaremos el botón Execute. Con esto, hemos subido las tablas de nuestro diseño a la base de datos.

Como siempre, espero que os haya servido de ayuda. Os dejo, que tendréis muchas cosas que programar :P .

Esta es la primera edición de este tutorial. Podéis encontrar una versión más nueva y amplia en el siguiente enlace:

http://www.eridem.net/como-hacer-un-trabajo-profesional-con-latex


LaTeX es un procesador de textos de uso obligatorio para todo aquel que quiera realizar un trabajo, tesis o cualquier texto con calidad profesional. Su uso está orientado especialmente a la composición de artículos científicos, lo que no implica que no se pueda usar en otros ámbitos.

En este mini-tutorial se hará una introducción a LaTeX: hacer una pequeña portada, un índice, crear capítulos, hacer algún tipo de enumeración y poco más. Lo justo para poder hacer un buen trabajo e introducir el lenguaje para que después cualquier persona pueda buscar más información y aprender otros comandos por su cuenta (mirar los libros recomendados al final del tutorial).

Para poder trabajar con LaTeX necesitamos un compilador para convertir nuestros archivos en LaTeX a formato PDF ó DVI. No necesitamos un editor especial para hacer los trabajos, con cualquier editor sencillo podemos empezar a crearlos. Aun así, al final de este tutorial (capítulo 6), explico como instalar el compilador de LaTeX y un editor tanto en Windows como en Linux (puedes ir abajo del todo para instalar los programas y así poder ir haciendo las pruebas).

0. Unas pequeñas notas importantes.

  • Escribir tildes en LaTeX: Para escribir letras con tildes en Latex no podremos escribir las típicas á, é, í, ó, ú; sino una comilla antes de la letra: \’a, \’e, \’i, \’o, \’u. Tampoco podemos escribir la letra ñ, la cual tendremos que sustituir por \~n (el símbolo ~ lo conseguimos con “Alt Gr” + “4″).
  • Texto en itálica: Para escribir un texto en itálica deberemos usar la expresión \textit{aqu’i el texto}.
  • Texto en negrita: Para escribir un texto en negrita usaremos la expresión \textbf{aqu’i otro texto}.
  • Textos más grandes: Para escribir un texto más grande de lo normal (para un título, por ejemplo} usaremos {\Large un t’itulo de ejemplo}, aunque ‘este seguramente solo lo usemos en la portada, pues LaTeX nos escribe los títulos y capítulos automáticamente en el tamaño que él crea conveniente. Y también existe {\Huge t’itulo gigante} que es igual que el anterior pero con la letra más grande.
  • Nuevos párrafos: para escribir nuevos párrafos simplemente tendremos que dejar una linea vacía entre párrafo y párrafo.

Si no te ha quedado claro como va la cosa de momento, no te preocupes, usaremos todas estas expresiones cuando creemos la portada. Read the rest of this entry »

Introducción

l uso de web dinámicas, en la actualidad, es casi una obligación. Antiguamente el usuario veía una web, descargaba algunas cosas y poco más. Más tarde la web evolución un poco más y la gente creaba webs dinámicas en las que en cada momento podías encontrarte con una página diferente: foros, blogs, galerías de imágenes… es decir, podí­amos interactuar con la web como si de una aplicación se tratara. El problema de las webs dinámica es que el servidor realiza todo el trabajo. Se envían peticiciones y éste las procesa y devuelve los resultados. En la actualizad, se crean páginas web en las que ciertos aspectos son tratados por parte del cliente, evitando así la sobrecarga y haciendo la navegación más ágil y rápida.

Durante este tutorial daremos el primer paso a montar un servidor web con PHP e instalar un gestor de bases de datos fácilmente accesible, como es MySQL. Una vez que instalemos estos programas, tendrás las herramientas necesarias para crear fantásticos páginas webs dinámicas.

Este tutorial tomará Ubuntu como base para la instalación. Aun así, la instalación en otras versiones basadas en Debian se realizarán de forma parecida y puede que nos sirva el tutorial como base. En versiones no derivadas de Ubuntu: Red Hat, openSUSE, Fedora, Madriva, etc, nos podrá servir para conocer los paquetes indispensables que necesitaremos instalar. Dicho esto… manos a la obra!

Instalación

Primero nos aseguraremos que en nuestra lista de repositorios de Ubuntu tengamos algunos repositorios aquí listados. Para ello, abriremos el archivo /etc/apt/sources.list:

sudo gedit /etc/apt/sources.list

Y nos aseguraremos que las siguientes lineas no tenga una almohadilla (#) al principio:

deb http://es.archive.ubuntu.com/ubuntu/ [tuDistribucion] universe
deb-src http://es.archive.ubuntu.com/ubuntu/ [tuDistribucion] universe
deb http://es.archive.ubuntu.com/ubuntu/ [tuDistribucion] multiverse
deb-src http://es.archive.ubuntu.com/ubuntu/ [tuDistribucion] multiverse

En el caso de que tenga la almohadilla, la quitaremos y dejaremos el resto tal y como está.

El siguiente paso será actualizar la lista de repositorios y descargarnos todos los paquetes necesarios para instalar Apache, PHP, MySQL y PHPMyAdmin (gestor de la base de datos vía web). Así pues, introduciremos el siguiente comando en la terminal:

sudo aptitude install apache2 php5 libapache2-mod-auth-mysql php5-mysql mysql-server phpmyadmin php5-gd

Durante la instalación del programa se nos pedirán dos cosas:

1. Añadir una contraseña para el acceso a la base de datos.

Captura instalación PHP y MySQL

2. Elegir la versión de Apache. La dejaremos como vemos en la imagen.

Captura instalación PHP y MySQL

Una vez que hayamos terminado de instalar los programas, el servidor Apache se reiniciará automáticamente. Aun así lo reiniciaremos manualmente para no tener ningún problema:

sudo /etc/init.d/apache2 restart

Para comprobar que la instalación de Apache se ha realizado correctamente, abriremos un navegador y escribiremos la siguiente URL:

En el caso de aparecer un error 404 de página no encontrada, intentaremos volver a seguir los pasos anteriores por si algo nos ha fallado.

Pequeño ejemplo en PHP

Ahora realizaremos un pequeño ejemplo para comprobar que PHP funciona. Abriremos un editor de texto y escribiremos el siguiente programa:

<html>
  <head>
    <title>Prueba Apache y PHP</title>
  </head>
  <body>
    <?php echo “El PHP funciona!”; ?>
  </body>
</html>

Sé que es un archivo bastante cutre… que me podí­a haber complicado la vida… pero un ejemplo es un ejemplo. Guardamos el archivo como index.php y lo movemos a la dirección /var/www/. De paso, hemos comprobado dónde se guardan las webs: en el directorio /var/www/ o subdirectorios de éste. Ahora abriremos un navegador y escribiremos la siguente URL:

http://localhost/index.php

En el caso de que aparezca el texto “El PHP Funciona!“, significará eso mismo ;)


© 2007 El blog de ERiDeM. Free wordpress themes.