Lo que he aprendido: leer matrices MMF en Julia

Siguiendo con mi aprendizaje de Julia como sustituto a Matlab, he migrado una función que tenía para leer las matrices de masa y rigidez que exporto de Ansys para luego hacer movidas locas. Otro día os cuento el por qué de la transición (ejem, licencia, ejem) y cómo podéis uniros a mí en el lado oscuro.

Ale, al tema. Primero os voy a contar cómo exportar de Ansys en un par de párrafos, os doy un poco de contexto sobre escribir matrices en archivos de texto y luego vamos al grano.

Exportar matrices de Ansys

Para obtener las matrices de masa y rigidez de Ansys en primer lugar
exportamos el archivo input del modelo con: Tools > Write input file. Luego, a ese input le añadimos antes de la línea /wb,file,end este trocico:

! Gets Stiffness Matrix
! D for double precision real number, C for complex
*SMAT, MatK, D, import, full, file.full, stiff
*export, MatK, mmf, matkMMF.txt ! Exports Stiffness as MMF format

! Gets Mass Matrix
*SMAT, MatM, D, import, full, file.full, mass
*export, MatM, mmf, matmMMF.txt ! Exports Stiffness as MMF format

Seguir leyendo →

Anuncios

Lo que he aprendido: integración numérica con Gauss

Esto no es técnicamente algo que haya aprendido ahora, llevo años integrando numéricamente como manda Gauss, pero creo que siempre lo había hecho o bien a mano o bien buscando los puntos de integración y los pesos en las tablas. La novedad aquí es que uso los polinomios de Legendre para calcular cuáles son los puntos de integración y los pesos correspondientes para cualquier número de puntos.

Recordemos que en el método de Gauss:

  • Los puntos de integración corresponden a las raíces del polinomio de Legendre de orden n
  • Los pesos se obtienen a partir del valor de la derivada en los puntos de integración
  • El método se define para el intervalo [-1,1], para cualquier otro intervalo tenemos que hacer un cambio de variable y ajustar el valor final de la integral

Con mis reducidas habilidades julianas, me queda una función con esta pinta (está in inglis porque la migré de Matlab de otra función que es parte del código de elementos finitos que estoy fabricando en el curro):

# Pkg.add("Polynomials")
using Polynomials

"""
legendre(x)

Create Legendre polynomial of degree `x`
"""
legendre(x) = 1//(2^x*factorial(x))*polyder(Poly([-1, 0, 1])^x,x)

"""
gaussGeneral(fun, points, interval)

Compute numerical integral of function `fun` using number
of `points` in `interval`
"""
function gaussGeneral(fun, points, interval)

a = interval[1]
b = interval[2]

# Compute roots of Legendre polynomial of order 'points'
p = roots(legendre(points))
d = polyder(legendre(points))

# Weights
w = 2*ones(length(p),1)./((ones(length(p),1)-p.^2).*d(p).^2)

# Variable change
p = (a+b)/2*ones(length(p),1) + (b-a)/2*p

# Sum of weighted values
return (b-a)/2*w'*fun(p)

end

Lo chachi de definir así la integral numérica es que me permite calcular la integral de la función con diferente número de puntos y comparar con el valor analítico. Yo soy ingeniera y no me creo las típicas frases la cuadratura de Gauss es un método para integrar de manera exacta polinimios hasta de orden 2n-1 donde n es el número de puntos utilizados si no lo pruebo.

Y eso era. Dejo una pregunta para los sabios: ¿me podéis recomendar una referencia en la que se explique de manera entendible por qué las raíces del polinomio de Legendre son los puntos óptimos de integración? Creo que nunca lo llegué a comprender.


Suena ahora:

Lo que he aprendido: Unpaywall

Hoy os traigo una herramienta que me ayuda mil en mi currelo de investigadora. Se llama Unpaywall y realiza el mágico trabajo de encontrarte la versión abierta de un artículo científico que estés buscando. Es además software libre ya que lleva licencia MIT como puede verse en su repo de GitHub.

