Mostrando entradas con la etiqueta curiosidades. Mostrar todas las entradas
Mostrando entradas con la etiqueta curiosidades. Mostrar todas las entradas

viernes, 6 de mayo de 2016

Escalando matriz de puntos

Saludos compañeros !

En esta ocasion vamos a ver como se puede escalar una matriz de puntos (x,y).

Pero primero, a que le llamamos "escalar"? Supongamos que tenemos un monton de puntos sueltos en un espacio indefinido, podriamos tener uno en (0, 1) y otro en (34235, 54234). Pero como eso es bastante dificil de graficar vamos a darles unas diensiones mas normales, digamos 100x100. Asi lo que querriamos de output es una matriz con valores entre 0 y 100 sin perder las proporciones de los puntos.


Vamos directo al ejemplo!

>>> a = [(1,6), (2,5), (3,4), (34,42), (32,12)]
>>> x_mx=max(a, key=lambda x: x[0])[0] # esto se explica aca!
>>> y_mx=max(a, key=lambda x: x[1])[1]
>>> x_img=100
>>> y_img=100
>>> map(None, map(lambda x: x[0]*x_img/x_mx, a), map(lambda x: x[1]*y_img/y_mx, a)) # vamos a ir desglosando esto abajo...
[(2, 14), (5, 11), (8, 9), (100, 100), (94, 28)]


El operador map de python es extraordinario para trabajar con arreglos, en escencia lo que hace es aplicar la funcion que tiene como primer parametro a cada elemento de una lista (como un for abreviado). Y si tenemos dos o mas listas las une.
Esta sentencia: map(lambda x: x[0]*x_img/x_mx, a) simplemente aplica la vieja y querida regla de tres simples a cada elemento, donde x_img es el tamaño que deseamos obtener. Analogamente se ejecuta sobre el eje y.
La sentencia por fuera: map(None, x... ,  y... ) simplemente une ambos arrays para obtener el resultado.


Y como diria algun viejo personaje de dibujos animados, ee-e-e-eso es todo amigos !

Saludos y hasta la proxima!


Python maximo elemento del eje

Buenas a todos, y por supuesto, a todas. Hoy justo estaba probando algo que me parece bastante importante comentar.

En python si queremos obtener el mayor elemento de una de las filas de una matriz podemos usar la funcion max con un argumento que seleccione la fila deseada.

No tiene mucho sentido dicho asi ? Vamos directro al ejempo!

>>> a = [[1,6], [2,5], [3,4]] #array de puntos en el plano x, y
>>>max(a, key=lambda x: x[0])[0] #coordenada x mayor
>>>max(a, key=lambda x: x[1])[1] #coordenada y mayor

La importancia real de conocer este simple truco radica en que se usan funciones estandard que no dependen de ningun paquete, a diferencia de numpy.amax que cumple una funcion muy similar.

Gracias por leer y hasta la proxima!

viernes, 9 de octubre de 2015

Offline editing

Justo me estaba preguntando si era posible hacer posteos desde alguna aplicación de escritorio y mirando las opciones de blogger descubrí que se puede configurar una cuenta de e-mail para mandar entradas. Si bien no es la configuración mas segura del mundo puede llegar a resultarle cómoda a algunos que están acostumbrados a escribir mails. Y a los amantes del aire libre que quieren escribir en algún parque alejado y publicarlo sin tener que andar copiando texto de acá para allá.  


En mi caso estoy usando Thunderbird para editar y enviar el texto. Mi mayor motivación para buscar esta solución fue la de poder escribir sin conexión, seguro que hay muchos que encontraron mejores maneras. Pero por lo menos esta es mi pequeña contribución.

Donde esta la opción ? Tienen que ir al menu principal de su blog > configuración > movil y correo electronico > Publicar entradas mediante correo electrónico

Simplemente tienen que agregar un par de "palabras secretas" a la dirección y pueden empezar a mandar todos los posts que quieran sin entrar en la pagina de blogger que, aunque es bastante buena para editar, es súper pesada e incomoda si tenemos poco ancho de banda. O muy poco tiempo con internet.


martes, 6 de octubre de 2015

Speed-drawing

No hay nada mejor para dispersar un poco el estres que hacer garabatos, dibujos con poco y nada de sentido.
Seria una mentira si digo que me esmere para este, pero lo que si, lo hice de una y bastante concentrado. No tome el tiempo pero se sintio como si no hubiese tardado nada.

viernes, 7 de noviembre de 2014

Time is a wibly-wobly thingie

        Por supuesto que para todos el tiempo se ve de distintas formas. Incluso a veces parece pasar mas rapido y despues mas lento, de la nada. Por ejemplo cuando estas en silencio. El tiempo pierde su forma y tal vez hacer algo que parece instantaneo tarda horas y algo complejo nada, sobretodo si son pensamientos simplemente, pensar en silencio es una loteria. Miles de ideas que vienen y van fugaces como gotas de lluvia y lentas trancisiones, pausas indefinidas y bucles infinitos entre conceptos no son raros.  

         Al fin y al cabo, que mas da. De todas formas todo eso pasa dentro de nuestra mente !

