When a spider loses a leg, does its whole hydraulic system lose pressure?

Deja un comentario

Ask an Entomologist

This question came to us from Twitter, from user Katzider. It’s an excellent question for many reasons, not the least of which is because it’s about pet spiders. During our podcast with Mythwits, I expressed a little annoyance at the fact that there’s very little medical care for invertebrate pets and livestock. There are some very good economic reasons for this, but ultimately spider keepers are kind of on their own when it comes for veterinary care. Since spiders are popular pets, I think the questions Katzider sent to us are a great set of questions to focus on this week.

Before we jump into the meat of his question, we have to describe how spiders move and respond…

Ver la entrada original 710 palabras más

Anuncios

No tengo más historias que contar

Deja un comentario

No tengo más historias que contar. Así dijo la creatura que posada sobre una piedra, intentaba responder las cuestiones de uno de tantos viajeros de las estrellas que con gran devoción acudían a él. De largas alas negras, seis patas y un olor azufroso, Yoon era considerado sin objeción alguna, el mejor cuenta cuentos de toda la galaxia. Nadie imaginaba sin embago, que Yoon estaba pasando en ese entonces, por momentos de aterradora desesperación.
Cuenta la leyenda que Yoon se cansó de contar cuentos y que acudió con una bruja de otra constelación para que le ayudara a olvidar los cuentos que conocía y evitara que se le ocurrieran nuevos. La bruja que no tenía nada de compasión, le dio vida a una pequeña pala, la cual entró en la mente de Yoon para cumplir la siniestra misión que se le había encomendado. Cual fue la sorpresa de Yoon que a medida que pasaba el tiempo, olvidaba tantas cosas que sólo de milagro era capaz de hablar. Se dió cuenta entonces que cada uno de sus cuentos eran en realidad experiencias que había tenido en el pasado, y que lo maravillosas de sus historias eran su propia identidad. Yoon comprendió muy tarde todo esto, ahora sólo se le ve caminando sin rumbo fijo entre las rocas, sin historias que contar.

– Un cuento que se me ocurrió porque un amigo me pidió que le contara un cuento mientras ibamos en el coche.

Algae is plural, alga is the singular word

Deja un comentario

Imagen

OpenGLView y Controles Cocoa

Deja un comentario

Hacía mucho que tenía la intención de escribir éste post, realmente se trata de algo muy sencillo, crear una aplicación básica para OSX en la que se usen controles de Cocoa, tales como botones, sliders, etcétera, y usarlos para controlar una vista de un OpenGLView. Esto lo hice ya que en el último semestre, me pidieron una aplicación que fuera un display de siete segmentos “virtual”. El problema al que me enfrenté fue que no sabía como hacer la comunicación entre la vista y los controles. Pues bien, la respuesta fue muy sencilla, sólo hay que agregar outlets a una subclase que herede de (en éste caso) OpenGLView, guardarla y usar la clase resultante. Éste puede ser un punto de partida para construir aplicaciones de escritorio más grandes que usen vistas de gráficos más avanzados, espero que les sirva.

Les dejo mi código y un screenshot de cómo se ve la aplicación.

 

http://www.mediafire.com/?hug03590gzvv0vp

Resumidor automático usando ENERTEX

6 comentarios

Mi último semestre de la carrera estuvo lleno de nuevas experiencias personales y académicas, de las cuales aprendí bastante. Fue en éste periodo que conocí algunos fundamentos de la lingüistica computacional, el tema de procesamiento de lenguaje natural siempre me ha llamado la atención y por eso fue que decidí inscribir dos materias relacionadas. Uno de los temas más importantes dentro del procesamiento de lenguaje es la creación de resúmenes automáticos, mi proyecto final fue crear un software que pudiera llevar a cabo dicha tarea, usando una técnica llamada ENTERTEX, la cual es una técnica que usa métodos estadísticos para determinar qué tan relevante es una frase dentro de un texto, una vez que se tienen las “relevancias” de cada frase, se puede crear un resumen mediante un filtrado tomando en cuenta el número de frases, la relevancia deseada y algún otro filtro como puede ser, una “temática”. En general, las entradas que se necesitan para realizar un resumen cualquiera son:

  • Un conjunto de textos de donde se hará el resumen
  • Un número máximo de frases que conformarán el  resumen
  • Un grado de relevancia respecto a una temática elegida
  • Un conjunto de frases que se desean filtrar
Un buen resumidor automático debería tener las siguientes características:
  • Crear un resumen entendible para el ser humano
  • Con una capacidad de realizar operaciones de manera rápida
  • Crear un resumen en orden cronológico, y con orden secuencial
