Javascript – Observer Pattern pour vos onglets

Bon, nous allons voir comment appliquer un « Observer Pattern » (patron Observateur) en javascript.

Tout d’abord, nous avons besoin de 2 types d’objets :

  • Un Objet qui observe possédant une méthode update :


Observer = function(name) {
this.name = name;
this.update = function(observable) {
if (observable.nav == this.name) {
this.className = 'nav_selected';
show.call($(this.name+'s'));
} else {
this.className = 'nav';
hide.call($(this.name+'s'));
}
}
};

  • Un Objet observé possédant un attribut qui référence les objets qui observent et 2 méthodes


Observable = function() {
this.observers = new Array();
this.notifyObservers = function() {
for (var i=0; i < this.observers.length; i++) {
this.observers[i].update(this);
}
}
this.addObserver = function(observer) {
this.observers.push(observer);
observer.update(this);
}
};

Et voilà (ou presque), on crée un objet mod Nav qui héritera par la suite d’Observable :


var modNav = {
nav:'client',
all:['client','product','group','schedule']
};
modNav.setNav = function(o) {
this.nav = (typeof(o) == 'string') ? o : o.id ;
this.notifyObservers();
}
modNav.getNav = function() {
return this.nav
}
modNav.init = function() {
for (var j=0; j
var m = this.all[j];
Observer.call($(m),m);
this.addObserver($(m));
}
}

Il ne reste plus qu’à faire hériter les objets div modifiable (un onglet <=> une div) :


Observable.call(modNav);
modNav.init();

Avec, pour notre exemple :

  1.  
  2. <ul>
  3.         <li class="nav_selected">CLIENTS</li>
  4.         <li class="nav">GROUPS</li>
  5.         <li class="nav">PRODUCTS</li>
  6.         <li class="nav">SCHEDULES</li>
  7. </ul>
  8.  

Et voilà (enfin) les onglets sont observables et nos moutons sont bien g…

Publié dans Web | Mots-clefs : , | Laisser un commentaire

Pourquoi Google Chrome est plus rapide ?

Courte introduction. La genèse de Google Chrome. (4min)

Quelques explications sur V8 le nouveau moteur javascript. (5min)

Comment le moteur javascript v8 fonctionne ainsi que sa roadmap. (50min)

Télécharger les sources
svn checkout http://v8.googlecode.com/svn/trunk/ v8

Accéder au site officiel de V8.

Publié dans App, Web | Mots-clefs : , , , | Laisser un commentaire

Tuning Apache 2 pour Wordpress

Tuning

Désactivation de modules non utilisés

a2dismod authz_default authz_groupfile status cgi env python

apache2.conf

Timeout 10

KeepAlive Off

<IfModule mpm_prefork_module>
StartServers          3
MinSpareServers       3
MaxSpareServers      10
ServerLimit         50
MaxClients          50
MaxRequestsPerChild   2000
</IfModule>

/etc/init.d/apache2 restart

Benchmark

Server version: Apache/2.2.9 (Debian)
Server built:   Jul 14 2009 20:03:28

Loaded Modules:
core_module (static)
log_config_module (static)
logio_module (static)
mpm_prefork_module (static)
http_module (static)
so_module (static)
alias_module (shared)
auth_basic_module (shared)
authn_file_module (shared)
authz_host_module (shared)
authz_user_module (shared)
autoindex_module (shared)
deflate_module (shared)
dir_module (shared)
expires_module (shared)
headers_module (shared)
info_module (shared)
mime_module (shared)
negotiation_module (shared)
php5_module (shared)
rewrite_module (shared)
setenvif_module (shared)
ssl_module (shared)
status_module (shared)

Créer un fichier de 10Ko:

dd if=/dev/zero of=/tmp/10K bs=10K count=1

autobench
version: 2.1.2

${HOME}/.autobench.conf

