Microblog : A very long article Wikipedia article on the orientation of toilet paper [7 jun à 22:52] [R]

Lundi, 16 septembre 2019

Optique photo 5 : temps de pose

Catégories : [ Science ]

Exposition et temps de pose

Du point de vue pratique, l'exposition d'une photo dépend du nombre d'ouverture du diaphragme, de la sensibilité du capteur et du temps de pose. On peut comprendre cette exposition comme la quantité de lumière nécessaire pour que chaque pixel du capteur CCD reçoive suffisamment de photons pour produire une valeur « raisonnable » de ce pixel. On a alors le choix d'exposer ces pixels à un flot de lumière important pendant un temps court, ou au contraire un flot de lumière plus faible pendant un temps plus long pour recevoir le même nombre de photons, et donc obtenir le même résultat.

Plus formellement, l'exposition lumineuse H est définie par H = Et, où E est l'éclairement lumineux c'est à dire le flot de lumière et t est le temps de pose.

optique_photo_1

En faisant l'hypothèse d'un système idéal d'une lentille mince parfaitement transparente uniformément éclairée par l'objet photographié, on peut définir l'éclairement lumineux comme E = Lπ / (4(N / (1 - f / l))2) où L est la luminance de l'objet, f est la distance focale de l'objectif, l est la distance de l'objet et N est le nombre d'ouverture du diaphragme. Dans le cas courant où la distance focale est négligeable par rapport à la distance à l'objet, on peut simplifier cette définition en E = Lπ / (4N2).

Par ailleurs, la sensibilité est définie par S = H0 / H où H0 est une valeur d'exposition de référence, constante. En considérant que la luminance de l'objet est elle aussi constante, on obtient la relation

St / N2 = 4H0 / (Lπ)

qui indique bien que si l'un des trois paramètres N, S ou t varie alors l'un au moins des deux autres paramètres doit varier pour que l'égalité soit toujours vérifiée.

Flou et temps de pose

Si le sujet ou l'appareil photo se déplacent pendant la prise de vue, on comprend aisément qu'un point de l'objet donne une image qui se déplace sur le capteur, qui enregistre alors plusieurs points contigus.

Parmi tous les mouvements possibles de l'appareil photo qui conduisent à un flou de bougé, un mouvement simple à modéliser est une rotation de l'appareil photo autour du centre optique O. On considère que durant la prise de vue, le point A s'est déplacé en B, et que le temps de pose est assez long pour que le capteur enregistre toutes les positions prises par ce point entre A' et B'. L'image du point, au lieu d'être un point, est alors un trait de longueur h'. On peut exprimer h' en fonction de θ

h' = tan(θ)lf/(l-f)

Lorsque la distance focale f est négligeable devant l et que θ est inférieur à 0.5 radians (soit 29°, ce qui fait que l'erreur d'approximation de tan(θ) est inférieure à 10%), on peut simplifier en

h' = fθ

En considérant que l'angle θ est le résultat d'une rotation de vitesse angulaire ω durant un temps t, c'est-à-dire θ = ωt on peut écrire

h' = fωt

En notant ε la hauteur d'un pixel et en reprenant l'hypothèse que le flou est invisible si la taille h' de la « tache » de flou est plus petite qu'un pixel, on peut écrire que le flou de bougé est invisible si

t < ε/(fω)

On retrouve ici l'approximation dite « de l'inverse de la focale », à savoir que pour éviter le flou de bouger,

« le temps de pose minimum a la même valeur numérique que l'inverse de la distance focale exprimée en millimètres. »

Cette approximation suppose que ε/ω = 1/1000 m·s·rad-1. On peut supposer que pour un photographe moyen, la vitesse ω de ses mouvements involontaires est constante, mais on voit que cette approximation dépend directement de la taille ε d'un pixel qui peut beaucoup varier d'un capteur à l'autre.

[ Posté le 16 septembre 2019 à 21:22 | pas de commentaire | ]

Dimanche, 15 septembre 2019

Optique photo 4 : sensibilité

Catégories : [ Science ]

Le bruit

Chaque pixel d'un capteur CCD d'appareil photo numérique est un transducteur qui transforme une quantité de lumière reçue Q en une différence de potentiel électrique u0 qui est proportionnelle à Q selon un facteur f :

u0 = fQ

Dans un situation idéale, une valeur donnée de Q devrait donner systématiquement la même valeur nominale u0. En réalité, à cause du bruit, des mesures répétées d'une même valeur d'exposition donneront des valeurs différentes de u

u = u0 + ε

où ε est une erreur de mesure aléatoire. Cela signifie que chaque mesure répétée de u aura une valeur différente de ε, mais aussi que deux pixels voisins qui sont exposés de la même manière donneront des valeurs de u différentes.

Si on considère qui le bruit est un bruit blanc (ce qui est probablement faux mais suffisamment similaire à la réalité pour être utile à cette explication), alors les valeurs de ε sont couramment proches de zéro (et donc u est proche de u0), mais ε peut parfois, plus rarement, être nettement plus grand que zéro et donc la valeur de u est nettement différente de u0.

La sensibilité d'un capteur numérique

Les valeurs typiques de u sont très petites et il est donc nécessaire de les amplifier avant de les numériser. Ainsi une valeur v de pixel (typiquement entre 0 pour la valeur la plus sombre et 255 pour la valeur la plus lumineuse) est obtenue en effectuant

v = Au si Au ≤ vmax
v = vmax si Au > vmax

où A est le facteur d'amplification. Comme la valeur de v ne peut dépasser vmax, on comprend que si l'amplification A choisie est trop élevé par rapport à u, l'intervalle de valeurs possibles pour un pixel n'est pas suffisant pour représenter la valeur correcte de ce pixel, et on arrive à la saturation.

En faisant varier A, on peut faire varier la « sensibilité » du capteur et obtenir des valeurs élevées de v (donc un pixel très lumineux) à partir d'une valeur faible de u (par exemple en photographiant dans une situation de faible luminosité).

Cependant, comme v contient aussi le bruit ε, ce dernier est amplifié de la même manière :

 v = Au0 + Aε

Ainsi, plus la « sensibilité » du capteur est élevée, c'est à dire plus le facteur d'amplification A est élevé, plus le bruit est élevé et devient perceptible pour l'observateur.

Par exemple pour une image d'un objet noir, on s'attend à ce que v soit proche de zéro pour tous les pixels même pour une grande valeur de A parce que u0 est justement proche de zéro. Mais il peut arriver que ε soit bien plus grand que u0, ce qui conduit à ce que la valeur v du pixel soit essentiellement égale à Aε. Ceci se traduit par des pixels brillants au milieu de pixels sombres, typiques du bruit des photos prises en faible lumière avec une sensibilité élevée.

Comparaison de capteurs

Dans des conditions d'éclairage uniforme dans l'espace et le temps d'une surface s pendant un temps t (le temps de pose d'une photo), on peut définir les grandeurs suivantes :

où Q est la quantité de lumière c'est à dire approximativement le nombre de photons qui arrivent sur la surface s. En combinant ces trois définitions, on obtient

Q = Hs

c'est à dire que la quantité de lumière qui arrive sur un pixel est proportionnelle à la surface de ce pixel. Autrement dit, à exposition H égale, un pixel plus grand reçoit une plus grande quantité de lumière qu'un pixel plus petit.

En reprenant définition de u0 plus haut, on a

u0 = fHs

et donc, en ignorant pour le moment le bruit ε on a

v = AfHs

Ainsi, pour obtenir la même valeur v avec deux capteurs (capteur 1 et capteur 2) dont les pixels ont respectivement des surfaces s1 et s2, on a besoin d'un facteur d'amplification A1 sur le capteur 1 et A2 sur le capteur 2 tels que

A2 = A1s1 / s2

On a vu plus haut que le bruit est amplifié. Cela se traduit par

A2ε = A1εs1 / s2

c'est à dire que le bruit dans l'image obtenue par le second capteur est s1 / s2 fois plus élevé que le bruit dans l'image obtenue par le premier capteur.

Qualitativement, cela signifie que pour obtenir deux photos exposées de manière identiques avec deux appareils différents, l'un muni d'un capteur à grands pixels et le second muni d'un appareil à petits pixels, celui dont les pixels sont petits a besoin d'un facteur d'amplification plus élevé et produit donc une image plus bruitée.

Sensibilité

La sensibilité est définie par S = H0 / H où H0 est une valeur d'exposition de référence.

