Utiliser Vim comme IDE


Après 15 ans à utiliser des clients lourds pour développer j’ai eu envie de revenir à l’essentiel, sans perdre le confort d’un IDE. Sans être un expert de vim et de emacs je connais les commandes de base suffisamment pour être à l’aise mais pas assez pour être fluide pour une utilisation en IDE.

Pour la remise à niveau j’ai utilisé le livre Vim pour les humains et des articles sur des sujets précis comme la gestion de l’édition multiple (Vim splitter sa fenêtre en de multiples documents) ou le pliage du code. Les vidéos sur vimcasts sont aussi pratiques poru voir les commandes en actions.

Ensuite, il me fallait des plugins permettant d’avoir les informations directement présentes dans l’éditeur. J’ai choisi Powerline, apt-vim et airline pour leur compatibilité avec la plupart des terminaux et des shells. Pour faire simple je suis reparti d’une configuration vide.

Installation pour bash :

# powerline
sudo apt install powerline fonts-powerline
cat <<EOT >>~/.bashrc
if [ -f /usr/share/powerline/bindings/bash/powerline.sh ]; then
  POWERLINE_BASH_CONTINUATION=1
  POWERLINE_BASH_SELECT=1
  export POWERLINE_BASH_CONTINUATION POWERLINE_BASH_SELECT
  . /usr/share/powerline/bindings/bash/powerline.sh
fi
EOT

source ~/.bashrc

# apt-vim
curl -sL https://raw.githubusercontent.com/egalpin/apt-vim/master/install.sh | sh

apt-vim init

# airline and integrated plugins
apt-vim install -y https://github.com/tpope/vim-fugitive.git
apt-vim install -y https://github.com/vim-airline/vim-airline.git
apt-vim install -y https://github.com/vim-airline/vim-airline-themes.git
apt-vim install -y https://github.com/majutsushi/tagbar.git
apt-vim install -y https://github.com/chrisbra/csv.vim.git
apt-vim install -y https://github.com/python-mode/python-mode.git
apt-vim install -y https://github.com/vim-syntastic/syntastic.git
apt-vim install -y https://github.com/airblade/vim-gitgutter.git
apt-vim install -y https://github.com/mhinz/vim-signify.git
apt-vim install -y https://github.com/vim-ctrlspace/vim-ctrlspace.git
apt-vim install -y https://github.com/edkolev/promptline.vim.git
apt-vim install -y https://github.com/jmcantrell/vim-virtualenv.git
apt-vim install -y https://github.com/scrooloose/nerdtree.git

Évidemment, une fois installé cela demande encore un peu de travail et de configuration. Tout d’abord il est conseillé de fermer tous les émulateurs de terminal, voire même de se déconnecter, pour activer les fonts de powerline.

Voici un configuration minimale dans ~/.vimrc :

execute pathogen#infect()
call pathogen#helptags()

set nocompatible

set title
set number
set ruler
set wrap
set scrolloff=3

" Recherche
set ignorecase
set smartcase
set incsearch
set hlsearch

" Pas de son
set visualbell
set noerrorbells

set backspace=indent,eol,start
set hidden

syntax enable
filetype on
filetype plugin on
filetype indent on

" Activer la partie fancy d'airline
let g:airline#extensions#tabline#enabled = 1
let g:airline_powerline_fonts = 1
let g:airline_theme='base16_eighties'
set laststatus=2
" Activer les couleurs
set t_Co=256

Cette fois l’interface s’affiche avec toutes les couleurs et la bonne police. Pour tester un thème il suffit de suivre la page officielle. Il reste à travailler sur des raccourcis plus pratiques.

vim-powerline-airline

Mise-à-jour : Pour ceux qui ont des problèmes pour activer les couleurs il faut éditer le fichier ~/.profile ou le fichier .bashrc et rajouter ces quelques lignes :

if [ -e /usr/share/terminfo/k/konsole-256color ]; then
  export TERM='konsole-256color'
else
  if [ -e /usr/share/terminfo/x/xterm+256color ]; then
    export TERM='xterm+256color'
  else
    if [ -e /usr/share/terminfo/x/xterm-256color ]; then
      export TERM='xterm-256color'
    else
      export TERM='xterm-color'
    fi
  fi
fi

De mon utilisation de CozyCloud


Contexte

