Initial commit
4
.htaccess
Normal file
@@ -0,0 +1,4 @@
|
||||
RewriteEngine on
|
||||
RewriteCond %{HTTP_HOST} ^(www\.)?lutran\.fr$
|
||||
RewriteRule ^/francois(/.*)?$ http://francois.lutran.fr$1 [R=301,L]
|
||||
|
||||
BIN
cv_julien_lutran.pdf
Normal file
4
images/.htaccess
Normal file
@@ -0,0 +1,4 @@
|
||||
<Files pic.jpg>
|
||||
order allow,deny
|
||||
deny from all
|
||||
</Files>
|
||||
BIN
images/bg.gif
Normal file
|
After Width: | Height: | Size: 56 B |
BIN
images/cfa.png
Normal file
|
After Width: | Height: | Size: 3.4 KiB |
BIN
images/close.png
Normal file
|
After Width: | Height: | Size: 419 B |
BIN
images/contactme.png
Normal file
|
After Width: | Height: | Size: 3.8 KiB |
BIN
images/experience.png
Normal file
|
After Width: | Height: | Size: 3.4 KiB |
BIN
images/favicon.ico
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
images/globe.png
Normal file
|
After Width: | Height: | Size: 3.7 KiB |
BIN
images/grey_bg.jpg
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
images/linkedin.png
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
images/loading_white.gif
Normal file
|
After Width: | Height: | Size: 723 B |
BIN
images/logocfa.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
images/netapp.gif
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
images/paperclip.png
Normal file
|
After Width: | Height: | Size: 4.8 KiB |
BIN
images/paperclip_clipped.png
Normal file
|
After Width: | Height: | Size: 4.5 KiB |
BIN
images/pdf.png
Normal file
|
After Width: | Height: | Size: 3.5 KiB |
BIN
images/pic.gif
Normal file
|
After Width: | Height: | Size: 197 B |
BIN
images/pic.jpg
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
images/pic.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
images/print.png
Normal file
|
After Width: | Height: | Size: 3.7 KiB |
BIN
images/tipsy.gif
Normal file
|
After Width: | Height: | Size: 58 B |
BIN
images/university.png
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
images/up.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
7
includes/.htaccess
Normal file
@@ -0,0 +1,7 @@
|
||||
<Files ~ "^log">
|
||||
Order allow,deny
|
||||
Deny from all
|
||||
Satisfy all
|
||||
</Files>
|
||||
|
||||
|
||||
163
includes/config.php
Normal file
@@ -0,0 +1,163 @@
|
||||
<?php
|
||||
|
||||
//Buffers PHP messages
|
||||
ob_start();
|
||||
|
||||
$sType = isset($_REQUEST['t'])?$_REQUEST['t']:'';
|
||||
$sSerial = isset($_GET['a'])?$_GET['a']:'';
|
||||
$sName = isset($_POST['name'])?$_POST['name']:'';
|
||||
$sEmail = isset($_POST['email'])?$_POST['email']:'';
|
||||
$sSubject = isset($_POST['subject'])?$_POST['subject']:'';
|
||||
$sMsg = isset($_POST['message'])?$_POST['message']:'';
|
||||
$sResult = '';
|
||||
|
||||
$oCv = new cv();
|
||||
switch($sType)
|
||||
{
|
||||
case 'javascript':
|
||||
$sResult = $oCv->getJavascript();
|
||||
break;
|
||||
case 'pic':
|
||||
$sResult = $oCv->getPic($sSerial);
|
||||
break;
|
||||
case 'mail':
|
||||
$sResult = $oCv->sendEmail($sName, $sEmail, $sSubject, $sMsg);
|
||||
break;
|
||||
}
|
||||
|
||||
ob_end_clean();
|
||||
echo $sResult;
|
||||
|
||||
class cv {
|
||||
const LOG_FILE = 'log';
|
||||
const PIC_PATH = '../images/pic.png';
|
||||
const PUBLIC_KEY_LENGTH = 13;
|
||||
const MAX_REQUEST_TIME = 10;
|
||||
|
||||
private $iLoadTime;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->setLoadTime();
|
||||
}
|
||||
|
||||
private function setLoadTime()
|
||||
{
|
||||
$this->iLoadTime = time();
|
||||
}
|
||||
|
||||
private function getLoadTime()
|
||||
{
|
||||
return $this->iLoadTime;
|
||||
}
|
||||
|
||||
public function getJavascript()
|
||||
{
|
||||
//Build picture key
|
||||
$sPublicKey = uniqid();
|
||||
$sSecretKey = $this->getLoadTime();
|
||||
list($iWidth, $iHeight) = getimagesize(self::PIC_PATH);
|
||||
file_put_contents(self::LOG_FILE, $sPublicKey.$sSecretKey."\n", FILE_APPEND);
|
||||
|
||||
//Display javascript functions
|
||||
$asResult = array();
|
||||
$asResult[] = "var cConfigPage = '".$this->getAppPath().basename(__FILE__)."'";
|
||||
$asResult[] = "var a = '$sPublicKey';";
|
||||
$asResult[] = "var iPicWidth = $iWidth;";
|
||||
$asResult[] = "var iPicHeight = $iHeight;";
|
||||
$asResult[] = file_get_contents('../jquery/jquery.functions'.(file_exists('../jquery/jquery.functions.js')?'':'.min').'.js');
|
||||
return implode("\n", $asResult);
|
||||
}
|
||||
|
||||
public function getPic($sSerial)
|
||||
{
|
||||
if($this->checkSerial($sSerial))
|
||||
{
|
||||
header('Content-Type: image/jpeg');
|
||||
return file_get_contents(self::PIC_PATH);
|
||||
}
|
||||
else
|
||||
{
|
||||
header('HTTP/1.1 403 Forbidden');
|
||||
}
|
||||
}
|
||||
|
||||
public function sendEmail($sName, $sEmail, $sSubject, $sMsg)
|
||||
{
|
||||
$sResult = '';
|
||||
if($sName!='' && $sEmail!='' && $sSubject!='' && $sMsg!='')
|
||||
{
|
||||
//Message
|
||||
$sHtmlMessage = 'From: '.$sName."<br />".
|
||||
'Email: '.$sEmail."<br /><br />".
|
||||
'Subject: '.$sSubject."<br />".
|
||||
'Message: <br /><br />'.str_replace("\n", '<br />', $sMsg);
|
||||
$sPlainMessage = strip_tags(str_replace('<br />', "\n", $sHtmlMessage));
|
||||
|
||||
//Email
|
||||
$iBoundary = uniqid("HTMLEMAIL");
|
||||
$sHeaders = 'From: Contact CV <www-data@lutran.fr>'."\r\n".
|
||||
'Reply-To: Contact CV <www-data@lutran.fr>'."\r\n".
|
||||
'Cc: Julien Lutran <julien@lutran.fr>'."\r\n".
|
||||
'MIME-Version: 1.0'."\r\n".
|
||||
'Content-Type: multipart/alternative;'.
|
||||
'boundary = '.$iBoundary."\r\n\r\n".
|
||||
'MIME encoded Message'.
|
||||
'--'.$iBoundary."\r\n".
|
||||
'Content-Type: text/plain; charset=UTF-8'."\r\n".
|
||||
'Content-Transfer-Encoding: base64'."\r\n\r\n".
|
||||
chunk_split(base64_encode($sPlainMessage)).
|
||||
'--'.$iBoundary."\r\n".
|
||||
'Content-Type: text/html; charset=UTF-8'."\r\n".
|
||||
'Content-Transfer-Encoding: base64'."\r\n\r\n".
|
||||
chunk_split(base64_encode($sHtmlMessage));
|
||||
|
||||
//Store in case email fails
|
||||
@file_put_contents('log.html', '<br />----<br /><br />'.$sHtmlMessage, FILE_APPEND);
|
||||
|
||||
//Send
|
||||
if(mail('julien.lutran@gmail.com', 'julien.lutran.fr - Contact Me Message', '', $sHeaders))
|
||||
{
|
||||
$sResult = 'ok';
|
||||
}
|
||||
else
|
||||
{
|
||||
$sResult = 'An unknown error occured.';
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$sResult = 'An error occured: Some fields were empty.';
|
||||
}
|
||||
return $sResult;
|
||||
}
|
||||
|
||||
private function checkSerial($sSerial)
|
||||
{
|
||||
$bResult = false;
|
||||
if(strlen($sSerial)==self::PUBLIC_KEY_LENGTH && strpos($this->getAppPath(), $_SERVER['HTTP_REFERER'])===0)
|
||||
{
|
||||
$sFileContent = file_get_contents(self::LOG_FILE);
|
||||
$asKeys = array_filter(explode("\n", $sFileContent));
|
||||
foreach($asKeys as $sKey)
|
||||
{
|
||||
$iOffset = $this->getLoadTime() - substr($sKey, self::PUBLIC_KEY_LENGTH);
|
||||
if($sSerial == substr($sKey, 0, self::PUBLIC_KEY_LENGTH) && $iOffset < self::MAX_REQUEST_TIME)
|
||||
{
|
||||
$bResult = true;
|
||||
file_put_contents(self::LOG_FILE, str_replace($sKey."\n", '', $sFileContent));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return $bResult;
|
||||
}
|
||||
|
||||
private static function getAppPath()
|
||||
{
|
||||
$sAppPath = 'http://'.str_replace(array('http://', 'https://'), '', $_SERVER['SERVER_NAME'].dirname($_SERVER['SCRIPT_NAME']));
|
||||
$sAppPath = $sAppPath.(substr($sAppPath, -1)!='/'?'/':'');
|
||||
return $sAppPath;
|
||||
}
|
||||
}
|
||||
?>
|
||||
17
includes/log
Executable file
@@ -0,0 +1,17 @@
|
||||
5112b54426d521360180548
|
||||
5112b544a62b01360180548
|
||||
5112b544c791e1360180548
|
||||
5112b5453dbab1360180549
|
||||
5112b545a81b61360180549
|
||||
5112b54629ac21360180550
|
||||
51bc5dce60f101371299278
|
||||
51bc5de3e11031371299299
|
||||
51bc5e2ecff261371299374
|
||||
51bc5e42efa501371299394
|
||||
51bc5e5e00b251371299421
|
||||
51bc5e6cd2a3c1371299436
|
||||
51bc5e99bdc601371299481
|
||||
51bc5e9a0366e1371299482
|
||||
51bc5e9b24aa21371299483
|
||||
52508e576666a1381011031
|
||||
52a72476548fd1386685558
|
||||
298
index.html
Normal file
@@ -0,0 +1,298 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>Julien Lutran </title>
|
||||
<meta name="robots" content="noimageindex" />
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
||||
<meta name="description" content="cv Julien Lutran" />
|
||||
<meta name="keywords" content="cv ingenieur stockage SAN" />
|
||||
<link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico" />
|
||||
<link rel="shortcut icon" href="images/favicon.ico" />
|
||||
<link href="style/style.normalize.css" rel="stylesheet" type="text/css" />
|
||||
<link href="style/style.screen.css" rel="stylesheet" type="text/css" />
|
||||
<link href="style/style.print.css" rel="stylesheet" type="text/css" media="print" />
|
||||
<!--[if lt IE 7]>
|
||||
<link href="style/style.ie.css" rel="stylesheet" type="text/css" />
|
||||
<script type="text/javascript" src="jquery/fix.ie.js"></script>
|
||||
<![endif]-->
|
||||
<script src="jquery/cufon-yui.js" type="text/javascript"></script>
|
||||
<script src="jquery/cufon.fonts.js" type="text/javascript"></script>
|
||||
<script src="jquery/jquery.min.js" type="text/javascript"></script>
|
||||
<script src="jquery/jquery.tipsy.min.js" type="text/javascript"></script>
|
||||
<script src="includes/config.php?t=javascript" type="text/javascript"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="cv">
|
||||
<div id="header" class="section header fixed">
|
||||
<div class="paperclip"></div>
|
||||
<div class="person">
|
||||
<img oncontextmenu="return false;" id="pic" src="images/pic.gif" alt="Julien Lutran" />
|
||||
<h1>Julien Lutran</h1>
|
||||
<h2><span>Ingenieur Stockage SAN</span></h2>
|
||||
</div>
|
||||
<div id="card">
|
||||
<ul class="card_buttons">
|
||||
<li><a href="http://fr.linkedin.com/in/jlutran" target="_blank" title="Linked InProfile" class="tip_link"><img src="images/linkedin.png" alt="linkedin icon"/></a></li>
|
||||
<!-- <li><a href="http://www.viadeo.com/profile/002dz1joe6vsejk/en" target="_blank" title="Viadeo Profile" class="tip_link"><img src="images/viadeo.png" alt="viadeo"/></a></li>-->
|
||||
<li><a href="cv_julien_lutran.pdf" title="Télécharger le CV (pdf)" class="tip_link"><img src="images/pdf.png" alt="pdf" /></a></li>
|
||||
<li><a href="#" id="print" title="Print this page" class="tip_link"><img src="images/print.png" alt="Print"/></a></li>
|
||||
</ul>
|
||||
<ul class="card_items">
|
||||
<li class="xp"><a href="#work">8 années d'experience</a></li>
|
||||
<li class="globe"><a href="#certif">Certification NetApp NCDA</a></li>
|
||||
<li class="university"><a href="#licence">License Professionnelle</a></li>
|
||||
</ul>
|
||||
<a id="contact_me_btn" class="contact_me_btn clickable" href="#">Contactez-moi</a>
|
||||
</div>
|
||||
</div>
|
||||
<div id="contact_me_box" class="section contact fixed hide">
|
||||
<div id="contact_me">
|
||||
<form id="contact_form" method="post">
|
||||
<input type="button" id="contact_me_close" class="btn close clickable" value="" />
|
||||
<div id="formstatus"></div>
|
||||
<fieldset id="contact_fields">
|
||||
<p><input type="text" name="name" value="Name*" /><input type="text" name="email" value="Email*" /></p>
|
||||
<p><input type="text" name="subject" value="Subject*" class="large_box" /></p>
|
||||
<p><textarea class="large_box" name="message" rows="3" cols="25">Message*</textarea></p>
|
||||
<p><input class="btn" type="reset" value="Reset" /> <input class="btn" type="submit" value="Send" /></p>
|
||||
</fieldset>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div id="profile" class="section profile fixed">
|
||||
<h2 class="section_name">Presentation</h2>
|
||||
<div class="section_items">
|
||||
<div class="item last_item">
|
||||
<p>Après 6 ans d'administration système sur les environnements de production de plusieurs grands comptes, j'ai eu l'opportunité d'intégrer une équipe d'ingénierie en infrastructure. Ce poste m'a permis de me spécialiser dans le domaine du stockage SAN et de concevoir des solutions pour des clients implantés à l'international.</p>
|
||||
<p>Toujours curieux et passionné par les nouvelles technologies, mon expérience me permet de m'adapter rapidement afin de relever avec succès chaque nouveau challenge professionnel que l'on peut me confier.</p>
|
||||
<p class="last"><a id="contact_me_link" class="no_print_link" href="#contact_me">Contactez-moi <span id="mail"></span>pour plus d'informations</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="work" class="section work fixed">
|
||||
<h2 class="section_name">Experience professionnelle</h2>
|
||||
<div class="section_items">
|
||||
<div class="item">
|
||||
<h4>Depuis septembre 2011</h4>
|
||||
<h2>Ingénieur Stockage SAN</h2>
|
||||
<h3><span class="company">SII</span>, Rennes</h3>
|
||||
<ul>
|
||||
<li>
|
||||
<span class="title">Ingénieur Stockage SAN</span>
|
||||
<div class="cover"><div class="info">
|
||||
<p><a href="http://www.orange-business.com" class="tip_card" target="_blank" title="Orange Business Services"><img src="images/experience.png" alt="Orange Business Services" />Orange</a></p>
|
||||
<ul>
|
||||
<li>Rennes</li>
|
||||
<li>Architecture SAN</li>
|
||||
<li>Actuellement</li>
|
||||
</ul>
|
||||
</div></div>
|
||||
<ul>
|
||||
<li class="subtitle">Ingénerie Stockage SAN et support L3</li>
|
||||
<li class="action">Analyse et conception de solutions de stockage EMC et NetApp</li>
|
||||
<li class="action">Test et validation des nouveaux produits, rédaction de documentations techniques</li>
|
||||
<li class="action">Support aux équipes d'avant-vente et d'implémentation</li>
|
||||
<li class="action">Support aux équipes BackOffice pour la résolution d'incidents complexes</li>
|
||||
<li class="action">Analyse et résolution de problèmes performances sur les infrastructures de stockage client</li>
|
||||
<li class="action">Développement de scripts d'industrialisation</li>
|
||||
<li class="action">Veille technologique</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li>
|
||||
<span class="title">Administrateur Stockage SAN</span>
|
||||
<div class="cover"><div class="info">
|
||||
<p><a href="http://www.orange-business.com" class="tip_card" target="_blank" title="Orange Business Services"><img src="images/experience.png" alt="Orange Business Services" />Orange</a></p>
|
||||
<ul>
|
||||
<li>Rennes</li>
|
||||
<li>EMC / NetApp</li>
|
||||
<li>SAN Brocade</li>
|
||||
<li>18 mois</li>
|
||||
</ul>
|
||||
</div></div>
|
||||
<ul>
|
||||
<li class="subtitle">Support L2 sur l'infrastructure SAN des clients OBS</li>
|
||||
<li class="action">Expertise technique sur l'infrastructure existante, optimisation de l'occupation disque, tuning de performance SAN...</li>
|
||||
<li class="action">Développement de scripts de reporting et d'alerte capacitaire</li>
|
||||
<li class="action">Rédaction de procédures techniques</li>
|
||||
<li class="action">Support aux équipes BackOffice (Inde / Egypte)</li>
|
||||
<li class="action">Astreintes et interventions planifiées en HNO</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="item">
|
||||
<h4>Octobre 2010 - Septembre 2011</h4>
|
||||
<h2>Ingénieur systèmes</h2>
|
||||
<h3><span class="company">EFFITIC</span>, Rennes</h3>
|
||||
<ul>
|
||||
<li>
|
||||
<span class="title">Ingénieur Systèmes UNIX</span>
|
||||
<div class="cover"><div class="info">
|
||||
<p><a href="https://www.labanquepostale.fr" target="_blank"><img src="images/experience.png" alt="Banque Postale" />La Poste</a></p>
|
||||
<ul>
|
||||
<li>Rennes</li>
|
||||
<li>AIX, Solaris, ESX</li>
|
||||
<li>12 mois</li>
|
||||
</ul>
|
||||
</div></div>
|
||||
<ul>
|
||||
<li class="subtitle">Expertise UNIX et réalisation de projets techniques</li>
|
||||
<li class="action">Administration des environnements de production (SI des bureaux de Poste, automates d'affranchissement, etc...)</li>
|
||||
<li class="action">Expertise technique sur l'infrastructure virtuelle existante : IBM pSeries (LPAR), Zones Solaris et hyperviseurs ESX</li>
|
||||
<li class="action">Implémentation système AIX, Solaris et Linux RedHat</li>
|
||||
<li class="action">Migration de l'infrastructure virtualisée ESX 3.5 vers 4.1</li>
|
||||
<li class="action">Astreintes et interventions planifées en HNO</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="item last_item">
|
||||
<h4>Mai 2005 - Octobre 2010</h4>
|
||||
<h2>Administrateur Systèmes & Sauvegarde</h2>
|
||||
<h3><span class="company">Steria</span>, Paris</h3>
|
||||
<ul>
|
||||
<li>
|
||||
<span class="title">Administrateur Systèmes & Sauvegarde</span>
|
||||
<div class="cover"><div class="info">
|
||||
<p><a href="http://fr.sun.com" target="_blank"><img src="images/experience.png" alt="Sun Microsystems" />Sun</a></p>
|
||||
<ul>
|
||||
<li><a href="http://www.oracle.com" target="_blank" class="tip_card no_print_link" title="Official Website">Groupe Oracle</a></li>
|
||||
<li>Vélizy</li>
|
||||
<li>Solaris, Linux</li>
|
||||
<li>40 mois</li>
|
||||
</ul>
|
||||
</div></div>
|
||||
<ul>
|
||||
<li class="subtitle">Administration UNIX / Linux pour EDF R&D</li>
|
||||
<li class="action">Migration des bases métier vers Oracle 10g</li>
|
||||
<li class="action">Installation d'une plateforme de stockage HP EVA 8100 et rédaction de procédures d'exploitation</li>
|
||||
<li class="action">Etude et migration de l'authentification centralisée de NIS vers OpenLDAP
|
||||
<li class="action">Exploitation de cluster HPC IBM Blue Gene/L et Blue Gene/P</li>
|
||||
<li class="action">Gestion des sauvegardes serveurs: politique, rétention, externalisation</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<span class="title">Technicien informatique</span>
|
||||
<div class="cover"><div class="info">
|
||||
<p><a href="http://innovation.edf.com" target="_blank"><img src="images/experience.png" alt="Bacardi" />EDF R&D</a></p>
|
||||
<ul>
|
||||
<li>Clamart</li>
|
||||
<li>Linux, Windows</li>
|
||||
<li>25 mois</li>
|
||||
</ul>
|
||||
</div></div>
|
||||
<ul>
|
||||
<li class="subtitle">Installation et dépannage sur site EDF R&D</li>
|
||||
<li class="action">Gestion des changements et incidents de niveau 2 sur stations de travail (Linux Debian et Windows 2000/XP)</li>
|
||||
<li class="action">Câblage et configuration des équipements réseau</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section language fixed">
|
||||
<h2 class="section_name">Langues</h2>
|
||||
<div class="section_items">
|
||||
<div class="item">
|
||||
<h4>lu, écrit et parlé</h4>
|
||||
<h2>English</h2>
|
||||
</div>
|
||||
<div class="item last_item">
|
||||
<h4>Langue maternelle</h4>
|
||||
<h2>French</h2>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section technical fixed">
|
||||
<h2 class="section_name">Competences techniques</h2>
|
||||
<div class="section_items">
|
||||
<div class="item">
|
||||
<h4>Avancé, 3 ans</h4>
|
||||
<h2>Stockage & Sauvegarde</h2>
|
||||
<ul>
|
||||
<li>Stockage SAN & NAS
|
||||
<ul>
|
||||
<li>EMC : Celerra, Clariion, DMX, VNX, VMAX</li>
|
||||
<li>NetApp : Data ONTAP 7-Mode & Clustered ONTAP (Certification NCDA)</li>
|
||||
<li>HDS : AMS</li>
|
||||
<li>HP : EVA</li>
|
||||
<li>IBM : SVC</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="no_child"><span class="inline_title">Réseau SAN :</span>Brocade (24k, 48k, DCX, 5300, 6510)</li>
|
||||
<li class="no_child"><span class="inline_title">Protocoles :</span>FC, iSCSI, NFS, SMB</li>
|
||||
<li class="no_child last"><span class="inline_title">Sauvegarde :</span>Networker, Time Navigator</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="item last_item">
|
||||
<h4>Expert, 6 ans</h4>
|
||||
<h2>Systèmes & Virtualisation</h2>
|
||||
<ul>
|
||||
<li>Systèmes
|
||||
<ul>
|
||||
<li>Unix : AIX (pSeries), Solaris, HP-UX</li>
|
||||
<li>Linux : RedHat, Debian</li>
|
||||
<li>Windows Server : 2003, 2008, 2012</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Virtualisation
|
||||
<ul>
|
||||
<li>Hyperviseurs : VMware ESX, KVM, Xen</li>
|
||||
<li>Containers : Zones Solaris, OpenVZ</li>
|
||||
<li>Partitionnement dynamique IBM (VIO / LPAR)</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="no_child"><span class="inline_title">Outils :</span>Veritas Volume Manager, ZFS, LVM</li>
|
||||
<li class="no_child"><span class="inline_title">HA Cluster :</span>Veritas Cluster Server, Heartbeat + Pacemaker</li>
|
||||
<li class="no_child"><span class="inline_title">Authentification centralisée :</span>NIS, LDAP, Active Directory</li>
|
||||
<li class="no_child"><span class="inline_title">SGBD :</span>Oracle, MySQL</li>
|
||||
<li class="no_child last"><span class="inline_title">Scripting :</span>Bash, Perl</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section education fixed">
|
||||
<h2 class="section_name">Formation</h2>
|
||||
<div class="section_items">
|
||||
<div class="item" id="certif">
|
||||
<a class="logo netapp" target="_blank" href="http://www.netapp.com/us/services-support/university/index.aspx"></a>
|
||||
<h4>2012</h4>
|
||||
<h2>Formation professionnelle</h2>
|
||||
<h3>NetApp, France</h3>
|
||||
<ul>
|
||||
<li>Certification : NetApp NCDA
|
||||
<ul>
|
||||
<li><a href="http://www.netapp.com/us/services-support/university/certifications/ncda.aspx">NetApp Certified DataONTAP Administrator</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="last">Formation
|
||||
<ul>
|
||||
<li>Accelerated NCDA Boot Camp Data ONTAP 7-Mode</li>
|
||||
<li>DataONTAP 7-Mode Administration</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="item last_item" id="licence">
|
||||
<a class="logo cfa" target="_blank" href="http://www.cfadevinci.fr/"></a>
|
||||
<h4>2005</h4>
|
||||
<h2>Licence professionnelle</h2>
|
||||
<h3>Pôle Universitaire Léonard de Vinci, Paris La Défense</h3>
|
||||
<ul>
|
||||
<li>Diplôme
|
||||
<ul><li>Certifié RNCP niveau II (Mention Bien)</li></ul>
|
||||
</li>
|
||||
<li>Spécialisation
|
||||
<ul><li>Gestion de Ressources Informatiques</li></ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<a href="#top" id="to_top" class="arrow_up" title="To the top"><img src="images/up.png" alt="Up" /></a>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
5
jquery/.htaccess
Normal file
@@ -0,0 +1,5 @@
|
||||
<Files jquery.functions.js>
|
||||
order allow,deny
|
||||
deny from all
|
||||
</Files>
|
||||
|
||||
7
jquery/cufon-yui.js
vendored
Normal file
17
jquery/cufon.fonts.js
Normal file
14
jquery/fix.ie.js
Normal file
234
jquery/jquery.functions.js
Normal file
@@ -0,0 +1,234 @@
|
||||
$(document).ready
|
||||
(
|
||||
function()
|
||||
{
|
||||
//Add picture
|
||||
if(typeof a != 'undefined')
|
||||
{
|
||||
var $Pic = $('#pic');
|
||||
$Pic.css('height', iPicHeight+'px');
|
||||
$('.person').css('marginTop', Math.round(($('#header').height() - $Pic.outerHeight())/2));
|
||||
$Pic.attr('src', cConfigPage+'?t=pic&a='+a);
|
||||
}
|
||||
|
||||
//Fix IE
|
||||
if(typeof bIsIE != 'undefined')
|
||||
{
|
||||
//IE6 PNG Support
|
||||
DD_belatedPNG.fix('.paperclip');
|
||||
}
|
||||
|
||||
//Font modification
|
||||
Cufon.now();
|
||||
|
||||
//Title captions
|
||||
$(function() {$('.tip_link').tipsy({gravity: 's'});});
|
||||
$(function() {$('.tip_card').tipsy({gravity: 'e'});});
|
||||
|
||||
//Replace text with Cufons
|
||||
Cufon.replace('h1', {fontFamily:'Candara'});
|
||||
Cufon.replace('.item h2', {fontFamily:'Puritan 2.0'});
|
||||
Cufon.replace('.item h3', {fontFamily:'Puritan 2.0'});
|
||||
Cufon.replace('h2.section_name', {fontFamily:'Hattori Hanzo Light'});
|
||||
|
||||
//Contact panel events
|
||||
$('#contact_me_btn, #contact_me_link').click
|
||||
(
|
||||
function(e)
|
||||
{
|
||||
e.preventDefault();
|
||||
$('#contact_me_box').slideToggle('slow');
|
||||
}
|
||||
);
|
||||
$('#contact_me_close').click(function(){$('#contact_me_btn').trigger('click');});
|
||||
|
||||
//Sending contact form
|
||||
$("#contact_form").submit
|
||||
(
|
||||
function()
|
||||
{
|
||||
$This = $(this);
|
||||
var bValid = true;
|
||||
$This.find('input[type=text], textarea').each
|
||||
(
|
||||
function(iId, oItem)
|
||||
{
|
||||
var $Item = $(oItem);
|
||||
sName = $Item.attr('name');
|
||||
if(typeof sName != 'undefined' && sName != '')
|
||||
{
|
||||
var sVal = $Item.val();
|
||||
if(sVal=='' || sVal==sName.getDefVal())
|
||||
{
|
||||
bValid = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
if(!bValid)
|
||||
{
|
||||
addAutoDestroyMsg('#formstatus', 'Some fields are still empty.', 'warning');
|
||||
}
|
||||
else
|
||||
{
|
||||
addAutoDestroyMsg('#formstatus', 'Sending...', 'loading', -1);
|
||||
ajax('POST', 'mail', $This, function(sMsg)
|
||||
{
|
||||
console.log('msg='+sMsg);
|
||||
var result = '';
|
||||
if(sMsg == 'ok')
|
||||
{
|
||||
addAutoDestroyMsg('#formstatus', 'Your message has been sent. Thank you!', 'success', -1);
|
||||
$("#contact_fields, #contact_me_close").fadeOut('fast');
|
||||
setTimeout("$('#contact_me_btn').trigger('click');", 3000);
|
||||
}
|
||||
else
|
||||
{
|
||||
addAutoDestroyMsg('#formstatus', sMsg, 'error');
|
||||
}
|
||||
});
|
||||
/*var str = $This.serialize();
|
||||
$.ajax
|
||||
(
|
||||
{
|
||||
type: "POST",
|
||||
url: "includes/send.php",
|
||||
data: str,
|
||||
success: function(sMsg)
|
||||
{
|
||||
var result = '';
|
||||
if(sMsg == 'ok')
|
||||
{
|
||||
addAutoDestroyMsg('#formstatus', 'Your message has been sent. Thank you!', 'success', -1);
|
||||
$("#contact_fields, #contact_me_close").fadeOut('fast');
|
||||
setTimeout("$('#contact_me_btn').trigger('click');", 3000);
|
||||
}
|
||||
else
|
||||
{
|
||||
addAutoDestroyMsg('#formstatus', sMsg, 'error');
|
||||
}
|
||||
}
|
||||
}
|
||||
);*/
|
||||
}
|
||||
return false;
|
||||
}
|
||||
);
|
||||
|
||||
//Default Form Values
|
||||
$('#contact_form input, #contact_form textarea').each
|
||||
(
|
||||
function()
|
||||
{
|
||||
var $This = $(this);
|
||||
var sName = $This.attr('name');
|
||||
if(sName!=undefined && sName!='')
|
||||
{
|
||||
$This.focus(function(){if($This.val()==sName.getDefVal())$This.val('');});
|
||||
$This.blur(function(){if($This.val()=='')$This.val(sName.getDefVal());});
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
//Print
|
||||
$('#print').click
|
||||
(
|
||||
function(e)
|
||||
{
|
||||
e.preventDefault();
|
||||
$('#mail').text('at '+$(location).attr('href').substr(5).replace(/\//g, '').replace('.', '@')+' ');
|
||||
window.print();
|
||||
$('#mail').text('');
|
||||
}
|
||||
);
|
||||
|
||||
//Internal links
|
||||
$('a[href^=#]').click(function(e){$(this).jump(e);});
|
||||
|
||||
//To-the-top Button
|
||||
iProfileHeight = $('#profile').offset().top;
|
||||
$(window).scroll
|
||||
(
|
||||
function()
|
||||
{
|
||||
$ToTop = $("#to_top");
|
||||
if($(this).scrollTop() > iProfileHeight)
|
||||
{
|
||||
$ToTop.fadeIn('slow');
|
||||
}
|
||||
else
|
||||
{
|
||||
$ToTop.fadeOut('slow');
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
);
|
||||
|
||||
//HTTP request
|
||||
function ajax(sRequestType, sActionType, sData, fSuccess)
|
||||
{
|
||||
console.log(sData);
|
||||
if(!sData) sData = {};
|
||||
sData['t'] = sActionType;
|
||||
console.log(sData);
|
||||
if(sRequestType == 'POST')
|
||||
{
|
||||
sData = sData.serialize();
|
||||
sData += (sData.length==0?'':'&')+'t='+sActionType;
|
||||
}
|
||||
else sData['t'] = sActionType;
|
||||
console.log(sData);
|
||||
$.ajax
|
||||
(
|
||||
{
|
||||
type: sRequestType,
|
||||
url: cConfigPage,
|
||||
data: sData,
|
||||
success: fSuccess,
|
||||
dataType: 'text'
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
//Get form default value
|
||||
String.prototype.getDefVal = function()
|
||||
{
|
||||
return this.charAt(0).toUpperCase() + this.slice(1) + '*';
|
||||
};
|
||||
|
||||
//Scroll to an element
|
||||
$.prototype.jump = function(e)
|
||||
{
|
||||
var sElem = this.attr('href');
|
||||
if(sElem != '#')
|
||||
{
|
||||
e.preventDefault();
|
||||
this.blur();
|
||||
var $Elem = $(sElem);
|
||||
var iOffSet = ($Elem.length>0)?($Elem.offset().top - 15):0;
|
||||
$('html, body').animate({scrollTop:iOffSet}, 'slow');
|
||||
}
|
||||
}
|
||||
|
||||
//Add a temporary message
|
||||
function addAutoDestroyMsg(sContainerId, sMsg, sClass, iTime)
|
||||
{
|
||||
if(!iTime) iTime = 5000;
|
||||
sClass = (!sClass)?'':' '+sClass;
|
||||
|
||||
//Clear container and add message
|
||||
$Container = $(sContainerId);
|
||||
$Container.stop(true, false).empty();
|
||||
$('<div class="message'+sClass+'">'+sMsg+'</div>').hide().appendTo($Container).slideDown('fast');
|
||||
|
||||
//Reset schedduler
|
||||
if(typeof oTimer != 'undefined')
|
||||
{
|
||||
clearTimeout(oTimer);
|
||||
}
|
||||
if(iTime > 0)
|
||||
{
|
||||
oTimer = setTimeout("$('"+sContainerId+"').find('.message').slideUp(function(){$(this).remove();});", iTime);
|
||||
}
|
||||
}
|
||||
0
jquery/jquery.functions.min.js
vendored
Normal file
4
jquery/jquery.min.js
vendored
Normal file
198
jquery/jquery.tipsy.js
Normal file
@@ -0,0 +1,198 @@
|
||||
// tipsy, facebook style tooltips for jquery
|
||||
// version 1.0.0a
|
||||
// (c) 2008-2010 jason frame [jason@onehackoranother.com]
|
||||
// releated under the MIT license
|
||||
|
||||
(function($) {
|
||||
|
||||
function fixTitle($ele) {
|
||||
if ($ele.attr('title') || typeof($ele.attr('original-title')) != 'string') {
|
||||
$ele.attr('original-title', $ele.attr('title') || '').removeAttr('title');
|
||||
}
|
||||
}
|
||||
|
||||
function Tipsy(element, options) {
|
||||
this.$element = $(element);
|
||||
this.options = options;
|
||||
this.enabled = true;
|
||||
fixTitle(this.$element);
|
||||
}
|
||||
|
||||
Tipsy.prototype = {
|
||||
show: function() {
|
||||
var title = this.getTitle();
|
||||
if (title && this.enabled) {
|
||||
var $tip = this.tip();
|
||||
|
||||
$tip.find('.tipsy-inner')[this.options.html ? 'html' : 'text'](title);
|
||||
$tip[0].className = 'tipsy'; // reset classname in case of dynamic gravity
|
||||
$tip.remove().css({top: 0, left: 0, visibility: 'hidden', display: 'block'}).appendTo(document.body);
|
||||
|
||||
var pos = $.extend({}, this.$element.offset(), {
|
||||
width: this.$element[0].offsetWidth,
|
||||
height: this.$element[0].offsetHeight
|
||||
});
|
||||
|
||||
var actualWidth = $tip[0].offsetWidth, actualHeight = $tip[0].offsetHeight;
|
||||
var gravity = (typeof this.options.gravity == 'function')
|
||||
? this.options.gravity.call(this.$element[0])
|
||||
: this.options.gravity;
|
||||
|
||||
var tp;
|
||||
switch (gravity.charAt(0)) {
|
||||
case 'n':
|
||||
tp = {top: pos.top + pos.height + this.options.offset, left: pos.left + pos.width / 2 - actualWidth / 2};
|
||||
break;
|
||||
case 's':
|
||||
tp = {top: pos.top - actualHeight - this.options.offset, left: pos.left + pos.width / 2 - actualWidth / 2};
|
||||
break;
|
||||
case 'e':
|
||||
tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth - this.options.offset};
|
||||
break;
|
||||
case 'w':
|
||||
tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width + this.options.offset};
|
||||
break;
|
||||
}
|
||||
|
||||
if (gravity.length == 2) {
|
||||
if (gravity.charAt(1) == 'w') {
|
||||
tp.left = pos.left + pos.width / 2 - 15;
|
||||
} else {
|
||||
tp.left = pos.left + pos.width / 2 - actualWidth + 15;
|
||||
}
|
||||
}
|
||||
|
||||
$tip.css(tp).addClass('tipsy-' + gravity);
|
||||
|
||||
if (this.options.fade) {
|
||||
$tip.stop().css({opacity: 0, display: 'block', visibility: 'visible'}).animate({opacity: this.options.opacity});
|
||||
} else {
|
||||
$tip.css({visibility: 'visible', opacity: this.options.opacity});
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
hide: function() {
|
||||
if (this.options.fade) {
|
||||
this.tip().stop().fadeOut(function() { $(this).remove(); });
|
||||
} else {
|
||||
this.tip().remove();
|
||||
}
|
||||
},
|
||||
|
||||
getTitle: function() {
|
||||
var title, $e = this.$element, o = this.options;
|
||||
fixTitle($e);
|
||||
var title, o = this.options;
|
||||
if (typeof o.title == 'string') {
|
||||
title = $e.attr(o.title == 'title' ? 'original-title' : o.title);
|
||||
} else if (typeof o.title == 'function') {
|
||||
title = o.title.call($e[0]);
|
||||
}
|
||||
title = ('' + title).replace(/(^\s*|\s*$)/, "");
|
||||
return title || o.fallback;
|
||||
},
|
||||
|
||||
tip: function() {
|
||||
if (!this.$tip) {
|
||||
this.$tip = $('<div class="tipsy"></div>').html('<div class="tipsy-arrow"></div><div class="tipsy-inner"/></div>');
|
||||
}
|
||||
return this.$tip;
|
||||
},
|
||||
|
||||
validate: function() {
|
||||
if (!this.$element[0].parentNode) {
|
||||
this.hide();
|
||||
this.$element = null;
|
||||
this.options = null;
|
||||
}
|
||||
},
|
||||
|
||||
enable: function() { this.enabled = true; },
|
||||
disable: function() { this.enabled = false; },
|
||||
toggleEnabled: function() { this.enabled = !this.enabled; }
|
||||
};
|
||||
|
||||
$.fn.tipsy = function(options) {
|
||||
|
||||
if (options === true) {
|
||||
return this.data('tipsy');
|
||||
} else if (typeof options == 'string') {
|
||||
return this.data('tipsy')[options]();
|
||||
}
|
||||
|
||||
options = $.extend({}, $.fn.tipsy.defaults, options);
|
||||
|
||||
function get(ele) {
|
||||
var tipsy = $.data(ele, 'tipsy');
|
||||
if (!tipsy) {
|
||||
tipsy = new Tipsy(ele, $.fn.tipsy.elementOptions(ele, options));
|
||||
$.data(ele, 'tipsy', tipsy);
|
||||
}
|
||||
return tipsy;
|
||||
}
|
||||
|
||||
function enter() {
|
||||
var tipsy = get(this);
|
||||
tipsy.hoverState = 'in';
|
||||
if (options.delayIn == 0) {
|
||||
tipsy.show();
|
||||
} else {
|
||||
setTimeout(function() { if (tipsy.hoverState == 'in') tipsy.show(); }, options.delayIn);
|
||||
}
|
||||
};
|
||||
|
||||
function leave() {
|
||||
var tipsy = get(this);
|
||||
tipsy.hoverState = 'out';
|
||||
if (options.delayOut == 0) {
|
||||
tipsy.hide();
|
||||
} else {
|
||||
setTimeout(function() { if (tipsy.hoverState == 'out') tipsy.hide(); }, options.delayOut);
|
||||
}
|
||||
};
|
||||
|
||||
if (!options.live) this.each(function() { get(this); });
|
||||
|
||||
if (options.trigger != 'manual') {
|
||||
var binder = options.live ? 'live' : 'bind',
|
||||
eventIn = options.trigger == 'hover' ? 'mouseenter' : 'focus',
|
||||
eventOut = options.trigger == 'hover' ? 'mouseleave' : 'blur';
|
||||
this[binder](eventIn, enter)[binder](eventOut, leave);
|
||||
}
|
||||
|
||||
return this;
|
||||
|
||||
};
|
||||
|
||||
$.fn.tipsy.defaults = {
|
||||
delayIn: 0,
|
||||
delayOut: 0,
|
||||
fade: false,
|
||||
fallback: '',
|
||||
gravity: 'n',
|
||||
html: false,
|
||||
live: false,
|
||||
offset: 0,
|
||||
opacity: 0.8,
|
||||
title: 'title',
|
||||
trigger: 'hover'
|
||||
};
|
||||
|
||||
// Overwrite this method to provide options on a per-element basis.
|
||||
// For example, you could store the gravity in a 'tipsy-gravity' attribute:
|
||||
// return $.extend({}, options, {gravity: $(ele).attr('tipsy-gravity') || 'n' });
|
||||
// (remember - do not modify 'options' in place!)
|
||||
$.fn.tipsy.elementOptions = function(ele, options) {
|
||||
return $.metadata ? $.extend({}, options, $(ele).metadata()) : options;
|
||||
};
|
||||
|
||||
$.fn.tipsy.autoNS = function() {
|
||||
return $(this).offset().top > ($(document).scrollTop() + $(window).height() / 2) ? 's' : 'n';
|
||||
};
|
||||
|
||||
$.fn.tipsy.autoWE = function() {
|
||||
return $(this).offset().left > ($(document).scrollLeft() + $(window).width() / 2) ? 'e' : 'w';
|
||||
};
|
||||
|
||||
})(jQuery);
|
||||
1
jquery/jquery.tipsy.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
(function(a){function c(c,d){this.$element=a(c);this.options=d;this.enabled=true;b(this.$element)}function b(a){if(a.attr("title")||typeof a.attr("original-title")!="string"){a.attr("original-title",a.attr("title")||"").removeAttr("title")}}c.prototype={show:function(){var b=this.getTitle();if(b&&this.enabled){var c=this.tip();c.find(".tipsy-inner")[this.options.html?"html":"text"](b);c[0].className="tipsy";c.remove().css({top:0,left:0,visibility:"hidden",display:"block"}).appendTo(document.body);var d=a.extend({},this.$element.offset(),{width:this.$element[0].offsetWidth,height:this.$element[0].offsetHeight});var e=c[0].offsetWidth,f=c[0].offsetHeight;var g=typeof this.options.gravity=="function"?this.options.gravity.call(this.$element[0]):this.options.gravity;var h;switch(g.charAt(0)){case"n":h={top:d.top+d.height+this.options.offset,left:d.left+d.width/2-e/2};break;case"s":h={top:d.top-f-this.options.offset,left:d.left+d.width/2-e/2};break;case"e":h={top:d.top+d.height/2-f/2,left:d.left-e-this.options.offset};break;case"w":h={top:d.top+d.height/2-f/2,left:d.left+d.width+this.options.offset};break}if(g.length==2){if(g.charAt(1)=="w"){h.left=d.left+d.width/2-15}else{h.left=d.left+d.width/2-e+15}}c.css(h).addClass("tipsy-"+g);if(this.options.fade){c.stop().css({opacity:0,display:"block",visibility:"visible"}).animate({opacity:this.options.opacity})}else{c.css({visibility:"visible",opacity:this.options.opacity})}}},hide:function(){if(this.options.fade){this.tip().stop().fadeOut(function(){a(this).remove()})}else{this.tip().remove()}},getTitle:function(){var a,c=this.$element,d=this.options;b(c);var a,d=this.options;if(typeof d.title=="string"){a=c.attr(d.title=="title"?"original-title":d.title)}else if(typeof d.title=="function"){a=d.title.call(c[0])}a=(""+a).replace(/(^\s*|\s*$)/,"");return a||d.fallback},tip:function(){if(!this.$tip){this.$tip=a('<div class="tipsy"></div>').html('<div class="tipsy-arrow"></div><div class="tipsy-inner"/></div>')}return this.$tip},validate:function(){if(!this.$element[0].parentNode){this.hide();this.$element=null;this.options=null}},enable:function(){this.enabled=true},disable:function(){this.enabled=false},toggleEnabled:function(){this.enabled=!this.enabled}};a.fn.tipsy=function(b){function f(){var a=d(this);a.hoverState="out";if(b.delayOut==0){a.hide()}else{setTimeout(function(){if(a.hoverState=="out")a.hide()},b.delayOut)}}function e(){var a=d(this);a.hoverState="in";if(b.delayIn==0){a.show()}else{setTimeout(function(){if(a.hoverState=="in")a.show()},b.delayIn)}}function d(d){var e=a.data(d,"tipsy");if(!e){e=new c(d,a.fn.tipsy.elementOptions(d,b));a.data(d,"tipsy",e)}return e}if(b===true){return this.data("tipsy")}else if(typeof b=="string"){return this.data("tipsy")[b]()}b=a.extend({},a.fn.tipsy.defaults,b);if(!b.live)this.each(function(){d(this)});if(b.trigger!="manual"){var g=b.live?"live":"bind",h=b.trigger=="hover"?"mouseenter":"focus",i=b.trigger=="hover"?"mouseleave":"blur";this[g](h,e)[g](i,f)}return this};a.fn.tipsy.defaults={delayIn:0,delayOut:0,fade:false,fallback:"",gravity:"n",html:false,live:false,offset:0,opacity:.8,title:"title",trigger:"hover"};a.fn.tipsy.elementOptions=function(b,c){return a.metadata?a.extend({},c,a(b).metadata()):c};a.fn.tipsy.autoNS=function(){return a(this).offset().top>a(document).scrollTop()+a(window).height()/2?"s":"n"};a.fn.tipsy.autoWE=function(){return a(this).offset().left>a(document).scrollLeft()+a(window).width()/2?"e":"w"}})(jQuery)
|
||||
16
robots.txt
Normal file
@@ -0,0 +1,16 @@
|
||||
User-agent: *
|
||||
|
||||
User-agent: *
|
||||
Disallow: /*.gif$
|
||||
|
||||
User-agent: *
|
||||
Disallow: /*.jpg$
|
||||
|
||||
User-agent: *
|
||||
Disallow: /*.jpeg$
|
||||
|
||||
User-agent: *
|
||||
Disallow: /*.png$
|
||||
|
||||
User-agent: *
|
||||
Disallow: /*.pdf$
|
||||
15
style/style.ie.css
Normal file
@@ -0,0 +1,15 @@
|
||||
#cv {
|
||||
|
||||
}
|
||||
#card {
|
||||
|
||||
}
|
||||
.section {width:100%;}
|
||||
|
||||
.work .item ul li span.title {
|
||||
float:right;
|
||||
/*margin-left:200px;*/
|
||||
}
|
||||
.work .item .info {
|
||||
margin-left:8px;
|
||||
}
|
||||
1
style/style.normalize.css
Normal file
45
style/style.print.css
Normal file
@@ -0,0 +1,45 @@
|
||||
a.no_print_link {
|
||||
color:#333333;
|
||||
text-decoration:none;
|
||||
}
|
||||
#cv {
|
||||
border:none;
|
||||
width:100%;
|
||||
float:none;
|
||||
margin:0;
|
||||
}
|
||||
.header {
|
||||
padding:0 0 30px 0;
|
||||
}
|
||||
.person h1 {
|
||||
margin-bottom:15px;
|
||||
}
|
||||
.person h2 {
|
||||
letter-spacing:0;
|
||||
}
|
||||
.section {
|
||||
margin:0;
|
||||
}
|
||||
.section_name {
|
||||
float:none;
|
||||
margin-bottom:30px;
|
||||
width:auto;
|
||||
}
|
||||
h2.section_name {
|
||||
font-style:normal;
|
||||
}
|
||||
.section_items {
|
||||
float:none;
|
||||
width:90%;
|
||||
margin-left:10%;
|
||||
}
|
||||
#card {
|
||||
margin-top:20px;
|
||||
border:1px solid #DEDEDE;
|
||||
}
|
||||
#card ul.card_items li {
|
||||
padding-left:0;
|
||||
}
|
||||
.paperclip, .clickable, #card .contact_me_btn, #contact_me_box, #contact_me, .card_buttons, .no_print, .logo {
|
||||
display:none;
|
||||
}
|
||||
638
style/style.screen.css
Normal file
@@ -0,0 +1,638 @@
|
||||
/* Style */
|
||||
|
||||
/* Normalize */
|
||||
|
||||
html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, font, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td {
|
||||
border:0;
|
||||
outline:0;
|
||||
font-weight:inherit;
|
||||
font-style:inherit;
|
||||
font-size:100%;
|
||||
font-family:inherit;
|
||||
vertical-align:baseline;
|
||||
margin:0;
|
||||
padding:0;
|
||||
}
|
||||
:focus {
|
||||
outline:0;
|
||||
}
|
||||
body {
|
||||
background:#000033 url(../images/bg.gif) 0 0 repeat;
|
||||
color:#333;
|
||||
font:12px Arial, Helvetica, sans-serif;
|
||||
line-height:22px;
|
||||
}
|
||||
ol, ul {
|
||||
list-style:none;
|
||||
}
|
||||
table {
|
||||
border-collapse:separate;
|
||||
border-spacing:0;
|
||||
}
|
||||
caption, th, td {
|
||||
text-align:left;
|
||||
font-weight:400;
|
||||
}
|
||||
blockquote:before, blockquote:after, q:before, q:after {
|
||||
content:"";
|
||||
}
|
||||
a, a:visited {
|
||||
color:#06A;
|
||||
text-decoration:none;
|
||||
}
|
||||
a:hover {
|
||||
color:#637BFF;
|
||||
}
|
||||
strong {
|
||||
font-weight:700;
|
||||
}
|
||||
em {
|
||||
font-style:italic;
|
||||
}
|
||||
input[type=submit], input[type=reset], input[type=button], .clickable {
|
||||
cursor:pointer;
|
||||
}
|
||||
.fixed:after {
|
||||
content:".";
|
||||
display:block;
|
||||
height:0;
|
||||
clear:both;
|
||||
visibility:hidden;
|
||||
}
|
||||
.fixed {
|
||||
display:block;
|
||||
min-height:1%;
|
||||
}
|
||||
* html .fixed {
|
||||
height:1%;
|
||||
}
|
||||
|
||||
/* Commons */
|
||||
|
||||
.btn {
|
||||
height:25px;
|
||||
padding:2px;
|
||||
width:80px;
|
||||
}
|
||||
.section {
|
||||
border-bottom:1px solid #dfdfdf;
|
||||
margin:0 39px;
|
||||
padding:30px 0;
|
||||
}
|
||||
.hide {
|
||||
display:none;
|
||||
}
|
||||
.inline_title {
|
||||
font-weight:700;
|
||||
margin-right:5px;
|
||||
}
|
||||
|
||||
.arrow_up {
|
||||
position:fixed;
|
||||
display:none;
|
||||
top:100%;
|
||||
margin-top:-99px; /* - 66px cv margin bottom - 2 to_top borders - 25 to_top height - 6 center of the space left */
|
||||
margin-left:747px; /* 780 cv width - 27 to_top width - (39-27)/2 center of the space left */
|
||||
background-color:#eee;
|
||||
border:1px solid #838383;
|
||||
z-index:10;
|
||||
width:25px;
|
||||
height:25px;
|
||||
}
|
||||
.arrow_up a {
|
||||
width:100%;
|
||||
}
|
||||
.arrow_up:hover {
|
||||
background-color:#FFFFFF;
|
||||
}
|
||||
|
||||
/* Commons - Section */
|
||||
|
||||
.section_name {
|
||||
float:left;
|
||||
width:200px;
|
||||
}
|
||||
.section_items {
|
||||
float:right;
|
||||
margin-right:10px;
|
||||
width:490px;
|
||||
}
|
||||
h2.section_name {
|
||||
color:#3C4756;
|
||||
font-size:24px;
|
||||
font-style:italic;
|
||||
font-weight:400;
|
||||
letter-spacing:0px;
|
||||
}
|
||||
|
||||
/* Commons - Item */
|
||||
|
||||
.item {
|
||||
margin-bottom:20px;
|
||||
padding-bottom:20px;
|
||||
border-bottom:1px solid #dfdfdf;
|
||||
}
|
||||
.item p {
|
||||
text-align:justify;
|
||||
padding:0 0 15px;
|
||||
}
|
||||
.item p.last {
|
||||
padding:0;
|
||||
}
|
||||
.last_item {
|
||||
margin-bottom:0;
|
||||
padding-bottom:0;
|
||||
border-bottom:none;
|
||||
}
|
||||
.item h2 {
|
||||
color:#06A;
|
||||
font-family:Georgia, serif;
|
||||
font-size:24px;
|
||||
font-weight:400;
|
||||
letter-spacing:-1px;
|
||||
}
|
||||
.item h2 a {
|
||||
|
||||
}
|
||||
.item h3 {
|
||||
margin-top:3px;
|
||||
color:#637BFF;
|
||||
font-family:Georgia, serif;
|
||||
font-size:16px;
|
||||
font-style:italic;
|
||||
font-weight:400;
|
||||
}
|
||||
.item h4 {
|
||||
float:right;
|
||||
border-top:1px solid #dfdfdf;
|
||||
border-bottom:1px solid #dfdfdf;
|
||||
color:#666;
|
||||
font-style:italic;
|
||||
padding:0 7px;
|
||||
}
|
||||
.item ul {
|
||||
text-align:justify;
|
||||
padding:15px 0;
|
||||
}
|
||||
.item ul li {
|
||||
list-style-type:square;
|
||||
font-size:12px;
|
||||
}
|
||||
.item ul li.last {
|
||||
margin-bottom:0;
|
||||
}
|
||||
.item ul li ul {
|
||||
padding:0;
|
||||
}
|
||||
.item ul li ul li{
|
||||
list-style-type:disc;
|
||||
margin-left:25px;
|
||||
margin-bottom:0;
|
||||
font-weight:normal;
|
||||
}
|
||||
|
||||
/* Commons - Tipsy */
|
||||
|
||||
.tipsy {
|
||||
padding:5px;
|
||||
font-size:10px;
|
||||
position:absolute;
|
||||
z-index: 100000;
|
||||
}
|
||||
.tipsy-inner {
|
||||
padding:5px 8px 4px 8px;
|
||||
background-color:#000000;
|
||||
color:#FFFFFF;
|
||||
max-width:200px;
|
||||
text-align:center;
|
||||
}
|
||||
.tipsy-inner {
|
||||
border-radius:3px;
|
||||
-moz-border-radius:3px;
|
||||
-webkit-border-radius:3px;
|
||||
}
|
||||
.tipsy-arrow {
|
||||
position:absolute;
|
||||
background:url('../images/tipsy.gif') no-repeat top left;
|
||||
width:9px;
|
||||
height:5px;
|
||||
}
|
||||
.tipsy-n .tipsy-arrow {
|
||||
top:0;
|
||||
left:50%;
|
||||
margin-left:-4px;
|
||||
}
|
||||
.tipsy-nw .tipsy-arrow {
|
||||
top:0;
|
||||
left:10px;
|
||||
}
|
||||
.tipsy-ne .tipsy-arrow {
|
||||
top:0;
|
||||
right:10px;
|
||||
}
|
||||
.tipsy-s .tipsy-arrow {
|
||||
bottom:0;
|
||||
left:50%;
|
||||
margin-left:-4px;
|
||||
background-position:bottom left;
|
||||
}
|
||||
.tipsy-sw .tipsy-arrow {
|
||||
bottom:0;
|
||||
left:10px;
|
||||
background-position:bottom left;
|
||||
}
|
||||
.tipsy-se .tipsy-arrow {
|
||||
bottom:0;
|
||||
right:10px;
|
||||
background-position:bottom left;
|
||||
}
|
||||
.tipsy-e .tipsy-arrow {
|
||||
top:50%;
|
||||
margin-top:-4px;
|
||||
right:0;
|
||||
width:5px;
|
||||
height:9px;
|
||||
background-position:top right;
|
||||
}
|
||||
.tipsy-w .tipsy-arrow {
|
||||
top:50%;
|
||||
margin-top:-4px;
|
||||
left:0;
|
||||
width:5px;
|
||||
height:9px;
|
||||
}
|
||||
.tipsy-s {
|
||||
margin-top:-15px;
|
||||
}
|
||||
.tipsy-e {
|
||||
margin-left:-15px;
|
||||
}
|
||||
|
||||
/* Container */
|
||||
|
||||
#cv {
|
||||
width:780px;
|
||||
background-color:#FFFFFF;
|
||||
border:1px solid #637BFF;
|
||||
margin:66px auto;
|
||||
padding:0 0 40px;
|
||||
}
|
||||
|
||||
/* Header */
|
||||
|
||||
.header {
|
||||
background:url(../images/grey_bg.jpg) 0 0 repeat;
|
||||
margin:0;
|
||||
padding:30px 40px 29px;
|
||||
position:relative;
|
||||
}
|
||||
|
||||
/* Header - Person */
|
||||
|
||||
.person {
|
||||
float:left;
|
||||
margin-top:15px;
|
||||
width:500px;
|
||||
}
|
||||
.person img {
|
||||
float:left;
|
||||
margin-right:25px;
|
||||
background-color:#FFF;
|
||||
border:1px solid #dedede;
|
||||
padding:10px;
|
||||
}
|
||||
.person h1 {
|
||||
margin-top:45px; /* (152 pic - 46 h1 - 16 h2)/2 */
|
||||
color:#475261;
|
||||
font-size:46px;
|
||||
font-weight:700;
|
||||
}
|
||||
.person h2 {
|
||||
color:#475261;
|
||||
font-family:Arial, Helvetica, sans-serif;
|
||||
font-size:18px;
|
||||
line-height:16px;
|
||||
font-weight:400;
|
||||
text-transform:uppercase;
|
||||
}
|
||||
|
||||
/* Header - Card */
|
||||
|
||||
.paperclip {
|
||||
background: transparent url(../images/paperclip_clipped.png) 0 0 no-repeat;
|
||||
width:64px;
|
||||
height:64px;
|
||||
position:absolute;
|
||||
top:7px;
|
||||
right:40px;
|
||||
}
|
||||
|
||||
#card {
|
||||
float:right;
|
||||
border-style:solid;
|
||||
border-width: 1px 2px 2px 1px;
|
||||
border-color: #DEDEDE #808080 #808080 #DEDEDE;
|
||||
padding:10px;
|
||||
background:#FFFFFF;
|
||||
}
|
||||
#card ul {
|
||||
list-style:none;
|
||||
}
|
||||
#card ul.card_buttons li {
|
||||
display:inline;
|
||||
margin-right:5px;
|
||||
}
|
||||
#card ul.card_items li {
|
||||
background:url(../images/socials/default.png) 0 3px no-repeat;
|
||||
padding-left:21px;
|
||||
}
|
||||
#card ul.card_items li.xp {
|
||||
background-image:url(../images/experience.png);
|
||||
}
|
||||
#card ul.card_items li.university {
|
||||
background-image:url(../images/university.png);
|
||||
}
|
||||
#card ul.card_items li.globe {
|
||||
background-image:url(../images/globe.png);
|
||||
}
|
||||
#card ul.card_items li a, #card ul.card_items li a:visited {
|
||||
color:#333333;
|
||||
}
|
||||
#card ul.card_items li a:hover {
|
||||
color:#000000;
|
||||
}
|
||||
#card .contact_me_btn {
|
||||
background-image:none;
|
||||
background:#F8F8F8 url('../images/contactme.png') 90% 50% no-repeat;
|
||||
border:1px solid #DEDEDE;
|
||||
color:#4B5564;
|
||||
display:block;
|
||||
font-size:15px;
|
||||
font-weight:700;
|
||||
text-decoration:none;
|
||||
margin-top:10px;
|
||||
padding:10px 50px 10px 15px;
|
||||
}
|
||||
#card .contact_me_btn:hover {
|
||||
border-color:#637BFF;
|
||||
}
|
||||
|
||||
/* Main - Contact */
|
||||
|
||||
.contact {
|
||||
|
||||
}
|
||||
#contact_me {
|
||||
background:#f8f8f8 url(../images/grey_bg.jpg) 0 0 repeat;
|
||||
border:1px solid #dfdfdf;
|
||||
padding:40px 40px;
|
||||
position:relative;
|
||||
}
|
||||
#contact_me p {
|
||||
clear:both;
|
||||
text-align:center;
|
||||
}
|
||||
#contact_me input, #contact_me textarea {
|
||||
background-color:#fff;
|
||||
border:1px solid #ccc;
|
||||
color:#515151;
|
||||
width:250px;
|
||||
padding:5px;
|
||||
margin:5px;
|
||||
font-size:12px;
|
||||
line-height:12px;
|
||||
}
|
||||
#contact_me .large_box {
|
||||
width:522px; /* 250*2 + 5*2 padding + 5*2 margins + 1*2 borders */
|
||||
}
|
||||
#contact_me textarea {
|
||||
height:150px;
|
||||
overflow:auto;
|
||||
font:12px Arial, Helvetica, sans-serif;
|
||||
}
|
||||
#contact_me .btn {
|
||||
width:90px;
|
||||
padding:0;
|
||||
font-weight:600;
|
||||
}
|
||||
#contact_me .btn:hover {
|
||||
border-color:#637BFF;
|
||||
}
|
||||
#contact_me #formstatus {
|
||||
clear:both;
|
||||
height:27px; /*15 5*2 padding 1*2 borders */
|
||||
}
|
||||
#contact_me #formstatus .message {
|
||||
width:522px; /* 250*2 + 5*2 padding + 5*2 margins + 1*2 borders */
|
||||
margin:auto;
|
||||
padding:5px;
|
||||
border:1px solid #D4D4D4;
|
||||
background:white;
|
||||
font-size:12px;
|
||||
line-height:15px;
|
||||
font-weight:700;
|
||||
}
|
||||
#contact_me #formstatus .error {
|
||||
color:red;
|
||||
}
|
||||
#contact_me #formstatus .warning {
|
||||
color:orange;
|
||||
}
|
||||
#contact_me #formstatus .success {
|
||||
color:#0C3;
|
||||
border:none;
|
||||
background:none;
|
||||
}
|
||||
#contact_me #formstatus .loading {
|
||||
color:#515151;
|
||||
background:#FFFFFF url(../images/loading_white.gif) 509px 50% no-repeat;
|
||||
}
|
||||
#contact_me .close {
|
||||
position:absolute;
|
||||
top:10px;
|
||||
right:10px;
|
||||
margin:0;
|
||||
padding:0;
|
||||
width:26px;
|
||||
height:26px;
|
||||
background:#FFFFFF url(../images/close.png) 0 0 no-repeat;
|
||||
}
|
||||
|
||||
/* Main - Profile */
|
||||
|
||||
.profile {
|
||||
|
||||
}
|
||||
|
||||
/* Main - Work */
|
||||
|
||||
.work {
|
||||
|
||||
}
|
||||
.work h3 {
|
||||
margin-bottom:15px;
|
||||
}
|
||||
.work span.company {
|
||||
text-transform:uppercase;
|
||||
}
|
||||
.work .item ul li {
|
||||
list-style-type:none;
|
||||
margin-bottom:30px;
|
||||
border:1px solid #DEDEDE;
|
||||
padding-top:30px;
|
||||
padding-right:15px;
|
||||
}
|
||||
.work .item ul li.last {
|
||||
margin-bottom:0;
|
||||
}
|
||||
.work .item .cover {
|
||||
float:left;
|
||||
margin:-15px 15px 15px 15px;
|
||||
border-left:15px solid #637BFF;
|
||||
}
|
||||
.work .item .info {
|
||||
border:1px solid #DEDEDE;
|
||||
border-left:none;
|
||||
padding:10px;
|
||||
width:115px;
|
||||
background:#F8F8F8;
|
||||
}
|
||||
.work .item .info p {
|
||||
text-align:center;
|
||||
padding:0;
|
||||
border-bottom:1px solid #dedede;
|
||||
}
|
||||
.work .item .info p a {
|
||||
/* font-family:Georgia; */
|
||||
font-size:16px;
|
||||
font-weight:700;
|
||||
}
|
||||
.work .item .info p a img {
|
||||
margin:0 3px 0 0;
|
||||
}
|
||||
.work .item .info ul {
|
||||
margin-top:5px;
|
||||
}
|
||||
.work .item .info ul li {
|
||||
list-style-position:inside;
|
||||
list-style-type:square;
|
||||
background:#F8F8F8;
|
||||
margin-left:5px;
|
||||
line-height:20px;
|
||||
margin-bottom:0;
|
||||
font-size:11px;
|
||||
line-height:16px;
|
||||
}
|
||||
.work .item ul li span.title {
|
||||
font-size:13px;
|
||||
font-weight:700;
|
||||
}
|
||||
.work .item ul li ul li {
|
||||
border:none;
|
||||
padding:0;
|
||||
list-style-type:disc;
|
||||
}
|
||||
.work .item ul li ul li.subtitle {
|
||||
margin-left:0;
|
||||
list-style:none;
|
||||
font-style:italic;
|
||||
margin-bottom:15px;
|
||||
}
|
||||
.work .item ul li ul li.action {
|
||||
margin-bottom:5px;
|
||||
color:#4B5564;
|
||||
clear:both;
|
||||
}
|
||||
.work .item ul li ul li.action ul li {
|
||||
list-style-type:square;
|
||||
color:grey;
|
||||
margin-bottom:0;
|
||||
}
|
||||
.work .item ul.standalone li{
|
||||
border:none;
|
||||
margin:0 0 0 15px;
|
||||
padding:0;
|
||||
}
|
||||
|
||||
/* Main - Language */
|
||||
|
||||
.language {
|
||||
|
||||
}
|
||||
.language ul {
|
||||
margin-left:25px;
|
||||
}
|
||||
|
||||
/* Main - Technical */
|
||||
|
||||
.technical {
|
||||
|
||||
}
|
||||
.technical h2 {
|
||||
margin-bottom:15px;
|
||||
}
|
||||
.technical p {
|
||||
padding-bottom:0;
|
||||
}
|
||||
.technical ul li {
|
||||
margin-left:25px;
|
||||
margin-bottom:15px;
|
||||
font-weight:700;
|
||||
}
|
||||
.technical ul li.no_child {
|
||||
font-weight:normal;
|
||||
margin-bottom:5px;
|
||||
}
|
||||
.technical ul li.last {
|
||||
margin-bottom:0;
|
||||
}
|
||||
.technical ul {
|
||||
padding-bottom:0;
|
||||
}
|
||||
|
||||
/* Main - Education */
|
||||
|
||||
.education {
|
||||
border-bottom:none;
|
||||
}
|
||||
.education a.logo {
|
||||
float:left;
|
||||
width:70px;
|
||||
height:35px; /* 24 h2 + 16 h3 + 3 margin - 2 border - 3*2 padding */
|
||||
padding:3px;
|
||||
border:1px solid #DFDFDF;
|
||||
margin-top:0px;
|
||||
margin-right:10px;
|
||||
background-position:3px 3px;
|
||||
background-repeat:no-repeat;
|
||||
}
|
||||
.education a.netapp {
|
||||
background-image:url('../images/netapp.gif');
|
||||
}
|
||||
.education a.cfa {
|
||||
background-image:url('../images/cfa.png');
|
||||
}
|
||||
.education p {
|
||||
margin:0 0 0 15px;
|
||||
padding:0;
|
||||
}
|
||||
.education a.details {
|
||||
margin-left:15px;
|
||||
font-style:italic;
|
||||
}
|
||||
.education ul li {
|
||||
margin-left:25px;
|
||||
font-weight:700;
|
||||
}
|
||||
.education ul li ul li {
|
||||
margin-left:15px;
|
||||
font-style:italic;
|
||||
list-style-type:none;
|
||||
font-weight:normal;
|
||||
}
|
||||
.education ul li ul li ul li {
|
||||
font-style:normal;
|
||||
}
|
||||
|
||||
/* Tests */
|
||||
|
||||