Le rover Perseverance s’est posé sur Mars

Ca y est, ce soir à 22H, le rover Perseverance s’est posé sur Mars. J’avais allumé la télé, j’ai suivi le non évènement sur Arte, qui diffusait une soirée spéciale avec des youtubeurs faisant de la vulgarisation scientifique pour couvrir l’évènement. Pourquoi un non-évènement ? Parce qu’il s’agit de parler de quelque chose qui est en train de se passer, mais pour lequel on a aucun témoin, aucune caméra en direct, seulement les images d’une salle de contrôle stressée, et des des informations qui arrivent au compte goutte avec 11 minutes de décalage.

Et puis, si moi j’étais excité à la maison, et que j’ai suivi les “7 minutes de terreur” en redoutant un échec qui aurait immédiatement hypothèque l’ambitieux programme de collecte d’échantillons, dont le retour sur terre n’est prévu que dans 6 à 10 ans ! Et ces moments de stress pendant la descente de ce rover, avec cette ironie de voir sa progression affichée à l’écran alors que tout était déà terminé sur la planète rouge, m’a rappelé le livre de Francis Rocard “Dernières nouvelles de mars” qui souligne la complexité de ce projet, et l’infaisabilité à court ou moyen terme des missions humaines vers Mars. Une mission martienne sur deux a achoué jusqu’à présent, y compris sur les récentes. On est loin d’envoyer des fusées à la chaine avec des robots poru bâtir des villes souterraines et générer de l’oxygène et du carburant ! Quant au terraforming, le jour où on sera capable de rendre mars habitable, corriger le problème du réchauffement climatique sur terre sera en comparaison une broutille.

Ce rover a une particularité, nos noms à Sonia, moi, aux enfants et à mes parents sont gravés sur une puce du rover, à côté de ceux de près de 1 million d’autres personnes. Et j’ai surinvesti dans cette mission, dans mon intérêt pour Mars, pour les mondes extraterrestre. J’ai réimprimé et plastifié les “boarding pass” des enfants obtenus lors de notre inscription pour avoir nos noms sur le rover. Et j’étais prêt à les laisser se coucher à 22h en dépit de l’école demain, en m’imaginant que ça avait un petit goût de premiers pas de l’homme sur la lune. Sonia a froncé les sourcils et haussé les épaules après avoir exprimé sa désapprobation, en se dédouanant parce que de toute façon, comme elle travaille demain matin, ce sera à moi de gérer le réveil difficile. Et puis elle m’a rappelé à deux reprises que c’était mon truc, Mars, pas celui des enfants, et que je projetais complètement. Et elle avait certainement raison, si les enfants ont témoigné un semblant d’intérêt, c’est un peu parce que attise leur curiosité, aussi parce qu’ils voient que ça m’intéresse, mais surtout parce que ça leur permettait d’aller se coucher exceptionnellement tard pour un jour de semaine avec école le lendemain. D’ailleurs, aucun n’a fait de drame quand finalement, je les ai accompagnés se coucher. ce qui ne signifie pas qu’on ne doit pas pour autant exposer les enfants à des sujets intéressants, quitte à ce que ce soit un compromis entre un aspect éducatif, et un aspect ludique.

Preventing Angular observable leaks

A common Angular beginner error is forgetting to unsubscribe from observables. This leak may not be noticeable at first, but will eventually lead to a sluggish application, or other unexpected behaviours.

One can manually keep track of all subscriptions, in order to properly unsubscribe in ngOnDestroy. However, this is tedious, and error prone.

Depending on your subscription context, there are two solutions that you may like.

For a subscription which is a one shot, you need to retrieve your data, and then fortget it, the RxJS first operator combined if straightforward.

myObservable.pipe(first()).subscribe(...);

If you’re expecting several events, and need to unsubscribe only when the component gets destroyed, then @ngneat/until-destroy, is “a neat way to unsubscribe from observables when the component destroyed

The @UntilDestroy({ arrayName: ‘subscriptions’ }) is a nice way to both explicit the requirement for observables to be unsubsribeds, while minimizing boilerplate code.

How to prevent updates of a SQL column using JPA ?

When working with JPA / Hibernate, you may want to prevent updates of a given column. This is typically the case with your primary key. This is possible using the “updatable” attribute of the @Column annotation. Ex :

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", updatable = false, nullable = false)
    private Long id;

How to create an Angular 7+ component with two way binding ?

You have an angular component, and would like to have a value with a two way binding similar to ngModel. The easiest way is to :

  • add an Input on your document
  • add an Ouput whose name is the one of the input, suffixed by Change (that’s a required naming convention)

For example :

@Component({
  selector: 'app-select-nature-document',
  template: './select-nature-document.component.html',
  styleUrls: ['./select-nature-document.component.css']
})
export class SelectNatureDocumentComponent implements OnInit {
  @Input()
  natureDocument: NatureDocument;
  @Output()
  natureDocumentChange: EventEmitter<NatureDocument> = new EventEmitter<NatureDocument>();
...

You can then notify the value change using the output event emitter :

  onNatureDocumentSelected() {
    this.natureDocumentChange.emit(this.natureDocument);
  }

And the component can be used like this :

<app-select-nature-document [(natureDocument)]="editedDocument.nature"></app-select-nature-document>

Thanks to https://stackoverflow.com/questions/42006770/angular2-component-input-two-way-binding.