El cacharro está basado en DOAI (Digital Open Access Identifier), un DOI alternativo que te lleva a la versión abierta de un artículo cuando la hay, simplemente le añade simplicidad.

Su funcionamiento es muy sencillo, añades la extensión a tu navegador y cuando estés en la página de un paper te aparece un candadito en el borde derecho de la pantalla. Si el artículo no tiene versión abierta, el fondo del candadito es gris:

gris

Cuando tiene versión abierta es verde:

verde

Cómodo, fácil y eficaz. Lo mejor es que es totalmente legal ya que busca en repositorios de universidades y de datos abiertos donde se almacenan las versiones que las revistas científicas nos permiten compartir a los investigadores.

Otro día con más tiempo y ganas os cuento como van las publicaciones científicas a los que no estéis en el mundillo, que tiene tela.

Lo que he aprendido: mutt

Anda un amigo a tope con el self-host y ahora tiene un correo electrónico propio en su servidor casero. Como sabe que soy una friki, me cuenta sus avances y me anima a jugar con él. Así, he descubierto Mutt, un cliente de correo que funciona en la terminal.

Lo mejor de Mutt es que su lema es:

All mail clients suck. This one just sucks less.

pero averiguar cómo demonios se configura es un auténtico infierno para novatas de la terminal como servidora. Hablo totalmente en serio, llegó un momento que me encontré a mí misma leyendo la definición de IMAP URL. Un paso más cerca de la locura.

En fin, al final después de leer como doscientas guías y medio manual lo conseguí y os lo voy a contar.

Configurar Mutt

Como suele ser habitual en los programas que funcionan en la terminal, configuramos Mutt en un archivo de configuración, en este caso ~/.muttrc o ~/.mutt/muttrc. Dentro escribiremos nuestros datos, los del servidor de correo y movidas varias que copiaremos de Internet sin tener idea de lo que significan.

Un tema importante es que hay que configurar dos cosas si queremos tener un email funcional: cómo recibimos y cómo enviamos. Para ello es útil saberse unas siglas:

  • IMAP (Internet Message Access Protocol): el protocolo para obtener los mensajes, no descarga los emails sino que los lee del servidor. También podríamos usar POP3 que sí descarga.

  • SMTP (Simple Mail Transfer Protocol): el protocolo para enviar.

¿Tengo yo idea de algo de esto? No, ninguna. Pero he conseguido leer mis correos y espero que vosotros también podáis. Para eso necesitamos decirle a Mutt quién somos, de dónde tiene que sacar los datos y si queremos que no esté pidiéndole al servidor todo el rato los emails, darle unas carpetillas donde almacenerá sus movidas.

Vamos a ello.

Nuestros datos

Bien, vamos a decirle a Mutt entonces quién somos y darle nuestros credenciales para enviar y recibir correos. Escribimos lo siguiente en el archivo de configuración, sustituyendo los valores de la derecha por los nuestros:

# Datos
set from='EMAIL'
set realname='NOMBRE'

# Credenciales
set smtp_url = "smtps://USUARIO@SERVIDOR:PUERTO/"
set smtp_pass = "*****"
set imap_user = "USUARIO"
set imap_pass = "*****"

Los datos de SMTP e IMAP los tendremos que obtener de nuestro proveedor de correo. Yo estoy usando SMTPS porque tengo la opción sin encriptar y la segura y uso la segura. Lo mismo va a pasar con la parte de enviar, así que tenemos que recordar de activarlo.

Enviar y recibir

Ahora Mutt ya sabe entrar en nuestro correo, ahora tenemos que decirle de dónde lo tiene que coger, para ello añadimos la siguiente línea:

set folder = imaps://SERVIDOR:PUERTO

Esto es el sitio donde está guardado nuestro correo, dentro estará organizado en carpetillas diversas. Para definirlas necesitamos saber cómo las organiza nuestro mail en particular. El mío mete Drafts y Sent dentro de INBOX. Para saber lo que hace el vuestro, lo más práctico es, una vez configurada la carpeta por defecto y dentro de Mutt, darle a la c para cambiar de carpeta y después a ? para que nos enseñe cómo las tiene organizadas. O directamente a c? una vez sepamos lo que estamos haciendo.

