Re: Software that makes placemats
Posted: 23:16 Sat 25 Jun 2011
Done.


A place for those passionate about port, and for those new to it. We hold lots of Port tastings: please join us!
https://www.theportforum.com/
∃ StickyLabelsByNameWhichReplaceCirclearrays. For an example see the organisation thread for The Bell, 2011.[url=http://www.theportforum.com/viewtopic.php?p=39371#p39371]Here[/url] jdaw1 wrote:At The Bell, for the Christmas tasting on 16 December 2010, for the first time, glass stickers were used rather than placemats. At the Bell glasses and space is tight, there just not being space for each person to use three pages of A4 of table.
Code: Select all
/Circlearrays [
[ (Sandeman) (1970) ]
[ (Graham) (1970) ]
[ (Graham) (1963) ]
[ (Sandeman) (1977) ]
[ (Graham) (1977) ]
[ (Graham) (1985) (Single) ]
[ (Sandeman) (1985) ]
[ (Graham) (1985) (Magnum) ]
] def
/Titles [
(S70)
(G70)
(G63)
(S77)
(G77)
(G85)
(S85)
(G85)
] def
/Belowtitles [
()
()
()
()
()
(Single)
()
(Magnum)
] def
Code: Select all
/Belowtitle () def
/GlassesData [
<< /Title (S70) /Circlearray [ (Sandeman) (1970) ] >>
<< /Title (G70) /Circlearray [ (Graham) (1970) ] >>
<< /Title (G63) /Circlearray [ (Graham) (1963) ] >>
<< /Title (S77) /Circlearray [ (Sandeman) (1977) ] >>
<< /Title (G77) /Circlearray [ (Graham) (1977) ] >>
<< /Title (G85) /Belowtitle (Single) /Circlearray [ (Graham) (1985) (Single) ] >>
<< /Title (S85) /Circlearray [ (Sandeman) (1985) ] >>
<< /Title (G85) /Belowtitle (Magnum) /Circlearray [ (Graham) (1985) (Magnum) ] >>
] def
As a non-programmer, I do quite like the look of this, though the original multi-array presentation is perfectly clear.jdaw1 wrote:A competent programmer recently...suggested that there be a single array of dictionaries, with defaults outside:Upon reflection, in a purist IT sense he is completely. But I am concerned that non-programmers, who might already be struggling to use the software, would find this even less intuitive.Code: Select all
/Belowtitle () def /GlassesData [ << /Title (S70) /Circlearray [ (Sandeman) (1970) ] >> << /Title (G70) /Circlearray [ (Graham) (1970) ] >> << /Title (G63) /Circlearray [ (Graham) (1963) ] >> << /Title (S77) /Circlearray [ (Sandeman) (1977) ] >> << /Title (G77) /Circlearray [ (Graham) (1977) ] >> << /Title (G85) /Belowtitle (Single) /Circlearray [ (Graham) (1985) (Single) ] >> << /Title (S85) /Circlearray [ (Sandeman) (1985) ] >> << /Title (G85) /Belowtitle (Magnum) /Circlearray [ (Graham) (1985) (Magnum) ] >> ] def
Comments?
I don't exactly follow what you mean, but my suggestion is that each line of the array would be set out along the lines of the following:jdaw1 wrote:Definitions would be needed for Circlearray, Title, Abovetitle, Belowtitle, Overtitle, and FillText. Most will be empty, so using a default would substantially lessen clutter in the parameters.
ConciseRAYC wrote:I don't exactly follow what you mean
Code: Select all
/Abovetitle () def
/Belowtitle () def
/Overtitle () def
/FillText () def
/GlassesData [
<< /Title (S70) /Circlearray [ (Sandeman) (1970) ] >>
<< /Title (G70) /Circlearray [ (Graham) (1970) ] >>
<< /Title (G63) /Circlearray [ (Graham) (1963) ] >>
<< /Title (S77) /Circlearray [ (Sandeman) (1977) ] >>
<< /Title (G77) /Circlearray [ (Graham) (1977) ] >>
<< /Title (G85) /Belowtitle (Single) /Circlearray [ (Graham) (1985) (Single) ] >>
<< /Title (S85) /Circlearray [ (Sandeman) (1985) ] >>
<< /Title (G85) /Belowtitle (Magnum) /Circlearray [ (Graham) (1985) (Magnum) ] >>
] def
Code: Select all
/GlassesData [
<< /Title (S70) /Belowtitle () /Circlearray [ (Sandeman) (1970) ] /Abovetitle () /Overtitle () /FillText () >>
<< /Title (G70) /Belowtitle () /Circlearray [ (Graham) (1970) ] /Abovetitle () /Overtitle () /FillText () >>
<< /Title (G63) /Belowtitle () /Circlearray [ (Graham) (1963) ] /Abovetitle () /Overtitle () /FillText () >>
<< /Title (S77) /Belowtitle () /Circlearray [ (Sandeman) (1977) ] /Abovetitle () /Overtitle () /FillText () >>
<< /Title (G77) /Belowtitle () /Circlearray [ (Graham) (1977) ] /Abovetitle () /Overtitle () /FillText () >>
<< /Title (G85) /Belowtitle (Single) /Circlearray [ (Graham) (1985) (Single) ] /Abovetitle () /Overtitle () /FillText () >>
<< /Title (S85) /Belowtitle () /Circlearray [ (Sandeman) (1985) ] /Abovetitle () /Overtitle () /FillText () >>
<< /Title (G85) /Belowtitle (Magnum) /Circlearray [ (Graham) (1985) (Magnum) ] /Abovetitle () /Overtitle () /FillText () >>
] def
No doubt.jdaw1 wrote:ConciseCode: Select all
/Abovetitle () def /Belowtitle () def /Overtitle () def /FillText () def /GlassesData [ << /Title (S70) /Circlearray [ (Sandeman) (1970) ] >> << /Title (G70) /Circlearray [ (Graham) (1970) ] >> << /Title (G63) /Circlearray [ (Graham) (1963) ] >> << /Title (S77) /Circlearray [ (Sandeman) (1977) ] >> << /Title (G77) /Circlearray [ (Graham) (1977) ] >> << /Title (G85) /Belowtitle (Single) /Circlearray [ (Graham) (1985) (Single) ] >> << /Title (S85) /Circlearray [ (Sandeman) (1985) ] >> << /Title (G85) /Belowtitle (Magnum) /Circlearray [ (Graham) (1985) (Magnum) ] >> ] def
Code: Select all
<< /Title (G70) /Above (Hedges & Butler) /Below (Magnum) / Over () /Fill (G70) /Circlearray [ (Graham) (1970) (Magnum) ] >>
<< /Title (G70) /Above (Berry Brothers) /Below (Single) / Over () /Fill (G70) /Circlearray [ (Graham) (1970) (Single) ] >>
<< /Title (D63) /Above (Oporto) /Below (Half) / Over () /Fill (D63) /Circlearray [ (Dow) (1963) (Half) ] >>
Understood - it has worked very well to date and these are niche functions, so no need to change.jdaw1 wrote:I accept your point about the template, but, in a typical placemat, almost all of this would be empty. So the GlassesData would be mostly clutter: it becomes harder to read, to see what will happen, and thereby to find errors.
Maybe the conclusion is to leave it as-is, with separate arrays of strings.
The following would work:RAYC wrote:But let's say, for arguments sake, i am tasting two bottles of G70 (one magnum bottled by Hedges and Butler and one single bottled by BBR) and a half of Dow 1963 (Oporto-bottled) and want to reflect this in the placemats.
As a non-programmer, I don't know what to do with your template.
Code: Select all
/Abovetitle () def
/Belowtitle () def
/Overtitle () def
/FillText () def
/GlassesData [
<< /Title (G70) /Belowtitle (Magnum) /Overtitle (Hedges & Butler) /Circlearray [ (Graham) (1970) (Magnum) (H&B) ]>>
<< /Title (G70) /Overtitle (Berry Bros & Rudd) /Circlearray [ (Graham) (1970) (Single) (BBR) ] >>
<< /Title (D63) /Belowtitle (Half) /Circlearray [ (Dow) (1963) (Half) ] >>
] def
A more recent email makes a good observation:[url=http://www.conandalton.net/]The competent programmer[/url], after reading the above, by email wrote:As you said, things might have been different for the code if you had started that way but it's tricky to change now. The same is true for your users. Only a few will be able to judge the merits of one approach over the other; everyone else will prefer what they're used to.
In a subsequent email he wrote:RAYC has a point, that in a typical user interface, you'd likely show all the fields and ask the user to leave fields blank to get the default values. Whereas in code you want to kill clutter and hide stuff that doesn't need to be visible. In the placemat code, the parameters lines are playing two roles - one as plain old code, another as user interface.
So I guess the ultimate answer hinges on which of those two roles is more important for the lines in question.
[url=http://www.fortheloveofport.com/ftlopforum/viewtopic.php?p=70203#p70203]On :ftlop:[/url] Eric Menchen wrote:I like the concise version, as long as there is a comment line above telling me all the options. Disclaimer: I write code for a living.
+1, emphasis minejdaw1 wrote:[url=http://www.fortheloveofport.com/ftlopforum/viewtopic.php?p=70203#p70203]On :ftlop:[/url] Eric Menchen wrote:I like the concise version, as long as there is a comment line above telling me all the options. Disclaimer: I write code for a living.
In the thread entitled [url=http://www.theportforum.com/viewtopic.php?p=44162#p44162]Port from the Nineteen Nineties, Mon 08 August 2011[/url], jdaw1 wrote:[url=http://www.theportforum.com/viewtopic.php?p=43927#p43927]Here[/url] jdaw1 wrote:
- And, slightly kludged, a ‘What is it?’ page. Comment encouraged.
[url=http://www.theportforum.com/viewtopic.php?p=43952#43952]Here[/url] AHB wrote:A way to record guesses for posterity. I'm happy to try this out on 8th August.[url=http://www.theportforum.com/viewtopic.php?p=43953#43953]Here[/url] jdaw1 wrote:Please scan and upload the sheet it’s OK, you will all be rubbish, as would I if I were there and comment on the technology.[url=http://www.theportforum.com/viewtopic.php?p=44122#p44122]Here[/url] RAYC wrote:Should the "total" field in the guess recorder be a column corresponding to the wines (as currently drafted) or a row at the bottom to correspond to the drinkers? (or perhaps both, giving two totals - best guesser, most guessed)Comment encouraged.[url=http://www.theportforum.com/viewtopic.php?p=44124#44124]Here[/url] jdaw1 wrote:Updated draft of the placemats.What is written in the rectangles is the names of wines, abbreviated. So totalling these will be more arduous than totalling numerical scores (3 for first place; 2 for second; 1 third). Further design work probably needed.
- Kludged improvement to ‟What is it?” sheet. Comment on this would be welcomed.
RAYC wrote:- Guesses are an interesting record of people's impressions of the port (see comment re: Roeda above)
- A slight concern from some that the process of gathering votes after every round got in the way of relaxed conversation. Though i would imagine that this would be less of an issue at a smaller tasting with fewer bottles.
- We are all terrible - top score was 6 points out of a possible 28 (1 point for vintage, 1 for shipper). Across all 8 people, there was only one correct guess at shipper. Scores for correct identification of vintage were no doubt flattered by the fact that we only had a choice of 10 years (or 9, discounting 1993)!
- The sheet worked well, and totalling points was not an arduous task. I had slight difficulty when drunk with recording votes in the correct columns...though this is not a criticism of the sheet itself!
- Inclusion of an extra row or two for extra ports would be good.
Earlier, in the [url=http://www.theportforum.com/viewtopic.php?p=44124#p44124]planning thread for that tasting[/url], jdaw1 wrote:Note to self: there could be array parameters VoteRecorderRowTotalTitles and VoteRecorderColTotalTitles. The numbers of total rows and columns would be the length of these arrays, titled with their contents. Of course, the arrays themselves could depend on VoteRecorderSheetNum, so compelling a row in the ‘What is it?’ page but not in the ‘WOTN’ page. But that forces users doing an obvious thing to write code, which isn’t nice. Maybe these could be double-depth arrays, the outer array being of the same length as GlassesClusteredOnVoteRecorders. More complicated, but spares the ordinary user from code.
Later note to self: it’s complicated because there is too much flexibility only one total column or row is needed, so no need for the extra arrays depths that allow multiple. Instead have a non-array single piece of text, VoteRecorderTotalRowTitle and VoteRecorderTotalColTitle, both probably being (Total). Then have two arrays of booleans, of the same length as GlassesClusteredOnVoteRecorders, called VoteRecorderShowTotalRow and VoteRecorderShowTotalCol. That better captures what I actually want to do, with less needless excess.
It wasn’t meant that way, but it is a criticism. A good user interface, which applies as much to paper as to electronic media, can be used by a drunk. Please ponder how it could be bettered. For instance, would it have helped if every fourth vertical line were thicker? Would it be worth repeating the names at the bottom of the page?RAYC wrote:- The sheet worked well, and totalling points was not an arduous task. I had slight difficulty when drunk with recording votes in the correct columns...though this is not a criticism of the sheet itself!
That’s mildly inconvenient to do with GlassesClusteredOnVoteRecorders, but an extra integer parameter can be added.RAYC wrote:- Inclusion of an extra row or two for extra ports would be good.
To me, no. As has already been pointed out, in this case the software is the user interface.jdaw1 wrote:If this change is done, all options would be plainly visible, but not necessarily in a comment line. Does that suffice?
Noted. Thank you.Glenn E. wrote:To me, no.jdaw1 wrote:If this change is done, all options would be plainly visible, but not necessarily in a comment line. Does that suffice?
Hitherto, when placemats have been printed, they have been deemed finished the online edition being frozen at the printed version.[url=http://www.theportforum.com/viewtopic.php?p=45355#p45355]Here[/url] RAYC wrote:Placemats printed.
That’s not quite the point, I think. The online placemats are part of the record of the tasting. Records are important. (Some might recall that DRT and I are meant to be writing a book based on various records relating to port.)DRT wrote:but do wonder what sort of geek would find it necessary to print a set of placemats for a tasting that had already happened.
I knew that the answer was "us"jdaw1 wrote:That’s not quite the point, I think. The online placemats are part of the record of the tasting. Records are important. (Some might recall that DRT and I are meant to be writing a book based on various records relating to port.)DRT wrote:but do wonder what sort of geek would find it necessary to print a set of placemats for a tasting that had already happened.
To what extent can we retrospectively change this ‘record’? My view is slightly, not so much as to change the print, and only very soon after the tasting. It isn’t quite purist, but nearly so.
The British Library archives copies of jdawiseman.com. These copies are derived by following the links from the home page, and the manual links to some but not all placemats. I could add a page listing all the placemats, so that all are archived.SushiNorth wrote:Are our placemats being stored and backed up?
Done. Henceforth the British Library will find all these.jdaw1 wrote:I could add a page listing all the placemats, so that all are archived.
Is this list intended to include all TPF Tastings, and if so would it be useful to DL the ones that we've done in NYC for inclusion in that archive?jdaw1 wrote:Done. Henceforth the British Library will find all these.jdaw1 wrote:I could add a page listing all the placemats, so that all are archived.
If not on a ‘British’ website that the BL archives, it would retain the links but not archive the content.SushiNorth wrote:Is this list intended to include all TPF Tastings, and if so would it be useful to DL the ones that we've done in NYC for inclusion in that archive?
I would also suggest reducing their overall (font) size to 80% of current, and either increasing the line width by 40% or possible solid filling the characters (at 6.25 or 5%)jdaw1 wrote:[*]Based on a suggestion of PhilW, BackgroundTextsGlassesPaintCode changed from 25% black to 6¼% black.
Increased by a factor of 1.5.PhilW wrote:increasing the line width by 40%
I think that parameters needed are as follows:jdaw1 wrote:
- RAYC requested a sheet on which corks and cork fragments could be put, both for photography and for observation by others. This has not yet been done, whilst I ponder the range of variations that might be wanted.
Sounds great - if it's ready in time, i can try next month for the GC-SW-QH tasting. But i appreciate this is non-essential!jdaw1 wrote:I think that parameters needed are as follows:jdaw1 wrote:
- RAYC requested a sheet on which corks and cork fragments could be put, both for photography and for observation by others. This has not yet been done, whilst I ponder the range of variations that might be wanted.
Then the code works out how many can go on each sheet. Each is a rectangle, surrounded by the Circlearrays text, very small, and containing, larger but not very large, the various title-like texts. Sheets would be discretely titled ‟The Corks”.
- /CorkDisplay true def, saying whether or not to bother.
- /GlassesClusteredOnCorkDisplay GlassesClusteredOnDecantingNotes def, saying which glasses go there;
- CorkDisplayMinWidth and CorkDisplayMinHeight, being minimum sizes.
Does that work?
Work has started. This work has revealed that the same chunk of code, with very small changes, appears four times in the current version. It is being wrapped into a sub-routine, perhaps to be called CirclearrayInStraightLine, to do the same a little better. This will result in a minor improvement to the tasting-note pages, as well as being used in cork-display pages. Rejoice!jdaw1 wrote:
- RAYC requested a sheet on which corks and cork fragments could be put, both for photography and for observation by others. This has not yet been done, whilst I ponder the range of variations that might be wanted.
I use Notepad++ daily and find it is an excellent context-sensitive-highlighting text editor for use with many languages including postscript (though I hadn't used it for that particular language before today, I use it for several others regularly); highly recommended.On a PC the specification of NotePad++ looks encouraging user feedback welcomed
This might be slightly mis-placed, but does what it seems to do. Why, oh why? Because several page types, including decanter labels and pre-pour and sticky-labels, contain extracts from the glasses pages. If there are no glasses pages, there cannot be sticky labels. But what if!? Then have glasses pages, and show 0 copies of them.PhilW wrote:The value "/NonDecanterLabelGlassesNumCopies 1 def" appears a few lines below the comment "% Non-Glasses Pages %". Changing this value to zero appears to stop the glasses pages from being printed. Is this as intended, or what is this variable intended to control?
They can indeed touch. Such a parameter could be added, though I think it should be expressed a proportion of one of the radii (Radii, RadiiCirclearrayBaseline, or RadiiCirclearrayInside). Suggest a name for the parameter. (Edit: though the boundaries of the Titles etc are separately constrained if there are decanter labels, and of course common sizing will also shrink some.)PhilW wrote:Also, perhaps a trivial detail but - is there a setting to define the width of any exclusion area on the glasses sheets between the outer ring of text as defined by circlearrays and the inner text defined by titles, belowtitles? In a couple of cases experimenting I found that the inner text can (virtually) meet the outer, and therefore by allowing optionally configurable decrease of the effective inner circle size (in which the title/belowtitle are sized and placed) by a small degree (say <=5%, configurable, or a fixed amount e.g. 1mm) might help clarity?
Thank you: manual updated.PhilW wrote:I use Notepad++ daily and find it is an excellent context-sensitive-highlighting text editor for use with many languages including postscript (though I hadn't used it for that particular language before today, I use it for several others regularly); highly recommended.On a PC the specification of NotePad++ looks encouraging user feedback welcomed
In that case I wouldn't suggest it was mis-placed, but perhaps a change of name to something like "/InhibitGlassesPagePrinting" for clarity?jdaw1 wrote:This might be slightly mis-placed, but does what it seems to do. Why, oh why? Because several page types, including decanter labels and pre-pour and sticky-labels, contain extracts from the glasses pages. If there are no glasses pages, there cannot be sticky labels. But what if!? Then have glasses pages, and show 0 copies of them.PhilW wrote:The value "/NonDecanterLabelGlassesNumCopies 1 def" appears a few lines below the comment "% Non-Glasses Pages %". Changing this value to zero appears to stop the glasses pages from being printed. Is this as intended, or what is this variable intended to control?
If I've understood the current variables correctly - Radii being the radius to the outside of the circlearray text, and RadiiCircleArrayInside to be the radius to the inside of the circlearray text - then I'd suggest RadiiCirclearrayInsideMargin with default either zero (to print as current) or 0.025 (to provide a 2.5% (radially) gap).jdaw1 wrote:They can indeed touch. Such a parameter could be added, though I think it should be expressed a proportion of one of the radii (Radii, RadiiCirclearrayBaseline, or RadiiCirclearrayInside). Suggest a name for the parameter. (Edit: though the boundaries of the Titles etc are separately constrained if there are decanter labels, and of course common sizing will also shrink some.)PhilW wrote:Also, perhaps a trivial detail but - is there a setting to define the width of any exclusion area on the glasses sheets between the outer ring of text as defined by circlearrays and the inner text defined by titles, belowtitles? In a couple of cases experimenting I found that the inner text can (virtually) meet the outer, and therefore by allowing optionally configurable decrease of the effective inner circle size (in which the title/belowtitle are sized and placed) by a small degree (say <=5%, configurable, or a fixed amount e.g. 1mm) might help clarity?
Good clarity (though elsewhere I have used !Suppress!); but removes the ≥2 functionality. For what would one want the ≥2 functionality? Hmmm. Not sure. Perhaps for a tasting on a train, in which spillage is expected and substitutions desired? Hmmm.PhilW wrote:In that case I wouldn't suggest it was mis-placed, but perhaps a change of name to something like "/InhibitGlassesPagePrinting" for clarity?
You have understood, though the name might need to be nearer to the rather horrible TitlesEtcInsideMarginProportionRadiiCirclearrayInside.PhilW wrote:If I've understood the current variables correctly - Radii being the radius to the outside of the circlearray text, and RadiiCircleArrayInside to be the radius to the inside of the circlearray text - then I'd suggest RadiiCirclearrayInsideMargin with default either zero (to print as current) or 0.025 (to provide a 2.5% (radially) gap).
This is true. I apologise for my earlier, churlish comment. My thanks and appreciation go to those able to contribute meaningfully to this thread and keep Julian challenged and in check.jdaw1 wrote:You should delight that, at no effort to yourself, TPF’s finest minds are keeping me in check. Express joy.