Une série d’astuces et de conseils à propos du Tableur LibreOffice (et évidemment OpenOffice) :
Guake dual screen options
To enable dual screen positionning on guake terminal, apply these patches :
http://guake.org/attachment/ticket/124/multi-monitor.patch
(discussed here : http://guake.org/ticket/124)
I hope these patches will be included in next release
Javascript en 10 minutes
Article original ici, je me permets de le sauvegarder en le copiant ici.
Javascript
(ECMAScript)
Javascript in Ten Minutes
Breakdown…
Basic Types
var intValue = 1; var floatValue = 3.0; var stringValue = "This is a string\n"; var sqString = 'This is also a string';Javascript is a dynamically typed language. Variables are declared with the keyword var. Common simple types are supported.
Arrays
var emptyList = []; var homogenousList = [1, 2, 3]; var heterogenousList = ["one", 2, 3.0];Javascript has built-in collection objects. The Array object is a dynamically typed sequence of Javascript values. They are created with the bracket notation [] or with the new operator on the Array object (e.g. new Array(5)).
Property Maps
var emptyMap = {}; var homogenousMap = {"one": 1, "two": 2, "three": 3}; var heterogenousMap = {"one": 1, "two": "two", "three": 3.0};Along with Arrays are the Object objects. They act as property maps with strings serving as keys to dynamically typed data.
Access
// Dot notation property access window.alert("Homogenous map property \"one\" " + homogenousMap.one); // Subscript notation property access window.alert("Homogenous map property \"two\" " + homogenousMap["two"]);Assignment
homogenousMap["one"] = 10; homogenousMap.two = 20;Removal
delete homogenousMap["one"]; delete homogenousMap.two;Iteration
for (var key in heterogenousMap) { window.alert("Heterogenous map property \"" + key + "\" = " + heterogenousMap[key]); }Functions
var callable = function (message) { // <-- notice assignment window.alert("Callable called with message = " + message); } function createClosure(initial) { var res = function () { initial = initial + 1; window.alert("Closure with modified state " + initial); } return res; } function callCallable(f, x) { f(x); } function composeCallables(f, g, x) { f(g(x)); }Functions are first-class objects. That means that they can be created dynamically, stored, passed and returned just like any other value.
Objects
function MyObject(name, value) { this.name = name; this.value = value; }Javascript supports prototype based object orientation. Not a class type but an object constructor is created for new objects with particular properties. In the example above the this keyword used to reference the ”current instance” of the object. The this object is essentially a property map with members accessed (and initialized) in this example with the dot notation.
The object constructor, MyObject, is an object constructor not in how it’s defined, which looks like any other Javascript function, but in how it’s ”invoked”.
var my = new MyObject("foo", 5);The new operator before the function invokes the function with a newly construced object as this and returns that the initialized object.
Object Prototype
Part of what makes a language object oriented is that data not only has properties but also ”behaviors”. Also known as: member functions; methods; and object messages. To implement a member function in Javascript one would be tempted to write something like what’s below based on the member initialization exampled above.
function BadObject(data) { this.data = data this.memberFunction = function () { // ...functions on data... } }
While the code above will work without error, it does create a new closure for each member function for each new instance of the object. What’s really required is a class level function that works on instance data. But remember, Javascript objects aren’t class based but prototype based. So how do we implement “class” level member functions? (Skip to Implementation) Better yet, how do we implement “class” level members functions in general?
Enter the prototype member.
The internal object member, prototype, has language defined significance in that it is used for resolving property names if the property isn’t found in the current property map. It’s considered internal because, while the instance’s prototype member is ”inherited” from the ”constructor’s” prototype member, it cannot be accessed directly from the object instance itself. The defined prototype member is a property map itself which holds members for property name resolution. Consider the example below:
var parentPropertyMap = {"bar": "I'm the bar"}; // Define the constructor with inheritable properties function ChildObject(foo) { this.foo = foo; } ChildObject.prototype = parentPropertyMap; childPropertyMap1 = new ChildObject("I'm the foo1"); childPropertyMap2 = new ChildObject("I'm the foo2"); // Prints "childPropertyMap1.foo = I'm the foo1" window.alert("childPropertyMap1.foo = " + childPropertyMap1.foo); // Prints "childPropertyMap2.foo = I'm the foo2" window.alert("childPropertyMap2.foo = " + childPropertyMap2.foo); // Prints "childPropertyMap1.bar = I'm the bar" window.alert("childPropertyMap1.bar = " + childPropertyMap1.bar); // Prints "childPropertyMap2.bar = I'm the bar" window.alert("childPropertyMap2.bar = " + childPropertyMap2.bar);The member foo is an instance member added to the instance’s property map during construction:
function ChildObject(foo) { this.foo = foo; }
while bar is in the constructor’s prototype:
var parentPropertyMap = {"bar": "I'm the bar"}; ... ChildObject.prototype = parentPropertyMap;which is ”inherited” during the new operation:
childPropertyMap1 = new ChildObject("I'm the foo1"); childPropertyMap2 = new ChildObject("I'm the foo2");In other words, the member, bar, is shared across all instances of ChildObject.
Therefore, by implementing the prototype member of the constructor function, we can think of the constructor function itself as the “class” object. Complete with static class functions:
function ClassObject() {} ClassObject.staticClassFunction = function(x) { return x * 2; }static class variables:
function ClassObject() {} ClassObject.staticClassVariable = 5;shared member variables:
function ClassObject() {} ClassObject.prototype.sharedMember = 5;and of course, shared member functions:
function ClassObject(x) { this.x = x; } ClassObject.prototype.memberFunction = function(x) { return x * this.x; }Member Function Implementation
function Message(message) { this.message = message; } Message.prototype.show = function() { window.alert("Message.show() with message = " + this.message); }Example Code
////////////////////////////////////// // Basic Types var intValue = 1; var floatValue = 3.0; var stringValue = "This is a string\n"; /////////////////////////////////////// // Array var emptyList = []; var homogenousList = [1, 2, 3]; var heterogenousList = ["one", 2, 3.0]; /////////////////////////////////////// // Property Map // var emptyMap = {}; var homogenousMap = {"one": 1, "two": 2, "three": 3}; var heterogenousMap = {"one": 1, "two": "two", "three": 3.0}; /////////////////////////////////////// // Functions as values // var callable = function (message) { // <-- notice assignment window.alert("Callable called with message = " + message); } function createClosure(initial) { var res = function () { initial = initial + 1; window.alert("Closure with modified state " + initial); } return res; } /////////////////////////////////////// // Functions as arguments // function callCallable(f, x) { f(x); } function composeCallables(f, g, x) { f(g(x)); } /////////////////////////////////////// // Objects // function MyObject(name, value) { this.name = name; this.value = value; } /////////////////////////////////////// // Objects with Member Functions // function Message(message) { this.message = message; } Message.prototype.show = function() { window.alert("Message.show() with message = " + this.message); } /////////////////////////////////////// // Demo Utilities // function quote(message) { return "\"" + message + "\""; } /////////////////////////////////////// // HTML Invoked demonstration // // function main() { window.alert("Integer = " + intValue); window.alert("Float = " + floatValue); window.alert("String = " + stringValue); for (var item in emptyList) { window.alert("Empty list item = " + item); } // Script style index iteration for (var i in homogenousList) { window.alert("Homogenous list item = " + homogenousList[i]); } // C style index iteration for (var i=0; i < heterogenousList.length; ++i) { window.alert("Heterogenous list item = " + heterogenousList[i]); } // Dot notation property access window.alert("Homogenous map property \"one\" " + homogenousMap.one); // Subscript notation property access window.alert("Homogenous map property \"two\" " + homogenousMap["two"]); for (var key in heterogenousMap) { window.alert("Heterogenous map property \"" + key + "\" = " + heterogenousMap[key]); } callable("(Function value invoked)"); closure(); closure(); callCallable(closure); composeCallables(callable, quote, "My Message"); var my = new MyObject("foo", 5); window.alert("MyObject my.name = " + my.name); window.alert("MyObject my[\"value\"] = " + my["value"]); var msg = new Message("bar"); for (var key in Message.prototype) { window.alert("Message prototype member \"" + key + "\" = " + Message.prototype[key]); } window.alert("Message msg.message = " + msg.message); msg.show(); }
Fix cross-compile ntpd 4.2.6: keyword-gen: cannot execute binary file
To fix the error:
./keyword-gen ./ntp_parser.h > k-g.out
/bin/bash: ./keyword-gen: cannot execute binary file
Change the ntpd/Makefile.am to:
k-g-u-submake: keyword-gen
if NTP_CROSSCOMPILE_FALSE
./keyword-gen $(srcdir)/ntp_parser.h > k-g.out
@grep -v diff_ignore_line < k-g.out > cmp1
@grep -v diff_ignore_line < $(srcdir)/ntp_keyword.h > cmp2
@cmp cmp1 cmp2 > /dev/null || \
{ mv -f k-g.out $(srcdir)/ntp_keyword.h && \
echo ‘Generated changed ntp_keyword.h.’ ;}
@[ ! -f k-g.out ] || \
{ rm k-g.out && echo ‘ntp_keyword.h is up to date.’ ;}
@rm cmp1 cmp2
@echo ‘keyword-gen and ntp_keyword.h are up to date.’ > $@
endif
Fix Ubuntu network file problems, Thunderbird, etc…
Create a symlink and avoid the smb://…..file….
ln -s ./.gvfs network
Con-sommation
Je viens de faire un bond sur ma chaise en lisant cet article :
La ministre de l’Economie, Christine Lagarde, et le secrétaire d’Etat au Commerce, Frédéric Lefebvre, arpenteront mercredi matin les rayons des grands magasins parisiens en signe de soutien à une consommation indispensable à la bonne santé de l’économie.
Consommation indispensable à la bonne santé de l’économie ? Quel est le connard de journaliste qui a écrit ça ? Mais encore un ou une qui a été biberonné au pétrole depuis 40 ans !
Enfin, au moins les choses sont claires, la seule raison d’être de l’économie, c’est la consommation et la consommation permet à l’économie d’exister.
Nous avons une société basée sur des indicateurs totalement foireux, quelle idée de mesurer la “bonne santé” sur les achats des habitants d’un pays ? Si je faisais l’analogie avec la médecine, c’est un peu comme si on mesurait votre “bonne santé” (oui nous sommes dans le registre médical) en vérifiant la quantité de bouffe que votre corps ingère. On voit évidemment beaucoup mieux les problèmes :
- aucun organisme (ni système) ne peux avaler sans limite une quantité infinie de matière
- la ressource dans laquelle on puise pour se baffrer a également une limite physique
Bon allez, vous m’excusez, j’ai des achats à préparer pour soutenir le malade qui ira mieux grâce à ma carte bleue.
Facebook ?
Ou en français : pourquoi je ne suis pas sur Facebook
Accouchement à domicile : lettre ouverte
Le procès qui s’entame le 21 Décembre 2010 au tribunal administratif de Lyon risque de porter un coup définitif à l’accouchement à domicile.
Cette pratique en voie d’extinction en France, est toujours d’actualité dans de nombreux pays européens, au vue de ses excellents résultats autant au niveau médical qu’au niveau du vécu des couples.
Nous (sages-femmes) ne pouvons nous résoudre à abandonner notre plus ancienne pratique, les fondements de notre profession, sans aucun argument scientifique, en cédant simplement à des peurs irrationnelles, alors même que nos voisins européens se fixent des objectifs de santé publique incluant un taux d’AAD de plus en plus important (objectif de 10% pour l’Angleterre …).
Nous avons besoin de relayer nos difficultés, car nous sommes trop peu nombreuses et trop éparpillées en France pour nous faire entendre.
Vous trouverez ci-joint une lettre ouverte que j’essaie de diffuser le plus largement possible.
Je suis prête à répondre à vos questions dans le détail et à vous envoyer
tous les documents nécessaires.
En vous remerciant par avance pour votre attention.
Cordialement,
Cécile Bachelot,
Sage-femme libérale.
Espace Belle Étoile
93 rue Henri Fabre
38920 Crolles
06-61-15-03-68
Livebox Orange fibre: probleme wifi avec Ubuntu 10.10
Si vous venez de changer de livebox pour la nouvelle version fibre, il est surrement impossible de se connecter en wifi avec Ubuntu 10.10 et wpa_supplicant (sur eeePc par ex).
Solution, se connecter sur:
Et dans wifi, changer “Mode de sécurité” en WPA2-PSK (AES).
Substances chimiques présentes dans notre alimentation
Pour ceux qui ne l’ont pas vu passer, une enquête assez complète est disponible sur la composition de nos assiettes.
Ils ont passé au crible une menu “type”, avec tous les aliments du petit déjeuner au dîner en passant par le repas du midi.
Et le résultat est évidemment sans appel, on s’intoxique à petit feu : des dizaines de résidus chimiques cancérogènes et pesticides qu’on avale sans s’en rendre compte.
Les doses retrouvées dans les aliments, prises séparément, sont la plupart du temps inférieur au maximum légal, mais on cumule toute de même toutes ces micro doses à longueur d’année et ils insistent sur l’aspect “cocktail” de ce mélange de substances qui pourrait avoir des effets désastreux.
Vous avez envie de voir ce qu’il y a dans votre beurre, jus de pomme, steak, saumon, baguette de pain, salade ou riz ?
http://www.mdrgf.org/menustoxiques/pdf/Rapport_assiette_toxique_281110.pdf
Les quelques solutions pratiques proposées :
- “L’alimentation biologique sans résidus de pesticides a un impact très favorable sur le niveau de contamination corporel et donc la santé. Le fait de passer à une alimentation biologique élimine très rapidement les résidus de pesticides les moins persistants de nos organisme”
- “Consommez des fruits et légumes de saison ? L’intérêt réside dans le fait que vous pourrez éviter les aliments produits sous serre qui peuvent « bénéficier » de traitement fongiques importants.”
- “Privilégiez les produits locaux ? Cela peut éviter notamment certains insecticides et fongicides qui sont mis dans les lieux de stockage, notamment pour la conservation. Ainsi, il est courant que les oranges ou des bananes, voyageant par cargos, sont traitées par des solutions de Thiabendazole ou autre fongicide.”
Le site dédié à cette enquête : http://www.menustoxiques.fr/
Portez-vous bien !