Tag Archive: tutorial


Algunos tips para SAGE

Como es con la práctica con la que se aprende, a lo largo del tiempo usando SAGE+Maxima (para evitar el uso de Maple) he ido aprendiendo algunos truquillos que (os?) pueden resultar interesantes (bien, me lo parecen a mi, y eso es suficiente :) ).

  • Visualización de resultados: SAGE puede funcionar de dos formas distintas, dentro de la línea de comandos y como aplicación web (invocando el comando notebook() dentro de la línea de comandos se inicia un servidor al que se puede acceder desde cualquier navegador convencional). No es difícil imaginar que dentro del modo línea de comandos sería prácticamente imposible visualizar ciertos resultados de forma cómoda, precisamente por eso implementaron el modo web… pero aun así nos podemos encontrar con sorpresas desagradables. Por defecto los resultados se mostrarán solo con carácteres ascii y consecuentemente pueden ser de difícil legibilidad. Hay un comando llamado latex() que transforma la entrada en una salida escrita en formato LaTeX, el problema es que para visualizar eso necesitamos pasarlo a un compilador de LaTeX y transformarlo, el proceso en sí es demasiado pesado y lento.

    La solución viene de la mano de jsMath, que son unas librerías que sirven para visualizar textos matemáticos en páginas web. En Debian y Ubuntu se pueden instalar desde aptitude o apt, yo recomiendo instalar dos paquetes: jsmath y ttf-jsmath. Una vez instaladas sólo habrá que marcar el checkbox Typeset que podemos encontrar en la parte superior de la página web que genera SAGE para trabajar, con ésto obtendremos salidas bien formateadas y con un aspecto agradable :)   .

  • Trabajar con polinomios sobre diferentes cuerpos: Dependiendo del cuerpo sobre el que trabajemos los polinomios se pueden descomponer de diferentes maneras y cuando se evaluan sobre un elemento del cuerpo pueden dar resultados diferentes. Por lo general la gente trabaja sobre el cuerpo de los números reales, otros trabajan sobre los complejos, y otros sobre los racionales, esos casos son los más usuales para los no matemáticos, pero muchos otros nos encontramos con la necesidad de trabajar con otros cuerpos que nos pueden resultar mucho menos intuitivos a la hora de realizar los cálculos. ¿Y como indicamos a SAGE que estamos trabajando con un cuerpo u otro? Ejecutando el siguiente comando, a partir de ese momento estaremos trabajando con el cuerpo indicado:
    R.<x>=cuerpo[]
    donde cuerpo es el cuerpo que queramos (y sea construible dentro de SAGE), para los racionales usamos QQ, para los reales RR, y para los complejos CC, y x es la variable que usaremos para el polinomio. Nosotros podemos construir otros cuerpos, de momento yo sólo he aprendido a construir cuerpos finitos (hay teoremas de isomorfismo que me aseguran que los que construyo son los únicos finitos). Para construir cuerpos finitos utilizaremos el comando:
    NombreQueLeQueramosDarAlCuerpo=FG(número)
    donde número és la cantidad de elementos que tendrá el cuerpo. Podemos probar las diferencias usando, por ejemplo, el comando factor sobre una expresión polinómica, de esta forma:
    factor(x^8-1)
  • Información extra que os pueda interesar: Dado que SAGE es muy extenso y yo he explicado muy pocas cosas, para los que no tengan mucha experiencia o por el contrario, quieran profundizar aun más, os enlazo algunos documentos:

Espero que a alguien le pueda servir ésto :) . Saludos!

Ayer añadí y activé un plugin que supuestamente iba a proteger mi blog de spam en forma de comentarios (además de pingbacks y trackbacks) sin la necesidad de usar métodos Captcha (era una capa de protección previa a la que ofrece Akismet). El plugin se llama Anti-Captcha, y la teoría sobre su funcionamiento era bonita (aunque no llegué a entenderla del todo pues tenía sueño y sólo quería probar qué tal iba, ahora tengo serias dudas sobre si había algo que entender).

Al parecer la instalación de dicho plugin había causado que incluso los comentarios legítimos no aparecieran en la lista de comentarios, y para postres me impedía a mi entrar al menú de administración. Mi decisión, obviamente, fue eliminar el plugin, ¿pero cómo hacerlo si no puedo acceder al panel de administración? Borrar los ficheros parece una solución buena, eso si no se piensa que su activación ha modificado la base de datos del blog y nos puede ocasionar problemas que haya referencias a ficheros inexistentes.

