Compare commits

...

7 Commits

Author SHA1 Message Date
Julien Palard deb9a422b2
Use filetime_from_git. 2023-01-25 17:34:53 +01:00
Julien Palard c4db791044
Translating... 2023-01-25 09:54:53 +01:00
Julien Palard b8824774ce
Translating... 2023-01-25 09:50:14 +01:00
Julien Palard 8e886174c1
Translating... 2023-01-24 16:22:48 +01:00
Julien Palard 007b693bc1
Translating... 2023-01-24 16:04:59 +01:00
Julien Palard b20ceb9036
It's the home since a long time. 2023-01-24 14:57:38 +01:00
Julien Palard f3d720ede6
Woops, a test. 2023-01-24 14:49:37 +01:00
59 changed files with 339 additions and 128 deletions

View File

@ -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 ».
--- ---

View File

@ -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...
--- ---

View File

@ -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.
--- ---

View File

@ -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.
--- ---

View File

@ -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!
--- ---

View 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?

View File

@ -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, aujourdhui 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, aujourdhui 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, - Jappuie 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, - Jai 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 dabord que cest 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ù jai 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 « Cest quoi un Ubuntu
Server ? Cest 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, jai 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** davoir configuré son interface réseau.
- type rootfs passphrase again,
- press a volume button to get rid of the Mobian splash to see logs Mais cest un PinePhone, avec [Mobian](https://mobian-project.org/)
(une Debian avec deux-trois patch pour mobiles), donc je sais que je
vais men sortir, commencons simplement par lire les logs avant de
suivre le lapin blanc et de plonger au fond du terrier de
lUART-over-jack…
- Jappuie sur le bouton « power » pour le démarrer,
- je lui donne sa passephrase à nouveau,
- et jappuie sur un bouton de « volume » : comme sur une Debian, lappui dune 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 Cest 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 cest 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 jaime 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 (cest 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` mannonce ~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 jai 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 cest 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 jai 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 ma dit dexé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 derreurs]
$ 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 naurait 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 : cest une bonne première étape.
What would people do when a phone does no longer boot? Buy another? Si javais eu un téléphonne dun GAFA, quelles auraient été mes
solutions ? En acheter un autre.

View File

@ -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 :

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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.

View File

@ -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:

View File

@ -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

View File

@ -1,5 +1,4 @@
Title: Cisco CheatSheet Title: Cisco CheatSheet
Date: 2008-04-03
# Misc # Misc

View File

@ -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!

View File

@ -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

View File

@ -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?

View File

@ -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

View File

@ -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

View File

@ -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 :

View File

@ -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

View File

@ -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:

View File

@ -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.

View File

@ -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:

View File

@ -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.
--- ---

View File

@ -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`

View File

@ -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

View File

@ -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:

View File

@ -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:

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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.

View File

@ -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.

View File

@ -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!!!

View File

@ -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

View File

@ -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…
--- ---

View File

@ -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

View File

@ -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,

View File

@ -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

View File

@ -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\#

View File

@ -1,5 +0,0 @@
Title: About Julien
Date: 2008-08-14 19:25:52
status: hidden
Just check out [mdk.fr](mdk.fr)!

View File

@ -1,5 +1,4 @@
Title: Bookmarks Title: Bookmarks
Date: 2021-05-05 15:21:00
# Internet & HTTP # Internet & HTTP

View 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).

View File

@ -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).

View File

@ -1,5 +1,4 @@
Title: GPG Title: GPG
Date: 2021-04-27 21:26:00
# My GPG keys # My GPG keys

View File

@ -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

View File

@ -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

View 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).

View File

@ -1,5 +1,6 @@
Lang: fr
Slug: python-avance
Title: Python avancé Title: Python avancé
Date: 2023-01-17 15:41:00
Cest la seconde de mes deux formations Python. Alors que la Cest la seconde de mes deux formations Python. Alors que la
[formation *initiation*]({filename}/pages/python-initiation.md) [formation *initiation*]({filename}/pages/python-initiation.md)

View 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).

View File

@ -1,5 +1,6 @@
Title: Python initiation Title: Python initiation
Date: 2023-01-17 15:41:00 Slug: python-initiation
Lang: fr
Cest la première des deux formations Python que je propose, Cest 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
View 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).

View File

@ -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/):

View File

@ -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"

View File

@ -1,2 +1,3 @@
pelican pelican
markdown markdown
gitpython