PowerPoint to HTML conversion tool “ppt2html”

As part of my mission to Yellow Pages, I developed a tool to converts PowerPoint file into html pages. The tool was written in Ruby. I’ve got permission to put it into open source so you can also convert your slides to just simply share.

An example of what happens:
Pages Jaunes hostting services

Sources of the tool:
https://github.com/nledez/ppt2html
Assets sources if you not like the default

Outils de conversion PowerPoint vers HTML “ppt2html”

Dans le cadre de ma mission à Pages Jaunes, j’ai développé un outil qui permet de convertir un fichier PowerPoint en pages html. L’outil est écrit en Ruby. J’ai eu l’autorisation de le mettre en OpenSource ce qui vous permettra à vous aussi de convertir simplement des diapositives afin de les partager simplement.

Un exemple de ce que cela donne :
Offre de service de l’hébergement Pages Jaunes

Sources de l’outil :
https://github.com/nledez/ppt2html
Sources des images si celle livrés ne vous conviennent pas

Comment j’ai contribué à la communauté Open-Source cette année

Suite au Breizhcamp, son sondage et tout ça, je me suis demandé comment j’ai contribué récemment aux différentes communautés.

Dans le temps j’ai été mainteneur de paquets Debian. C’était l’époque ou je développais sous Zope.

Depuis je me suis occupé autrement, j’ai géré un peu plus efficacement ma carrière. J’ai monté ma boite en temps qu’auto-entrepreneur.

De temps en temps je réalisais des présentations dans des thèmes informatiques. Par exemple, la virtualisation a Granit.

Puis il y a environ 2 ans j’ai voulu me mettre plus sérieusement à Ruby On Rails. J’ai entendu parlé de Rennes On Rails. J’y suis allé à un moment ou le groupe était en perte de vitesse. Karine qui s’occupait du groupe était de plus en plus prise avec le projet de la Cantine.

Je lui est proposé de reprendre l’animation du groupe. Ce qu’elle a bien sûr accepté en me proposant en plus d’accueil le groupe à la Cantine Numérique Rennaise.

J’ai donc relancé le groupe avec mon retour d’expérience avec ROR :

Nous avons enchainé avec une install party.

Les deux événements ont amené pas mal de monde. 20 à 30 personnes pour un JUG, je pense que ce n’est pas beaucoup. Mais pour ROR, c’est énorme ;)

Ensuite avec le support de Thierry, nous avons organisé des Coding-Dojo tous les mois. Avec un énorme succès (entre 2 et 7 personnes) :) .

Voilà pour la partie Rennes On Rails.

Lors de l’inauguration de la CNR, j’ai croisé le président de Granit qui m’a présenté Isabelle qui était la nouvelle Coordinatrice du réseau. Je leur ai proposé d’ouvrir un thème sur le Cloud. Passage en Conseil d’Administration, et c’est parti pour un tour :

Ensuite Nicolas, m’a proposé de présenter le Cloud selon Microsoft. D’autres thèmes sont à venir l’année prochaine.

Voilà pour la partie Cloud à Granit.

Ensuite Karine, m’a fait suivre une demande de Nicolas Deloof qui était un appel a speaker pour le Breizhcamp. Dans un premier temps, j’ai proposé de refaire mon introduction au Cloud avec une démo d’Heroku. Le créneau NoSQL pour Ruby ayant du mal à trouver preneur, je me suis lancé un petit défi de me proposer comme speaker pour cette session aussi. Me voila donc partit dans un rassemblement de 200 développeurs, et à proposer une session sur NoSQL dont je ne connaissais que 2/3 trucs théoriques. Et surtout avec le risque de me retrouver avec des personnes dans la salle qui connaissent le sujet plus que moi.

Voilà pour la partie Breizhcamp.

Maintenant petit retour en arrière. L’année dernière, je voulais donc me mettre sérieusement à Ruby On Rails. Comme je l’ai expliqué, Rennes On Rails ne m’avait pas permis d’avancer autant que je l’espérais. Je me suis donc donné pour objectif d’avoir une application fonctionnelle à la fin de mes 15 jours de vacances de juin. Je me suis donc pris une application à développer et me suis lancé. J’ai épluché les différentes documentations sur le net. Mon application Rails (une gestion de médiathèque – je sais c’est très original…) avançait, puis j’ai eu besoin d’ajouter une connexion avec le scraper cine-passion. Pas de chance, il n’y avait pas de librairie Ruby. Je me suis donc lancé dans le développement de celle-ci. J’ai découvert au passage TDD et Github.

Et pour finir, j’ai dans mes différents développements perso trouvés des bugs et besoins dans les produits que j’utilisais. Et finalement plutôt que de demander et attendre j’ai suis passé en mode “do it yourself”, ce qui a donné :
- Proposition d’évolution de Bundler pour gérer le multiplateforme pull-request 1082
- Traduction de git initié par Sébastien Douche pull request 2
- Et un but avec i18n et Rails 3.1 rc pull request 97, pour régler un problème avec ma démo pour le Breizhcamp

Je vais essayer de me dégager un peu de temps pour finir mon path Bundler, et continuer à faire progresser ROR & le Cloud à Rennes.

Voila la fin de ce billet un peu fouillis qui m’a permis de faire le point.

Je profite de ce billet pour remercier tous les personnes et groupes que j’ai cités pour les remercier de leurs supports. Et à l’année prochaine :)

Post-Breizhcamp

Je ne vais pas mettre des smilets toute les deux phrases, mais prenez le contenu du billet au second degré.

Mes retours sur le Breizhcamp qui vient de se dérouler :

  • Se lancer dans une présentation sur un sujet inconnu, c’est possible. Il y a un mois, je n’avais jamais pratiqué de NoSQL
  • Suite à une discussion, avec @sdouche ne pas dire “je n’ai pas le temps” mais “j’ai d’autres priorités”
  • Encore avec @sdouche, personnellement je pense que la répétition n’est pas indispensable. Par contre, se préparer à toutes les éventualités, et improviser pour le reste… Par exemple pour ma démo Cloud j’ai eu la bonne idée de prévoir un screencast
  • J’ai vu plein de Mac dans les conférences, j’aurais donc moins de monde à convertir
  • Aprés une galette saucisse et une crêpe sucre, j’ai encore faim :(

@samoteph non je te confirme je ne suis pas développeur

@ngeorgeault désolé d’être venu pourrir tes présentations…

@RudyHuyn tu es un grand malade, j’attends avec impatience d’être ton voisin

#dotnet les pythonistes vont aux JUG. Moi je pense que je vais aller dans le club .Net Rennais. Je les connais presque tous. Il parait même que je connais tous les MVP actuel et a venir sur Rennes. Donc, je pense que afterwork et barbecue vont faire partit de mon planning l’année prochaine. Bon j’irais en cachette, parce que pour un anti-Microsoft depuis plusieurs années, mon évolution n’est pas encore terminée.

Pour terminer sur les sujets de mes présentations :
#cloud
J’ai rencontré quelques personnes susceptibles d’intervenir dans le cadre des forums Graphotec sur le Cloud.
#ror Clairement j’ai eu moins de succés que certaines sessions qui étaient pleines. Mais j’ai quand même eu entre 20 et 30 personnes à mes sessions. Ce qui est bon score par rapport aux sessions de Rennes On Rails

Et enfin merci à :
@ndeloof, @gcollic et le reste de la team pour l’organisation. Une super journée presque sans couac. Franchement pour une première c’est vraiment génial.
@thierryhenrio pour son support dans Rennes On Rails et sans qui je ne me serais peut-être pas lancé dans l’aventure de faire 2 sessions.
Et enfin à Néo-Soft qui m’a dégagé une journée pour assister à cette première. D’ailleurs, n’hésitez pas à nous rejoindre, vous n’avez même plus de période d’essai en arrivant.

Si vous avez (raté || tellement aimé) ce que j’ai raconté ;) mes slides sont ici :

La version PDF

La version PDF
Adresse de la démo chez Heroku
Code source de la démo

PS: Si dans les URL des PDF, vous remplacé “print” par “screen”, vous aurez les puces grisés pour faire la présentation vous-même. La licence étant cc-by-nc-sa, n’hésitez pas à réutilisez ce que vous voulez dans le cadre des limitations de la licence. Et un petit mail me ferait plaisir :)

EDIT : Maintenant il y a le son sur les slides NoSQL :)

Planning chargé !

J’ai un planning un peu chargé dans les mois qui arrivent :
- Je m’occupe toujours de Rennes On Rails
- Je vais également assurer l’animation du forum Grafotech “Cloud” et assure la première session du 14 avril
- Et 2 présentations au Breizhcamp du 17 juin 2011

A suivre…

Travailler avec une mib snmp

Par exemple pour travailler avec une mib netapp :

snmptranslate -m NETWORK-APPLIANCE-MIB -Tl|less

Pour avoir la liste de tous les paramètres avec leurs “valeurs” :

.iso(1).org(3).dod(6).internet(1).mgmt(2).mib-2(1).interfaces(2).ifTable(2).ifEntry(1).ifOutErrors(20)
.iso(1).org(3).dod(6).internet(1).mgmt(2).mib-2(1).interfaces(2).ifTable(2).ifEntry(1).ifOutQLen(21)
.iso(1).org(3).dod(6).internet(1).mgmt(2).mib-2(1).interfaces(2).ifTable(2).ifEntry(1).ifSpecific(22)

Pour traduire ça avec une petite ligne :

echo '.iso(1).org(3).dod(6).internet(1).mgmt(2).mib-2(1).interfaces(2).ifTable(2).ifEntry(1).ifSpecific(22)' | perl -pe 's/\.[a-zA-Z-0-9]+\(/./g;s/\)//g'
.1.3.6.1.2.1.2.2.1.22

Et l’inverse :

snmptranslate -m NETWORK-APPLIANCE-MIB -Tl .1.3.6.1.4.1.789.1.7.3.1.1.5.0
NETWORK-APPLIANCE-MIB::cifsReads.0

Cacti – Renommer un “Internal Data Source Name” dans un “Data Templates”

Ne pas renommer comme un bourrin, c’est utilisé dans les RRA (fichier rrd).

1- chercher dans “Data Source” celles qui correspondent au template
2- ouvrir toutes les occurrences (s’il n’y en a pas faire 6 et 8 )
2a – ouvrir un graphique qui affiche cette valeur
3- noter les “Data Source Path” (<path_rra>/blablabla.rrd
4- se positionner dans <path_rra>
5- lancer “for f in fichier1.rrd fichier2.rrd;do rrdtool info $f|grep -E ‘^ds’;done” qui doit afficher :
ds[ancien nom]
6- préparer dans une fenêtre la modification du “Data Templates” avec son nouveau “Internal Data Source Name” (ne pas valider)
7- lancer “for f in fichier1.rrd fichier2.rrd;do rrdtool tune $f -r ancien_nom:nouveau_nom;done”
7a- relancer le 5 pour valider le changement
8- valider la fenêtre “Data Templates” avec son nouveau “Internal Data Source Name”
8b- recharger la fenêtre du 2a

Et voila

Tout pour gérer les timestamp – All for timestamp

Afficher le timestamp courant / print current timestamp:

perl -e 'print time;'
date +%s

Le timespamp de la veille / Yesterday timestamp:

perl -e 'print time-1*86400;'
date -d '1 day ago' +%s # Work only with up-to-date date such as Linux

su -

Comment faire lancer par un utilisateur une suite de commandes dans un script exécuté en temps que root ?
Howto launch commands by user in script executed by root.

Par exemple, je veux que l’utilisateur “oracle” exécute ces commandes :
For exemple I would like to execute there as “oracle”:

for i in azer qsdf fghj zaer fg ery qsjjy  azern ; do
        touch /tmp/tib/titi.$$.$i
done

Il suffit de l’encapsuler dans :
I just need to put commands between:

cat << "EOF" | su - user
EOF

Par exemple :
For example:

cat << "EOF" | su - oracle
for i in azer qsdf fghj zaer fg ery qsjjy  azern ; do
        touch /tmp/tib/titi.$$.$i
done
EOF

Et voilà ! / And voilà !

sed #2

Comment utiliser sed pour remplacer ça / Howto replace this with sed:

ns01:x:11062:11062::/home/ns01:/bin/sh
:x:11062:11062::/home/ns01:/bin/sh

En ça / To this:

ns01:x:11062:11062:::0:0
:x:11062:11062:d::0:0

Taper les lignes de codes / use there command line:

(echo ns01:x:11062:11062::/home/ns01:/bin/sh; \
echo :x:11062:11062:d:/home/ns01:/bin/sh ) \
| sed -r 's/^(([^:]*:){5}).*/\1:0:0/'

Explications :
s/ pour lancer la recherche
-r pour passer en expression régulière avancée
^ pour commencer en début de chaine
[^:]*: pour chercher tout ce qu’il peut y avoir avant un “:” y compris rien
grouper [^:]*: entre des () suivit de {5} pour avoir 5 occurrences du pattern
le .*$ à la fin de la chaine pour l’enlever dans la substitution

/ pour passer à la partie de ce qu’il faut mettre à la place
\1 pour récupérer, la première partie qui match entre ()
Dans l’exemple

ns01:x:11062:11062::
:x:11062:11062:d:

et :0:0 pour l’ajouter à la fin de la chaine ;)

Explanation:
s/ start the search
-r use extended regular expressions
^ start on the strings beginning
[^:]*: search anything excluding “:” including nothing
group [^:]*: in () followed by {5} to have 5 instance of pattern
the .*$ at the end was here to remove the rest

/ to pass at the remplacement
\1 to get first matching part was betwen ()
In this exemple

ns01:x:11062:11062::
:x:11062:11062:d:

and :0:0 for add it at the end ;)

Maintenant, vous pouvez utiliser la commande sed / now you can use the sed command:

sed -r 's/^(([^:]*:){5}).*/\1:0:0/' /etc/passwd