Bon, sur les ordis il y a des programmes qu’on ouvre, on clique un peu partout et puis l’imprimante mange du papier. On peut taper du texte, voir des photos de sa grand mère et même visiter ppgac.org.
Ces applications ont une interface, une representation virtuelle des commandes du programme. Cette interface s’appelle un GUI, Graphical User Interface.
Pour plupart des applications avec un GUI, quand on fait quelque chose, le GUI change pour representer l’action en cours, ou le résultat de l’action. Exemple bête, quand tes dans OpenOffice (une version de word qui ne pue pas de la bouche comme tartif pue des fesses) et que tu tappes des lettres, et bien les lettres apparaissent. Magique non? C’est tout le but du GUI, d’habiller les commandes avec une interface Humaine pour qu’on ne soit pas obligé de taper des commandes comme
zcat /var/log/syslog.1.gz | sed 's/foo/bar/gi' | gzip -9 > /var/log/syslog.1.gz
pour faire des trucs intéréssants. Au passage, avec un GUI, vasy pour faire la commande que j’ai donné en exemple, c’est possible mais pas aussi vite.
Mais où est ce que je veux en venir? Et bien… Quand t’as un GUI et tu fais une connerie, sur OSX il s’affiche une petite fenêtre qui dit un truc dans le style
“Pardonnez moi honorable utilisateur, puis-je, avec le plus grand respect bien sûr, vous faire la remarque que l’action que, dans vôtre grande sagesse, vous avez essayé d’effectuer, n’est pas permise. Je vous remercie de vôtre attention”
Dans Linux le message c’est plus dans le genre
Il s’est produit une erreur, voici les détails:
#{RAILS_ROOT}/vendor/plugins/redbox/lib/redbox_helper.rb:54:in `[]=’
#{RAILS_ROOT}/vendor/plugins/redbox/lib/redbox_helper.rb:54:in `build_hidden_content’
#{RAILS_ROOT}/vendor/plugins/redbox/lib/redbox_helper.rb:16:in `link_to_remote_redbox’
#{RAILS_ROOT}/app/views/property/show.rhtml:63:in `_run_rhtml_property_show’
/opt/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/ associations/association_proxy.rb:110:in `each’
/opt/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/ associations/association_proxy.rb:110:in `send’
/opt/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/ associations/association_proxy.rb:110:in `method_missing’
/opt/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/ associations/has_many_association.rb:90:in `method_missing’
#{RAILS_ROOT}/app/views/property/show.rhtml:57:in `_run_rhtml_property_show’
#{RAILS_ROOT}/app/views/property/show.rhtml:56:in `each’
#{RAILS_ROOT}/app/views/property/show.rhtml:56:in `_run_rhtml_property_show’
/opt/lib/ruby/gems/1.8/gems/actionpack-1.12.5/lib/action_view/ base.rb:316:in `send’
/opt/lib/ruby/gems/1.8/gems/actionpack-1.12.5/lib/action_view/ base.rb:316:in `compile_and_render_template’
/opt/lib/ruby/gems/1.8/gems/actionpack-1.12.5/lib/action_view/ base.rb:292:in `render_template’
/opt/lib/ruby/gems/1.8/gems/actionpack-1.12.5/lib/action_view/ base.rb:251:in `globalize_old_render_file’
#{RAILS_ROOT}/vendor/plugins/globalize/lib/globalize/rails/ action_view.rb:18:in `render_file’
/opt/lib/ruby/gems/1.8/gems/actionpack-1.12.5/lib/action_controller/ base.rb:726:in `render_file’
/opt/lib/ruby/gems/1.8/gems/actionpack-1.12.5/lib/action_controller/ base.rb:648:in `render_with_no_layout’
/opt/lib/ruby/gems/1.8/gems/actionpack-1.12.5/lib/action_controller/ layout.rb:245:in `render_without_benchmark’
/opt/lib/ruby/gems/1.8/gems/actionpack-1.12.5/lib/action_controller/ benchmarking.rb:53:in `render’
/opt/lib/ruby/1.8/benchmark.rb:293:in `measure’
/opt/lib/ruby/gems/1.8/gems/actionpack-1.12.5/lib/action_controller/ benchmarking.rb:53:in `render’
/opt/lib/ruby/gems/1.8/gems/actionpack-1.12.5/lib/action_controller/ base.rb:942:in `perform_action_without_filters’
/opt/lib/ruby/gems/1.8/gems/actionpack-1.12.5/lib/action_controller/ filters.rb:368:in `perform_action_without_benchmark’
/opt/lib/ruby/gems/1.8/gems/actionpack-1.12.5/lib/action_controller/ benchmarking.rb:69:in `perform_action_without_rescue’
/opt/lib/ruby/1.8/benchmark.rb:293:in `measure’
/opt/lib/ruby/gems/1.8/gems/actionpack-1.12.5/lib/action_controller/ benchmarking.rb:69:in `perform_action_without_rescue’
/opt/lib/ruby/gems/1.8/gems/actionpack-1.12.5/lib/action_controller/ rescue.rb:82:in `perform_action’
/opt/lib/ruby/gems/1.8/gems/actionpack-1.12.5/lib/action_controller/ base.rb:408:in `send’
/opt/lib/ruby/gems/1.8/gems/actionpack-1.12.5/lib/action_controller/ base.rb:408:in `process_without_filters’
/opt/lib/ruby/gems/1.8/gems/actionpack-1.12.5/lib/action_controller/ filters.rb:377:in `process_without_session_management_support’
/opt/lib/ruby/gems/1.8/gems/actionpack-1.12.5/lib/action_controller/ session_management.rb:117:in `process’
/opt/lib/ruby/gems/1.8/gems/rails-1.1.6/lib/dispatcher.rb:38:in `dispatch’
/opt/lib/ruby/gems/1.8/gems/mongrel-1.0.1/lib/mongrel/rails.rb:78:in `process’
/opt/lib/ruby/gems/1.8/gems/mongrel-1.0.1/lib/mongrel/rails.rb:76:in `synchronize’
/opt/lib/ruby/gems/1.8/gems/mongrel-1.0.1/lib/mongrel/rails.rb:76:in `process’
/opt/lib/ruby/gems/1.8/gems/mongrel-1.0.1/lib/mongrel.rb:618:in `process_client’
/opt/lib/ruby/gems/1.8/gems/mongrel-1.0.1/lib/mongrel.rb:617:in `each’
/opt/lib/ruby/gems/1.8/gems/mongrel-1.0.1/lib/mongrel.rb:617:in `process_client’
/opt/lib/ruby/gems/1.8/gems/mongrel-1.0.1/lib/mongrel.rb:736:in `run’
/opt/lib/ruby/gems/1.8/gems/mongrel-1.0.1/lib/mongrel.rb:736:in `initialize’
/opt/lib/ruby/gems/1.8/gems/mongrel-1.0.1/lib/mongrel.rb:736:in `new’
/opt/lib/ruby/gems/1.8/gems/mongrel-1.0.1/lib/mongrel.rb:736:in `run’
/opt/lib/ruby/gems/1.8/gems/mongrel-1.0.1/lib/mongrel.rb:720:in `initialize’
/opt/lib/ruby/gems/1.8/gems/mongrel-1.0.1/lib/mongrel.rb:720:in `new’
/opt/lib/ruby/gems/1.8/gems/mongrel-1.0.1/lib/mongrel.rb:720:in `run’
/opt/lib/ruby/gems/1.8/gems/mongrel-1.0.1/lib/mongrel/ configurator.rb:271:in `run’
/opt/lib/ruby/gems/1.8/gems/mongrel-1.0.1/lib/mongrel/ configurator.rb:270:in `each’
/opt/lib/ruby/gems/1.8/gems/mongrel-1.0.1/lib/mongrel/ configurator.rb:270:in `run’
/opt/lib/ruby/gems/1.8/gems/mongrel-1.0.1/bin/mongrel_rails:127:in `run’
/opt/lib/ruby/gems/1.8/gems/mongrel-1.0.1/lib/mongrel/command.rb:211:in `run’
/opt/lib/ruby/gems/1.8/gems/mongrel-1.0.1/bin/mongrel_rails:243
/opt/bin/mongrel_rails:18:in `load’
/opt/bin/mongrel_rails:18
Bon, je sais que techniquement, ça c’est une erreur RubyOnRails, mais ça fera l’affaire.
Et puis nôtre ami Windows
Il s’est produit une erreur de type -756546 à l’adresse 0×87678F
Vachement explicite.
Bon, en faite je voulais pas du tout parler de ça, mais ça m’est venu. Imaginez un programme qui n’a pas de GUI, et qui tourne en tâche de fond 24h/24h. Quand ça plante, comment est ce vous allez savoir pourquoi?
Et bien, c’est que viennent les logs, les logs sont en faite des historiques d’activité des programmes. Ils nous permettent de savoir ce que le programme fait, et si ça plante, pourquoi. Mais, imaginez par exemple le serveur MySQL (la base de données) de ppgac. Il tourne 24/24 et chaque requête est écrit dans le log, et il faut dire qu’il y a à peu près 20 requêtes par page. ça en fait des requêtes non? Normalement il y a un programme qui, une fois tous les jours, fait une rotation des logs, c’est à dire que le fichier mysql.log devient le fichier mysql.log.1 et puis un nouveau mysql.log est crée pour prendre la place de l’ancien. ça fait que les fichiers ne deviennent pas trop grands.
Beh chez moi, sur la machine où j’ai MySQL, la rotation ne s’effectuait pas depuis je sais pas combien de temps. Ce qui faisait que j’avais un fichier mysql.log de 527Mo. Pas mal pour un fichier texte.