Tomando en cuenta la metodología del modelo ENERTEX, las operaciones para realizar un resumen automático son únicamente matriciales, con un poco más de detalle, se debe generar una matriz en la que se tengan todas las palabras que conforman el corpus de documentos como columnas, y como filas, un índice que represente a cada una de las frases del corpus. La matriz se llena con unos y ceros, por ejemplo, si la frase 5[fila] contiene la palabra 6[columna], se coloca un uno en [5][6], si no la contiene, se coloca un cero. Una vez que la matriz fue llenada con unos y ceros, se procede a realizar la siguiente operación matricial (y es aquí donde se debe tomar en cuenta un mecanismo de paralelismo para acelerar el procesamiento ya que la matriz para un corpus de tamaño considerable puede llegar a tardar un buen rato):
A=(A*A’)^ 2
Una vez que la operación haya sido realizada, para cada frase, se suma cada valor de las palabras que corresponden a dicha fila, con lo cual se obtiene una frecuencia de cada frase. A mayor frecuencia, es mayor la relevancia que tiene la frase, con lo cual se puede comenzar a generar el resumen.
Otra de las cosas que me llevo de éste semestre es haber aprendido a programar en lenguaje PERL, lo cual realmente me fascinó, es un lenguaje muy flexible, y que es muy apropiado para realizar procesamiento de lenguaje natural. Mi resumidor lo hice en PERL y una pequeña parte en BashScript, el método que usé lo describo a continuación.
La implementación no toma en cuenta el paralelismo por lo que el procedimiento puede llegar a tardar un poco dependiendo del tamaño del corpus. La implementación que yo realicé la pueden descargar de aquí:
En el comprimido hay una carpeta llamada doc, donde pueden encontrar un documento con los detalles de implementación, ejecución, archivos de entrada, etcétera.
En general, el método funciona bastante bien, un update que podría ser realizado seria la paralelización del procesamiento. Si tienen dudas o comentarios, no duden en postearlos.

Editor de Subtítulos SRT BASH

1 comentario

¿Acaso no es molesto cuando bajas unos subtítulos y resulta que no están sincronizados con el video?, ésto pasa muy seguido cuando bajas películas de internet, ayer no podía ver el OVA 2 de Rurouni Kenshin por éste motivo, así que decidí hacer un script para hacer desplazamientos de tiempo en la pista de subtítulos.

¿Cómo usarlo?

  • Bájenselo de aqui
  • chmod 755 <filename>

Subfixer 0.1 by @Katzider
usage: subfixer <DIV> <AMMOUNT> <FILENAME>
DIV:
-h  -> hours
-m  -> minutes
-s  -> seconds
-ms -> milliseconds
AMMOUNT: Any
FILENAME: valid srt subtitle file

El code:

#!/bin/bash
#Katzider 2011
function input()
{
shopt -s nocasematch
if [ -f $3 ]
then
if [[ $3 =~ (.*)(\.)(ssa) ]]
then
transformSSA $1 $2 $3 0
else
if [[ $3 =~ (.*)(\.)(srt) ]]
then
transformSRT $1 $2 $3 1
else
printUsage
fi
fi
else
printUsage
fi
}

