I like the way Org Mode lets me logically group
functions into headings. If I give the heading a
CUSTOM_ID property (which is also handy for
exporting to HTML, as it turns into an link
anchor), I can use that property to find the
subtree. Then I can use
org-babel-execute-subtree to execute all source
blocks in that subtree, which means I can mix
scripting languages if I want to.
Here's the code:
(defunmy-org-execute-subtree-by-custom-id (id &optional filename)
"Prompt for a CUSTOM_ID value and execute the subtree with that ID.If called with \\[universal-argument], prompt for a file, and then prompt for the ID."
(interactive (if current-prefix-arg
(let ((file (read-file-name "Filename: ")))
(list
(with-current-buffer (find-file-noselect file)
(completing-read
"Custom ID: "
(org-property-values "CUSTOM_ID")))
file))
(list
(completing-read "Custom ID: " (org-property-values "CUSTOM_ID")))))
(with-current-buffer (if filename (find-file-noselect filename) (current-buffer))
(let ((pos (org-find-property "CUSTOM_ID" id)))
(if pos
(org-babel-execute-subtree)
(if filename(error"Could not find %s in %s" id filename)
(error"Could not find %s" id))))))
Technical notes: org-babel-execute-subtree
narrows to the current subtree, so if I want
anything from the rest of the buffer, I need to
widen the focus again. Also, it's wrapped in a
save-restriction and a save-excursion, so
someday I might want to figure out how to handle
the cases where I want to change what I'm looking
at.
elisp: links in Org Mode let me call functions
by clicking on them or following them with C-c
C-o (org-open-at-point). This means I can make
links that execute subtrees that might even be in
a different file. For example, I can define links
like these:
Times and time zones trip me up. Even with
calendar notifications, I still fumble scheduled
events. Automation helps me avoid embarrassing
hiccups.
We run BigBlueButton as a self-hosted web
conferencing server for EmacsConf. It needs at
least 8 GB of RAM when active. When it's dormant,
it fits on a 1 GB RAM virtual private server. It's
easy enough to scale the server up and down as
needed. Using the server for Emacs meetups in
between EmacsConfs gives people a way to get
together, and it also means I can regularly test
the infrastructure. That makes scaling it up for
EmacsConf less nerve-wracking.
I have some code that processes various Emacs
meetup iCalendar files (often with repeating
entries) and combines them into one iCal file that
people can subscribe to calendar, as well as Org
files in different timezones that they can include
in their org-agenda-files. The code I use to
parse the iCal seems to handle time zones and
daylight savings time just fine. I set it up so
that the Org files have simple non-repeating
entries, which makes them easy to parse. I can use
the Org file to determine the scheduled jobs to
run with cron on a home server (named xu4) that's
up all the time.
This code parses the Org file for schedule
information, then generates pairs of crontab
entries. The first entry scales the BigBlueButton
server up 1 hour before the event using my
bbb-testing script, and the second entry scales
the server down 6 hours after the event using my
bbb-dormant script (more info). That gives organizers time to
test it before the event starts, and it gives
people plenty of time to chat. A shared CPU 8 GB
RAM Linode costs USD 0.072 per hour, so that's USD
0.50 per meetup hosted.
This works because meetups don't currently
overlap. If there were, I'll need to tweak the
code so that the server isn't downscaled in the
middle of a meetup. It'll be a good problem to
have.
I need to load the crontab entries by using
crontab bbb.crontab. Again, I can tell Org Mode
to run this on the xu4 home server. This time I
use the :dir argument to specify the default
directory, like this:
#+begin_src sh :dir "/ssh:xu4:~" :results silentcrontab bbb.crontab#+end_src
Then cron can take care of things automatically,
and I'll just get the e-mail notifications from
Linode telling me that the server has been
resized. This has already come in handy, like when
I thought of Emacs APAC as being on Saturday, but
it was actually on Friday my time.
I have another Emacs Lisp block that I use to
retrieve all the info and update the list of
meetups. I can add (goto-char (org-find-property
"CUSTOM_ID" "crontab")) to find this section and
use org-babel-execute-subtree to execute all the
code blocks. That makes it an automatic part of my
process for updating the Emacs Calendar and Emacs
News. Here's the code that does the calendar part
(Org source):
Hmm. Come to think of it, the technique of "go to
a specific subtree and then execute it" is pretty
powerful. In the past, I've found it handy to
execute source blocks by name. Executing a subtree
by custom ID is even more useful because I can
easily mix source blocks in different languages or
include other information. I think that's worth
adding a my-org-execute-subtree-by-custom-id
function to my Emacs configuration. Combined with
an elisp: link, I can make links that execute
functional blocks that might even be in different
files. That could be a good starting point for a
dashboard.
I love the way Emacs can easily work with files
and scripts in different languages on different
computers, and how it can help me with times and
time zones too. This code should help me avoid
brain hiccups and calendar mixups so that people
can just enjoy getting together. Now I don't have
to worry about whether I remembered to set up cron
entries and if I did the math right for the times.
We'll see how it holds up!
Sewing together with A+ is helping me learn so
much about making and re-making, and about saying
yes.
I'm not good at saying yes. Sometimes it's because
I have no idea how to make something happen, and I
don't want to overcommit. Sometimes it's because I
don't think something will be practical or
worthwhile. Sometimes it's because I want to spend
the time or money on other things instead.
Sometimes I don't know how to make it something
that she can help with. But A+ asks with shining
eyes, and I'm learning, slowly, slowly, to say
yes. I'm beginning to trust that the mistakes
don't matter as much as the memories do.
A+ has always had ideas about what she wants to
wear. At five, she was all about floor-length
dresses. I sewed her A-line dresses in comfortable
cotton Lycra, peasant-style dresses that matched
my tops. I also made a knee-length swim skirt for
her. She liked it and requested a floor-length
version so that she could twirl and twirl and
twirl at the splash pad. She wore it into the
wading pool too, enjoying how it swirled around
her, trapping air under the skirt and marvelling
as it ballooned. The following year, she asked me
to attach a bodice to it to make it a dress. I
turned the knee-length skirt into the bodice for
the floor-length dress, took out the stitches that
had previously narrowed the then-too-large waist,
and it was good for another year of twirling.
When she was 6 and in the throes of a Cinderella
obsession (we read through 50+ variants of the
story from the library), I made her a powder blue
charmeuse ballgown with a full-circle skirt
supported by the petticoats and tutus that she
layered with abandon: 19 layers of tulle in total.
She loved curtsying and twirling with that whole
shebang at the pretend tea parties she hosted at
the playground, and it survived the washing
machine surprisingly well.
A+ is nine now and has long outgrown the ballgown,
which has been stashed in the closet until I
figure out if it's going to become a skirt for her
or for me. But she still wears the A-line dresses
from years ago, which now reach her knees instead
of her ankles. She still likes fanciful clothes. I
made a floor-length light blue dress so that she
could wear it to her cousin's wedding. She picked
out some ribbon for the waist, a lace trim to
place near the hem, and some ribbon flowers as
embellishments, and she asked me to sew a hooded
cloak with a ribbon closure. After the wedding, I
trimmed the dress to knee-length and re-sewed the
lace close to the new hem so that she could wear
it while biking to the playground.
Inevitably, she's beginning to grow up. Her fancy
is tempered by a few nods to practicality:
knee-length skirts because they don't get in the way of riding her bike
she likes stretchy fabric more than woven fabric
skorts are great for doing cartwheels or hanging upside down.
We prefer to buy fabric in person so that she can
feel the fabric on her skin. At the store, A+
zeroed in on a sheer floral print organza that she
had seen on a mannequin in the window display.
"The organza doesn't have a border," she said. "We
can make it a circle skort." She's learning to
think about the characteristics of the fabric and
what we can do with it. She matched the sheer
floral organza fabric with a peach
polyester-spandex from the swimwear section and
the right colour of thread from the basement.
This will be the fourth warm-weather skirt this
year. We make little tweaks each time, as she
learns more about what she likes to wear. Here's
the progression so far:
For her first summer skirt this year, I made a
lavender knee-length rectangle skirt with
scallop-edged embroidered mesh over bridal
satin, gathered at a 1:2 ratio. She liked the
dressiness of it, but 1:2 turned out to not be
enough ease for cartwheels, so she changes into
something else when she wants to be more active.
The second was a mermaid scale skort made from
the swimwear fabric I ordered last year, based
on one of the purchased skorts she liked. It'll
be her new swim skirt.
The third one was a purple skort. I changed it
from side seams to a single back seam so that
it's easier for A+ to tell the difference
between front and back.
I love being able to change things based on her
feedback. We've browsed nearby clothing stores and
bought a few pieces, but she rarely finds things
that she really likes. Her last pick from the
store was a peach skort with a matching top. I
removed the waist elastic from the top because she
doesn't like elastics, and now it's good to go.
It'll be the model for the new skort, I think: a
non-stretchy skirt with a stretchy fabric used for
the shorts. This time she wants a knee-length
circle skirt instead of the mid-thigh length of
the commercial skorts. Easy enough - just a matter of
drawing a bigger circle.
I appreciate how all this experience re-making
things makes it easier to say yes to A+'s ideas.
For example, the hat I sewed for her last year is
starting to feel a bit small. I cut pieces for a
new bucket hat using the free AppleGreen Cottage
pattern that I'd previously used to make two other
hats for her and one for me. This time, I wanted
to make the outer layer from the floral canvas
left over from reupholstering long-gone dining
room chairs and the inner layer from the linen tea
toweling that we decided not to use in the
kitchen. Midway through the process, A+ asked me
if I could make the hat pointy instead, like a
witch's hat. I put the brim pieces together,
sketched out a quick quarter-circle, sewed the
outer layer, and tested the fit on her head. Then
I used the inner brim layer to cover up the seams,
finished with some topstitching, and it was good
to go. I figured that if she changed her mind and
wanted a flat hat, I could easily make one from
the scraps, or I could even modify this pointy hat
to put a different crown on it.
Sewing is becoming more enjoyable and less
stressful. I worry less about making mistakes
because I've learned how to recover from many of
them. Sometimes something's more of a loss, like
that lavender floor-length cotton dress with a
split organza overskirt that she wore a couple of
times before it was declared too uncomfortable, or
the scraps that she cuts up when trying to fashion
a dress for her doll. That's fine, fabric is
tuition for learning.
A+'s becoming more adept, too. She's no longer
limited to standing still for measurements,
fetching pieces of fabric, or other make-work I
could think of to keep her busy while I sewed. Now
she can get the sewing machine to wind the bobbin
and she can thread the needle. She can sew
straight seams and stop when the machine makes an
unexpected sound. She can turn straps right side
out and unpick seams when we make mistakes or
change our minds. She knows it isn't just a matter
of how a fabric looks, but also what it feels like
and how it moves. She's gradually learning what
she likes and what she doesn't like. And if I have
the temerity to remind her how to do something
("Make a 'p' shape with the thread when you put it
in the bobbin case"), I get a glimpse of the
teenager she'll become ("I know how to do it,
Mom.").
We're getting better at seeing the clothes as
their component parts: patterns, fabric, pieces we
can recombine. "Can you copy this, but without
sleeves?" she asks, and I figure it out. Looking
at the yardage left, I can start to think: ah, I
can squeeze a matching training bra out of this
part, and I think I have enough here to make a
top, and this rectangle is large enough for a
headband, and I can turn these scraps into flowers
while I'm waiting for her at a playdate.
I'm learning from all her requests. By myself, I
tend to settle into comfortable routines. In 2015,
I made 18 tops based on the Colette Sorbetto woven
tank top pattern, eventually taking advantage of
Hacklab's laser cutter to precisely cut the fabric
so that my notches lined up every time. When I
find something I like, I make it again and again.
A+'s still figuring out what she likes. We're
learning so much.
Sewing for A+ is a time-limited opportunity, and I
want to make the most of it. There are only so
many clothes I can sew for her. Eventually she may
want to wear the same things as everyone else, or
eventually she might be comfortable doing all the
sewing herself. Eventually she'll be off on her
own life. Maybe the ballgowns will turn into
skirts or camisoles, and from there into headbands
or scrunchies.
・・・・・
Re-making echoes through our past. My mom tells me
this story of how her mom sewed, and how their
family was poor. My mom rarely got a new dress, so
when her mom sewed a red dress for her, that was
special. She wore it until the bodice couldn't fit
any more. Her mom undid the seams, sewed a new
bodice onto the skirt, and gave the dress back to
her. She wore it until the skirt was all worn out.
Her mom undid the seams and replaced the skirt. My
mom said to her mom, "Does this mean I have a new
dress now?" This was not the only dress my
grandmother made for her. My mom also tells a
story of how one time she hovered by her mom's
sewing machine, impatiently waiting for her mom to
finish sewing the dress that she was going to wear
to a party that day. My grandmother must have also
worked on re-making, on learning how to say yes.
My mom didn't make clothes for me, but she passed
on the stories.
All this reminds me a little of two picture books
we borrowed from the library. My Forever Dress by
Harriet Ziefurt and Liz Murphy (2009, video) shows
how a grandmother extended and transformed a dress
as her granddaughter grew. Something from Nothing
by Phoebe Gilman (1992, video) retells the Yiddish
folktale about Joseph's overcoat, this time with a
special blanket that gets worn down and
transformed into a jacket, a vest, a tie, a
handkerchief, ending as a fabric-covered button.
The button gets lost, but it turns into a story.
Of the two, I liked Something from Nothing more.
I liked the lighter touch it told the story with,
and I liked the reminder that cherished things can
be turned into stories.
A+ was in the kitchen, making a grocery list on an
LCD writing tablet. She wanted to buy apple sauce,
yogurt cups, and mac and cheese. She wanted to do
it herself, with her own money. W- will walk her
to the store, let her loose, and meet up with her
in front of one of the aisles. "Mama, you can stay
home," she said.
Challenge: She wanted her own bag for groceries.
Her backpack was too small. I rummaged through the
reusable bags hanging on the coat hooks. There's
this cotton tote we got from an event, but the
straps are too long. When she put it on her
shoulder, it threatened to fall down. When she
carried the bag by its straps, the bag dragged on
the floor. I shortened one strap to see if she can
hold it then. The body of the bag itself was too
long. I sewed a seam across the bottom. Now it's
the right height for her. I shortened the other
strap and serged the bottom seam to make it neat.
She wanted a pocket for her purse and the KN95
mask that she'll wear in the supermarket. W- was
almost ready to head out. "Give me another five
minutes and I can make her a pocketed bag," I
said. He waited. I opened up the scrap from the
bottom, sewed the edges together in the other
direction, turned it into a pocket, and sewed it
to the top hem of the bag. A+ pronounced it
perfect. She tucked her purse, mask, and shopping
list into the bag, looped the straps over her
shoulder, snugged the bag under her elbow, and
headed out into the world.
・・・・・
I still sweat my way through figuring out how to
sew what she comes up with, but it's good for me.
I make and re-make so she can have things that fit
her ideas, and so that she can dream of more.
She's learning that her ideas matter. It can take
several tries, but we can make them happen
together. Someday she'll make and re-make things
all on her own.
This post was inspired by the June IndieWeb Carnival theme of Take Two.
In May, I want to add more plants to our outdoor
garden, sew some swimwear for A+ and me, and see
about volunteering for Bike Brigade.
I volunteered to help with Bike Brigade's e-mail
newsletter, since they were looking for someone to
take over from another volunteer and it might be a
good way to build real-life community. I like the
cause: volunteer cyclists connecting food banks
with people who need those groceries delivered.
W-'s been volunteering for that for a while, and
A+ and I also did a couple of deliveries, and it's
nice to see her enjoy helping out. I also listened
to a virtual panel about bikes and social justice,
and I shared my sketchnotes afterwards. I'm glad
there are people thinking about these issues, and
I'm also glad that there are small, concrete,
on-the-ground ways that we can help.
We made more progress through the Toronto District
School Board's gifted identification process, but
I think we're going to opt for a regular class in
the public virtual school instead of the gifted
placement in an in-person school. A+ gets bored in
class, but I think she'll enjoy having the extra
opportunities to play with her friends and explore
ideas, and she also appreciates the way she can
read and sing in the middle of class. (Hooray for
the mute button!)
A+ took a pottery painting class and another
pottery wheel class at Clay With Me. This time she
did a 2-hour wheel workshop, and the teacher was
able to help her with a couple of pieces. We've
been using the bowls we made in the previous
class. It's nice to have hand-made things. This
seems to be an ongoing interest, so we're going to
experiment with a pottery-related summer camp. I
found one that lets me register for a week-long
afternoon camp that focuses on the pottery wheel.
We like to keep our time pretty flexible, so this
is our first experiment with a camp. I think it'll
be great to be able to build momentum and learn
from a teacher with more experience, using
equipment that we don't have access to at home.
The camp description says kids will learn how to
add attachments and other decorations to their
work, so that could be pretty cool.
I experimented with bringing a portable butane
stove to the park. We were able to make s'mores on
two separate occasions without setting anyone on
fire, hooray! It was a good experience. The kids
had fun.
On nice days when we didn't have any playdates
planned, we I went on bike adventures. We checked
out the flower event in Yorkville. We also
explored the St. James Park playground, which was
included in the recent Doors Open event. A+ liked
the tall slide there. We also went to the Art
Gallery of Ontario so that she could work on her
Group of 7 art assignment while looking at the
actual paintings. She picked Figure with Rays of
Light by Lauren Harris.
There were quite a few rainy days. We got a lot of
sewing done. A+'s getting better at sewing simple
seams, and she can stop the machine when things
sound weird. We made a fancy skirt with an
embroidered mesh layer over satin, a couple of
skorts made of spandex so that she can wear it
into the splash pad or even the swimming pool, a
swim set, and a few tops.
Rainy days were also good for playing together. A+
was curious about playing a farming game, so we
started playing Stardew Valley, and we all got
into it quite a fair bit. A+ likes collecting
eggs, cooking food, and building friendships. I
enjoy farming and mining. It's a lot of fun,
especially when we play co-op. Even W-'s gotten
into it on his phone. This could be a fun way to
learn more about life and parenting. Having my own
solo farm is also nice, too. It helps me be more
patient when we play in co-op because I know I
have a different space where I can try things out.
It does mean I get tempted to stay up late. I can
definitely see the impact of this new interest on
my time graph and sleep totals, but that's fine.
It's good to ride the wave of our interests,
especially when we can do it together.
In our real-life garden, the radishes have been
very happy, and other seeds have sprouted too. The
mini roses, dahlias, and strawberries have come
back, and so has a dianthus. The
daffodils are done with their blooms. Last year's
compost turned out pretty nicely, and I've started
turning this year's trimmings into compost. I love
letting A+ plant seeds wherever she likes, and
I've been enjoying learning how to identify those
sprouts as well as other ones that turn up in our
garden.
A+'s been enjoying the sourdough rye from the
Dufferin Grove farmers market, so I revived the
sourdough starter we got from a trip many years
ago, which we'd revived in 2020 or so and then
re-dehydrated. I thought I got it to be pretty
active again, but I haven't quite figured out
baking a proper loaf yet. On the other hand, W-
has been on a roll (hah) with all the breads and
bagels he's been baking. I put the starter in the
fridge for a week because we had lots of
potato-rosemary bread in the house, and now I
think the starter needs a few days of waking up
again. Oh well, flour is tuition for learning how
to bake. Fortunately, I've discovered I like
sourdough discard pancakes, so at least there's a
way to deal with the excess.
In June, I'd like to take A+ on a few more
informal field trips during the school week, to
take advantage of places before they get swamped
by everyone else on summer break. Maybe
Centreville, and maybe strawberry-picking like
last year. Her friends will probably be more
available for playdates too, so that'll be a nice
shift in our routines. I'm looking forward to more
cooking and sewing and gardening and pottery. We
like making things together and enjoying them
together. As the days get longer and the weather warms, I
shift: less computer time, more outside time. This
is good. I'm looking forward to exploring
more of the city by bike, now that we know we can
make it out to playgrounds on the other side of
town. It's the season for it!