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<EFBFBD>s 6 ans d'administration syst<73>me sur les environnements de production de plusieurs grands comptes, j'ai eu l'opportunit<69> d'int<6E>grer une <20>quipe d'ing<6E>nierie en infrastructure. Ce poste m'a permis de me sp<73>cialiser dans le domaine du stockage SAN et de concevoir des solutions pour des clients implant<6E>s <20> l'international.</p>
|
||||
<p>Toujours curieux et passionn<6E> par les nouvelles technologies, mon exp<78>rience me permet de m'adapter rapidement afin de relever avec succ<63>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<62>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<6F>dures d'exploitation</li>
|
||||
<li class="action">Etude et migration de l'authentification centralis<69>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 */
|
||||
|
||||