A mí me queda algo así:

set spoolfile = "=INBOX" # entrada
set record = "=INBOX/Sent" # enviados
set postponed = "=INBOX/Drafts" # borradores
set trash = "=INBOX/Trash" # papelera

Todo gracias a la wiki de Arch, el lugar a donde una va cuando no entiende nada. Ahí descubrí que los símbolos + y = hacen referencia a la variable folder y nos evitan tener que escribir toda la ruta de nuevo.

Carpetas

Igual nos conviene crear carpetas donde guardará sus historias para no pedirlas una y otra vez y tal, especialmente si tenemos una carpeta .mutt que así no tenemos mierda flotando por ahí. Tirándonos el rollo desde la terminal:

mkdir -p ~/.mutt/cache/headers # crea los padres necesarios
mkdir ~/.mutt/cache/bodies
touch ~/.mutt/certificates

Y en archivo de configuración:

set header_cache = "~/.mutt/cache/headers"
set message_cachedir = "~/.mutt/cache/bodies"
set certificate_file = "~/.mutt/certificates"

Si me he empanado, el archivo certificates lo usa para escribir los certificados que hemos ido aceptando. Sí, nos pregunta cosas de los certificados. No, no sé lo que es un certificado en este contexto.

La fusión

Fusionando todo y añadiendo el editor y activando las movidas de seguridad porque las estamos usando me queda algo así, que por lo que he visto se puede hacer de otras maneras:

# Datos
set from='EMAIL'
set realname='NOMBRE'

# Dónde guardar datos
set header_cache = "~/.mutt/cache/headers"
set message_cachedir = "~/.mutt/cache/bodies"
set certificate_file = "~/.mutt/certificates"

# Activar seguridad
set ssl_starttls = yes
set ssl_force_tls = yes

# Credenciales
set smtp_url = "smtps://USUARIO@SERVIDOR:PUERTO/"
set smtp_pass = "*****"
set imap_user = "USUARIO"
set imap_pass = "*****"

# Buzones
set folder = "imaps://SERVIDOR:PUERTO"
set spoolfile = "=INBOX"
set record = "=INBOX/Sent"
set postponed = "=INBOX/Drafts"
set trash = "=INBOX/Trash"

# Otros
set editor = "emacs -nw"

Por cierto, leí por ahí que es interesante darse permisos de lectura y escritura solo a uno mismo, ya que tenemos ahí la contraseña. A mí todo lo que me haga repasar chmod me parece correcto, he hecho hasta un dibujito:

Mi chuleta del chmod

En nuestro caso, por lo tanto:

chmod 600 ~/.mutt/muttrc

Usar Mutt

Una vez que hemos definido toda la locura, podemos ponernos a usar Mutt. Es tan sencillo que no os voy a poner ni un pantallazo. Lo invocamos desde el terminal:

ondiz@slimbook:~$ mutt

Y si tenemos configurado todo correctamente nos aparecerá nuestro buzón de entrada. Los correos se identifican como leídos y sin leer y aparece una flechita en los que hemos contestado, es todo muy evidente. Las cosas dentro de Mutt se hacen dándole a las teclas. Arriba en la barrita nos dice a qué teclas hay que dar y nos va guiando con mensajes en la parte de abajo cuando hacemos cualquier cosa. Es muchísimo más sencillo que configurarlo, dónde va a parar.

La única cosa así loca es que por defecto se actualiza al darle a un tecla, pero se puede cambiar el comportamiento si se quiere en el archivo de configuración. Todo se puede cambiar ahí, echadle un ojo al creador de muttrc que os dejo en las referencias para flipar.

¡Ahora solo me falta cifrar los correos y me puedo dar por satisfecha! Ale, los que sepáis de correos y cosas contadme en los comentarios, que no necesito saber para hacer que funcionen las cosas (la ingeniería es lo que tiene) pero me mola aprender.

Referencias

Use IMAP en el manual de Mutt

Guía de Mutt de Rise up