J’amasse des données depuis 1996. Ce n’est pas que je n’avais de données avant mais plutôt que le système que j’utilisais  est devenu inutilisable et que les sauvegardes l’étaient aussi. Je ne dirai pas que je suis devenu un obsédé de la sauvegarde. J’ai un NAS à la maison pour les sauvegardes et des serveurs dédiés que je transforme en VPS. Avoir des doublons ne m’inquiète pas. En revanche, amasser c’est bien mais il faut pouvoir retrouver ce que l’on recherche.

J’ai une approche tout est document : une conversation par messagerie est autant un document que les vieux documents PDF ou LaTeX qui trainent. Pour les documents web j’ai utilisé Annotea un certain temps mais le projet a perdu d’intérêt avec son absence d’implémentation suivie. Pour les vidéos j’utilisais du smil. Pour les livres et les recettes je me suis tourné vers des français (TEA, Open Food System – plus d’actualité depuis juin 2015) qui avaient promis des formats dédiés au stockage et au partage. Les promesses n’ont pas été tenues.

Bref, c’est faisable pour un poste fixe mais pénible à configurer et à maintenir. Le partage se fait avec des moyens classiques comme Seafile mais rien d’intégré. La récolte des documents est manuelle. C’est aussi compliqué à consulter à distance. Ce n’est pas l’outil que l’on peut installer en douce à la fin d’une install party pour booster l’acceptation de Linux avec des fonctionnalités cools.

La recherche

J’ai une forte habitude des systèmes de gestion de contenu et des grands frères pour entreprises. J’aurai pu monter mon propre outil mais je cherchais une approche plus novatrice. J’ai testé des outils comme Marmotta qui sont axé sur l’enrichissement mais peu pratique pour la navigation et le partage ou Seafile trop axé sur le partage et pas sur l’enrichissement.

Je me suis tourné vers les boîtes à outils du cloud avec 0wncloud et quelques autres. Le LAMP à plutôt tendance à me faire fuir : ce que l’on gagne en légèreté sur le serveur se paie lourd en nécessité de réinventer sans cesse la roue ou de gérer des dépendances de 5 lignes (cela vaut aussi pour l’écosystème Node.js).

Puis une startup a proposé de tenir un stand et une conférence sur l’outil qu’elle développait aux JDLL 2012. J’ai rencontré les développeurs et le concept m’a séduit. Tout le contenu des applications est stocké dans une base orientée document qui est synchronisable facilement. Pour commencer, j’ai testé dans une virtualbox pour évaluer l’installation et les besoins du serveur. Je ne le recommande pas : ce n’est pas utilisable en production et les limites que j’ai rencontré étaient celle de ma VM.

Installation et import des données.

J’ai choisi le mode facile avec un VPS et une image préinstallée. Quelques clics et ça démarre avec l’offre la plus basse (2Go RAM et 10Go SSD). Il a ensuite fallu que je fasse les mise-à-jour système et serveur car l’image n’était pas de première jeunesse. Un petit tour sur IRC a suffit pour mes quelques interrogations. Tout fonctionnait.

Le premier import proposé est celui- des données Google. En dehors des contacts et d’un agenda je n’y stocke rien. Ce fut un peu lent mais sans problème. En revanche, un compte IMAP me servant d’archive a mis en évidence plusieurs points gênant pour le grand public :

  • L’import est lent. Vraiment. Et il n’y a pas de jauge permettant d’estimer l’avancement du processus.
  • 2Go de RAM ce n’était pas assez. En fait si, mais c’est la consommation moyenne de mon instance sans compter le système. Donc ça swap (cf point précédent).
  • C’est de l’IMAP, l’import a repris à chaque redémarrage en tâche de fond (cf points précédents)

Au bout de deux jours j’ai regardé les logs système avec un développeur pour convenir que mon instance VPS était trop juste (j’utilisais le swap et je remplissais 95M de l’espace disque). Il m’a fallu attendre la fin de l’import de ce compte pour faire un nettoyage de la base (je suis redescendu à 80% d’occupation disque) et un passage à l’option supérieure du VPS. Pour le coût, je suis vraiment au large maintenant pour le prix d’un petit serveur dédié.

J’ai ensuite configuré 2 Rapsberry Pi pour avoir des instances secondaires locales en cas de besoin et l’application fonctionne bien pour android 7.0 depuis sa version 2.2. Les versions précédentes fonctionnaient bien avec android 6. La version desktop semble fonctionner.

