miércoles, 26 de noviembre de 2008

Domingos

Hay domingos que molan muuuuuuuucho.
Aquellos de sofa y tele y esperar que pasen las horas, y mirar alrededor, y decir: "Joer, que bien que estoy, aunque mañana vuelva a ser un dia de mierda"

viernes, 21 de noviembre de 2008

Squeak interactuando con el exterior

Squeak funciona francamente bien cuando se refiere a cosas dentro de la imagen (depuracion, control de objetos, introspeccion....). pero para empezar a prototipar cosillas, encontré que necesitaba que pudirera comunicarme con el exterior (que siempre es el problema de las VM).

Bien, pues para hacerlo, he diferenciado 3 casos: Leer un fichero del exterior, ejecutar un comando tipo system, y finalmente ejecutar un comando y captar la salida.

Leer un fichero exterior


En entorno squeak, los ficheros no tienen mucho sentido ya que todo esta latente en la imagen, con lo que el mismo codigo es el sistema, que esta organizado en clases....blablabla....

Sin embargo, si necesitamos leer un fichero, como cojones lo hacemos? Pues bien facil:

a := CrLfFileStream fileNamed: '/tmp/a.pl'.
string := a contentsOfEntireFile .
Transcript show: string.
a close
Sin el CrLf, el objeto FileStream no interpreta los finales de linea, y printara el archvo con caracteres raros.

Ref: http://wiki.squeak.org/squeak/1583

Ejecutar un comando con 'system'

bien, ahora quiero ejecutar un programa del sistema host, no de la imagen de squeak (¿existe el concepto programa en squeak?)

Yo lo he conseguido metiendo lo siguiente en el workspace:

UnixProcess command: 'ratmen hola hola adeu adeu'.
Esto esta en el paquete OSProcess, si no lo tienes, instalalo usando el universe package browser o el SqueakMap.

Nota: Para GNU Smalltalk se puede usar
SystemDictionary system: aString
Ref: http://www.cs.utah.edu/dept/old/texinfo/mst/mst.html

Popen en squeak. pipe entre el proceso externo y el caller

No lo he conseguido :( . Seguiremos informando

Copy&Paste

Q: Eh tio, no puedo copiar y pegar el codigo de mi SO a squeak...
A: Edita tu ~/.Xresources y añade

*VT100.translations: #override\
<> : select-end(PRIMARY, CUT_BUFFER0, CLIPBOARD)\n\
<> : insert-selection(PRIMARY, CUT_BUFFER0, CLIPBOARD)\n\
<> : select-end(PRIMARY, CUT_BUFFER0, CLIPBOARD)
~

miércoles, 19 de noviembre de 2008

Problema:

Tengo un archivo con el formato siguiente:
-------------BOF

Matriu 0
1foo.map VS 0.A.map 0.565 0.382291 0.370989 0.298857 0.705638
....
1foo.map VS 0.e.map 0.257588 0.940875 0.872144 0.634201 0.844375
MITJA1_0= 0.574908 0.353649 0.339477 0.268343 0.691255
MITJA2_0= 0.55557 0.307795 0.296409 0.235522 0.517165
MITJA3_0= 0.492392 0.527022 0.484869 0.354612 0.536407
Estadisticas: 1, 2, 3 ,4,5

Matriu 1
1foo.map VS 1.A.map 0.521194 0.479164 0.464836 0.374049 0.753356
1foo.map VS 1.Br.map 0.521194 0.479164 0.464836 0.374049 0.759565
...
-----------EOF

Necesito agrupar los valores de la ultima columna (negrita), poniendolos en una fila, y en cada fila tiene que haber los valores del mismo 'map'. (cursiva). Como quedarse con las ultimas columnas y trasponer....

Ah, suponemos que tenemos unos 1500 maps distintos, y que cada map tiene 22 valores.

Bien, pues esto, nose como lo haríais, pero si encontrais algo que supere esto, me lo comentais ;)


:g:^[^1]:d
:%s:.*VS::
:%s:.* ::
qq22Jjq
1500@@


Efectivamente, solo eso