miércoles, 29 de octubre de 2014

The return of 64M

        Una de las cosas que hice este año y de las que me siento relativamente orgulloso es de haber logrado exitosamente 'revivir' una vieja notebook que tan solo contaba con 64Mb de ram y un pentium III. El procesador no es tan malo dentro de todo, pero el limite de memoria vuelve imposible cualquier instalación decente. Por suerte parece ser que no soy el unico que tuvo la brillante idea de revivir maquinas con 64Mb de ram, y pude encontrar una distibución de linux, basada en knopix llamada dsl (damn small linux). 



        Despues de estar probandolo un par de veces puedo decir varias cosas, algunas buenas (como el hecho de que anda) y otras malas como el hecho de que es extremadamente lento y en general tiene problemas con las configuraciones graficas persistentes. Asi que en general simplemente la rebooteo ṕor la fuerza y sin dejar nada guardado.

        Lo que si hay que rescatar es que se le pudieron dar un par de usos como ver alguna que otra cosa en internet o jugar con un emulador de snes. 





        Algo que no se puede negar es su robustez, debe pesar alrededor de 3 kilos con mucho plastico y metal adentro. Tambien consta de un lector de floppy 3 1/2 y una lectora de dvd.




           La pantalla cuadrada, el teclado y el pad se nota que son de buena calidad porque no estan ni ligeramente gastadas. Claro, es una compaq.




Hasta la proxima !

lunes, 27 de octubre de 2014

Compiling the Atom editor

        El domingo, ese dia tan productivo entre sabado y el terrible principio de la semana, estuve tratabndo de instalar atom de la manera dificil (compilando el codigo). Hasta que me di por vencido y baje el .deb como cualquier persona normal. 

        Sin embargo hoy me pase un rato mas tratando de compilar el codigo y lo logre ! No se imaginan lo bien que se siente cuando algo que uno mismo compila (por mas que sea con un script) funciona. El problema habia sido que uno de los requerimientos para la compilación era un tal "node", que cuando ejecuto el script la terminal me responde que no estaba instalado y que podria estar en los paquetes "node" o  "nodejs-legacy"... ummmm .... legacy no sonaba muy bien asi que instalé "node" y el script simplemente no hacia nada ni daba ningun error. Un poco tarde me di cuenta de que el correcto era el otro (legacy). Pero los problemas no terminaron ahi... 

        Tambien pedía un tal "npm" que este si lo instale bien, pero sorpresa! Era la version 1.4 y el script pedia 1.5 como minimo... Al instalarlo desde apt-get podia estar seguro de que era la ultima version, pero no. Este programa en particular parece ser que se auto-updateaba con "npm install -g npm" (algo asi como instalate a vos mismo). Casi, casiii .... 

        Viste que Einstein decia que era totalmente estupido repetir lo mismo y esperar distintos resultados? Bueno, parece que este script no sigue la misma filosofia ya que lo tuve que correr tres veces (en las cuales cada vez crasheaba en un lugar distinto) hasta que finalmente, despues de todo el trastorno, lo logré ! Al fin pude compilar un software libre ! 

        Otro post será necesario para explayarse en el editor en si. 


viernes, 24 de octubre de 2014

Data travel

La entrada a las zonas de seguridad

        El otro día tuvimos una visita al datacenter provincial, recorrimos las instalaciones. Fue una visita muy interesante, estuvimos viendo los racks y las muchas medidas de seguridad que utilizan. Una de las cosas que me causo sorpresa fue la cantidad de sistemas redundantes, desde sistemas eléctricos hasta respaldos en cinta.

        Es interesante saber que los gastos públicos incluyen este tipo de cosas, sin embargo hay algunas cosas decepcionantes como el hecho de que el mainframe principal que computa todos los sueldos y el personal de la provincia use software propietario que cuesta 45,000 usd por mes. 


lunes, 28 de julio de 2014

100 years after WWI

Es raro pensar que ya paso un siglo desde la primera guerra mundial, la gran guerra como se decia en ese entonces.

lunes, 10 de febrero de 2014

Destreza Artistica I

 Ayer mi tia me regalo una muy copada caja de lapiceras y como es costumbre me puse a probaras un poco :). Nada especial los dibujos, la proxima me pongo las pilas para algo decente.

lapicera nueva yay!




red'z gun (nothing special)



simple perspective

martes, 4 de febrero de 2014

Expected

 Como era de esperarse nadie (o mas bien casi nadie) vio las funciones que deje tan prolijamete escritas, es una lastima.  

miércoles, 15 de enero de 2014

martes, 3 de diciembre de 2013

diferencia Cususucu

aca dejo el sript de la diferencia cususucu en scheme , si bien no lo tomaron como correcto capaz sirve para ver como anda scheme y lo facil que es hacer funciones matematicas iterativas.




