emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* Using org-mode for recipes (i.e. cooking)
@ 2011-03-24 11:47 Le Wang
  2011-03-24 20:52 ` Christian Moe
  2011-03-30  6:30 ` Erik Hetzner
  0 siblings, 2 replies; 11+ messages in thread
From: Le Wang @ 2011-03-24 11:47 UTC (permalink / raw)
  To: Orgmode Mailing List

Hi all,

I'm fairly new to org-mode, and I only use it as an outliner / note
taking tool.  It seems recipes, being a list of ingredients and a
series of steps is a perfect match for org-mode.

Out of the box, org already works pretty well for recipes, but I think
there are some areas for improved integration around timers.  I'm not
familiar with all the facilities of org-mode, maybe someone who uses
org-mode for scientific experiments or something similar will have
some hints.

Is it possible to inline count-down timers in a cooking step?  For
example "2. simmer sauce for 40 minutes on low heat.
<start_timer_button>", so there is a button at the end of the line
that starts a count-down timer.

Many timers from different steps can be started simultaneously, and
each timer should be able to be paused and restarted.  And there
should be an easy way to get an overview of of all ongoing timers from
the current document.

Is it possible to hack this together using existing org functionality?

Thanks.

-- 
Le

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: Using org-mode for recipes (i.e. cooking)
  2011-03-24 11:47 Using org-mode for recipes (i.e. cooking) Le Wang
@ 2011-03-24 20:52 ` Christian Moe
  2011-03-24 21:56   ` Christian Moe
  2011-03-30  6:30 ` Erik Hetzner
  1 sibling, 1 reply; 11+ messages in thread
From: Christian Moe @ 2011-03-24 20:52 UTC (permalink / raw)
  To: Le Wang; +Cc: Orgmode Mailing List

[-- Attachment #1: Type: text/plain, Size: 1276 bytes --]

Hi,

On 3/24/11 12:47 PM, Le Wang wrote:
(...)
 > Is it possible to inline count-down timers in a cooking step?  For
 > example "2. simmer sauce for 40 minutes on low heat.
 > <start_timer_button>", so there is a button at the end of the line
 > that starts a count-down timer.
 >
 > Many timers from different steps can be started simultaneously, and
 > each timer should be able to be paused and restarted.  And there
 > should be an easy way to get an overview of of all ongoing timers from
 > the current document.
 >
 > Is it possible to hack this together using existing org > 
functionality?

I don't think Org has built-in support for concurrent countdown 
timers. But you can fake this pretty well with org-timer, properties, 
column view, a dynamic block, and some lisp table formulas.

A ready-to-run example is attached, hopefully self-explanatory, 
probably buggy, and WITH ABSOLUTELY NO WARRANTY. This is a learning 
exercise for me.

Instead of using a start timer button (for which you could use an 
`elisp:' link, like the one I've put in to make it easy to stop the 
timer), you can write a hook to start countdowns when the TODO state 
changes. That rather hackish function is the only code here that's not 
out of the box.

Yours,
Christian
