J’ai encore eu quelques soucis sans doute liés à l’image VPS d’origine qui sont rentrées dans l’ordre avec l’aide des développeurs.

Les avantages et inconvénients de CozyCloud

En dehors de l’aspect synchronisation fort sympathique, Cozy Cloud c’est surtout un environnement de développement d’applications. Le but de ces application n’est pas la manipulation des données mais le stockage et, bientôt, l’enrichissement.

Je n’ai plus besoin d’aller télécharger mes factures chez mes fournisseurs, une application s’en charge. Les données de mon smartphones sont sauvegardées. Pour ma veille journalière je peut conserver un lien ou l’article complet. Une petite appli IRC (il manque du XMPP ;). Pour les mises-à-jour je reçoit les notifications via l’application android puis il suffit d’un clic. Petite ombre : pour importer mes flux OPML de Newsblur vers ZeroFeeds il m’a fallu rajouter l’extension ‘.opml’ au fichier. En revanche, pour mes projets collaboratifs j’utilise Taiga et Kallithea. Ce sont des données hors de la sphère personnelle.

À ce stade c’est l’outil idéal qui fait ce dont on a besoin et dont on oublie la complexité. Mais… non, en fait on oublie pas la complexité. Une application demande une installation manuelle dans le système (l’image VPS mal installée) et lorsqu’une erreur survient c’est vraiment galère de trouver les logs et de comprendre le problème. Grâce à npm, les applications s’installent et se mettent à jour.  Ou pas. C’est un problème général avec cet outil et pas un problème de CozyCloud. Nous sommes du coup assez loin d’un outil à mettre entre les mains d’un individu lambda.

Le dernier inconvénient : point de partage ou d’outil connectable. Un plugin Seafile ou XMPP me conviendrait. Lorsque j’ai des données à partager je les sélectionne et je mets à disposition sur un dépôt séparé. Lorsque j’ai fini je détruit le dépôt. Ce n’est pas un outil de travail en groupe mais bien un partage de données personnelles.

Enfin, à la fois un avantage et un inconvénient : chaque instance est personnelle et il n’est pas possible actuellement d’installer deux instances dans le même système. J’hésite à passer à une installation en docker (engine+compose+swarm) pour le VPS en gardant un rapsberry pi par personne physique. C’est plus la fonction de partage qui manque à mon goût qu’un système de mutualisation des instances.

Ce que j’aimerai maintenant c’est un  ou plusieurs systèmes d’indexation (Qwant ?) et d’amélioration (Marmotta ?). Je suis conscient que les fonctionnalités vont varier selon la puissance de l’hébergement. S’il y a déjà des tags dans un article que je marque ou que je sauvegarde j’aimerai pouvoir les avoirs automatiquement et aussi pouvoir rajouter les miens. Chaque application peut implémenter cela de son côté; si c’est un fonction du framework cela deviendra le standard. Avec la conteneurisation, cela peut être un ou plusieurs conteneurs en boîte noire disposant juste d’une API de requêtage.

Try-except versus if-else in Python 3.5


Today I ran again in the question why to use if-else when try-except is shorter?

There is a semantic part that we loose information on a try-except as we don’t know what the developer did expect in the most case and there is a performance part. I found a test for python 2 (Try / Except Performance in Python: A Simple Test) with simple assumptions: we try to get a value in a one keyed dictionary and make iterations to get a statistic on this access. I made it a little more complex with a dictionary with 10,001 keys.

Results analysis:

  • if-else take the same amount of time in both case
  • try-expect is 2 times faster than if-else when it no raise the exception
  • try-expect is 5 times slower when the exception is raised

Then the if-else has a predictable comportment and help the maintainer.

I’m agree that the semantic part of the if-else can be replace by a comment but i still not recommend to try-except if it is not to raise an exception.

 

The results:

The case where the key does not exist: 
 
1,000 iterations: 
with_try (0.250 ms) 
with_try_exc (0.291 ms) 
without_try (0.119 ms) 
without_try_not (0.120 ms) 
 
1,000,000 iterations: 
with_try (231.647 ms) 
with_try_exc (263.633 ms) 
without_try (119.238 ms) 
without_try_not (118.602 ms) 
 
1,000,000,000 iterations: 
with_try (224659.381 ms) 
with_try_exc (260333.897 ms) 
without_try (109796.531 ms) 
without_try_not (111871.690 ms) 
 
 
The case where the key does exist: 
 
1,000 iterations: 
exists_with_try (0.066 ms) 
exists_with_try_exc (0.070 ms) 
exists_without_try (0.166 ms) 
exists_without_try_not (0.180 ms) 
 
1,000,000 iterations: 
exists_with_try (57.661 ms) 
exists_with_try_exc (56.909 ms) 
exists_without_try (113.633 ms) 
exists_without_try_not (116.340 ms) 
 
1,000,000,000 iterations: 
exists_with_try (57650.440 ms) 
exists_with_try_exc (57395.376 ms) 
exists_without_try (114659.023 ms) 
exists_without_try_not (117646.034 ms)

 

The code:

#!/usr/bin/env python3

import time

d = dict.fromkeys(range(0, 10000), 0)
d['somekey'] = 1

ITERATIONS = (1000, 1000*1000, 1000*1000*1000)

def time_me(function):
    def wrap(*arg):
        start = time.time()
        r = function(*arg)
        end = time.time()
        print("%s (%0.3f ms)" % (function.__name__, (end-start)*1000))
        return r
    return wrap


# Not Existing
@time_me
def with_try(iterations):
    for i in range(0, iterations):
        try:
            get = d['notexist']
        except:
            pass

@time_me
def with_try_exc(iterations):
    for i in range(0, iterations):
        try:
            get = d['notexist']
        except Exception:
            pass

@time_me
def without_try(iterations):
    for i in range(0, iterations):
        if d.get('notexist'):
            pass
        else:
            pass

@time_me
def without_try_not(iterations):
    for i in range(0, iterations):
        if not d.get('notexist'):
            pass
        else:
            pass



# Existing
@time_me
def exists_with_try(iterations):
    for i in range(0, iterations):
        try:
            get = d['somekey']
        except:
            pass

@time_me
def exists_with_try_exc(iterations):
    for i in range(0, iterations):
        try:
            get = d['somekey']
        except Exception:
            pass

@time_me
def exists_without_try(iterations):
    for i in range(0, iterations):
        if d.get('somekey'):
            pass
        else:
            pass

@time_me
def exists_without_try_not(iterations):
    for i in range(0, iterations):
        if not d.get('somekey'):
            pass
        else:
            pass


print ("\n\nThe case where the key does not exist:")
for iteration in ITERATIONS:
    print ("\n%d iterations:" % iteration)
    with_try(iteration)
    with_try_exc(iteration)
    without_try(iteration)
    without_try_not(iteration)


print ("\n\nThe case where the key does exist:")
for iteration in ITERATIONS:
    print ("\n%d iterations:" % iteration)
    exists_with_try(iteration)
    exists_with_try_exc(iteration)
    exists_without_try(iteration)
    exists_without_try_not(iteration)

Le livre Culture Libre de Lawrence Lessig disponible en français


Le fameux livre « Culture Libre » est enfin disponible en français sur lulu.com. Je ne vais pas paraphraser l’auteur ou la foultitude de blogueur qui en parle. C’est l’un de mes livres de chevets, un incontournable pour comprendre le mouvement du libre dans son ensemble et parfois aussi comment notre société s’est construite et vers quoi elle tend.

Pour ceux qui supporte l’anglais, allez faire un tour sur http://free-culture.cc/ pour comprendre la génèse du livre.

Toute mes pensées vont vers notre camarade Yves qui aurait tant aimé le partager avec nous et avec le public des JDLL et qui nous a quitté.

 

 

La culture libre, la vie publique et le droit à l’oubli


Le logiciel libre et la culture libre se forment à partir d’un principe fondateur : le partage. Derrière ce partage, il y a plusieurs buts : aider l’apprentissage, faciliter la reproductibilité, améliorer l’existant, et publier son expérience. Dit autrement :  transmettre, reproduire, étudier, distribuer.

Publier une informations dans un média, c’est sortir un élément de vie privée pour l’exposer au public. C’est le partage d’une expérience privée au grand jour, même si ce n’est pas la nôtre. Pour un journaliste, c’est rarement son expérience qui est partagée : il sert d’intermédiaire pour la révéler avec ou sans parti pris.

Le droit à l’oubli, c’est casser ce partage en mettant en avant la seule vie privée dans la balance. Plus moyen de transmettre cette information qui ne devrait exister, de distribuer ce que l’on a pu apprendre. Dans certains cas il serait possible d’arguer de la conception chrétienne du pardon : le temps a passé et les fautes ont été payées à la société… ou pas. La plupart du temps, ce qui est recherche c’est masquer les faits, l’oblivion. Comme dans ce passé proche, ou ce futur proche, dans lequel les autodafés détruisaient les livres qui ne relevaient pas de la morale d’une religion ou de la ligne d’un parti.

Ce qui est devenu public fait partie de l’inconscient collectif. En retirer une partie  ampute cet inconscient d’un souvenir. Sans nous en rendre bien compte, petit à petit, nous effaçons nos traces. Nous sélectionnons nos expériences pour nous façonner un futur. Mais qu’advient-il d’un bâtiment dont on prend les matériaux des étages inférieurs pour construire le sommet : il s’effondre. Effacer le passé, c’est aussi perdre nos racines, refuser notre apprentissage, nos doutes. Quelles seront nos valeurs refuges ? L’égocentrisme, le communautarisme et toutes les formes de repli sur soi qui nous ferons revenir aux pratiques des siècles passés.

Comment défendre la culture libre, le partage, et le droit à l’oubli ? Ce paradoxe vient du militantisme associé à la diffusion des idées de la culture libre. Nager à contre courant nécessite parfois d’avancer masqué. Entre théorie du complot et menace bien existante certains aimeraient faire table rase pour se protéger en oubliant qu’être militant c’est avant tout un don de soi, parfois corps et âme.

Puis vient le temps où il est temps de passer la main et de se retirer de la vie publique. L’envie de faire table rase et de redémarrer à zéro est tenace. Cependant, lorsque l’on a défendu le partage, il est compliqué de renier ses valeurs en imposant aux autres l’oubli. Pour un militant en activité, c’est juste inconcevable de défendre les deux à la fois : c’est comme vouloir à la fois la lumière et les ténèbres en oubliant les 50 nuances de gris, comme refuser de partager avec ceux qui ne partagent pas.

Beats audio setup for HP Envy on recent Ubuntu


But the package hda-jack-retask is stuck in raring. The goal here is to allow you to install the package in your brand new Ubuntu. Replace « utopic » each time it is mentionned velow by your version.


sudo apt-add-repository -s ppa:diwic/hda
sudo apt-get update

Then edit  the file « /etc/apt/sources.list.d/diwic-ubuntu-hda-utopic.list » to replace utopic by saucy.


cd Downloads
mkdir hda-jack-retask
sudo apt-get build-dep hda-jack-retask
apt-get source hda-jack-retask
cd hda-jack-retask-0.20130613+raring

Now, you have to edit the debian/control file to sign the archive with you gpg key.
All spaces are important.

hda-jack-retask (0.20130613+utopic) utopic; urgency=low

* No-change upload for utopic

— Encolpe Degoute <encolpe.degoute@free.fr> Fri, 16 Jan 2015 11:00:00 +0200

Now, prepare your local package ans install it :


dpkg-buildpackage -rfakeroot
sudo dpkg -i ../hda-jack-retask_0.20130613+utopic_amd64.deb

Remove the PPA:

sudo apt-add-repository -r ppa:diwic/hda

The overall process should take less than 10 minutes.

Installation de Movim


Movim est l’un des projets plus si récents que ça voulant faire émerger les réseaux sociaux décentralisés. Sa particularité est d’utiliser un protocole ouvert, XMPP, pour l’échange de données.
Dans le cadre de l’initiation aux logiciels libres au sein de la Licence Pro Colibre, j’ai voulu, naïvement, installer Movim pour faire goûter aux étudiants une nouvelle sensation de liberté. C’est un peu trop complexe de prime abord. Nous allons nous limiter à installer movim seul.

Récupération de l’archive

Tout d’abord, il faut récupérer l’archive et l’installer à un endroit utilisable par apache2 :
wget https://launchpad.net/movim/0.8/0.8.1/+download/movim-0.8.1.zip
Vérifions l’intégrité de l’archive avec md5 :
wget https://launchpad.net/movim/0.8/0.8.1/+download/movim-0.8.1.zip/+md5
md5sum -c +md5
#movim-0.8.1.zip: Réussi
Vérifions l’auteur de l’archive avec gnupg :
wget https://launchpad.net/movim/0.8/0.8.1/+download/movim-0.8.1.zip.asc
gpg --verify movim-0.8.1.zip.asc
# gpg: Signature faite le mar. 05 août 2014 00:08:11 CEST avec la clef RSA d'identifiant 1D3810D9
# gpg: Impossible de vérifier la signature : clef publique introuvable
gpg --search-keys 1D3810D9
gpg --verify movim-0.8.1.zip.asc
C’est bien Timothée Jaussoin qui a signé l’archive.

