Save time and energy with UML diagram generator tools online !

Introduction

During a software architecture report redaction, i was confronted to a major problem : I would generated some UML diagrams as « Use Case », « Class Diagram » and « Activity Diagram » but i didn’t have tools as Microsoft Office Visio or equivalent installed on my laptop. So i searched web tools to generate these diagrams easily.

What i found ?

First website i found was Web Sequence Diagram: www.websequencediagrams.com
Second website i found was yUML: yuml.me
Third website i found was KangaModeling: kangamodeling.org

Why these tools are powerful ?

1. Scriptable

These tools allow to describe what we want with a script language.

Example with Web Sequence Diagram Tool  :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Show Action with RoR
Browser->URL Routing : GET
URL Routing->Controller : show Action
Controller -> Model : find ( params[id] )
Model -> Controller : trigger
Controller -> Controller : Lookup Show View
Controller -> View : Render ( Show View, trigger )

View -> Model : getData()
Model -> Trigger (Physical Element) : request() : SNMP / SOAP / XMLRPC / ...
Trigger (Physical Element) -> Model : response : XML / JSON / ...
Model -> View : data

View->Browser : HTML

Activity diagram image generated :

Example with Web Sequence Diagram Tool  :

1
2
3
4
5
6
7
8
[User]-(Show a monitor)
[User]-(Show monitor's parameters)
[Administrator] - (Manage a monitor)
[Administrator] - (Manage users)
(Manage a monitor)>(Delete a monitor)
(Manage a monitor)>(Update a monitor)
(Manage a monitor)>(Add a monitor)
(Manage users)<(LDAP Active Directory)

Use case diagram image generated :

2. Integration with other services

Both tools integrate an API.

They allow to integrate images in your website with just a GET or POST request.

Example with yUML :

1
<img src="http://yuml.me/diagram/class/[Customer]->[Billing Address]" alt="" />

Will generate :

 3. Universal

Implementation with other language is very easy.

Example with Python implementation :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import urllib
import re

def getSequenceDiagram( text, outputFile, style = 'default' ):
    request = {}
    request["message"] = text
    request["style"] = style
    request["apiVersion"] = "1"

    url = urllib.urlencode(request)

    f = urllib.urlopen("http://www.websequencediagrams.com/", url)
    line = f.readline()
    f.close()

    expr = re.compile("(\?(img|pdf|png|svg)=[a-zA-Z0-9]+)")
    m = expr.search(line)

    if m == None:
        print "Invalid response from server."
        return False

    urllib.urlretrieve("http://www.websequencediagrams.com/" + m.group(0),
            outputFile )
    return True

style = "qsd"
text = "alice->bob: authentication request\nbob-->alice: response"
pngFile = "out.png"

getSequenceDiagram( text, pngFile, style )

4. Others skills

  • Diagram generation by command line;
  • Output formats as png, jpg, pdf, json;
  • A lot of fork projects in different languages.

To resume, these tools will permit you to save time and energy. Exit graphic tools which are too much heavy, slow and onerous.

En savoir plus…

Paris Timelapse Experiment

My first timelapse try with a amazing view from paris.

Next time, i will try to shoot the same view with a sunrise & a sunset.

MATERIALS

Nikon D90
Nikon AF 50 MM F/1.8 D
Poor unstable tripod

SOFTWARES

Nikon Camera Control Pro 2
Adobe Premiere Pro CS5.5 (1824 Photos, No effects)

MUSIC

Flume – Sleepless feat. Anthony For Cleopatra

CREDITS

Mathieu Lacrouts for music choice. mathieulacrouts.fr

 VIDEO

Thumbnail me 3.0 Released

For those who do not know Thumbnail me, please follow this link.
 

After more than 9 months of development between Beta version and Release version, Thumbnail me 3.0 is now available at www.thumbnailme.com.

Major updates are :

  • Migration to Qt 4.8.0
  • All is batchmod
  • 12 languages available ! ( 4 languages in Beta Version).

Languages available

ENGLISH
FRENCH
DEUTSCH
ESPAGNOL
CZECH
CROATIAN
HUNGARIAN
ITALIAN
DUTCH
PORTUGESE
CHINESE
RUSSIAN

Complete Changelog

- Migration to Qt 4.8.0.
- File Menu updated.
- Czech Translation added.
- Dutch Translation added.
- Italian Translation added.
- Hungarian Translation added.
- Croatian Translation added.
- Portugese Translation added.
- Chinese Translation added.
- Russian Translation added.
- Restore Window State and Window Geometry at startup added.
- Output Path editable.
- Same output folder as source rendering added.
- Copy to clipboard VerboseWindow added.
- Each item has its own Timeline added.
- Minor bugs fixed.

Screenshots

Choose your custom font Customize your thumbnails colors
A timeline can exclude a portion of the selected media Add your own fonts easily
Thumbnail me is available in 12 different languages Upload your thumbnails directly to ImageShack
ImageShack's response with different links Help Widget

Statistics

10349 count Lines of Code

234 commits

23 bugs reports

Too much hours of development

Where is Linux Version ?

I need people with skills in .deb/.rpm packaging. Compilation is OK. Please contact me at quentinrousseau <A.T> thumbnailme.com

Donate

If you like my work about Thumbnail me, please make a donation.

Support This Project

Follow us !



En savoir plus…

PhotoCatch | Déclenchement automatisé d’un appareil photo D90 à partir d’un capteur de mouvements et d’un Arduino

Dans mon dernier post, je parlais de notre réalisation lors du FabLab à savoir :

Un appareil photo avec déclenchement automatisé via un capteur de mouvement et un arduino.

Aujourd’hui, je vais détailler le montage de cette réalisation.

Le matériel

  • Un boîtier NIKON D90 ;
  • Une télécommande filaire premier prix (Disponible ici) ;
  • Un arduino uno ;
  • Un servomoteur ;
  • Un capteur ultrasons ;
  • Une breadboard ;
  • Quatres afficheurs 7 segments ;
  • Une touche de talent.

PhotoCatch – Etape par étape

Principe de PhotoCatch

Achat de la télécommande

  1. La première étape consiste à acheter une télécommande qui va piloter le déclenchement de l’appareil photo. Celle ci suffit amplement : http://quent.in/Af9bg0
  2. Couper délicatement l’extrémité de la télécommande afin de ne pas détériorer les 3 fils qui se cachent sous la gaîne en plastique.

Parmis ces 3 fils, on trouve un fil blanc, jaune et rouge.

  • Le contact du fil blanc (masse) et jaune permettent de faire l’autofocus.
  • Le contact  du fil blanc (masse) et du fil rouge permettent de déclencher la capture.

Schémas de montage

Réalisés sous Fritzing – http://fritzing.org

  • 2 optocoupleurs pour contrôler le mécanisme de focus et de shoot (et d’isoler l’appareil photo du reste du circuit) ;
  • 1 capteur ultrasons permettant de calculer la distance d’un obstacle (30° d’ouverture) ;
  • 1 servomoteur permettant au capteur ultrasons de balayer un champ plus large (180°) ;
  • 4 afficheurs 7 segments permettant de compter le nombre de photos prises.

Code arduino

Le code est disponible dans son intégralité sur GitHub : https://github.com/2xyo/fablab/tree/master/photocatch et sous « THE BEER-WARE LICENSE » ;)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
/*
||
|| @author Yohann Lepage
|| @author Quentin Rousseau
|| @version 0.2
||
|| @description
|| PhotoCatch prend automatiquement une photo lorsque
|| quelqu'un passe devant l'appareil grace à son capteur
|| à ultra-son
||
*/


#include
#include
#define DEBUG true

// Librairies utilisées
// http://arduino.cc/en/Tutorial/Sweep
// http://arduino.cc/en/Tutorial/Ping

//7 Segments
int rxSegPin = 0;
int txSegPin = 3;
int photosCounter = 0;
SoftwareSerial segSerial = SoftwareSerial(rxSegPin, txSegPin);

// Ultra Son
// Pin Ultra son
int pingPin = 9;
int val = 0;
int ultrasoundValue = 0;
int timecount = 0; // Echo counter

// Appareil Photo
// Pin Focus
int focusPin = 5;
// Pin Shoot
int shootPin = 6;
// Durée du focus
int focusTime = 0;

// Distance pour le shoot
int shoot_threshold = 100;

// Servo Moteur
Servo myservo;
// Pin Servo
int servoPin = 10;
// Position du Servo Moteur 0 - 180°
int pos = 0;

// Démarrage de l'Arduino
void setup()
{
//Serial pour mode DEBUG
if(DEBUG)
Serial.begin(9600);
// Attachement du servo au servoPin
myservo.attach(servoPin);
// Passage en mode Output pour l'ultra son
pinMode(pingPin, OUTPUT);
// Passage en Output pour le focus
pinMode(focusPin, OUTPUT);
// Passage en Output pour le Shoot
pinMode(shootPin, OUTPUT);
// Passage en low des focus et shoot
digitalWrite(focusPin, LOW);
digitalWrite(shootPin, LOW);
//7 Segments
segSerial.begin(9600);
pinMode(rxSegPin, INPUT);
pinMode(txSegPin, OUTPUT);

segSerial.print("vv");
//Turn Colon Off
segSerial.print('4d',HEX);
segSerial.print('00',HEX);
}

// Démarrage de la boucle principale
void loop()
{
// Appel à la méthode de balayage grace au servo
sweep();
}

// Détection d'un objet
void sonar()
{
// establish variables for duration of the ping,
// and the distance result in inches and centimeters:
long duration, inches, cm;

// The PING))) is triggered by a HIGH pulse of 2 or more microseconds.
// Give a short LOW pulse beforehand to ensure a clean HIGH pulse:
pinMode(pingPin, OUTPUT);
digitalWrite(pingPin, LOW);
delayMicroseconds(2);
digitalWrite(pingPin, HIGH);
delayMicroseconds(5);
digitalWrite(pingPin, LOW);

// The same pin is used to read the signal from the PING))): a HIGH
// pulse whose duration is the time (in microseconds) from the sending
// of the ping to the reception of its echo off of an object.
pinMode(pingPin, INPUT);
duration = pulseIn(pingPin, HIGH);

Serial.print(microsecondsToCentimeters(duration));
Serial.print(" cmn");

if(microsecondsToCentimeters(duration) {
shoot();
}

delay(150);
}
// Balayage avec le Servo
void sweep()
{
for(pos = 0; pos &lt; 90; pos += 1) // goes from 0 degrees to 180 degrees { // in steps of 1 degree myservo.write(pos); // tell servo to go to position in variable 'pos' //delay(15); // waits 15ms for the servo to reach the position sonar(); } for(pos = 90; pos &gt;=1; pos-=1) // goes from 180 degrees to 0 degrees

{
myservo.write(pos); // tell servo to go to position in variable 'pos'
//delay(15); // waits 15ms for the servo to reach the position
sonar();
}
}

long microsecondsToCentimeters(long microseconds)
{
// The speed of sound is 340 m/s or 29 microseconds per centimeter.
// The ping travels out and back, so to find the distance of the
// object we take half of the distance travelled.
return microseconds / 29 / 2;
}

//Display Photos Counter on the 7 Segments Display
void displaySeg()
{
photosCounter = photosCounter +1 ;

if(photosCounter &lt; 10)
{
segSerial.print(" ");
segSerial.print(photosCounter);
}
else if(photosCounter &lt; 100)
{
segSerial.print(" ");
segSerial.print(photosCounter);
}
else if(photosCounter &lt; 1000)
{
segSerial.print(" ");
segSerial.print(photosCounter);
}
else
{
segSerial.print(photosCounter);
}

Serial.print("Compteur photos : ");
Serial.print(photosCounter);
Serial.print("n");
}

// Capture d'une photo
void shoot()
{
// Focus
digitalWrite(focusPin, HIGH);
delay(focusTime);

// Déclenchement de la photo
digitalWrite(shootPin, HIGH);
delay(200);

displaySeg();

// Remise à 0 des Pins
digitalWrite(focusPin, LOW);
digitalWrite(shootPin, LOW);
}

Démonstration par mon collègue Yohann Lepage (@2xyo)

Bonus – Timelapse de l’explor’Camp par PhotoCatch :

Evolution possible

  • Utiliser « Picture Transfert Protocol » qui permet de contrôler beaucoup plus de paramètres tels que l’ouverture de l’objectif, la vitesse et même la récupération des photos. Tout cela par contrôle USB.

En savoir plus…

FabLab à Télécom Bretagne | Retour d’expérience

La semaine du 13 Janvier c’est intersemestre à Télécom Bretagne  !

Pour ma part, j’ai choisi de participer à mon premier atelier FabLab.

FabLab c’est quoi ?

FabLab

FabLab c’est tout d’abord FABrication LABoratory et ce concept viens tout droit du Massachusetts dans les laboratoires du MIT.

Le principe d’un FabLab repose sur un regroupement de personnes cherchant à créer, modifier, bidouiller , hacker tout et n’importe quoi. (Oui c’est large)

Mais comment ça marche ?

Y’a pas d’organisation concrête, il suffit d’avoir une idée, un peu de matériel et c’est parti !

Le matériel que nous avions à notre disposition était le suivant (plus ou moins) :

Snootlab Starter Kit ×3
Arduino UNO ×16
Arduino Uno Ethernet avec USB 2 Serial ×2
Bouton poussoir 12mm ×20
Shield Xbee rev.2007 ×12
Module XBee 802.15.4 Série 1 XB24-ACI-001 ×12
Breadboard ×20
Capteurs/Photorésistance/LED
Matrice de LED ×1
Imprimante 3D Makerbot (Plus d’info sur cette imprimante ici)

Pourquoi Arduino a du succès ?

Logo de Arduino

Logo de Arduino

Dans la liste ci dessus revient beaucoup le nom Arduino. Pourquoi aujourd’hui beaucoup de FabLabs utilisent cette plateforme ?

La réponse réside dans le faite que la plateforme Arduino est trés simple d’utilisation. L’ajout de module Ethernet / Wifi / ZigBee est un jeu d’enfant. Les connaissances en électronique n’ont pas besoin d’être poussées. Il suffit de ne pas inverser le + et le -,  de savoir lire une Datasheet et d’avoir quelques connaissances en programmation (beaucoup d’exemples sont fournis). Rien de plus !

Arduino Diecimila

Un Arduino Diecimila

Mon retour d’expérience

Ce FabLab m’a ouvert une nouvelle dimension : Celle de la bidouille à porter de tout le monde !

J’ai découvert :

  • La plateforme Arduino, la puissance qu’elle dégage et sa modularité ;
  • Ma première imprimante 3D ;
  • Qu’on peut prototyper tout et n’importe quoi en quelques heures ;
  • Et surtout des personnes passionnées et motivées à 300% .

Yohann Lepage (@2xyo) et moi même avons crée un déclencheur d’appareil photo automatique à partir d’un module de détection de mouvements (Sonar Ultrasons).

Je détaillerais notre réalisation dans un autre post très prochainement.

Tests de notre projet "PhotoCatch"

Explor'Camp

Explor' Camp au centre vie de Télécom Bretagne

En savoir plus…

Exploiter les logs CurrentWidget de votre Android

Connaissez-vous CurrentWidget ?

Il s’agit d’un petit logiciel qui relève la consommation électrique de votre batterie par votre cher et tendre mobile.

Un petit widget est ainsi disponible sur votre home.

Currentwidget - Home

En poussant le vice un peu plus loin, une petite option permet de logger cette consommation dans un fichier texte.

Currentwidget - Settings

Voici un extrait des logs générés :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
04/04/2011;11:35:46;-283mA;23%
04/04/2011;11:36:02;-168mA;22%
04/04/2011;11:37:02;-214mA;22%
04/04/2011;11:38:02;-175mA;22%
04/04/2011;11:39:02;-127mA;22%
04/04/2011;11:40:02;-233mA;21%
04/04/2011;11:41:02;-138mA;21%
04/04/2011;11:42:02;-288mA;21%
04/04/2011;11:43:02;-193mA;21%
04/04/2011;11:44:02;-242mA;20%
04/04/2011;11:45:02;-211mA;20%
04/04/2011;11:46:02;-208mA;20%
04/04/2011;11:47:06;-163mA;19%
04/04/2011;11:48:24;-7mA;19%
04/04/2011;11:49:02;-7mA;19%
04/04/2011;11:49:04;-7mA;19%
04/04/2011;11:50:04;-253mA;19%
04/04/2011;11:51:04;-102mA;19%
04/04/2011;11:52:12;-13mA;19%
04/04/2011;11:54:47;-3mA;19%
04/04/2011;11:55:47;-5mA;19%

J’ai testé et laissé ce logiciel tourner pendant 3 mois. J’ai ensuite parsé le fichier, tiré les informations qui m’intéressaient et construit avec un tableur le graphique suivant.

Power Consumption HTC Desire HD 13000 mAH / 1 week

 

Le graphique suivant représente la consommation de batterie sur une semaine pour une question de visibilité.

Mon utilisation mobile se comporte de :  Ecoute mp3, Navigation web via 3G, Facebook, Twitter et sms. Très rarement d’appels.

Il est intéressant de constater que l’autonomie de mon mobile n’est pas très bonne et qu’à 20h00, je suis déjà sous la barre des 30%.

Bonus : On remarque que le 15 Avril 2011, la charge de mon mobile a eut lieu aux alentours de 05h00 du matin. La soirée a dû être difficile …

En savoir plus…

Obfusquer votre adresse mail et échapper aux SPAM


Il nous arrive bien souvent de devoir renseigner notre @mail au sein d’une page web.
Seulement il est essentiel de prendre des précautions sur la manière de la renseigner face au SPAM.
En effet, une @mail renseignée en simple texte est facilement détectable par un robot (via une simple expression régulière par exemple) et en moins de quelques secondes, vous voilà inscrit sur une liste de SPAM contre votre volonté.

Des méthodes sont déjà utilisées pour essayer de palier à ce problème:

Obfuscation textuelle

1
2
# Remplacer @ et . par "[at]" et "[dot]"
email[at]domain[dot]com

Avantages

  • Obfuscation efficace et implémentation simple.

Inconvénients

  • Impossibilité de construire un mailto.

Obfuscation par CSS

1
<span class="obfuscate">moc.niamod@liame</span>
1
2
/* Et le renverse via CSS */
.obfuscate { unicode-bidi: bidi-override; direction: rtl; }

Avantages

  • Obfuscation très efficace.

Inconvénients

  • Impossibilité de construire un mailto.
  • Si le CSS n’est pas disponible, l’@mail s’affichera à l’envers.

Obfuscation par JavaScript

La plupart des robots n’exécutent pas de Javascript (pour des questions de performance et pour ne pas se faire tracer, j’imagine…). Alors on peut s’amuser à utiliser des algorithmes tels que le ROT13 (rotate by 13 places).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Rot13 = {
    map: null,

    convert: function(a) {
        Rot13.init();

        var s = "";
        for (i=0; i < a.length; i++) {
            var b = a.charAt(i);
            s += ((b>='A' && b<='Z') || (b>='a' && b<='z') ? Rot13.map[b] : b);
        }
        return s;
    },

    init: function() {
        if (Rot13.map != null)
            return;
             
        var map = new Array();
        var s   = "abcdefghijklmnopqrstuvwxyz";

        for (i=0; i<s.length; i++)
            map[s.charAt(i)] = s.charAt((i+13)%26);
        for (i=0; i<s.length; i++)
            map[s.charAt(i).toUpperCase()] = s.charAt((i+13)%26).toUpperCase();

        Rot13.map = map;
    },

    write: function(a) {
        document.write(Rot13.convert(a));
    }
}
1
2
3
4
5
<script type="text/javascript">
// <![CDATA[
   Rot13.write('<n uers="rznvy@qbznva.pbz">rznvy@qbznva.pbz</n>);
// ]]>
</script>

Avantages

  • Obfuscation très efficace.

Inconvénients

  • Si le client web ne supporte pas le JavaScript, aucune @mail ne sera affichée.

D’autres solutions existent comme afficher l’@mail dans une image mais les robots utilisent des techniques de reconnaissance optique de caractères au sein d’une image: l’OCR

Email address embedded in an image.

Tests grandeur nature

Un collège de techblog nous invite à regarder le volume de SPAM reçu en fonction des différentes méthodes d’obsfuscation après avoir laissé ses @mail dans la nature pendant 1 an et demi.

Volume de SPAM reçu en fonction des différentes méthodes d'obfuscation

 

Les résultats parlent d’eux même, ne renseignez pas (même sous la torture) votre @mail en simple texte ! Utilisez au minimum la méthode n°1, qui diminue fortement les chances d’être détecté par un robot.

En savoir plus…

Mkvmerge | Remuxer une saison à la volée

Heureux possesseur d’un NAS Synology DS211j, j’ai parfois besoin de remuxer des saisons complètes de séries (pour intégrer des sous titres la plupart du temps), et tant qu’à faire autant les remuxer en local sur le NAS.

Pour cela j’utilise le binaire mkvmerge contenu dans le package mkvtoolnix.

1ère étape: Récupérer le paquet mkvtoolnix et l’installer.

Note: Je ne récupère pas mkvtoolnix via le dépôt http://ipkg.nslu2-linux.org/feeds/optware/cs05q3armel/cross/unstable/ car celui-ci n’a pas fonctionné pour moi (manque de dépendances). Voir ici.

1
2
3
wget mkvtoolnix http://www.rzuser.uni-heidelberg.de/~tkolb3/mkvtoolnix_4.2.0-1_arm.ipk

ipkg install mkvtoolnix_4.2.0-1_arm.ipk

Vous vous retrouvez face à une jolie erreur de MD5 (c’est normal car ce n’est pas le paquet issu du dépôt officiel)

Il faut alors modifier le MD5 dans /opt/lib/ipkg/lists/cross de mkvtoolnix par celui-ci 0be20bd376391c911a7eeba46c8883ac et réitérer l’opération.

2ème étape: mkvtoolnix est maintenant opérationnel sur le Synology, passons au remuxage !

Contexte:

Soit une saison de 23 épisodes auxquelles je veux ajouter des fichiers de sous titres (.srt) Français et Anglais, la structure étant la suivante:

1
2
3
4
5
6
7
8
9
10
ls
01 - REMUX  # Dossier de destination
02 - FR_SRT # Contient les sous titres FR sous la forme Serie.SXXEXX.720p.HDTV.x264.srt
03 - EN_SRT # Contient les sous titres EN sous la forme Serie.SXXEXX.720p.HDTV.x264.srt
Serie.SXXE01.720p.HDTV.x264.mkv #Fichier à remuxer
Serie.SXXE02.720p.HDTV.x264.mkv #Fichier à remuxer
Serie.SXXE03.720p.HDTV.x264.mkv #Fichier à remuxer
Serie.SXXE04.720p.HDTV.x264.mkv #Fichier à remuxer
...
Serie.SXXE23.720p.HDTV.x264.mkv #Fichier à remuxer

On ajoute à cela un petit script reposant sur une boucle for.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/bin/bash

echo -e "Mkvmerge - Remux en série."
PATH_TO_MEDIA=$3
FR_PATH=$4'/'
EN_PATH=$5'/'
OUTPUT_FOLDER=$6

echo -e "Remux des episodes $1 à l'épisode $2"
echo -e "Répértoire des médias à transcoder: $3"
echo -e "FR_PATH: $4"
echo -e "EN_PATH: $5"
echo -e "Notes: .srt files need to be in UTF-8 format"
echo -e "Répértoire de destination: $6"
echo -e

for i in `seq $1 $2`
do

#Prefix '0' pour les épisodes < 10
if test $i -lt 10
then
namefile="Serie.SXXE0$i.720p.HDTV.x264"
else
namefile="Serie.SXXE$i.720p.HDTV.x264"
fi

echo -e "Media entrant: $PATH_TO_MEDIA/$namefile"
echo -e "Media sortant: $OUTPUT_FOLDER/$namefile"
echo -e "EN SRT: $EN_PATH$namefile.srt"
echo -e "FR SRT: $FR_PATH$namefile.srt"
mkvmerge -v -o "$OUTPUT_FOLDER/$namefile.mkv" "--language" "1:eng" "--default-track" "1:no" "--forced-track" "1:no" "--display-dimensions" "1:1280x720" "--default-track" "2:yes" "--forced-track" "2:no" "-a" "2" "-d" "1" "-S" "-T" "--no-global-tags" "--no-chapters" "$PATH_TO_MEDIA/$namefile.mkv" "--language" "0:eng" "--track-name" "0:English" "--default-track" "0:no" "--forced-track" "0:no" "-s" "0" "-D" "-A" "-T" "--no-global-tags" "--no-chapters" "$EN_PATH$namefile.srt" "--language" "0:fre" "--track-name" "0:French" "--forced-track" "0:no" "-s" "0" "-D" "-A" "-T" "--no-global-tags" "--no-chapters" "$FR_PATH$namefile.srt" "--track-order" "0:1,0:2,2:0,1:0"

done

3ème étape: Il ne reste plus qu’à appeler notre script de la façon suivante :

1
2
# sh monscript 1 23 $FOLDER_TO_MEDIA $FR_SUBTITLES_FOLDER $EN_SUBTITLES_FOLDER $DESTINATION_FOLDER
sh monscript 1 23 "/Series/MaSerie/Saison X" "/Series/MaSerie/Saison X/02 - FR_SRT" "/Series/MaSerie/Saison X/03 - EN_SRT" "/Series/MaSerie/Saison X/01 - REMUX"

Note 1: Dans l’état actuel du script, la langue française sera la langue par défaut. Pour changer ce comportement, jouez avec le paramètre suivante: « --default-track » « 2:yes » ou « --default-track » « 0:no ».

Note 2: Dans l’état actuel du script, les fichiers de sous titres (.srt) doivent être encodés au format UTF-8. Pour changer ce comportement, jouez avec le paramètre: « --chapter-charset character-set »

En savoir plus…

Parallel-SSH | Parralélisez au maximum!

Je me suis récemment trouvé dans une situation dans laquelle je devais exécuter des commandes redondantes sur plusieurs serveurs (environnement clusterisé par exemple) et comme tout grand informaticien, je n’aime pas passer sur 50 serveurs pour répéter une tâche. Je me suis donc lancé à la recherche d’un utilitaire me permettant d’arriver à mes fins.

J’ai trouvé après quelques recherches PSSH (pour parallel-ssh) disponible à l’adresse suivante: http://www.theether.org/pssh/

Le principe est simple:

1. Je déclare mes hosts dans un fichier

1
2
3
user@192.168.1.1
user@192.168.1.2
user@192.168.1.3

2. Je lance PSSH en indiquant l’emplacement du fichier ci-dessus

1
pssh -P -h ~/nodes.txt -A "$MACOMMANDE"

Et le tour est joué! Voici la sortie avec MACOMMANDE=’cat /etc/snmp/snmpd.conf | md5sum’ (Vérifions si le fichier snmpd.conf est strictement identique sur nos 3 serveurs).

1
2
3
4
5
6
192.168.1.1: d41d8cd98f00b204e9800998ecf8427e -
[1] 14:16:08 [SUCCESS] user@192.168.1.1
192.168.1.2: d41d8cd98f00b204e9800998ecf8427e -
[2] 14:16:08 [SUCCESS] user@192.168.1.2
192.168.1.3: d41d8cd98f00b204e9800998ecf8427e -
[3] 14:16:08 [SUCCESS] user@192.168.1.3

3 MD5 identiques = 3 fichiers identiques

Bien entendu, utilisez cet outil avec grande précaution et testez votre commande sur une machine test avant! En cas d’erreur, ce sera l’ensemble de vos serveurs configurés qui seront impactés…

Note: Il faut prélablement que les hosts soient connus par SSH dans ~/.ssh/known_hosts

En savoir plus…

Thumbnail me – Vignettez à l’infini !

Bon je commence avec mon plus gros succès: Thumbnail me.

Kesako?

Thumbnail me est un logiciel qui permet de générer des vignettes à partir d’un film.

Une petite panoplie de paramètre est personnalisable tel que le nombre de colonnes ou le nombre de lignes que vous souhaitez dans votre vignette. On peut également modifier les couleurs et les polices selon les préférences de l’utilisateur. On trouvera également un mode de traitement par lot (Batchmod) et une fonction d’upload direct.

Un aperçu de l’interface graphique:

Thumbnail me

3 ans de développement

Eh oui j’ai pris mon temps! Et j’ai aussi appris avec mes erreurs. J’ai du retourner le code une bonne dizaine de fois, faute de bonne conception initiale et par manque d’expérience! Mais j’ai appris énormément et ai acquis beaucoup de rigueur.

Thumbnail me est codé en C++ et repose sur le Framework Qt.

Aujourd’hui?

Aujourd’hui  Thumbnail me V3.0 est disponible en beta à l’adresse suivante www.thumbnailme.com et traduit en 4 langues (Français, Anglais, Espagnol, Allemand). Je travaille actuellement sur la release candidate qui est prévue pour courant septembre. (La release candidate inclura les versions Linux (32bits & 64bits) ainsi que les sources du projet).

Bien entendu, vous serez les premiers avertis de la sortie de la version finale ;) .

 

En savoir plus…