Un photographe s'attend à ce que lorsqu'on prend la même photo avec deux appareils (dont les capteurs sont équivalents à l'exception de la taille des pixels, et donc de leur nombre), l'image obtenue est exposée de la même façon (en supposant que la distance focale, le nombre d'ouverture, le temps de pose et la sensibilité sont les mêmes). Une conséquence est que les facteurs d'amplification des deux appareils doivent être différents puisque les tailles des pixels sont différentes, et que l'image de l'appareil dont les pixels sont plus petits contiendra donc plus de bruit.

Réciproquement, si on cherche à produire avec les deux appareils des images contenant une quantité de bruit identique, il faut changer les paramètres d'exposition de l'appareil produisant le plus de bruit de sorte à

  • diminuer la sensibilité S d'un facteur s1 / s2 afin d'utiliser le même facteur d'amplification dans les deux appareils, et
  • augmenter l'exposition H d'un facteur s1 / s2 afin de compenser la diminution de la sensibilité.

On peut parvenir à ce dernier point en augmentant le temps de pose ou en augmentant la surface de la pupille du diaphragme d'un facteur s1 / s2.

Selon le modèle simplifié utilisé ici, à tailles de capteurs égales, un capteur de plus haute définition (donc comportant un plus grand nombre de pixels) produira donc des images contenant plus de bruit.

Si on décide de considérer qu'avec une exposition de référence Href la sensibilité Sref maximale d'un capteur de référence dont les pixels ont une surface sref représente une quantité de bruit de référence, on peut considérer qu'à quantité de bruit identique, un capteur de plus haute définition dont les pixels ont une surface s aura donc une « sensibilité équivalente » Seq plus faible nécessitant une exposition Heq. En effet Sref = H0 / Href et Heq = sref / sHref, donc

Seq = Srefs/sref

Il faut noter que la sensibilité équivalente, qui dépend de la surface des pixels, n'a rien à voir avec la focale équivalente qui dépend des dimensions du capteur et non de celles de ses pixels.

[ Posté le 15 septembre 2019 à 17:22 | 1 commentaire | ]

Samedi, 14 septembre 2019

Optique photo 3 : perspective

Catégories : [ Science ]

Le grandissement

optique_photo_1

La hauteur h' de l'image d'un objet de hauteur h situé à une distance l d'un objectif de distance focale f est donnée par h' = hf / l. Le rapport des tailles entre l'objet et l'image s'appelle le grandissement γ, et en supposant que f est négligeable devant l, γ est défini par

γ = h' / h = f / l

Le grandissement dépend donc uniquement de la distance à l'objet et de la distance focale de l'objectif.

La perspective

On peut donner une valeur chiffrée à la perspective en comparant les tailles des images de deux objets de même taille mais situés à des distances différentes. En supposant que la profondeur de champ est suffisante pour que les images des deux objets soient nettes, on peut noter h'1 et h'2 les hauteurs de ces images et l1 et l2 les distances des objets, puis calculer le rapport h'1 / h'2

h'1 / h'2 = l2 / l1

On constate que le rapport des hauteurs des images dépend seulement du rapport des distances des deux objets. En particulier, il ne dépend pas de la distance focale de l'objectif (si cette dernière est négligeable devant les distances aux objets).

Une conséquence de ce constat est qu'un objectif à longue focale n'« écrase » pas davantage les perspectives qu'un objectif à courte focale (si on ignore les déformations sur les bords de l'image dûs aux courtes focale). Cette conclusion est cohérente avec le fait qu'un objectif à courte distance focale associée à un capteur de petite taille donnera la même image (avec la même perspective) qu'un objectif de plus longue distance focale associé à un capteur plus grand (lorsque le rapport des distance focales de ces deux objectifs est égal au crop factor des deux capteurs).

[ Posté le 14 septembre 2019 à 14:25 | pas de commentaire | ]

Vendredi, 13 septembre 2019

Optique photo 2 : profondeur de champ

Catégories : [ Science ]

Le flou

optique_photo_2

Lorsque la mise au point d'un système optique (simplifié) a été effectuée, l'image d'un objet ponctuel A situé à une distance l de l'objectif est un point A'. La mise au point est cependant imparfaite pour un objet B situé à une distance L plus (ou moins) loin que l : les rayons lumineux convergent en B' au lieu de A', continuent leur course et vont s'étaler autour de A' dans une zone de largeur ε. Sur le capteur d'un appareil photo, l'image B' de B est donc une tache circulaire dont le diamètre ε dépend de L, de la distance de mise au point l, de la distance focale f de la lentille et du diamètre d de la pupille, c'est-à-dire le trou circulaire par lequel la lumière entre dans la lentille, délimitée par le diaphragme. On considère ici que la pupille est suffisamment grande pour négliger les effets dûs à la diffraction.

On considère que l'image d'un point est net lorsque l'observateur (humain, en général) est incapable de faire la différence entre un « vrai » point et une tache. Le diamètre ε maximal d'une telle tache est lié au pouvoir de séparation de l'½il de l'observateur, qui est lié non seulement à la taille de la tache mais aussi à la distance à laquelle se situe l'observateur : plus l'observateur est éloigné, plus il est difficile de distinguer une petite tache d'un « vrai » point. La valeur de cet ε maximal n'est pas universelle, car elle dépend in fine de l'affichage de la photo (sur écran ou en tirage papier) et de la manière dont on regarde cette photo : il sera par exemple plus facile de remarquer un flou en regardant de près une image tirée en grand format qu'en regardant de loin une image tirée en petit format.

La profondeur de champ

D'après l'article de Wikipedia sur la Profondeur de champ, les limites de distance où les objets donneront une image considérée comme nette, une fois choisie un valeur ε maximale sont

L = l / (1 ± εl/df)

Les objets dont la distance est située entre ces limites auront une image considérée comme nette, car la tache de diamètre ε est trop petite pour être distinguée d'un « vrai » point net. On remarque que pour photographier un objet donné situé à une distance l en utilisant un objectif de distance focale f donnée, ces deux valeurs limites ne dépendent que du diamètre de la pupille, et pas du tout de la taille du capteur de l'appareil photo. Plus précisément, si les pixels du capteur sont plus grands que ε il n'y aura aucun flou car la tache circulaire sera contenue dans un seul pixel. Si les pixels sont plus petits que ε mais que les pixels à l'affichage de la photo (sur écran ou sur papier) sont plus grands que la tache circulaire, alors il n'y aura aucun flou à l'affichage, mais on pourra voir le flou en zoomant dans l'image (ce qui revient à dire que les pixels d'affichage deviennent plus petits que la tache circulaire).

Le nombre d'ouverture et la focale équivalente

La taille d de la pupille est exprimée dans la pratique non pas en millimètres, mais en fraction 1/N de la distance focale de l'objectif : d = f / N. N est le nombre d'ouverture et vaut donc N = f / d.

Si considère qu'en utilisant un objectif de distance focale f sur un capteur de taille différente on a une distance focale équivalente feq = kf, alors on peut écrire

N = feq / kd

où k est appelé « crop factor », soit

kN = feq / d

En introduisant la notion de nombre d'ouverture équivalent Neq défini par Neq = kN, la formule précédente devient

Neq = feq / d

qui est a la même forme que la définition du nombre d'ouverture, mais en utilisant le nombre d'ouverture équivalent et la focale équivalente.

[ Posté le 13 septembre 2019 à 18:54 | 2 commentaires | ]

Mardi, 10 septembre 2019

Optique photo 1: l'angle de champ

Catégories : [ Science ]

Le modèle simplifié

optique_photo_1

On peut simplifier un objectif d'appareil photo en le considérant comme une lentille mince de centre O et de distance focale f. L'axe optique de la lentille passe par O et est perpendiculaire à cette dernière. Les points F et F', situés de part et d'autre de la lentille à une distance f sont les points focaux de cette dernière. L'objet AB, situé à une distance l de la lentille donne alors une image A'B' sur le capteur de l'appareil photo. La hauteur de l'objet est h et la hauteur de l'image est h'.

Les règles de l'optique géométrique sont simples :

  • les rayons lumineux passant par le centre O de la lentille ne sont pas déviés, donc AA' et BB' sont des lignes droites ;
  • les rayons lumineux qui arrivent sur la lentille parallèlement à l'axe optique ressortent de la lentille en passant par le point focal F', tel le rayon BCB' ;
  • les rayons lumineux qui arrivent sur la lentille en passant par le point focal F ressortent parallèlement à l'axe optique, tel le rayon BDB'.

L'angle de champ

L'angle sous lequel l'objectif voit l'objet AB est l'angle θ. On a tan θ = h / l et tan α = h / (l - f) =  h' / f. On en déduit que tan θ = (l - f)h' / lf, que l'on peut simplifier (lorsque f est négligeable devant l) en tan θ = h' / f.

Si on considère que l'image A'B' et son symétrique (qui n'est pas représenté sur le diagramme) sont ensemble suffisamment grands pour couvrir l'intégralité de la diagonale du capteur, on sait que la hauteur h' de l'image représente la moitié de la diagonale d du capteur. Cela signifie que l'angle θ est la moitié de l'angle de champ du système objectif-capteur. On a alors

