Compare commits
7 Commits
7fab51a2f6
...
deb9a422b2
Author | SHA1 | Date | |
---|---|---|---|
deb9a422b2 | |||
c4db791044 | |||
b8824774ce | |||
8e886174c1 | |||
007b693bc1 | |||
b20ceb9036 | |||
f3d720ede6 |
|
@ -1,6 +1,5 @@
|
||||||
---
|
---
|
||||||
Title: How I use bash
|
Title: How I use bash
|
||||||
Date: 2021-06-04 06:20:00
|
|
||||||
Summary: This is how I use bash, as I presented it at « En attendant la PyCon Fr ».
|
Summary: This is how I use bash, as I presented it at « En attendant la PyCon Fr ».
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
---
|
---
|
||||||
Title: How to install any distrib on a Gandi VPS
|
Title: How to install any distrib on a Gandi VPS
|
||||||
Date: 2021-11-18 08:51:00
|
|
||||||
Summary: I needed to install BBB, which requires Ubuntu 18.0.4, but they only had Ubuntu 20.0.4...
|
Summary: I needed to install BBB, which requires Ubuntu 18.0.4, but they only had Ubuntu 20.0.4...
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
---
|
---
|
||||||
Title: HackInScience hits 10k solved exercices per month!
|
Title: HackInScience hits 10k solved exercices per month!
|
||||||
Date: 2021-06-04 18:16:00
|
|
||||||
Summary: HackInScience is my litlle side-project to teach Python at scale. Last month, ~1000 persons solved ~10k exercices on it.
|
Summary: HackInScience is my litlle side-project to teach Python at scale. Last month, ~1000 persons solved ~10k exercices on it.
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
---
|
---
|
||||||
Title: Finding a lost iPhone owner, the hard way
|
Title: Finding a lost iPhone owner, the hard way
|
||||||
Date: 2022-06-07 11:39:00
|
|
||||||
Summary: My parents found an iPhone, couldn't locate its owner. What I tried next.
|
Summary: My parents found an iPhone, couldn't locate its owner. What I tried next.
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
---
|
---
|
||||||
Title: Releasing pipe v2.0
|
Title: Releasing pipe v2.0
|
||||||
Date: 2022-05-23 09:31:00
|
|
||||||
Summary: Introducing partially parametrized pipes!
|
Summary: Introducing partially parametrized pipes!
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
89
content/blog/2023-01-mobian-black-screen.en.md
Normal file
89
content/blog/2023-01-mobian-black-screen.en.md
Normal file
|
@ -0,0 +1,89 @@
|
||||||
|
Lang: en
|
||||||
|
Slug: black-screen-at-boot-on-my-pinephone
|
||||||
|
Summary: My phone was no longer booting…
|
||||||
|
Title: Black screen at boot on my PinePhone
|
||||||
|
|
||||||
|
OK so today my [PinePhone](https://fr.wikipedia.org/wiki/PinePhone)
|
||||||
|
does no longer boot, it goes like this:
|
||||||
|
|
||||||
|
- Press power button to boot it,
|
||||||
|
- type rootfs passphrase (I use full disk encryption),
|
||||||
|
- Mobian "spash screen" for a short time,
|
||||||
|
- black screen, and that's it.
|
||||||
|
|
||||||
|
My first bet was a graphical issue due to a recent upgrade ("sweet"
|
||||||
|
memories of Ubuntu failing to start its X server after almost any
|
||||||
|
upgrade...) so I try to ssh to it first... "no route to host", damned!
|
||||||
|
It don't have its IP yet so it failed before network setup.
|
||||||
|
|
||||||
|
But it's a PinePhone, and it runs
|
||||||
|
[Mobian](https://mobian-project.org/), a Debian for mobiles, so I'm
|
||||||
|
not in the dark, let's read the boot logs first before going down the
|
||||||
|
rabbit hole of connecting a UART on the jack port to debug it over
|
||||||
|
serial:
|
||||||
|
|
||||||
|
- Press power button,
|
||||||
|
- type rootfs passphrase again,
|
||||||
|
- press a volume button to get rid of the Mobian splash to see logs
|
||||||
|
|
||||||
|
```text
|
||||||
|
The root filesystem on /dev/mapper/calamares_crypt requires a manual fsck
|
||||||
|
```
|
||||||
|
|
||||||
|
OK!
|
||||||
|
|
||||||
|
Looks easy, but without a keyboard? Let's mount the
|
||||||
|
[eMMC](https://en.wikipedia.org/wiki/MultiMediaCard#eMMC) over USB!
|
||||||
|
|
||||||
|
As my phone boots using [Tow-Boot](https://tow-boot.org/) it's easy:
|
||||||
|
|
||||||
|
- Shut it down (~8s on the power button).
|
||||||
|
- Plug it to laptop with a USB-C cable.
|
||||||
|
- Make it enter "USB Mass Storage mode" (by holding the
|
||||||
|
volume up button at startup before and during the second
|
||||||
|
vibration).
|
||||||
|
- Instantly my laptop sees it and udisks auto mounts it, gnome asks
|
||||||
|
for main partition passphrase to mount it too, nice!
|
||||||
|
- Boom, it disappears... and on `journalctl -e` I see `usb 1-5: device
|
||||||
|
descriptor read/64, error -71` ... `I/O error, dev sda` ...
|
||||||
|
|
||||||
|
At this point I think there's just two options: either my USB-C cable
|
||||||
|
was badly plugged, or my eMMC is dead. I vote for the USB-C cable
|
||||||
|
issue and try again.
|
||||||
|
|
||||||
|
- Rebooting phone in USB mass storage mode again, but this time
|
||||||
|
without giving my passphrase to avoid automount: it
|
||||||
|
needs an fsck anyway.
|
||||||
|
- I can browse `/media/mdk/boot` and see no read error in `sudo journalctl -f`.
|
||||||
|
- `sudo fdisk -l /dev/sda` sees ~30GiB and both partitions.
|
||||||
|
|
||||||
|
|
||||||
|
I use encryption so to fsck the root partition, I have to use `cryptsetup` first:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ sudo cryptsetup open /dev/sda2 mobian # it asks for my passphrase
|
||||||
|
$ file /dev/mapper/mobian # That's the unencrypted view of my partition
|
||||||
|
/dev/mapper/mobian: symbolic link to ../dm-0
|
||||||
|
$ sudo fdisk -l /dev/mapper/mobian # Just out of curiosity
|
||||||
|
Disk /dev/mapper/mobian : 28.47 GiB, 30574379008 octets, 59715584 secteurs
|
||||||
|
$ sudo fsck /dev/mapper/mobian # Running fsck manually!
|
||||||
|
fsck from util-linux 2.38.1
|
||||||
|
e2fsck 1.46.6-rc1 (12-Sep-2022)
|
||||||
|
root contains a file system with errors, check forced.
|
||||||
|
[many many errors]
|
||||||
|
$ sudo mount /dev/mapper/mobian /mnt # To check if it works
|
||||||
|
$ ls /mnt # Yeah!
|
||||||
|
bin boot dev etc home lib lost+found media mnt opt proc root run sbin srv sys tmp usr var
|
||||||
|
$ sudo umount /mnt
|
||||||
|
$ sudo cryptsetup close mobian
|
||||||
|
```
|
||||||
|
|
||||||
|
It looks OK, let's reboot the phone...
|
||||||
|
|
||||||
|
It works!!!
|
||||||
|
|
||||||
|
I know, your grandma would not be able to do fix it that way (mine
|
||||||
|
neither), but I'm still very happy to be able to fix my phone myself
|
||||||
|
when it has issues.
|
||||||
|
|
||||||
|
What would people do when a phone does no longer boot? Buy another?
|
|
@ -1,90 +1,91 @@
|
||||||
---
|
Lang: fr
|
||||||
Title: Black screen at boot on my PinePhone
|
Slug: black-screen-at-boot-on-my-pinephone
|
||||||
Date: 2023-01-13 09:33:00
|
Summary: OK, aujourd’hui mon [PinePhone](https://fr.wikipedia.org/wiki/PinePhone) ne boot plus.
|
||||||
Summary: My phone was no longer booting…
|
Title: Écran noir au démarrage de mon PinePhone
|
||||||
---
|
|
||||||
|
|
||||||
OK so today my [PinePhone](https://fr.wikipedia.org/wiki/PinePhone)
|
OK, aujourd’hui mon [PinePhone](https://fr.wikipedia.org/wiki/PinePhone)
|
||||||
does no longer boot, it goes like this:
|
ne boot plus. Ça me fait ça :
|
||||||
|
|
||||||
- Press power button to boot it,
|
- J’appuie sur le bouton pour le démarrer,
|
||||||
- type rootfs passphrase (I use full disk encryption),
|
- je lui donne la passephrase pour déchiffrer la partition,
|
||||||
- Mobian "spash screen" for a short time,
|
- J’ai le joli logo « Mobian » pendant quelques instants,
|
||||||
- black screen, and that's it.
|
- Et boom, écran noir, terminé.
|
||||||
|
|
||||||
My first bet was a graphical issue due to a recent upgrade ("sweet"
|
Je parie d’abord que c’est un problème graphique dû à une mise à jour
|
||||||
memories of Ubuntu failing to start its X server after almost any
|
récente. Ça me rappelle l’époque où j’ai cru bon de mettre une Ubuntu
|
||||||
upgrade...) so I try to ssh to it first... "no route to host", damned!
|
sur la machine de ma maman : à chaque mise à jour le serveur X ne
|
||||||
It don't have its IP yet so it failed before network setup.
|
démarrait plus. Vous vous souvenez de la blague « C’est quoi un Ubuntu
|
||||||
|
Server ? C’est un Ubuntu Desktop avec le serveur X qui ne démarre
|
||||||
|
pas ! » ?
|
||||||
|
|
||||||
But it's a PinePhone, and it runs
|
Si mon pari est bon, j’ai juste à me `ssh`… « `no route to host` », damned !
|
||||||
[Mobian](https://mobian-project.org/), a Debian for mobiles, so I'm
|
|
||||||
not in the dark, let's read the boot logs first before going down the
|
|
||||||
rabbit hole of connecting a UART on the jack port to debug it over
|
|
||||||
serial:
|
|
||||||
|
|
||||||
- Press power button,
|
Donc il plante **avant** d’avoir configuré son interface réseau.
|
||||||
- type rootfs passphrase again,
|
|
||||||
- press a volume button to get rid of the Mobian splash to see logs
|
Mais c’est un PinePhone, avec [Mobian](https://mobian-project.org/)
|
||||||
|
(une Debian avec deux-trois patch pour mobiles), donc je sais que je
|
||||||
|
vais m’en sortir, commencons simplement par lire les logs avant de
|
||||||
|
suivre le lapin blanc et de plonger au fond du terrier de
|
||||||
|
l’UART-over-jack…
|
||||||
|
|
||||||
|
- J’appuie sur le bouton « power » pour le démarrer,
|
||||||
|
- je lui donne sa passephrase à nouveau,
|
||||||
|
- et j’appuie sur un bouton de « volume » : comme sur une Debian, l’appui d’une touche chasse le « splash screen » et laisse lire les logs :
|
||||||
|
|
||||||
```text
|
```text
|
||||||
The root filesystem on /dev/mapper/calamares_crypt requires a manual fsck
|
The root filesystem on /dev/mapper/calamares_crypt requires a manual fsck
|
||||||
```
|
```
|
||||||
|
|
||||||
OK!
|
OK ! Facile. Mais sans clavier ?
|
||||||
|
|
||||||
Looks easy, but without a keyboard? Let's mount the
|
C’est le moment de monter l’[eMMC](https://en.wikipedia.org/wiki/MultiMediaCard#eMMC) via USB !
|
||||||
[eMMC](https://en.wikipedia.org/wiki/MultiMediaCard#eMMC) over USB!
|
|
||||||
|
|
||||||
As my phone boots using [Tow-Boot](https://tow-boot.org/) it's easy:
|
Mon téléphone démarre avec [Tow-Boot](https://tow-boot.org/), exposer la MMC via USB c’est facile :
|
||||||
|
|
||||||
- Shut it down (~8s on the power button).
|
- Je l’éteins (~8s sur le bouton power).
|
||||||
- Plug it to laptop with a USB-C cable.
|
- Je le branche à mon ordinateur portable avec un câble USB-C.
|
||||||
- Make it enter "USB Mass Storage mode" (by holding the
|
- Je le démarre en mode « USB Mass Storage » (en maintenant « volume up » enfoncé au démarrage jusqu’à la 2 vibration).
|
||||||
volume up button at startup before and during the second
|
- Instantanément mon ordinateur portable détecte un nouveau périphérique USB, `udisks` veut le monter, `Gnome` me demande la passephrase, `udisks` monte les deux partitions : que j’aime quand tout roule !
|
||||||
vibration).
|
- Boom, tout disparaît. Un coup d’œil à `journalctl -e` : `usb 1-5: device
|
||||||
- Instantly my laptop sees it and udisks auto mounts it, gnome asks
|
descriptor read/64, error -71` ... `I/O error, dev sda`…
|
||||||
for main partition passphrase to mount it too, nice!
|
|
||||||
- Boom, it disappears... and on `journalctl -e` I see `usb 1-5: device
|
|
||||||
descriptor read/64, error -71` ... `I/O error, dev sda` ...
|
|
||||||
|
|
||||||
At this point I think there's just two options: either my USB-C cable
|
Donc là soit mon câble USB-C est mal branché ou mal en point, soit ma
|
||||||
was badly plugged, or my eMMC is dead. I vote for the USB-C cable
|
MMC est morte. Je vais parier pour le câble (c’est plus facile à résoudre).
|
||||||
issue and try again.
|
|
||||||
|
|
||||||
- Rebooting phone in USB mass storage mode again, but this time
|
- Redémarrage du téléphonne en mode « USB Mass Storage »
|
||||||
without giving my passphrase to avoid automount: it
|
- Je ne donne pas la passephrase à Gnome cette fois, de toutes façons on a besoin de lui passer un `fsck`, pas de le monter.
|
||||||
needs an fsck anyway.
|
- Un petit `ls` dans `/media/mdk/boot`, pas de `read error` dans `sudo journalctl -f`, rassurant.
|
||||||
- I can browse `/media/mdk/boot` and see no read error in `sudo journalctl -f`.
|
- `sudo fdisk -l /dev/sda` m’annonce ~30GiB et les deux paritions, rassurant.
|
||||||
- `sudo fdisk -l /dev/sda` sees ~30GiB and both partitions.
|
|
||||||
|
|
||||||
|
|
||||||
I use encryption so to fsck the root partition, I have to use `cryptsetup` first:
|
Vu que la partition est chiffrée j’ai besoin de la déchiffrer (sans la
|
||||||
|
monter) **avant** de passer le **fsck**, à coup de `cryptsetup` :
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ sudo cryptsetup open /dev/sda2 mobian # it asks for my passphrase
|
$ sudo cryptsetup open /dev/sda2 mobian # ça me demande ma passphrase
|
||||||
$ file /dev/mapper/mobian # That's the unencrypted view of my partition
|
$ file /dev/mapper/mobian # Ça c’est la « vue » déchiffrée de la partition
|
||||||
/dev/mapper/mobian: symbolic link to ../dm-0
|
/dev/mapper/mobian: symbolic link to ../dm-0
|
||||||
$ sudo fdisk -l /dev/mapper/mobian # Just out of curiosity
|
$ sudo fdisk -l /dev/mapper/mobian # Je suis curieux, et j’ai besoin d’être rassuré
|
||||||
Disk /dev/mapper/mobian : 28.47 GiB, 30574379008 octets, 59715584 secteurs
|
Disk /dev/mapper/mobian : 28.47 GiB, 30574379008 octets, 59715584 secteurs
|
||||||
$ sudo fsck /dev/mapper/mobian # Running fsck manually!
|
$ sudo fsck /dev/mapper/mobian # On m’a dit d’exécuter `fsck` manuellement, je le fais.
|
||||||
fsck from util-linux 2.38.1
|
fsck from util-linux 2.38.1
|
||||||
e2fsck 1.46.6-rc1 (12-Sep-2022)
|
e2fsck 1.46.6-rc1 (12-Sep-2022)
|
||||||
root contains a file system with errors, check forced.
|
root contains a file system with errors, check forced.
|
||||||
[many many errors]
|
[plein plein plein d’erreurs]
|
||||||
$ sudo mount /dev/mapper/mobian /mnt # To check if it works
|
$ sudo mount /dev/mapper/mobian /mnt # Juste pour me rassurer
|
||||||
$ ls /mnt # Yeah!
|
$ ls /mnt # Youpi !
|
||||||
bin boot dev etc home lib lost+found media mnt opt proc root run sbin srv sys tmp usr var
|
bin boot dev etc home lib lost+found media mnt opt proc root run sbin srv sys tmp usr var
|
||||||
$ sudo umount /mnt
|
$ sudo umount /mnt
|
||||||
$ sudo cryptsetup close mobian
|
$ sudo cryptsetup close mobian
|
||||||
```
|
```
|
||||||
|
|
||||||
It looks OK, let's reboot the phone...
|
Ça me semble bon, je reboot le téléphone…
|
||||||
|
|
||||||
It works!!!
|
Ça marche !!!
|
||||||
|
|
||||||
I know, your grandma would not be able to do fix it that way (mine
|
Je sais, je sais, ta grand-mère n’aurait pas sû réparer le sien (ma
|
||||||
neither), but I'm still very happy to be able to fix my phone myself
|
grand-mère non plus), mais je reste très satisfait d’être capable de
|
||||||
when it has issues.
|
réparer le mien moi-même : c’est une bonne première étape.
|
||||||
|
|
||||||
What would people do when a phone does no longer boot? Buy another?
|
Si j’avais eu un téléphonne d’un GAFA, quelles auraient été mes
|
||||||
|
solutions ? En acheter un autre.
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
---
|
---
|
||||||
Title: A JustInTime class
|
Title: A JustInTime class
|
||||||
Date: 2008-08-30 00:10:55
|
|
||||||
---
|
---
|
||||||
|
|
||||||
I discovered in my code a redundant pattern :
|
I discovered in my code a redundant pattern :
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
---
|
---
|
||||||
Title: ashttp: vt100 screen scraping exported over HTTP
|
Title: ashttp: vt100 screen scraping exported over HTTP
|
||||||
Date: 2011-08-27 15:08:21
|
|
||||||
---
|
---
|
||||||
|
|
||||||
Originally written for
|
Originally written for
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
|
Lang: en
|
||||||
Title: Python coroutines with async and await
|
Title: Python coroutines with async and await
|
||||||
Date: 2016-06-05
|
|
||||||
|
|
||||||
This is a short introduction of the basic vocabulary and knowledge
|
This is a short introduction of the basic vocabulary and knowledge
|
||||||
needed to start with `async` and `await`, we'll go from "scratch", but
|
needed to start with `async` and `await`, we'll go from "scratch", but
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
Title: Atelier de traduction de la doc de Python
|
Title: Atelier de traduction de la doc de Python
|
||||||
Date: 2017-12-09
|
|
||||||
|
|
||||||
C'est parti, j'ai le GO de la [PSF](https://www.python.org/psf/) et de
|
C'est parti, j'ai le GO de la [PSF](https://www.python.org/psf/) et de
|
||||||
[NUMA Paris](https://paris.numa.co/), le `9 janvier 2018` on va faire
|
[NUMA Paris](https://paris.numa.co/), le `9 janvier 2018` on va faire
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
Title: Automating GNU screen startup
|
Title: Automating GNU screen startup
|
||||||
Date: 2011-11-18 00:13:58
|
|
||||||
|
|
||||||
At work I use GNU screen with one window per server (ssh connection),
|
At work I use GNU screen with one window per server (ssh connection),
|
||||||
and when I loose my screen, it takes minutes to rebuild the naming and
|
and when I loose my screen, it takes minutes to rebuild the naming and
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
Title: [Bashism] How to generate random number without $RANDOM ?
|
Title: [Bashism] How to generate random number without $RANDOM ?
|
||||||
Date: 2011-04-07 14:00:55
|
|
||||||
|
|
||||||
There is a common bashism, that is to use `$RANDOM`. Typically you'll
|
There is a common bashism, that is to use `$RANDOM`. Typically you'll
|
||||||
have to remove bashism while rewriting your scripts for dash or sh.
|
have to remove bashism while rewriting your scripts for dash or sh.
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
Title: C# Using alias directives
|
Title: C# Using alias directives
|
||||||
Date: 2009-03-25 11:49:50
|
|
||||||
|
|
||||||
Just found in section 9.4.1 of the C# language specification: The
|
Just found in section 9.4.1 of the C# language specification: The
|
||||||
`using` keyword can be used to alias a namespace or a type name:
|
`using` keyword can be used to alias a namespace or a type name:
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
Title: How to check if a string is valid utf-8
|
Title: How to check if a string is valid utf-8
|
||||||
Date: 2012-05-17 15:09:44
|
|
||||||
|
|
||||||
Every day (at least) I'm facing a problem: how to check if a string is
|
Every day (at least) I'm facing a problem: how to check if a string is
|
||||||
valid in utf-8 ? So I wrote [a little C program, that I put on my
|
valid in utf-8 ? So I wrote [a little C program, that I put on my
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
Title: Cisco CheatSheet
|
Title: Cisco CheatSheet
|
||||||
Date: 2008-04-03
|
|
||||||
|
|
||||||
# Misc
|
# Misc
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
Title: Combinatory logic from scratch
|
Title: Combinatory logic from scratch
|
||||||
Date: 2008-11-28 01:56:32
|
|
||||||
|
|
||||||
Cause it's sooooo sexy, let's speak about Combinatory Logic!
|
Cause it's sooooo sexy, let's speak about Combinatory Logic!
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
Title: Compose Key vs Dead Key
|
Title: Compose Key vs Dead Key
|
||||||
Date: 2017-07-12
|
|
||||||
|
|
||||||
L'AFNOR à lancé autour de juin 2017 un appel à commentaires à propos
|
L'AFNOR à lancé autour de juin 2017 un appel à commentaires à propos
|
||||||
de [la normalisation du clavier
|
de [la normalisation du clavier
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
Title: Covariance and Contravariance in C#3
|
Title: Covariance and Contravariance in C#3
|
||||||
Date: 2009-03-09 21:19:51
|
|
||||||
|
|
||||||
A short introduction to Covariance and Contravariance in *C# 3* preparing
|
A short introduction to Covariance and Contravariance in *C# 3* preparing
|
||||||
you to an article about that in *C# 4*. So what is covariance?
|
you to an article about that in *C# 4*. So what is covariance?
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
Title: echo and backslash-escaped caracters / new lines: how to write portable scripts ?
|
Title: echo and backslash-escaped caracters / new lines: how to write portable scripts ?
|
||||||
Date: 2011-04-08 13:59:45
|
|
||||||
|
|
||||||
While writing shell scripts you are using a lot of `echo` but did you
|
While writing shell scripts you are using a lot of `echo` but did you
|
||||||
think about portability of this simple statement? Can you say what will
|
think about portability of this simple statement? Can you say what will
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
Title: Emacs: replace tabs with spaces
|
Title: Emacs: replace tabs with spaces
|
||||||
Date: 2011-05-06 18:27:59
|
|
||||||
|
|
||||||
When you want to replace tab with spaces or vice versa don't use `M-%`
|
When you want to replace tab with spaces or vice versa don't use `M-%`
|
||||||
*(query-replace)* but `M-x tabify` or `M-x untabify`. They work on the
|
*(query-replace)* but `M-x tabify` or `M-x untabify`. They work on the
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
Title: emacs: standard input is not a TTY
|
Title: emacs: standard input is not a TTY
|
||||||
Date: 2011-12-11 13:54:02
|
|
||||||
|
|
||||||
Did you ever tried something like :
|
Did you ever tried something like :
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
Title: emacs: Highlighting errors for c, python, and other languages
|
Title: emacs: Highlighting errors for c, python, and other languages
|
||||||
Date: 2011-06-11 13:54:12
|
|
||||||
|
|
||||||
|
|
||||||
**This is a deprecated article about flymake, you should check for
|
**This is a deprecated article about flymake, you should check for
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
Title: Numeric arguments in emacs
|
Title: Numeric arguments in emacs
|
||||||
Date: 2011-05-02 15:47:31
|
|
||||||
|
|
||||||
I'm starting an 'emacs trick of the day' sequence with:
|
I'm starting an 'emacs trick of the day' sequence with:
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
Title: Searching and replacing in emacs
|
Title: Searching and replacing in emacs
|
||||||
Date: 2011-05-03 19:16:16
|
|
||||||
|
|
||||||
Day two of my serie about emacs, about searching and replacing.
|
Day two of my serie about emacs, about searching and replacing.
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
Title: Exclude directories from recursive grep
|
Title: Exclude directories from recursive grep
|
||||||
Date: 2008-11-16 16:20:13
|
|
||||||
|
|
||||||
How often are you using grep in subversionned folders like that:
|
How often are you using grep in subversionned folders like that:
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
---
|
---
|
||||||
Title: How APT does its fancy progress bar
|
Title: How APT does its fancy progress bar
|
||||||
Date: 2021-10-13 10:12:00
|
|
||||||
Summary: It uses good old VT100 instructions.
|
Summary: It uses good old VT100 instructions.
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
Title: Howto invoke an event via reflection
|
Title: Howto invoke an event via reflection
|
||||||
Date: 2008-08-29 23:14:53
|
|
||||||
|
|
||||||
|
|
||||||
Why this article ? Because of this note found on the MSDN's `EventInfo`
|
Why this article ? Because of this note found on the MSDN's `EventInfo`
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
Title: Integrating google bookmarks in google chrome
|
Title: Integrating google bookmarks in google chrome
|
||||||
Date: 2009-04-16 17:56:18
|
|
||||||
|
|
||||||
|
|
||||||
As every developer, you have 42 computers, 8 browsers, and spend a lot
|
As every developer, you have 42 computers, 8 browsers, and spend a lot
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
Title: Javascript Foncteur
|
Title: Javascript Foncteur
|
||||||
Date: 2008-05-08 12:43:30
|
|
||||||
|
|
||||||
|
|
||||||
I just discovered, this morning, how to create a Visitor in Javascript:
|
I just discovered, this morning, how to create a Visitor in Javascript:
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
Title: Lazy Loading in php with spl_autload
|
Title: Lazy Loading in php with spl_autload
|
||||||
Date: 2008-11-16 20:40:44
|
|
||||||
|
|
||||||
Today, a very short post about the lazy loading in PHP: `spl_autoload`.
|
Today, a very short post about the lazy loading in PHP: `spl_autoload`.
|
||||||
I'll not expose everything about it here, cause it's already done here:
|
I'll not expose everything about it here, cause it's already done here:
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
Title: nfsmount: rpc failed: 2
|
Title: nfsmount: rpc failed: 2
|
||||||
Date: 2011-04-18 14:45:03
|
|
||||||
|
|
||||||
|
|
||||||
For those, here on the internet, asking themselves what is this fscking
|
For those, here on the internet, asking themselves what is this fscking
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
Title: Pipe: Infix syntax for Python
|
Title: Pipe: Infix syntax for Python
|
||||||
Date: 2011-03-28 20:18:24
|
|
||||||
|
|
||||||
Pipe is a Python module enabling infix syntax in Python. For those
|
Pipe is a Python module enabling infix syntax in Python. For those
|
||||||
asking "Why ?" let's take an example: Compare the readability of the
|
asking "Why ?" let's take an example: Compare the readability of the
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
Title: Post data lost on 301 Moved Permanently
|
Title: Post data lost on 301 Moved Permanently
|
||||||
Date: 2009-05-15 12:50:05
|
|
||||||
|
|
||||||
What the hell with 301 Moved Permanently HTTP header!? I'll take an
|
What the hell with 301 Moved Permanently HTTP header!? I'll take an
|
||||||
exemple to explain my ugly problem, take, a (very ugly cause it's PHP)
|
exemple to explain my ugly problem, take, a (very ugly cause it's PHP)
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
Title: La PyCon Fr 2018 approche !
|
Title: La PyCon Fr 2018 approche !
|
||||||
Date: 2018-06-10
|
|
||||||
|
|
||||||
La [PyCON Fr 2018](https://www.pycon.fr/2018/) c'est dans 4 mois, mine
|
La [PyCON Fr 2018](https://www.pycon.fr/2018/) c'est dans 4 mois, mine
|
||||||
de rien c'est pas si loin, c'est le moment de l'ajouter sur son
|
de rien c'est pas si loin, c'est le moment de l'ajouter sur son
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
Title: Python Documentation Translation
|
Title: Python Documentation Translation
|
||||||
Date: 2017-05-29
|
|
||||||
|
|
||||||
This is an overview of what is done, what we're doing, and what's
|
This is an overview of what is done, what we're doing, and what's
|
||||||
needs work about the translation of Python documentation.
|
needs work about the translation of Python documentation.
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
Title: Python: Introducing ppipe : Parallel Pipe
|
Title: Python: Introducing ppipe : Parallel Pipe
|
||||||
Date: 2011-04-15 14:07:47
|
|
||||||
|
|
||||||
> /!\ this was highly experimental code written in 2011.
|
> /!\ this was highly experimental code written in 2011.
|
||||||
> Today you should _NOT_ use it, just look at it if the subject amuses you.
|
> Today you should _NOT_ use it, just look at it if the subject amuses you.
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
Title: Python Translation Workshop 3
|
Title: Python Translation Workshop 3
|
||||||
Date: 2018-09-12
|
|
||||||
|
|
||||||
I'm organizing a 3rd workshop to translate the Python Documentation on 2018-09-20!!!
|
I'm organizing a 3rd workshop to translate the Python Documentation on 2018-09-20!!!
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
Title: Python: Consulting PEPs from command line, while being offline
|
Title: Python: Consulting PEPs from command line, while being offline
|
||||||
Date: 2011-04-13 14:20:11
|
|
||||||
|
|
||||||
One day I wished I could read PEPs in the tube on my laptop... so I
|
One day I wished I could read PEPs in the tube on my laptop... so I
|
||||||
searched for a convenient way to do so, and I didn't found ... So I
|
searched for a convenient way to do so, and I didn't found ... So I
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
---
|
---
|
||||||
Title: Reversing a coffee machine key
|
Title: Reversing a coffee machine key
|
||||||
Date: 2021-05-07 12:12:55
|
|
||||||
Summary: At $DAYJOB, a long time ago, we had big a coffee machine allowing us to store money in NFC keys…
|
Summary: At $DAYJOB, a long time ago, we had big a coffee machine allowing us to store money in NFC keys…
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
Title: squid: (101) Network is unreachable when DNS returns IPv6
|
Title: squid: (101) Network is unreachable when DNS returns IPv6
|
||||||
Date: 2011-06-24 17:32:38
|
|
||||||
|
|
||||||
If you have a Squid proxy configured on a machine that have no IPv6
|
If you have a Squid proxy configured on a machine that have no IPv6
|
||||||
connectivity, and try to reach an IPv6 compatible site, you squid will
|
connectivity, and try to reach an IPv6 compatible site, you squid will
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
Title: The art of Events
|
Title: The art of Events
|
||||||
Date: 2008-08-29 23:32:55
|
|
||||||
|
|
||||||
The art of using events to build more independent classes. /\* Found a
|
The art of using events to build more independent classes. /\* Found a
|
||||||
better example \*/ Imagine you have a class A and a class B. A builds B,
|
better example \*/ Imagine you have a class A and a class B. A builds B,
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
---
|
---
|
||||||
Title: The ?? operator aka the Null Coalescing Operator
|
Title: The ?? operator aka the Null Coalescing Operator
|
||||||
Date: 2008-11-23 18:01:40
|
|
||||||
---
|
---
|
||||||
|
|
||||||
If are familiar to the use of ternary operators, you must have
|
If are familiar to the use of ternary operators, you must have
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
---
|
---
|
||||||
Title: YAUIB : Yet another useless IRC Bot !
|
Title: YAUIB : Yet another useless IRC Bot !
|
||||||
Date: 2011-03-27 23:40:58
|
|
||||||
---
|
---
|
||||||
|
|
||||||
After 2 years of... non blogging... I'm back! This time I stopped C\#
|
After 2 years of... non blogging... I'm back! This time I stopped C\#
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
Title: About Julien
|
|
||||||
Date: 2008-08-14 19:25:52
|
|
||||||
status: hidden
|
|
||||||
|
|
||||||
Just check out [mdk.fr](mdk.fr)!
|
|
|
@ -1,5 +1,4 @@
|
||||||
Title: Bookmarks
|
Title: Bookmarks
|
||||||
Date: 2021-05-05 15:21:00
|
|
||||||
|
|
||||||
|
|
||||||
# Internet & HTTP
|
# Internet & HTTP
|
||||||
|
|
10
content/pages/formations.en.md
Normal file
10
content/pages/formations.en.md
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
Title: Trainings
|
||||||
|
Slug: formations
|
||||||
|
Lang: en
|
||||||
|
|
||||||
|
Python developer since 2009, Python trainer since 2015, I teach the following trainings:
|
||||||
|
|
||||||
|
- [Python introduction]({filename}/pages/python-initiation.md)
|
||||||
|
- [Advanced Python]({filename}/pages/python-avancé.md)
|
||||||
|
|
||||||
|
Interested? Shoot me an email: [julien@palard.fr](mailto:julien@palard.fr).
|
|
@ -1,5 +1,6 @@
|
||||||
Title: Formations
|
Title: Formations
|
||||||
Date: 2023-01-17 15:41:00
|
Slug: formations
|
||||||
|
Lang: fr
|
||||||
|
|
||||||
Développeur Python depuis 2009, formateur Python depuis 2015, je
|
Développeur Python depuis 2009, formateur Python depuis 2015, je
|
||||||
propose ces formations :
|
propose ces formations :
|
||||||
|
@ -7,4 +8,4 @@ propose ces formations :
|
||||||
- [Python initiation]({filename}/pages/python-initiation.md)
|
- [Python initiation]({filename}/pages/python-initiation.md)
|
||||||
- [Python avancé]({filename}/pages/python-avancé.md)
|
- [Python avancé]({filename}/pages/python-avancé.md)
|
||||||
|
|
||||||
Intéressés ? Contactez-moi par email : julien at palard.fr.
|
Intéressés ? Contactez-moi par email : [julien@palard.fr](mailto:julien@palard.fr).
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
Title: GPG
|
Title: GPG
|
||||||
Date: 2021-04-27 21:26:00
|
|
||||||
|
|
||||||
# My GPG keys
|
# My GPG keys
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
Title: Julien Palard
|
Title: Julien Palard
|
||||||
Date: 2016-05-28
|
|
||||||
description: Julien Palard - mdk.fr
|
description: Julien Palard - mdk.fr
|
||||||
status: hidden
|
status: hidden
|
||||||
lang: en
|
lang: en
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
Title: Julien Palard
|
Title: Julien Palard
|
||||||
Date: 2016-05-28
|
|
||||||
description: Julien Palard - mdk.fr
|
description: Julien Palard - mdk.fr
|
||||||
status: hidden
|
status: hidden
|
||||||
lang: fr
|
lang: fr
|
||||||
|
|
57
content/pages/python-avancé.en.md
Normal file
57
content/pages/python-avancé.en.md
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
Lang: en
|
||||||
|
Slug: python-avance
|
||||||
|
Title: Advanced Python
|
||||||
|
|
||||||
|
That's the last of my two Python trainings. While the [introduction
|
||||||
|
training]({filename}/pages/python-initiation.md) covers using classes
|
||||||
|
and libraries to create simple programs, this training focuses on the
|
||||||
|
art of creating classes and libraries to build reusable chunks in
|
||||||
|
arbitrary complex software.
|
||||||
|
|
||||||
|
|
||||||
|
## Goals
|
||||||
|
|
||||||
|
At the end of this training, one is able to produce *readable*,
|
||||||
|
*maintainable*, and *tested* code on any kind of project.
|
||||||
|
|
||||||
|
Focus is set on sharing and reusing code:
|
||||||
|
|
||||||
|
- Creating libraries (modules, packages).
|
||||||
|
- Packaging and distributing libraries.
|
||||||
|
- Managing dependencies in libraries and in projects.
|
||||||
|
- Tests and documentation.
|
||||||
|
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
The pre-requisite to follow this training is either to have followed
|
||||||
|
the [Python Introduction]({filename}/pages/python-initiation.md) one,
|
||||||
|
or have an equivalent level, that is: be able to read and modify
|
||||||
|
Python code, be able to write Python code to solve a given problem
|
||||||
|
from scratch.
|
||||||
|
|
||||||
|
## Content
|
||||||
|
|
||||||
|
- Python protocols (iteration protocol, any "dunder", …).
|
||||||
|
- Classes and their instances (where we speak about the MRO and `super()`).
|
||||||
|
- The descriptor protocol.
|
||||||
|
- The *garbage collector*.
|
||||||
|
- IEEE 754 *floats*, knowing their limits.
|
||||||
|
- Create, raise, and handle exception. `try`'s `else` and `finally`.
|
||||||
|
- Context managers.
|
||||||
|
- Decorators.
|
||||||
|
- List comprehensions.
|
||||||
|
- The Walrus Operator (`:=`).
|
||||||
|
- String encodings.
|
||||||
|
- Packaging using `pyproject.toml`, `python -m build`, `twine`, …
|
||||||
|
- Asynchronous Python with `async` and `await`.
|
||||||
|
|
||||||
|
|
||||||
|
## Duration
|
||||||
|
|
||||||
|
This training best spam over five days, but I'm acustomed to give a 3 day version of it too.
|
||||||
|
|
||||||
|
|
||||||
|
## Contact
|
||||||
|
|
||||||
|
To know more, please shoot me an email at [julien@palard.fr](mailto:julien@palard.fr).
|
|
@ -1,5 +1,6 @@
|
||||||
|
Lang: fr
|
||||||
|
Slug: python-avance
|
||||||
Title: Python avancé
|
Title: Python avancé
|
||||||
Date: 2023-01-17 15:41:00
|
|
||||||
|
|
||||||
C’est la seconde de mes deux formations Python. Alors que la
|
C’est la seconde de mes deux formations Python. Alors que la
|
||||||
[formation *initiation*]({filename}/pages/python-initiation.md)
|
[formation *initiation*]({filename}/pages/python-initiation.md)
|
||||||
|
|
42
content/pages/python-initiation.en.md
Normal file
42
content/pages/python-initiation.en.md
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
Lang: en
|
||||||
|
Slug: python-initiation
|
||||||
|
Title: Python introduction
|
||||||
|
|
||||||
|
This is the first one of my two Python trainings, it has no prerequisites.
|
||||||
|
|
||||||
|
|
||||||
|
## Goals
|
||||||
|
|
||||||
|
At the end for this trainings, trainees are know the Python basics and
|
||||||
|
are able to write simple software, maintain it, and modify existing
|
||||||
|
software.
|
||||||
|
|
||||||
|
- Implement a simple program resolving a well defined task.
|
||||||
|
- Read, understand, and modify Python code written by someone else.
|
||||||
|
- Redact tests.
|
||||||
|
|
||||||
|
|
||||||
|
## Content
|
||||||
|
|
||||||
|
- Builtin types (`bool`, `int`, `float`, `str`, …)
|
||||||
|
- Operators
|
||||||
|
- Variables
|
||||||
|
- Functions
|
||||||
|
- Instructions (`for`, `if`, `while`, …)
|
||||||
|
- Methods
|
||||||
|
- List comprehensions
|
||||||
|
- Slices
|
||||||
|
- Classes
|
||||||
|
- `pip` and `venvs`
|
||||||
|
- Packaging Python
|
||||||
|
- Good habits
|
||||||
|
|
||||||
|
|
||||||
|
## Duration
|
||||||
|
|
||||||
|
This training spans on three days, ideally.
|
||||||
|
|
||||||
|
|
||||||
|
## Contact
|
||||||
|
|
||||||
|
To know more, please shoot me an email at [julien@palard.fr](mailto:julien@palard.fr).
|
|
@ -1,5 +1,6 @@
|
||||||
Title: Python initiation
|
Title: Python initiation
|
||||||
Date: 2023-01-17 15:41:00
|
Slug: python-initiation
|
||||||
|
Lang: fr
|
||||||
|
|
||||||
C’est la première des deux formations Python que je propose,
|
C’est la première des deux formations Python que je propose,
|
||||||
accessible sans prérequis.
|
accessible sans prérequis.
|
||||||
|
|
55
content/pages/talks.en.md
Normal file
55
content/pages/talks.en.md
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
Title: Talks
|
||||||
|
Slug: talks
|
||||||
|
Lang: en
|
||||||
|
|
||||||
|
- 2022-11-26:
|
||||||
|
[Campus du Libre](https://www.campus-du-libre.org/): HackInScience demo
|
||||||
|
[video (fr)](https://bbb.afpy.org/playback/presentation/2.3/62dfb87e2dfcc5d2947bceb86a2324d10dfdd55b-1669457837244),
|
||||||
|
[slides (fr)](https://mdk.fr/hkis-au-campus-du-libre).
|
||||||
|
|
||||||
|
- 2021-04-15:
|
||||||
|
[AFPy](https://discuss.afpy.org/t/en-attendant-la-pyconfr-du-15-avril-2021/222/3): Bash — tips and tricks
|
||||||
|
[video (fr)](https://bbb.afpy.org/playback/presentation/2.0/playback.html?meetingId=fb67608c847ace007f60e5b9fa6917ff7040b495-1618502029253).
|
||||||
|
|
||||||
|
- 2021-01-13:
|
||||||
|
[AFPy](https://discuss.afpy.org/t/calendrier-de-lafpy/64/12): Packaging without setup.py
|
||||||
|
[slides (fr)](https://julienpalard.frama.io/atelier-packaging/).
|
||||||
|
|
||||||
|
- 2020-12-09:
|
||||||
|
[AFPy](https://discuss.afpy.org/t/calendrier-de-lafpy/64/12): Python Performance Workshop
|
||||||
|
[slides (fr)](https://julienpalard.frama.io/atelier-perf/perf.html),
|
||||||
|
[video (fr)](https://pyvideo.org/en-attendant-la-pyconfr-2020-2021/performances-de-python.html).
|
||||||
|
|
||||||
|
- 2019-06-13:
|
||||||
|
[Write The Docs Paris](https://www.meetup.com/Write-the-Docs-Paris/): Translating the Python documentation
|
||||||
|
[slides](https://julienpalard.frama.io/write-the-docs-paris-19/),
|
||||||
|
[video (fr)](https://mzl.la/write-the-docs-2019-06-13).
|
||||||
|
|
||||||
|
- 2019-05-22:
|
||||||
|
[Paris.py #19](https://www.meetup.com/Paris-py-Python-Django-friends/events/260875730/):
|
||||||
|
Feedback about 2019 US PyCon
|
||||||
|
[slides (fr)](https://julienpalard.frama.io/paris.py-19/).
|
||||||
|
|
||||||
|
- 2018-12-18:
|
||||||
|
[Paris.py #16](https://www.meetup.com/Paris-py-Python-Django-friends/events/250063967/):
|
||||||
|
hackinscience.org: How we use Python to teach Python.
|
||||||
|
[slides](https://hackinscience.frama.io/paris.py-16/).
|
||||||
|
|
||||||
|
- 2018-10-06:
|
||||||
|
[PyCon FR 2018](https://www.pycon.fr/2018/):
|
||||||
|
The emergence of consensus in the Python community.
|
||||||
|
[video](https://www.youtube.com/watch?v=Zb-LhOLEPg8)
|
||||||
|
|
||||||
|
- 2018-01-14:
|
||||||
|
[Paris.py #14](https://www.meetup.com/Paris-py-Python-Django-friends/events/245495073/):
|
||||||
|
`async` et `await` sans asyncio.
|
||||||
|
[slides](https://mdk.fr/asyncio/), [video (fr)](https://www.youtube.com/watch?v=_LpJ7X8hY-Y).
|
||||||
|
|
||||||
|
- 2017-04-06:
|
||||||
|
[Paris.py #13](https://www.meetup.com/Paris-py-Python-Django-friends/events/238318089/):
|
||||||
|
Traduction de la documentation de Python en français.
|
||||||
|
|
||||||
|
- 2016-10-16:
|
||||||
|
[PyCon FR 2016](https://www.pycon.fr/2016/pages/programme.html#Traduction%20de%20la%20doc%20de%20Python%20et%20l'internationalisation):
|
||||||
|
La traduction de la documentation de Python et l'internationalisation.
|
||||||
|
[video (fr)](https://www.pycon.fr/2016/videos/traduction-de-la-doc-de-python-et-linternationalisation.html).
|
|
@ -1,8 +1,6 @@
|
||||||
Title: Talks
|
Title: Conférences
|
||||||
Date: 2008-08-14 19:25:52
|
Slug: talks
|
||||||
status: hidden
|
Lang: fr
|
||||||
|
|
||||||
## Past
|
|
||||||
|
|
||||||
- 2022-11-26:
|
- 2022-11-26:
|
||||||
[Campus du Libre](https://www.campus-du-libre.org/): Démo d'HackInScience
|
[Campus du Libre](https://www.campus-du-libre.org/): Démo d'HackInScience
|
||||||
|
@ -25,7 +23,7 @@ status: hidden
|
||||||
- 2019-06-13:
|
- 2019-06-13:
|
||||||
[Write The Docs Paris](https://www.meetup.com/Write-the-Docs-Paris/): La traduction de la
|
[Write The Docs Paris](https://www.meetup.com/Write-the-Docs-Paris/): La traduction de la
|
||||||
documentation de Python.
|
documentation de Python.
|
||||||
[slides](https://julienpalard.frama.io/write-the-docs-paris-19/),
|
[slides (en)](https://julienpalard.frama.io/write-the-docs-paris-19/),
|
||||||
[video](https://mzl.la/write-the-docs-2019-06-13).
|
[video](https://mzl.la/write-the-docs-2019-06-13).
|
||||||
|
|
||||||
- 2019-05-22:
|
- 2019-05-22:
|
||||||
|
@ -35,18 +33,18 @@ status: hidden
|
||||||
|
|
||||||
- 2018-12-18:
|
- 2018-12-18:
|
||||||
[Paris.py #16](https://www.meetup.com/Paris-py-Python-Django-friends/events/250063967/):
|
[Paris.py #16](https://www.meetup.com/Paris-py-Python-Django-friends/events/250063967/):
|
||||||
hackinscience.org: Comment on utilise Python pour enseigner Python.
|
hackinscience.org: Comment enseigner Python avec Python ?
|
||||||
[slides](https://hackinscience.frama.io/paris.py-16/).
|
[slides (en)](https://hackinscience.frama.io/paris.py-16/).
|
||||||
|
|
||||||
- 2018-10-06:
|
- 2018-10-06:
|
||||||
[PyCon FR 2018](https://www.pycon.fr/2018/):
|
[PyCon FR 2018](https://www.pycon.fr/2018/):
|
||||||
The emergence of consensus in the Python community.
|
The emergence of consensus in the Python community.
|
||||||
[video](https://www.youtube.com/watch?v=Zb-LhOLEPg8)
|
[video (en)](https://www.youtube.com/watch?v=Zb-LhOLEPg8)
|
||||||
|
|
||||||
- 2018-01-14:
|
- 2018-01-14:
|
||||||
[Paris.py #14](https://www.meetup.com/Paris-py-Python-Django-friends/events/245495073/):
|
[Paris.py #14](https://www.meetup.com/Paris-py-Python-Django-friends/events/245495073/):
|
||||||
`async` et `await` sans asyncio.
|
`async` et `await` sans asyncio.
|
||||||
[slides](https://mdk.fr/asyncio/), [video](https://www.youtube.com/watch?v=_LpJ7X8hY-Y).
|
[slides (en)](https://mdk.fr/asyncio/), [video](https://www.youtube.com/watch?v=_LpJ7X8hY-Y).
|
||||||
|
|
||||||
- 2017-04-06:
|
- 2017-04-06:
|
||||||
[Paris.py #13](https://www.meetup.com/Paris-py-Python-Django-friends/events/238318089/):
|
[Paris.py #13](https://www.meetup.com/Paris-py-Python-Django-friends/events/238318089/):
|
||||||
|
|
|
@ -4,7 +4,7 @@ from datetime import date
|
||||||
AUTHOR = "Julien Palard"
|
AUTHOR = "Julien Palard"
|
||||||
SITENAME = "mdk.fr"
|
SITENAME = "mdk.fr"
|
||||||
SITETITLE = "Julien Palard"
|
SITETITLE = "Julien Palard"
|
||||||
SITESUBTITLE = "Formateur et mentor Python"
|
SITESUBTITLE = "Développeur et formateur Python"
|
||||||
SITEURL = ""
|
SITEURL = ""
|
||||||
SITELOGO = "/images/julien.jpg"
|
SITELOGO = "/images/julien.jpg"
|
||||||
SITEDESCRIPTION = "Julien Palard, formateur Python"
|
SITEDESCRIPTION = "Julien Palard, formateur Python"
|
||||||
|
@ -38,7 +38,7 @@ SOCIAL = (
|
||||||
# Path to Plugins
|
# Path to Plugins
|
||||||
PLUGIN_PATHS = ['pelican-plugins']
|
PLUGIN_PATHS = ['pelican-plugins']
|
||||||
# Enable i18n plugin, probably you already have some others here.
|
# Enable i18n plugin, probably you already have some others here.
|
||||||
PLUGINS = ['i18n_subsites']
|
PLUGINS = ['i18n_subsites', 'filetime_from_git']
|
||||||
# Enable Jinja2 i18n extension used to parse translations.
|
# Enable Jinja2 i18n extension used to parse translations.
|
||||||
JINJA_ENVIRONMENT = {'extensions': ['jinja2.ext.i18n']}
|
JINJA_ENVIRONMENT = {'extensions': ['jinja2.ext.i18n']}
|
||||||
I18N_TEMPLATES_LANG = "en"
|
I18N_TEMPLATES_LANG = "en"
|
||||||
|
@ -52,11 +52,16 @@ DEFAULT_LANG = "fr_FR"
|
||||||
|
|
||||||
I18N_SUBSITES = {
|
I18N_SUBSITES = {
|
||||||
'en': {
|
'en': {
|
||||||
'SITENAME': 'English Julien Palard',
|
|
||||||
'LOCALE': 'en_US',
|
'LOCALE': 'en_US',
|
||||||
'THEME_STATIC_DIR': '../theme'
|
'THEME_STATIC_DIR': '../theme',
|
||||||
}
|
'SITESUBTITLE': "Freelance Python Programmer and Trainer",
|
||||||
|
'MENUITEMS': (
|
||||||
|
("Trainings", "/en/pages/formations.html"),
|
||||||
|
("Talks", "/en/pages/talks.html"),
|
||||||
|
("Articles", "/en/blog/"),
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
PATH = "content"
|
PATH = "content"
|
||||||
|
|
||||||
|
|
|
@ -1,2 +1,3 @@
|
||||||
pelican
|
pelican
|
||||||
markdown
|
markdown
|
||||||
|
gitpython
|
||||||
|
|
Loading…
Reference in New Issue
Block a user