[-- Attachment #2: recipe-timer.org --]
[-- Type: text/plain, Size: 2558 bytes --]

#+STARTUP: showeverything
#+COLUMNS: %ITEM  %For %Start %Elapsed %REMAINS %Message
#+TODO: TODO RUNNING | DONE

Recipe with timers

* First evaluate this (or put in your .emacs)

#+begin_src emacs-lisp 
  (require 'org-timer)

  (defun my/recipe-timer-start ()
    "When state is changed to `RUNNING', change the `Start'
  property of the entry to the current value of org-timer if this
  is a timed recipe entry, i.e. if it has a h:m:s-formatted
  duration in its `For' property. When state is changed to `DONE',
  reset `Start' to `-'."
    (when (string-match org-timer-re (or (org-entry-get (point) "For") ""))
      (cond ((string= state "RUNNING")
             (org-set-property "Start" (org-timer nil t)))
            ((string= state "DONE")
             (org-set-property "Start" "-")))))
  
  (setq org-after-todo-state-change-hook 'my/recipe-timer-start)
#+end_src

#+results:
: my/recipe-timer-start

* Recipe

Here's the dynamic block with the overview.

- Refresh manually with `C-c C-c' on the `begin' line.
- Note that this will start the timer if it's not running.
- The countdown is in the "REMAINS" column.

#+begin: columnview :id local
| ITEM                  |     For | Start | Elapsed | REMAINS | Message |
|-----------------------+---------+-------+---------+---------+---------|
| * Recipe              |         |       | 0:00:00 |         |         |
| ** TODO Let simmer    | 0:40:00 | -     | 0:00:00 |         |         |
| ** TODO Let ferment   | 2:00:00 | -     | 0:00:00 |         |         |
| ** TODO Leave in oven | 0:04:00 | -     | 0:00:00 |         |         |
#+tblfm: $4='(org-timer nil t)::$5='(if (string-match org-timer-re $3) (org-timer-secs-to-hms (- (org-timer-hms-to-secs $2) (org-timer-hms-to-secs $4))) "")::$6='(if (< (org-timer-hms-to-secs $5) 0) "STOP!" "")
#+end:

Below are a few tasks with durations in their `For' properties.

- Start them by changing the task's state to `RUNNING' with `C-c C-t'.
  (If org-timer is not running, it will be started.) 
- When time's up for a task, it will message `STOP!'. Navigate to the
  task and change its state to `DONE' with `C-c C-t' (after taking stuff
  out of the oven, or whatever).
- When you're done, you can [[elisp:org-timer-stop][stop the timer]] (click the link or press
  `C-u C-c C-x ,').

** TODO Let simmer
   :PROPERTIES:
   :For:      0:40:00
   :Start:    -
   :END:

** TODO Let ferment
   :PROPERTIES:
   :For:      2:00:00
   :Start:    -
   :END:

** TODO Leave in oven
   :PROPERTIES:
   :For:      0:04:00
   :Start:    -
   :END:







^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: Using org-mode for recipes (i.e. cooking)
  2011-03-24 20:52 ` Christian Moe
@ 2011-03-24 21:56   ` Christian Moe
  2011-03-25 19:25     ` brian powell
  0 siblings, 1 reply; 11+ messages in thread
From: Christian Moe @ 2011-03-24 21:56 UTC (permalink / raw)
  To: mail; +Cc: Orgmode Mailing List, Le Wang

PS. Using Eric Schulte's new with-time macro 
(http://orgmode.org/worg/org-hacks.html#sec-1_2_6), part of the table 
formula in my above example can be written more compactly:

$5 = '(if (string-match org-timer-re $3) (org-timer-secs-to-hms (- 
(org-timer-hms-to-secs $2) (org-timer-hms-to-secs $4))) "")

becomes:

$5='(if (string-match org-timer-re $3) (with-time t (- $2 $4)) "")

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: Using org-mode for recipes (i.e. cooking)
  2011-03-24 21:56   ` Christian Moe
@ 2011-03-25 19:25     ` brian powell
  0 siblings, 0 replies; 11+ messages in thread
From: brian powell @ 2011-03-25 19:25 UTC (permalink / raw)
  To: mail; +Cc: Orgmode Mailing List, Le Wang

* Could do a link like this in an OrgMode buffer:

[[shell:google-chrome --enable-plugins ~/CountDownTimer.html &]]

** Where ~/CountDownTimer.html contains the below code and/or only
contains the below code/markup:

<embed width="800" height="600" quality="high" wmode="opaque"
name="virtualchumby" type="application/x-shockwave-flash"
src="http://www.chumby.com/virtualchumby_noskin.swf"
FlashVars="_chumby_profile_url=http%3A%2F%2Fwww.chumby.com%2Fxml%2Fvirtualprofiles%2FC3BB9562-5713-11E0-8D7D-0021288E6F90&amp;baseURL=http%3A%2F%2Fwww.chumby.com"
pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>

** Tested this; worked for me.

** You may have to make a "VirtualChumby" which I believe is free from
Chumby Industries.

*** FWIW I am in no way connected to "Chumby Industries"--no way that
I know of...

;-)

On Thu, Mar 24, 2011 at 5:56 PM, Christian Moe <mail@christianmoe.com> wrote:
> PS. Using Eric Schulte's new with-time macro
> (http://orgmode.org/worg/org-hacks.html#sec-1_2_6), part of the table
> formula in my above example can be written more compactly:
>
> $5 = '(if (string-match org-timer-re $3) (org-timer-secs-to-hms (-
> (org-timer-hms-to-secs $2) (org-timer-hms-to-secs $4))) "")
>
> becomes:
>
> $5='(if (string-match org-timer-re $3) (with-time t (- $2 $4)) "")
>
>

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: Using org-mode for recipes (i.e. cooking)
  2011-03-24 11:47 Using org-mode for recipes (i.e. cooking) Le Wang
  2011-03-24 20:52 ` Christian Moe
@ 2011-03-30  6:30 ` Erik Hetzner
  2011-07-26 18:01   ` Eric Abrahamsen
  1 sibling, 1 reply; 11+ messages in thread
From: Erik Hetzner @ 2011-03-30  6:30 UTC (permalink / raw)
  To: Le Wang; +Cc: Orgmode Mailing List

[-- Attachment #1: Type: text/plain, Size: 2782 bytes --]

At Thu, 24 Mar 2011 19:47:46 +0800,
Le Wang wrote:
> 
> Hi all,
> 
> I'm fairly new to org-mode, and I only use it as an outliner / note
> taking tool.  It seems recipes, being a list of ingredients and a
> series of steps is a perfect match for org-mode.
> 
> Out of the box, org already works pretty well for recipes, but I think
> there are some areas for improved integration around timers.  I'm not
> familiar with all the facilities of org-mode, maybe someone who uses
> org-mode for scientific experiments or something similar will have
> some hints.
> 
> Is it possible to inline count-down timers in a cooking step?  For
> example "2. simmer sauce for 40 minutes on low heat.
> <start_timer_button>", so there is a button at the end of the line
> that starts a count-down timer.
> 
> Many timers from different steps can be started simultaneously, and
> each timer should be able to be paused and restarted.  And there
> should be an easy way to get an overview of of all ongoing timers from
> the current document.
> 
> Is it possible to hack this together using existing org functionality?

Hi,

This is only tangentially related, but I will bring it up anyhow.

First, I use org-mode to keep my recipes. Here is the format I use:

  * Molasses spice cookies
    :PROPERTIES:
    :source: Here in America’s test kitchen, p. 275.
    :END:
  Whisk together:
  
  - 2 1:4 cup ($11.25 oz$) flour
  - 1 tsp baking soda
  - 1.5 tsp ground cinnamon
  [...]
  
  Beat at med high until light and fluffy (~3 min):
  - 12 tbsp butter, softened
  - 1:2 cup sugar

and so on. I have some methods to convert units back & forth from
metric & narrow a recipe to ingredients only, though I think this is
probably not really useful. I would be happy to provide this if you
like.

I also keep a log of my home beer brewing. In it I use the relative
timer to keep track of what I actually do when brewing. For instance:

  0:00:00 Add to 1 gal 150 degF water:
  - 4 oz Roast malt
  - 8 oz British chocolate
  - 8 oz British crystal 50-60 degL
  - 8 oz flaked oats, toasted @ 300 degF for 30 min.
  0:56:18 Sparge w/ 1.5 gal @ 162 degF. Top off to 3 gal.
  1:40:18 Add 3 lb light LME.
  1:52:32 Boiling again, add 2 oz U.S. Goldings @ 4.5%
  2:37:21 Add 2.5 lb light LME
  2:47:10 Add whirlfloc, yeast nutrient
  3:02:00 Start cooling.
  3:57:20 Top off to 5.5 gal. Pitch 1 package S-04. Gravity: 1.040 @ 70 degF

Although this would probably be overkill for (most) cooking, if you
care enough about what you are cooking you can use a relative timer in
this way to remember when it was you last did something. It’s not
quite a timer, but setting up a countdown timer would be pretty easy,
I think.

best, Erik

[-- Attachment #2: Type: text/plain, Size: 53 bytes --]

Sent from my free software system <http://fsf.org/>.

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: Using org-mode for recipes (i.e. cooking)
  2011-03-30  6:30 ` Erik Hetzner
@ 2011-07-26 18:01   ` Eric Abrahamsen
  2011-07-26 19:03     ` Eric Schulte
  0 siblings, 1 reply; 11+ messages in thread
From: Eric Abrahamsen @ 2011-07-26 18:01 UTC (permalink / raw)
  To: Erik Hetzner; +Cc: Orgmode Mailing List, Le Wang

On Tue, Mar 29 2011, Erik Hetzner wrote:

> At Thu, 24 Mar 2011 19:47:46 +0800,
> Le Wang wrote:
>> 
>> Hi all,
>> 
>> I'm fairly new to org-mode, and I only use it as an outliner / note
>> taking tool.  It seems recipes, being a list of ingredients and a
>> series of steps is a perfect match for org-mode.

[...]

> Hi,
>
> This is only tangentially related, but I will bring it up anyhow.
>
> First, I use org-mode to keep my recipes. Here is the format I use:

[...]

> and so on. I have some methods to convert units back & forth from
> metric & narrow a recipe to ingredients only, though I think this is
> probably not really useful. I would be happy to provide this if you
> like.

Sorry this is a little old, but if you're still willing to provide some
functions, I'd like to see them! I'm using org mode to keep track of
baking recipes, which are traditionally recorded as ratios of ingredient
weights, which are then used to calculate an actual recipe based on how
much dough you want. Any food for thought regarding programmatic
manipulation of properties would be very welcome…

Eric

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: Using org-mode for recipes (i.e. cooking)
  2011-07-26 18:01   ` Eric Abrahamsen
@ 2011-07-26 19:03     ` Eric Schulte
  2011-07-26 19:57       ` John Hendy
  2011-07-27  2:30       ` Eric Abrahamsen
  0 siblings, 2 replies; 11+ messages in thread
From: Eric Schulte @ 2011-07-26 19:03 UTC (permalink / raw)
  To: Eric Abrahamsen; +Cc: Erik Hetzner, Orgmode Mailing List, Le Wang

>> First, I use org-mode to keep my recipes. Here is the format I use:
>
> [...]
>
>> and so on. I have some methods to convert units back & forth from
>> metric & narrow a recipe to ingredients only, though I think this is
>> probably not really useful. I would be happy to provide this if you
>> like.
>
> Sorry this is a little old, but if you're still willing to provide some
> functions, I'd like to see them! I'm using org mode to keep track of
> baking recipes, which are traditionally recorded as ratios of ingredient
> weights, which are then used to calculate an actual recipe based on how
> much dough you want. Any food for thought regarding programmatic
> manipulation of properties would be very welcome…
>

+1

I also use Org-mode to hold recipes.  Currently I just hold the
ingredients in a standard list with informally specified amounts, but I
would be interested to see other approaches and any functions for
automatic recipe manipulation.

Incidentally I also do some baking, and while I don't currently measure
my ingredients by weight I would be interested to see (or help
brainstorm) a mechanism for reifying percentages into actual weights.

Cheers -- Eric

-- 
Eric Schulte
http://cs.unm.edu/~eschulte/

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: Using org-mode for recipes (i.e. cooking)
  2011-07-26 19:03     ` Eric Schulte
@ 2011-07-26 19:57       ` John Hendy
  2011-07-27  5:00         ` Erik Hetzner
  2011-07-27  2:30       ` Eric Abrahamsen
  1 sibling, 1 reply; 11+ messages in thread
From: John Hendy @ 2011-07-26 19:57 UTC (permalink / raw)
  To: Eric Schulte; +Cc: Eric Abrahamsen, Erik Hetzner, Orgmode Mailing List, Le Wang