(define (multi-display L);muestra una lista de manera mas 'linda'
  (if (null?  L )
      (display "")
      (begin  (newline) (display (car L)) (multi-display (cdr L)))
   )
  )

(define (read-em x);lee N elementos del stdin A.K.A. teclado
 
(if (eq? x 0)
   '()
    (append (list(read)) (read-em (- x 1) ))
    )
)

(define (suma1 x); suma de los cuadrados hasta x (posiblemente por esto no anduvo, hubiese sido mejor una recursion por cola)
 (if (eq? x 0)
     0
     (+ (expt x 2) (suma1 (- x 1) ) ))
 )


(define (suma2 x); suma de los x primeros numeros (con la eq de gauss)
 (/(* x (+ x 1) )2)
 )

(define (cusu x); diferencia cususucu para x
  (- (expt (suma2 x) 2) (suma1 x) )
  )

(define (cusu-lim lim beg) ; esta funcion da el numero cuya diferencia cususucu es menor que lim, pero la mas cercana
  (if (> (cusu beg) lim )
      (- beg 1)
      (cusu-lim lim (+ beg 1))
      )
)


        
(define (principal)

 (begin (map (lambda(x)(begin(display (cusu-lim x 0)) (newline))) (read-em (read))) (newline))
)



(principal) ;importante, en scheme si queres que el programa corra de una tenes que poner las funciones que queres que se ejecuten, algo asi como el main de C.

martes, 15 de octubre de 2013

Iron man III ...why?

No soy un fan de iron man ni mucho menos, pero puedo decir que la pelicula deja mucho que desear.

 Primero los efectos especiales gritan "standard hollywood", sobretodo si uno vio Avengers o Trnasformers III. Si bien parecen tener 10% mas de calidad, la escena final (spoiler) cuando explotan las armaduras se convierten en fuegos artificiales y true-mandarin parece salido de un videojuego barato.

 Si bien todo eso era mas que esperado la historia es tremendamente pobre y mal narrada, empezamos en 1999 en una especie de fiesta politica para (sin mucha explicacion de por medio) pasar a la actualida donde encontramos a un nuevo Tony con ataques de panico. Como si ya no estubiera bastante feo el panorama aquellos que lean el comic les recomiendo un lavado de cerebro antes de ver la pelicula, pues el mandarin es un actor (un actor haciendo de actor que hace a mandarin para ser precisos).

Bueno, espero que disfruten la pelicula, la banda sonora es muy buena. (aunque no tanto como en las anteriores).


lunes, 30 de septiembre de 2013

Prolog, lista de backtracks


En prolog listar BACKTRACKS suele ser muy util, esta simple funcion con algunas modificaciones genera una lista A de backtracks, asimismo el segundo argumento (Ax) puede usarse como una lista de variables no deseadas


p(1).
p(2).
p(3).
p(4).
p(5).
p(6).
p(7).
p(8).
p(9).

pes([X|A],Ax):-
    p(X),
    not(member(X,Ax)),
    pes(A,[X|Ax]),!.

pes([],Ax):-!.


-----------(corrida de ejemplo)--------------------
 [debug]  ?- pes(A,[]). 
A = [1, 2, 3, 4, 5, 6, 7, 8, 9]. 

 [debug]  ?- pes(A,[4,5,6,7]).
A = [1, 2, 3, 8, 9].

Hasta la proxima.

lunes, 23 de septiembre de 2013

Prolog: casos base y el resorte recursivo

El querido Prolog, para este post voy a suponer que se tienen nociones basicas de la sintaxis de prolog. Mas que nada quiero explicar algunas cosas un poco raras que tiene prolog.
 
Los casos base:

    En prolog todo es recursivo, no existen ni for, while, case, nada de eso. En vistas de esta hermosa cualidad definir los casos base gana una importancia mucho mayor a la usual. Pero, como definir un correcto caso base ? En general hay que pensar como queremos iniciar una variable (0 o []), aunque todo depende de como se diseñe el algoritmo.
 
El "resorte recursivo":

    Ese es el nombre que le di a una de las cualidades de la recursion, que es: Cuando se ejecuta una funcion recursiva primero chequea si esta en el caso base, de no ser asi se llama de nuevo a si misma hasta llegar al caso base. 

Definamos una simple funcion para entenderlo mejor:

func([A|B],[A|L]):- func(B,L).
func([],[]).

Ahora si lo ejecutamos con la consulta func([1,2,3],B) haria esto:

func([1,2,3], B)
func([2,3], B)  [quedo 'flotando' el 1]
func([3],B)
func([],[]) [en el caso base y B unifico con [], ahora va a volver por donde vino]
func([3],[3])
func([2,3],[2,3])
func([1,2,3],[1,2,3])

B=[1,2,3]

Claro que nosotros solo vemos el resultado y esta es una version simplificada de lo que veriamos si estuvieramos en modo trace. Pero supongo que es suficiente para entender el punto.