Ir al contenido principal

This is my blog, more about me at marianoguerra.github.io

🦋 @marianoguerra.org 🐘 @marianoguerra@hachyderm.io 🐦 @warianoguerra

Quoting machine

gracias a David por este link http://www.scottaaronson.com/teaching.pdf

del cual quotearia el pdf entero, pero par ser mas preciso:


Whenever students are taking our courses not out of intellectual curiosity but to fulfill the requirements for a degree, we will always
be fighting an uphill battle. Not even the clearest, best-organized lecturer on earth can get around a fundamental fact: that the typical student headed for a career at Microsoft (i) will never need to know
the Master Theorem, (ii) knows she’ll never need to know the Master Theorem, (iii) doesn’t want to know the Master Theorem, and (iv) will immediately forget the Master Theorem if forced to learn it.
Faced with this reality, I believe the best service we can provide for non-theory students is to teach them theoretical computer science essentially as a liberal-arts course. Aspiring computer scientists
should know that they will not be glorified toaster repairmen, but part of a grand intellectual tradition stretching back to Euclid, Leibniz, and Gauss. They should know that, in Dijkstra’s words, “computer science is no more about computers than astronomy is about telescopes” —that the quarry we’re after is not a slightly-faster C compiler but a deeper understanding of life, mind, mathematics, and the physical
world. They should know what the P versus NP question is asking and why it’s so difficult. They should be regaled with stories of Turing’s codebreaking in World War II, and of Gödel writing a letter to the dying von Neumann about “a mathematical problem of which your opinion would very much interest me.” They should be challenged as to whether they would have had the insights of Edmonds, Cook, Karp, and Valiant, had they lived a few decades earlier. And they should be prepared to appreciate future breakthroughs in theoretical computer science on the scale of Shor’s algorithm or Primes in P. From the discussions at websites such as Slashdot, it’s clear that the “general nerd public” has enormous curiosity about these breakthroughs, and it’s also clear that the level of curiosity greatly exceeds the level of understanding.

por favor el hecho de que diga microsoft por ahí no tiene nada que ver con mi interés por el párrafo.

esos dias..

esos días en los que me inspiro programando pero solo puedo programar cosas que no tengo la obligación de hacer...

bue, fue productivo, gracias a un consejo de Roger de hacerle creer a myjmk de que soy firefox corriendo en windows XP, me dejo de patear, arreglado lo de los encodings, esta terminado,
solo me falta ver el tema de mandar querys con acentos y cosas raras, que no devuelven nada.

acá el resultado:


por otro lado, seguí pycasa, que esta a 5 horas de ser terminado :D
las cosas que hice hoy:

  • moví todas las actividades lentas (que tienen que ver con la red) a hilos así la interfaz no se congela
  • modifique un poco la gui para sacarle algunos de los tantos relieves de los componentes
  • agregue abajo un panel de información, para saber que esta pasando
acá esta el resultado






pagina code.google.com/p/pycasa

mal google eh...



cuando vi que picasa no permitía subir fotos a picasaweb, pensé que se debía a alguna cosa muy compleja de solucionar, pero resulta que no se...
Se que en realidad picasa corre sobre un wine modificado en linux, y seguro, que para subir imágenes masivamente en windows usaran algún control activeX o algo no portable, y por esa razón, nos dejan a los pobres linuxeros subiendo fotos a mano..

me había dispuesto que algún día, iba a prender ospy y wireshark para ver como lo hacia y ver si lo podía duplicar en python, pero una búsqueda en google dio con que tenían una API para manejar los albums web, que bueno! digo yo, me bajo la librería de python y hago

mkdir pycasa # que original!

me pongo a ver la api, y resulta que no soportan picasaweb en python, frustrado, voy a ver cual si la soporta, y mi peor temor se volvió realidad...

java :S

así que después de 5 horas de darle al teclado (difícil porque casi no hay documentación ni ejemplos), salio lo que hay ahí arriba, es una 3 alfa fatality, pero supongo que en un par de días subo algo mas amistoso a algún svn de algún lado...