Setup mutt with Gmail on CentOS and Ubuntu

UNIX / Linux : How to install and configure mutt

Il Nirvana Con Mutt

Muttrc Builder

Capítulo de configuración en el manual

Ejemplos de configuración


Os dejo con un grupo descubierto gracias a Punk Irratia y que tiene el mejor nombre punk justo detrás de Heno de Rabia:

Camino a la panificación: empanada de masa madre

Cuando estoy sola en casa suelo fabricar empanada. Es la comida definitiva, dura días en perfectas condiciones, se come con las manos y me recuerda mi infancia. Una de mis abuelas era gallega y la recuerdo amasando masa de empanada en una artesa, cocinando relleno con bien de cebolla y, sobre todo, añadiendo el aceitillo del relleno a la masa, como dicen los mandamientos de la empanada gallega verdadera. Mi empanada es como la de mi abuela con la diferencia de que cuando tengo tiempo de sobra la hago con masa madre que refresco con harina integral. Porque yo soy una moderna sin remedio.

Empanada de masa madre

¡Gracias, antepasados gallegos!




Ingredientes

    Refreco de la masa madre
  • 50g masa madre al 100%
  • 75g harina integral
  • 35g agua
  • Masa
  • La masa madre recién refrescada (160g)
  • 500g harina blanca
  • 220g agua
  • 10g sal
  • 30g aceite del relleno
  • Relleno
  • Una cebolla
  • Un pimiento rojo
  • 260g de atún en aceite

Direcciones

  1. Refresqué la masa madre y la tuve fermentando unas 8 horas.
  2. Mezclé los ingredientes de la masa excepto el aceite del relleno, amasé bien y le di una primera fermentación en la nevera durante toda la noche. La masa es seca, se volverá más blandita cuando le mezclemos el aceitillo del relleno.
  3. La mañana siguiente, poché la cebolla y el pimiento hasta que quedaron bien blanditos, añadí el atún e hice todo un par de minutos más.
  4. Escurrí parte de aceitillo del relleno y le mezclé 30g a la masa. Lo que sobró lo usé para untar la masa antes de meterla al horno.
  5. Puse la masa a fermentar otra hora y media a temperatura ambiente.
  6. Dividí la masa en dos trozos (el de abajo debe ser ligeramente mayor), los estiré con el rodillo y monté la empanada en la bandeja del horno sobre un trozo de papel de hornear. Es importante hacerle un agujero (se le puede poner hasta una chimenea de papel de aluminio) para que escape el vapor.
  7. Cocí en horno precalentado 20′ a 200C y la dejé otros 10′ con el horno apagado aprovechando el calor residual.

¡Pongan empanadas en sus vidas!

Lo que he aprendido: censura en LaTeX

¡Vuelve LaTeX al blog! Hoy os traigo un paquete curioso que he descubierto gracias a una típica conversación de café: el paquete censor, que como su nombre indica sirve para censurar documentos, es decir, hace el efecto del subrayador negro de la CIA.

Es tan fácil de usar como cargarlo en el preámbulo:

\usepackage{censor}

Y luego usar sus comandos de censurar, el más básico es \censor

La Universidad de \censor{Gatetes Reunidos}

que nos da este resultado:

censor.PNG

También tenemos los comandos \censorbox para censurar imágenes y tablas, y\blackout y \xblackout para tachar cachos largos de texto, que funcionan exactamente de la misma manera. Luego, cuando queramos desclasificar el documento, solo hacer falta añadir \StopCensoring al inicio y toda la información clasificada volverá.

Todos estos comandos correspondes a la creación en entorno seguro, en la información aparece en el .tex y solo es tachada en el pdf compilado. Pero también tiene un modo de creación en entorno inseguro en la que ni siquiera aparece la información en el .tex, sino que deja huecos que podemos rellenar cuando estemos en una máquina 100% segura. Esta parte os la dejo de deberes.

En fin, con esto demuestro que hay un paquete de LaTeX para todo y que tu tesis puede seguir siendo pública aunque tenga partes confidenciales.

Referencias

Manual del paquete


Suena: