Je pratique le français en écrivant dans un journal avec l'aide de l'IA Gemini et de ma tutrice Claire. Elle a corrigé mon travail ci-dessous. Il y avait quelques points à résoudre.
Ces choses sont probablement trop mineures pour m'empêcher d'essayer ! =)
Ensuite, je fais des cartes Anki pour étudier le vocabulaire et la grammaire.
Je veux pratiquer l'oral en disant quelques mots aussi. (Petit à petit…)
Voici les entrées de mon journal pour la semaine dernière.
J'ai parlé le français avec Claire, qui est une tutrice. Ma fille apprend le français à l'école, alors j'aimerais aussi l'apprendre.
J'ai discuté avec Claire à propos de ma famille, de mes passe-temps, d'où je viens et depuis quand je suis venue au Canada.
Ensuite, j'ai emmené ma fille à son cours de gymnastique.
Si j'apprends le français, nous pouvons nous amuser ensemble.
Je veux améliorer ma prononciation.
Je veux lire des livres pour les enfants et l'information sur les produits.
Il y a beaucoup de matériaux en français parce que j'habite au Canada.
Je veux écrire des entrées de journal.
Je veux parler avec ma famille en français.
"Il y a beaucoup de matériaux en français": matériaux ou matériel?
"Dans le domaine des sciences humaines et sociales (ethnologie, sociologie) ou en psychanalyse, on emploie le terme matériel pour désigner l’ensemble des éléments qui seront traités ou analysés. Matériau (ou son pluriel matériaux, si l’on veut insister sur la multiplicité ou la diversité des sources) désigne un ensemble de données, d’informations qui fournit la matière de base à un texte, un ouvrage, une recherche." (origine)
Pour example: Soutien linguistique - Simon Fraser University : “La bibliothèque Bennett de SFU dispose d'une grande sélection de matériaux en français et d'une bibliothécaire spécialisée pour t'aider à trouver des ressources, ainsi que du Student Learning Commons qui propose divers ateliers.”
Après l'école, j'ai emmené ma fille à son cours d'art. C'était son premier cours avec son amie. C'est proche, seulement dix minutes à vélo. Ensuite, j'ai fait du vélo près de la rivière. Il y avait quelques pêcheurs.
Le soleil se couchait, alors je suis rentrée chez moi et j'ai écrit cette entrée de journal intime.
Mon mari a cuisiné du riz frit pour le souper. J'ai changé la langue de Google Assistant sur mon mobile en français, et j'ai fait quelques cartes d'Anki.
("Règlez une minuterie de cinq minutes.")
Ma fille a dit qu'elle s'est amusée dans sa classe d'art.
J’ai emmené ma fille
chez la dentiste pour nos nettoyages.
J’ai aussi fait des radiographies.
Ça coûte chère, mais c’est nécessaire.
Heureusement, nous n’avons pas de caries.
Normalement, après l’école le mercredi,
nous jouons avec des amies de ma fille.
Aujourd’hui nous sommes restés chez nous
parce qu’il devait pleuvoir.
Il n’a pas plu,
mais il y avait du vent.
Pour le souper, mon mari a cuisiné
des spaghettis au pesto de tomate.
Ensuite, j’ai chanté avec ma fille
et j’ai écrit cette entrée.
Je vais faire une prise de sang demain.
J’emmènerai peut-être ma fille
pour jouer avec ses amies après l’école.
“Ça coûte chère” ou “Ça coûte chèr” ou “Ça coûte cher”
Elle coûte cher ou chère ? Transcription “Avec le verbe 'coûter', parce que ce n'est pas un verbe d'état, 'cher' prend une valeur adverbiale et on n'accorde pas. Et c'est la même chose au pluriel.”
J'ai préparé le déjeuner pour ma fille :
des bleuets, des fraises, du fromage,
des craquelins, des carottes,
du riz, et du pâté de porc.
J'ai fait une prise de sang.
J'ai attendu trente minutes,
mais ce n'était pas grave
parce que j'ai écouté quelques podcasts.
Ensuite, je suis retournée chez moi
et j'ai pratiqué la compréhension orale
et l'expression orale.
J'aime le cours de FSI sur la phonologie française.
Il y avait beaucoup de petites étapes.
La météo a annoncé de la neige pour dimanche,
donc j'ai enlevé les pots de fleurs.
Mon mari a cuisiné du riz frit.
Nous avons comparé les pommes.
Nous préférons les pommes Gala qu'il a acheté au marché
aux pommes Honeycrisp qu'il a acheté au supermarché.
Ma fille n'a pas voulu sortir,
donc nous sommes restés chez nous.
Elle a joué à Minecraft
avec sa tante qui habite en Californie.
Nous préférons les pommes Gala qu'il a acheté au marché aux pommes Honeycrisp (ou achetées)
achetées: L’accord du participe passé avec avoir - Visez juste Le participe passé employé avec avoir s’accorde avec le complément d’objet direct (COD) s’il est placé avant le verbe. Pour trouvez le COD, vous devez prendre le sujet, le verbe et ensuite poser la question « qui » ou « quoi ». Dans la phrase, les fleurs que Patrick m’a envoyées étaient vraiment jolies. Ici, on dira donc Patrick a envoyé quoi? que placé avant le verbe et mis pour fleurs, féminin pluriel. Envoyé s’écrira donc envoyées.
J'ai préparé le déjeuner pour ma fille :
une orange, des bleuets, des craquelins,
des carottes, du fromage,
et un sandwich au jambon.
Pendant que ma fille était en classe virtuelle,
j'ai étudié le troisième chapitre de mon cours de FSI
sur la phonologie française.
C'était sur le phonème "u" et le phonème "r".
C'était très difficile.
Après l'école, j'ai emmené ma fille à KidSpark.
Nous n'y avons joué qu'une heure,
mais j'ai utilisé un coupon pour mon entrée,
donc ce n'était pas grave.
Mon mari est allé à la pharmacie
pour les vaccins. Puis, il a cuisiné
une courge au beurre et à la cassonade.
Nous avons aussi mangé des restes.
Ensuite, nous avons joué à Space Escape,
qui est un jeu de société.
Aujourd'hui, ma fille a participé
à un club de nature au parc.
Je lui ai préparé un en-cas :
une orange, un concombre, du fromage,
un bonbon d'Halloween, et des craquelins.
Elle est trop grande pour ses pantalons de ski,
donc nous sommes allés acheter des vêtements.
Nous avons acheté de nouveaux
pantalons de ski imperméables
parce qu'en hiver, nous aimons patiner.
Pour le déjeuner, nous avons mangé de la crème de champignons et des pâtes.
Pendant que ma fille marchait au parc avec son club,
mon mari et moi avons nettoyé les pots de fleurs.
Après l'avoir récupérée,
nous avons bu du chocolat
parce qu'elle avait un peu froid.
Elle avait oublié ses gants.
C'était la première chute de neige !
Pendant que la neige tombait
nous nous sommes promenés.
Ma fille avait trouvé que ses nouveaux pantalons de ski lui allaient bien.
Ensuite, nous avons bu du chocolat chaud
avec des guimauves.
Notre journée était tranquille.
J'ai lu quelques livres.
Mon mari et ma fille ont fait
de l'exercice ensemble.
Pour le souper, j'ai cuisiné des sushis.
Mon mari a aussi préparé de la salade de chou crue.
Ma fille a joué à Minecraft avec sa tante.
Sa tante a fini la route de parkour
que ma fille avait construite.
C'est très difficile !
Je ne peux pas encore le finir.
J'ai pratiqué les phonèmes "r" et "eu".
Je ne peux pas encore bien les prononcer.
Je dois poser des questions à Claire demain.
Ou je peux le laisser pour le moment.
Je suis un peu fatigué
donc je vais me détendre.
“Ma fille avait trouvé que ses nouveaux pantalons de ski lui allaient bien.” ou “Ma fille a trouvé”?
“la salade de chou crue” ou “la salade de chou cru” - agree with chou (m)?
A+ goes to virtual school. She still wants me to
pack a lunch for her every weekday, complete with
a lunch note, so that she can "get the schoolkid
experience." I started by drawing food and making
food-related puns. Lately, she's been really into
KPop Demon Hunters, so I've been drawing scenes
from those:
Figure 1: Art class this afternoonFigure 2: Ramyeon time, because she wanted ramen for lunchFigure 3: Adding A+ to the hoodie scene because it was getting coldFigure 4: Zoey with shrimp crackers, because I packed shrimp crackers for her lunch
Drawing from a reference image is good practice anyhow. Doing it on a lunch note means I get the payoff of giggles during her lunch break. Not bad.
Following up on Doodling icons in a grid, it's a lot easier to make confident lines when I'm just darkening something I've lightly sketched in. The resistance provided by the pencil going over the card stock helps, too.
October was tougher than usual, which really underscored how important health is. It was a lot to deal with, so we shuffled our priorities and lowered expectations. Things seem to have mostly settled down to a manageable new normal.
Fortunately, I was still able to focus on my client's time-sensitive event even when things were a little haywire.
I'm glad I could solve their last-minute problem and work on some of their requests. Things are settling down now, but I'm probably not going to get much consulting done this month since I'm getting ready for EmacsConf in November.
This is a pretty normal pattern now, so I know that putting off some requests for a while will be fine.
On the plus side, it was a good push to make a few changes.
I started an exercise habit (13 days out of 31, 42%) following beginner workout videos on YouTube.
I also made an effort to get out for a walk more often (20/31 days, 65%) to help with anxiety.
I explored more of my thoughts and worries with journal entries, drawings, and the occasional blog post.
While I was pulling back and focusing on my hierarchy of needs, I wanted to make sure A+ also had resources for handling her big feelings.
I set up Messenger Kids and Stars App on an old Android phone so that A+ could connect with her aunts and sisters without needing to go through me.
We also subscribed to Minecraft Realms again so that they could play together.
It's really nice overhearing them chat.
It's important for A+ to have trusted people she can talk to, especially when she's grumpy with me.
We experimented with 1-on-1 gymnastics classes for A+.
She's been asking about taking gymnastics for a while.
I figured 1-on-1 can reduce the COVID risks.
She can slow down the pace to be manageable even with a mask.
Besides, she likes being able to talk with the teacher.
She enjoys the classes.
It's nice seeing her work hard and learn to tune into her body.
Piano-wise, I've been working on "In the Hall of the Mountain King."
I can occasionally play the Simply Piano pre-advanced-level arrangement at full tempo with almost all the notes. My fingers still seize up from time to time, and I still forget to breathe. I'll get the hang of things someday.
I've been working on learning French.
A+ is taking it in school, and languages are easier to learn if you can use it with people you like.
I want to be able to use it with W- and A+.
I also want to be able to take advantage of all the reading material around me.
A+'s current focus is KPop Demon Hunters.
We've watched it several times, and we often sing the songs from the movie.
Fortunately, she still had her heart set on dressing up as Elphaba for Halloween,
so I didn't need to scramble a last-minute Rumi costume.
I carved a pumpkin to look like Derpy the Tiger from KPop Demon Hunters.
A+ proudly handed out candy and erasers to the early trick-or-treaters.
When it got a bit darker, we put away the candy and I took her for a walk up and down the street.
Then she handed out more candy.
When she got cold and tired, I took over giving out candy.
We ended up giving away almost 1,200 pieces.
So it was a pretty busy month.
Next month:
I'm experimenting with having a French tutor. I'd like to be able to speak and understand French, so a tutor can help with that. I've also been working on drawing and writing journal entries in French, and recording pronunciations.
We're experimenting with art classes for A+. One of her friends is taking it too. That way, she can have fun with art outside a school environment. Maybe that'll help sneak in some creative expression, fine motor skills, and frustration tolerance while she's having fun.
I want to continue backing off and letting A+ handle her schoolwork more independently. We'll be getting the first report card soon, so that'll give her some feedback on how things are going.
It's the last month before EmacsConf, so I need to get things ready. Looks like everyone's busy, so if it ends up being more of a casual hangout, that's totally okay too.
It's getting colder and A+'s friends are starting to move to more indoor playdates, so I think it'll be a little more challenging to spend time with them and to get the 2-3 hours that the ophthalmologist keeps emphasizing. Ah well.
Some untracked time just defaulting to the Personal - Routines category.
I spent less time consulting now that we've gotten past the scheduled event.
I slept an average of 8.2 hours a night, which is good. I know my brain has a hard time when I'm low on sleep, so I prioritize it when things are dicey.
I spent less time drawing, writing, and tinkering with Emacs, but maybe I'll get back to more of those things as life settles down.
Screencast of my-sketch-similar and my-consult-similar
0:00: Text preview:
All right, so here's a preview of how I can flip through the images that are similar to my current text. Let's say, for example, I've got my-sketch-similar. I'm passing in my whole blog post. This one is a text preview. It just very quickly goes through the OCR text.
0:27: Image preview:
I can use the actual images since Emacs has image support. It's a bit slower and sometimes it doesn't work. So far it's working, which is nice, but you can tell there's a bit of a delay.
0:51: External viewer like Geeqie:
The third option is to use an external program like Geeqie. Geeqie? Anyway, that one seems a lot faster.
1:12: my-consult-similar:
Then I can use that with this new multiple source consult command that I've just defined. So, for example, if I say my-consult-similar, I can then flip through the related blog posts as well as the related sketches in one go. I was calling it with a C-u universal prefix argument, but I can also call it and type in, for example, parenting and anxiety. Then I can see my recent blog posts and sketches that are related to that topic. I think I should be able to just… Yes, if I press enter, it will insert the link. So that's what I hacked up today.
The data
As part of my sketchnote process,2 I convert my sketches to text files.3 I usually use Google Cloud Vision to automatically convert the images to text. By keeping .txt files beside image files, I can easily search for images and include them in blog posts.4 I usually edit the file afterwards to clean up the layound and fix misrecognized words, but even the raw text output can make files more searchable.
I indexed the sketches' text files with:
(defunmy-org-db-v3-index-recent-sketches (after)
(interactive (list
(when current-prefix-arg
(org-read-date nil nil nil "After: " nil "-2w"))))
(setq after (or after (org-read-date nil nil "-2w")))
(mapcar #'org-db-v3-index-file-async
(seq-remove
(lambda (o) (string> after (file-name-base o)))
(directory-files "~/sync/sketches" t "\\.txt$"))))
Completion code
Writing the Consult completion code for the sketches was pretty straightforward because I could base it on my blog posts.
(defunmy-org-db-v3-sketch--collection (input)
"Perform the RAG search and format the results for Consult.Returns a list of cons cells (DISPLAY-STRING . PLIST)."
(mapcar
(lambda (o)
(cons (file-name-base (alist-get 'source_path o)) o))
(seq-uniq
(my-org-db-v3-to-emacs-rag-search input 100 "%sync/sketches%")
(lambda (a b) (string= (alist-get 'source_path a)
(alist-get 'source_path b))))))
(defunmy-sketch-similar (&optional query hide-initial)
"Vector-search blog posts using `emacs-rag-search' and present results via Consult.If called with \\[universal-argument\], use the current post's text.If a region is selected, use that as the default QUERY.HIDE-INITIAL means hide the initial query, which is handy if the query is very long."
(interactive (my-11ty-interactive-context current-prefix-arg))
(consult--read
(if hide-initial
(my-org-db-v3-sketch--collection query)
(consult--dynamic-collection
#'my-org-db-v3-sketch--collection:min-input 3 :debounce 1))
:lookup#'consult--lookup-cdr:prompt"Search sketches (approx): ":category'sketch:sort nil
:require-match t
:state (my-image--state)
:initial (unless hide-initial query)))
(defunmy-sketch-similar-insert (link)
"Vector-search sketches and insert a link.If called with \\[universal-argument\], use the current post's text.If a region is selected, use that as the default QUERY.HIDE-INITIAL means hide the initial query, which is handy if the query is very long."
(interactive (list
(if embark--command
(read-string "Sketch: ")
(apply #'my-sketch-similar
(my-11ty-interactive-context current-prefix-arg)))))
(my-insert-sketch-and-text link))
(defunmy-sketch-similar-link (link)
"Vector-search sketches and insert a link.If called with \\[universal-argument\], use the current post's text.If a region is selected, use that as the default QUERY.HIDE-INITIAL means hide the initial query, which is handy if the query is very long."
(interactive (list
(if embark--command
(read-string "Sketch: ")
(apply #'my-sketch-similar
(my-11ty-interactive-context current-prefix-arg)))))
(when (and (listp link) (alist-get 'source_path link))
(setq link (my-image-filename (file-name-base link))))
(insert (org-link-make-string (concat "sketchLink:" link) (file-name-base link))))
Displaying images in Emacs can be a little bit slow, so I wanted to have different options for preview. The fastest way might be to preview just the text to see whether this is a relevant image.
(setq my-sketch-preview 'text)
Another way to preview to load the actual image, if I have a bit more patience.
(setq my-sketch-preview t)
Figure 2: Screenshot of image preview
Sometimes Consult says "No partial preview of a binary file", though, so I can probably look into how to get around that.
Using an external program is another option. Here I have some code to use Geeqie to display the images.
(setq my-sketch-preview 'geeqie)
Figure 3: Using Geeqie to flip through images
Using Geeqie feels faster and more reliable than using Emacs to preview images.
The preview is implemented by the following function in the Completing sketches part of my config.
(declare-function'my-geeqie-view"Sacha.el")
(defvarmy-sketch-preview'text"*Preview sketches.'text means show the associated text.'geeqie means open image in Geeqie.t means open image in Emacs.")
(defunmy-image--state ()
"Manage preview window and cleanup.";; These functions are closures captured when the state is initialized by consult--read
(let ((preview (consult--buffer-preview))
(open (consult--temporary-files)))
;; The returned lambda is the actual preview function called by Consult
(lambda (action cand)
(unless cand
(funcall open))
(when my-sketch-preview
(let ((filename (cond
((and (eq my-sketch-preview 'text)
(listp cand)
(alist-get 'source_path cand))
(alist-get 'source_path cand))
((and (listp cand)
(alist-get 'source_path cand))
(my-image-filename (file-name-base (alist-get 'source_path cand))))
(t cand))))
(when filename
(pcase my-sketch-preview
('geeqie (my-geeqie-view (list filename)))
(_ (funcall preview action
(and cand
(eq action 'preview)
(funcall open filename)))))))))))
Now I can make a Consult source that combines both blog posts and sketches using semantic search. I wanted to have the same behaviour as my other functions. If I call it interactively, I want to type in text. If I call it with a region, I want to search for that region. If I call it with the universal prefix argument C-u, I want to use the current post text as a starting point. Since this behaviour shows up in several functions, I finally got around to writing a function that encapsulates it.
Then I can use that for the interactive arguments of my new my-consult-similar function.
Figure 4: Screenshot of semantic search for both blog posts and sketches
Thoughts and next steps
The vector search results from my sketches don't feel as relevant as the blog posts, possibly because there's a lot less text in my sketches. Handwriting is tiring, and I can only fit so much on a page. Still, now that I'm sorting results by similarity score, maybe we'll see what we get and how we can tweak things..
It might be nifty to use embark-become to switch between exact title match, full-text search, and vector search.
plz supports asynchronous requests and org-db-v3.el has examples of doing this, so maybe I can replicate some of Remembrance Agent's functionality by having an idle timer asynchronously update a dedicated buffer with resources that are similar to the current paragraph, or maybe the last X words near point.
I wonder if it makes sense to mix results from different sources in the same list instead of splitting it up into different categories.