Así pues, la solución pasa por otro camino, casi igual de simple también. Lo primero que debemos hacer es acceder a la base de datos y visitar la tabla options (que tendrá un prefijo wp_ o el que hayáis decidido vosotros durante la instalación o tras una posterior modificación). En esa tabla debemos buscar una entrada tal que en el campo option_name tenga el valor active_plugins , vamos a editar esa entrada :) .

Si nos fijamos bien, veremos que en el campo option_value hay una cadena muy larga que empieza por “a:numero:{i:0;…“, ese primer número que nos encontramos indica la cantidad de plugins activados que tenemos en nuestro blog, dado que vamos a desactivar uno de ellos, cambiamos ese número por el mismo decrementado en una unidad, así, si tenemos 20, pondremos 19. Fijémonos ahora que para cada plugin encontramos una subcadena del estilo ‘i:numero;s:numero:”nombre_fichero_plugin.php”;‘, el número que acompaña a la i es una especie de índice que indica la “posición” del plugin dentro del blog, ahora sabiendo ésto ya podemos decidir qué hacer para eliminar el plugin de la base de datos sin que aparezcan inconsistencias en ésta. Primero de todo eliminamos la subcadena que hace referencia a ése plugin, depués debemos decrementar en una unidad todos los números que van precedidos de una i después de la aparición de la subcadena que hemos eliminado. Con ésto habremos acabado.

Lo que nos queda, si queremos eliminar cualquier rastro del plugin que nos ha amargado la existencia, es eliminar físicamente los ficheros del bicho en cuestión que tenemos en el servidor, lo podemos hacer desde el servicio ftp, ssh o desde el mismo panel de administración del blog, para gustos los colores.

En realidad el título debería ser “Resolver sistemas de EDOs de primer orden con coeficientes constantes con Maxima“, pero obviamente era demasiado largo. Lo que escribiré aquí se puede encontrar en la ayuda de Maxima (no sé donde está exactamente si se quiere acceder a pelo a los archivos, pero es accesible fácilmente desde la interfaz wxMaxima), pero creo que puede ser interesante explicar como se ejecutan cálculos como éstos para aquellos que no conozcan demasiado este programa.

Como ya he indicado en el título, hago referencia a EDOs con coeficientes constantes porque Maxima (almenos con al versión instalada en Ubuntu Jaunty 9.04) tiene algunas dificultades para trabajar con ecuaciones más complejas, en todo caso puede ser muy útil tener una herramienta como ésta a mano si no se dispone de otras como Maple (mi caso, por ejemplo).

Entonces, para resolver las siguientes ecuaciones relacionadas con el típico problema de los tanques interconectados entre los que fluyen líquidos (aquí luciré el nuevo plugin para mostrar latex en WordPress :D ):

 \begin{cases} \dot{QA_{T}}(t) = 3 + \frac{4}{100}QB_{T}(t) - \frac{5+8}{100}QA_{T}(t) \\ \\ \dot{QB_{T}}(t) = 3 + \frac{5}{100}QA_{T}(t) - \frac{4+9}{100}QB_{T}(t) \\ \\  QA_{T}(0) = 0 \\ \\ QB_{T}(0) = 0 \end{cases}

Lo haremos con los siguientes comandos:

 eq1: 'diff(x(t), t) = (-13/100)*x(t) + (4/100)*y(t) + 3;
 eq2: 'diff(y(t), t) = (5/100)*x(t) + (-13/100)*y(t) + 3;
 atvalue(x(t), t=0, 0);
 atvalue(y(t), t=0, 0);
 desolve([eq1, eq2], [x(t), y(t)]);

En las primeras dos líneas definimos las dos ecuaciones diferenciales (les damos nombre poniendo el nombre seguido de dos puntos y seguidamente la ecuación). En las siguientes dos líneas se escriben las restricciones que tienen que satisfacer las soluciones (que, no lo olvidemos, son funciones). Y por último se le passa un array con las ecuaciones a la función dsolve, así como un array con el nombre de las funciones que queremos encontrar. Ésto es todo amigos, espero que os sirva ;) .

Ruby!

Hoy me he puesto a rebuscar sobre el lenguaje Ruby (sí, ese del Ruby on Rails) (por cierto, mi gato se llama Ruby también, jeje) y he encontrado un pequeño tutorial. La verdad es que es la leche! No paran de halagarte y la verdad es que sube mucho la moral, aunque en mi caso ya sepa que los cumplidos que me hace no tengan mucho que ver con la realidad (desgraciadamente). Jeje, así que si queréis subiros la moral (y de paso aprender algo), :p , podéis pasaros por este tutorial interactivo :D .