Installation de Movim

cd Téléchargements
mv ../movim-8.0.1.zip .
unzip movim-0.8.1.zip
sudo cp -r movim-0.8.1 /var/www/html/movim
sudo chown -R www-data:www-data /var/www/html/movim
sudo -H -s -u www-data
cd /var/www/html/movim
mv config/db.example.inc.php config/db.inc.php
editor config/db.inc.php
exit
Il faut maintenant éditer le fichier config/db.inc.php pour mettre les informations de connexion à la base MySQL.
Si vous n’avez pas encore créé votre base de données il faut le faire à la main avec un outil du type MySQL Workbench. N’oubliez pas de créer un utilisateur spécifique.
sudo apt-get install mysql-workbench mysql-server
Dans la foulée, installons les dépendances de movim :
sudo apt-get install php5 php5-curl php5-gd php5-mysql mysql-common mysql-client

Configuration de FPM et d’Apache2

Récupération des dépendances de PHP FPM :
sudo apt-get install libapache2-mod-fastcgi apache2-mpm-event apache2 php5-fpm
sudo a2enmod actions fastcgi alias
sudo service apache2 restart
Créer un fichier /etc/apache2/conf-available/php5-fpm.conf contenant la configuration ci-dessous :
<IfModule mod_fastcgi.c>
        AddHandler php5-fcgi .php
        Action php5-fcgi /php5-fcgi
        Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
        FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -socket /var/run/php5-fpm.sock -idle-timeout 300 -pass-header Authorization
        <Directory /usr/lib/cgi-bin>
                Options ExecCGI FollowSymLinks
                SetHandler fastcgi-script
                Require all granted
        </Directory>
</IfModule>
Pour l’activer il faut passer par a2enconf
sudo a2enconf php5-fpm
sudo service apache2 restart

Configuration à rajouter à la fin du fichier /etc/php5/fpm/php-fpm.conf

[movim]
user = www-data
group = www-data
listen = 127.0.0.1:9001
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
 
pm = ondemand
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

request_terminate_timeout = 300
 
php_admin_value[open_basedir] = none
Puis redémarrer le service
sudo service php5-fpm restart

Configuration de Movim

Normalement, tout est intsallé. Il reste à configurer dans l’interface web :

http://localhost/movim/?q=admin

  • Passez le site en Français et avec la zone horaire de Pais.
  • Choisissez movim.eu comme serveur Bosh : http://movim.eu:5290/http-bind
  • Dans l’onglet des paramètres de la base de données, lancez la création des tables
  • Vérifiez votre configuration dans l’onglet suivant
Maintenant, il nous faut créer notre compte chez movim.eu en passant par notre nouvelle page d’accueil :

http://localhost/movim

Conclusion

Pas mal de petites choses n’étaient pas évidente dans la documentation actuelle. Par exemple un script de création de la base de données et d’un utilisateur associé facilitera la vie d’un installateur débutant (d’où l’utilisation de Workbench).
La prochaine étape est d’installer un serveur BOSH compatible avec toutes les fonctionnalités de Movim. Sûrement Metronome IM.
Update : Rajout de la gestion du timeout

Comment migrer depuis un vieille version de Plone vers la dernière version


La première chose à faire lors de la migration d’un CMS est de regarder si la documentation contient le nécessaire à connaître pour se lancer. La documentation de Plone est très bien fournie avec des conseils pour chaque version majeure depuis la 1.0 :

http://plone.org/documentation/manual/upgrade-guide

 

Il est indiqué quels sont les produits impactés et quels sont les modifications à apporter dans le code tierce.

Il y a deux conseils qui manquent souvent pour le développeur qui manque d’habitude :

  1. Il faut passer par toutes les versions majeures
  2. Dans une même version majeure il faut faire la migration depuis la première version mineure vers la dernière version mineure avant de migrer à la prochaine version majeure id est 3.3 vers 3.3.6 avant de faire 3.3.6 vers 4.0

