Grabando la Imagen

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

Grabando la Imagen

Angel Java Lopez
Hola gente!

Pregunta para Uds. que saben:

Estoy trabajando en una nueva implementacion de una VM Smalltalk, basada en
bytecodes, esta vez en Java, asi el bueno de @garduino que esta trabajando
con Eclipse, no podra eludir ;-) (se me rehusa a tocar mi implementacion en
C#, no la quiere tocar ni con un palo, y la de Javascript esta verde
todavia ;-)

Bueno, decia que estaba en eso, y me falta. Tengo un lexer, un parser, una
lista de bytecodes implementados, un objeto primitivo, una clase con
behavior primitivo, un lector de chunks, un AST en memoria, un compilador
que visita el AST y lo pasa a bytecodes y codigo a ejecutar, etc..

Pero estaba yo en eso, cuando me pregunto a mi mismo, algo YAGNI, pero que
quiero que alguna vez llegue a este punto: como guardar la imagen? Tengo
algunas ideas, pero quisiera saber como hacen los Smalltalks.

Por lo que pregunto:

- Como graban la imagen?

Son varias preguntas. Una, es como determinan que hay que grabar?

Se me ocurren dos algoritmos:

Algoritmo A:
- Grabar todo lo que quede dentro del diccionario Smalltalk, y los objetos
referidos desde ahi, directa o indirectamente
- Y cuando se alcanza una clase, guardar allInstances

Algoritmo B:
- Grabar todo lo que quede dentro del diccionario Smalltalk y su grafo
derivado (como en el punto 1 de A)
- Grabar todo lo que este referenciado en los Execution Blocks (no se si se
llaman asi) que estan en proceso

Es asi? La diferencia para mi, es que en el algoritmo A tengo que
implementar un allInstances, que puede variar grandemente dependiendo de la
implementacion de la VM por dentro (que recuerdo, Squeak se paseaba por
toda la memoria para conseguir eso, .... otras implementaciones, si tienen
una Object Table, ven facilitado eso)

Luego, por lo que entiendo, el grabar la imagen se puede disparar desde un
metodo del objeto/diccionario Smalltalk. Vi por ahi
http://stackoverflow.com/questions/4655537/how-to-save-a-pharo-image-automatically-every-hour

donde usan

Smalltalk snapshot: ...

Pero, cual es la diferencia con usar current:

Smalltalk current snapshot: .... ?

Y como hacen si tienen Process ejecutandose en threads nativos? snapshot
toma una "foto" a un punto determinado, y permite que los procesos sigan
modificando objetos? O la mayoria de los Smalltalks tienen "green threads",
paran todo, y hacen un grabado de la imagen?

Gracias por cualquier info!

Ah, sabiendo que el bueno de Valloud esta en esta lista, les dejo este
enlace, para los que gustan de algun puzzle matematico. Es mi daily post de
hoy:
http://ajlopez.zoomblog.com/archivo/2012/06/25/un-problema-de-Kolmogorov-1.html

Nos leemos!

Angel "Java" Lopez
http://ajlopez.wordpress.com
http://twitter.com/ajlopez
Reply | Threaded
Open this post in threaded view
|

Re: Grabando la Imagen

garduino
Hola Angel:



El 25 de junio de 2012 14:38, Angel Java Lopez <[hidden email]>escribió:

> **
>
>
> Hola gente!
>
> Pregunta para Uds. que saben:
>
> Estoy trabajando en una nueva implementacion de una VM Smalltalk, basada
> en bytecodes, esta vez en Java, asi el bueno de @garduino que esta
> trabajando con Eclipse, no podra eludir ;-) (se me rehusa a tocar mi
> implementacion en C#, no la quiere tocar ni con un palo, y la de Javascript
> esta verde todavia ;-)
>


jejeje, era una buena excusa que no toco cosas MS, ahora me vas a obligar a
mirarlo :)