http://tryruby.hobix.com/

ACTUALIZACIÓN: Éste tutorial és… inútil, xD (salvo si se quieren aprender algunas cosillas interesantes), la solución a los problemas que menciono és más sencilla que la expuesta en este tutorial, simplemente se tiene que instalar el paquete kmilo (o alguno que contenga el programa, dependiendo de qué distribución de Linux uséis).

Hará un tiempo mi portátil funcionaba bajo Debian Testing con KDE, en su momento lo configuré tan bien como pude y todo funcionaba de maravilla… hasta que el hardware se empezó a estropear (lo que le llevó a la muerte hará pocas semanas). Después de morir mi portátil fue transportado al cielo de los portátiles, junto con su Creador (HP) , allí se le dio una segunda oportunidad por haber sido tan bueno… y a los tres días resucitó.

El caso es que volvió a mis manos infectado con Windows (se lo contagiaron los otros ordenadores que no merecieron volver a la vida y todavía hoy permanecen en el purgatorio). A la semana conseguí curarlo con Debian Testing (KDE) pero parecía que algo no iba bién, seguía un poco acatarrado.

Por lo visto (no sé bien bien porqué) con la versión actual Testing de Debian han dejado de funcionar bien muchas cosas que antes iban como la seda: el sistema de sonido, y como no, el teclado (de ahí el título del artículo). Antes, configurar el teclado sólo consistía en tocar cuatro tonterías en los paneles de configuración de KDE (me parece que ya posteé hace tiempo sobre como hacerlo de esa manera). Ahora no es tan sencillo, y tenemos que currar un poco más (al menos en mi modelo HP Pavillion dv2104 eu).
Iremos por pasos (nota, todo lo que ponga con comillas, vosotros ponedlo SIN comillas):

  1. Aplicamos el primer mini-tutorial (en mi caso todo funciona, pero Kmix no reconoce las teclas Mute, Subir Volumen y Bajar Volum, de ahí que esté haciendo este segundo mini-tutorial).
  2. (Suponiendo que estamos en KDE) Vamos a Preferencias->Regional i accesibilidad->Introducir acciones.
  3. Ahora crearemos una acción para Mute: Apretamos el botón ‘Nueva acción’.
  4. En el campo ‘Nombre de la acción’ ponemos lo que queramos (aunque estaría bien un nombre identificativo, por ejemplo ‘Mute’).
  5. En el campo ‘Tipo de la acción’ escogemos la opción ‘Acceso rápido de teclado -> Llamada a DCOP (simple)’.
  6. Vamos a la pestaña ‘Acceso rápido de teclado’. Allí seleccionamos el botón que hay en medio y apretamos el botón especial Mute. (Esto sirve para indicar al programa con qué tecla asociaremos la acción).
  7. Vamos a la pestaña ‘Preferencias de llamada a DCOP’. Rellenenamos el campo ‘Aplicación remota’ con el valor ‘kmix’. Rellanamos el campo ‘Objeto remoto’ con el valor ‘Mixer0′ (Hasta este paso todo se hace igual para Mute, Subir Volumen y Bajar Volumen, excepto con los nombres y las teclas asociadas, claro).
  8. Para Mute el campo ‘Función llamada’ tomará el valor ‘toggleMasterMute’. Para Subir Volumen el mismo campo tomará el valor ‘increaseVolume’ y para Bajar Volumen ‘decreaseVolume’.
  9. El campo ‘Argumentos’ no tomará ningún valor para Mute. Para Subir y Bajar Volumen tendremos que asegurarnos de cual es el valor apropiado. Ejecutamos en consola la siguiente instrucción para saberlo (la salida que nos dé será el número que queremos):
    dcop kmix Mixer0 masterDeviceIndex
  10. Apretamos el botón ‘Aplicar’ y ya estamos :) .
  11. Para casos superespeciales (no me ha pasado): cabe destacar que yo he utilizado Mixer0 a la ligera como ‘Objeto remoto’, pero ¿No podría haber Mixer1? Creo que sí, pero no debe ser muy usual. En todo caso nos podemos asegurar ejecutando el comando (Nos dará una lista de los valores aceptables para ese campo):
    dcop kmix | grep Mixer

Espero que haya sido útil éste mini-tutorial. De hecho, creo que introduce también la idea de utilizar dcop para nuestros propios pequeños programas. Sin duda es una muy buena herramienta para intercomunicar programas.

Ala, hasta otra! :)

Powered by WordPress | Theme: Motion by 85ideas.