Hi Sven,

Thanks a lot for the positive message!

Indeed, it is a much needed perspective, and I am sure there are many other 
similar examples.

Btw, nice work, too :).

Cheers,
Doru



> On Apr 13, 2018, at 8:47 PM, Sven Van Caekenberghe <s...@stfx.eu> wrote:
> 
> Hi,
> 
> Given that the mailing lists are often used to ask questions when we get in 
> trouble, report bugs and other issues, conduct public discussion between 
> strong headed individuals, we quickly forget what a fantastic platform Pharo 
> is.
> 
> Last month I implemented a rough MVP-style ticket sales platform that was 
> successfully used to sell and validate at the entrance, about 1000 digital, 
> online tickets for a relatively large 3000+ attendance event (a party). It 
> took only a couple of days to build and deploy, and it was a lot of fun - it 
> was even done in 'unstable' Pharo 7.
> 
> Early on I decided to identify each individual ticket by a unique URL. For 
> easier presentation and scanning purposes, I encoded that URL in a QR code.
> 
> Although I am grateful for the whole Pharo ecosystem (including Seaside), we 
> all build on top of other people's work, I was especially happy with Jochen 
> Rick's QRCode package (http://smalltalkhub.com/#!/~JochenRick/QRCode/). This 
> is such a great piece of work !
> 
> It worked right out of the box in Pharo 7 (even though it is from 2013/2014), 
> was well designed, easy to figure out, was well documented, had unit tests. I 
> can't say anything bad about it, it is as close to perfect as I have ever 
> seen. So: thanks Jochen, you made my day !
> 
> Here is how a ticket generates its own QR code:
> 
> T123Ticket>>#asQRCode
>   ^ self url asString asQRCode formWithQuietZone magnifyBy: 5
> 
> Just beautiful.
> 
> It is also easy (for a non-graphics, non-UI person like me) to combine the QR 
> code with some text:
> 
> T123Ticket >>#asQRCodeWithText
>   | form font |
>   form := Form extent: 535 @ 185 depth: 1.
>   font := LogicalFont familyName: 'Bitmap DejaVu Sans' pointSize: 14.
>   self asQRCode displayOn: form at: 0 @ 0.
>   form getCanvas
>     drawString: self url asString at: 180 @ 20 font: font color: Color black;
>     drawString: self id36, ' - ', ticketId asString at: 180 @ 45 font: font 
> color: Color black;
>     drawString: (name ifNil: [ 'N.N' ]) at: 180 @ 90  font: font color: Color 
> black;
>     drawString: (email ifNil: [ '@' ]) at: 180 @ 115 font: font color: Color 
> black;
>     drawString: (phone ifNil: [ '+' ]) at: 180 @ 140 font: font color: Color 
> black.
>   ^ form
> 
> Next we combine this with a nice template designed by a graphics artist:
> 
> T123Ticket >>#asQRCodeWithTextInTemplate
>   | templateFile form |
>   templateFile := 'tickets123-template-{1}.jpg' format: { self event id }.
>   form := PluginBasedJPEGReadWriter formFromFileNamed: templateFile.
>   self asQRCodeWithText displayOn: form at: 20@540.
>   ^ form
> 
> And finally, the ticket form is encoded as a JPEG (to be mailed and so on):
> 
> T123Ticket >>#asJPEGBytes
>   ^ ByteArray streamContents: [ :out | 
>       PluginBasedJPEGReadWriter putForm: self asQRCodeWithTextInTemplate 
> onStream: out ]
> 
> <Screen Shot 2018-04-13 at 20.40.54.png>
> 
> I also found GT Inspector very handy (again) in doing back end work (managing 
> payments and other administration), especially the ability to use Spotter on 
> a collection open in an inspector.
> 
> Anyway, I know many of you have similar happy experiences, I just wanted to 
> share (one of) mine.
> 
> Thanks Jochen, thanks everyone.
> 
> Sven
> 
> --
> Sven Van Caekenberghe
> Proudly supporting Pharo
> http://pharo.org
> http://association.pharo.org
> http://consortium.pharo.org
> 
> 
> 

--
www.tudorgirba.com
www.feenk.com

"Speaking louder won't make the point worthier."


Reply via email to