>
> Bueno, decia que estaba en eso, y me falta. Tengo un lexer, un parser, una
> lista de bytecodes implementados, un objeto primitivo, una clase con
> behavior primitivo, un lector de chunks, un AST en memoria, un compilador
> que visita el AST y lo pasa a bytecodes y codigo a ejecutar, etc..
>
> Pero estaba yo en eso, cuando me pregunto a mi mismo, algo YAGNI, pero que
> quiero que alguna vez llegue a este punto: como guardar la imagen? Tengo
> algunas ideas, pero quisiera saber como hacen los Smalltalks.
>
> Por lo que pregunto:
>
> - Como graban la imagen?
>
> Son varias preguntas. Una, es como determinan que hay que grabar?
>
> Se me ocurren dos algoritmos:
>
> Algoritmo A:
> - Grabar todo lo que quede dentro del diccionario Smalltalk, y los objetos
> referidos desde ahi, directa o indirectamente
> - Y cuando se alcanza una clase, guardar allInstances
>
> Algoritmo B:
> - Grabar todo lo que quede dentro del diccionario Smalltalk y su grafo
> derivado (como en el punto 1 de A)
> - Grabar todo lo que este referenciado en los Execution Blocks (no se si
> se llaman asi) que estan en proceso
>
> Es asi? La diferencia para mi, es que en el algoritmo A tengo que
> implementar un allInstances, que puede variar grandemente dependiendo de la
> implementacion de la VM por dentro (que recuerdo, Squeak se paseaba por
> toda la memoria para conseguir eso, .... otras implementaciones, si tienen
> una Object Table, ven facilitado eso)
>
> Luego, por lo que entiendo, el grabar la imagen se puede disparar desde un
> metodo del objeto/diccionario Smalltalk. Vi por ahi
>
> http://stackoverflow.com/questions/4655537/how-to-save-a-pharo-image-automatically-every-hour
>
> donde usan
>
> Smalltalk snapshot: ...
>
> Pero, cual es la diferencia con usar current:
>
> Smalltalk current snapshot: .... ?
>
> Y como hacen si tienen Process ejecutandose en threads nativos? snapshot
> toma una "foto" a un punto determinado, y permite que los procesos sigan
> modificando objetos? O la mayoria de los Smalltalks tienen "green threads",
> paran todo, y hacen un grabado de la imagen?
>
> Gracias por cualquier info!
>
>

Estas son las cosas que precisamente son más interesantes pero que
requieren tiempo y entonces uno usualmente usa todo sin entender mucho que
pasa debajo.

Si yo tuviera que hacerlo, miraría como está hecho Cuis (por lejos el
Smalltalk que más entiendo), ahí estuve mirando un poco y en
SystemDictionary, en particular el método #snapshot: andQuit: embedded:

Un tema es que Cuis usa ActiveModel (una metáfora que prescinde del
controller (corregime Juan please)) y que a mi me gusta mucho porque
simplifica el desarrollo.

No te estoy ayudando mucho con esto, pero es por donde empezaría a
recolectar ideas......



> Ah, sabiendo que el bueno de Valloud esta en esta lista, les dejo este
> enlace, para los que gustan de algun puzzle matematico. Es mi daily post de
> hoy:
>
> http://ajlopez.zoomblog.com/archivo/2012/06/25/un-problema-de-Kolmogorov-1.html
>
> Nos leemos!
>
> Angel "Java" Lopez
> http://ajlopez.wordpress.com
> http://twitter.com/ajlopez
>
>
>  
>

Saludos!
Reply | Threaded
Open this post in threaded view
|

Re: Grabando la Imagen

Angel Java Lopez
Gracias German, me ayudaste a ver algunas cosas.

Hmmmm... tengo en mi folder Downloads un CuisV4.sources, encuentro ahi

!SystemDictionary methodsFor: 'snapshot and quit' stamp: 'JMM 11/21/2000
21:02'!
               snapshotEmbeddedPrimitive
<primitive: 247>
^nil "indicates error writing embedded image file"! !

!SystemDictionary methodsFor: 'snapshot and quit' stamp: 'ar 7/22/2000
14:34'!
             snapshotPrimitive
"Primitive. Write the current state of the object memory on a file in the
same format as the Smalltalk-80 release. The file can later be resumed,
returning you to this exact state. Return normally after writing the file.
Essential. See Object documentation whatIsAPrimitive."

<primitive: 97>
^nil "indicates error writing image file"! !


Curiosamente, en un PharoV10.sources que tengo por ahi, todo esto esta en
SmalltalkImage, pro con stamp de 2003, hubiera esperado que el codigo de
CuisV4.sources tuviera un stamp mas nuevo que PharoV10.source que lo tengo
en PharoCore-1.3-13315

!SmalltalkImage methodsFor: 'snapshot and quit' stamp: 'sd 11/16/2003
13:58'!
snapshotEmbeddedPrimitive
<primitive: 247>
^nil "indicates error writing embedded image file"! !

!SmalltalkImage methodsFor: 'snapshot and quit' stamp: 'sd 11/16/2003
13:59'!
snapshotPrimitive
"Primitive. Write the current state of the object memory on a file in the
same format as the Smalltalk-80 release. The file can later be resumed,
returning you to this exact state. Return normally after writing the file.
Essential. See Object documentation whatIsAPrimitive."