En suivant ces deux règles supplémentaires il est possible de passer de Plone 2.1 à Plone 4.3 et bientôt

English: The logo of Plone, and Open Source Co...

English: The logo of Plone, and Open Source Content Management System (Photo credit: Wikipedia)

Plone 5 sans avoir trop de surprises.

 

 

 

 

Les DRM dans Firefox, Mozilla s’incline et la Free Software Fondation tempête


Et si tout commençait par la fin ? Êtes-vous plutôt libristes ou opensource ? La cathédrale ou le bazar ? Apple, Microsoft ou Linux ?

C’est une question que je commence à entendre de plus en plus souvent. Cela fait bien marrer les contributeurs de BSD. Plus le temps passe, plus la FSF se radicalise en posant des jugements sur ce qui se passe sur internet. Ils se plaignent de tout se qui peux nuire à la liberté sans s’apercevoir qu’ils nous privent de la première des liberté : celle de choisir. J’ai le choix de croire en Dieu ou d’être athée. Avec le dispositif prévu par Mozilla, j’ai le choix de regarder une vidéo avec un DRM ou de refuser de la regarder.Si la FSF veut imposer la monoculture du logiciel libre, alors quelle différence avec les écosystèmes Apple et Microsoft ? Vivement un GNU/Hurd utilisable. Nous faudra-t-il renier Linux car il contient du code non GPLv3 ? Nous faudra-t-il passer à Mercurial (qui passera en GPLv3 pour l’occasion) parce que Git est trop proche du honnit Linux ? Faudra-t-il libérer tous les projets clients en GPLv3 avec la documentation en LaTeX ?

Liberté de partage, liberté d’étudier et liberté de choisir. S’il n’y a plus de discussion possible, je préfère ne plus être libriste. C’est une décision que j’ai prise il y a 10 ans en voyant la voie sans issue dans laquelle la FSF emmenait sa communauté. Je suis opensource.

Enhanced by Zemanta

How to setup your Plone core sprint


I promised to published this article last year but… well, no excuse. The topic is still hot as we work on in Arnhem in November 2013, 11 to 15 to finish it for Plone 5.

Here in Arnhem – Ploneconf 2012 Sprints – we are making a lot of sprint about a lot of different topics. As a newcomer in  sprint lead I did some mistakes.

  1. If you are working in the Plone core you must should a plip before the beginning of the sprint. It will be easier for other people  to follow your work some months later.
  2. For commiters, the main point is to check if you already give your contributor agreement back to the Plone Fundation. If you’re not there should be someone with blank agreements in your sprint to make things go easy.
  3. Once you know how many sprinters you have on your topic you must organize the area to be comfortable for all.
  4. Fing a way to show everybody the tasks that are on going and who is working on. My way is a whiteboard with post-its
  5. Prepare the technical parts before to start coding:
    • Identify all the packages you’re working on and create a remote branch for your plip. We were working at first on Products.CMFPlone, plone.app.content, plone.app.users, and after we also include plone.app.controlpanel in the list.
    • Don’t make a branch in buildout.coredev create a plips configuration file in the ‘plips‘ folder.Then run your buildout using this configuration file as master: bin/buildout -c plips/plip13260-cpy-removal.cfg
  6. Check if everybody have commit rights.
  7. If there’s a change in the plip configuration file notice it to everyone fast.
  8. Make regular internal reports to know who needs help or work 🙂
  9. Write down what’s you’re doing on

For commiters, the main point is to check if you already give your contributor agreement back to the Plone Fundation.  If you’re not there should be someone with blank agreements in your sprint to make things go easy.
Commiters should also follow a process to make the pull going right:

  1. Have  fun
  2. After each plip configuration file update check if all plip eggs are well checkouted and if they are in the good branch
  3. When you start a task  create a local branch to avoiding conflicts before your merge
  4. Commit early, often
  5. Fetch and pull others commits before to merge
  6. Run tests without ‘-t
  7. Merge your work in the plip branch, not the master
  8. Test again before the push
  9. If you need help asks (I know, git is overcomplicated 😉 )
  10. Have fun! Did I say it before?
  11. Have  a follow up plan and stay in touch

Thanks to Eric Steele for the first setup, Liz as the proposer of the sprint topic, Maurits as the technical leader and for all people around there that were working on that sprint.