tan(angle de champ / 2) = d / 2f

Ceci montre que l'angle de champ dépend seulement de la distance focale de l'objectif et de la taille du capteur (lorsque f est négligeable devant l, soit en pratique lorsque la distance à l'objet est au moins dix fois plus grande que la distance focale).

Angle de champ et taille de capteur

Pour deux capteurs de tailles différents et avec un objectif donné, le rapport des tangentes des demi-angles de champ est égale au rapport des tailles des capteurs. Pour des angles de champ de moins de 53° (c.-à-d. lorsque la valeur de la tangente est proche de la valeur de l'angle, en radians), c'est à dire lorsque la distance focale est plus grande que la diagonale du capteur, on peut faire l'approximation que le rapport des angles de champ est égal au rapport des tailles des capteurs, avec une erreur de moins de 10%, soit

angle1 / angle2 = diagonale1 / diagonale2

Ainsi par exemple un capteur deux fois plus grand qu'un autre capteur donnera un angle de champ deux fois plus grand lorsque ces capteurs sont munis d'objectifs de même distance focale.

Si on veut une approximation qui fonctionne aussi pour de grands angles, il devient nécessaire de comparer les tangentes des demi-angles de champ, par exemple

tan(angle1 / 2) / tan(angle2 / 2) = diagonale1 / diagonale2

ou de faire intervenir les arctangentes, par exemple

angle1 / angle2 = arctan(diagonale1 / 2f) / arctan(diagonale2 / 2f)

ce qui est nettement moins pratique à évaluer de tête.

La distance focale équivalente

Supposons que l'on a un capteur de référence dont la diagonale est dref (par exemple un capteur 24×36 mm) et un objectif de distance focale f.

Lorsqu'on utilise cet objectif avec un autre capteur dont la diagonale est d, on a un angle de champ θ défini par

tan(θ / 2) = d / f

On veut alors savoir quelle serait la distance focale équivalente feq d'un objectif fictif donnant le même angle de champ θ si on utilisait cet objectif fictif avec le capteur de référence. On a

tan(θ / 2) = d / f =  dref / feq

et donc

feq = f × dref / d

(cette valeur est correcte si f est négligeable par rapport à l et par rapport à ld / dref).

Comparée à l'angle de champ, le calcul de la distance focale équivalente n'est pas limitée à des angles de champ suffisamment petits. La distance focale équivalente fait cependant appel à un facteur caché, la taille du capteur de référence.

[ Posté le 10 septembre 2019 à 22:47 | 2 commentaires | ]

Mercredi, 4 septembre 2019

CAPTCHA

Traduction: [ Google | Babelfish ]

Catégories : [ Blog ]

For years, the comments were systematically rejected on the blog because most of them were spam, and I didn't have a good way of filtering them out. A CAPTCHA would have been a solution, but I read that the ones based on warped text are easily defeated, and I didn't want to bother with images anyway.

I recently rediscovered the idea of a CAPTCHA based on arithmetics, which I now have implemented. The poster of a comment must do a simple arithmetics operation involving two single digit numbers and one operator. It should not be difficult to defeat, but arithmetics CAPTCHAs are apparently uncommon, so it is likely that most bots don't implement such solvers. It has already repelled a couple of spam comments today.

[ Posté le 4 septembre 2019 à 22:34 | pas de commentaire | ]

Lundi, 12 août 2019

Roulette et Martingale

Catégories : [ Science ]

Supposons qu'on joue à la roulette dans un casino. La roulette est honnête, donc tous les chiffres ont la même probabilité de sortir. Cette roulette comporte 18 numéros rouges, 18 numéros numéros noirs et un zéro qui n'est ni rouge ni noir. Les paris se font par tranche de 1 Euro, et sont limités à 100 Euros. On entre au casino avec 127 Euros en poche, et on parie toujours sur le rouge et on ne réinvestit pas ce qu'on a gagné, c'est à dire qu'on arrête de jouer une fois qu'on a perdu les 127 Euros de départ.

À chaque jeu on a donc p = 18/37 chances de gagner (soit un peu moins d'une chance sur deux).

Si on fait n = 127 paris de 1 Euro, la probabilité de gagner k fois (0 <= k <= n) est de P(X = k) = Comb( n, k) p k (1 - p) n - k (il s'agit d'une Loi binomiale). Les gains après k victoires sur n parties sont de 2 k - n. On peut donc calculer la somme des P(X = k) pour tous les k tels que 2 k - n > 0, ce qui donne la probabilité de quitter le casino avec en poche plus d'Euros que lorsqu'on y est entré. Cette probabilité est de 0,38, c'est à dire qu'on a 38% de chance de quitter le casino avec au moins 128 Euros et au plus 254 Euros. Cela signifie aussi qu'on a 62% de chance de n'avoir rien gagné, voire perdu tout ou partie des 127 Euros initiaux. En fait, on peut s'attendre, en moyenne, à perdre 3,43 Euros.

Jouer une martingale consiste à doubler la mise si on perd, afin que le gain couvre les pertes passées. La table de roulette ayant une limite de 100 Euros, on peut donc miser au plus m = 7 fois de suite en doublant la mise à chaque jeu, soit 1 + 2 + 4 + 8 + 16 + 32 + 64 = 127 Euros (ça tombe bien, c'est justement la somme qu'on avait en entrant au casino). La probabilité de gagner au bout de i jeux (donc de perdre i - 1 fois puis de gagner une fois) est P(X = i) = (1 - p) i - 1 p (il s'agit d'une Loi géométrique). On peut donc calculer la somme de ces probabilités pour i = 1 … m, qui représente la probabilité de gagner 1 Euro en utilisant la martingale. Cette probabilité est de 1 - (1 - p) m = 0,99. Cela signifie qu'on a 99% de chance de gagner 1 Euro, et donc 1% de chance de perdre 127 Euros. On peut donc s'attendre à perdre en moyenne 0,21 Euro.

Si on joue la martingale plusieurs fois de suite aussi longtemps que l'on ne perd pas, on peut espérer gagner à répétition, mais la probabilité de ne jamais perdre diminue à mesure que l'on joue (il s'agit encore une fois d'une loi géométrique, cette fois avec avec p = 0,99). Si on parvient à gagner en jouant la martingale au moins 128 fois de suite, alors on est certain qu'au moment où la chance tourne et que l'on perd, on ne perd que 127 Euros, et donc qu'on quitte le casino avec en poche au moins 1 euro de plus que lorsqu'on y est entré. Cette probabilité est de 0,298. Cela signifie qu'on a 29,8% de chance de sortir du casino avec au moins 128 Euros en poche. Cela signifie aussi qu'on a 70,2% de chance de perdre entre 0 et 127 Euros. En fait, on peut s'attendre à perdre en moyenne 21,8 Euros. Si on compare cette méthode avec la précédente qui consiste à miser 127 fois 1 Euro sur le rouge, on voit que le chances de ne pas perdre d'argent sont plus élevées si on n'utilise pas la martingale, et que les gains moyens sont moins mauvais lorsqu'on n'utilise pas la martingale (ils sont cependant toujours négatifs, c'est à dire qu'on y perd toujours de l'argent, en moyenne).

Jouer la martingale a cependant une utilité : la probabilité de gain élevé est plus grande avec la martingale que sans. Par exemple la probabilité de gagner au moins 10 Euros est de 11,6% sans martingale et 27,1% avec la martingale. Pour 20 Euros ou plus, la probabilité est d'à peine 1.9% sans martingale et de 24,7% avec la martingale, et on a encore environ 10% de chances de gagner au moins 115 Euros avec la martingale alors que cette probabilité est de moins d'une sur cent milliards sans martingale.

[ Posté le 12 août 2019 à 07:31 | pas de commentaire | ]

Samedi, 22 juin 2019

Nouvelle table

Catégories : [ Cuisine/Nouvelle cuisine ]

nouvelle_cuisine_2019-06-22

[ Posté le 22 juin 2019 à 13:02 | pas de commentaire | ]

Vendredi, 7 septembre 2018

Jour 8

Catégories : [ Cuisine/Nouvelle cuisine ]

nouvelle_cuisine_2018-09-07_1 nouvelle_cuisine_2018-09-07_2 nouvelle_cuisine_2018-09-07_3

[ Posté le 7 septembre 2018 à 18:16 | pas de commentaire | ]

Jeudi, 6 septembre 2018

Jour 7

Catégories : [ Cuisine/Nouvelle cuisine ]

nouvelle_cuisine_2018-09-06_1 nouvelle_cuisine_2018-09-06_2

[ Posté le 6 septembre 2018 à 18:07 | pas de commentaire | ]

Mercredi, 5 septembre 2018

Jour 6

Catégories : [ Cuisine/Nouvelle cuisine ]

nouvelle_cuisine_2018-09-05_1 nouvelle_cuisine_2018-09-05_2

[ Posté le 5 septembre 2018 à 18:14 | pas de commentaire | ]

Mardi, 4 septembre 2018

Jour 5

Catégories : [ Cuisine/Nouvelle cuisine ]

nouvelle_cuisine_2018-09-04_1 nouvelle_cuisine_2018-09-04_2

[ Posté le 4 septembre 2018 à 17:42 | pas de commentaire | ]

Lundi, 3 septembre 2018

Jour 4

Catégories : [ Cuisine/Nouvelle cuisine ]

nouvelle_cuisine_2018-09-03_1 nouvelle_cuisine_2018-09-03_2

[ Posté le 3 septembre 2018 à 17:06 | pas de commentaire | ]

Vendredi, 31 août 2018

Jour 3

Catégories : [ Cuisine/Nouvelle cuisine ]

nouvelle_cuisine_2018-08-31_1 nouvelle_cuisine_2018-08-31_2

[ Posté le 31 août 2018 à 23:45 | pas de commentaire | ]

Jeudi, 30 août 2018

Jour 2

Catégories : [ Cuisine/Nouvelle cuisine ]

nouvelle_cuisine_2018-08-30

[ Posté le 30 août 2018 à 23:45 | pas de commentaire | ]

Mercredi, 29 août 2018

Jour 1

Catégories : [ Cuisine/Nouvelle cuisine ]

nouvelle_cuisine_2018-08-29_1 nouvelle_cuisine_2018-08-29_2

[ Posté le 29 août 2018 à 23:45 | pas de commentaire | ]

Samedi, 25 août 2018

Ancienne cuisine

Catégories : [ Cuisine/Nouvelle cuisine ]

nouvelle_cuisine_2018-08-25_1 nouvelle_cuisine_2018-08-25_2

[ Posté le 25 août 2018 à 23:45 | pas de commentaire | ]

Jeudi, 23 août 2018

Tas de meubles

Catégories : [ Cuisine/Nouvelle cuisine ]

nouvelle_cuisine_2018-08-23_1 nouvelle_cuisine_2018-08-23_2

[ Posté le 23 août 2018 à 23:45 | pas de commentaire | ]

Mercredi, 18 juillet 2018

Advertisement on the Web

Traduction: [ Google | Babelfish ]

Catégories : [ Râleries ]

The economic value of a Youtube video

The Youtube platform has been designed for the purpose of making all of its videos are available to anyone at anytime. Given its large amount of content, its suggestion algorithm and the ability to automatically play the next suggested video, a user of Youtube can consider that the stream of videos he wants to watch is limitless. This makes the stream a nonscarce resource i.e., a free good which, from an economics point of view has no value.

Asking users to pay for watching videos would indeed be a bad business move for Youtube, as many user would refuse to pay for watching content they currently get at no cost. Even the Youtube Red subscription, according to an Ars Technica article and related user comments, seems to be valuable not for it exclusive content, but for the extra features provided by the mobile player (download for offline viewing and background playing). Interestingly, these features are already provided by non-standard software, which is freely available. The exclusive content being apparently of little interest according to the article, the subscription seems to rather be “tax” on people who don't know they could legitimately get the same service for free.

Youtube being a business, it needs to get revenue, at least to support the cost of its large IT infrastructure. Since users are not charged any money, Youtube's revenue comes (exclusively?) from advertising (I guess that the collection of user behavioural data and their profiling is also sold to advertisers). Youtube's content therefore has value only insofar as it attracts potential consumers and exposes them to advertisement. The content itself does not matter to the platform, as long as users are drawn to it.

This is thus the foundation of the Web platforms and the Attention Economy, where the users' attention is the actual product being sold by the platforms. User profiling and Big Data is only a tool used for maximising the amount of attention being captured.

Advertisers are gamblers, you don't need to let them win

In 2004, Patrick Le Lay, then CEO of the French TV channel TF1 said “what we sell to Coca-Cola is available human brain-time.” One aspect of this is that TV channels sell advertisers the opportunity to reach the channel's viewers and attempt to influence them into buying the advertised products.

From the point of view of the advertisers, it is a gamble: they bet money (the cost of producing the TV commercial and the price paid to the TV channel to show the commercial) and hope to gain from it (when viewers buy their products because they have seen the commercial and have been influenced by it). This gamble is two-fold: the viewers may or may not see the commercial, and they may or may not be receptive to the influence techniques used in the commercial.

In social media, advertisement can be considered from the same angle: the website sells advertisers display space on its pages, and the advertisers gamble that users of the website will see the commercial and be influenced by it.

While everybody agrees that you don't have a moral obligation to buy a product after you have seen a commercial, it seems less obvious that you don't either have any moral obligation to view the commercial. For example, you could close your eyes and plug your ears to ignore the commercial; you could even use tools that automatically hide the commercial from you.

Putting the advertisers' money to uses I approve of

As I want to protect myself from the influence of advertisers, I normally use automated tools that prevent me from seeing advertisement. I record television programs and skip the commercials (automatically when the tool works as intended, otherwise manually), and I use ad blockers in my Web browser to prevent commercials from being displayed on my screen.

The difference between TV and the Web is that the TV channel gets paid for broadcasting the commercials and cannot control whether or not I skip them while advertisers on the Web pay the websites only if the commercial is being fetched i.e., only if I allow the Web browser under my control to display the commercial. In that case, my preferred solution would be to fetch the commercial as if it would be displayed, without actually displaying it. And since advertisers not only display commercials but also track the users across websites, it is necessary to isolate each commercial so that the tracking is not possible.

I would not normally care about websites not being paid by their advertisers, but in the particular case of Youtube, I use tools that allow me to watch content without having to view any commercial, meaning that the content's creators cannot hope to get payment from Youtube. I therefore dream of a tool that would allow me to channel advertisers' money to the content creators without having to view any commercial, thus letting the advertisers gamble, but strongly shifting the odds of this gamble in my favor. I consider this to be retribution for the advertisers' attempt at influencing me for their profit.

[ Posté le 18 juillet 2018 à 16:34 | pas de commentaire | ]

Mardi, 22 mai 2018

ANSI colors and Solarized

Traduction: [ Google | Babelfish ]

Catégories : [ Informatique ]

The Solarized color scheme redefines some of the standard basic ANSI colors, making some color combinations unsuitable for display. In particular, bright green, bright yellow, bright blue and bright cyan are tones of grey instead of the expected colors.

Also, some terminals interpret bold text as bright colors, turning e.g, bold green into a shade of grey instead of the expected green. At least in URxvt, setting intensityStyles: False will prevent bold text from being displayed in bright colors (but will still be displayed in a bold font).

When redefining color schemes for terminal applications using ANSI colors, these are possible combinations, using the usual ANSI color names. Note that bright colors are usually not available as background colors.

Solarized Light default background (ANSI white)

Normal: black red green yellow blue magenta cyan (light)grey

Bright: black/grey red green yellow blue magenta cyan white

ANSI (Light)Grey background

Normal: black red green yellow blue magenta cyan (light)grey

Bright: black/grey red green yellow blue magenta cyan white

Solarized Dark default background (ANSI bright black/grey)

Normal: black red green yellow blue magenta cyan (light)grey

Bright: black/grey red green yellow blue magenta cyan white

ANSI Black background

Normal: black red green yellow blue magenta cyan (light)grey

Bright: black/grey red green yellow blue magenta cyan white

[ Posté le 22 mai 2018 à 23:21 | pas de commentaire | ]

Dimanche, 18 février 2018

From How Far to Watch TV?

Traduction: [ Google | Babelfish ]

Catégories : [ Science ]

The distance l from the TV depends on the desired horizontal viewing angle a, the screen's diagonal d and the number N of pixels on a row. Additionally, we will assume the screen's aspect ratio r to be 16:9 and the human eye's smallest angle that can be seen e to be 31.5 arcseconds.

Let R be the ratio between the diagonal and the width of the screen:

R = √(1 + 1/r2)

We can then write a relationship between a, N and e:

tan(a / 2) = NR tan(e / 2)    (1)

From (1) we can deduce that for any given e, there is a maximum horizontal viewing angle amax above which pixels can theoretically be distinguished.

For N = 1920 (FullHD), amax = 19.1°. With a 4K screen, amax = 37.2°.

We can also write a relationship between horizontal viewing angle, screen diagonal and distance:

d / l = 2 R tan(a / 2)    (2)

The ideal value or a is a matter of debate, but THX defines a horizontal viewing angle of at least 36° (the screen viewed from the rear seat of a THX theatre), while SMPTE suggests 30°. A value of 20° is also mentioned.

With a 4K screen, amax = 37.2° and (2), we draw that the ideal distance is 1.30 times the screen's diagonal. For example:

  • 132 cm for a 40" screen
  • 165 cm for a 50" screen
  • 197 cm for a 60" screen

With a = 30°, the ideal screen distance is 1.63 times the screen's diagonal. For example:

  • 132 cm for a 32" screen
  • 166 cm for a 40" screen
  • 207 cm for a 50" screen
  • 248 cm for a 60" screen

With a FullHD screen and a compromise angle a = 20°, the ideal distance is 2.47 times the screen diagonal. For example:

  • 201 cm for a 32" screen
  • 251 cm for a 40" screen
  • 314 cm for a 50" screen

EDIT: The value of e is valid for a high contrast between two pixels. Most images do not have such a high contrast, and therefore a value of e = 1 arcminute is a reasonnable assumption in practice.

From this follows that for N = 1920 (FullHD), amax = 35.5° (1.36 times the screen diagonal). With a 4K screen, amax = 65.3° (0.68 times the screen diagonal). This also gives a reasonnable value for standard definition PAL TV with N = 1024, amax = 19.4° (2.55 times the screen diagonal).

That would allow for larger horizonat viewing angles, such as 45° (1.05 times the screen diagonal) or 60° (0.75 times the screen diagonal) when viewing a 4K screen. At such short distances one must however take into account the possible lack of comfort due to the physical closeness of smaller screens.

[ Posté le 18 février 2018 à 18:41 | pas de commentaire | ]

Samedi, 27 janvier 2018

Petits pains pour hamburgers

Catégories : [ Cuisine ]

Recette adaptée de la recette de pain de mie du blog Pique-assiette.

Ingrédients

  • 300 g farine
  • 3 g levure sèche
  • 1 c. café poudre à lever
  • 1 c. soupe sucre
  • 200 mL lait tiède
  • 5 g sel
  • 30 g beurre mou
  • huile
  • 9 cercles métalliques de 9 cm de diamètre, huilés à l'intérieur
  • plaque à four et papier cuisson
  • lèche-frite (profonde si possible)
  • pinceau

Préparation

  • Mélanger tous les ingrédients secs, ajouter le lait et mélanger.
  • Ajouter le beurre et pétrir 5 min
  • Laisser reposer 1 h
  • Former 9 boules (de 61 g chacune), les étirer en disque et placer chaque disque sur la plaque couverte du papier cuisson, au centre d'un cercle
  • Passer le desssus des disque à l'eau à l'aide du pinceau
  • Laisser reposer 2 h
  • Préchauffer le four à 200 °C. Une fois chaud, y placer sur le fond la lèche-frite avec 1 L d'eau bouillante
  • Cuire les petits pains pendant 15 min
  • Les petits pains se conservent plusieurs jours dans une boite hermétique

[ Posté le 27 janvier 2018 à 23:54 | pas de commentaire | ]

Mercredi, 7 juin 2017

DNS 3: NSEC3

Traduction: [ Google | Babelfish ]

Catégories : [ Informatique ]

Third part of my DNS setup notes: changing the DNSSEC config from NSEC to NSEC3. This has be on my TODO list for over a year now, and despite the tutorial at the ISC Knowledge Base, the ride was a bit bumpy.

Generating new keys

The previous keys were using the default RSASHA1 algorithm (number 5), and we need new keys using RSASHA256 (number 8).

Generating those keys was easy. On a machine with enough available entropy in /dev/random (such as a Raspberry Pi with its hardware random number generator) run:
dnssec-keygen -a RSASHA256 -b 2048 -3 example.com
dnssec-keygen -a RSASHA256 -b 2048 -3 -fk example.com

Transfer the keys to the server where Bind is running, into the directory where Bind is looking for them.

Loading the keys

The documentation says to load the keys with
rndc loadkeys example.net
but that ended with a cryptic message in the logs:
NSEC only DNSKEYs and NSEC3 chains not allowed

Apparently, the algorithm of the old keys does not allow to use NSEC3 (which I knew) so Bind refuses to load these keys (which I didn't anticipate). I eventually resorted to stopping Bind completely, moving away the old keys, deleting the *.signed and *.signed.jnl files in /var/cache/bind/ and restarting Bind. The new keys got then automatically loaded, and the zone was re-signed using NSEC.

NSEC3 at last

I could then resume with the tutorial.

First, generate a random salt:

openssl rand -hex 4
(let's assume the result of that operation was “d8add234”).

Then tell Bind the parameters it needs to create NSEC3 records:
rndc signing -nsec3param 1 0 10 d8add234 example.com.
Then check that the zone is signed with
rndc signing -list example.com

Linking the zones

Since the keys have changed, you need to update your domain's DS record in your parent domains DNS, using the tool provided to you by your registrar. This step is the same as in the “Linking the zones” of the previous part of this tutorial.

[ Posté le 7 juin 2017 à 23:15 | pas de commentaire | ]

Dimanche, 2 avril 2017

Gâteau arc-en-ciel

Catégories : [ Cuisine ]

Préparer une recette de gâteau au yaourt simple. J'ai ajouté 12g de sucre vanillé pour le goût. À la place du moule à cake, utiliser un moule à manqué beurré et fariné.

gateau_arc_en_ciel-1

Séparer la pâte en six portions, et colorer chaque portion avec un colorant alimentaire (rouge, jaune plus rouge pour l'orange, jaune, vert, bleu et rouge plus bleu pour le violet)

gateau_arc_en_ciel-2

Verser la pâte rouge au centre du moule. Par dessus, verser lentement la pâte orange en la faisant tomber d'une hauteur la plus faible possible. Si possible, tourner le moule d'un quart de tour au cours du versement pour que la pâte forme un disque plutôt qu'une ellipse.

gateau_arc_en_ciel-3

Verser de la même manière le jaune, puis le vert, le bleu et le violet.

gateau_arc_en_ciel-4

Cuire 20-25 min au four à 200 °C. Une aiguille enfoncée dans le gâteau doit ressortir propre.

gateau_arc_en_ciel-5

Déguster avec les yeux avant de manger :)

[ Posté le 2 avril 2017 à 18:35 | pas de commentaire | ]

Dimanche, 19 février 2017

Cookies aux pépites de chocolat

Catégories : [ Cuisine ]

Une recette adaptée de Cookwise avec des ingrédients disponibles en Finlande.

Ingrédients

Pour environ 32 cookies.

  • 140g + 20g beurre doux, mou
  • 125g noix de pécan
  • 200g fariinisokeri
  • 1 c. à soupe extrait de vanille liquide Dr. Oetker
  • 1 petit oeuf (53g)
  • 200g Kinnusen myllyn luomu vehnäjauho (10.4 % de protéines)
  • 1,5 c. à café poudre à lever
  • 1 pincée de sel
  • 80g chocolat noir 72% Pirkka luomu
  • 100g chocolat au lait Panda

Préparation

  • Préchauffer le four à 180 °C, étaler les noix de pécan sur une plaque à biscuits.
  • Mélanger (30s au mixeur) la farine, la levure chimique et le sel.
  • Battre (au batteur éléctrique équipé d'un fouet) 140g de beurre avec le sucre et l'extrait de vanille pour obtenir un mélange homogène. Ajouter l'oeuf et continuer à battre.
  • Faire griller les noix de pécan au four pendant 8 min.
  • Incorporer peu à peu le mélange de farine à l'appareil.
  • Lorsque les noix sont grillées, les mélanger à 20g de beurre et laisser refroidir un peu.
  • Hacher le chocolat au couteau en morceaux d'au plus 5mm et mélanger brièvement à l'appareil.
  • Hacher les noix au couteau en morceaux d'au plus 5mm et mélanger brièvement à l'appareil.
  • Laisser reposer 2h30 au réfrigérateur.
  • Préchauffer le four à 180 °C.
  • Placer 8 ou 9 boules de pâte grossièrement formées d'environ 35 – 40mm de diamètre sur une plaque en aluminium recouverte d'une feuille de cuisson réutilisable. Replacer le reste de pâte au réfrigérateur.
  • Cuire pendant 10 min au four à chaleur tournante.
  • Laisser refroidir 5 min puis déplacer les cookies à l'aide d'une spatule sur une grille.
  • Répéter les trois étapes précédentes avec le reste de la pâte.
  • Conserver dans une boite à biscuits en métal.

[ Posté le 19 février 2017 à 11:45 | pas de commentaire | ]

Dimanche, 5 février 2017

SSH access to a Buffalo LS210 NAS

Traduction: [ Google | Babelfish ]

Catégories : [ Informatique ]

My old NAS that I use for backups is now over 10 years old, and while it still works and faithfully backs-up my files every night, it has an always increasing probability to fail.

I decided to replace it with a Buffalo Linkstation 210, that offers 2 TB of space for 140 EUR, making it cheaper than building my own device, at the risk of not being able to use it the way I want it, being a commercial device that wasn't designed with my needs in mind.

The way I want to use the NAS is that it boots automatically at a given time, after which the backup script on the desktop starts, transfers the needed files, and puts the NAS to sleep mode again. That last feature was available on my previous device, but not anymore on the LS210. Hence the need to make it do my bidding.

Moreover, the Web UI for administrating the LS210 is horribly slow on my desktop due to bad Javascript code, so the less I have to use it, the better.

The device

The way to gain SSH access seems to vary depending on the exact version of the device and the firmware. Mine is precisely a LS210D0201-EU device with firmware version 1.63-0.04, bought in January 2017.

Initial setup

I found instructions on the nas-central.com forum. It relies on a Java tool called ACP_COMMANDER that apparently uses a backdoor of the device that is used for firmware updates and whatnots, but can apparently be used for running any kind of shell command on the device, as root, using the device's admin user's password.

Let's assume $IP is the IP address of the device and "password" is the password of the admin user on the device (it's the default password).

You can test that ACP_COMMANDER works with the following command that runs uname -a on the device:
java -jar acp_commander.jar -t $IP -ip $IP -pw password -c "uname -a"
It will output some amount of information (including a weird message about changing the IP and a wrong password ), but if you find the following in the middle of it, it means that it worked:
>uname -a
Linux LS210D 3.3.4 #1 Thu Sep 17 22:55:58 JST 2015 armv7l GNU/Linux

Starting the SSH server is then a matter of

  • enabling the SSH feature (which, on this cheap model, is disabled by default),
  • starting the SSH server,
  • changing root's password to "root" so that we can login (the password can be changed to something more secure later).
This is achieved through the following commands:
java -jar acp_commander.jar -t $IP -ip $IP -pw password -c "sed -i 's/SUPPORT_SFTP=0/SUPPORT_SFTP=1/g' /etc/nas_feature"
 
java -jar acp_commander.jar -t $IP -ip $IP -pw password -c "/etc/init.d/sshd.sh start"
 
java -jar acp_commander.jar -t $IP -ip $IP -pw password -c "(echo root;echo root)|passwd"

On some older version of the firmware, root login was disabled in SSH, and needed to be allowed with

java -jar acp_commander.jar -t $IP -ip $IP -pw password -c "sed -i 's/#PermitRootLogin/PermitRootLogin/g' /etc/sshd_config"
but that is not the case on my device.

Once this is done, I can run
ssh root@$IP

and login with password "root" (which was set earlier).

One nasty feature of the device is that the /etc/nas_feature file gets rewritten on each boot through the initrd. One last step is then to edit /etc/init.d/sshd.sh and to comment out near the beginning of the file the few lines that check for the SSH/SFTP support and exit in case SSH is not supported:
 #if [ "${SUPPORT_SFTP}" = "0" ] ; then
 #        echo "Not support sftp on this model." > /dev/console
 #        exit 0                                               
 #fi

According to a comment on the nas-central forum,

“The /etc/nas_feature is restored on each reboot, so sshd does not run on boot. Even if you change the init script.”

but I found this not to be true.

I checked that this setup really resists reboots, by logging in as root and typing reboot. SSH access was still possible after the device had restarted.

Going further

It was then possible to setup SSH access using keys; RSA and ECDSA are supported but not ED25519.

One missing feature is the sudo command, but I can live without it I guess.

I have then setup the device to wake up at a given time (through the “Sleep timer” feature in the administration Web UI). It is then possible to put the device to sleep by running as root
PowerSave.sh standby
The command is located in /usr/local/sbin, and this path is not available for non-interactive logins, so I wrote the following wrapper script to shutdown the device:
#!/bin/sh
 
ssh root@$IP 'bash -l -c "PowerSave.sh standby"'

After having been put into standby, the device will then start automatically on the set time, or when the “function” button on the back is pressed.

[ Posté le 5 février 2017 à 12:52 | pas de commentaire | ]

Mercredi, 3 août 2016

Patching a Debian Package

Traduction: [ Google | Babelfish ]

Catégories : [ Informatique ]

I finally found a tutorial that explains how to patch existing Debian packages. I just did that for wmweather that stopped working after NOAA changed the URL where the METAR data is published.

In a nutshell, and in case the original web page disappears, it goes like that:

apt-get source wmweather
cd wmweather-2.4.5
dch --nmu
mkdir debian/patches # because it didn't exist
quilt new update-url.patch
quilt edit src/wmweather.c
quilt refresh
debuild -us -uc

After that I could simply install the new package that had been created.

[ Posté le 3 août 2016 à 22:10 | pas de commentaire | ]

Mardi, 12 juillet 2016

Harmonie et Gamme

Catégories : [ Science ]

Les musiciens et les mathématiciens se sont cassés les dents pendant des milliers d'années sur la définition de la gamme, des notes, des intervalles et des accords. Ce qui suit est le résultat de mes refexions sur la raison dei ces difficultés.

Soit une note, appelée C1, de fréquence f. Lorsqu'on joue cette note sur un instrument, des harmoniques de fréquence 2 f, 3 f… sont produites en même temps. L'octave C2 (de fréquence 2 f) est donc naturellement en harmonie avec C1. Lorsqu'on joue en même temps C1 et C2 de même niveau sonore, les deux fréquences interfèrent et produisent un son de fréquence égal à la moyenne de C1 et C2, donc 3/2 f, que l'on appellera G1. Ce nouveau son est modulé par une fréquence perçue 2 f - f = f, trop élevée dans la pratique pour entendre le battement. L'intervalle de fréquence C1 – G1 est appelé une quinte juste.

De la même manière, lorsqu'on joue en même temps C1 et G1 de même niveau sonore, on obtient une interférence de fréquence égale à la moyenne des fréquences de C1 et G1, soit 5/4 f. On appelle cette nouvelle note E1. L'intervalle C1 – E1 est appelé une tierce majeure, et l'accord C1 – E1 – G1 est appelé accord majeur.

En théorie de la musique, on peut traverser toutes les notes de la gamme en partant de C1 et montant d'une quinte, puis en répétant l'opération. Ainsi, on passe de C1 à G1, puis en montant encore d'une quinte on passe de G1 à D2, puis A2, puis E3 et B3. Enfin, en montant d'une quinte depuis F0, on arrive à C1. On pourrait donc imaginer calculer les fréquences de D, F, A et B de cette manière:

  • En augmentant F0 (fréquence 2/3 f) d'une quinte (donc en multipliant par 3/2) on arrive bien à C1 (fréquence f) ; ceci donne une fréquence de 4/3 f pour F1.
  • G1 (3/2 f) augmenté d'une quinte (multiplié par 3/2) donne D2 (9/4 f), et donc D1, une octave plus bas, a une fréquence de 9/8 f.
  • D1 augmenté d'une quinte donne de la même manière A1 (27/16 f).
  • A1 augmenté d'une quinte donne E2 (81/32 f), donc E1 a une fréquence de 81/64 f.

Mais on a vu plus haut que E1 devait avoir une fréquence de 5/4 f (soit 80/64 f) pour être en harmonie avec C1 et G1 ! C'est donc là que l'édifice commence à s'écrouler : la tierce C1 – E1 n'a pas le même rapport de fréquences que la tierce C2 – E2 ; en d'autres termes, E2 n'est pas exactement une octave au dessus de E1 si on s'en tient à la définition « par quintes ». Les deux définitions de la tierce étant incompatibles, il a fallu trouver une solution.

La manière dont les fréquences des notes sont définies s'appelle le tempérament, et de nombreux tempéraments on été inventés au fil des siècles. La solution retenue depuis le XIXè siècle est le tempérament égal, où tous les demi-tons sont séparés d'un rapport de fréquence égal à 21/12. Ce tempérament donne des accords qui sont tous faux, mais suffisamment peu faux pour que ce ne soit pas gênant.

[ Posté le 12 juillet 2016 à 12:43 | pas de commentaire | ]

Mercredi, 27 avril 2016

DNS 2: DNSSEC

Traduction: [ Google | Babelfish ]

Catégories : [ Informatique ]

Second part of my DNS setup notes, this time about DNSSEC. The following notes assumes there is already a running instance of Bind 9 on a Debian Jessie system for an imaginary domain example.com, served by a name server named ns.example.com.

The version of Bind 9 (9.9.5) on Debian Jessie supports "inline signing" of the zones, meaning that the setup is much easier than in the tutorials mentioning dnssec-tools or opendnssec.

Again these notes are mostly based on the example from the ISC Knowledge Base.

Setting up a signed zone

If you have a delegated zone (like home.example.com from the first part), do the following for both example.com and home.example.com.

Generate the keys
On a machine with enough available entropy in /dev/random (such as a Raspberry Pi with its hardware random number generator ) run
dnssec-keygen example.com
dnssec-keygen -fk example.com

(you can add the -r /dev/urandom option to the command if you dare, if /dev/random is too slow. It can literaly take hours to generate those keys otherwise).

Transfer the keys to the server where Bind is running.

Configure Bind

Create a /etc/bind/keys directory where to put the keys. Ensure the .private files belong to root, are readable by the group bind and not by other users.

In named.conf.options add to the options block:
options {
        …
        dnssec-enable yes;
        dnssec-validation auto;
        dnssec-lookaside auto;
        …
};

Create in /var/cache/bind a symbolic link to /etc/bind/db.example.com.

In named.conf.local, in the zone "example.com" block, add
zone "example.com" {
				…
        #file "/etc/bind/db.example.com";
        file "/var/cache/bind/db.example.com";
        key-directory "/etc/bind/keys";
        auto-dnssec maintain;
        inline-signing yes;
};

Note that the db file must point to a file in /var/cache/bind, not in /etc/bind. This is because bind will create a db.example.com.signed file (among other related journal files), constructed from the path of the "file" entry in the zone declaration, and it will fail doing so if the file is in /etc/bind, because Bind would attempt to create the .signed file in this read-only directory.

Then reload the configuration with
rndc reconfig
Then check that the zone is signed with
rndc signing -list example.com

Linking the zones

Your registrar should provide a tool (most probably Web based) where to put DS records for your domain.

On the DNS server, generate a DS record with
dig @localhost dnskey example.com | /usr/sbin/dnssec-dsfromkey -f - example.com
Copy and paste these lines in the registrar's tool. After a little while, you should be able to query the DS record with
dig @localhost -t ds example.org
If you have a delegated zone such as home.example.com, generate a DS record for that zone with
dig @localhost dnskey home.example.com | /usr/sbin/dnssec-dsfromkey -f - home.example.com
and place these lines in db.example.com (i.e., the db file for the parent zone). Change the serial number of the zone in the same file and run
rndc reload
You should then be able to query the DS record with
dig @localhost -t ds home.example.org

You can use Verisign's DNS debugging tool to check that the signatures are valid and DNSViz to view the chain of signatures from the TLD DNS down to your DNS. This also helped me figure out that my zone delegation was incorrect and caused discrepancies between my primary DNS server and the secondary server.

[ Posté le 27 avril 2016 à 19:21 | 1 commentaire | ]

DNS 1: Dynamic DNS

Traduction: [ Google | Babelfish ]

Catégories : [ Informatique ]

Now that I have my own server, I can finally have my own DNS server and my own domain name for my home computer that has a (single) dynamic IP address.

The following notes assumes there is already a running instance of Bind 9 on a Debian Jessie system for an imaginary domain example.com, served by a name server named ns.example.com and you want to dynamically update the DNS records for home.example.com. This is largely based on the Debian tutorial on the subject, solving the problem that bind cannot modify files in /etc/bind.

On the server

Create a shared key that will allow to remotely update the dynamic zone:
dnssec-keygen -a HMAC-MD5 -b 128 -r /dev/urandom -n USER DDNS_UPDATE
This creates a pair of files (.key and .private) with names starting with Kddns_update.+157+. Look for the value of Key: entry in the .private file and put that value in a file named /etc/bind/ddns.key with the following content (surrounding it with double quotes):
key DDNS_UPDATE {
        algorithm HMAC-MD5.SIG-ALG.REG.INT;
        secret "THIS IS WHERE YOU PUT THE KEY";
};

You can then delete the two Kddns_update.+157+ files. Ensure that /etc/bind/ddns.key belongs to "root" and to the "bind" group, and is not readable by other users.

Then in named.conf.local, include the key file and declare a new zone:

include "/etc/bind/ddns.key";

zone "home.example.com" { type master; file "/var/cache/bind/db.home.example.com"; allow-update { key DDNS_UPDATE; }; journal "/var/cache/bind/db.home.example.com.jnl"; };

In /var/cache/bind create the file db.home.example.com by copying /etc/bind/db.empty and adapting it to your needs. For convinience, create a db.home.example.com symbolic link in /etc/bind pointing to /var/cache/bind/db.home.example.com.

In db.example.com (that is, the parent zone), add a NS entry to delegate the name home.example.com to the DNS server of the parent zone:
home.example.com NS ns.example.com

You can now reload the bind service to apply the configuration changes.

I also found examples of how to test the dynamic zone with nsupdate.

On the home computer

I decided to use ddclient 3.8.3 because it supports dynamic dns updates using the nsupdate tool. I backported that version of ddclient manually from a Debian Testing package; it's written in Perl and the backporting is trivial.

Copy /etc/bind/ddns.key from the server to /etc/ddns.key on the home computer (the one running ddclient), ensuring only root can read it. Then add the following to /etc/ddclient.conf (be careful with the commas, there is no comma at the end of the second last line):
protocol=nsupdate, \
zone=home.example.com, \
ttl=600, \
server=THE_IP_ADDRESS_OF_THE_DNS_SERVER, \
password=/etc/ddns.key \
home.example.com

You can then try out the new setup.

[ Posté le 27 avril 2016 à 18:15 | 1 commentaire | ]

Mercredi, 13 avril 2016

Minimum Password Entropy

Traduction: [ Google | Babelfish ]

Catégories : [ Informatique ]

What is the minimum entropy for my home computer's password?

In recent (post-2007) Debian (and probably other) Linux distributions, the passwords are stored in /etc/shadow using the sha512crypt algorithm. According to Per Thorsheim, with 2012 hardware, a single Nvidia GTX 580 could make 11,400 attempts at brute-force cracking such a password. This means that a log2 11,400 = 13.5 bit password could be cracked in 1 second.

To have a password that would resist a year to such a brute-force attack, one must multiply the password complexity by 86,400×365 (seconds per year) i.e., add 24.5 bits to the password for a total of 38 bits.

But this password is guaranteed to be cracked in a year. To make the probability of cracking such a password much lower, let's say less than 0.01, one must increase the password's complexity by a hundred times i.e., add 6.7 bits. We now have a minimum of 44.7 bits.

If one does not want to change the password for the next 10 years (because one is lazy), one must again increase the complexity tenfold (that's another 3.3 bits for a total of 48 bits) and account for the increase in processing power in the coming years. Between 2002 and 2011, CPU and GPU computing power has been multiplied by 10 and 100 respectively i.e., +0.37 and +0.74 bits/year. That means that the password's complexity must be increased by 0.74 ×10 = 7.4 bits. We have now reached 55.4 bits.

Now we need to guess who are the password crackers. How many such GPU will they put together? Titan has 18,688 GPUs (add another 14.2 bits to stay ahead of it), and the (more affordable) machine that cracked LinkedIn leaked passwords had 25 GPUs (requiring to add only extra 4.6 bits).

Assuming the crackers have a 25-GPU setup and not a gigantic cluster, 60 bits should be perfectly safe. If they are a government agency with huge resources and your data is worth spending the entirety of that cluster's energy for 10 years, 70 bits is still enough.

The same article also mentions an Intel i7, 6-core CPU would make 1,800 attempts per second i.e., 10.8 bits. For a password that must resist for 10 years, that would mean 49 bits. Titan has 300,000 CPU cores (50,000 times more than the i7), so that makes an extra 15.6 bits for a total of 64.6 bits. The Tianhe-2 has 3,120,000 cores, adding 19 bits to the original 49 bits, leading to 68 bits total.

In summary, 70 bits is enough. If you are lazy and not paranoid, 60 bits are still enough. If you think the crackers will not use more than 32 i7 CPUs for a month to try and break your password (adding 2.4 + 21.3 bits to the original 10.2 bits), 48.5 bits are still enough.

[ Posté le 13 avril 2016 à 19:20 | pas de commentaire | ]

Dimanche, 13 mars 2016

Galettes de Sarrassin

Catégories : [ Cuisine ]

Ingrédients

  • 150g farine de sarrassin
  • 20g farine de froment
  • 1 pincée de sel
  • 1 oeuf
  • 250 mL lait
  • 200 mL cidre

Préparation

Mélanger les farines et de sel. Y ajouter l'oeuf et mélanger pour absorber une partie de la farine et obtenir une pâte épaisse. Délayer progressivement avec le lait, puis avec le cidre. Laisser reposer 1 à 2 heures. Faire cuire chaque galette dans une poële très chaude et huilée.

[ Posté le 13 mars 2016 à 20:27 | pas de commentaire | ]

Samedi, 12 mars 2016

Nouveau serveur

Catégories : [ Informatique ]

Le blog (et le reste de mes pages Web) a déménagé sur un nouveau serveur (une machine virtuelle hébergée chez shellit.org. Après longue réflexion et tergiversations, et afin de continuer la série des machines dont le nom se termine en « kone », j'ai décidé de l'appeler « lentokone », koska se on kone joka on pilvissä.

J'en ai profité pour recommencer à jouer les administrateurs système et j'ai installé des serveurs DNS, SMTP, IMAP, HTTP pour gérer mon domaine moi-même.

[ Posté le 12 mars 2016 à 15:30 | pas de commentaire | ]

Dimanche, 17 janvier 2016

Vue du bureau

Catégories : [ Râleries ]

Il faisait beau vendredi, alors j'ai pris des photos depuis les fenêtres du bureau.

Vue_du_bureau_201601_1 Coté lac.

Vue_du_bureau_201601_2 Coté lac aussi. On peut voir la piste de patin à glace sur le lac.

Vue_du_bureau_201601_3 Coté gare.

[ Posté le 17 janvier 2016 à 14:10 | pas de commentaire | ]

Mercredi, 23 décembre 2015

Photo haute vitesse

Catégories : [ Bricolage/Arduino ]

hsphoto-ensemble

Cet appareil n'a pas de nom, mais il sert à controller un appareil photo et un flash pour prendre des photos d'objets qui tombent. Un rayon laser (récupéré d'un pointeur laser rouge bas de gamme) dont la présence est détectée par un phototrasistor sensible à la lumière visible est interrompu par l'objet qui tombe, et après un temps déterminé, le flash est déclenché.

Le code est disponible.

hsphoto-interface

L'appareil utilise un RBBB (compatible Arduino, mais dans un format plus compact) pour contrôler un écran LCD alphanumérique, l'appareil photo via sa télécommande par câble, et le flash via son sabot. Il permet aussi de règler le délai entre la détection de la chute de l'objet et la prise de la photo. On peut en outre règler la longueur de l'impulsion du flash (ce qui n'est pas très utile apparemment, étant donné que cette durée n'a pas l'air d'avoir d'influence sur la durée du flash, mais cette durée détermine aussi le délai entre le déclenchement du flash et la fermeture de l'obturateur de l'appareil photo). En outre, on peut choisir à quel moment l'obturateur sera ouvert (avant de faire tomber l'objet à photographier, au moment où celui-ci coupe le faisceau laser, ou le mode manuel où l'utilisateur a la responsabilité d'ouvrir l'obturateur), et l'envoi ou non d'une impulsion pour effectuer la mise au point (la télécommande filaire est conçue de sorte à ce que le signal de mise au point soit toujours envoyé avant le signal d'ouverture de l'obturateur, il se peut que l'appareil ne fonctionne pas correctement si le second n'est pas précédé du premier).

hsphoto-pcb

Le RBBB est alimenté par 4 batteries rechargeables NiMH, qui fournissent ensemble une tension maximale de 5,4 V, juste en dessous de la limite maximum du microcontrolleur (5,5 V). Ceci permet de se passer d'un régulteur de tension, à condition de ne pas utiliser de piles alcalines (qui produiraient une tension trop élevée, 6,6 V au maximum).

Une des difficultés a été que le laser tend à chauffer, ce qui diminue environ de moitié sa luminosité au bout de 30 s. À ce moment, le laser n'est alors plus assez puissant pour être détecté par le phototransitor. La seule solution est de ne pas laisser au laser le temps de chauffer.

hsphoto-cadre

Une autre difficulté a été la construction du cadre en bois qui porte le laser et le phototransistor : il n'est pas parfaitement plan (je voulais le rendre démontable et j'ai donc utilisé des angles en acier à visser, mais comme je n'ai pas réussi à visser les vis bien verticalement, elles ont déplacé légèrement les angles et tordu les quatre morceaux de bois). De plus, il n'est pas facile de percer un trou bien droit (pour recevoir le laser) et aligné avec un trou similaire (pour recevoir le phototransitor) sur le coté opposé du cadre.

hsphoto-laser

Pour aligner le laser sur le phototransistor, il faut donc tourner un peu le premier dans son logement jusqu'à ce que le point rouge atteigne le centre du phototransistor. L'appareil dispose d'ailleurs d'un mode de fonctionnement où le laser est allumé en permanence et où l'utilisateur peut voir si le phototransistor est correctement éclairé.

La dernière difficulté a été de me rendre compte que le temps de chute de l'objet (entre le moment où le laser est interrompu et le moment où la photo doit être prise) dépend de la vitesse de l'objet au moment où il passe dans le faisceau laser, donc de la hauteur (au dessus du faisceau) d'où l'objet a été laché. Pour obtenir des expériences répétables, il faut donc faire tomber l'objet à partir du support sur lequel il repose, et il faut donc que ce support soit à une distance connue du faisceau. Le support est donc un morceau de carton ondulé percé d'un trou assez grand pour laisser passer l'objet (mais pas trop grand pour que l'objet ne puisse pas tomber à coté du faiscea) posé sur le cadre en bois. La distance d entre le haut du carton et le faisceau, la hauteur de chute h du haut du carton jusq'à l'endroit où la photo est prise et le temps de chute t sont liés par l'équation suivante : t = √(2/g) × (√h - √d) où g est l'accélération de la pesanteur.

hsphoto_de_1 hsphoto_azrael hsphoto_bonhomme

[ Posté le 23 décembre 2015 à 23:45 | pas de commentaire | ]

Mercredi, 9 décembre 2015

BÉPO 3

Catégories : [ Informatique ]

Au bout de 6 semaines, j'arrive à taper lentement en aveugle (ou alors vite en faisant énormément de fautes). J'ai tendace à confondre mains droite/gauche et majeur/annulaire. Si je me concentre ça va, mais c'est vite fatigant.

Sur le Typematrix du boulot ça va plus ou moins, mais le clavier normal (donc tordu) de la maison est une plaie, les doigts tombent systématiquement entre les touches du quart droit.

[ Posté le 9 décembre 2015 à 22:18 | pas de commentaire | ]

Samedi, 31 octobre 2015

BÉPO 2

Catégories : [ Informatique ]

Après 8 jours, ça commence à venir, mais pas vite. Taper en aveugle demande beaucoup de concentration.

BÉPO en disposition par défaut (tout du moins jusqu'au prochain redémarrage du serveur X), Scroll Lock permettant de basculer vers la disposition fi :

setxkbmap "fr,fi" "bepo,classic" "grp:sclk_toggle"

[ Posté le 31 octobre 2015 à 12:12 | pas de commentaire | ]

Dimanche, 25 octobre 2015

Bépo 1

Catégories : [ Informatique ]

Vendredi (il y a 2 jours), je me suis mis au BÉPO. C'est dur et je ne tape pas vite. Je fais des exercices.

[ Posté le 25 octobre 2015 à 11:18 | pas de commentaire | ]

Dimanche, 6 septembre 2015

Noursella v2

Catégories : [ Cuisine/Choco Noursy ]

Deuxième version du Noursella, cette fois-ci tartinable à température ambiante.

Ingrédients

  • 20g chocolat au lait
  • 50g sucre glace
  • 30g huile neutre (navette)
  • 25g cacao
  • 80g pâte de noisette (100% noisettes, grillées puis broyées)

Préparation

Faire fondre le chocolat au lait (p. ex. 1 min au micro-ondes). Y ajouter le sucre glace et le cacao tamisés, et mélanger. Délayer avec l'huile puis avec la pâte de noisette. Laisser reposer une nuit.

Commentaires

  • Liquide visqueux juste après préparation, devient tartinable après un temps de repos.

[ Posté le 6 septembre 2015 à 11:06 | pas de commentaire | ]

Samedi, 22 août 2015

Noursella v1

Catégories : [ Cuisine/Choco Noursy ]

Après des années de pause, j'ai retenté de fabriquer ma propre pâte à tartiner chocolat et noisette, cette fois-ci à partir de pâte de noisette.

Ingrédients

  • 60g sucre glace
  • 30g huile neutre (navette)
  • 30g cacao
  • 80g pâte de noisette (100% noisettes, grillées puis broyées)

Préparation

Tamiser le sucre glace et le cacao, le mélanger puis délayer avec l'huile puis avec la pâte de noisette. Conserver au réfrigérateur.

Commentaires

  • Liquide visqueux (comme du miel) à température ambiante, devient tartinable à température du réfrigérateur.
  • Facile à préparer, contrairement aux expériences précédentes (ici, un bol et une cuillère suffisent).
  • La texture granuleuse au début semble devenir moins granuleuse avec le temps.

[ Posté le 22 août 2015 à 14:41 | 1 commentaire | ]