mirror of
https://github.com/almet/notmyidea.git
synced 2025-04-28 11:32:39 +02:00
Update
This commit is contained in:
parent
a7150d346b
commit
eeb9b94453
7 changed files with 149 additions and 7 deletions
26
content/Journal/2024-02-26-ecrire.md
Normal file
26
content/Journal/2024-02-26-ecrire.md
Normal file
|
@ -0,0 +1,26 @@
|
|||
# Écrire
|
||||
|
||||
Avec — enfin — un peu de recul, je suis content de la quiétude et de l'espace mental qui se dégage pour moi ces temps cis.
|
||||
|
||||
En pleine traversée j'ai parfois trouvé refuge dans des ateliers d'écriture. Je trouve l'exercice à la fois réconfortant et stimulant intellectuellement. Au point que nous avons commencé avec des ami-es à en faire des ateliers réguliers.
|
||||
|
||||
Voici quelques contraintes qu'on a pu se donner au fur et à mesure des sessions, et que je garde ici pour pouvoir re-piocher dedans dans le futur.
|
||||
|
||||
J'en profite [pour déposer ici quelques textes écrits à l'occasion](https://blog.notmyidea.org/ecriture).
|
||||
|
||||
- **Temps**: On peut se donner une durée fixe, mais aussi plusieurs. J'ai bien aimé faire certains textes en « fractionné », 3 fois 15mn.
|
||||
- **Extrait**: Devoir placer un bout de texte, un extrait, dans le texte qu'on va produire.
|
||||
- **Champ Lexical**: On cherche à trouver des mots, à plusieurs, dans un champ lexical, puis on se dit qu'il faut placer ces mots dans le texte qui est produit.
|
||||
- **Ne pas effacer**: écrire sans jamais effacer.
|
||||
- **Homophones**: Texte libre à partir de mots énoncés oralement et à orthographier comme on le souhaite (en utiliser au moins 5 sur 7 et les décliner selon au moins 2 orthographes).
|
||||
- **Objet**: Il faut que l'objet (par exemple une théière) ait une importance particulière.
|
||||
- **Les premières pages d'un roman**
|
||||
- **Qui dit, dit**: S’appuyer sur la structure « Qui dit… dit… » (répété autant de fois que voulu) et conclure par « Alors… ».
|
||||
- **Mots fantômes**: Ne pas écrire les mots, mais faire un texte qui tourne autour d'eux.
|
||||
- **Poème**: Faire un poème court
|
||||
- **Objet animé**: Un objet habituellement inanimé devient vivant.
|
||||
- Quelques pages d'un roman, très descriptif.
|
||||
- Ca fait peur.
|
||||
- **Boule de neige**: Utiliser l'effet « boule de neige », commencer avec un mot par phrase, puis deux, puis trois, etc.
|
||||
- **Tirage à la ligne**: commencer par une phrase, puis l'étirer dans une seconde phrase, puis repartir de cette seconde phrase et l'étirer à nouveau. Répéter un nombre de fois défini.
|
||||
- **Musique**: S'inspirer d'une musique, qu'on pourra réécouter à plusieurs reprises durant l'écriture.
|
103
content/code/2024-02-22-django-uuid-migrations.md
Normal file
103
content/code/2024-02-22-django-uuid-migrations.md
Normal file
|
@ -0,0 +1,103 @@
|
|||
---
|
||||
title: Changing the primary key of a model in Django
|
||||
tags: django, orm, migrations
|
||||
---
|
||||
|
||||
I had to change the primary key of a django model, and I wanted to create a
|
||||
migration for this.
|
||||
|
||||
The previous model was using django [automatic primary key fields](https://
|
||||
docs.djangoproject.com/en/5.0/topics/db/models/#automatic-primary-key-fields)
|
||||
|
||||
I firstly changed the model to include the new `uuid` field, and added the `id`
|
||||
field (the old primary key), like this:
|
||||
|
||||
```python
|
||||
|
||||
uuid = models.UUIDField(
|
||||
unique=True, primary_key=True, default=uuid.uuid4, editable=False
|
||||
)
|
||||
id = models.IntegerField(null=True, blank=True)
|
||||
```
|
||||
|
||||
Then I created the migration, it:
|
||||
|
||||
- Adds a new `uuid` field/column in the database
|
||||
- Iterate over the existing items in the table, and generates an uuid for them
|
||||
- Change the old primary key to a different type
|
||||
- Drop the old index
|
||||
- Mark the new uuid as a primary key.
|
||||
|
||||
To generate the migrations I did `django-admin makemigrations`, and iterated on
|
||||
it. Here is the migration I ended up with:
|
||||
|
||||
```python
|
||||
import uuid
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
dependencies = [
|
||||
("umap", "0017_migrate_to_openstreetmap_oauth2"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
# Add the new uuid field
|
||||
migrations.AddField(
|
||||
model_name="datalayer",
|
||||
name="uuid",
|
||||
field=models.UUIDField(
|
||||
default=uuid.uuid4, editable=False, null=True, serialize=False
|
||||
),
|
||||
),
|
||||
# Generate UUIDs for existing records
|
||||
migrations.RunSQL("UPDATE umap_datalayer SET uuid = gen_random_uuid()"),
|
||||
# Remove the primary key constraint
|
||||
migrations.RunSQL("ALTER TABLE umap_datalayer DROP CONSTRAINT umap_datalayer_pk"),
|
||||
# Drop the "id" primary key…
|
||||
migrations.AlterField(
|
||||
"datalayer", name="id", field=models.IntegerField(null=True, blank=True)
|
||||
),
|
||||
# … to put it back on the "uuid"
|
||||
migrations.AlterField(
|
||||
model_name="datalayer",
|
||||
name="uuid",
|
||||
field=models.UUIDField(
|
||||
default=uuid.uuid4,
|
||||
editable=False,
|
||||
unique=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
),
|
||||
),
|
||||
]
|
||||
```
|
||||
|
||||
## Generating UUIDs in pure python
|
||||
|
||||
The uuid generation can also be done with pure python, like this. It works with all databases, but might be slower. Use it with `migrations.RunPython()`.
|
||||
|
||||
```python
|
||||
def gen_uuid(apps, schema_editor):
|
||||
DataLayer = apps.get_model("umap", "DataLayer")
|
||||
for row in DataLayer.objects.all():
|
||||
row.uuid = uuid.uuid4()
|
||||
row.save(update_fields=["uuid"])
|
||||
```
|
||||
|
||||
## Getting the constraint name
|
||||
|
||||
One of the things that took me some time is to have a way to get the constraint name before removing it. I wanted to do this with the Django ORM, but I didn't find how. So here is how in plain SQL. This only works with PostgreSQL, though.
|
||||
|
||||
```python
|
||||
migrations.RunSQL("""
|
||||
DO $$
|
||||
BEGIN
|
||||
EXECUTE 'ALTER TABLE umap_datalayer DROP CONSTRAINT ' || (
|
||||
SELECT indexname
|
||||
FROM pg_indexes
|
||||
WHERE tablename = 'umap_datalayer' AND indexname LIKE '%pkey'
|
||||
);
|
||||
END $$;
|
||||
"""),
|
||||
```
|
|
@ -4,9 +4,12 @@ slug: index
|
|||
---
|
||||
# À propos
|
||||
|
||||
👋 **Bienvenue par ici**, je suis Alexis, un développeur intéressé par les dynamiques collectives, les libertés numériques et la facilitation.
|
||||
👋 **Bienvenue par ici**, je suis Alexis, un développeur intéressé par les
|
||||
dynamiques collectives, les libertés numériques et la facilitation.
|
||||
|
||||
Vous retrouverez sur ce site [mes notes hebdomadaires](/weeknotes), quelques [billets de blog](/journal), des [notes de lectures](/lectures) et [des bouts de code](/code) que je veux garder quelque part. Bonne lecture !
|
||||
Vous retrouverez sur ce site [mes notes hebdomadaires](/weeknotes), quelques
|
||||
[billets de blog](/journal), des [notes de lectures](/lectures), [des bouts
|
||||
de code](/code) et [textes](/ecriture) que je veux garder quelque part. Bonne lecture !
|
||||
|
||||
Pour me contacter, envoyez-moi un email sur ``alexis@`` ce domaine (en enlevant `blog.`).
|
||||
|
||||
|
@ -24,7 +27,6 @@ Coopération et médiation
|
|||
faire pour que nos interactions soient les plus saines possibles. La qualité
|
||||
des interactions m'intéresse autant que le travail en tant que tel.
|
||||
|
||||
|
||||
Pragmatisme
|
||||
: Tendre vers la perfection veut aussi dire ne pas trop s'attarder sur
|
||||
certains détails. Parfois, « le mieux est l'ennemi du bien ».
|
||||
|
@ -50,7 +52,7 @@ Frontend
|
|||
: Bien que ça ne soit pas ma spécialité, j'ai pris beaucoup de plaisir
|
||||
à travailler avec le langage [Elm](https://elm-lang.org/), qui permet de
|
||||
travailler de manière sereine côté *front*, grace à un typage fort. J'ai surtout
|
||||
travaillé sur des petits projets. Je suis à l'aise avec du HTML, du CSS ou du
|
||||
travaillé sur des petits projets. Je suis aussi à l'aise avec du HTML, du CSS ou du
|
||||
JavaScript.
|
||||
|
||||
Administration Système
|
||||
|
|
|
@ -5,6 +5,12 @@ template: worklog
|
|||
total_days: 25
|
||||
---
|
||||
|
||||
## Lundi 26 Février 2024 (10h, 5/5)
|
||||
|
||||
J'ai continué le passage vers les uuids pour les datalayers, le matin j'ai finalement trouvé un moyen de récupérer le nom de la contrainte, et l'après midi on a passé un peu de temps avec yohan pour faire de la migration de données pour les utilisateurs qui font un usage un peu détourné des datalayers (en les utilisant en remoteUrl).
|
||||
|
||||
Weekly, et puis on a discuté avec David et Yohan de comment on pourrait faire évoluer le formbuilder dans le futur. Une des pistes serait de faire des forms un peu à la django, qui pourraient ensuite se rendre de manière automatique. On a discuté du fait de passer sur une formule HTML un peu plus directe (plutôt que de manipuler le DOM en JavaScript), mais pour le moment on reste la dessus.
|
||||
|
||||
## Samedi 24 Février 2024 (4h, 5/5)
|
||||
|
||||
J'ai suivi mon envie de creuser sur les CRDT, je sens qu'on est bientôt prêts pour
|
||||
|
|
|
@ -49,7 +49,8 @@ projects: umap
|
|||
- 🎧 [K.O. pour le véganisme ? - Valéry Giroux (Épisode spécial)](https://www.youtube.com/watch?v=BgC68CR1qN4), un épisode de podcast qui vient parler de l'anti spécisme du point de vue philosophique.
|
||||
- 🎵Redécouvert [HERMIA & CECCALDI & DARRIFOURCQ](https://babel-label.bandcamp.com/track/ho-chi-minh) avec leur album de free jazz « God at the casino ». Génial.
|
||||
- 🎵Découvert [Craven Faults](https://www.youtube.com/watch?v=KRT-tIn9yeE), de la musique ambiant progressive qui me rappelle [des vibes de Archive / Lights](https://www.youtube.com/watch?v=yLuOzNeHw5I). Si vous êtes en recherche de concentration et que vous aimez la répétition, en voici 26 minutes.
|
||||
- 📖 J'ai continué « Oser la confiance »
|
||||
- 📖 J'ai continué « Oser la confiance », plein de bouts intéressants.
|
||||
- 🕸 [Au procès Assange : une audience pour le droit de se battre](https://www.mediapart.fr/journal/international/210224/au-proces-assange-une-audience-pour-le-droit-de-se-battre) chez médiapart, et [une vidéo qui essaye de sortir de vrai du faux](https://video.emergeheart.info/w/tnGmYurs4vitb16EjLG7AW)
|
||||
|
||||
## Notes
|
||||
|
||||
|
@ -97,4 +98,4 @@ C'est ce qui semble ressortir [dans leur FAQ](https://bsky.social/about/blog/5-1
|
|||
> - Mutes are private, but mutelists are public lists. Your mutelist subscriptions are private.
|
||||
> - Invites and invite trees are private.
|
||||
|
||||
Je n'arrive pas encore à y voir clair sur l'approche prise par Bluesky concernant la modération. Est-ce que c'est remettre à l'utilisateur les clés de la modération (avec la charge émotionnelle et politique qui va avec) ? A suivre.
|
||||
Je n'arrive pas encore à y voir clair sur l'approche prise par Bluesky concernant la modération. Est-ce que c'est remettre à l'utilisateur les clés de la modération (avec la charge émotionnelle et politique qui va avec) ? A suivre.
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
{% for year, year_articles in articles | groupby('date.year') | reverse %}
|
||||
<h2>{{ year }}</h2>
|
||||
{% for article in year_articles %}
|
||||
<a href="{{ SITEURL }}/{{ article.url }}" id="page-title">{{ article.title}}</a>,
|
||||
<a href="{{ SITEURL }}/{{ article.url }}" id="page-title">{{ article.title}}</a>{% if not loop.last %} · {% endif %}
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
</ul>
|
||||
|
|
|
@ -63,4 +63,8 @@ CATEGORIES_DESCRIPTION = {
|
|||
"Carnet de notes",
|
||||
"Prises bien souvent en regardant une vidéo ou un article en ligne. Je les mets ici pour pouvoir les retrouver quand le besoin se fait sentir.",
|
||||
),
|
||||
"ecriture": (
|
||||
"Écriture",
|
||||
"Textes rédigés lors d'ateliers d'écriture",
|
||||
),
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue