Hola Gente:
Estoy tratando de portar paquetes q Cuis, en principio algunos de soporte de web. Veo que muchos de ellos usan la clase TimeStamp de Pharo, que en Cuis no está. En general usan TimeStamp now que devuelve algo así: 5 May 2012 8:25:40 pm En Cuis tenemos DateAndTime por ejemplo, y también Date y Time. Una aproximación es Date dateAndTimeNow que devuelve un array de dos elementos, compuesto por Date y Time, algo así: #(5 May 2012 8:25:40 pm). La pregunta es si hay alguna forma recomendada de implementar TimeStamp de manera que haga lo que hace en Pharo para hacer esa capa de compatibilidad con Pharo para poder portar (y luego mantener actualizados) paquetes de Pharo. Yo estaba pensando en hacer algún método #asTimeStamp o similar. Bueno, es todo, gracias y 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 ============================================ |
> Hola Gente:
> > > Estoy tratando de portar paquetes q Cuis, en principio algunos de soporte de > web. > > Veo que muchos de ellos usan la clase TimeStamp de Pharo, que en Cuis no está. > En general usan TimeStamp now que devuelve algo así: 5 May 2012 8:25:40 pm > > En Cuis tenemos DateAndTime por ejemplo, y también Date y Time. Una > aproximación es Date dateAndTimeNow que devuelve un array de dos elementos, > compuesto por Date y Time, algo así: #(5 May 2012 8:25:40 pm). > > La pregunta es si hay alguna forma recomendada de implementar TimeStamp de > manera que haga lo que hace en Pharo para hacer esa capa de compatibilidad con > Pharo para poder portar (y luego mantener actualizados) paquetes de Pharo. > > Yo estaba pensando en hacer algún método #asTimeStamp o similar. > > Bueno, es todo, gracias y saludos. En mi engendro denominado Cuis3.1r.11, que deriva del Cuis reducido, para tener WebClient y HV2 con este script de carga | loader | loader _ CodeLoader new. loader baseURL:'http://www.squeaksource.com/Ladrillos/'. loader installLastMonticelloFor: #('DynamicBindings' 'KomServices' 'KomHttpServer' 'HTML' 'HV' );installSourceFiles. Necesite TimeStamp (que saque de Squeak) Abriendo la imagen averiguo: TimeStamp othersClassList a Set(#Time #ReadStream #Character #String #DateAndTime #Date #Array) O sea tendrias que tener esas clases en Cuis y tratar de que la cadena de dependencias no se te haga gigantesca. Para importar código de otro fork (Squeak, Pharo) 1. Todo a manopla. Tener las dos imagenes lado a lado, A cada Dnu importar lo que se necesite. 2. Via TCP , estrategia madre - hija. Tener las dos imagenes lado a lado, A cada Dnu importar lo que se necesite. 3. Via DNU recursivo desde el repositorio de clases. Asi es la estrategia del SqueakLight, que habria que adaptar a Cuis. El repositorio para Pharo 1.4 ya esta creado, hablamos de esto por privada y me parece haber mandado algo aqui. No creo que nada de esto le guste a Juan, porque el Cuis terminaria irremediablemente sucio. Otro tema relacionado es la importación de objetos. Tambien mande aqui en su momento como hacerlo via ReferenceStreams. Los objetos sencillos se importan sin problemas. Asi pude meter los casi 14 Mb de los objetos del swiki provenientes de Squeak (te acordas ?) Estoy en la compu hasta las 9 , si alguien quiere conectarse a Skype en el chat público Bar SqueakRos o privado. Edgar |
Hola Edgar!
Hoy dormí hasta más tarde....jejeje, estaba fusilado.....pero como dijiste que sab y dom no te ibas a levantar temprano, yo tampoco aparecí :) Si, comprendo lo que decís, yo estoy también trabajando con las dos imágenes abiertas, pero apuntaba a que sólo traer las clases con toda su cadena de dependencias es medio complicado y, como vos decís, ensucia la imagen. La idea (algo que también hablamos con Juan) es que para cada paquete, por ejemplo Cuis-Sport haya un paquete Cuis-Sport-Compatibility-Layer (o algo así) que incorpore todo lo que el paquete original necesita para funcionar en Cuis. De esta manera uno queda protegido antes los cambios, cuando aparece una nueva versión de Sport, uno primero instala (o adapta según sea necesario) el compatibility layer y después instala el nuevo Sport sin problemas y SIN ensuciar la imagen original. Por eso con lo de TimeStamp, yo preguntaba si no hay alguna forma (a lo mejor ya está y no la vi) de que exista un sólo método por ahí (en una categoría *Cuis-Sport-CLayer) que devuelva lo mismo que TimeStamp now (lo único que vi devuelve un array de dos elementos, Date y Time). Estoy dando vueltas con estas cosas porque quiero meter algunas cosas de web en Cuis, Swazoo e Iliad para empezar. Bueno, es todo, saludos! El 6 de mayo de 2012 07:32, Edgar J. De Cleene <[hidden email]>escribió: > ** > > > > Hola Gente: > > > > > > Estoy tratando de portar paquetes q Cuis, en principio algunos de > soporte de > > web. > > > > Veo que muchos de ellos usan la clase TimeStamp de Pharo, que en Cuis no > está. > > En general usan TimeStamp now que devuelve algo así: 5 May 2012 8:25:40 > pm > > > > En Cuis tenemos DateAndTime por ejemplo, y también Date y Time. Una > > aproximación es Date dateAndTimeNow que devuelve un array de dos > elementos, > > compuesto por Date y Time, algo así: #(5 May 2012 8:25:40 pm). > > > > La pregunta es si hay alguna forma recomendada de implementar TimeStamp > de > > manera que haga lo que hace en Pharo para hacer esa capa de > compatibilidad con > > Pharo para poder portar (y luego mantener actualizados) paquetes de > Pharo. > > > > Yo estaba pensando en hacer algún método #asTimeStamp o similar. > > > > Bueno, es todo, gracias y saludos. > > En mi engendro denominado Cuis3.1r.11, que deriva del Cuis reducido, para > tener WebClient y HV2 con este script de carga > > | loader | > loader _ CodeLoader new. > loader baseURL:'http://www.squeaksource.com/Ladrillos/'. > loader installLastMonticelloFor: #('DynamicBindings' 'KomServices' > 'KomHttpServer' 'HTML' 'HV' );installSourceFiles. > > Necesite TimeStamp (que saque de Squeak) > > Abriendo la imagen averiguo: > > TimeStamp othersClassList a Set(#Time #ReadStream #Character #String > #DateAndTime #Date #Array) > > O sea tendrias que tener esas clases en Cuis y tratar de que la cadena de > dependencias no se te haga gigantesca. > > Para importar código de otro fork (Squeak, Pharo) > > 1. Todo a manopla. Tener las dos imagenes lado a lado, A cada Dnu importar > lo que se necesite. > > 2. Via TCP , estrategia madre - hija. Tener las dos imagenes lado a lado, A > cada Dnu importar lo que se necesite. > > 3. Via DNU recursivo desde el repositorio de clases. Asi es la estrategia > del SqueakLight, que habria que adaptar a Cuis. > El repositorio para Pharo 1.4 ya esta creado, hablamos de esto por privada > y > me parece haber mandado algo aqui. > > No creo que nada de esto le guste a Juan, porque el Cuis terminaria > irremediablemente sucio. > > Otro tema relacionado es la importación de objetos. > Tambien mande aqui en su momento como hacerlo via ReferenceStreams. > > Los objetos sencillos se importan sin problemas. > Asi pude meter los casi 14 Mb de los objetos del swiki provenientes de > Squeak (te acordas ?) > > Estoy en la compu hasta las 9 , si alguien quiere conectarse a Skype en el > chat público Bar SqueakRos o privado. > > Edgar > > > |
In reply to this post by garduino
Que haces German,
yo uso mas o menos esta regla cuando se trata de temas de compatibilidad entre smalltalks. Sea A imagen de Smalltalk "original" y B imagen de Smalltalk al que quiero pasar cosas de A (o sea, A = Pharo, B = Cuis) 1) Dado ClassX en A y B, y existe mensaje M en ClassX de A pero no en ClassX de B => extender ClassX de B con M (no es tu caso) 2) Dado ClassX en A pero no en B, entonces: i) Lo que estoy migrando es mio? Si es asi, uso una capa de abstraccion que modela las diferencias entre los Smalltalks y modifico mi codigo para que la use (ver mas abajo) ii) Lo que estoy migrando no es mio o no lo quiero modificar, entonces creo ClassX en B con el protocolo necesario para que funcione lo que migro. Respecto de la capa de abstraccion, lo que hago es tener una clase SmalltalkImplementation con subclases para cada implementacion y luego por medio de metacello (o lo que sea) se carga el conjunto correcto dependiendo del ambiente y se inicializa la var CurrentSmalltalkImplementation con la instancia de la subclase correcta. Luego en cualquier lugar envio mensajes a dicho objeto. Por ejemplo: SmalltalkImplementation PharoImplementation GemStoneImplementation PharoImplementation>>reducedConflictBag ^Bag GemStoneImplementation>>reducecConflictBag ^RcBag Cuando lo uso, es simplemente: aBag := CurrentSmalltalkImplementation reducedConflictBag new. Donde CurrentSmalltlalkImplementation sera instancia de alguna subclase de SmalltalkImplementation En tu caso, me parece que conviene hacer 2.ii Espero sirva Hernan. 2012/5/5 Germán Arduino <[hidden email]> > ** > > > Hola Gente: > > Estoy tratando de portar paquetes q Cuis, en principio algunos de soporte > de web. > > Veo que muchos de ellos usan la clase TimeStamp de Pharo, que en Cuis no > está. En general usan TimeStamp now que devuelve algo así: 5 May 2012 > 8:25:40 pm > > En Cuis tenemos DateAndTime por ejemplo, y también Date y Time. Una > aproximación es Date dateAndTimeNow que devuelve un array de dos elementos, > compuesto por Date y Time, algo así: #(5 May 2012 8:25:40 pm). > > La pregunta es si hay alguna forma recomendada de implementar TimeStamp de > manera que haga lo que hace en Pharo para hacer esa capa de compatibilidad > con Pharo para poder portar (y luego mantener actualizados) paquetes de > Pharo. > > Yo estaba pensando en hacer algún método #asTimeStamp o similar. > > Bueno, es todo, gracias y 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 > ============================================ > > > -- *Hernán Wilkinson Agile Software Development, Teaching & Coaching* *Phone: +54 - 011 - 4311 - 8404** Mobile: +54 - 911 - 4470 - 7207 email: [hidden email] site: http://www.10Pines.com <http://www.10pines.com/>* Address: Paraguay 523, Floor 7 N, Buenos Aires, Argentina |
Hola gente,
yo en mi caso hago exactamente el punto 2 que menciona Hernán. Va muy bien de esa manera! Y ese pattern lo uso no sólo para polimorfismo entre distintos dialectos Smalltalk, sino que lo aplico en distintas situaciones, por ejemplo, entre distintas implementaciones de nuestros productos en distintos cliuentes, también en el framework de mapeo a relacional tengo: ORPDialect ORPOracleDialect ORPPostgreSQLDialect ORPSQLServerDialect .... Saludos, Guillermo El 8 de mayo de 2012 08:50, Hernan Wilkinson <[hidden email]>escribió: > ** > > > Que haces German, > yo uso mas o menos esta regla cuando se trata de temas de compatibilidad > entre smalltalks. Sea A imagen de Smalltalk "original" y B imagen de > Smalltalk al que quiero pasar cosas de A (o sea, A = Pharo, B = Cuis) > > 1) Dado ClassX en A y B, y existe mensaje M en ClassX de A pero no en > ClassX de B => extender ClassX de B con M (no es tu caso) > 2) Dado ClassX en A pero no en B, entonces: > i) Lo que estoy migrando es mio? Si es asi, uso una capa de > abstraccion que modela las diferencias entre los Smalltalks y modifico mi > codigo para que la use (ver mas abajo) > ii) Lo que estoy migrando no es mio o no lo quiero modificar, > entonces creo ClassX en B con el protocolo necesario para que funcione lo > que migro. > > Respecto de la capa de abstraccion, lo que hago es tener una clase > SmalltalkImplementation con subclases para cada implementacion y luego por > medio de metacello (o lo que sea) se carga el conjunto correcto dependiendo > del ambiente y se inicializa la var CurrentSmalltalkImplementation con la > instancia de la subclase correcta. Luego en cualquier lugar envio mensajes > a dicho objeto. Por ejemplo: > > SmalltalkImplementation > PharoImplementation > GemStoneImplementation > > PharoImplementation>>reducedConflictBag > ^Bag > > GemStoneImplementation>>reducecConflictBag > ^RcBag > > Cuando lo uso, es simplemente: > > aBag := CurrentSmalltalkImplementation reducedConflictBag new. > > Donde CurrentSmalltlalkImplementation sera instancia de alguna subclase de > SmalltalkImplementation > > En tu caso, me parece que conviene hacer 2.ii > > Espero sirva > Hernan. > > > 2012/5/5 Germán Arduino <[hidden email]> > >> ** >> >> >> Hola Gente: >> >> Estoy tratando de portar paquetes q Cuis, en principio algunos de soporte >> de web. >> >> Veo que muchos de ellos usan la clase TimeStamp de Pharo, que en Cuis no >> está. En general usan TimeStamp now que devuelve algo así: 5 May 2012 >> 8:25:40 pm >> >> En Cuis tenemos DateAndTime por ejemplo, y también Date y Time. Una >> aproximación es Date dateAndTimeNow que devuelve un array de dos elementos, >> compuesto por Date y Time, algo así: #(5 May 2012 8:25:40 pm). >> >> La pregunta es si hay alguna forma recomendada de implementar TimeStamp >> de manera que haga lo que hace en Pharo para hacer esa capa de >> compatibilidad con Pharo para poder portar (y luego mantener actualizados) >> paquetes de Pharo. >> >> Yo estaba pensando en hacer algún método #asTimeStamp o similar. >> >> Bueno, es todo, gracias y 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 >> ============================================ >> >> > > > -- > *Hernán Wilkinson > Agile Software Development, Teaching & Coaching* > *Phone: +54 - 011 - 4311 - 8404** > Mobile: +54 - 911 - 4470 - 7207 > email: [hidden email] > site: http://www.10Pines.com <http://www.10pines.com/>* > Address: Paraguay 523, Floor 7 N, Buenos Aires, Argentina > > > |
El 5/8/12 9:40 AM, "Guillermo Sapaya" <[hidden email]> escribió: > > > > > > Hola gente, > yo en mi caso hago exactamente el punto 2 que menciona Hernán. Va muy bien de > esa manera! Y ese pattern lo uso no sólo para polimorfismo entre distintos > dialectos Smalltalk, sino que lo aplico en distintas situaciones, por ejemplo, > entre distintas implementaciones de nuestros productos en distintos cliuentes, > también en el framework de mapeo a relacional tengo: > > ORPDialect > ORPOracleDialect > ORPPostgreSQLDialect > ORPSQLServerDialect > .... > > Saludos, > Guillermo > > > El 8 de mayo de 2012 08:50, Hernan Wilkinson <[hidden email]> > escribió: >> >> >> >> >> >> Que haces German, >> >> yo uso mas o menos esta regla cuando se trata de temas de compatibilidad >> entre smalltalks. Sea A imagen de Smalltalk "original" y B imagen de >> Smalltalk al que quiero pasar cosas de A (o sea, A = Pharo, B = Cuis) >> >> 1) Dado ClassX en A y B, y existe mensaje M en ClassX de A pero no en ClassX >> de B => extender ClassX de B con M (no es tu caso) >> 2) Dado ClassX en A pero no en B, entonces: >> i) Lo que estoy migrando es mio? Si es asi, uso una capa de abstraccion >> que modela las diferencias entre los Smalltalks y modifico mi codigo para que >> la use (ver mas abajo) >> ii) Lo que estoy migrando no es mio o no lo quiero modificar, entonces >> creo ClassX en B con el protocolo necesario para que funcione lo que migro. >> >> Respecto de la capa de abstraccion, lo que hago es tener una clase >> SmalltalkImplementation con subclases para cada implementacion y luego por >> medio de metacello (o lo que sea) se carga el conjunto correcto dependiendo >> del ambiente y se inicializa la var CurrentSmalltalkImplementation con la >> instancia de la subclase correcta. Luego en cualquier lugar envio mensajes a >> dicho objeto. Por ejemplo: >> >> SmalltalkImplementation >> PharoImplementation >> GemStoneImplementation >> >> PharoImplementation>>reducedConflictBag >> ^Bag >> >> GemStoneImplementation>>reducecConflictBag >> ^RcBag >> >> Cuando lo uso, es simplemente: >> >> aBag := CurrentSmalltalkImplementation reducedConflictBag new. >> >> Donde CurrentSmalltlalkImplementation sera instancia de alguna subclase de >> SmalltalkImplementation >> >> En tu caso, me parece que conviene hacer 2.ii >> >> Espero sirva >> Hernan. >> >> >> 2012/5/5 Germán Arduino <[hidden email]> >>> >>> >>> >>> >>> >>> Hola Gente: >>> >>> >>> Estoy tratando de portar paquetes q Cuis, en principio algunos de soporte de >>> web. >>> >>> Veo que muchos de ellos usan la clase TimeStamp de Pharo, que en Cuis no >>> está. En general usan TimeStamp now que devuelve algo así: 5 May 2012 >>> 8:25:40 pm >>> >>> En Cuis tenemos DateAndTime por ejemplo, y también Date y Time. Una >>> aproximación es Date dateAndTimeNow que devuelve un array de dos elementos, >>> compuesto por Date y Time, algo así: #(5 May 2012 8:25:40 pm). >>> >>> La pregunta es si hay alguna forma recomendada de implementar TimeStamp de >>> manera que haga lo que hace en Pharo para hacer esa capa de compatibilidad >>> con Pharo para poder portar (y luego mantener actualizados) paquetes de >>> Pharo. >>> >>> Yo estaba pensando en hacer algún método #asTimeStamp o similar. >>> >>> Bueno, es todo, gracias y saludos. Guillermo: Me olvide de darte la bienvenida cuando me llego la notificación de tu suscripción. Otro gran aporte al Bar. Alumnos: Atentísimos a los mails de Guillermo , no solo sabe sino que tal vez en un futuro tenga trabajo para ustedes. Edgar |
Hola Hernán, Guillermo, Edgar, gente de la lista!
La verdad que es reconfortante que este lugar cálido que creó Edgar para compartir un poco de todo, Smalltalk y la vida misma, tenga más participantes y movimiento. Sin excluir a las otras listas, por supuesto. Bienvenidos los aportes de todos! y gracias a todos! Yendo a los comentarios de Hernán y Guillermo: El punto 1 ocurre varias veces, hasta ahora con cosas muy simples como el método #alphabet de la clase Character y similares, hasta ahora solo lo agregué en el paquete perteneciendo a la categoría *Paquete ya que Cuis lo identifica como parte del paquete (PackageInfo). Me gustó la idea de 2.i, para tener muy en cuenta, me parece piola! Respecto de 2.ii) en eso estuve dando vueltas, exactamente así, pero con la salvedad de crear el protocolo mínimo indispensable, pero en algunos casos (como las familias de Date & Time) me encuentro con que el mínimo es realmente importante, por eso se me ocurrió lo que mencioné hacer algún "engendro" como diría uno que yo sé, que haga eso solito, pero si.....es más sucio..... Gracias gente por las ideas y aportes! Germán. El 8 de mayo de 2012 16:07, Edgar De Cleene <[hidden email]>escribió: > ** > > > > > El 5/8/12 9:40 AM, "Guillermo Sapaya" <[hidden email]> escribió: > > > > > > > > > > > > > > Hola gente, > > yo en mi caso hago exactamente el punto 2 que menciona Hernán. Va muy > bien de > > esa manera! Y ese pattern lo uso no sólo para polimorfismo entre > distintos > > dialectos Smalltalk, sino que lo aplico en distintas situaciones, por > ejemplo, > > entre distintas implementaciones de nuestros productos en distintos > cliuentes, > > también en el framework de mapeo a relacional tengo: > > > > ORPDialect > > ORPOracleDialect > > ORPPostgreSQLDialect > > ORPSQLServerDialect > > .... > > > > Saludos, > > Guillermo > > > > > > El 8 de mayo de 2012 08:50, Hernan Wilkinson <[hidden email] > > > > escribió: > >> > >> > >> > >> > >> > >> Que haces German, > >> > >> yo uso mas o menos esta regla cuando se trata de temas de > compatibilidad > >> entre smalltalks. Sea A imagen de Smalltalk "original" y B imagen de > >> Smalltalk al que quiero pasar cosas de A (o sea, A = Pharo, B = Cuis) > >> > >> 1) Dado ClassX en A y B, y existe mensaje M en ClassX de A pero no en > ClassX > >> de B => extender ClassX de B con M (no es tu caso) > >> 2) Dado ClassX en A pero no en B, entonces: > >> i) Lo que estoy migrando es mio? Si es asi, uso una capa de > abstraccion > >> que modela las diferencias entre los Smalltalks y modifico mi codigo > para que > >> la use (ver mas abajo) > >> ii) Lo que estoy migrando no es mio o no lo quiero modificar, > entonces > >> creo ClassX en B con el protocolo necesario para que funcione lo que > migro. > >> > >> Respecto de la capa de abstraccion, lo que hago es tener una clase > >> SmalltalkImplementation con subclases para cada implementacion y luego > por > >> medio de metacello (o lo que sea) se carga el conjunto correcto > dependiendo > >> del ambiente y se inicializa la var CurrentSmalltalkImplementation con > la > >> instancia de la subclase correcta. Luego en cualquier lugar envio > mensajes a > >> dicho objeto. Por ejemplo: > >> > >> SmalltalkImplementation > >> PharoImplementation > >> GemStoneImplementation > >> > >> PharoImplementation>>reducedConflictBag > >> ^Bag > >> > >> GemStoneImplementation>>reducecConflictBag > >> ^RcBag > >> > >> Cuando lo uso, es simplemente: > >> > >> aBag := CurrentSmalltalkImplementation reducedConflictBag new. > >> > >> Donde CurrentSmalltlalkImplementation sera instancia de alguna subclase > de > >> SmalltalkImplementation > >> > >> En tu caso, me parece que conviene hacer 2.ii > >> > >> Espero sirva > >> Hernan. > >> > >> > >> 2012/5/5 Germán Arduino <[hidden email]> > >>> > >>> > >>> > >>> > >>> > >>> Hola Gente: > >>> > >>> > >>> Estoy tratando de portar paquetes q Cuis, en principio algunos de > soporte de > >>> web. > >>> > >>> Veo que muchos de ellos usan la clase TimeStamp de Pharo, que en Cuis > no > >>> está. En general usan TimeStamp now que devuelve algo así: 5 May 2012 > >>> 8:25:40 pm > >>> > >>> En Cuis tenemos DateAndTime por ejemplo, y también Date y Time. Una > >>> aproximación es Date dateAndTimeNow que devuelve un array de dos > elementos, > >>> compuesto por Date y Time, algo así: #(5 May 2012 8:25:40 pm). > >>> > >>> La pregunta es si hay alguna forma recomendada de implementar > TimeStamp de > >>> manera que haga lo que hace en Pharo para hacer esa capa de > compatibilidad > >>> con Pharo para poder portar (y luego mantener actualizados) paquetes de > >>> Pharo. > >>> > >>> Yo estaba pensando en hacer algún método #asTimeStamp o similar. > >>> > >>> Bueno, es todo, gracias y saludos. > > Guillermo: > > Me olvide de darte la bienvenida cuando me llego la notificación de tu > suscripción. > Otro gran aporte al Bar. > > Alumnos: > Atentísimos a los mails de Guillermo , no solo sabe sino que tal vez en un > futuro tenga trabajo para ustedes. > > Edgar > > > |
In reply to this post by Edgar De Cleene
El 8 de mayo de 2012 16:07, Edgar De Cleene <[hidden email]> escribió:
Guillermo: Me olvide de darte la bienvenida cuando me llego la notificación de tu suscripción. Otro gran aporte al Bar. Gracias Edgar! Estuve husmeando los mails y se ve que han formado un excelente grupo! Felicitaciones! En todo lo que se pueda aportar o dar una mano cuenten conmigo! Saludos, Guillermo El 8 de mayo de 2012 16:07, Edgar De Cleene <[hidden email]>escribió: > ** > > > > > El 5/8/12 9:40 AM, "Guillermo Sapaya" <[hidden email]> escribió: > > > > > > > > > > > > > Hola gente, > > yo en mi caso hago exactamente el punto 2 que menciona Hernán. Va muy > bien de > > esa manera! Y ese pattern lo uso no sólo para polimorfismo entre > distintos > > dialectos Smalltalk, sino que lo aplico en distintas situaciones, por > ejemplo, > > entre distintas implementaciones de nuestros productos en distintos > cliuentes, > > también en el framework de mapeo a relacional tengo: > > > > ORPDialect > > ORPOracleDialect > > ORPPostgreSQLDialect > > ORPSQLServerDialect > > .... > > > > Saludos, > > Guillermo > > > > > > El 8 de mayo de 2012 08:50, Hernan Wilkinson <[hidden email] > > > > escribió: > >> > >> > >> > >> > >> > >> Que haces German, > >> > >> yo uso mas o menos esta regla cuando se trata de temas de > compatibilidad > >> entre smalltalks. Sea A imagen de Smalltalk "original" y B imagen de > >> Smalltalk al que quiero pasar cosas de A (o sea, A = Pharo, B = Cuis) > >> > >> 1) Dado ClassX en A y B, y existe mensaje M en ClassX de A pero no en > ClassX > >> de B => extender ClassX de B con M (no es tu caso) > >> 2) Dado ClassX en A pero no en B, entonces: > >> i) Lo que estoy migrando es mio? Si es asi, uso una capa de > abstraccion > >> que modela las diferencias entre los Smalltalks y modifico mi codigo > para que > >> la use (ver mas abajo) > >> ii) Lo que estoy migrando no es mio o no lo quiero modificar, > entonces > >> creo ClassX en B con el protocolo necesario para que funcione lo que > migro. > >> > >> Respecto de la capa de abstraccion, lo que hago es tener una clase > >> SmalltalkImplementation con subclases para cada implementacion y luego > por > >> medio de metacello (o lo que sea) se carga el conjunto correcto > dependiendo > >> del ambiente y se inicializa la var CurrentSmalltalkImplementation con > la > >> instancia de la subclase correcta. Luego en cualquier lugar envio > mensajes a > >> dicho objeto. Por ejemplo: > >> > >> SmalltalkImplementation > >> PharoImplementation > >> GemStoneImplementation > >> > >> PharoImplementation>>reducedConflictBag > >> ^Bag > >> > >> GemStoneImplementation>>reducecConflictBag > >> ^RcBag > >> > >> Cuando lo uso, es simplemente: > >> > >> aBag := CurrentSmalltalkImplementation reducedConflictBag new. > >> > >> Donde CurrentSmalltlalkImplementation sera instancia de alguna subclase > de > >> SmalltalkImplementation > >> > >> En tu caso, me parece que conviene hacer 2.ii > >> > >> Espero sirva > >> Hernan. > >> > >> > >> 2012/5/5 Germán Arduino <[hidden email]> > >>> > >>> > >>> > >>> > >>> > >>> Hola Gente: > >>> > >>> > >>> Estoy tratando de portar paquetes q Cuis, en principio algunos de > soporte de > >>> web. > >>> > >>> Veo que muchos de ellos usan la clase TimeStamp de Pharo, que en Cuis > no > >>> está. En general usan TimeStamp now que devuelve algo así: 5 May 2012 > >>> 8:25:40 pm > >>> > >>> En Cuis tenemos DateAndTime por ejemplo, y también Date y Time. Una > >>> aproximación es Date dateAndTimeNow que devuelve un array de dos > elementos, > >>> compuesto por Date y Time, algo así: #(5 May 2012 8:25:40 pm). > >>> > >>> La pregunta es si hay alguna forma recomendada de implementar > TimeStamp de > >>> manera que haga lo que hace en Pharo para hacer esa capa de > compatibilidad > >>> con Pharo para poder portar (y luego mantener actualizados) paquetes de > >>> Pharo. > >>> > >>> Yo estaba pensando en hacer algún método #asTimeStamp o similar. > >>> > >>> Bueno, es todo, gracias y saludos. > > Guillermo: > > Me olvide de darte la bienvenida cuando me llego la notificación de tu > suscripción. > Otro gran aporte al Bar. > > Alumnos: > Atentísimos a los mails de Guillermo , no solo sabe sino que tal vez en un > futuro tenga trabajo para ustedes. > > Edgar > > > |
Hola Guillermo!
Sos (vos y todos los que quieran sumarse) más que bienvenidos al Bar! Y recuerden que se puede hablar de cualquier cosa, de lo que a cada uno le interese........ Ah y una cosa importante, estamos usando (gracias Juan!) esta lista como lista de Cuis en español! Saludos. El 8 de mayo de 2012 20:44, Guillermo Sapaya <[hidden email]> escribió: > ** > > > El 8 de mayo de 2012 16:07, Edgar De Cleene <[hidden email]> escribió: > > Guillermo: > > Me olvide de darte la bienvenida cuando me llego la notificación de tu > suscripción. > Otro gran aporte al Bar. > > Gracias Edgar! > Estuve husmeando los mails y se ve que han formado un excelente grupo! > Felicitaciones! > En todo lo que se pueda aportar o dar una mano cuenten conmigo! > > Saludos, > Guillermo > > > El 8 de mayo de 2012 16:07, Edgar De Cleene <[hidden email]>escribió: > >> ** >> >> >> >> >> El 5/8/12 9:40 AM, "Guillermo Sapaya" <[hidden email]> escribió: >> >> > >> > >> > >> > >> > >> > Hola gente, >> > yo en mi caso hago exactamente el punto 2 que menciona Hernán. Va muy >> bien de >> > esa manera! Y ese pattern lo uso no sólo para polimorfismo entre >> distintos >> > dialectos Smalltalk, sino que lo aplico en distintas situaciones, por >> ejemplo, >> > entre distintas implementaciones de nuestros productos en distintos >> cliuentes, >> > también en el framework de mapeo a relacional tengo: >> > >> > ORPDialect >> > ORPOracleDialect >> > ORPPostgreSQLDialect >> > ORPSQLServerDialect >> > .... >> > >> > Saludos, >> > Guillermo >> > >> > >> > El 8 de mayo de 2012 08:50, Hernan Wilkinson < >> [hidden email]> >> > escribió: >> >> >> >> >> >> >> >> >> >> >> >> Que haces German, >> >> >> >> yo uso mas o menos esta regla cuando se trata de temas de >> compatibilidad >> >> entre smalltalks. Sea A imagen de Smalltalk "original" y B imagen de >> >> Smalltalk al que quiero pasar cosas de A (o sea, A = Pharo, B = Cuis) >> >> >> >> 1) Dado ClassX en A y B, y existe mensaje M en ClassX de A pero no en >> ClassX >> >> de B => extender ClassX de B con M (no es tu caso) >> >> 2) Dado ClassX en A pero no en B, entonces: >> >> i) Lo que estoy migrando es mio? Si es asi, uso una capa de >> abstraccion >> >> que modela las diferencias entre los Smalltalks y modifico mi codigo >> para que >> >> la use (ver mas abajo) >> >> ii) Lo que estoy migrando no es mio o no lo quiero modificar, >> entonces >> >> creo ClassX en B con el protocolo necesario para que funcione lo que >> migro. >> >> >> >> Respecto de la capa de abstraccion, lo que hago es tener una clase >> >> SmalltalkImplementation con subclases para cada implementacion y luego >> por >> >> medio de metacello (o lo que sea) se carga el conjunto correcto >> dependiendo >> >> del ambiente y se inicializa la var CurrentSmalltalkImplementation con >> la >> >> instancia de la subclase correcta. Luego en cualquier lugar envio >> mensajes a >> >> dicho objeto. Por ejemplo: >> >> >> >> SmalltalkImplementation >> >> PharoImplementation >> >> GemStoneImplementation >> >> >> >> PharoImplementation>>reducedConflictBag >> >> ^Bag >> >> >> >> GemStoneImplementation>>reducecConflictBag >> >> ^RcBag >> >> >> >> Cuando lo uso, es simplemente: >> >> >> >> aBag := CurrentSmalltalkImplementation reducedConflictBag new. >> >> >> >> Donde CurrentSmalltlalkImplementation sera instancia de alguna >> subclase de >> >> SmalltalkImplementation >> >> >> >> En tu caso, me parece que conviene hacer 2.ii >> >> >> >> Espero sirva >> >> Hernan. >> >> >> >> >> >> 2012/5/5 Germán Arduino <[hidden email]> >> >>> >> >>> >> >>> >> >>> >> >>> >> >>> Hola Gente: >> >>> >> >>> >> >>> Estoy tratando de portar paquetes q Cuis, en principio algunos de >> soporte de >> >>> web. >> >>> >> >>> Veo que muchos de ellos usan la clase TimeStamp de Pharo, que en Cuis >> no >> >>> está. En general usan TimeStamp now que devuelve algo así: 5 May 2012 >> >>> 8:25:40 pm >> >>> >> >>> En Cuis tenemos DateAndTime por ejemplo, y también Date y Time. Una >> >>> aproximación es Date dateAndTimeNow que devuelve un array de dos >> elementos, >> >>> compuesto por Date y Time, algo así: #(5 May 2012 8:25:40 pm). >> >>> >> >>> La pregunta es si hay alguna forma recomendada de implementar >> TimeStamp de >> >>> manera que haga lo que hace en Pharo para hacer esa capa de >> compatibilidad >> >>> con Pharo para poder portar (y luego mantener actualizados) paquetes >> de >> >>> Pharo. >> >>> >> >>> Yo estaba pensando en hacer algún método #asTimeStamp o similar. >> >>> >> >>> Bueno, es todo, gracias y saludos. >> >> Guillermo: >> >> Me olvide de darte la bienvenida cuando me llego la notificación de tu >> suscripción. >> Otro gran aporte al Bar. >> >> Alumnos: >> Atentísimos a los mails de Guillermo , no solo sabe sino que tal vez en un >> futuro tenga trabajo para ustedes. >> >> Edgar >> >> > > |
In reply to this post by hernan.wilkinson
otra idea que me olvide de comentar...
Si ClassX en A en polimorfica con ClassY en B, entonces creo una variable global en B que sea ClassX que referencie a ClassY Por ejemplo, si DateTime es polimorfica para lo que se necesita con Timespan, entonces en cuis crearia una variable globar Timespan que referencie a DateTime y listo... Luego lo que no es polimorfico lo agregaria como extensión de DateTime 2012/5/8 Hernan Wilkinson <[hidden email]> > Que haces German, > yo uso mas o menos esta regla cuando se trata de temas de compatibilidad > entre smalltalks. Sea A imagen de Smalltalk "original" y B imagen de > Smalltalk al que quiero pasar cosas de A (o sea, A = Pharo, B = Cuis) > > 1) Dado ClassX en A y B, y existe mensaje M en ClassX de A pero no en > ClassX de B => extender ClassX de B con M (no es tu caso) > 2) Dado ClassX en A pero no en B, entonces: > i) Lo que estoy migrando es mio? Si es asi, uso una capa de > abstraccion que modela las diferencias entre los Smalltalks y modifico mi > codigo para que la use (ver mas abajo) > ii) Lo que estoy migrando no es mio o no lo quiero modificar, > entonces creo ClassX en B con el protocolo necesario para que funcione lo > que migro. > > Respecto de la capa de abstraccion, lo que hago es tener una clase > SmalltalkImplementation con subclases para cada implementacion y luego por > medio de metacello (o lo que sea) se carga el conjunto correcto dependiendo > del ambiente y se inicializa la var CurrentSmalltalkImplementation con la > instancia de la subclase correcta. Luego en cualquier lugar envio mensajes > a dicho objeto. Por ejemplo: > > SmalltalkImplementation > PharoImplementation > GemStoneImplementation > > PharoImplementation>>reducedConflictBag > ^Bag > > GemStoneImplementation>>reducecConflictBag > ^RcBag > > Cuando lo uso, es simplemente: > > aBag := CurrentSmalltalkImplementation reducedConflictBag new. > > Donde CurrentSmalltlalkImplementation sera instancia de alguna subclase de > SmalltalkImplementation > > En tu caso, me parece que conviene hacer 2.ii > > Espero sirva > Hernan. > > > 2012/5/5 Germán Arduino <[hidden email]> > >> ** >> >> >> Hola Gente: >> >> Estoy tratando de portar paquetes q Cuis, en principio algunos de soporte >> de web. >> >> Veo que muchos de ellos usan la clase TimeStamp de Pharo, que en Cuis no >> está. En general usan TimeStamp now que devuelve algo así: 5 May 2012 >> 8:25:40 pm >> >> En Cuis tenemos DateAndTime por ejemplo, y también Date y Time. Una >> aproximación es Date dateAndTimeNow que devuelve un array de dos elementos, >> compuesto por Date y Time, algo así: #(5 May 2012 8:25:40 pm). >> >> La pregunta es si hay alguna forma recomendada de implementar TimeStamp >> de manera que haga lo que hace en Pharo para hacer esa capa de >> compatibilidad con Pharo para poder portar (y luego mantener actualizados) >> paquetes de Pharo. >> >> Yo estaba pensando en hacer algún método #asTimeStamp o similar. >> >> Bueno, es todo, gracias y 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 >> ============================================ >> >> >> > > > > -- > *Hernán Wilkinson > Agile Software Development, Teaching & Coaching* > *Phone: +54 - 011 - 4311 - 8404** > Mobile: +54 - 911 - 4470 - 7207 > email: [hidden email] > site: http://www.10Pines.com <http://www.10pines.com/>* > Address: Paraguay 523, Floor 7 N, Buenos Aires, Argentina > > -- *Hernán Wilkinson Agile Software Development, Teaching & Coaching* *Phone: +54 - 011 - 4311 - 8404** Mobile: +54 - 911 - 4470 - 7207 email: [hidden email] site: http://www.10Pines.com <http://www.10pines.com/>* Address: Paraguay 523, Floor 7 N, Buenos Aires, Argentina |
Me gustó esta, jeje, no se me había ocurrido.
Gracias! El 11 de mayo de 2012 15:05, Hernan Wilkinson <[hidden email]>escribió: > ** > > > otra idea que me olvide de comentar... > Si ClassX en A en polimorfica con ClassY en B, entonces creo una variable > global en B que sea ClassX que referencie a ClassY > > Por ejemplo, si DateTime es polimorfica para lo que se necesita con > Timespan, entonces en cuis crearia una variable globar Timespan que > referencie a DateTime y listo... Luego lo que no es polimorfico lo > agregaria como extensión de DateTime > > > > |
In reply to this post by hernan.wilkinson
> otra idea que me olvide de comentar...
> > Si ClassX en A en polimorfica con ClassY en B, entonces creo una variable > global en B que sea ClassX que referencie a ClassY > > Por ejemplo, si DateTime es polimorfica para lo que se necesita con Timespan, > entonces en cuis crearia una variable globar Timespan que referencie a > DateTime y listo... Luego lo que no es polimorfico lo agregaria como extensión > de DateTime Simple y eficiente, tampoco se me habia ocurrido. Edgar |
Free forum by Nabble | Edit this page |