On Tue, Jul 26, 2011 at 2:03 PM, Eric Schulte <schulte.eric@gmail.com> wrote:
>>> First, I use org-mode to keep my recipes. Here is the format I use:
>>
>> [...]
>>
>>> and so on. I have some methods to convert units back & forth from
>>> metric & narrow a recipe to ingredients only, though I think this is
>>> probably not really useful. I would be happy to provide this if you
>>> like.
>>
>> Sorry this is a little old, but if you're still willing to provide some
>> functions, I'd like to see them! I'm using org mode to keep track of
>> baking recipes, which are traditionally recorded as ratios of ingredient
>> weights, which are then used to calculate an actual recipe based on how
>> much dough you want. Any food for thought regarding programmatic
>> manipulation of properties would be very welcome…
>>
>
> +1
>
> I also use Org-mode to hold recipes.  Currently I just hold the
> ingredients in a standard list with informally specified amounts, but I
> would be interested to see other approaches and any functions for
> automatic recipe manipulation.
>
> Incidentally I also do some baking, and while I don't currently measure
> my ingredients by weight I would be interested to see (or help
> brainstorm) a mechanism for reifying percentages into actual weights.
>

I wouldn't mind seeing this, either. I've looked for a while at trying
to input my wife's recipes into something for her that would be
printable/exportable into perhaps a small binder or card box or
something. I've played around with gourmet with varying success but
not been entirely happy. It's been buggy for me when it comes to
printing.[1] At the very least, someone can try it out for it's
converting/unit suggestions, as they are fantastic.

Most here may work directly from org, but if recipes *are*
implemented, an exporter or two for half-page or index card sizes
would be *phenomenal.*


John

---

[1] http://grecipe-manager.sourceforge.net/

> Cheers -- Eric
>
> --
> Eric Schulte
> http://cs.unm.edu/~eschulte/
>
>

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: Using org-mode for recipes (i.e. cooking)
  2011-07-26 19:03     ` Eric Schulte
  2011-07-26 19:57       ` John Hendy
@ 2011-07-27  2:30       ` Eric Abrahamsen
  1 sibling, 0 replies; 11+ messages in thread
From: Eric Abrahamsen @ 2011-07-27  2:30 UTC (permalink / raw)
  To: emacs-orgmode

On Tue, Jul 26 2011, Eric Schulte wrote:

>>> First, I use org-mode to keep my recipes. Here is the format I use:
>>
>> [...]
>>
>>> and so on. I have some methods to convert units back & forth from
>>> metric & narrow a recipe to ingredients only, though I think this is
>>> probably not really useful. I would be happy to provide this if you
>>> like.
>>
>> Sorry this is a little old, but if you're still willing to provide some
>> functions, I'd like to see them! I'm using org mode to keep track of
>> baking recipes, which are traditionally recorded as ratios of ingredient
>> weights, which are then used to calculate an actual recipe based on how
>> much dough you want. Any food for thought regarding programmatic
>> manipulation of properties would be very welcome…
>>
>
> +1
>
> I also use Org-mode to hold recipes.  Currently I just hold the
> ingredients in a standard list with informally specified amounts, but I
> would be interested to see other approaches and any functions for
> automatic recipe manipulation.
>
> Incidentally I also do some baking, and while I don't currently measure
> my ingredients by weight I would be interested to see (or help
> brainstorm) a mechanism for reifying percentages into actual weights.

Baking by weights is definitely the way to go! Much more accurate. And
since ounces don't lend themselves to arithmetic, I generally go with
grams.

The bakers' percentage[1] says that flour is 100%, and everything else
is a relative percentage of that, so the total dough comes out something
like 130%. So you have a recipe like this:

** Basic Sourdough
   :PROPERTIES:
   :starter: 0.494
   :flour: 1
   :salt: 0.025
   :water: 0.642
   :END:

Then I suppose it wouldn't be too much work to write a function that you
call on that headline, it asks you for a total dough weight, and then
calculates specific gram weights for each ingredient. I'll look into
doing something like this in the next few days.

In the meantime, here's the guts of what I've been using to do a similar
calculation, though it wants you to know weights of pure flour and
starter (and hydration of the two) ahead of time, and has salt hardcoded
at 2%.

#+begin_src emacs-lisp
(defun my-c-s-inner (flour starter hydration starter-hydration)
  (let* ((starter-flour (* starter (/ starter-hydration 2)))
	 (full-flour (+ flour (starter-flour)))
	 (water (- (* full-flour hydration) (- starter starter-flour)))
	 (salt (* full-flour 0.02)))
    (values water salt)))
#+end_src

I don't know enough about custom exporting to make a 3x5 card out of
these things, though I suppose LaTeX could do it fairly well…

Eric

Footnotes:

[1] http://en.wikipedia.org/wiki/Baker_percentage

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: Using org-mode for recipes (i.e. cooking)
  2011-07-26 19:57       ` John Hendy