function printUsage()
{
echo “”
echo “Subfixer 0.1 by @Katzider”
echo “usage: subfixer


echo “DIV:”
echo “-h -> hours”
echo “-m -> minutes”
echo “-s -> seconds”
echo “-ms -> milliseconds”
echo “AMMOUNT: Any”
echo “FILENAME: valid srt subtitle file”
echo “”

function transformSRT()
{
grep “\->” $3 > .list1
cat .list1 | sed ‘s/\ \-\-\>\ /B/g’ > .list2
cat .list2 > .list1
echo “This may take few minutes…”
OFFSET=$2
if [[ $1 == “-h” ]]
then
let “OFFSET*=3600000”
else
if [[ $1 == “-m” ]]
then
let “OFFSET*=60000”
else
if [[ $1 == “-s” ]]
then
let “OFFSET*=1000″
else
printUsage
fi
fi
fi
cat $3 > $3″_2.srt”
for i in `cat .list1`
do
REPLACE=${i//$’\r’}
REPLACE=`echo $REPLACE|sed ‘s/B/\ –>\ /’`
TOTAL_MILLIS_S=0
TOTAL_MILLIS_E=0
START=`echo $i | awk ‘BEGIN {FS = “B”} ; {print $1}’`
END=`echo $i | awk ‘BEGIN {FS = “B”} ; {print $2}’`

TMP=`echo $START | awk ‘BEGIN {FS = “:”}; {print $1}’`
TMP=`echo $TMP|sed ‘s/^0*//’`
let “TMP*=3600000”
let “TOTAL_MILLIS_S+=TMP”
TMP=`echo $START | awk ‘BEGIN {FS = “:”}; {print $2}’`
TMP=`echo $TMP|sed ‘s/^0*//’`
let “TMP*=60000”
let “TOTAL_MILLIS_S+=TMP”

SECS_=`echo $START | awk ‘BEGIN {FS = “:”}; {print $3}’`
TMP=`echo $SECS_ | awk ‘BEGIN {FS = “,”}; {print $1}’`
TMP=`echo $TMP|sed ‘s/^0*//’`
let “TMP*=1000”
let “TOTAL_MILLIS_S+=TMP”

TMP=`echo $SECS_ | awk ‘BEGIN {FS = “,”}; {print $2}’`
TMP=`echo $TMP|sed ‘s/^0*//’`
let “TOTAL_MILLIS_S+=TMP”
TMP=`echo $END | awk ‘BEGIN {FS = “:”}; {print $1}’`
TMP=`echo $TMP|sed ‘s/^0*//’`

let “TMP*=3600000”
let “TOTAL_MILLIS_E+=TMP”
TMP=`echo $END | awk ‘BEGIN {FS = “:”}; {print $2}’`
TMP=`echo $TMP|sed ‘s/^0*//’`
let “TMP*=60000”
let “TOTAL_MILLIS_E+=TMP”
SECS_=`echo $END | awk ‘BEGIN {FS = “:”}; {print $3}’`
TMP=`echo $SECS_ | awk ‘BEGIN {FS = “,”}; {print $1}’`
TMP=`echo $TMP|sed ‘s/^0*//’`
let “TMP*=1000”
let “TOTAL_MILLIS_E+=TMP”

TMP=`echo $SECS_ | awk ‘BEGIN {FS = “,”}; {print $2}’`
TMP=`echo $TMP|sed ‘s/^0*//’`
TMP=${TMP//$’\r’}
let “TOTAL_MILLIS_E+=TMP”

let “TOTAL_MILLIS_S+=OFFSET”
let “TOTAL_MILLIS_E+=OFFSET”

let “H_S=(TOTAL_MILLIS_S/3600000)”
let “M_S=(TOTAL_MILLIS_S%3600000)/(1000*60)”
let “S_S=((TOTAL_MILLIS_S%3600000)%(1000*60))/1000”
let “MS_S=((TOTAL_MILLIS_S%3600000)%(1000*60))%1000”

let “H_E=(TOTAL_MILLIS_E/3600000)”
let “M_E=(TOTAL_MILLIS_E%3600000)/(1000*60)”
let “S_E=((TOTAL_MILLIS_E%3600000)%(1000*60))/1000”
let “MS_E=((TOTAL_MILLIS_E%3600000)%(1000*60))%1000″

if [ $H_S -lt 0 ]; then H_S=00; fi
if [ $M_S -lt 0 ]; then M_S=00; fi
if [ $S_S -lt 0 ]; then S_S=00; fi
if [ $MS_S -lt 0 ]; then MS_S=000; fi
if [ $H_E -lt 0 ]; then H_E=00; fi
if [ $M_E -lt 0 ]; then M_E=00; fi
if [ $S_E -lt 0 ]; then S_E=00; fi
if [ $MS_E -lt 0 ]; then MS_E=000; fi

if [ $(echo $H_S | wc -c) -eq 2 ]; then H_S=0$H_S; fi
if [ $(echo $M_S | wc -c) -eq 2 ]; then M_S=0$M_S; fi
if [ $(echo $S_S | wc -c) -eq 2 ]; then S_S=0$S_S; fi
if [ $(echo $MS_S | wc -c) -eq 2 ]; then MS_S=0$MS_S; fi
if [ $(echo $MS_S | wc -c) -eq 3 ]; then MS_S=0$MS_S; fi
if [ $(echo $H_E | wc -c) -eq 2 ]; then H_E=0$H_E; fi
if [ $(echo $M_E | wc -c) -eq 2 ]; then M_E=0$M_E; fi
if [ $(echo $S_E | wc -c) -eq 2 ]; then S_E=0$S_E; fi
if [ $(echo $MS_E | wc -c) -eq 2 ]; then MS_E=0$MS_E; fi
if [ $(echo $MS_E | wc -c) -eq 3 ]; then MS_E=0$MS_E; fi

REPLACEMENT=$(echo $H_S:$M_S:$S_S,$MS_S” –> “$H_E:$M_E:$S_E,$MS_E)
cat $3″_2.srt” | sed “s/$REPLACE/$REPLACEMENT/g” > .list3
cat .list3 > $3″_2.srt”
done

rm .list1 .list2 .list3
echo “Done, saved in $3_2.srt, enjoy!”
}

function transformSSA()
{
echo “SSA will be delivered in version v2.0”
}

input $1 $2 $3

Flickr Recomendado

Deja un comentario

Hola amigos, en ésta ocasión les traigo una muy buena recomendación, por si no lo sabían me gusta bastante la fotografía, y hay algunas galerías de Flickr que me parecen muy interesantes a la vista por su calidad. En esta ocasión les quiero mostrar la galería de oguherrera, quien tiene algunas fotos de la Ciudad de México desde sus diferentes ángulos y perspectivas.

 

 

Older Entries