PourSamy

From bernie's
Jump to: navigation, search
{
function myScript(thisObj) {
          function myScript_buildUI(thisObj) {
                    var myPanel = (thisObj instanceof Panel) ? thisObj : new Window("palette", "My Panel Name", [0, 0, 300, 300]);
 
                    res="group{orientation:'column', alignment:['fill', 'fill'], alignChildren:['fill', 'fill'],\
                              myButton: Button {text:'Button Name'},\
                    }"
                    //Add resource string to panel
                    myPanel.grp = myPanel.add(res); 
                    //Setup panel sizing and make panel resizable
                    myPanel.layout.layout(true); 
                    return myPanel;
          }
 
 
          var myScriptPal = myScript_buildUI(thisObj);
            
 
          if ((myScriptPal != null) && (myScriptPal instanceof Window)) {
                    myScriptPal.center();
                    myScriptPal.show();
                                            
                    button = myScriptPal.children[0].children[0];
                        button.myParam = 'test';
                        function teste(e) {
                            alert(e); // return the event "onMouseClick"
                            alert(e.target); // return the button object
                            alert(e.target.myParam); // return myParam
                            };
                    //    button.addEventListener ('click', teste, false);
                        button.addEventListener ('click', "addBtn(\"t\")", false);
                    }
          }
 
 
          myScript(this);



function addBtn(pan){
    alert("plop "+pan);
    //code to add button
    }

}

import os, os.path
filePath = r'C:/Program Files/Windows NT'

for dirname, dirnames, filenames in os.walk(filePath):
    print()
    if not 'Accessories' in dirname :
        print(dirname + ":")
        for filename in filenames:
            print(os.path.join(dirname, filename))



Pour ton truc de GB voici des tips

Au départ y a: Un script python qui lit un dossier (et tt les sous dossiers) pour rechercher certains fichiers, ici les png+jpg tel que c'est écrit il se lance qu'une fois et cherche que dans le dossier (et sous dossiers) donné mais check un peu le python c facile a changer

Le truc c'est qu'il met les infos dans un fichier texte qui sera ouvert plus tard par le PHP (en php tu peux faire tt ça mais c crado) j'explique en dessous certains trucs comme le md5


Là je l'ai testé dans maya mais faut surment que t'installe python sur la machine qui va servir de serveur

Python

import os, os.path, shutil, hashlib

dbName = r'text.txt'
filePath = r'c:/'

def md5Checksum(filePath):
    fh = open(filePath, 'rb')
    m = hashlib.md5()
    while True:
        data = fh.read(8192)
        if not data:
            break
        m.update(data)
    return m.hexdigest()

def listImgs(dir):
    tmpFile = filePath+"temp"+dbName;
    dbFile = filePath+dbName;
    fh = open(tmpFile,'w+')
    for root, dirs, files in os.walk(dir):
        for f in files:
            fullpath = os.path.join(root, f)
            if f.lower().endswith(('.png', '.jpg', '.jpeg')):
                size = os.path.getsize(fullpath)
                time = os.path.getmtime(fullpath)
                md5 = md5Checksum(fullpath)
                info = str(fullpath+"?"+str(size)+"?"+str(time)+"?"+md5+"\r\n") #j'utilise ? pour séparer les morceaux d'info, on le splittera plus tard
                #print(info)
                fh.write(info)
    fh.close()
    shutil.copyfile(tmpFile,dbFile)
            
listImgs("D:\EtudeDeForme")

ça donne par exemple:

...
D:\EtudeDeForme\3d\out\fun14b_02\fun14b_02.0121.png?1041103?1327709147.17?26e3e47759b950ddb7b61afc4cf38bbd
D:\EtudeDeForme\3d\out\fun14b_02\fun14b_02.0131.png?128?1327710832.05?64acdfb42083a54cd04997557df479e8
D:\EtudeDeForme\3d\renderData\mentalray\A0.png?4099680?1322526954.36?ab90dd8dff3e7e1e0566b273d9991798
D:\EtudeDeForme\3d\renderData\mentalray\fun7 01.png?396476?1326169429.13?b8b7757a8b1b98dc00000a874043ed65
D:\EtudeDeForme\3d\renderData\mentalray\fun7 02.png?439814?1326170169.12?0aa8f05ab89f64750d63ccd2f2e55886
D:\EtudeDeForme\3d\renderData\mentalray\fun7 03.png?522801?1326170950.91?9da7366d658f43aaf7d00b9b3ac5d08f
D:\EtudeDeForme\3d\sourceimages\ConcreteNew0028_3_L.jpg?2731840?1326998320.06?bbda4fd269d08ecb72308ecf39751bc1
D:\EtudeDeForme\3d\sourceimages\ConcreteNew0033_10_L.jpg?3947321?1326998037.02?ffdee3b6039402f2cdfa86332b4adff9
D:\EtudeDeForme\3d\sourceimages\ConcreteNew0033_1_L.jpg?2088043?1326998324.62?7557848f75e604b6d48cd4dfa990cae3
D:\EtudeDeForme\3d\sourceimages\ConcreteNew0033_9_L.jpg?1451078?1326998318.01?6fe4f5735bc581ac0ef77387e6d58bb7
D:\EtudeDeForme\3d\sourceimages\ConcretePlates0003_5_L.jpg?1154237?1327200068.28?896d73b9561002f98a4c9e99d2f8723e
...

Donc (1) le chemin (2) la taille en bytes (3) la date de dernière modif -- c un format spécial ms bcp utilisé en programmation (4) le checksum qui permet de vérifier si deux images sont similaires mm si elles ont des noms différents (dans le script python c la fonction 'md5Checksum' je l'ai copy paste du net mais ça marche)


Tu pourrais rajouter d'autres trucs avec python, et même faire ton système de 'logique' (qui check si ya des doublons ici) mais je préfère tout mettre dans une base de donné et le faire après, et pis je connais pas super bien le python

Reste qu'il faut faire en sorte que le script python 'boucle', je pense tu peux rajouter un wait et une loop, à voir, c pas difficile


Php/Mysql

Faut que t'installe sur une machine qui sera (de préférence) jamais éteinte un serveur Apache+une DB MySQL, moi j'utilise Xampp ça marche nickel ya tt dedans. PHP et Mysql c deux language différents et c bcp plus tordu que le javascript ou le python mais ya patate de code sur le net donc c facile.

Le truc cool c que des que tu l'as installé et lancé tu peux aller voir localement sur http://localhost ou http://127.0.0.1 et t'as ton serveur web qui tourne! Pour que les autres le voit ils faut qu'ils tapent l'ip:port de la machine sur le réseau.

Sur des windows tu peux éditer/copier sur chaque machine du réseau le fichier HOST C:\Windows\System32\drivers\etc\host pour que quand tu tape 'intranet' dans un browser ça dirige sur la machine qui à le serveur, c ce que je faisait à sup.

ça doit ressembler à ça

127.0.0.1 localhost
#
# plus de trucs si t'as craqué un toshop récemment!
192.168.0.XX:80 intranet

A moins de configurer bien votre réseau c'est impossible pour qlqun en dehors du réseau de voir l'intranet, et ç'est bien le but.


Php

Le php c'est un language qui est interprété par Apache et il recrache du html, mais il peut faire plein de truc. Si tu regarde dans ton installe de xampp/htdocs tu vera index.php c'est le fichier qui est lu par défaut quand tu tape http://localhost ou 127.0.0.1. Si tu l'ouvres tu vera que le contenu à rien à voir avec ce que tu vois qd tu va sur la page, et c'est normal. Je te laisse regarder genre le site du zéro PHP+Mysql pour te familiariser avec le schmilblick mais tu verra en général c'est tjrs comme ça:


<?php
//entre deux bornes tu met ce que tu veux
$johny = 120;
echo "<b>prout".($johny/2)."!</b>";
?>

<hr/>
<br/>Tu peux rajouter du html dans la page en dehors des bornes<br/>

<?php 
//et remettrte du php
for($i=0;$i<=20;$i++){
    echo "OK?".$i."<br/>";
}
?>

ça donne ça:

7O632.gif

Mysql

C'est là ou on va ranger l'info que le python à pécho. Pour visualiser les tables à la main faut que tu cherche phpMyAdmin (ds le panneau de config 'Admin' ou la page d'acceuil de 127.0.0.1 dans la barre de gauche)

Dans l'installation par défaut t'as déja des 'databases', et dedans des tables, et dedans des lignes et des colonnes. C excel en moins utilisable mais surpuissant. NOrmalment t'as le choix de créer une nouvelle database, je l'ai appelé 'gb_db' et je l'ai mis en latin1_general_ci c pas super important mais ca vaut mieux pr les accents.


Dans cette DB j'ai crée un table bidon qui s'appel gb_images, et je pense que tu fera toi même une table quand t'auras bien compris le truc et tu pourra mettre ce que tu veux dedans. J'ai mis 8 'colonnes' pour chaque image, et elles ont chacun des format spéciaux, pour optimiser la vitesse (à ton echelle c pas important mais bon). Check le screenshot:

PqgZ0.gif

En gros je vais crée pour chaque image des attributs (son nom, son chemin, sa date -- 'uid' c une colonne que j'appel unique id c'est un peu le truc par défaut que t'es obligé de faire pour que chaque ligne se différencie). Lis cet article pour en savoir plus. Là normalement ya de la place pour les commentaire, juste le bon nombre de caractère pour le md5 etc... Ici t'aurais pu rajouter une colonne pour le num d'épisode/saison/plan mais bon tant pis je l'ai pas fait (sinon c aussi con que rajouter une colonne 'season' avec un 'int' à 1 (ou 2 si yaura plus de 9 saisons =) ) et 'episodes' avec un 'int' a 2 (parcque ya pas plus que 99 episodes) et 'shot' avec un varchar à genre 10 - 10 caractères - pq c possible d'avoir des shots bis/ter etc et que tu peux pas prévoir)


Anyhow prend une pause parceque je pense que c'est un peu du brainfuck le mysql mais c con en fait. Là on a fini de rentrer dans le mysql normalement t'as plus besoin de réouvir phpMyAdmin (mais tu le fait qd même pr voir les données)


Sample Code

<?php
mysql_connect("localhost", "root", "");
mysql_select_db("cdcol");

if((isset($_GET['name']) && $_GET['name']!="") && (isset($_GET['title']) && $_GET['title']!="")){
	$name = $_GET['name'];
	$title = $_GET['title'];
	echo "Ajout de: ".$name." ".$title."<hr>";
	$query = "INSERT INTO `cdcol`.`cds` (`titel`, `interpret`, `jahr`, `id`) VALUES ('".$name."', '".$title."', '2012', NULL)";
	$result=mysql_query($query) or die(mysql_error());;
}


$query = "SELECT * FROM `cds`";
$result=mysql_query($query);
while ($row = mysql_fetch_array($result)) {
	echo $row['interpret']." - ".$row['titel']." - ".$row['jahr']."<br/>";
}
?>
<form method="get" action="<?php echo $_SERVER['PHP_SELF'] ?>">
Nom:<input type="textarea" name="name">
Titre:<input type="textarea" name="title">
<input type="submit" value="Ajouter">
</form>



...to be continued...