@ 2011-07-27  5:00         ` Erik Hetzner
  2011-07-27 12:50           ` Bastien
  0 siblings, 1 reply; 11+ messages in thread
From: Erik Hetzner @ 2011-07-27  5:00 UTC (permalink / raw)
  To: John Hendy; +Cc: Eric Abrahamsen, Orgmode Mailing List, Le Wang

[-- Attachment #1: Type: text/plain, Size: 1719 bytes --]

At Tue, 26 Jul 2011 14:57:31 -0500,
John Hendy wrote:
> 
> On Tue, Jul 26, 2011 at 2:03 PM, Eric Schulte <schulte.eric@gmail.com> wrote:
>
> […]
> 
> I wouldn't mind seeing this, either. I've looked for a while at trying
> to input my wife's recipes into something for her that would be
> printable/exportable into perhaps a small binder or card box or
> something. I've played around with gourmet with varying success but
> not been entirely happy. It's been buggy for me when it comes to
> printing.[1] At the very least, someone can try it out for it's
> converting/unit suggestions, as they are fantastic.
> 
> Most here may work directly from org, but if recipes *are*
> implemented, an exporter or two for half-page or index card sizes
> would be *phenomenal.*

Hi,

I can’t help with printing (which would be nice). But I have put my
code on gitorious:

  https://gitorious.org/org-cook/org-cook

It currently does metric/english conversion, and a few other
tricks. Basically I just use calc’s units code. I think scaling
recipes, or turning percentages into weights would be pretty easy.

There is also, for those interested:

  https://gitorious.org/org-brew/org-brew

for brewing beer. This is again, mostly just calc functions, including
hydrometer correction, abv calculation, priming sugar for a given CO_2
volume, etc. More integration with org-mode should be possible: for
instance it would be nice to be able to use a lookup table (of
ingredients) to calculate target original gravity, IBUs, etc.

Any thoughts or pull requests on either are appreciated!

(Please do continue to CC me, as I read the list via gmane and may
miss messages.)

best, Erik

[-- Attachment #2: Type: text/plain, Size: 53 bytes --]

Sent from my free software system <http://fsf.org/>.

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: Using org-mode for recipes (i.e. cooking)
  2011-07-27  5:00         ` Erik Hetzner
@ 2011-07-27 12:50           ` Bastien
  0 siblings, 0 replies; 11+ messages in thread
From: Bastien @ 2011-07-27 12:50 UTC (permalink / raw)
  To: Erik Hetzner; +Cc: Eric Abrahamsen, Orgmode Mailing List, Le Wang

Hi Erik,

Erik Hetzner <egh@e6h.org> writes:

>   https://gitorious.org/org-cook/org-cook
>   https://gitorious.org/org-brew/org-brew

I'm a terrible cooker/brewer...  but I love these ideas!

I allowed myself to put this in Worg -- org-hacks.org, 
in a new "Musings" section.

Thanks :)

-- 
 Bastien

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2011-07-27 14:52 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-03-24 11:47 Using org-mode for recipes (i.e. cooking) Le Wang
2011-03-24 20:52 ` Christian Moe
2011-03-24 21:56   ` Christian Moe
2011-03-25 19:25     ` brian powell
2011-03-30  6:30 ` Erik Hetzner
2011-07-26 18:01   ` Eric Abrahamsen
2011-07-26 19:03     ` Eric Schulte
2011-07-26 19:57       ` John Hendy
2011-07-27  5:00         ` Erik Hetzner
2011-07-27 12:50           ` Bastien
2011-07-27  2:30       ` Eric Abrahamsen

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).