lunes, noviembre 26, 2007

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.

martes, noviembre 20, 2007

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

lunes, noviembre 19, 2007

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

sábado, noviembre 17, 2007

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]]

lunes, noviembre 12, 2007

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

domingo, noviembre 11, 2007

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 ;)

Seguidores

Archivo del Blog