<primitive: 97>
^nil "indicates error writing image file"! !


No parece que haya mas info.

Es esto lo que se termina ejecutando? estas primitivas?
Diferencia entre snapshotPrimitive y snapshotEmbeddedPrimitive?
Donde veo el codigo de las primitivas?

Nos leemos!

Angel "Java" Lopez
http://ajlopez.wordpress.com
http://ajlopez.zoomblog.com
http://twitter.com/ajlopez
gh:ajlopez


2012/6/25 Germán Arduino <[hidden email]>

> **
>
>
> Hola Angel:
>
>
>
> El 25 de junio de 2012 14:38, Angel Java Lopez <[hidden email]>escribió:
>
>  **
>>
>>
>> Hola gente!
>>
>> Pregunta para Uds. que saben:
>>
>> Estoy trabajando en una nueva implementacion de una VM Smalltalk, basada
>> en bytecodes, esta vez en Java, asi el bueno de @garduino que esta
>> trabajando con Eclipse, no podra eludir ;-) (se me rehusa a tocar mi
>> implementacion en C#, no la quiere tocar ni con un palo, y la de Javascript
>> esta verde todavia ;-)
>>
>
>
> jejeje, era una buena excusa que no toco cosas MS, ahora me vas a obligar
> a mirarlo :)
>
>
>
>>
>> Bueno, decia que estaba en eso, y me falta. Tengo un lexer, un parser,
>> una lista de bytecodes implementados, un objeto primitivo, una clase con
>> behavior primitivo, un lector de chunks, un AST en memoria, un compilador
>> que visita el AST y lo pasa a bytecodes y codigo a ejecutar, etc..
>>
>> Pero estaba yo en eso, cuando me pregunto a mi mismo, algo YAGNI, pero
>> que quiero que alguna vez llegue a este punto: como guardar la imagen?
>> Tengo algunas ideas, pero quisiera saber como hacen los Smalltalks.
>>
>> Por lo que pregunto:
>>
>> - Como graban la imagen?
>>
>> Son varias preguntas. Una, es como determinan que hay que grabar?
>>
>> Se me ocurren dos algoritmos:
>>
>> Algoritmo A:
>> - Grabar todo lo que quede dentro del diccionario Smalltalk, y los
>> objetos referidos desde ahi, directa o indirectamente
>> - Y cuando se alcanza una clase, guardar allInstances
>>
>> Algoritmo B:
>> - Grabar todo lo que quede dentro del diccionario Smalltalk y su grafo
>> derivado (como en el punto 1 de A)
>> - Grabar todo lo que este referenciado en los Execution Blocks (no se si
>> se llaman asi) que estan en proceso
>>
>> Es asi? La diferencia para mi, es que en el algoritmo A tengo que
>> implementar un allInstances, que puede variar grandemente dependiendo de la
>> implementacion de la VM por dentro (que recuerdo, Squeak se paseaba por
>> toda la memoria para conseguir eso, .... otras implementaciones, si tienen
>> una Object Table, ven facilitado eso)
>>
>> Luego, por lo que entiendo, el grabar la imagen se puede disparar desde
>> un metodo del objeto/diccionario Smalltalk. Vi por ahi
>>
>> http://stackoverflow.com/questions/4655537/how-to-save-a-pharo-image-automatically-every-hour
>>
>> donde usan
>>
>> Smalltalk snapshot: ...
>>
>> Pero, cual es la diferencia con usar current:
>>
>> Smalltalk current snapshot: .... ?
>>
>> Y como hacen si tienen Process ejecutandose en threads nativos? snapshot
>> toma una "foto" a un punto determinado, y permite que los procesos sigan
>> modificando objetos? O la mayoria de los Smalltalks tienen "green threads",
>> paran todo, y hacen un grabado de la imagen?
>>
>> Gracias por cualquier info!
>>
>>
>
> Estas son las cosas que precisamente son más interesantes pero que
> requieren tiempo y entonces uno usualmente usa todo sin entender mucho que
> pasa debajo.
>
> Si yo tuviera que hacerlo, miraría como está hecho Cuis (por lejos el
> Smalltalk que más entiendo), ahí estuve mirando un poco y en
> SystemDictionary, en particular el método #snapshot: andQuit: embedded:
>
> Un tema es que Cuis usa ActiveModel (una metáfora que prescinde del
> controller (corregime Juan please)) y que a mi me gusta mucho porque
> simplifica el desarrollo.
>
> No te estoy ayudando mucho con esto, pero es por donde empezaría a
> recolectar ideas......
>
>
>
>> Ah, sabiendo que el bueno de Valloud esta en esta lista, les dejo este
>> enlace, para los que gustan de algun puzzle matematico. Es mi daily post de
>> hoy:
>>
>> http://ajlopez.zoomblog.com/archivo/2012/06/25/un-problema-de-Kolmogorov-1.html
>>
>> Nos leemos!
>>
>> Angel "Java" Lopez
>> http://ajlopez.wordpress.com
>> http://twitter.com/ajlopez
>>
>>
>>
> Saludos!
>
>
>  
>
Reply | Threaded
Open this post in threaded view
|

