Provide a data model for quantities (a value plus a unit of measure) that is similar to a glossary entry. By defining a quantity once, it can be referenced repeatedly as needed. Content can explicitly reference the quantity and alternative units of measure. Commonly, this would be instances where SI and US customary units must both be provided; for example, “The length of a football (soccer) pitch must be between 90m (100 yards) and 120m (130 yards)”.
Alternately, the element can implicitly call for alternate units of measure and localized output generators can provide the one appropriate one. Further, output generators can be configured to automatically provide conversions, even if alternate units of measure are not expressed in the XML.
<quantity>
<datauom unit="[picklist]" abbrev="[yes|no]"/>
<value>N.M</value>
<mainuom unit="[picklist]" abbrev="[yes|no]"/>
<altuom unit="[picklist]" abbrev="[yes|no]"/>
</quantity>
| Doctype | Content model | Contained by |
| [Any, all] | ( (datauom) (any number) then (value) (one) then (mainuom) (one) then (altuom) (any number) ) | [same as <ph>] |
| Name | Description | Data type | Default value | Required? |
| unit | Indicates an SI or US customary unit. Picklist of the seven SI base units and one each of the underived US customary units, plus temperature units. | ( second | meter | m2 | m3 | kilogram | ampere | kelvin | mole | candela | celsius | foot | ft2 | ft3 | nauticalmile | liter | floz | drypint | ounce | troygrain | fahrenheit ) | [?] | Yes |
| visible | Indicates that the source-data quantity renders in output. | ( yes | no ) | no | No |
| abbrev | Toggles abbreviation of the unit of measure (@unit). | ( yes | no ) | yes | No |
| Name | Description | Data type | Default value | Required? |
| unit | Indicates an SI or US customary unit. Picklist of the seven SI base units and one each of the underived US customary units, plus temperature units. | ( second | meter | m2 | m3 | kilogram | ampere | kelvin | mole | candela | celsius | foot | ft2 | ft3 | nauticalmile | liter | floz | drypint | ounce | troygrain | fahrenheit ) | [?] | Yes |
| abbrev | Toggles abbreviation of the unit of measure (@unit). | ( yes | no ) | yes | No |
Perhaps quantities and their conversion might be best constrained by the unit category or type. They would have the same children as above model.
| Quantity type | Alternative element name | Available @unit data types |
| Length | <lenquantity> | ( meter | foot |nauticalmile ) |
| Area | <areaquantity> | ( m2 | ft2 ) |
| Volume1 | <volquantity> | ( m3 | liter| ft3 | floz | drypint ) |
| Time | <timequantity> | ( second | [prefix multipliers, like ms?] ) |
| Mass/Weight2 | <massquantity> | ( kilogram | ounce | troygrain ) |
| Temperature | <tempquantity> | ( celsius | fahrenheit ) |
Footnotes
This approach ensures that your files will compress efficiently and remain consistent year after year, so that you can update screens selectively instead of in toto.
Both of these methods eliminate the need to carefully crop to pixel precision in your raster-art image-manipulation program.
Failure to apply one of these two approaches will lead to the effect of your images seeming to ‘randomly’ slide left and right relative to the page margins.
Result: A platform-independent social networking protocol that abstracts user data out of sandboxed services.
Major Bonus:Â Contact data is only maintained in one data store: the user’s! No more obsolete contact details, for those to whom you subscribe. Personal calendars could be similarly driven. Anything you’d need to share and sync that currently requires manual data entry or linking.
]]>Use cases: Leverage all the voice-activated functions of current chat bots.
User merely speaks all commands, text messages, calendar events, etc.
Bluetooth keyboard and Wi-Fi screen pairing, when you gotta type to configure or install.
End result: A smart device that never dies (if charged daily) and JUST WORKS. Talk to ‘yourself’ and let the system click icons and type on a tiny screen.
]]>Continue the abstraction of information in 2 by eliminating 1 above as well: content is divorced from format and language.
“The door-open chime sounds and the door-open dashboard light illuminates when a door is ajar while the key is in the ignition.”
COND:[(OBJ:car-door:any)open AND (OBJ:key)inserted]
<=>
RES:[(OBJ:door-chime)on AND (OBJ:door-dash-light)on]
COND:[(OBJ:car-door:any)closed AND [ (OBJ:key)inserted OR (OBJ:key)removed] ]
<=>
RES:[(OBJ:door-chime)off AND (OBJ:door-dash-light)off]
REL:alert-types(OBJ:door-chime, OBJ:door-dash-light, …)
[Magic happens here. LOTS of object:style mappings, but only need to be done once for each dictional output. Free translation; free infographics; free texts: all from running the information maps through DSSs and then output generators that can handle the renders. A tiny example:]
OBJ:key == “ignition key” | singular-only |
“The door-open chime sounds and the door-open dashboard light illuminates when a door is ajar while the key is in the ignition.”
“When the door is closed, the door-open chime does not sound and the door-open dashboard light does not illuminate, regardless of whether the key is in the ignition or not.”
“To test the door-open chime and the door-open dashboard light, insert the ignition key into the ignition switch and open a door.”
“If the door-open chime is sounding and the door-open dashboard light is illuminated, one or more doors is ajar. You can stop the alerts by either closing the open door or by removing the key from the ignition.”
[You’d have graphics mapped to objects and relationships in the DSS that, when generated as output, show up like, say, an Ikea or LEGO manual. In fact, see Lego Digital Designer for a great model of a user interface for assembly mapping by sub-assemblies and stages.]
As you can tell if you’ve read this far, this isn’t a new idea: there are conlang folks who’ve thought about this stuff for decades, but not typically from the perspective of one:many translation (rather more like many:one ‘interfaces’ via written and/or spoke languages).
And I also just realized that many of the OBJ-REL information maps could be scraped straight out of software code! *headsplode*
]]>When does respect for honorable and dutiful sacrifice begin to sanction the ill wills and greed that required it? Do we have any more righteous wars left in us? Did we ever?
I find myself thinking that, just like Valentine’s Day, this is another shitty holiday. Love deserves more than one calendar entry, so surely pain and loss does as well. The men and women lost to an aggressive will are remembered daily by their loved ones; why, as a nation, can’t we find time enough every day to do the same?
And maybe, just maybe, in that remembrance decide that throwing more children into the meat grinder won’t work any better than it did millennia ago?
Memorial Day is aptly named. Remember why war is the ultimate failure of everything that makes us human.
]]>Unfortunately, all of your competitors are aware of these benefits and opportunities; and they are flooding Twitter feeds, Facebook timelines, and email inboxes with their best efforts and offers. Couple that with the fact that many users of social media only check occasionally, and your problem as an advertiser becomes one of distinguishing your announcements and offers from the rest.
Setting aside good copy writing and compelling visuals and links (a topic, perhaps, for a future article) the single best way to make your message stand out is, in a word, timing. This article presents what I feel is an optimal schedule of post timing for common attractions in the service and show industries, to maximize viewers and thus guests.
Note: I am assuming your principle target market is nine-to-fivers, not swing-, split- or third-shift workers or service industry employees themselves. I feel, however, that once you’ve grasped the basics I present here, you will be able to apply the timing principles to clientele with different work hours.
Specials include food, drink, and possibly value-adds like free parking or valet service.
Some establishments vary specials frequently, and it is those that will benefit the most from social media. If you, however, have locked into a routine that is rarely changed, treat it more like a regular event (below).
When do you think about where you might like to go for lunch or dinner? Obviously, around lunch or dinner time! So this one is, on the surface, a no-brainer: post around 11Â AM for lunch specials and around 5Â PM for dinner specials. That’s when people are checking smartphones and making plans with others.
But that is just the low-hanging fruit. Look to how the major chains advertise on television, for even more good timing tips. Do you serve breakfast (or brunch on the weekends)? Then post the specials at around 10 PM on weekdays and perhaps a bit later on weekends—you know when your guests end their Friday and Saturday nights… or mornings!
First, I would suggest that you include drink specials when you post your food specials; but use good judgement! If your clientele favors a pint or martini with lunch, then by all means include it with the 11Â AM post. If you’re more family-oriented, include drink specials only with the dinner specials post, perhaps only on Fridays and Saturdays.
If you run a show club and open for happy hour, or if you are a dining establishment that has live music during or after dinner, the 5Â PM timing is also good for you, but absolutely include drink specials when you post to promote an evening’s event. So, odds are good that you will have food, drink, and the event in a single post at that time.
Note: I am a resident in a state where there is no happy hour, per se: drink specials must be honored from open to close to reduce binge drinking during rush hour (kind of makes sense, no?). If your local laws differ, then by all means be sure to post about an hour before a limited-duration happy hour.
There is a vast variety of events that can be hosted at service or show venues: live music, a band line-up, pub trivia, singles nights, ladies nights, poker clubs. The list is as diverse as the creativity of venue owners and the cultural richness of your region.
Many events have common timing objectives, however. You want the punters to know about them as soon as possible; you need to remind them as they get closer; and you want to catch the eye of someone who is at loose ends and is looking for fun. That said, regularly occurring events behave much like daily specials: more than one or two posts about each event will be perceived as pushy or desperate.
I characterize a major event as a one-off event booked well in advance for which people typically plan and budget. Tickets usually must be bought, sometimes early to be sure they don’t sell out; babysitters must be scheduled, sometime early to be sure they won’t be out; and reservations must be made for dinner, to complete the big night out.
These are the best times to post information about major events:
Note: For the date timings below that do not specify a time, pick the time of day as with this date timing.
No two major events are the same, and so no hard-and-fast timings will work for every situation. Adjust the above accordingly, while always keeping in mind that your posts should be of value to your guests and you should value your guest’s time more than their dollars!
Much like food and drink specials, regular events can become repetitious to the point of irritation, if not timed effectively and used sparingly.
In general, include the pitch and details of the event with your 5Â PM specials post, both so that the otherwise unoccupied folks can be reminded and so that those who might be put off by the event will know to pass you by that evening. While the latter might seem detrimental to the night’s takings, trust me: a new or fledgling customer that would find such activity an irritant rather than a compliment will be unhappy that you did not inform them of it as you enticed them with your chef’s latest masterpiece or $1-off well drinks.
Finally, if a regular event has established a following and become virtually a part of your business identity, consider splitting it off into its own page or feed, and encourage folks to join that one before and after the event for several weeks. When the new page or feed has gained traction, limit posts on your primary feed to very irregular reminders, for customers whose interests might have changed over time.
In closing, much of the above advice focuses on a general principle: use social media to bring value to your guests, not to bring revenue to your establishment. The former will guarantee the latter, so long as you respect the most valuable assets that your customers have: time and attention.
]]>Playing Descent: Journeys In The Dark (1E) can be an exercise in confusion, especially when one has several conditions in play, is a Necromancer, and is wandering through a trapped dungeon. My second app for Android, built using App Inventor, is designed to make such checks fast and error-free.
Here is a link to a ZIP of the APK file for the application:
Descent Condition Checker For Android
The app is simple enough: click the condition button and it checks against one of three subroutines, as appropriate to the particular condition: rollBlank, rollSurge, or rollPowerEnh. Based on whether TRUE or FALSE is returned by the subroutine, a specific message is displayed in the results area at the top of the screen.
The following code is supposed to delay a bit and show some text after a button press, to confirm the press for the user:
The RESULTS text change, however, does not work properly, no matter where I call for it (even if I make the text change its own procedure). I have to assume that this is a bug with App Inventor, because the exact same calls are used to make the results area change its text based on check results, as well as its background color (green for good-for-the-user results, red for bad-for-the-user results).
Descent: Journeys In The Dark is and ©2011, Fantasy Flight Games, all rights reserved.
Descent Condition Checker For Android app is ©2011, David Carle Artman, CC-BY NC.
]]>