Just out of curiosity, is there any interop that you'd personally benefit from? I'm unfamiliar with schema.org's more ephemeral schemas and how commonly they are used.
Is anyone working on let's name it CookHub already? So essentially GitHub for receipts. The nerd in me wants to fork receipts and share my small adaptations to the community.
Yeah, the same here :-). We created a placeholder repo https://github.com/cooklang/recipes, but it still subject to workout structure and probably it makes sense to standardise units in some way.
That would be pretty cool. It would already work in github, but yeah a dedicated site would probably be better ;-). I'm afraid that the intersection of people interesting in cooking and people who know how source control works is likely pretty niche
The other problem I have with community cooking websites is that usually people always underestimate the cooking time and that's annoying as hell. Like people would say you need to cook onions for 10 minutes, while onions take close to 25 minutes to be cooked. On the French website marmiton, it was so ubiquitous that they have moderators come in and fix people's recipes.
My issue with recipe timings is that even if you cook things for as long as it says, the overall time to cook the recipe is always very "optimistic". I assume the issue is some combination of marketing and the fact that the test cook was done by a professional chef who can dice 10 onions in a minute.
I imagine it’s done that way because people don’t necessarily know what to look for when cooking something. If some one doesn’t know how to cook steak, you can’t tell them “cook till medium rare”. So we start trying to come up with proxies.
Ingredient prep is intentionally left out of recipe timings. In theory, this lets everybody adapt the recipe timing to themselves, because only you know if you can chop two onions in three minutes or thirty seconds, but as with the Doomsday Device in Doctor Strangelove, it's worse than useless if nobody knows about it. "Why didn't you tell the world?"
The main problem for me (who am interested in cooking, as well as somewhat au fait with version control) is that at this point in my life, I could not for the life of me write down a recipe for almost anything that I cook, because it is all based on "enough" and "to taste", with cooking times being in the "well, you look at the ingredients and a cooking schedule effortlessly forms in your mind" (none, by the way, based on actual time), allowing me to do things like cooking things in the oven and three or four pots on the stove, and have everything ready at the same time, by staggering the start times.
And I literally cannot tell you how I do it, because at this point, I don't know. I do know how I got there, though. Cooking, lots of it, at various scales and in variously equipped kitchens.
Scale-wise, I have cooked for 1. And on the upper end, I have cooked for about 50.
I’m not sure you’d want to fork it like version control does. If someone makes a variation that is not a correction, you’d want to have that easily available on the main repo with a link back to the original.
https://www.cinc.kitchen/info/features lets you fork recipes. forkthekitchen.com (now dead) was another similar effort. So did diy.soylent.com (now dead as well).
Fantastic idea! Another benefit I can think of having such a repository combined with this markup language is powerful semantic searches - filtering by sets of ingredients, and perhaps adding the ability to add tags to the recipes
Not yet solid, but there are ideas. For example, define units config in a way like that: "1l | 1000 ml | ...". The first value will be a preferred one and everything else will be converted. What do you think?
The parser is hand-made https://github.com/cooklang/CookInSwift. I was reading a book "Crafting Interpreters" by Robert Nystrom (fantastic and atmospheric book!) and was eager to try it myself.
This release is MVP, to test the waters. If people like the project we will definitely continue to expand to other platforms. I’m not 100% sure but it might work on windows in WSL already.
What's the markup for "unrelated long-winded story because I wanted to be a writer"? :) Great idea, and I agree with another commenter that a github-style recipe sharing/forking system would be a good addition.
I heard that the long-winded stories also serve to make the text longer for SEO purposes. i could imagine that it makes you stay longer on the page, because you look for the recipe. Also, more text equals more opportunities to insert ads.
The intro serves a couple purposes. It ensured the text of the recipe was "below the jump" on RSS readers, so the audience had to go to the original sites (and see ads). It helps detect and trap plagiarists - it's copywritable, while a recipe isn't. But it also contextualizes the recipe. It's really important for me to understand if I'm seeing an easy weeknight favorite or a labor-of-love Sunday meal.
Beyond just looking at the timing, I want to know how a cook thinks about the dish. If you open cookbooks, the intro spiel is common, and I often find it more helpful than the actual text of the recipe. There's a million places I can read a recipe for pad Thai, but Andy Ricker and Leela Punyaratabandhu have some deep insight that is very valuable.
Certainly some authors are crappy writers and don't add value here - I don't follow those people. Googling for recipes will turn those people up too often.
This is an unnecessarily harsh characterization. Recipe writers are constrained by economics, just like the rest of us. It's dismaying to see such cruel mockery on an industry forum. You may also want to look into Fundamental Attribution Error: recipe writers are "flawed", in your mind, but do you judge yourself so harshly? Likely, not. You probably excuse your own misbehavior as compelled by transient circumstance.
Every recipe (and recipe language) must include links to descriptions of ingredients and/or alternatives.
I have no idea what a "medium victorian spring spruce potato is" or whatever it is you're using. In Sweden we have only two kinds: hard and soft. Same goes for basically everything else :)
That was the motivation. I had the same problem that recipes from the apps aren’t localised to local produce. Also sometimes I want to cut corners and do thing easier. I should be able to apply agile and maintain my recipes in my way :-)
In north Sweden we have also only two kinds of potatoes. One is called Mandelpotatis, and then we have all the rest that noone buys.
Seriously, if you don't like potatoes or think it's boring, try Mandelpotatis (if you can find it, it likes sandy, not very nutrious earth to grow or it will get sick and die :-)
I have been thinking of a way of writing my recepies so I can process them into a database some day for easier search. I realised I would never have the energy to actually do it so I'm just switching to markdown and running a static webcompiler on them to output html with search function in javascript and upload to github. Works better than expected and have everything I need.
Sounds like you have a similar setup to mine [1]. I have added PDF as an output format using pandoc. Also GitHub actions to automatically generate a new version when I push a commit.
Would you mind sharing yours? I am always looking for inspiration and ways to improve.
A way to do this would be to start with a list of ingredients/techniques, and have a "dependency checker" that checks that every ingredient/technique is either in the list, or explained elsewhere. This way, the base would be explicit, and you can easily track explanations.
From the potatoes that are immediately visible on display. You have large stands with two types of potatoes that you can pick and weigh yourself (sometimes three, the difference isn't obvious). Then you have a bunch of 3kg-5kg packs of washed potatoes of two kinds: fast and mjölig.
And possibly there are one or two packs of other kinds? Maybe those 3-5 kilo packs have different types of potatoes in them? But those are never clearly marked.
And then you arrive at a recipe, and it calls for russet potatoes or dutch cream potatoes or some other potato. What the hell are those? :)
Anyway, potatoes were just to illustrate the idea. I've had the same issues with rice, vegetables, even spices sometimes.
Hard/soft presumably corresponds to the waxy/floury categorization Anglo countries often use. It shouldn't be hard to find which category a given variety of potato better fits into.
Nice! I wasn’t aware of that project. It has very similar idea. In cookcli there's a small web server too. It’s not fancy or very developed, but allows to check the recipe or manage shopping list
Note: this will significantly reduce the life of your oven. The self-cleaning cycle is torture for the oven components. They are not really built to withstand the heat.
This looks awesome!
I wonder how difficult it would be to integrate it with Gnome Recipes?[0]
The interface is really nice and even automatically makes shopping lists for you based on recipes and intended servings you selected.
I like it, a lot. However, the syntax for linking steps to pictures should be rethought, IMO, what if an image already has numbers in its filename? Could get confusing very quickly.
Agree, this was a last-minute hack. If you have an idea how to rethink this you can share one in a spec repo issues if you don't mind https://github.com/cooklang/spec. Thanks!
Having an explicit delimiter allows for whitespace in either amount or unit. I suppose that's the reason. Can't seem to come up with an example for that on the fly though.
I agree, I thought about that. I expect that it can be some cases when either ingredients or units have spaces. And the problem is that I can't come up with a solid counter example. Something like @coriander{2%small batches}... You can open an issue in a spec repo so people can discuss https://github.com/cooklang/spec.
I've been working on a stove safety/smart cooking device which is based on the temperature of your pan [0]. There are a small number of recipes which it currently works with [1]. To do this we defined a JSON format for recipes [2] but if we could use something similar to the text format used by CookLang that would be amazing, as it's much easier to write than JSON and could also be automatically rendered into a web page. Currently we are writing it twice - once in JSON for the cooking app, and once in human readable form.
The newsletter pop-up made your site unusable on mobile. Hard to close, and then it kept coming back. Obnoxious and rage inducing. I hate your product now.
I'd be interested if there's research showing whether a one-off popup gives more signups or more annoyance. The marketing people seem to think it's better to have it there.
I agree it's hard to close, I'll see if I can do something about that. It shouldn't keep coming back once closed, which browser are you using? Although it does come back if you refresh the page. I might be able to do something about that as well.
I just noticed that this kind of pop-up appearing is a trigger for me to close the page. I immediately get the feeling that I got the basic idea of that page.
Personally, those popups are an immediate close tab for me. If you have no confidence in my wanting to sign up for your news letter after I've seen your content, I don't want to bother with your content at all.
You should ask your marketing people to back up their beliefs with research. While you are waiting think about how you react on other sites that use pop-ups. For me it’s an insta-close. YMMV.
I'd be interested in a paired device to interrupt the energy source to the stove. If danger is imminent and the operator hasn't responded in a certain timeframe, a connected valve would turn the gas supply off or a switch would trigger the electricity to turn off.
Growing up we had a sensor in the oven go out, causing the cookies to catch on fire inside the oven. We also had a control board on a Whirlpool dishwasher start smoking ~15 years ago. There was a class action lawsuit against Whirlpool, but we didn't have any documentation that showed the model and serial number of the unit, so we couldn't get the typical "$20 credit for your next appliance purchase" or whatever the compensation was.
In both cases, flipping the electricity off at the breaker prevented further damage.
Thanks for the suggestion! We did consider the idea of making it automatically cut the energy source. However at the moment, the install steps are: receive it in the post, pull out the battery tab, and stick it on your stove splashback with a strong sticky pad. Almost anybody can do it themselves. As soon as you need to cut the electricity/gas it requires a qualified engineer to go in and install it, making the install cost an order of magnitude larger. So this wouldn't be a part of the core product.
As an optional paired peripheral, it's a good idea, and perhaps we will look into it further if the main product has some success. If individuals consider it a valuable addition then they could pay to have it installed. A secondary drawback would be reduced battery life on the device, as it would be continuously paired over Bluetooth whenever the stove is in use - usually it is just passively advertising in case you are trying to connect through the phone app.
In terms of saving lives, the automatic cut-off would make a relatively small difference - fire department stats (on smoke alarms) show that having a loud beeping alarm is extremely effective at attracting attention and is enough for the user to go and turn it off manually, or to get out of harm's way if things have turned bad. Where the automatic cut-off would help is in reducing the chance of the house being damaged by smoke or fire when the user is out of range.
Actually, if one defined an XML or SGML DTD, you could inter-weave text and mark up seamlessly without having to create yet another markup language; another reason to standardize is not having to write readers/writers/converters again and again.
I'm curious - have you tested with oils with various smoke points? How does your device know which smoke point to monitor for? That's a 300F range (225 for Sunflower oil - which nobody should cook with, but if you want to prevent fires, look for the people doing things they shouldn't do, but that are convenient. 300F for butter, 520F for avocado oil)
Also, since I have a thing for flambee dishes - how does it deal with pyromanic chefs? ;)
It doesn't know which smoke point to monitor for. However, the aim (at least for the MVP) is for it to work the majority of the time for the majority of users - and critically to alert several minutes before there is any flame. So while sunflower oil may start smoking a small amount, it would be several minutes more getting to flame, by which time the alarm should have sounded.
If you put a frying pan on with oil in and leave it, the device will alert you at around 450F. This is a fixed threshold (along with some other checks, e.g. we also consider the rate of change of temperature). This gives reasonable behaviour in most cases, and ensures you don't get nuisance alarms when frying on high heat. In cases where individuals have an unusual cooking pattern which causes unreasonable false alarms we can adjust the model parameters to increase/decrease sensitivity in particular situations. In the future we may be able to adjust these automatically but for now there is not a great deal of automated "learning" involved.
If you're a pyromaniac chef, I think you would get some alarms from that! Again this is a bit of an edge case so we haven't but much effort into that for the first iteration of the product, definitely something for the future though - I can imagine it being a challenge to distinguish flambee and a real fire though, since flambee is real fire!
Yesterday a friend remarked to me she had lost a recipe for something or other and I resolved to start recording some I use, I was thinking of something like MD/Obsidian but this looks really good.
Great to have the iOS app, an easily convertable human readable and writable format and hang on to your own data.
Going to give this a good look over today. Might think about an Obsidian plugin as well.
This is interesting. A year or two ago I tried creating my own web application [1] for cataloguing recipes. It involved creating a parser in Elm [2] that could handle JSON generated by org mode files (where I stored the recipes). It was far too convoluted - but it gave me some of the features that I wanted - simple pages with recipes, with hover-to-see-quantities, as well as a cooking timer. If I was to do it again, I might investigate using something like cooklang to see if I can get the same functionality out of it.
It started as a hobby project to solve my personal needs: I really hate grocery shopping: it's repetitive and takes time. I decided to automate it, but couldn't find any robust tools for that. Also for a long time wanted to create a parser and this was a good opportunity.
Current plan is to offer iOS and Android apps for a one-time fee. These apps are based on open-source language and parser (the same used by CLI), but a bit nicer and user friendlier.
interesting language, didn't have the time to read the details/spec but, what i found most difficult when reading recipes on the internet that the ingredient names change dramatically between countries(event with the same spoken language), does this language attempt tackle that problem? also it would be nice to have alternatives for some ingredients.
Agreed, recipes often need localisation. The language itself agnostic to ingredients and doesn't provide any database. It's up to a user to tag ingredients so tools can recognise them and use in different ways.
It's very easy to update a recipe file in a text format, so there shouldn't be an issue to quickly change names in a recipe you get from your friend overseas.
hRecipe looks like it's just HTML/entirely web-based, and Schema seems like it covers way more than it reasonably should.
I personally think CookLang is the better of these, even this early on.
hRecipe is over 10 years old, and the point of microformats is to extract semantic data from HTML. It's not really solving the same problem as CookLang in the way HTML and JSON aren't solving the same thing.
While I don't know much about the history of Recipe in Schema, I find "covers way more than it reasonably should" to be an odd criticism of a format. I usually find it to be a mark of schema maturity. All concepts behind data formats have more complexity than an initial investigation would uncover (see also: Falsehoods Programmers Believe About Names[1]). If anything, it leads me to believe CookLang has a ways to go.
147 comments
[ 0.22 ms ] story [ 198 ms ] threadHere's an interesting discussion on the subject of ingredient quantities [1].
[0] https://schema.org/Recipe
[1] https://github.com/schemaorg/schemaorg/issues/882
I cook and I write code but never at the same time :)
Is anyone working on let's name it CookHub already? So essentially GitHub for receipts. The nerd in me wants to fork receipts and share my small adaptations to the community.
The other problem I have with community cooking websites is that usually people always underestimate the cooking time and that's annoying as hell. Like people would say you need to cook onions for 10 minutes, while onions take close to 25 minutes to be cooked. On the French website marmiton, it was so ubiquitous that they have moderators come in and fix people's recipes.
Edit: see https://slate.com/human-interest/2012/05/how-to-cook-onions-...
It's up to recipe author to define what they cook and how. If you think 25 min is better, fork it.
And I literally cannot tell you how I do it, because at this point, I don't know. I do know how I got there, though. Cooking, lots of it, at various scales and in variously equipped kitchens.
Scale-wise, I have cooked for 1. And on the upper end, I have cooked for about 50.
At least the JSON conversion would be nice to have, then I could XSL-T it into RecipeML.
https://github.com/sinker/tacofancy
Doesn't use recipe-lang though, just uses markdown.
Edit. Here is installation instructions https://github.com/cooklang/CookCLI#installation
Now if we just had a good Markup Language for webdesign...
Beyond just looking at the timing, I want to know how a cook thinks about the dish. If you open cookbooks, the intro spiel is common, and I often find it more helpful than the actual text of the recipe. There's a million places I can read a recipe for pad Thai, but Andy Ricker and Leela Punyaratabandhu have some deep insight that is very valuable.
Certainly some authors are crappy writers and don't add value here - I don't follow those people. Googling for recipes will turn those people up too often.
I have no idea what a "medium victorian spring spruce potato is" or whatever it is you're using. In Sweden we have only two kinds: hard and soft. Same goes for basically everything else :)
Seriously, if you don't like potatoes or think it's boring, try Mandelpotatis (if you can find it, it likes sandy, not very nutrious earth to grow or it will get sick and die :-)
I have been thinking of a way of writing my recepies so I can process them into a database some day for easier search. I realised I would never have the energy to actually do it so I'm just switching to markdown and running a static webcompiler on them to output html with search function in javascript and upload to github. Works better than expected and have everything I need.
Would you mind sharing yours? I am always looking for inspiration and ways to improve.
[1]: https://github.com/morberg/recept
https://squidfunk.github.io/mkdocs-material/
Document folder structure similar to yours.
I'm going to look through your collection, looks interesting :-)
I'm not sure where you get this idea. Even a basic supermarket like ICA knows more than that: https://www.ica.se/icas-egna-varor/produkter/icas-potatis/
From the potatoes that are immediately visible on display. You have large stands with two types of potatoes that you can pick and weigh yourself (sometimes three, the difference isn't obvious). Then you have a bunch of 3kg-5kg packs of washed potatoes of two kinds: fast and mjölig.
And possibly there are one or two packs of other kinds? Maybe those 3-5 kilo packs have different types of potatoes in them? But those are never clearly marked.
And then you arrive at a recipe, and it calls for russet potatoes or dutch cream potatoes or some other potato. What the hell are those? :)
Anyway, potatoes were just to illustrate the idea. I've had the same issues with rice, vegetables, even spices sometimes.
[0] https://github.com/KDE/kookbook
This instruction in the Neapolitan Pizza recipe got me interested. Surely there is an upper limit?
Turns out the Wikipedia article about oven temperatures [1] has a dedicated entry:
> Neapolitan pizza: 905°F (485°C)
Which is way more than I expected. I guess this justifies the “set oven to max“.
[1]: https://en.m.wikipedia.org/wiki/Oven_temperatures
[0]https://wiki.gnome.org/Apps/Recipes
Still, I think I'll try this out!
@potatoes {1 kg} is a bit easier on the eyes
[0] https://mypippa.me/ [1] https://recipes.mypippa.me/ [2] https://recipes.mypippa.me/schemas/cookMLSchema3.0.json
Just the safety thing alone has me hooked.
I agree it's hard to close, I'll see if I can do something about that. It shouldn't keep coming back once closed, which browser are you using? Although it does come back if you refresh the page. I might be able to do something about that as well.
Growing up we had a sensor in the oven go out, causing the cookies to catch on fire inside the oven. We also had a control board on a Whirlpool dishwasher start smoking ~15 years ago. There was a class action lawsuit against Whirlpool, but we didn't have any documentation that showed the model and serial number of the unit, so we couldn't get the typical "$20 credit for your next appliance purchase" or whatever the compensation was.
In both cases, flipping the electricity off at the breaker prevented further damage.
As an optional paired peripheral, it's a good idea, and perhaps we will look into it further if the main product has some success. If individuals consider it a valuable addition then they could pay to have it installed. A secondary drawback would be reduced battery life on the device, as it would be continuously paired over Bluetooth whenever the stove is in use - usually it is just passively advertising in case you are trying to connect through the phone app.
In terms of saving lives, the automatic cut-off would make a relatively small difference - fire department stats (on smoke alarms) show that having a loud beeping alarm is extremely effective at attracting attention and is enough for the user to go and turn it off manually, or to get out of harm's way if things have turned bad. Where the automatic cut-off would help is in reducing the chance of the house being damaged by smoke or fire when the user is out of range.
Buy @red pepper{2}.
versus
<recipe> Buy <ingredient amount="2">red pepper</ingredient>.</recipe>
For the latter, standard tools like xmlwf or any good Web browsers built-in XML viewer already exist and work right away.
In any case, double maintenance of JSON and human-readable text will eventually lead to inconsistencies.
Also, since I have a thing for flambee dishes - how does it deal with pyromanic chefs? ;)
If you put a frying pan on with oil in and leave it, the device will alert you at around 450F. This is a fixed threshold (along with some other checks, e.g. we also consider the rate of change of temperature). This gives reasonable behaviour in most cases, and ensures you don't get nuisance alarms when frying on high heat. In cases where individuals have an unusual cooking pattern which causes unreasonable false alarms we can adjust the model parameters to increase/decrease sensitivity in particular situations. In the future we may be able to adjust these automatically but for now there is not a great deal of automated "learning" involved.
If you're a pyromaniac chef, I think you would get some alarms from that! Again this is a bit of an edge case so we haven't but much effort into that for the first iteration of the product, definitely something for the future though - I can imagine it being a challenge to distinguish flambee and a real fire though, since flambee is real fire!
Great to have the iOS app, an easily convertable human readable and writable format and hang on to your own data.
Going to give this a good look over today. Might think about an Obsidian plugin as well.
add @acid{1%tsp} to @milk{1%cup} to create acidulated milk
[acid]{lemon juice|apple cider vinegar}
Anyway great spec and language!
[1] https://arisgarden.theiceshelf.com/recipe/sweet-potato-gnocc... [2]https://github.com/theiceshelf/arisgarden/blob/master/src/Pa...
Current plan is to offer iOS and Android apps for a one-time fee. These apps are based on open-source language and parser (the same used by CLI), but a bit nicer and user friendlier.
It's very easy to update a recipe file in a text format, so there shouldn't be an issue to quickly change names in a recipe you get from your friend overseas.
http://microformats.org/wiki/hrecipe
https://schema.org/Recipe
Mandatory xkcd link: https://xkcd.com/927/
While I don't know much about the history of Recipe in Schema, I find "covers way more than it reasonably should" to be an odd criticism of a format. I usually find it to be a mark of schema maturity. All concepts behind data formats have more complexity than an initial investigation would uncover (see also: Falsehoods Programmers Believe About Names[1]). If anything, it leads me to believe CookLang has a ways to go.
1: https://www.kalzumeus.com/2010/06/17/falsehoods-programmers-...