Re: Grabando la Imagen

garduino
Hola Angel:

Te contesto medio de memoria, sin mucho research porque me corre el tiempo,
sobre primitivas (más allá de los nombres de clases que hayan cambiado con
el tiempo), acá hay algo:
http://www.fit.vutbr.cz/study/courses/OMP/public/software/sqcdrom2/Tutorials/SqOnlineBook_(SOB)/englisch/sqk/sqk00096.htm

y también en el swiki de squeak.

Por lo del código de Cuis, posiblemente sea porque Cuis deriva de Squeak,
no de Pharo, quizás eso explique lo de las fechas en el sources.

Saludos y perdón x lo escueto.

A la tarde veo si puedo aportar algo más.



El 26 de junio de 2012 07:56, Angel Java Lopez <[hidden email]>escribió:

> **
>
>
> Gracias German, me ayudaste a ver algunas cosas.
>
> Hmmmm... tengo en mi folder Downloads un CuisV4.sources, encuentro ahi
>
> !SystemDictionary methodsFor: 'snapshot and quit' stamp: 'JMM 11/21/2000
> 21:02'!
>                snapshotEmbeddedPrimitive
> <primitive: 247>
> ^nil "indicates error writing embedded image file"! !
>
> !SystemDictionary methodsFor: 'snapshot and quit' stamp: 'ar 7/22/2000
> 14:34'!
>              snapshotPrimitive
> "Primitive. Write the current state of the object memory on a file in the
>  same format as the Smalltalk-80 release. The file can later be resumed,
> returning you to this exact state. Return normally after writing the file.
>  Essential. See Object documentation whatIsAPrimitive."
>
> <primitive: 97>
>  ^nil "indicates error writing image file"! !
>
>
> Curiosamente, en un PharoV10.sources que tengo por ahi, todo esto esta en
> SmalltalkImage, pro con stamp de 2003, hubiera esperado que el codigo de
> CuisV4.sources tuviera un stamp mas nuevo que PharoV10.source que lo tengo
> en PharoCore-1.3-13315
>
> !SmalltalkImage methodsFor: 'snapshot and quit' stamp: 'sd 11/16/2003
> 13:58'!
> snapshotEmbeddedPrimitive
> <primitive: 247>
>  ^nil "indicates error writing embedded image file"! !
>
> !SmalltalkImage methodsFor: 'snapshot and quit' stamp: 'sd 11/16/2003
> 13:59'!
> snapshotPrimitive
> "Primitive. Write the current state of the object memory on a file in the
> same format as the Smalltalk-80 release. The file can later be resumed,
>  returning you to this exact state. Return normally after writing the
> file.
> Essential. See Object documentation whatIsAPrimitive."
>
> <primitive: 97>
> ^nil "indicates error writing image file"! !
>
>
> No parece que haya mas info.
>
> Es esto lo que se termina ejecutando? estas primitivas?
> Diferencia entre snapshotPrimitive y snapshotEmbeddedPrimitive?
> Donde veo el codigo de las primitivas?
>
> Nos leemos!
>
> Angel "Java" Lopez
> http://ajlopez.wordpress.com
> http://ajlopez.zoomblog.com
> http://twitter.com/ajlopez
> gh:ajlopez
>
>
> 2012/6/25 Germán Arduino <[hidden email]>
>
>> **
>>
>>
>> Hola Angel:
>>
>>
>>
>> El 25 de junio de 2012 14:38, Angel Java Lopez <[hidden email]>escribió:
>>
>>  **
>>>
>>>
>>> Hola gente!
>>>
>>> Pregunta para Uds. que saben:
>>>
>>> Estoy trabajando en una nueva implementacion de una VM Smalltalk, basada
>>> en bytecodes, esta vez en Java, asi el bueno de @garduino que esta
>>> trabajando con Eclipse, no podra eludir ;-) (se me rehusa a tocar mi
>>> implementacion en C#, no la quiere tocar ni con un palo, y la de Javascript
>>> esta verde todavia ;-)
>>>
>>
>>
>> jejeje, era una buena excusa que no toco cosas MS, ahora me vas a obligar
>> a mirarlo :)
>>
>>
>>
>>>
>>> Bueno, decia que estaba en eso, y me falta. Tengo un lexer, un parser,
>>> una lista de bytecodes implementados, un objeto primitivo, una clase con
>>> behavior primitivo, un lector de chunks, un AST en memoria, un compilador
>>> que visita el AST y lo pasa a bytecodes y codigo a ejecutar, etc..
>>>
>>> Pero estaba yo en eso, cuando me pregunto a mi mismo, algo YAGNI, pero
>>> que quiero que alguna vez llegue a este punto: como guardar la imagen?
>>> Tengo algunas ideas, pero quisiera saber como hacen los Smalltalks.
>>>
>>> Por lo que pregunto:
>>>
>>> - Como graban la imagen?
>>>
>>> Son varias preguntas. Una, es como determinan que hay que grabar?
>>>
>>> Se me ocurren dos algoritmos:
>>>
>>> Algoritmo A:
>>> - Grabar todo lo que quede dentro del diccionario Smalltalk, y los
>>> objetos referidos desde ahi, directa o indirectamente
>>> - Y cuando se alcanza una clase, guardar allInstances
>>>
>>> Algoritmo B:
>>> - Grabar todo lo que quede dentro del diccionario Smalltalk y su grafo
>>> derivado (como en el punto 1 de A)
>>> - Grabar todo lo que este referenciado en los Execution Blocks (no se si
>>> se llaman asi) que estan en proceso
>>>
>>> Es asi? La diferencia para mi, es que en el algoritmo A tengo que
>>> implementar un allInstances, que puede variar grandemente dependiendo de la
>>> implementacion de la VM por dentro (que recuerdo, Squeak se paseaba por
>>> toda la memoria para conseguir eso, .... otras implementaciones, si tienen
>>> una Object Table, ven facilitado eso)
>>>
>>> Luego, por lo que entiendo, el grabar la imagen se puede disparar desde
>>> un metodo del objeto/diccionario Smalltalk. Vi por ahi
>>>
>>> http://stackoverflow.com/questions/4655537/how-to-save-a-pharo-image-automatically-every-hour
>>>
>>> donde usan
>>>
>>> Smalltalk snapshot: ...
>>>
>>> Pero, cual es la diferencia con usar current:
>>>
>>> Smalltalk current snapshot: .... ?
>>>
>>> Y como hacen si tienen Process ejecutandose en threads nativos? snapshot
>>> toma una "foto" a un punto determinado, y permite que los procesos sigan
>>> modificando objetos? O la mayoria de los Smalltalks tienen "green threads",
>>> paran todo, y hacen un grabado de la imagen?
>>>
>>> Gracias por cualquier info!
>>>
>>>
>>
>> Estas son las cosas que precisamente son más interesantes pero que
>> requieren tiempo y entonces uno usualmente usa todo sin entender mucho que
>> pasa debajo.
>>
>> Si yo tuviera que hacerlo, miraría como está hecho Cuis (por lejos el
>> Smalltalk que más entiendo), ahí estuve mirando un poco y en
>> SystemDictionary, en particular el método #snapshot: andQuit: embedded:
>>
>> Un tema es que Cuis usa ActiveModel (una metáfora que prescinde del
>> controller (corregime Juan please)) y que a mi me gusta mucho porque
>> simplifica el desarrollo.
>>
>> No te estoy ayudando mucho con esto, pero es por donde empezaría a
>> recolectar ideas......
>>
>>
>>
>>> Ah, sabiendo que el bueno de Valloud esta en esta lista, les dejo este
>>> enlace, para los que gustan de algun puzzle matematico. Es mi daily post de
>>> hoy:
>>>
>>> http://ajlopez.zoomblog.com/archivo/2012/06/25/un-problema-de-Kolmogorov-1.html
>>>
>>> Nos leemos!
>>>
>>> Angel "Java" Lopez
>>> http://ajlopez.wordpress.com
>>> http://twitter.com/ajlopez
>>>
>>>
>>>
>> Saludos!
>>
>>
>>
>  
>



--
============================================
Germán S. Arduino  <gsa @ arsol.net>   Twitter: garduino
Arduino Software  http://www.arduinosoftware.com
PasswordsPro  http://www.passwordspro.com
greensecure.blogspot.com germanarduino.blogpost.com
============================================