tomo menos tiempo programarlo que instalar windows para poder usar picasa :P

bue, si no me creen, en este album estan las primeras fotos subidas por mi:
http://picasaweb.google.com/luismarianoguerra/070825FotosCopadas

Viva vim (y erlang)

este post tiene doble intencion, primero, mostrar un poco de codigo de erlang que escribi, para que los que no lo conocen, lo conoscan. Segundo para demostrar la potencia de vim.

bueno, primero vamos con el codigo, que basicamente son dos modulos que escribi para multiplicacion de matrices de tamaño variable.

archivo row.erl (manejo de filas, creacion con un valor, creacion con valores aleatorios, multiplicacion de filas):



 1 -module(row).

 2 -export([new/2, new_random/3, multiply/2]).

 3

 4 new(Length, Value) -> new(Length, fun() -> Value end, []).

 5 new_random(Length, Start, Stop) -> 

 6     new(Length, fun() -> random:uniform() * (Stop - Start) + Start end, []).

 7

 8 new(0, _Fun, R) -> R;

 9 new(Length, Fun, R) -> new(Length - 1, Fun, [Fun()|R]).

10

11 multiply(R1, R2) -> multiply(R1, R2, 0).

12

13 multiply([], [], N) -> N;

14 multiply([R1H|R1T], [R2H|R2T], N) -> multiply(R1T, R2T, N + R1H * R2H).

15

