Accueil > > > PARSER FBML; COMMENT UTILISER DU CODE FBML (FACEBOOK) SANS PASSER PAR FACEBOOK
PARSER FBML; COMMENT UTILISER DU CODE FBML (FACEBOOK) SANS PASSER PAR FACEBOOK
Information sur la source
Description
Ceux qui codent des applications pour facebook savent que pour utiliser du FBML, il faut que le script tourne depuis facebook (application) ou utilise le framework Facebook Connect. Voici donc un parser qui va parser les tags FBML! Regardez les exemples fournis.
Source
- <?php
- /*
- * @Created: v2 - 15 avr. 07 - 14:25:10
- * v3 - 20 janv. 09 - 13:44:00
- * @author: blackwizzard <blackwizzard@gmail.com>
- * @project: FTL
- * @filename: class.ftlparser.v3.php
- */
-
- class fbml_parser {
-
- // declarations
- var $_instance;
- var $_vars;
-
- // Constructor
- function fbml_parser($file) {
-
- /** vars **/
- $this->_vars = array();
- $this->_vars["buffer"] = "";
- $this->_vars["log"] = array();
- $this->_vars["log"]["file"] = $file;
- $this->_vars["vars"] = array();
- $this->_vars["functionbuffer"] = array();
- $this->_vars["namespace"] = "fb";
-
- // functions
-
- $this->_vars["functionbuffer"]["loop"] = array();
- $this->_vars["functionbuffer"]["loopbuffer"] = array();
- $this->_vars["functionbuffer"]["onemptyloop"] = array();
- $this->_vars["functionbuffer"]["onemptyloopbuffer"] = array();
- $this->_vars["functionbuffer"]["show"] = array();
- $this->_vars["functionbuffer"]["showbuffer"] = array();
- $this->_vars["functionbuffer"]["section"] = array();
- $this->_vars["functionbuffer"]["sectionbuffer"] = array();
-
-
- /** read template **/
- $this->_vars["buffer"] = $this->freadFile($file);
-
- /** plugin loader **/
- $this->loadPlugins("FBML");
-
- $this->_vars["buffer"] = $this->searchtags($this->_vars["buffer"]);
-
- }
-
- /**
- * Output the parsed template
- *
- * @return Template buffer
- *
- */
- function output() {
- // apply loops
- foreach ($this->_vars["functionbuffer"]["loop"] as $loopName=>$loopOutput) {
- if ($loopOutput == "") {
- $loopOutput = $this->_vars["functionbuffer"]["onemptyloopbuffer"][$loopName];
- }
- $this->_vars["buffer"] = str_replace("<loop_$loopName/>",$loopOutput,$this->_vars["buffer"]);
- }
- //$this->parseAndApply("after");
- return $this->_vars["buffer"];
- }
-
- /**
- * Search and parse all FTL tags
- *
- * @return pre-parsed template
- *
- */
- function searchtags($in) {
- // match all tags in the form <type:name args>content</type:name> and singleton <type:name args />
- //$reg = "#<([a-z]+):(.*?)\s+(.*?)\s*(>(.*?)</\\1:\\2>|/>)#mis"; // global regex to match all tags. Including FBML.
- //$reg = "#<".$this->_vars["namespace"].":(.*?)\s+(.*?)\s*(>(.*?)</".$this->_vars["namespace"].":\\1>|/>)#mis";
- $reg = "#<".$this->_vars["namespace"].":(.*?)\s+(.*?)\s*(>(.*?)</".$this->_vars["namespace"].":\\1>|/>)#mis";
-
- if (preg_match($reg, $in)) {
-
- $in = preg_replace_callback($reg,array($this,"tagparser"),$in,-1);
- return $this->searchtags($in);
- //return $in;
- } else {
- return $in;
- }
- }
-
- /**
- * Parse a single tag
- *
- * @return the parsed tag
- *
- */
- function tagparser($array) {
- $query = $array[0];
- //$tagType = $array[1];
- $tagName = $array[1];
- $tagArgs = $array[2];
- $tagContent = $array[4];
- $argsArray = array();
-
- $tagName = str_replace("-","_",$tagName);
-
- $tagArgs = str_replace("\\\"","[[QUOTE]]",$tagArgs);
- preg_match_all("#([a-z1-9]+)\s*=(([a-z0-9_-]+)|[\"?](.[^\"]+)[\"?])#mis",$tagArgs,$args);
- foreach ($args[1] as $id=>$var) {
- $argsArray[$var] = $this->correctValue($args[2][$id]);
- }
-
- // parse nested tags
- $tagContent = $this->searchtags($tagContent);
-
-
- switch (strtolower($this->superTrim($tagName))) {
- case "loop":
- // a loop...
- // put the content in the function buffer
- $this->_vars["functionbuffer"]["loop"][$argsArray["name"]] = ""; // output of the loop is empty
- $this->_vars["functionbuffer"]["loopbuffer"][$argsArray["name"]] = $tagContent; // loop buffer
- // replace by a localization tag
- return "<loop_".$argsArray["name"]."/>";
- break;
- case "onemptyloop":
- // emptyloop...
- // put the content in the function buffer
- $this->_vars["functionbuffer"]["onemptyloop"][$argsArray["name"]] = ""; // output of the onemptyloop is empty
- $this->_vars["functionbuffer"]["onemptyloopbuffer"][$argsArray["name"]] = $tagContent; // onemptyloop buffer
- // strip the tag
- return "";
- break;
- case "section":
- // a section tag...
- // put the content in the function buffer
- $this->_vars["functionbuffer"]["section"][$argsArray["name"]] = ""; // output of the section is empty
- $this->_vars["functionbuffer"]["sectionbuffer"][$argsArray["name"]] = $tagContent; // section buffer
- // replace by a localization tag
- return "<section_".$argsArray["name"]."/>";
- break;
- case "show":
- // a show tag...
- // put the content in the function buffer
- $this->_vars["functionbuffer"]["show"][$argsArray["name"]] = ""; // output of the section is empty
- $this->_vars["functionbuffer"]["showbuffer"][$argsArray["name"]] = $tagContent; // section buffer
- // replace by a localization tag
- return "<show_".$argsArray["name"]."/>";
- break;
- default:
- // Unknown type. Probably a plugin. Else, strip the tag.
- if (function_exists("fbml_$tagName")) {
- $function = "fbml_$tagName";
- return $function($tagContent, $argsArray);
- } else {
- return $tagContent;
- }
- break;
- }
- }
-
- /**
- * Register a template variable
- *
- * @param String the variable name without the variable identifier (for variable "%var%", just "var")
- * String The value of the variable
- * @return nothing
- *
- */
- function addVar($label, $value) {
- $this->_vars["vars"][$label] = $value;
- $this->_vars["buffer"] = str_replace("%".$label."%",$value,$this->_vars["buffer"]);
- }
-
- /**
- * Register more than one template variable at a time, in an array
- *
- * @param Array an array of variables type array("var1"=>"value1","var2"=>"value2")
- * @return nothing
- */
- function addVars($array) {
- foreach ($array as $varLabel=>$varValue) {
- $this->addVar($varLabel, $varValue);
- }
- }
-
- /**
- * Loop a code section
- *
- * @param String the loop name as defined in the template
- * Array an array of variables type array("var1"=>"value1","var2"=>"value2")
- * @return Template buffer
- *
- */
- function loop($name, $array) {
- global $_PARSER;
- $buffer = $this->_vars["functionbuffer"]["loopbuffer"][$name];
- foreach ($array as $label=>$value) {
- $buffer = str_replace("%".$label."%",$value,$buffer);
- }
- $this->_vars["functionbuffer"]["loop"][$name] .= $buffer;
- }
-
- /**
- * Function used to handle the <fn:section> tag. Any call to this function will replace the current buffer with the content of the <fn:section> tag.
- *
- * @param String the name of the section to load, defined on the tag as name="[name]"
- * @return true
- */
- function useSection($sectionName) {
- global $_PARSER;
- $tmpBuffer = $this->_vars["functionbuffer"]["sectionbuffer"][$sectionName];
- $this->_vars["buffer"] = $tmpBuffer;
- $this->parseAndApply();
- return true;
- }
-
-
- /**
- * Function used to handle the <fn:show> tag. It will result as the display of the content of the tag.
- * If a tag is not called, it will be deleted before any output.
- *
- * @param String the name of the <fn:show> tag to load, defined on the tag as name="[name]"
- * @return true
- */
- function show($name) {
- global $_PARSER;
- $tmpBuffer = $this->_vars["functionbuffer"]["showbuffer"][$name];
- $this->_vars["buffer"] = str_replace("<show_$name/>",$tmpBuffer,$this->_vars["buffer"]);
- $this->parseAndApply();
- return true;
- }
-
-
- /**
- * Apply the loops, flatten the template. Used to use nested loops.
- *
- * @return null
- */
- function applyLoops() {
- foreach ($this->_vars["functionbuffer"]["loop"] as $loopName=>$loopOutput) {
- $this->_vars["buffer"] = str_replace("<loop_$loopName/>",$loopOutput,$this->_vars["buffer"]);
- }
- }
-
- function loadPlugins($type) {
- global $_FOLDERS;
- ($_FOLDERS["plugins"] == null) ? $pluginfolder="plugins/" : $pluginfolder = $_FOLDERS["plugins"];
- if ($handle = opendir($pluginfolder.$type)) {
- while (false !== ($file = readdir($handle))) {
- if ($file != "." && $file != "..") {
- if (!is_dir($pluginfolder.$type."/".$file) && strtolower($this->STRING_get_file_ext($file))=="php") {
- @include_once($pluginfolder.$type."/".$file);
- }
-
- }
- }
- closedir($handle);
- }
- }
-
- function correctValue($value) {
- $firstChar = substr($value,0,1);
- $lastChar = substr($value,strlen($value)-1,1);
- if ($firstChar == "\"" && $lastChar == "\"") {
- // remove quotes
- $value = substr($value,1,strlen($value)-2);
- }
- $value = str_replace("[[QUOTE]]","\"",$value);
- $value = str_replace("\\>",">",$value);
- return $value;
- }
-
- function freadFile($file) {
- if (!$handle = fopen ($file, "r")) {
- exit;
- }
- $contents = fread ($handle, filesize($file)+1);
- fclose($handle);
- return $contents;
- }
-
- function STRING_get_file_ext($filename) {
- if (strrpos($filename, '.') >= 1) {
- return strtolower(substr($filename, strrpos($filename, '.') + 1));
- } else {
- return "";
- }
- }
-
- function debug($label, $value) {
-
- if (is_array($value)) {
- echo "<b>$label</b> :: <div style=\"border:1px dashed #000000;margin-left:20px;\">".nl2br(str_replace(" "," ",str_replace("<","<",print_r($value,true))))."</div><br>";
- } else {
- echo "<b>$label</b> :: <div style=\"border:1px dashed #000000;margin-left:20px;\">".nl2br(str_replace(" "," ",str_replace("\t"," ",$value)))."</div><br>";
- }
-
- }
-
- function superTrim($in) {
- /** remove extra spaces, line breaks, tabs **/
- $in = str_replace("\t"," ",$in);
- $in = str_replace("\r"," ",$in);
- $in = preg_replace('/\s\s+/', ' ', trim($in));
- return $in;
- }
-
- function encodeAsArg($in) {
- $in = str_replace("\"","\\\"",$in);
- $in = str_replace("}","\\}",$in);
- return $in;
- }
- }
- ?>
<?php
/*
* @Created: v2 - 15 avr. 07 - 14:25:10
* v3 - 20 janv. 09 - 13:44:00
* @author: blackwizzard <blackwizzard@gmail.com>
* @project: FTL
* @filename: class.ftlparser.v3.php
*/
class fbml_parser {
// declarations
var $_instance;
var $_vars;
// Constructor
function fbml_parser($file) {
/** vars **/
$this->_vars = array();
$this->_vars["buffer"] = "";
$this->_vars["log"] = array();
$this->_vars["log"]["file"] = $file;
$this->_vars["vars"] = array();
$this->_vars["functionbuffer"] = array();
$this->_vars["namespace"] = "fb";
// functions
$this->_vars["functionbuffer"]["loop"] = array();
$this->_vars["functionbuffer"]["loopbuffer"] = array();
$this->_vars["functionbuffer"]["onemptyloop"] = array();
$this->_vars["functionbuffer"]["onemptyloopbuffer"] = array();
$this->_vars["functionbuffer"]["show"] = array();
$this->_vars["functionbuffer"]["showbuffer"] = array();
$this->_vars["functionbuffer"]["section"] = array();
$this->_vars["functionbuffer"]["sectionbuffer"] = array();
/** read template **/
$this->_vars["buffer"] = $this->freadFile($file);
/** plugin loader **/
$this->loadPlugins("FBML");
$this->_vars["buffer"] = $this->searchtags($this->_vars["buffer"]);
}
/**
* Output the parsed template
*
* @return Template buffer
*
*/
function output() {
// apply loops
foreach ($this->_vars["functionbuffer"]["loop"] as $loopName=>$loopOutput) {
if ($loopOutput == "") {
$loopOutput = $this->_vars["functionbuffer"]["onemptyloopbuffer"][$loopName];
}
$this->_vars["buffer"] = str_replace("<loop_$loopName/>",$loopOutput,$this->_vars["buffer"]);
}
//$this->parseAndApply("after");
return $this->_vars["buffer"];
}
/**
* Search and parse all FTL tags
*
* @return pre-parsed template
*
*/
function searchtags($in) {
// match all tags in the form <type:name args>content</type:name> and singleton <type:name args />
//$reg = "#<([a-z]+):(.*?)\s+(.*?)\s*(>(.*?)</\\1:\\2>|/>)#mis"; // global regex to match all tags. Including FBML.
//$reg = "#<".$this->_vars["namespace"].":(.*?)\s+(.*?)\s*(>(.*?)</".$this->_vars["namespace"].":\\1>|/>)#mis";
$reg = "#<".$this->_vars["namespace"].":(.*?)\s+(.*?)\s*(>(.*?)</".$this->_vars["namespace"].":\\1>|/>)#mis";
if (preg_match($reg, $in)) {
$in = preg_replace_callback($reg,array($this,"tagparser"),$in,-1);
return $this->searchtags($in);
//return $in;
} else {
return $in;
}
}
/**
* Parse a single tag
*
* @return the parsed tag
*
*/
function tagparser($array) {
$query = $array[0];
//$tagType = $array[1];
$tagName = $array[1];
$tagArgs = $array[2];
$tagContent = $array[4];
$argsArray = array();
$tagName = str_replace("-","_",$tagName);
$tagArgs = str_replace("\\\"","[[QUOTE]]",$tagArgs);
preg_match_all("#([a-z1-9]+)\s*=(([a-z0-9_-]+)|[\"?](.[^\"]+)[\"?])#mis",$tagArgs,$args);
foreach ($args[1] as $id=>$var) {
$argsArray[$var] = $this->correctValue($args[2][$id]);
}
// parse nested tags
$tagContent = $this->searchtags($tagContent);
switch (strtolower($this->superTrim($tagName))) {
case "loop":
// a loop...
// put the content in the function buffer
$this->_vars["functionbuffer"]["loop"][$argsArray["name"]] = ""; // output of the loop is empty
$this->_vars["functionbuffer"]["loopbuffer"][$argsArray["name"]] = $tagContent; // loop buffer
// replace by a localization tag
return "<loop_".$argsArray["name"]."/>";
break;
case "onemptyloop":
// emptyloop...
// put the content in the function buffer
$this->_vars["functionbuffer"]["onemptyloop"][$argsArray["name"]] = ""; // output of the onemptyloop is empty
$this->_vars["functionbuffer"]["onemptyloopbuffer"][$argsArray["name"]] = $tagContent; // onemptyloop buffer
// strip the tag
return "";
break;
case "section":
// a section tag...
// put the content in the function buffer
$this->_vars["functionbuffer"]["section"][$argsArray["name"]] = ""; // output of the section is empty
$this->_vars["functionbuffer"]["sectionbuffer"][$argsArray["name"]] = $tagContent; // section buffer
// replace by a localization tag
return "<section_".$argsArray["name"]."/>";
break;
case "show":
// a show tag...
// put the content in the function buffer
$this->_vars["functionbuffer"]["show"][$argsArray["name"]] = ""; // output of the section is empty
$this->_vars["functionbuffer"]["showbuffer"][$argsArray["name"]] = $tagContent; // section buffer
// replace by a localization tag
return "<show_".$argsArray["name"]."/>";
break;
default:
// Unknown type. Probably a plugin. Else, strip the tag.
if (function_exists("fbml_$tagName")) {
$function = "fbml_$tagName";
return $function($tagContent, $argsArray);
} else {
return $tagContent;
}
break;
}
}
/**
* Register a template variable
*
* @param String the variable name without the variable identifier (for variable "%var%", just "var")
* String The value of the variable
* @return nothing
*
*/
function addVar($label, $value) {
$this->_vars["vars"][$label] = $value;
$this->_vars["buffer"] = str_replace("%".$label."%",$value,$this->_vars["buffer"]);
}
/**
* Register more than one template variable at a time, in an array
*
* @param Array an array of variables type array("var1"=>"value1","var2"=>"value2")
* @return nothing
*/
function addVars($array) {
foreach ($array as $varLabel=>$varValue) {
$this->addVar($varLabel, $varValue);
}
}
/**
* Loop a code section
*
* @param String the loop name as defined in the template
* Array an array of variables type array("var1"=>"value1","var2"=>"value2")
* @return Template buffer
*
*/
function loop($name, $array) {
global $_PARSER;
$buffer = $this->_vars["functionbuffer"]["loopbuffer"][$name];
foreach ($array as $label=>$value) {
$buffer = str_replace("%".$label."%",$value,$buffer);
}
$this->_vars["functionbuffer"]["loop"][$name] .= $buffer;
}
/**
* Function used to handle the <fn:section> tag. Any call to this function will replace the current buffer with the content of the <fn:section> tag.
*
* @param String the name of the section to load, defined on the tag as name="[name]"
* @return true
*/
function useSection($sectionName) {
global $_PARSER;
$tmpBuffer = $this->_vars["functionbuffer"]["sectionbuffer"][$sectionName];
$this->_vars["buffer"] = $tmpBuffer;
$this->parseAndApply();
return true;
}
/**
* Function used to handle the <fn:show> tag. It will result as the display of the content of the tag.
* If a tag is not called, it will be deleted before any output.
*
* @param String the name of the <fn:show> tag to load, defined on the tag as name="[name]"
* @return true
*/
function show($name) {
global $_PARSER;
$tmpBuffer = $this->_vars["functionbuffer"]["showbuffer"][$name];
$this->_vars["buffer"] = str_replace("<show_$name/>",$tmpBuffer,$this->_vars["buffer"]);
$this->parseAndApply();
return true;
}
/**
* Apply the loops, flatten the template. Used to use nested loops.
*
* @return null
*/
function applyLoops() {
foreach ($this->_vars["functionbuffer"]["loop"] as $loopName=>$loopOutput) {
$this->_vars["buffer"] = str_replace("<loop_$loopName/>",$loopOutput,$this->_vars["buffer"]);
}
}
function loadPlugins($type) {
global $_FOLDERS;
($_FOLDERS["plugins"] == null) ? $pluginfolder="plugins/" : $pluginfolder = $_FOLDERS["plugins"];
if ($handle = opendir($pluginfolder.$type)) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
if (!is_dir($pluginfolder.$type."/".$file) && strtolower($this->STRING_get_file_ext($file))=="php") {
@include_once($pluginfolder.$type."/".$file);
}
}
}
closedir($handle);
}
}
function correctValue($value) {
$firstChar = substr($value,0,1);
$lastChar = substr($value,strlen($value)-1,1);
if ($firstChar == "\"" && $lastChar == "\"") {
// remove quotes
$value = substr($value,1,strlen($value)-2);
}
$value = str_replace("[[QUOTE]]","\"",$value);
$value = str_replace("\\>",">",$value);
return $value;
}
function freadFile($file) {
if (!$handle = fopen ($file, "r")) {
exit;
}
$contents = fread ($handle, filesize($file)+1);
fclose($handle);
return $contents;
}
function STRING_get_file_ext($filename) {
if (strrpos($filename, '.') >= 1) {
return strtolower(substr($filename, strrpos($filename, '.') + 1));
} else {
return "";
}
}
function debug($label, $value) {
if (is_array($value)) {
echo "<b>$label</b> :: <div style=\"border:1px dashed #000000;margin-left:20px;\">".nl2br(str_replace(" "," ",str_replace("<","<",print_r($value,true))))."</div><br>";
} else {
echo "<b>$label</b> :: <div style=\"border:1px dashed #000000;margin-left:20px;\">".nl2br(str_replace(" "," ",str_replace("\t"," ",$value)))."</div><br>";
}
}
function superTrim($in) {
/** remove extra spaces, line breaks, tabs **/
$in = str_replace("\t"," ",$in);
$in = str_replace("\r"," ",$in);
$in = preg_replace('/\s\s+/', ' ', trim($in));
return $in;
}
function encodeAsArg($in) {
$in = str_replace("\"","\\\"",$in);
$in = str_replace("}","\\}",$in);
return $in;
}
}
?>
Conclusion
http://code.google.com/p/open-fbml/
Historique
- 08 février 2009 22:40:59 :
- Ajout du zip (oublié)
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
[FACEBOOK] Création d'un code FBML [ par nico0650 ]
Bonjour à toutes et à tous, Je ne sais pas si je suis dans la bonne section, n'hésitez pas à m'y rediriger. J'ai créé une page Facebook comme la pl
fbml et application rss [ par cyrilrun ]
j'aimerai pouvoir intégrer dans un onglet d'une page facebook gràce au fbml une appli facebook "social rss" afin de l'enrichir graphiquement. merci
Comment parser du HTML de facon linéaire ? [ par bluemandfr ]
Bonjour à tous ! Je cherche une fonction qui me permettrait de parser du HTML contenu dans une variable $HMTL, et ce, de manière linéaire (pas d'arbo
parser xml avec php(compatible php4 php5) [ par chezcodessources ]
Bonjour je veux parser un fichier xml avec xml et je sais pas quel serveur m'hebergera(php4 ou php5) donc je veux du php qui sera compatible 4 ou 5
A la recherche d'un chat en barrre style le chat de facebook [ par landolsi10 ]
Bonjour, Après avoir beaucoup cherche sur des moteur de recherche je recherche un chat en barre style Facebook mais malheureusement aucun résultat.
faire une page qui s'allonge facon facebook [ par mailliam ]
Hello tous! j'aimerais faire que quand je clique sur un lien dans ma page, celle-ci s'allonge pour faire apparaitre des info supplémentaires, un peu
parser un flux xml provenant d'une url [ par christobal ]
bonjour, j'utilise le service de www.ipinfodb.com pour me retourner en xml certain infos du visiteur : http://www.ipinfodb.com/ip_query.php?ip=votre_a
classe générique pour parser tout type de fichier xml [ par mams004 ]
Bonjour, je cherche desespérement une classe php générique pour parser tout type de ficher XML Si vous connaisser des liens ou tuto? merci pour
mini tchat ou shoutbox [ par drakan2008 ]
salut, voila je fait un site qui contient une partie authentification pour les étudiants et pour les enseignants, je veux le réaliser de la même façon
Stream Publish et/ou publication sur le mur facebook [ par slhuilli ]
Bonjour à Tous, Je suis à la recherche d'un tuto, un exemple ou une aide.... de façon à écrire une fonction, un bout de code en PHP (utilisation impe
|
Derniers Blogs
GESTION D'EXCEPTION AVEC LES TASKSGESTION D'EXCEPTION AVEC LES TASKS par richardc
Nous avons vu dans un précédent article comment utiliser Task pour effectuer des opérations dans un autre thread.
Malheureusement, comme tout le monde n'est pas parfait, il se peut que cette exécution se passe mal et qu'une exception se produise.
La...
Cliquez pour lire la suite de l'article par richardc DéMARRONS AVEC LES TASKSDéMARRONS AVEC LES TASKS par richardc
Que vous le vouliez ou non, le développement multi-tâche est maintenant une obligation pour toute nouvelle application. Il est donc vital d'en comprendre les mécanismes et de s'y mettre le plus tôt possible.
En attendant le .NET Framework 4.5 avec le...
Cliquez pour lire la suite de l'article par richardc SLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPSSLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPS par Vko
Retrouvez les slides et les démo de ma session Fast & Furious XAML Apps. A ceux qui se posent la question : "est-ce que le code de la DataGrid est disponible?", je vous répondrais "pas encore". Je vais mettre en place un projet codeplex pour part...
Cliquez pour lire la suite de l'article par Vko XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
SYSTEME D'AMISYSTEME D'AMI par moza2409
Cliquez pour lire la suite par moza2409
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|