#OtroParaLaListaInterminable
Como ven sigo atentamente lo que pasa en Pharo Alguien sigue WebClient y Zinc como para que tire opinión ? Por ahora necesito mas que eso y algunos ya saben que mis trabajos en progreso son con Kom + HV2 + external .js Meterme con Celeste (va informe aparte) fue por necesidad. Anduvo linda la minicharlita con el ruso ? No sean timidos, a ver si la próxima nos enganchamos con alguien mas ------ Forwarded Message > From: Sven Van Caekenberghe <[hidden email]> > Reply-To: <[hidden email]> > Date: Fri, 9 Dec 2011 16:58:45 +0100 > To: Pharo List <[hidden email]> > Subject: [Pharo-project] Command Line AWS S3 Upload/Download Tool using Pharo > Smalltalk > > Command Line AWS S3 Upload/Download Tool using Pharo Smalltalk > > This is a little story about a tool that I needed and that I finally > implemented in Pharo Smalltalk. I think it is quite nice and elegant and might > be useful to others too. Also, I think it is important to share little hacks > like this to show that what you can do is almost unlimited (as many others > have shown in all kinds of projects). > > This is a bit long, so if you're not interested, please ignore. > > Amazon S3 is a web service interface to store and retrieve any data from > anywhere that is highly scalable, reliable, secure, fast, inexpensive. [ > http://aws.amazon.com/s3/ ] [ http://en.wikipedia.org/wiki/Amazon_S3 ] > > I needed a client to interface with S3 from Linux to store and retrieve > archives and backups up to 100s of Mb large. Although I had already written a > client for this web service in Pharo some time ago, I thought it would not be > good enough for these amounts of data. Furthermore, it had no command line > interface. So I Googled and found s3cmd. This installed easily and quickly in > Ubuntu. Uploading/downloading some small test files went OK. However, > uploading large files gave all kinds of strange errors, even though I was > doing this from EC2 directly on the Amazon network. I don't know Python so I > was not capable of debugging the tool. > > But I do know Smalltalk and had the basic code already. [ Zinc-AWS in > http://www.squeaksource.com/ZincHTTPComponents ] > > What was missing was a solution to do streaming uploads and downloads so that > these huge files would not be taken into memory all at once and a command line > interface. Turns out both were quite easy and elegant to implement. > > I added the following methods to ZnAWSS3Client: > > downloadFile: filename fromBucket: bucket > "Do a streaming download of the key filename from bucket, > creating it as a file with that name in the current directory." > > | streaming response | > streaming := self httpClient streaming. > self httpClient streaming: true. > response := self at: bucket -> filename. > self httpClient streaming: streaming. > response isSuccess ifFalse: [ ^ ZnHttpUnsuccessful signal ]. > FileStream > fileNamed: filename > do: [ :stream | response entity writeOn: stream ]. > ^ response > > The #streaming option of the underlying ZnClient is toggled on for this > request and reset later to its previous value after the request. The #at: does > the actual request, returning a ZnStreamingEntity that is then written to a > file. When a streaming entity writes itself to another stream it will actually > do a streaming copy (one buffer at a time in a loop) for an efficient > download. > > uploadFile: filename withMd5: md5 inBucket: bucket > "Do a streaming upload of the file filename to bucket. > When md5 is notNil, use it to validate the ETag of the response." > > | entry size mimeType fileStream entity response | > entry := FileDirectory root directoryEntryFor: filename. > size := entry fileSize. > mimeType := ZnMimeType forFilenameExtension: (FileDirectory extensionFor: > filename). > fileStream := FileDirectory root readOnlyFileNamed: filename. > mimeType isBinary ifTrue: [ fileStream binary ]. > (entity := ZnStreamingEntity type: mimeType length: size) > stream: fileStream. > self at: bucket -> entry name put: entity. > (md5 notNil and: [ (md5 sameAs: self eTag) not ]) > ifTrue: [ self error: 'Uploaded ETag does not equal supplied MD5' ]. > ^ self httpClient response > > Here the streaming entity is created based on an existing file, the mime type > coming from the extension. Then, #at:put: is used to do the upload. Again, > when the streaming entity writes itself to the socket stream it will actually > do a streaming copy (one buffer at a time in a loop), for an efficient upload. > > Amazon S3 delivers MD5 hashes (ETags) that can be used to check the integrity > of uploads/downloads. ZnAWSS3Client uses these when its #checkIntegrity option > is true using MD5>>#hashMessage:, though not using the streaming option of > HashFunction. Since it would be a lot of work to make that possible, I opted > for externally supplied MD5 hashes using Linux's md5sum utility. > > Next, I took a clean Pharo 1.3 image and the standard Pharo built CogVM and > loaded the following to create a server image: > > Gofer new > squeaksource: 'XMLSupport'; > package: 'ConfigurationOfXMLSupport'; > load. > (Smalltalk at: #ConfigurationOfXMLSupport) perform: #loadDefault. > > Gofer new > squeaksource: 'ZincHTTPComponents'; > package: 'Zinc-HTTP'; > package: 'Zinc-AWS'; > load. > > Gofer new > squeaksource: 'ADayAtTheBeach'; > package: 'NonInteractiveTranscript'; > load. > > The glue code for each tool consists of a Linux shell script and a Smalltalk > startup script. This is a tool for personal use, error handling could be a bit > better regarding wrong invocations. > > #!/bin/bash > echo S3 Download $* > script_home=$(dirname $0) > script_home=$(cd $script_home && pwd) > image=$script_home/pharo-t3.image > script=$script_home/s3-download.st > bucket=$1 > file=$2 > vm=$script_home/bin/CogVM > options="-vm-display-null -vm-sound-null" > echo $vm $options $image $script $bucket $file > $vm $options $image $script $bucket $file > > NonInteractiveTranscript stdout install. > [ > > | args bucket filename | > args := Smalltalk commandLine arguments. > bucket := args first. > filename := args second. > > (ZnAWSS3Client new) > accessKeyId: 'AAAAXXYYZZ5HGQZ77EQ'; > secretAccessKey: 'AAAA+D9n7gabcdefghSfevY/mH6KWsvMAcsjzzzz'; > checkIntegrity: false; > downloadFile: filename fromBucket: bucket; > close. > > Transcript show: 'OK'; cr; endEntry. > > ] on: Error do: [ :exception | > > Smalltalk logError: exception description inContext: exception > signalerContext. > Transcript show: 'FAILED'; cr; endEntry. > > ]. > SmalltalkImage current quitPrimitive. > > #!/bin/bash > echo S3 Upload $* > script_home=$(dirname $0) > script_home=$(cd $script_home && pwd) > image=$script_home/pharo-t3.image > script=$script_home/s3-upload.st > bucket=$1 > file=$2 > file_dir=$(dirname $file) > file_name=$(basename $file) > file=$(cd $file_dir && pwd)/$file_name > vm=$script_home/bin/CogVM > options="-vm-display-null -vm-sound-null" > compute_md5="md5sum $file" > md5=`$compute_md5` > echo $vm $options $image $script $bucket $file $md5 > $vm $options $image $script $bucket $file $md5 > > NonInteractiveTranscript stdout install. > [ > > | args bucket filename md5 | > args := Smalltalk commandLine arguments. > bucket := args first. > filename := args second. > md5 := args third. > > (ZnAWSS3Client new) > accessKeyId: 'AAAAXXYYZZ5HGQZ77EQ'; > secretAccessKey: 'AAAA+D9n7gabcdefghSfevY/mH6KWsvMAcsjzzzz'; > checkIntegrity: false; > uploadFile: filename withMd5: md5 inBucket: bucket; > close. > > Transcript show: 'OK'; cr; endEntry. > > ] on: Error do: [ :exception | > > Smalltalk logError: exception description inContext: exception > signalerContext. > Transcript show: 'FAILED'; cr; endEntry. > > ] > SmalltalkImage current quitPrimitive. > > Both tools are very similar: the shell scripts uses the VM to start the right > image after massaging some of the arguments. > The Smalltalk script retrieves arguments, instanciates and invokes the tool to > do its job. NonInteractiveTranscript is used with the #stdout option to write > OK or FAILED. In the case of failure a PharoDebug.log is written. > #quitPrimitive is used for a fast exit (not marking the changes file). Since > then I learned from Igor that #quitPrimitive accepts an exit value so it would > be possible to do away with the OK/FAILED writing to stdout and just rely on > the exit value for an even better integration with *nix. > > Uploading/downloading files of 100s of Mb went flawless and was more than fast > enough (network IO bound anyway). Repeatably starting/stopping a VM with a > 20Mb image is totally acceptable and fast as well. > > A big thanks to everybody who is working on all the little details all the > time to make things like this possible ! > > Sven > > ------ End of Forwarded Message |
Muy bueno este post, este Sven la tiene clara con la web, realmente.
No se compararlos a Zinc con WebClient, pero a primera vista la ventaja de Zinc es que viene default en la imagen 1.3 de Pharo y parece que está activamente mantenido. Aunque WebClient anda muy bien también. Yo tendría que adaptar XMLRPC para que use Zinc, como ves no sos el único que tiene una lista interminable..... :) Lo que mas me gusta de Rusia es el frio...........como odio las temperaturas superiores a 22 grados!!!!! Miro el pronóstico de los días que vienen y me amargo...Edgar, vamos a encarar una mudanza en masa de Smalltalkers anticalor a algún lado más piola? 2011/12/9 Edgar J. De Cleene <[hidden email]> > ** > > > #OtroParaLaListaInterminable > Como ven sigo atentamente lo que pasa en Pharo > Alguien sigue WebClient y Zinc como para que tire opinión ? > > Por ahora necesito mas que eso y algunos ya saben que mis trabajos en > progreso son con Kom + HV2 + external .js > > Meterme con Celeste (va informe aparte) fue por necesidad. > Anduvo linda la minicharlita con el ruso ? > No sean timidos, a ver si la próxima nos enganchamos con alguien mas > > ------ Forwarded Message > > From: Sven Van Caekenberghe <[hidden email]> > > Reply-To: <[hidden email]> > > Date: Fri, 9 Dec 2011 16:58:45 +0100 > > To: Pharo List <[hidden email]> > > Subject: [Pharo-project] Command Line AWS S3 Upload/Download Tool using > Pharo > > > Smalltalk > > > > Command Line AWS S3 Upload/Download Tool using Pharo Smalltalk > > > > This is a little story about a tool that I needed and that I finally > > implemented in Pharo Smalltalk. I think it is quite nice and elegant and > might > > be useful to others too. Also, I think it is important to share little > hacks > > like this to show that what you can do is almost unlimited (as many > others > > have shown in all kinds of projects). > > > > This is a bit long, so if you're not interested, please ignore. > > > > Amazon S3 is a web service interface to store and retrieve any data from > > anywhere that is highly scalable, reliable, secure, fast, inexpensive. [ > > http://aws.amazon.com/s3/ ] [ http://en.wikipedia.org/wiki/Amazon_S3 ] > > > > I needed a client to interface with S3 from Linux to store and retrieve > > archives and backups up to 100s of Mb large. Although I had already > written a > > client for this web service in Pharo some time ago, I thought it would > not be > > good enough for these amounts of data. Furthermore, it had no command > line > > interface. So I Googled and found s3cmd. This installed easily and > quickly in > > Ubuntu. Uploading/downloading some small test files went OK. However, > > uploading large files gave all kinds of strange errors, even though I was > > doing this from EC2 directly on the Amazon network. I don't know Python > so I > > was not capable of debugging the tool. > > > > But I do know Smalltalk and had the basic code already. [ Zinc-AWS in > > http://www.squeaksource.com/ZincHTTPComponents ] > > > > What was missing was a solution to do streaming uploads and downloads so > that > > these huge files would not be taken into memory all at once and a > command line > > interface. Turns out both were quite easy and elegant to implement. > > > > I added the following methods to ZnAWSS3Client: > > > > downloadFile: filename fromBucket: bucket > > "Do a streaming download of the key filename from bucket, > > creating it as a file with that name in the current directory." > > > > | streaming response | > > streaming := self httpClient streaming. > > self httpClient streaming: true. > > response := self at: bucket -> filename. > > self httpClient streaming: streaming. > > response isSuccess ifFalse: [ ^ ZnHttpUnsuccessful signal ]. > > FileStream > > fileNamed: filename > > do: [ :stream | response entity writeOn: stream ]. > > ^ response > > > > The #streaming option of the underlying ZnClient is toggled on for this > > request and reset later to its previous value after the request. The > #at: does > > the actual request, returning a ZnStreamingEntity that is then written > to a > > file. When a streaming entity writes itself to another stream it will > actually > > do a streaming copy (one buffer at a time in a loop) for an efficient > > download. > > > > uploadFile: filename withMd5: md5 inBucket: bucket > > "Do a streaming upload of the file filename to bucket. > > When md5 is notNil, use it to validate the ETag of the response." > > > > | entry size mimeType fileStream entity response | > > entry := FileDirectory root directoryEntryFor: filename. > > size := entry fileSize. > > mimeType := ZnMimeType forFilenameExtension: (FileDirectory extensionFor: > > filename). > > fileStream := FileDirectory root readOnlyFileNamed: filename. > > mimeType isBinary ifTrue: [ fileStream binary ]. > > (entity := ZnStreamingEntity type: mimeType length: size) > > stream: fileStream. > > self at: bucket -> entry name put: entity. > > (md5 notNil and: [ (md5 sameAs: self eTag) not ]) > > ifTrue: [ self error: 'Uploaded ETag does not equal supplied MD5' ]. > > ^ self httpClient response > > > > Here the streaming entity is created based on an existing file, the mime > type > > coming from the extension. Then, #at:put: is used to do the upload. > Again, > > when the streaming entity writes itself to the socket stream it will > actually > > do a streaming copy (one buffer at a time in a loop), for an efficient > upload. > > > > Amazon S3 delivers MD5 hashes (ETags) that can be used to check the > integrity > > of uploads/downloads. ZnAWSS3Client uses these when its #checkIntegrity > option > > is true using MD5>>#hashMessage:, though not using the streaming option > of > > HashFunction. Since it would be a lot of work to make that possible, I > opted > > for externally supplied MD5 hashes using Linux's md5sum utility. > > > > Next, I took a clean Pharo 1.3 image and the standard Pharo built CogVM > and > > loaded the following to create a server image: > > > > Gofer new > > squeaksource: 'XMLSupport'; > > package: 'ConfigurationOfXMLSupport'; > > load. > > (Smalltalk at: #ConfigurationOfXMLSupport) perform: #loadDefault. > > > > Gofer new > > squeaksource: 'ZincHTTPComponents'; > > package: 'Zinc-HTTP'; > > package: 'Zinc-AWS'; > > load. > > > > Gofer new > > squeaksource: 'ADayAtTheBeach'; > > package: 'NonInteractiveTranscript'; > > load. > > > > The glue code for each tool consists of a Linux shell script and a > Smalltalk > > startup script. This is a tool for personal use, error handling could be > a bit > > better regarding wrong invocations. > > > > #!/bin/bash > > echo S3 Download $* > > script_home=$(dirname $0) > > script_home=$(cd $script_home && pwd) > > image=$script_home/pharo-t3.image > > script=$script_home/s3-download.st > > bucket=$1 > > file=$2 > > vm=$script_home/bin/CogVM > > options="-vm-display-null -vm-sound-null" > > echo $vm $options $image $script $bucket $file > > $vm $options $image $script $bucket $file > > > > NonInteractiveTranscript stdout install. > > [ > > > > | args bucket filename | > > args := Smalltalk commandLine arguments. > > bucket := args first. > > filename := args second. > > > > (ZnAWSS3Client new) > > accessKeyId: 'AAAAXXYYZZ5HGQZ77EQ'; > > secretAccessKey: 'AAAA+D9n7gabcdefghSfevY/mH6KWsvMAcsjzzzz'; > > checkIntegrity: false; > > downloadFile: filename fromBucket: bucket; > > close. > > > > Transcript show: 'OK'; cr; endEntry. > > > > ] on: Error do: [ :exception | > > > > Smalltalk logError: exception description inContext: exception > > signalerContext. > > Transcript show: 'FAILED'; cr; endEntry. > > > > ]. > > SmalltalkImage current quitPrimitive. > > > > #!/bin/bash > > echo S3 Upload $* > > script_home=$(dirname $0) > > script_home=$(cd $script_home && pwd) > > image=$script_home/pharo-t3.image > > script=$script_home/s3-upload.st > > bucket=$1 > > file=$2 > > file_dir=$(dirname $file) > > file_name=$(basename $file) > > file=$(cd $file_dir && pwd)/$file_name > > vm=$script_home/bin/CogVM > > options="-vm-display-null -vm-sound-null" > > compute_md5="md5sum $file" > > md5=`$compute_md5` > > echo $vm $options $image $script $bucket $file $md5 > > $vm $options $image $script $bucket $file $md5 > > > > NonInteractiveTranscript stdout install. > > [ > > > > | args bucket filename md5 | > > args := Smalltalk commandLine arguments. > > bucket := args first. > > filename := args second. > > md5 := args third. > > > > (ZnAWSS3Client new) > > accessKeyId: 'AAAAXXYYZZ5HGQZ77EQ'; > > secretAccessKey: 'AAAA+D9n7gabcdefghSfevY/mH6KWsvMAcsjzzzz'; > > checkIntegrity: false; > > uploadFile: filename withMd5: md5 inBucket: bucket; > > close. > > > > Transcript show: 'OK'; cr; endEntry. > > > > ] on: Error do: [ :exception | > > > > Smalltalk logError: exception description inContext: exception > > signalerContext. > > Transcript show: 'FAILED'; cr; endEntry. > > > > ] > > SmalltalkImage current quitPrimitive. > > > > Both tools are very similar: the shell scripts uses the VM to start the > right > > image after massaging some of the arguments. > > The Smalltalk script retrieves arguments, instanciates and invokes the > tool to > > do its job. NonInteractiveTranscript is used with the #stdout option to > write > > OK or FAILED. In the case of failure a PharoDebug.log is written. > > #quitPrimitive is used for a fast exit (not marking the changes file). > Since > > then I learned from Igor that #quitPrimitive accepts an exit value so it > would > > be possible to do away with the OK/FAILED writing to stdout and just > rely on > > the exit value for an even better integration with *nix. > > > > Uploading/downloading files of 100s of Mb went flawless and was more > than fast > > enough (network IO bound anyway). Repeatably starting/stopping a VM with > a > > 20Mb image is totally acceptable and fast as well. > > > > A big thanks to everybody who is working on all the little details all > the > > time to make things like this possible ! > > > > Sven > > > > > > ------ End of Forwarded Message > > > -- ============================================ Germán S. Arduino <gsa @ arsol.net> Twitter: garduino Arduino Software http://www.arduinosoftware.com PasswordsPro http://www.passwordspro.com Promoter http://www.arsol.biz ============================================ |
Hola gente.
Recontra interesante Zinc. Yo lo vengo siguiendo en la lista de Pharo y es impresionante como avanza. Sin dudas (y hasta donde entiendo) Zinc es mucho mas general [1] que WebClient [2]. Otra diferencia clave creo que es que WebClient tiene implementado de manera estable e integrado https, mientras que Zinc tiene una implementación de externa (Zodiac [3]) pero es beta aún. Ambos usan el plugin SqueakSSL que esta sin mantener hace tiempo y tiene algunos problemas creo que con los certificados [4]. Otra diferencia (y ventaja creo) es que Zinc esta mucho mas diseñado para ser extendido que WebClient (usa patrones Factory y esas cosas), lo que en algo tan general como una librería HTTP te permite adaptar algo según tus necesidades específicas. [1] Our long term goals are very ambitious: we want to reach the level of functionality, scope, architectural clarity and maturity of the Apache HTTP Components library. http://zn.stfx.eu/zn/ [2] WebClient and WebServer are simple, compact, and easy to use HTTP client and server implementations for Squeak. http://www.squeaksource.com/WebClient.html [3] http://zdc.stfx.eu/ [4] http://forum.world.st/WebClient-SqueakSSL-https-td2301818.html Un pequeño resumen, sin garantía de veracidad ;) 2011/12/9 Germán Arduino <[hidden email]> > > > Muy bueno este post, este Sven la tiene clara con la web, realmente. > > No se compararlos a Zinc con WebClient, pero a primera vista la ventaja de > Zinc es que viene default en la imagen 1.3 de Pharo y parece que está > activamente mantenido. > > Aunque WebClient anda muy bien también. > > Yo tendría que adaptar XMLRPC para que use Zinc, como ves no sos el único > que tiene una lista interminable..... :) > > Lo que mas me gusta de Rusia es el frio...........como odio las > temperaturas superiores a 22 grados!!!!! > > Miro el pronóstico de los días que vienen y me amargo...Edgar, vamos a > encarar una mudanza en masa de Smalltalkers anticalor a algún lado más > piola? > > > 2011/12/9 Edgar J. De Cleene <[hidden email]> > > >> >> #OtroParaLaListaInterminable >> Como ven sigo atentamente lo que pasa en Pharo >> Alguien sigue WebClient y Zinc como para que tire opinión ? >> >> Por ahora necesito mas que eso y algunos ya saben que mis trabajos en >> progreso son con Kom + HV2 + external .js >> >> Meterme con Celeste (va informe aparte) fue por necesidad. >> Anduvo linda la minicharlita con el ruso ? >> No sean timidos, a ver si la próxima nos enganchamos con alguien mas >> >> ------ Forwarded Message >> > From: Sven Van Caekenberghe <[hidden email]> >> > Reply-To: <[hidden email]> >> > Date: Fri, 9 Dec 2011 16:58:45 +0100 >> > To: Pharo List <[hidden email]> >> > Subject: [Pharo-project] Command Line AWS S3 Upload/Download Tool using >> Pharo >> >> > Smalltalk >> > >> > Command Line AWS S3 Upload/Download Tool using Pharo Smalltalk >> > >> > This is a little story about a tool that I needed and that I finally >> > implemented in Pharo Smalltalk. I think it is quite nice and elegant >> and might >> > be useful to others too. Also, I think it is important to share little >> hacks >> > like this to show that what you can do is almost unlimited (as many >> others >> > have shown in all kinds of projects). >> > >> > This is a bit long, so if you're not interested, please ignore. >> > >> > Amazon S3 is a web service interface to store and retrieve any data from >> > anywhere that is highly scalable, reliable, secure, fast, inexpensive. [ >> > http://aws.amazon.com/s3/ ] [ http://en.wikipedia.org/wiki/Amazon_S3 ] >> > >> > I needed a client to interface with S3 from Linux to store and retrieve >> > archives and backups up to 100s of Mb large. Although I had already >> written a >> > client for this web service in Pharo some time ago, I thought it would >> not be >> > good enough for these amounts of data. Furthermore, it had no command >> line >> > interface. So I Googled and found s3cmd. This installed easily and >> quickly in >> > Ubuntu. Uploading/downloading some small test files went OK. However, >> > uploading large files gave all kinds of strange errors, even though I >> was >> > doing this from EC2 directly on the Amazon network. I don't know Python >> so I >> > was not capable of debugging the tool. >> > >> > But I do know Smalltalk and had the basic code already. [ Zinc-AWS in >> > http://www.squeaksource.com/ZincHTTPComponents ] >> > >> > What was missing was a solution to do streaming uploads and downloads >> so that >> > these huge files would not be taken into memory all at once and a >> command line >> > interface. Turns out both were quite easy and elegant to implement. >> > >> > I added the following methods to ZnAWSS3Client: >> > >> > downloadFile: filename fromBucket: bucket >> > "Do a streaming download of the key filename from bucket, >> > creating it as a file with that name in the current directory." >> > >> > | streaming response | >> > streaming := self httpClient streaming. >> > self httpClient streaming: true. >> > response := self at: bucket -> filename. >> > self httpClient streaming: streaming. >> > response isSuccess ifFalse: [ ^ ZnHttpUnsuccessful signal ]. >> > FileStream >> > fileNamed: filename >> > do: [ :stream | response entity writeOn: stream ]. >> > ^ response >> > >> > The #streaming option of the underlying ZnClient is toggled on for this >> > request and reset later to its previous value after the request. The >> #at: does >> > the actual request, returning a ZnStreamingEntity that is then written >> to a >> > file. When a streaming entity writes itself to another stream it will >> actually >> > do a streaming copy (one buffer at a time in a loop) for an efficient >> > download. >> > >> > uploadFile: filename withMd5: md5 inBucket: bucket >> > "Do a streaming upload of the file filename to bucket. >> > When md5 is notNil, use it to validate the ETag of the response." >> > >> > | entry size mimeType fileStream entity response | >> > entry := FileDirectory root directoryEntryFor: filename. >> > size := entry fileSize. >> > mimeType := ZnMimeType forFilenameExtension: (FileDirectory >> extensionFor: >> > filename). >> > fileStream := FileDirectory root readOnlyFileNamed: filename. >> > mimeType isBinary ifTrue: [ fileStream binary ]. >> > (entity := ZnStreamingEntity type: mimeType length: size) >> > stream: fileStream. >> > self at: bucket -> entry name put: entity. >> > (md5 notNil and: [ (md5 sameAs: self eTag) not ]) >> > ifTrue: [ self error: 'Uploaded ETag does not equal supplied MD5' ]. >> > ^ self httpClient response >> > >> > Here the streaming entity is created based on an existing file, the >> mime type >> > coming from the extension. Then, #at:put: is used to do the upload. >> Again, >> > when the streaming entity writes itself to the socket stream it will >> actually >> > do a streaming copy (one buffer at a time in a loop), for an efficient >> upload. >> > >> > Amazon S3 delivers MD5 hashes (ETags) that can be used to check the >> integrity >> > of uploads/downloads. ZnAWSS3Client uses these when its #checkIntegrity >> option >> > is true using MD5>>#hashMessage:, though not using the streaming option >> of >> > HashFunction. Since it would be a lot of work to make that possible, I >> opted >> > for externally supplied MD5 hashes using Linux's md5sum utility. >> > >> > Next, I took a clean Pharo 1.3 image and the standard Pharo built CogVM >> and >> > loaded the following to create a server image: >> > >> > Gofer new >> > squeaksource: 'XMLSupport'; >> > package: 'ConfigurationOfXMLSupport'; >> > load. >> > (Smalltalk at: #ConfigurationOfXMLSupport) perform: #loadDefault. >> > >> > Gofer new >> > squeaksource: 'ZincHTTPComponents'; >> > package: 'Zinc-HTTP'; >> > package: 'Zinc-AWS'; >> > load. >> > >> > Gofer new >> > squeaksource: 'ADayAtTheBeach'; >> > package: 'NonInteractiveTranscript'; >> > load. >> > >> > The glue code for each tool consists of a Linux shell script and a >> Smalltalk >> > startup script. This is a tool for personal use, error handling could >> be a bit >> > better regarding wrong invocations. >> > >> > #!/bin/bash >> > echo S3 Download $* >> > script_home=$(dirname $0) >> > script_home=$(cd $script_home && pwd) >> > image=$script_home/pharo-t3.image >> > script=$script_home/s3-download.st >> > bucket=$1 >> > file=$2 >> > vm=$script_home/bin/CogVM >> > options="-vm-display-null -vm-sound-null" >> > echo $vm $options $image $script $bucket $file >> > $vm $options $image $script $bucket $file >> > >> > NonInteractiveTranscript stdout install. >> > [ >> > >> > | args bucket filename | >> > args := Smalltalk commandLine arguments. >> > bucket := args first. >> > filename := args second. >> > >> > (ZnAWSS3Client new) >> > accessKeyId: 'AAAAXXYYZZ5HGQZ77EQ'; >> > secretAccessKey: 'AAAA+D9n7gabcdefghSfevY/mH6KWsvMAcsjzzzz'; >> > checkIntegrity: false; >> > downloadFile: filename fromBucket: bucket; >> > close. >> > >> > Transcript show: 'OK'; cr; endEntry. >> > >> > ] on: Error do: [ :exception | >> > >> > Smalltalk logError: exception description inContext: exception >> > signalerContext. >> > Transcript show: 'FAILED'; cr; endEntry. >> > >> > ]. >> > SmalltalkImage current quitPrimitive. >> > >> > #!/bin/bash >> > echo S3 Upload $* >> > script_home=$(dirname $0) >> > script_home=$(cd $script_home && pwd) >> > image=$script_home/pharo-t3.image >> > script=$script_home/s3-upload.st >> > bucket=$1 >> > file=$2 >> > file_dir=$(dirname $file) >> > file_name=$(basename $file) >> > file=$(cd $file_dir && pwd)/$file_name >> > vm=$script_home/bin/CogVM >> > options="-vm-display-null -vm-sound-null" >> > compute_md5="md5sum $file" >> > md5=`$compute_md5` >> > echo $vm $options $image $script $bucket $file $md5 >> > $vm $options $image $script $bucket $file $md5 >> > >> > NonInteractiveTranscript stdout install. >> > [ >> > >> > | args bucket filename md5 | >> > args := Smalltalk commandLine arguments. >> > bucket := args first. >> > filename := args second. >> > md5 := args third. >> > >> > (ZnAWSS3Client new) >> > accessKeyId: 'AAAAXXYYZZ5HGQZ77EQ'; >> > secretAccessKey: 'AAAA+D9n7gabcdefghSfevY/mH6KWsvMAcsjzzzz'; >> > checkIntegrity: false; >> > uploadFile: filename withMd5: md5 inBucket: bucket; >> > close. >> > >> > Transcript show: 'OK'; cr; endEntry. >> > >> > ] on: Error do: [ :exception | >> > >> > Smalltalk logError: exception description inContext: exception >> > signalerContext. >> > Transcript show: 'FAILED'; cr; endEntry. >> > >> > ] >> > SmalltalkImage current quitPrimitive. >> > >> > Both tools are very similar: the shell scripts uses the VM to start the >> right >> > image after massaging some of the arguments. >> > The Smalltalk script retrieves arguments, instanciates and invokes the >> tool to >> > do its job. NonInteractiveTranscript is used with the #stdout option to >> write >> > OK or FAILED. In the case of failure a PharoDebug.log is written. >> > #quitPrimitive is used for a fast exit (not marking the changes file). >> Since >> > then I learned from Igor that #quitPrimitive accepts an exit value so >> it would >> > be possible to do away with the OK/FAILED writing to stdout and just >> rely on >> > the exit value for an even better integration with *nix. >> > >> > Uploading/downloading files of 100s of Mb went flawless and was more >> than fast >> > enough (network IO bound anyway). Repeatably starting/stopping a VM >> with a >> > 20Mb image is totally acceptable and fast as well. >> > >> > A big thanks to everybody who is working on all the little details all >> the >> > time to make things like this possible ! >> > >> > Sven >> > >> > >> >> ------ End of Forwarded Message >> >> > > > -- > ============================================ > Germán S. Arduino <gsa @ arsol.net> Twitter: garduino > Arduino Software http://www.arduinosoftware.com > PasswordsPro http://www.passwordspro.com > Promoter http://www.arsol.biz > ============================================ > > > |
> Hola gente.
> Recontra interesante Zinc. Yo lo vengo siguiendo en la lista de Pharo y es > impresionante como avanza. Sin dudas (y hasta donde entiendo) Zinc es mucho > mas general [1] que WebClient [2]. > Otra diferencia clave creo que es que WebClient tiene implementado de manera > estable e integrado https, mientras que Zinc tiene una implementación de > externa (Zodiac [3]) pero es beta aún. Ambos usan el plugin SqueakSSL que esta > sin mantener hace tiempo y tiene algunos problemas creo que con los > certificados [4]. > Otra diferencia (y ventaja creo) es que Zinc esta mucho mas diseñado para ser > extendido que WebClient (usa patrones Factory y esas cosas), lo que en algo > tan general como una librería HTTP te permite adaptar algo según tus > necesidades específicas. > > [1] Our long term goals are very ambitious: we want to reach the level of > functionality, scope, architectural clarity and maturity of the Apache HTTP > Components library. > http://zn.stfx.eu/zn/ > [2] WebClient and WebServer are simple, compact, and easy to use HTTP client > and server implementations for Squeak. > http://www.squeaksource.com/WebClient.html > [3] http://zdc.stfx.eu/ > [4] http://forum.world.st/WebClient-SqueakSSL-https-td2301818.html > > Un pequeño resumen, sin garantía de veracidad ;) Buenisimo. Tengo como dije, Celeste andando para yahoo con un problema de dibujo. Me tome el trabajo de cargar el ultimo de Lex Spoon en el viejo FunSqueak que lleve al primer Smalltalks y funciono. No contento con eso, recorde que tengo ,a mi criterio, el mejor compromiso tamaño de imagen / funcionalidad. Eso se llama MinimalMorphic, lo empezo Pavel alla en los tiempos de Ralph y el 3.10, cuando la comunidad era una y no habia como ahora un Pharo que los guie (hacia las rocas donde se estrellaran ). MCHttpRepository location: 'http://squeaksource.com/Ladrillos' user: 'squeak' password: 'squeak' Ahi, mi ultima versión , gracias Gaston (me salio un versito) Network-Mail Reader-edc.25 O sea que el problema son los closures, ya que la clase que dibuja es MulticolumnLazyListMorph y la mayoria de los métodos son de Ned Kontz (2004) Alguien se podrá apiadar de mi y explicarme para bolus que , como, para que, cuando son los Closures ? Este es el método que falla en Squeak4.3gamma-11793 display: items atRow: row on: canvas "display the specified item, which is on the specified row; for Multicolumn lists, items will be a list of strings" | drawBounds | drawBounds := self drawBoundsForRow: row. drawBounds := drawBounds intersect: self bounds. items with: (1 to: items size) do: [:item :index | "move the bounds to the right at each step" index > 1 ifTrue: [drawBounds := drawBounds left: drawBounds left + 6 + (columnWidths at: index - 1)]. item isText ifTrue: [canvas drawString: item in: drawBounds font: (font emphasized: (item emphasisAt: 1)) color: (self colorForRow: row)] ifFalse: [canvas drawString: item in: drawBounds font: font color: (self colorForRow: row)]] Y este es el debug.log Error: Error: Instances of Character are not indexable 10 December 2011 6:22:46.583 am VM: Mac OS - Smalltalk Image: Squeak4.2 [latest update: #11793] SecurityManager state: Restricted: false FileAccess: true SocketAccess: true Working Dir /Users/edgar/AtlantisSqueak/imagesZip/Squeak4.3gamma-11793 Folder Trusted Dir /foobar/tooBar/forSqueak/bogus/ Untrusted Dir /foobar/tooBar/forSqueak/bogus/ Character(Object)>>error: Receiver: $# Arguments and temporary variables: aString: 'Error: Instances of Character are not indexable' Receiver's instance variables: value: 35 [] in WorldState>>displayWorldSafely: Receiver: a WorldState Arguments and temporary variables: <<error during printing> Receiver's instance variables: hands: {a HandMorph(3216)} activeHand: a HandMorph(3216) viewBox: 0@0 corner: 1880@1156 canvas: a FormCanvas on: DisplayScreen(1880x1156x32) damageRecorder: a DamageRecorder stepList: a Heap(StepMessage(#stepAt: -> a PluggableSystemWindow(92))(a Pluggab...etc... lastStepTime: 1737696 lastStepMessage: nil lastCycleTime: 1737717 commandHistory: a CommandHistory alarms: a MorphicAlarmQueue() lastAlarmTime: 1737696 remoteServer: nil multiCanvas: nil BlockClosure>>cull:cull: Receiver: [closure] in WorldState>>displayWorldSafely: Arguments and temporary variables: firstArg: 'Error: Instances of Character are not indexable' secondArg: $# Receiver's instance variables: outerContext: WorldState>>displayWorldSafely: startpc: 81 numArgs: 2 [] in BlockClosure>>ifError: Receiver: [closure] in WorldState>>displayWorldSafely: Arguments and temporary variables: errorHandlerBlock: Error: Instances of Character are not indexable ex: [closure] in WorldState>>displayWorldSafely: Receiver's instance variables: outerContext: WorldState>>displayWorldSafely: startpc: 74 numArgs: 0 BlockClosure>>cull: Receiver: [closure] in BlockClosure>>ifError: Arguments and temporary variables: firstArg: Error: Instances of Character are not indexable Receiver's instance variables: outerContext: BlockClosure>>ifError: startpc: 40 numArgs: 1 [] in MethodContext(ContextPart)>>handleSignal: Receiver: BlockClosure>>on:do: Arguments and temporary variables: <<error during printing> Receiver's instance variables: sender: BlockClosure>>ifError: pc: 17 stackp: 3 method: (BlockClosure>>#on:do: "a CompiledMethod(2372)") closureOrNil: nil receiver: [closure] in WorldState>>displayWorldSafely: BlockClosure>>ensure: Receiver: [closure] in MethodContext(ContextPart)>>handleSignal: Arguments and temporary variables: aBlock: [closure] in MethodContext(ContextPart)>>handleSignal: complete: nil returnValue: nil Receiver's instance variables: outerContext: MethodContext(ContextPart)>>handleSignal: startpc: 90 numArgs: 0 MethodContext(ContextPart)>>handleSignal: Receiver: BlockClosure>>on:do: Arguments and temporary variables: exception: Error: Instances of Character are not indexable val: nil Receiver's instance variables: sender: BlockClosure>>ifError: pc: 17 stackp: 3 method: (BlockClosure>>#on:do: "a CompiledMethod(2372)") closureOrNil: nil receiver: [closure] in WorldState>>displayWorldSafely: Error(Exception)>>signal Receiver: Error: Instances of Character are not indexable Arguments and temporary variables: Receiver's instance variables: messageText: 'Instances of Character are not indexable' tag: nil signalContext: Error(Exception)>>signal handlerContext: BlockClosure>>on:do: outerContext: nil Error(Exception)>>signal: Receiver: Error: Instances of Character are not indexable Arguments and temporary variables: signalerText: 'Instances of Character are not indexable' Receiver's instance variables: messageText: 'Instances of Character are not indexable' tag: nil signalContext: Error(Exception)>>signal handlerContext: BlockClosure>>on:do: outerContext: nil Character(Object)>>error: Receiver: $# Arguments and temporary variables: aString: 'Instances of Character are not indexable' Receiver's instance variables: value: 35 Character(Object)>>errorNotIndexable Receiver: $# Arguments and temporary variables: Receiver's instance variables: value: 35 Character(Object)>>size Receiver: $# Arguments and temporary variables: Receiver's instance variables: value: 35 FormCanvas(Canvas)>>drawString:in:font:color: Receiver: a FormCanvas on: DisplayScreen(1880x1156x32) Arguments and temporary variables: s: $# boundsRect: 0@0 corner: 490@14 fontOrNil: a StrikeFont(Bitmap DejaVu Sans 9 14) c: Color black Receiver's instance variables: target: nil filterSelector: nil origin: 300@60 clipRect: 297@60 corner: 752@152 form: DisplayScreen(1880x1156x32) port: a GrafPort shadowColor: nil [] in MulticolumnLazyListMorph>>display:atRow:on: Receiver: a MulticolumnLazyListMorph(307) Arguments and temporary variables: <<error during printing> Receiver's instance variables: bounds: 0@0 corner: 490@336 owner: a TransformMorph(3376) submorphs: #() fullBounds: 0@0 corner: 490@336 color: Color black extension: a MorphExtension (1476) [other: (errorOnDraw -> true)] listItems: #(#('1' ' ' '12/6/11' 'LinkedIn' '16,728' 'Edgar, 3 people looked at...etc... font: a StrikeFont(Bitmap DejaVu Sans 9 14) selectedRow: 1 selectedRows: a PluggableSet() listSource: a PluggableMultiColumnListMorph(3227) maxWidth: nil columnWidths: #(8 4 48 126 42 618) ByteString(SequenceableCollection)>>with:do: Receiver: '#(''1'' '' '' ''12/6/11'' ''LinkedIn'' ''16,728'' ''Edgar, 3 people looked at your profil...etc... Arguments and temporary variables: otherCollection: (1 to: 81) twoArgBlock: [closure] in MulticolumnLazyListMorph>>display:atRow:on: index: 1 indexLimiT: 81 Receiver's instance variables: '#(''1'' '' '' ''12/6/11'' ''LinkedIn'' ''16,728'' ''Edgar, 3 people looked at your profil...etc... MulticolumnLazyListMorph>>display:atRow:on: Receiver: a MulticolumnLazyListMorph(307) Arguments and temporary variables: <<error during printing> Receiver's instance variables: bounds: 0@0 corner: 490@336 owner: a TransformMorph(3376) submorphs: #() fullBounds: 0@0 corner: 490@336 color: Color black extension: a MorphExtension (1476) [other: (errorOnDraw -> true)] listItems: #(#('1' ' ' '12/6/11' 'LinkedIn' '16,728' 'Edgar, 3 people looked at...etc... font: a StrikeFont(Bitmap DejaVu Sans 9 14) selectedRow: 1 selectedRows: a PluggableSet() listSource: a PluggableMultiColumnListMorph(3227) maxWidth: nil columnWidths: #(8 4 48 126 42 618) Teorizo que espera una String y lo que recibe son Character, Evidentemente, se pudre todo Edgar |
In reply to this post by Gastón Dall' Oglio
Y dome a Celeste nomas.
Con mas traste que cabeza, como suele suceder. La repuesta obvia es siempre la ultima que se nos ocurre. Si hay una clase que tenia sentido en el 2004, capaz que hoy o. Eso es todo, grabo |
In reply to this post by Edgar De Cleene
2011/12/10 Edgar J. De Cleene <[hidden email]>
> ** > > > Eso se llama MinimalMorphic, lo empezo Pavel alla en los tiempos de Ralph y > el 3.10, cuando la comunidad era una y no habia como ahora un Pharo que los > guie (hacia las rocas donde se estrellaran ). > > Me parece que no se van a estrellar, quizás no vayan para donde a cada uno le gustaría, pero creo que van muy muy bien, con mucho viento en las velas. En cambio (y no me alegra para nada) creo que el estancamiento de Squeak se va profundizando día a día......salvo por el laburo monstruoso de Chris Muller...... <modo critica on> Hace un tiempo que pienso que por más esfuerzos que haya en squeak, pharo o el Smalltalk que sea, evidentemente falta mucho, pero mucho, para estar al nivel de un lenguaje (perdón los puristas) capaz de usarse en producción para cosas para millones de usuarios, tipo SaaS. Antes teníamos un par de naves insignia, DabbleDB y Auctomatic, las cuales hoy ya son historia y podemos tener las mejores intenciones y creer que el mejor mundo de herramientas, pero si no somos capaces de tener cosas grosas en producción, simplemente no estamos a la altura de los demás. Por supuesto no ignoro el trabajo increible de Sebastián en Airflowing y varios otros proyectos, pero estamos muy lejos de tener "masa crítica". Miles de startups arrancan todo el tiempo, con cada vez mayores volúmenes de datos, millones de usuarios e ideas novedosas y no estamos siendo capaces que consideren usar Smalltalk. ¿Qué les parece? ¿Por qué será? Usan Python, Ruby, versiones mejoradas de PHP, guardan datos en MySQL o bases NoSQL, pero no usan Smalltalk. Como el tema me preocupa y para saber cuáles son las ventajas del resto del mundo me anoté en un curso online que hacen desde Stanford: http://www.saas-class.org/, que empieza en Febrero. Vamos a ver si tengo respuestas ahí. </fin modo critica> |
Y cada uno tiene su opinion, para eso esto es un bar.
Pero creo que hay que tener claro los objetivos. Si lo que uno quiere es ganar plata, mejor se pone un puesto de choripan a la salida de la cancha. Si los numeros mandan, entonces Smalltalk en cualquiera de sus variantes no tiene sentido. No salgamos nunca del mundo Windoze (no compraste una Mac bastante cara ?) Como ya dije muchas veces, aca en la zona contratan a los alumnos que apenas saben tipear y les pagan para hacer Cobol, DB, PL/1. Yo pongo mi granito de arena, en este caso resucitando Celeste. Si se van todos a Pharo, no interesa. Hay gente grosa que esta y hay gente de Pharo que ya se empezo a dar cuenta que tambien es un engendro (Lukas el principal) A los que les interesa que su trabajo sea conocido, lo hacen para los dos forks. Lamento por Juan que nadie le de mucha bola a Cuis, pero se encerro solo en su mundo. A mi no me da el cuero para seguir tres forks y que cada vez que tengo que hacer algo chiquito tenga que aprender todo de nuevo. La razon de estar en Squeak es la compatibilidad. Si solo te interesa el web, bárbaro, usa Pharo. No sea que a medida que ³avance² te des cuenta que tambien tenes que re pensar todo otra vez Edgar |
mmm, quizás yo no me explico bien, en mi caso me gusta Smalltalk pero
también tengo que vivir. Si tengo una idea piola para programar, debería hacerla mejor y más rápido con Smalltalk y al mundo de afuera poco le interesa con qué está hecha, el mundo compra soluciones.....usa cosas que le gustan pero ni les importa con qué está hecha. Digo si somos tan buenos, y creo que si, que Smalltalk es diferencial, porque el resto de los techies del mundo no lo consideran asi (Y hablo más que nada del entorno de las startups o grandes compañías de Internet. Si producir en Smalltalk te permite como mínimo el doble de productividad que en un lenguaje convencional, porque los grandes no ven eso...? POrque no aprovechan esa ventaja que les permitiría mucho menores costos? Ojo, son sólo pensamientos.....no estoy criticando nada :) El 10 de diciembre de 2011 08:04, Edgar J. De Cleene <[hidden email] > escribió: > ** > > > Y cada uno tiene su opinion, para eso esto es un bar. > Pero creo que hay que tener claro los objetivos. > Si lo que uno quiere es ganar plata, mejor se pone un puesto de choripan a > la salida de la cancha. > Si los numeros mandan, entonces Smalltalk en cualquiera de sus variantes > no tiene sentido. > No salgamos nunca del mundo Windoze (no compraste una Mac bastante cara ?) > Como ya dije muchas veces, aca en la zona contratan a los alumnos que > apenas saben tipear y les pagan para hacer Cobol, DB, PL/1. > Yo pongo mi granito de arena, en este caso resucitando Celeste. > Si se van todos a Pharo, no interesa. > Hay gente grosa que esta y hay gente de Pharo que ya se empezo a dar > cuenta que tambien es un engendro (Lukas el principal) > A los que les interesa que su trabajo sea conocido, lo hacen para los dos > forks. > Lamento por Juan que nadie le de mucha bola a Cuis, pero se encerro solo > en su mundo. > A mi no me da el cuero para seguir tres forks y que cada vez que tengo que > hacer algo chiquito tenga que aprender todo de nuevo. > La razon de estar en Squeak es la compatibilidad. > Si solo te interesa el web, bárbaro, usa Pharo. > No sea que a medida que “avance” te des cuenta que tambien tenes que re > pensar todo otra vez > > Edgar > > > > > -- ============================================ Germán S. Arduino <gsa @ arsol.net> Twitter: garduino Arduino Software http://www.arduinosoftware.com PasswordsPro http://www.passwordspro.com Promoter http://www.arsol.biz ============================================ |
> Digo si somos tan buenos, y creo que si, que Smalltalk es diferencial, porque
> el resto de los techies del mundo no lo consideran asi (Y hablo más que nada > del entorno de las startups o grandes compañías de Internet. Si producir en > Smalltalk te permite como mínimo el doble de productividad que en un lenguaje > convencional, porque los grandes no ven eso...? POrque no aprovechan esa > ventaja que les permitiría mucho menores costos? No se si somos tan buenos y repito, que nos importa si "las grandes compañias " , lo usen o no?. Si estamos convencidos que es mejor... Lo que me parece es que Smalltalk no es para todos. Apple se tomo el trabajo de re hacer Unix con Objective C, creo que por esto y para estar de algun modo a mitad de camino. Y poder reusar codigo. Otra vez la compatibilidad hacia atras |
El 10 de diciembre de 2011 08:43, Edgar J. De Cleene <[hidden email]
> escribió: > ** > > > > Digo si somos tan buenos, y creo que si, que Smalltalk es diferencial, > porque > > el resto de los techies del mundo no lo consideran asi (Y hablo más que > nada > > del entorno de las startups o grandes compañías de Internet. Si producir > en > > Smalltalk te permite como mínimo el doble de productividad que en un > lenguaje > > convencional, porque los grandes no ven eso...? POrque no aprovechan esa > > ventaja que les permitiría mucho menores costos? > > No se si somos tan buenos y repito, que nos importa si "las grandes > compañias " , lo usen o no?. > > sino, para que me sirve hacer una solución el doble de rápido en Seaside, si luego el hosting no existe? Y ojo, no te hablo de supuestos, hablo de proyectos que pierdo, porque el hosting seaside es CARO comparado con cualquier otra cosa. > Si estamos convencidos que es mejor... > > Lo que me parece es que Smalltalk no es para todos. > Apple se tomo el trabajo de re hacer Unix con Objective C, creo que por > esto > y para estar de algun modo a mitad de camino. > Y poder reusar codigo. > Otra vez la compatibilidad hacia atras > > > |
El 10/12/2011 13:50, Germán Arduino escribió:
> > > > El 10 de diciembre de 2011 08:43, Edgar J. De Cleene > <[hidden email] <mailto:[hidden email]>> escribió: > > > Digo si somos tan buenos, y creo que si, que Smalltalk es > diferencial, porque > > el resto de los techies del mundo no lo consideran asi (Y hablo > más que nada > > del entorno de las startups o grandes compañías de Internet. Si > producir en > > Smalltalk te permite como mínimo el doble de productividad que > en un lenguaje > > convencional, porque los grandes no ven eso...? POrque no > aprovechan esa > > ventaja que les permitiría mucho menores costos? > > No se si somos tan buenos y repito, que nos importa si "las grandes > compañias " , lo usen o no?. > Pero debería importar. Java, tendrá todas las cosas malas que queráis, pero a día de hoy, es el lenguaje de programación más usado y extendido en el mundo empresarial. Sabemos que no es por méritos propios, pero ahí está. Smalltalk, se conoce poco, se conoce como algo de hace 30 años (como si nombras Cobol o Fortran), y que siempre tuvo un precio prohibitivo, y a día de hoy, ninguna opción opensource es viable. Además, Java se estudia en la universidad. Smalltalk al parecer se estudia en Argentina, pero por ejemplo, en España, creo que Smalltalk, como mucho, se nombra en historia de programación y ya está, lo demás, es C/C++ y Java prácticamente (creo que en Cataluña si hay un catedrático que dá Smalltalk, pero es una excpeción, y aparte, viven en su mundo y en su idioma como si de otro pais se tratara). Ésto, también repercute como dices en los costos. Para encontrar un programador experimentado en Smalltalk, has de buscar mucho, y pagarle lo que pida, mientras un becario en Java cobrando una miseria, sale de debajo de las piedras. Algunos me conocéis y sabéis que llevo tras Squeak varios años, y nunca me puse en serio más allá de probar cosas y hacer un seguimiento del proyecto, pero, sobre todo, porque en mi opinión, por mucho que duela decirlo, por muy productivo que pueda ser Smalltalk, del lado OpenSource, no está preparado para el mundo empresarial (y yo no tuve tiempo de dedicarle, mi parte de culpa también tengo). Obviamente, VA Smalltalk (que lo veo carísimo) o VisualWorks o Dolphin (que sólo va en Windows), si serán entornos para producción y demostrado está (creo), pero las implementaciones opensource no. Pharo parece que quiso cambiar algo ésto, y para hacer alguna cosa en el mundo web puede servir, pero para aplicaciones empresariales y aburridas (mercado que aún muchos clientes es el que desean), a día de hoy Smalltalk está muy verde (y lo seguirá estando), ya que, si no me equivoco, el 80% al menos de sus "usuarios" lo usan para investigación, o como juguete, no para "trabajar". Además, también hay que tener en cuenta, que muchos programadores, no quieren, o no están interesados en tocar código de la VM, o del corazón del entorno, simplemente, quieren heredar y trabajar, cosa, que por ejemplo, no hace falta en Java, pero es casi obligatorio en Squeak/Pharo, ya que la instalación de un simple paquete, puede comenzar a lanzar errores que o sabes como funciona todo por dentro, o no sabes solucionar, y como no hayas grabado antes de instalar, te deja la imágen coja con una instalación a medias. Luego está la fragmentación, hay gente que prefiere Squeak, mientras el mayor número se movieron a Pharo, porque querían un Squeak un poco más enfocado a empresas. Ambos, cada vez están más distantes el uno del otro y es más dificil tener paquetes compatibles (por lo leido), y al final, ni uno, ni otro. Al programador empresarial medio, le dá igual si Squeak/Pharo tiene un cliente IRC integrado, o un framework para músicos, porque eso no vende. Para el mercado empresarial hace falta acceso a motores de reporting, BBDD, estabilidad tanto en ejecución, como en diseño etc... Smalltalk requiere un conocimiento amplio del lenguaje (perdón), y del core del entorno para poder trabajar con él, para poder diseñarte lo que te falte, algo que en otros entornos no es tan necesario, programas y ya está, y muchos pensarán "para qué perder el tiempo, si luego no voy a poder contratar a nadie". Y al cliente final, le dá igual si tu programa lo hiciste en uno u otro lenguaje, lo que le importa es que funcione. Hay mucha gente buena en el mundo Smalltalk, (Germán, Chris Muller, Edgar, y un montón de nombres que me dejo en el tintero, y espero me perdonen) y también hay mucha gente fragmentada entre Pharo y Squeak, y de todos, la inmensa mayoría simplemente está por hobby, o educación, por lo que todo lo que estamos tratanto, le dá igual, porque al fin y al cabo, el uso que se le dá es de "juguete", sin uso en el mercado empresarial. Aún así, el número de gente involucrada en Smalltak, es ínfimo. A mi, me gustaría retomar Smalltalk. Cuando consiga sacar tiempo, volveré a ponerme con ello, y me gustaría que llegara el momento de decidir migrar mi proyecto actual, pero por desgracia, no sé si ese momento llegará. La pregunta no sería, "si smalltalk es más productivo, por qué ...", la pregunta es: "la comunidad smalltalk quiere/puede adaptarse a lo que pide el mercado comercial?" |
Hola Giuseppe:
Tus reflexiones son las que hemos tratado muchas veces y por las cuales hemos pasado en mayor o menor medida la mayoría de los que trabajamos en Smalltalk. Comparto en gran medida algunas de las cosas que decís y hago algunas pocas excepciones, la principal cuando uno trabaja (como yo) no a medida, sino haciendo productos como el PPro para venta masiva. Ahí creo que es un hueco donde Dolphin encaja muy bien, claro, sabiendo que para Mac o Linux hay que correr lo que se vende vía un emulador (cosa poco probable que el usuario "compre"). Igual, la gente de Linux no compra nada, así que no se pierde mercado ahí. Mac es otro tema. Ahora estoy pensando en otro producto que tengo como para aggionarlo, pero....la verdad meterme con Pharo (ya me dijeron en la lista que el usuario típico de Mac espera look and feel Mac puro) no se si paga el tiro como decimos acá. Además, hacer UIs de usuario en Pharo es caro (en tiempo) al igual que en Squeak (aunque con la herramienta del Hasso se mejora eso) así que tengo mis dudas. Yo creo que la ventaja diferencial de Smalltalk es que uno trabaja con objetos, y eso es el GRAN cambio, uno deja de pensar en datos y programas separados y eso para mi es lo que no tiene precio ni tiene igual en tecnologías tradicionales. Eso y el entorno (la imagen) que permite un trabajo continuo sin pensar en los ciclos tradicionales de escribir-compilar-probar. Pero bueno, también hay otras dificultades para los emprendimientos web y es el hosting, ya se que se puede contratar servers virtuales, pero hay ocasiones donde una app web no justifica un server para ella sola (ni la administración del mismo). En fin, lo de siempre..... UI, hosting jejejej, siempre con lo mismo.......cada uno hará su balance, por ejemplo, en mi caso para el passwordspro, me quedé con Dolphin sin dudas, ahora para otro tipo de software, habrá que ver cada caso y los objetivos. Para desarrollos corporativos es otro mundo y no creo que haya màs opciones (en Smalltalk) que los productos comerciales (VW, VAST, Gemstone). Saludos! El 23 de diciembre de 2011 05:35, Giu <[hidden email]> escribió: > ** > > > El 10/12/2011 13:50, Germán Arduino escribió: > > > > > > El 10 de diciembre de 2011 08:43, Edgar J. De Cleene < > [hidden email]> escribió: > >> >> > Digo si somos tan buenos, y creo que si, que Smalltalk es >> diferencial, porque >> > el resto de los techies del mundo no lo consideran asi (Y hablo más que >> nada >> > del entorno de las startups o grandes compañías de Internet. Si >> producir en >> > Smalltalk te permite como mínimo el doble de productividad que en un >> lenguaje >> > convencional, porque los grandes no ven eso...? POrque no aprovechan esa >> > ventaja que les permitiría mucho menores costos? >> >> No se si somos tan buenos y repito, que nos importa si "las grandes >> compañias " , lo usen o no?. >> >> > Pero debería importar. Java, tendrá todas las cosas malas que queráis, > pero a día de hoy, es el lenguaje de programación más usado y extendido en > el mundo empresarial. Sabemos que no es por méritos propios, pero ahí está. > Smalltalk, se conoce poco, se conoce como algo de hace 30 años (como si > nombras Cobol o Fortran), y que siempre tuvo un precio prohibitivo, y a > día de hoy, ninguna opción opensource es viable. Además, Java se estudia en > la universidad. Smalltalk al parecer se estudia en Argentina, pero por > ejemplo, en España, creo que Smalltalk, como mucho, se nombra en historia > de programación y ya está, lo demás, es C/C++ y Java prácticamente (creo > que en Cataluña si hay un catedrático que dá Smalltalk, pero es una > excpeción, y aparte, viven en su mundo y en su idioma como si de otro pais > se tratara). Ésto, también repercute como dices en los costos. Para > encontrar un programador experimentado en Smalltalk, has de buscar mucho, y > pagarle lo que pida, mientras un becario en Java cobrando una miseria, sale > de debajo de las piedras. > > Algunos me conocéis y sabéis que llevo tras Squeak varios años, y nunca me > puse en serio más allá de probar cosas y hacer un seguimiento del proyecto, > pero, sobre todo, porque en mi opinión, por mucho que duela decirlo, por > muy productivo que pueda ser Smalltalk, del lado OpenSource, no está > preparado para el mundo empresarial (y yo no tuve tiempo de dedicarle, mi > parte de culpa también tengo). Obviamente, VA Smalltalk (que lo veo > carísimo) o VisualWorks o Dolphin (que sólo va en Windows), si serán > entornos para producción y demostrado está (creo), pero las > implementaciones opensource no. Pharo parece que quiso cambiar algo ésto, y > para hacer alguna cosa en el mundo web puede servir, pero para aplicaciones > empresariales y aburridas (mercado que aún muchos clientes es el que > desean), a día de hoy Smalltalk está muy verde (y lo seguirá estando), ya > que, si no me equivoco, el 80% al menos de sus "usuarios" lo usan para > investigación, o como juguete, no para "trabajar". Además, también hay que > tener en cuenta, que muchos programadores, no quieren, o no están > interesados en tocar código de la VM, o del corazón del entorno, > simplemente, quieren heredar y trabajar, cosa, que por ejemplo, no hace > falta en Java, pero es casi obligatorio en Squeak/Pharo, ya que la > instalación de un simple paquete, puede comenzar a lanzar errores que o > sabes como funciona todo por dentro, o no sabes solucionar, y como no hayas > grabado antes de instalar, te deja la imágen coja con una instalación a > medias. > > Luego está la fragmentación, hay gente que prefiere Squeak, mientras el > mayor número se movieron a Pharo, porque querían un Squeak un poco más > enfocado a empresas. Ambos, cada vez están más distantes el uno del otro y > es más dificil tener paquetes compatibles (por lo leido), y al final, ni > uno, ni otro. > Al programador empresarial medio, le dá igual si Squeak/Pharo tiene un > cliente IRC integrado, o un framework para músicos, porque eso no vende. > > Para el mercado empresarial hace falta acceso a motores de reporting, > BBDD, estabilidad tanto en ejecución, como en diseño etc... Smalltalk > requiere un conocimiento amplio del lenguaje (perdón), y del core del > entorno para poder trabajar con él, para poder diseñarte lo que te falte, > algo que en otros entornos no es tan necesario, programas y ya está, y > muchos pensarán "para qué perder el tiempo, si luego no voy a poder > contratar a nadie". Y al cliente final, le dá igual si tu programa lo > hiciste en uno u otro lenguaje, lo que le importa es que funcione. > > Hay mucha gente buena en el mundo Smalltalk, (Germán, Chris Muller, Edgar, > y un montón de nombres que me dejo en el tintero, y espero me perdonen) y > también hay mucha gente fragmentada entre Pharo y Squeak, y de todos, la > inmensa mayoría simplemente está por hobby, o educación, por lo que todo lo > que estamos tratanto, le dá igual, porque al fin y al cabo, el uso que se > le dá es de "juguete", sin uso en el mercado empresarial. Aún así, el > número de gente involucrada en Smalltak, es ínfimo. > > A mi, me gustaría retomar Smalltalk. Cuando consiga sacar tiempo, volveré > a ponerme con ello, y me gustaría que llegara el momento de decidir migrar > mi proyecto actual, pero por desgracia, no sé si ese momento llegará. > > La pregunta no sería, "si smalltalk es más productivo, por qué ...", la > pregunta es: "la comunidad smalltalk quiere/puede adaptarse a lo que pide > el mercado comercial?" > > > -- ============================================ 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 ============================================ |
Para mi la multiplataformidad es un valor añadido importante. Que mi cliente sepa,que puede ejecutar la aplicación desde windows linux y mac indistintamente,y yo poder desarrollar desde todos tambien.
Puesto mi cliente potencial es más la empresa que el publico en general (aunque es una linea que me gustaria abarcar cuando el tiempo lo permita), que el look&feel sea o no nativo no es algo que me preocupe. El trabajo de Andy Bower con Dolphin me encanta, pero eso, es solo windows. Llegado el momento estudiare las distintas opciones,aunque estoy seguro que si cambiáramos de entorno, y fuera a smalltalk (algo que me gustaría), probablemente acabaríamos desarrollando en VW, pero tiempo al tiempo. Respecto al hosting, no se. Esta claro que un VPS o hosting dedicado es mas caro que un hosting compartido,pero no tan desorbitado. Hay VPSs a 20$/mes que una empresa perfectamente pagaría por una solución de inventario o lo que sea. Un saludo y, por cierto, feliz navidad. Enviado desde mi dispositivo BlackBerry® de Orange. -----Original Message----- From: Germán Arduino <[hidden email]> Sender: [hidden email] Date: Sat, 24 Dec 2011 10:25:22 To: <[hidden email]> Reply-To: [hidden email] Subject: Re: Vuelvo a Celeste (fue Re: [squeakRos] FW: [Pharo-project] Command Line AWS S3 Upload/Download Tool using Pharo Smalltalk) Hola Giuseppe: Tus reflexiones son las que hemos tratado muchas veces y por las cuales hemos pasado en mayor o menor medida la mayoría de los que trabajamos en Smalltalk. Comparto en gran medida algunas de las cosas que decís y hago algunas pocas excepciones, la principal cuando uno trabaja (como yo) no a medida, sino haciendo productos como el PPro para venta masiva. Ahí creo que es un hueco donde Dolphin encaja muy bien, claro, sabiendo que para Mac o Linux hay que correr lo que se vende vía un emulador (cosa poco probable que el usuario "compre"). Igual, la gente de Linux no compra nada, así que no se pierde mercado ahí. Mac es otro tema. Ahora estoy pensando en otro producto que tengo como para aggionarlo, pero....la verdad meterme con Pharo (ya me dijeron en la lista que el usuario típico de Mac espera look and feel Mac puro) no se si paga el tiro como decimos acá. Además, hacer UIs de usuario en Pharo es caro (en tiempo) al igual que en Squeak (aunque con la herramienta del Hasso se mejora eso) así que tengo mis dudas. Yo creo que la ventaja diferencial de Smalltalk es que uno trabaja con objetos, y eso es el GRAN cambio, uno deja de pensar en datos y programas separados y eso para mi es lo que no tiene precio ni tiene igual en tecnologías tradicionales. Eso y el entorno (la imagen) que permite un trabajo continuo sin pensar en los ciclos tradicionales de escribir-compilar-probar. Pero bueno, también hay otras dificultades para los emprendimientos web y es el hosting, ya se que se puede contratar servers virtuales, pero hay ocasiones donde una app web no justifica un server para ella sola (ni la administración del mismo). En fin, lo de siempre..... UI, hosting jejejej, siempre con lo mismo.......cada uno hará su balance, por ejemplo, en mi caso para el passwordspro, me quedé con Dolphin sin dudas, ahora para otro tipo de software, habrá que ver cada caso y los objetivos. Para desarrollos corporativos es otro mundo y no creo que haya màs opciones (en Smalltalk) que los productos comerciales (VW, VAST, Gemstone). Saludos! El 23 de diciembre de 2011 05:35, Giu <[hidden email]> escribió: > ** > > > El 10/12/2011 13:50, Germán Arduino escribió: > > > > > > El 10 de diciembre de 2011 08:43, Edgar J. De Cleene < > [hidden email]> escribió: > >> >> > Digo si somos tan buenos, y creo que si, que Smalltalk es >> diferencial, porque >> > el resto de los techies del mundo no lo consideran asi (Y hablo más que >> nada >> > del entorno de las startups o grandes compañías de Internet. Si >> producir en >> > Smalltalk te permite como mínimo el doble de productividad que en un >> lenguaje >> > convencional, porque los grandes no ven eso...? POrque no aprovechan esa >> > ventaja que les permitiría mucho menores costos? >> >> No se si somos tan buenos y repito, que nos importa si "las grandes >> compañias " , lo usen o no?. >> >> > Pero debería importar. Java, tendrá todas las cosas malas que queráis, > pero a día de hoy, es el lenguaje de programación más usado y extendido en > el mundo empresarial. Sabemos que no es por méritos propios, pero ahí está. > Smalltalk, se conoce poco, se conoce como algo de hace 30 años (como si > nombras Cobol o Fortran), y que siempre tuvo un precio prohibitivo, y a > día de hoy, ninguna opción opensource es viable. Además, Java se estudia en > la universidad. Smalltalk al parecer se estudia en Argentina, pero por > ejemplo, en España, creo que Smalltalk, como mucho, se nombra en historia > de programación y ya está, lo demás, es C/C++ y Java prácticamente (creo > que en Cataluña si hay un catedrático que dá Smalltalk, pero es una > excpeción, y aparte, viven en su mundo y en su idioma como si de otro pais > se tratara). Ésto, también repercute como dices en los costos. Para > encontrar un programador experimentado en Smalltalk, has de buscar mucho, y > pagarle lo que pida, mientras un becario en Java cobrando una miseria, sale > de debajo de las piedras. > > Algunos me conocéis y sabéis que llevo tras Squeak varios años, y nunca me > puse en serio más allá de probar cosas y hacer un seguimiento del proyecto, > pero, sobre todo, porque en mi opinión, por mucho que duela decirlo, por > muy productivo que pueda ser Smalltalk, del lado OpenSource, no está > preparado para el mundo empresarial (y yo no tuve tiempo de dedicarle, mi > parte de culpa también tengo). Obviamente, VA Smalltalk (que lo veo > carísimo) o VisualWorks o Dolphin (que sólo va en Windows), si serán > entornos para producción y demostrado está (creo), pero las > implementaciones opensource no. Pharo parece que quiso cambiar algo ésto, y > para hacer alguna cosa en el mundo web puede servir, pero para aplicaciones > empresariales y aburridas (mercado que aún muchos clientes es el que > desean), a día de hoy Smalltalk está muy verde (y lo seguirá estando), ya > que, si no me equivoco, el 80% al menos de sus "usuarios" lo usan para > investigación, o como juguete, no para "trabajar". Además, también hay que > tener en cuenta, que muchos programadores, no quieren, o no están > interesados en tocar código de la VM, o del corazón del entorno, > simplemente, quieren heredar y trabajar, cosa, que por ejemplo, no hace > falta en Java, pero es casi obligatorio en Squeak/Pharo, ya que la > instalación de un simple paquete, puede comenzar a lanzar errores que o > sabes como funciona todo por dentro, o no sabes solucionar, y como no hayas > grabado antes de instalar, te deja la imágen coja con una instalación a > medias. > > Luego está la fragmentación, hay gente que prefiere Squeak, mientras el > mayor número se movieron a Pharo, porque querían un Squeak un poco más > enfocado a empresas. Ambos, cada vez están más distantes el uno del otro y > es más dificil tener paquetes compatibles (por lo leido), y al final, ni > uno, ni otro. > Al programador empresarial medio, le dá igual si Squeak/Pharo tiene un > cliente IRC integrado, o un framework para músicos, porque eso no vende. > > Para el mercado empresarial hace falta acceso a motores de reporting, > BBDD, estabilidad tanto en ejecución, como en diseño etc... Smalltalk > requiere un conocimiento amplio del lenguaje (perdón), y del core del > entorno para poder trabajar con él, para poder diseñarte lo que te falte, > algo que en otros entornos no es tan necesario, programas y ya está, y > muchos pensarán "para qué perder el tiempo, si luego no voy a poder > contratar a nadie". Y al cliente final, le dá igual si tu programa lo > hiciste en uno u otro lenguaje, lo que le importa es que funcione. > > Hay mucha gente buena en el mundo Smalltalk, (Germán, Chris Muller, Edgar, > y un montón de nombres que me dejo en el tintero, y espero me perdonen) y > también hay mucha gente fragmentada entre Pharo y Squeak, y de todos, la > inmensa mayoría simplemente está por hobby, o educación, por lo que todo lo > que estamos tratanto, le dá igual, porque al fin y al cabo, el uso que se > le dá es de "juguete", sin uso en el mercado empresarial. Aún así, el > número de gente involucrada en Smalltak, es ínfimo. > > A mi, me gustaría retomar Smalltalk. Cuando consiga sacar tiempo, volveré > a ponerme con ello, y me gustaría que llegara el momento de decidir migrar > mi proyecto actual, pero por desgracia, no sé si ese momento llegará. > > La pregunta no sería, "si smalltalk es más productivo, por qué ...", la > pregunta es: "la comunidad smalltalk quiere/puede adaptarse a lo que pide > el mercado comercial?" > > > -- ============================================ 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 ============================================ |
Free forum by Nabble | Edit this page |