Generated with VIM(http://www.vim.org, tip #1174)



archivo matrix.erl, maneja lo mismo que el anterior pero para matrices:



 1 -module(matrix).

 2 -export([new/3, new_random/4, head/1, tail/1, multiply/2]).

 3

 4 new(Rows, Cols, Val) -> 

 5     new(Rows, Cols, fun() -> row:new(Cols, Val) end, []).

 6

 7 new_random(Rows, Cols, Start, Stop) ->

 8     new(Rows, Cols, fun() -> row:new_random(Cols, Start, Stop) end, []).

 9

10 new(0, _Cols, _Fun, M) -> M;

11 new(Rows, Cols, Fun, M) -> new(Rows - 1, Cols, Fun, [Fun()|M]).

12

13 head(M) -> head(M, []).

14

15 head([], MH) -> lists:reverse(MH);

16 head([[H|_]|T], MH) -> head(T, [H|MH]).

17

18 tail(M) -> tail(M, []).

19

20 tail([], MT) -> lists:reverse(MT);

21 tail([[_|RT]|T], MT) -> tail(T, [RT|MT]).

22

23 multiply(A, B) -> multiply(A, B, []).

24

25 multiply([], _B, M) -> lists:reverse(M);

26 multiply([AH|AT], B, M) -> multiply(AT, B, [multiply_row(AH, B)|M]).

27

28 multiply_row(R, M) -> multiply_row(R, M, []).

29

30 multiply_row(_R, [[]|_], N) -> lists:reverse(N);

31 multiply_row(R, M, N) -> 

32     multiply_row(R, tail(M), [row:multiply(R, head(M))|N]).

33

Generated with VIM(http://www.vim.org, tip #1174)


como hacerlo esta descripto en la firma del codigo, basicamente pegar el codigo que aparece ahi en tu ~/.vimrc, abri el archivo que queres, entras en modo visual, seleccionas la parte que te interesa y apretas :MyToHtml, y te genera el html.

voy a ver si arreglo el css del blog para que las lineas no salgan tan separadas

un codigo de ejemplo para esa lib:

3> row:new(5,0). % crea una fila con 5 elementos seteados en 0
[0,0,0,0,0]

5> R1 = row:new_random(5,1,5). % crea una fila con 5 elementos random entre 1 y 5
[2.90848,3.66783,4.66262,3.38979,2.24531]

6> R2 = row:new_random(5,1,5). % crea una fila con 5 elementos random entre 1 y 5
[1.63925,3.78856,1.83779,1.56843,3.38604]

7> row:multiply(R1, R2). % multiplica R1 y R2
40.1518

8> M1 = matrix:new_random(4,3,1,5). % crea una matrix de 4x3 con valores entre 1 y 5
[[4.95718,3.31525,1.23460],
[2.23877,2.60385,2.90309],
[3.24848,1.02369,2.68560],
[2.83170,1.85989,3.23302]]

10> M3 = matrix:new_random(3,2,1,5). % crea una matrix de 4x3 con valores entre 1 y 5
[[2.55555,3.43706],[3.24636,4.95171],[1.21720,1.19310]]

11> matrix:multiply(M1, M3). % las multiplica
[[24.9336,34.9273],[17.7079,24.0519],[14.8938,19.4384],[17.2097,22.7997]]

Codeando al pedo..

Debido a mi estadía en Alemania, me veo forzado a traducir un montón de palabras de alemán a español, para ello uso el servicio de esta pagina:

www.myjmk.com

pero como la interfaz es bastante bloated, decidí hacer un programita simple que saciara mis apetencias de traducción, en un rato, salio lo siguiente:

peleando un poco con los encodings, hice unos cuantos requests y de pronto, dejo de funcionar, no parecía haber ningún error, debugee lo que me estaba mandando el programa, y leo el siguiente lindo mensaje:

Access not allowed.

Your access to the dictionary was rated as invalid. This could have various reasons. Possibly there is some other user sharing some ressources with you (e.g. a web proxy of your provider), scanning our dictionary systematically. We are very sorry for the inconvenience.

bue, tendrá que ser de otra forma :P

pero bueno, aprendí algunas cositas

  • use por primera vez super(), enumerate() y zip() [1]
  • conoci ' '.join()[2] en lugar de import string; string.join()[3]
  • conoci s.partition('sep')[4]
[1] http://docs.python.org/lib/built-in-funcs.html
[2] http://docs.python.org/lib/string-methods.html#l2h-250
[3] http://docs.python.org/lib/node42.html#l2h-379
[4] http://docs.python.org/lib/string-methods.html#l2h-254

This is the end of everything

[es] Este post va en ingles porque gente de emesene.org lo va a leer quizas, no es porque me quiera hacer el cheto[es]

I've got a new machine!

a picture:

a screenshot of the desktop:


So.. let's say I'm back on business, but my commits will be slow at start until i get on track with the university.

PS: if you live near Germany and want to invite me to eat or drink something and talk about anything, do it.., let's say that to buy this computer, i will have to eat a lot of rice and spaghetti ;)

Frase de profesor anonimo

lo de anonimo es porque no le se el nombre :)

"Estudiar Informatica y no programar bien en al menos un lenguaje es como estudiar musica y no sabes tocar ningun instrumento"*

* la frase la dijo en aleman asi que no es exactamente asi, sino que una mera traduccion de lo que recuerdo, pero era muy parecida a eso.

Blog Analogo (II)

estas en alemania cuando...

sudaca: esto sale un euro, no?
vendedora: no
sudaca: *reconsidera la compra ante la posibilidad de un precio superior*
vendedora: sale 0,99€
sudaca: *rie*
en Argentina 0,99€ es 1€
vendedora: en Alemania son 0,99€
sudaca: *rie*
*finaliza la transaccion*

lugar: Karlsruhe
idioma: Aleman
musica: Smashing Pumpkings - 1979
hora: atardecer
objeto de la transaccion: dos pares de medias

quote?

yo solo podria creer en un dios que supiese bailar
- Friedrich Nietzche

Blog Analogo


debido a mi carencia de computadora, empiezo este novedozo (?) blog analogo que luego sera digitalizado.
He aqui el primer conjunto de posts (sin links ni imagenes debido a las limitaciones obvias)

define:felicidad

comida: m&m
bebida: pepsi 1,5l
musica: Anathema - Alternative 44
lugar Waldstadt (Bosque en Karlsruhe)
hora: atardecer

un poco de cordura

se que al menos algo de cordura queda en mi, porque?
porque extranio mas mi guitarra y mi musica que mi computadora.