Ajoute les articles manquants

This commit is contained in:
Yannick Francois
2019-02-24 23:33:14 +01:00
parent a1fc6bf220
commit 3be483b7ea
300 changed files with 16637 additions and 0 deletions
@@ -0,0 +1,135 @@
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>Yannick François - Les pieds dans le code</title>
<meta name="DC.title" content="elsif.fr, site de Yannick François aka yaf aka pouype."/>
<meta name="description" content="Yannick François's website. Senior developer, Code pedagogist. /ut7 teammate, proud member of Electrolab, the crazy hackerspace. Eternel supporter of April, a french association about freesoftware."/>
<meta name="keywords" content="code, développement, lean, agile, logiciel, tdd, objet, ruby, site perso, personnel, ruby on rails, refactoring, openbsd, bsd, libre, creative commons, unix"/>
<meta name="author" content="Yannick François, https://elsif.fr"/>
<meta name="designer" content="Yannick François, https://elsif.fr"/>
<meta name="geo.placename" content="Poissy, Ile de france, France"/>
<meta name="robots" content="index,follow" />
<meta name="language" content="French" />
<meta name="HandheldFriendly" content="True" />
<meta name="MobileOptimized" content="320" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0, minimum-scale=1.0, maximum-scale=1.0" />
<link rel="index" title="Yannick François / Developer" href="https://elsif.fr" />
<link rel="stylesheet" href="/css/knacss.css" media="all"/>
<link rel="stylesheet" href="/css/elsif.css" media="all"/>
<article>
<h1>
Ruby File.open &lsquo;w&rsquo; Acces concurrent
</h1>
<p>Je viens de tomber sur quelque chose d’étrange dans lutilisation de lobjet <a href="http://www.ruby-doc.org/core/classes/IO.html#M002264">IO</a> de <a href="http://ruby-lang.org">Ruby</a> : La gestion des verrous sur les fichiers. Alors jai surement du rater quelque chose, mais voici mon histoire&hellip;</p>
<pre>
{% highlight ruby %}
require 'test/unit'
DUCK="duck"
ELEPHANT="elephant"
SNAKE="snake"
FILE="test_file"
class TestFileConcurrencyAccess &lt; Test::Unit::TestCase
def test_concurrency_access
t1 = Thread.start do
File.open(FILE, "w") do |file|
file.puts SNAKE
file.flush
sleep 8
file.puts DUCK
end
end
File.open(FILE,"r") do |f1|
assert SNAKE, f1.read
end
t2 = Thread.start do
File.open(FILE,"w") do |f|
sleep 2
f.puts ELEPHANT
end
end
t2.join
File.open(FILE,"r") do |f2|
assert ELEPHANT, f2.read
end
t1.join
File.open(FILE,"r") do |f3|
assert SNAKE, f3.readline
assert DUCK, f3.readline
end
end
end
{% endhighlight %}
</pre>
<p><a href="/files/test_file_concurrency_access.rb">fichier source</a></p>
<p>Le resultat dexecution de ce test donne une erreur sur la dernière lecture:</p>
<pre>
{% highlight bash %}
Loaded suite test_file_concurrency_access
Started
E
Finished in 8.003509 seconds.
1) Error:
test_concurrency_access(TestFileConcurrencyAccess):
EOFError: end of file reached
test_file_concurrency_access.rb:38:in `readline
test_file_concurrency_access.rb:38:in `test_concurrency_access
test_file_concurrency_access.rb:36:in `open
test_file_concurrency_access.rb:36:in `test_concurrency_access
1 tests, 3 assertions, 0 failures, 1 errors
{% endhighlight %}
</pre>
<p>Mais ce qui me gène (et qui ne ressort pas dans mon test, je lavoue) cest que jaurais pensé que le deuxième <em>File.open</em> ne puisse pas sexecuté, et me renvoie une Error du type: <em>“Le fichier est déjà ouvert en écriture par quelquun dautres”</em>&hellip; Mais non, et du coup, jai un fichier assez moche qui ne ressemble à rien:</p>
<pre>
elephduck
</pre>
<p>Alors quon pourrait penser obtenir un truc dans le genre:</p>
<pre>
snake
duck
</pre>
<p>Avec éventuellement une erreur sur l’écriture d’éléphant dans le fichier.</p>
<p>Jai également fait un essai en utilisant le code contenu dans chaque thread pour les executer dans deux console différentes, jarrive au même résultat (cest du coup dans test/unit, mais au niveau du contenu de <span class="caps">FILE</span> à la fin, jai là même chose&hellip;)
<a href="http://zone.elsif.fr/write_quickly.rb">Fichier write_quickly.rb pour l’écriture dELEPHANT</a>
<a href="http://zone.elsif.fr/write_slowly.rb">Fichier write_slowly.rb pour l’écriture de SNAKE et DUCK</a></p>
<p>Bref, je suis perplexe. Javoue ne pas avoir envie denvoyer cela sur la <a href="http://www.ruby-lang.org/fr/community/mailing-lists/">mailing-liste Ruby-talk</a>, ni sur celle de <a href="http://jruby.org">JRuby</a> dailleurs (car jai vérifier, jai le même problème en JRuby). Du moins tant que je nai pas creusé un peu plus.</p>
<p>Jai sûrement du faire une erreur quelque part, oublier quelque chose, ou faire quelque chose de travers. <strong>Si quelquun lit cela et à une idée, merci den men parler, je suis preneur !</strong>.</p>
<p>Si cest un comportement souhaité, jaimerais comprendre pourquoi, et si cest un oubli ou une erreur, jaimerais bien aider à trouver une solution.</p>
<p><em>ps: Retour au thème Scribbish que je trouve plus lisible, en attendant que je refasse quelque chose&hellip;</em></p>
<article>
<footer style="font-size:75%;text-align:right"><em><a href="/feed.xml">suivre les articles</a></em></footer>
</body>
</html>