host1 = www.benjaminbaudouin.com
uri1  = /10K
port1 = 80
low_rate  = 20
high_rate = 200
rate_step = 20
num_conn  = 5000
num_call  = 10
timeout   = 5
output_fmt = tsv

run.sh

#!/bin/bash
graph_title="Apache/2.2.9"
dir="$(date +%Y%m%d)";
[ -e ${dir} ] && rm -rf ${dir}
mkdir ${dir}
[ ! -e ${dir}/output.tsv ] && autobench --single_host --file ${dir}/output.tsv
[ ! -e ${dir}/output.ps ] && echo -e "[copy/paste] graph title: ${graph_title}" && bench2graph ${dir}/output.tsv ${dir}/output.ps
[ ! -e ${dir}/output.gif ] && convert -rotate 90 ${dir}/output.ps ${dir}/output.gif

Conclusion

La limite basse Apache 2.2.9 (Tuned) est visiblement de 35 req/sec pour des pages de 10ko.

Liens

Autobench

Optimize apache slow vps wordpress

Apache Performance Tuning

Publié dans App | Mots-clefs : , , , | Laisser un commentaire

Apache 2 LDAP SSL

Paquets debian (pré-requis)

apt-get install apache2 libapache2-mod-php5 libldap-2.4-2 ldap-utils libsasl2-modules-ldap openssl libsasl2-2 libkrb5-3 php5-ldap php5-sasl php5-auth-pam

Configuration Apache

Activer le module LDAP Apache 2.0

a2enmod auth_ldap

Activer le module LDAP Apache 2.2

a2enmod authnz_ldap

Certificat SSL

Copier le certificat dans /etc/apache2/ssl/ldap.pem

-----BEGIN CERTIFICATE-----
KJDFJ
...
JDiejfioe
-----END CERTIFICATE-----

Configuration LDAP dans Apache 2.0

Ajouter dans apache2.conf ou httpd.conf:

LDAPTrustedCA /etc/apache2/ssl/ldap.pem
LDAPTrustedCAType BASE64_FILE

Configuration LDAP dans Apache 2.2

Ajouter dans apache2.conf ou httpd.conf:

LDAPTrustedGlobalCert CA_BASE64 /etc/apache2/ssl/ldap.pem

/etc/ldap/ldap.conf

BASE    dc=com
URI     ldap://ldap.host.com
TLS_REQCERT demand
TLS_CACERT /etc/apache2/ssl/ldap.pem

Redémarrer le service apache2

/etc/init.d/apache2 restart

Test

ldaptls.php

  1.  
  2. <?php
  3. $ldap="ldap.myDomain.com";
  4. $usr="user@myDomain.com";
  5. $pwd="mypassword";
  6. $ds=ldap_connect($ldap);
  7. $ldapbind=false;
  8. if(ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3))
  9. if(ldap_set_option($ds, LDAP_OPT_REFERRALS, 0))
  10. if(ldap_start_tls($ds))
  11. $ldapbind = @ldap_bind($ds, $usr, $pwd);
  12. ldap_close($ds);
  13. if(!$ldapbind)       echo "ERROR";
  14. else       echo "OK";
  15. ?>
  16.  

Troubleshooting

Problème: fonction PHP ldap_start_tls en erreur. Authentification LDAP impossible par la suite.

Système: debian lenny
Nom du paquet: apache2
Version: 2.2.9-10

Solution:

cd /etc/ldap
mkdir certs
cp /etc/apache2/ssl/ldap.pem /etc/ldap/certs/mycert.pem
vi /etc/ldap/ldap.conf

TLS_REQCERT  never
TLS_CACERT  /etc/ldap/certs/mycert.pem

/etc/init.d/apache2 restart

Publié dans App | Mots-clefs : , , | Laisser un commentaire

Apache 2.2 – Lister les modules chargés

apache2ctl -t -D DUMP_MODULES

Loaded Modules:
core_module (static)
...
userdir_module (shared)
Syntax OK

Publié dans App | Mots-clefs : , | Laisser un commentaire