├── 404.html ├── google67195dc180ca8313.html ├── pgp.asc ├── city.png ├── favicon.ico ├── favicon.png ├── README.md ├── city-small.png ├── cv ├── adrian.jpg ├── adrian.png ├── resume.pdf ├── fonts │ ├── FontAwesome.otf │ ├── Roboto-Bold.ttf │ ├── Roboto-Thin.ttf │ ├── Roboto-Italic.ttf │ ├── Roboto-Light.ttf │ ├── Roboto-Medium.ttf │ ├── Roboto-Regular.ttf │ ├── SourceSansPro-It.otf │ ├── Roboto-BoldItalic.ttf │ ├── Roboto-LightItalic.ttf │ ├── Roboto-MediumItalic.ttf │ ├── Roboto-ThinItalic.ttf │ ├── SourceSansPro-Bold.otf │ ├── SourceSansPro-Light.otf │ ├── SourceSansPro-BoldIt.otf │ ├── SourceSansPro-LightIt.otf │ ├── SourceSansPro-Regular.otf │ ├── SourceSansPro-Semibold.otf │ └── SourceSansPro-SemiboldIt.otf ├── resume.tex └── awesome-cv.cls ├── img ├── Haiku.png ├── Kovel.png ├── bloco.png ├── phaser.png ├── yayeyo.png ├── Aforismos.png ├── Anrokku.png ├── Lumtumo.png ├── Ordunna.jpg ├── divcity.png ├── firefox.png ├── norzarea.png ├── Vocabulario.png ├── AzpazetaSNP4.png ├── PuentesTierra.png ├── send-to-mail.png ├── torre-utopia.png ├── Calculadora4Bits.PNG ├── SanPedroFrontal3.jpg ├── SuperFreeCell-2.png ├── AdrianArroyoCalle2.jpg ├── amp-up-your-firefox.jpg ├── elpasillodelinfierno.png ├── ObsolescenciaProgramada.png ├── optimize.sh ├── ObsolescenciaProgramada-256.png └── azpazeta.svg ├── css ├── Monofett.woff ├── RobotoSlab.woff ├── AnonymousPro.woff ├── JuliusSansOne.woff ├── UbuntuCondensed.woff ├── fonts.css ├── panel-css.css └── main.css ├── old-site ├── img │ ├── bloco.png │ ├── divcity.png │ ├── lumtumo.png │ ├── norzarea.png │ ├── send-to-mail.png │ ├── AdrianArroyoCalle2.jpg │ ├── elpasillodelinfierno.png │ └── azpazeta.svg ├── js │ └── index.js └── css │ └── main.css ├── literatura-adrianistani ├── LiteraturaAdrianistani.jpg ├── LiteraturaAdrianistani-medium.jpg ├── LiteraturaAdrianistani-small.jpg ├── index.html └── picturefill.min.js ├── sitemap.xml ├── robots.txt ├── cookies.txt ├── sitemap.txt ├── html ├── adpv.html ├── videos.html ├── home.html ├── pictures.html ├── events.html ├── biography.html ├── interests.html ├── contact.html ├── donate.html ├── projects.html └── about.html ├── js ├── cookiecommon.js ├── index.js ├── adrianistan.js ├── cookiechoices.js ├── zoom.js └── cookie.js ├── hugo.css ├── main.css ├── tree.js ├── search └── index.html ├── sierpinski ├── main.js └── index.html ├── index.city.html ├── index.old.html ├── index.html ├── buy-software └── index.html └── LICENSE /404.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /google67195dc180ca8313.html: -------------------------------------------------------------------------------- 1 | google-site-verification: google67195dc180ca8313.html -------------------------------------------------------------------------------- /pgp.asc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/pgp.asc -------------------------------------------------------------------------------- /city.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/city.png -------------------------------------------------------------------------------- /favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/favicon.ico -------------------------------------------------------------------------------- /favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/favicon.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | adrianarroyocalle.github.io 2 | =========================== 3 | 4 | Personal webpage 5 | -------------------------------------------------------------------------------- /city-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/city-small.png -------------------------------------------------------------------------------- /cv/adrian.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/cv/adrian.jpg -------------------------------------------------------------------------------- /cv/adrian.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/cv/adrian.png -------------------------------------------------------------------------------- /cv/resume.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/cv/resume.pdf -------------------------------------------------------------------------------- /img/Haiku.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/img/Haiku.png -------------------------------------------------------------------------------- /img/Kovel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/img/Kovel.png -------------------------------------------------------------------------------- /img/bloco.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/img/bloco.png -------------------------------------------------------------------------------- /img/phaser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/img/phaser.png -------------------------------------------------------------------------------- /img/yayeyo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/img/yayeyo.png -------------------------------------------------------------------------------- /css/Monofett.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/css/Monofett.woff -------------------------------------------------------------------------------- /img/Aforismos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/img/Aforismos.png -------------------------------------------------------------------------------- /img/Anrokku.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/img/Anrokku.png -------------------------------------------------------------------------------- /img/Lumtumo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/img/Lumtumo.png -------------------------------------------------------------------------------- /img/Ordunna.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/img/Ordunna.jpg -------------------------------------------------------------------------------- /img/divcity.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/img/divcity.png -------------------------------------------------------------------------------- /img/firefox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/img/firefox.png -------------------------------------------------------------------------------- /img/norzarea.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/img/norzarea.png -------------------------------------------------------------------------------- /css/RobotoSlab.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/css/RobotoSlab.woff -------------------------------------------------------------------------------- /img/Vocabulario.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/img/Vocabulario.png -------------------------------------------------------------------------------- /css/AnonymousPro.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/css/AnonymousPro.woff -------------------------------------------------------------------------------- /css/JuliusSansOne.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/css/JuliusSansOne.woff -------------------------------------------------------------------------------- /img/AzpazetaSNP4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/img/AzpazetaSNP4.png -------------------------------------------------------------------------------- /img/PuentesTierra.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/img/PuentesTierra.png -------------------------------------------------------------------------------- /img/send-to-mail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/img/send-to-mail.png -------------------------------------------------------------------------------- /img/torre-utopia.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/img/torre-utopia.png -------------------------------------------------------------------------------- /old-site/img/bloco.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/old-site/img/bloco.png -------------------------------------------------------------------------------- /css/UbuntuCondensed.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/css/UbuntuCondensed.woff -------------------------------------------------------------------------------- /cv/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/cv/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /cv/fonts/Roboto-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/cv/fonts/Roboto-Bold.ttf -------------------------------------------------------------------------------- /cv/fonts/Roboto-Thin.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/cv/fonts/Roboto-Thin.ttf -------------------------------------------------------------------------------- /img/Calculadora4Bits.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/img/Calculadora4Bits.PNG -------------------------------------------------------------------------------- /img/SanPedroFrontal3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/img/SanPedroFrontal3.jpg -------------------------------------------------------------------------------- /img/SuperFreeCell-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/img/SuperFreeCell-2.png -------------------------------------------------------------------------------- /old-site/img/divcity.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/old-site/img/divcity.png -------------------------------------------------------------------------------- /old-site/img/lumtumo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/old-site/img/lumtumo.png -------------------------------------------------------------------------------- /cv/fonts/Roboto-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/cv/fonts/Roboto-Italic.ttf -------------------------------------------------------------------------------- /cv/fonts/Roboto-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/cv/fonts/Roboto-Light.ttf -------------------------------------------------------------------------------- /cv/fonts/Roboto-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/cv/fonts/Roboto-Medium.ttf -------------------------------------------------------------------------------- /cv/fonts/Roboto-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/cv/fonts/Roboto-Regular.ttf -------------------------------------------------------------------------------- /img/AdrianArroyoCalle2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/img/AdrianArroyoCalle2.jpg -------------------------------------------------------------------------------- /img/amp-up-your-firefox.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/img/amp-up-your-firefox.jpg -------------------------------------------------------------------------------- /old-site/img/norzarea.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/old-site/img/norzarea.png -------------------------------------------------------------------------------- /cv/fonts/SourceSansPro-It.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/cv/fonts/SourceSansPro-It.otf -------------------------------------------------------------------------------- /img/elpasillodelinfierno.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/img/elpasillodelinfierno.png -------------------------------------------------------------------------------- /old-site/img/send-to-mail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/old-site/img/send-to-mail.png -------------------------------------------------------------------------------- /cv/fonts/Roboto-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/cv/fonts/Roboto-BoldItalic.ttf -------------------------------------------------------------------------------- /cv/fonts/Roboto-LightItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/cv/fonts/Roboto-LightItalic.ttf -------------------------------------------------------------------------------- /cv/fonts/Roboto-MediumItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/cv/fonts/Roboto-MediumItalic.ttf -------------------------------------------------------------------------------- /cv/fonts/Roboto-ThinItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/cv/fonts/Roboto-ThinItalic.ttf -------------------------------------------------------------------------------- /cv/fonts/SourceSansPro-Bold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/cv/fonts/SourceSansPro-Bold.otf -------------------------------------------------------------------------------- /cv/fonts/SourceSansPro-Light.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/cv/fonts/SourceSansPro-Light.otf -------------------------------------------------------------------------------- /img/ObsolescenciaProgramada.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/img/ObsolescenciaProgramada.png -------------------------------------------------------------------------------- /cv/fonts/SourceSansPro-BoldIt.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/cv/fonts/SourceSansPro-BoldIt.otf -------------------------------------------------------------------------------- /cv/fonts/SourceSansPro-LightIt.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/cv/fonts/SourceSansPro-LightIt.otf -------------------------------------------------------------------------------- /cv/fonts/SourceSansPro-Regular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/cv/fonts/SourceSansPro-Regular.otf -------------------------------------------------------------------------------- /img/optimize.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | optipng -o7 *.png 3 | find . -name "*.jpg" -type f -exec jpegtran -copy none -optimize -outfile {} {} \; 4 | -------------------------------------------------------------------------------- /cv/fonts/SourceSansPro-Semibold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/cv/fonts/SourceSansPro-Semibold.otf -------------------------------------------------------------------------------- /cv/fonts/SourceSansPro-SemiboldIt.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/cv/fonts/SourceSansPro-SemiboldIt.otf -------------------------------------------------------------------------------- /img/ObsolescenciaProgramada-256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/img/ObsolescenciaProgramada-256.png -------------------------------------------------------------------------------- /old-site/img/AdrianArroyoCalle2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/old-site/img/AdrianArroyoCalle2.jpg -------------------------------------------------------------------------------- /old-site/img/elpasillodelinfierno.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/old-site/img/elpasillodelinfierno.png -------------------------------------------------------------------------------- /literatura-adrianistani/LiteraturaAdrianistani.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/literatura-adrianistani/LiteraturaAdrianistani.jpg -------------------------------------------------------------------------------- /literatura-adrianistani/LiteraturaAdrianistani-medium.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/literatura-adrianistani/LiteraturaAdrianistani-medium.jpg -------------------------------------------------------------------------------- /literatura-adrianistani/LiteraturaAdrianistani-small.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aarroyoc/adrianarroyocalle.github.io/master/literatura-adrianistani/LiteraturaAdrianistani-small.jpg -------------------------------------------------------------------------------- /sitemap.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | http://adrianistan.eu/ 6 | 7 | 8 | -------------------------------------------------------------------------------- /robots.txt: -------------------------------------------------------------------------------- 1 | Sitemap: http://adrianarroyocalle.github.io/sitemap.txt 2 | Sitemap: http://adrianarroyocalle.github.io/blog/sitemap.xml 3 | 4 | #Basic settings 5 | User-Agent: * 6 | Disallow: /private 7 | 8 | User-Agent: Googlebot-News 9 | Disallow: * 10 | -------------------------------------------------------------------------------- /cookies.txt: -------------------------------------------------------------------------------- 1 | Cookies description 2 | =================== 3 | 4 | This site (http://adrianarroyocalle.github.io) uses two types of cookies: 5 | 6 | * Analytics cookies: Used by Google Analytics for collect IP-based data 7 | * Ads cookies: Used by Google AdSense for display the ads in the site 8 | * Social cookies: Used by Disqus for provide comments 9 | 10 | Refer to the original authors of the cookies to know how to remove the cookies 11 | -------------------------------------------------------------------------------- /sitemap.txt: -------------------------------------------------------------------------------- 1 | http://adrianarroyocalle.github.io/index.html 2 | http://adrianarroyocalle.github.io/html/videos.html 3 | http://adrianarroyocalle.github.io/html/projects.html 4 | http://adrianarroyocalle.github.io/html/pictures.html 5 | http://adrianarroyocalle.github.io/html/interests.html 6 | http://adrianarroyocalle.github.io/html/events.html 7 | http://adrianarroyocalle.github.io/html/home.html 8 | http://adrianarroyocalle.github.io/html/contact.html 9 | http://adrianarroyocalle.github.io/html/biography.html 10 | -------------------------------------------------------------------------------- /html/adpv.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Contact 5 | 6 | 7 | 15 | 16 | 17 |

Advertising

18 |
19 | 20 | 21 |

Do you want to advertise here? Please, contact me

22 |
23 | 24 | 25 | -------------------------------------------------------------------------------- /html/videos.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Videos 5 | 6 | 7 | 15 | 16 | 17 |

Videos

18 |
19 |

Here are some videos for your interest:

20 | 21 | 22 |
23 | 24 | 25 | -------------------------------------------------------------------------------- /html/home.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Biography 5 | 6 | 7 | 15 | 16 | 17 | 18 |

Home

19 |

Welcome to my personal website. I'm Adrián Arroyo and I hope that you'll enjoy the website

20 |

Use the buttons on the bottom to surf under my website

21 |

Or if you like to visit my blog, go to the blog

22 |

The background image is my creation and it's available under the Creative Commons 4.0 Attribution license

23 | 24 | 25 | -------------------------------------------------------------------------------- /html/pictures.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Pictures 5 | 6 | 7 | 15 | 16 | 17 |

Pictures

18 |
19 |

Here's some random pictures from my gallery. Can you try to guess what do they mean?

20 | Near Orduña 21 | Calculator in the Crocodile Clips software 22 | My old avatar 23 |
24 | 25 | 26 | -------------------------------------------------------------------------------- /html/events.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Events 5 | 6 | 7 | 15 | 16 | 17 |

Events

18 |
19 |

I've participated on some contests and events. Some to mention:

20 | 30 |
31 | 32 | 33 | -------------------------------------------------------------------------------- /css/fonts.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'Anonymous Pro'; 3 | font-style: normal; 4 | font-weight: 400; 5 | src: local('Anonymous Pro'), local('AnonymousPro'), url(AnonymousPro.woff) format('woff'); 6 | } 7 | @font-face { 8 | font-family: 'Julius Sans One'; 9 | font-style: normal; 10 | font-weight: 400; 11 | src: local('Julius Sans One'), local('JuliusSansOne-Regular'), url(JuliusSansOne.woff) format('woff'); 12 | } 13 | @font-face { 14 | font-family: 'Monofett'; 15 | font-style: normal; 16 | font-weight: 400; 17 | src: local('Monofett'), url(Monofett.woff) format('woff'); 18 | } 19 | @font-face { 20 | font-family: 'Ubuntu Condensed'; 21 | font-style: normal; 22 | font-weight: 400; 23 | src: local('Ubuntu Condensed'), local('UbuntuCondensed-Regular'), url(UbuntuCondensed.woff) format('woff'); 24 | } 25 | -------------------------------------------------------------------------------- /js/cookiecommon.js: -------------------------------------------------------------------------------- 1 | function execCookies(){ 2 | var scripts=document.getElementsByClassName("cookie"); 3 | for(var i=0;i 2 | 3 | 4 | Biography 5 | 6 | 7 | 15 | 16 | 17 |

Biography

18 | Avatar 19 |

It's always difficult to write a page about me. So let's keep it simple, stupid, I'm Adrián Arroyo 20 | 21 | and I'm from

22 | Valladolid, 23 | Spain 24 |

25 |

I was born the 26 | 27 | 25th of September , a great day I think. On my free time I work on software projects

28 |

I'm a student and I'm also a member of the Scholar Council.

29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /hugo.css: -------------------------------------------------------------------------------- 1 | @import 'https://fonts.googleapis.com/css?family=Cairo'; 2 | 3 | h1{ 4 | color: black; 5 | background-color: rgb(135, 205, 222); 6 | display: inline-block; 7 | border: rgb(44, 137, 160) solid 4px; 8 | border-radius: 10em; 9 | padding-left: 10px; 10 | padding-right: 10px; 11 | } 12 | 13 | #desc{ 14 | display: inline-block; 15 | color: black; 16 | background-color: rgb(255, 127, 42); 17 | border: rgb(170, 68, 0) solid 4px; 18 | } 19 | 20 | #avatar{ 21 | width: 128px; 22 | height: 128px; 23 | float: left; 24 | } 25 | body{ 26 | font-family: "Cairo", sans-serif; 27 | text-align: center; 28 | background-image: url("city.png"); 29 | background-attachment: fixed; 30 | background-position: center; 31 | background-repeat: no-repeat; 32 | background-size: cover; 33 | } 34 | section{ 35 | display: flex; 36 | flex-direction: row; 37 | flex-wrap: wrap; 38 | justify-content: center; 39 | align-content: flex-start; 40 | } 41 | 42 | .item{ 43 | flex-grow: 0; 44 | flex-shrink: 1; 45 | flex-basis: 250px; 46 | background-color: rgb(153, 255, 85); 47 | border: rgb(51, 128, 0) 4px solid; 48 | border-radius: 1em; 49 | } 50 | 51 | .icon{ 52 | width: 196px; 53 | height: 196px; 54 | object-fit: scale-down; 55 | object-position: center; 56 | } 57 | 58 | #blog{ 59 | order: 0; 60 | background-color: rgb(222, 170, 135); 61 | } 62 | -------------------------------------------------------------------------------- /html/interests.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Interests 5 | 6 | 7 | 15 | 16 | 17 |

Interests

18 |
19 |

I'd like some topics over anothers.

20 | 42 |

And some things that I hate

43 | 48 |
49 | 50 | 51 | -------------------------------------------------------------------------------- /js/index.js: -------------------------------------------------------------------------------- 1 | var pos=0; 2 | var articles; 3 | function changePage(position) 4 | { 5 | var transfomer; 6 | articles=document.getElementById("articles"); 7 | switch(position) 8 | { 9 | case 0: 10 | transformer=""; 11 | break; 12 | case 1: 13 | transformer="rotateY(-90deg)"; 14 | break; 15 | case 2: 16 | transformer="rotateY(-90deg) rotateZ(90deg)"; 17 | break; 18 | case 3: 19 | transformer="rotateY(180deg) rotateZ(90deg)"; 20 | break; 21 | case 4: 22 | transformer="rotateY(90deg) rotateX(90deg)"; 23 | break; 24 | case 5: 25 | transformer="rotateX(90deg)"; 26 | break; 27 | } 28 | if(articles.style.transform!=undefined) 29 | articles.style.transform=transformer; 30 | else if(articles.style.webkitTransform!=undefined) 31 | articles.style.webkitTransform=transformer; 32 | else if(articles.style.mozTransform!=undefined) 33 | articles.style.mozTransform=transformer; 34 | } 35 | 36 | window.addEventListener("load",function(){ 37 | articles=document.getElementById("articles"); 38 | document.getElementById("about").addEventListener("click",function(e){ 39 | e.preventDefault(); 40 | changePage(0); 41 | }); 42 | document.getElementById("projects").addEventListener("click",function(e){ 43 | e.preventDefault(); 44 | changePage(1); 45 | }); 46 | articles.addEventListener("click",function(e){ 47 | pos++; 48 | if(pos==6) 49 | pos=0; 50 | changePage(pos); 51 | }); 52 | }); 53 | -------------------------------------------------------------------------------- /old-site/js/index.js: -------------------------------------------------------------------------------- 1 | var pos=0; 2 | var articles; 3 | function changePage(position) 4 | { 5 | var transfomer; 6 | articles=document.getElementById("articles"); 7 | switch(position) 8 | { 9 | case 0: 10 | transformer=""; 11 | break; 12 | case 1: 13 | transformer="rotateY(-90deg)"; 14 | break; 15 | case 2: 16 | transformer="rotateY(-90deg) rotateZ(90deg)"; 17 | break; 18 | case 3: 19 | transformer="rotateY(180deg) rotateZ(90deg)"; 20 | break; 21 | case 4: 22 | transformer="rotateY(90deg) rotateX(90deg)"; 23 | break; 24 | case 5: 25 | transformer="rotateX(90deg)"; 26 | break; 27 | } 28 | if(articles.style.transform!=undefined) 29 | articles.style.transform=transformer; 30 | else if(articles.style.webkitTransform!=undefined) 31 | articles.style.webkitTransform=transformer; 32 | else if(articles.style.mozTransform!=undefined) 33 | articles.style.mozTransform=transformer; 34 | } 35 | 36 | window.addEventListener("load",function(){ 37 | articles=document.getElementById("articles"); 38 | document.getElementById("about").addEventListener("click",function(e){ 39 | e.preventDefault(); 40 | changePage(0); 41 | }); 42 | document.getElementById("projects").addEventListener("click",function(e){ 43 | e.preventDefault(); 44 | changePage(1); 45 | }); 46 | articles.addEventListener("click",function(e){ 47 | pos++; 48 | if(pos==6) 49 | pos=0; 50 | changePage(pos); 51 | }); 52 | }); 53 | -------------------------------------------------------------------------------- /main.css: -------------------------------------------------------------------------------- 1 | @import url('https://fonts.googleapis.com/css?family=PT+Sans'); 2 | 3 | body{ 4 | font-family: 'PT Sans', sans-serif; 5 | margin: 0; 6 | padding: 0; 7 | background-color: rgb(193,195,193); 8 | } 9 | .title{ 10 | text-align: center; 11 | } 12 | .content{ 13 | display: flex; 14 | flex-wrap: wrap; 15 | } 16 | .text-container{ 17 | flex: 1; 18 | order: 1; 19 | } 20 | .text{ 21 | background-color: white; 22 | border-radius: 5px; 23 | margin-left: 15px; 24 | margin-right: 15px; 25 | } 26 | .top{ 27 | background-color: #bad4af; 28 | border-radius: 5px 5px 0px 0px; 29 | padding-left: 5px; 30 | } 31 | .end{ 32 | text-align: center; 33 | background-color: #afc3d4; 34 | border-radius: 0px 0px 5px 5px; 35 | padding-left: 5px; 36 | } 37 | .middle{ 38 | padding-left: 5px; 39 | } 40 | .projects{ 41 | display: flex; 42 | flex-wrap: wrap; 43 | } 44 | .projects > a { 45 | margin-left: 5px; 46 | margin-right: 5px; 47 | } 48 | .projects > a > img{ 49 | flex: 1; 50 | width: auto; 51 | height: 64px; 52 | } 53 | 54 | blockquote{ 55 | font-style: italic; 56 | } 57 | 58 | .canvas{ 59 | flex: 1; 60 | order: 2; 61 | } 62 | 63 | .adsense{ 64 | text-align: center; 65 | } 66 | 67 | @media all and (max-width: 640px){ 68 | .content{ 69 | flex-flow: column; 70 | } 71 | .canvas{ 72 | order: 0; 73 | } 74 | 75 | } -------------------------------------------------------------------------------- /tree.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | var ctx; 4 | var color; 5 | var colorList = [63,1,21,112,176,240,277,323]; 6 | 7 | function $(id){ 8 | return document.getElementById(id); 9 | } 10 | 11 | function rand(min,max){ 12 | return Math.random()*(max-min)+min; 13 | } 14 | 15 | function drawBranch(startX,startY,len,angle,branchWidth,hsl){ 16 | ctx.beginPath(); 17 | ctx.save(); 18 | 19 | ctx.strokeStyle = "hsl("+color+",100%,"+hsl+"%)"; 20 | ctx.lineWidth = branchWidth; 21 | ctx.translate(startX,startY); 22 | ctx.rotate(angle* Math.PI/180); 23 | ctx.moveTo(0,0); 24 | ctx.lineTo(0,-len); 25 | ctx.stroke(); 26 | 27 | if(len < 5){ 28 | ctx.restore(); 29 | return; 30 | } 31 | 32 | var factor = rand(0.6,0.9); 33 | var angle = rand(-30,0); 34 | drawBranch(0, -len, len*factor, angle,branchWidth*factor,hsl*1.2); 35 | factor = rand(0.6,0.9); 36 | angle = rand(0,30); 37 | drawBranch(0, -len, len*factor, angle,branchWidth*factor,hsl*1.2); 38 | 39 | ctx.restore(); 40 | } 41 | 42 | function main(){ 43 | var canvas = $("canvas"); 44 | canvas.width = window.innerWidth/2; 45 | canvas.height = window.innerHeight*3/4; 46 | ctx = canvas.getContext("2d"); 47 | var width = window.innerWidth; 48 | var height = window.innerHeight; 49 | color = colorList[Math.floor(rand(0,colorList.length))]; 50 | drawBranch(width/4,height*3/4,100,0,10,10); 51 | } 52 | 53 | window.addEventListener("load",main); -------------------------------------------------------------------------------- /search/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Buscar en Internet 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 |
14 |
15 | Buscar en Internet 16 |
17 |
18 |
19 |
20 |
21 | 31 | 32 |
33 |
34 |
35 | 36 | 37 | -------------------------------------------------------------------------------- /css/panel-css.css: -------------------------------------------------------------------------------- 1 | @font-face{ 2 | font-family: "Roboto Slab"; 3 | font-style: normal; 4 | font-weight: 100; 5 | src: local("Roboto Slab Thin"), url("RobotoSlab.woff") format("woff"); 6 | } 7 | body{ 8 | background-image: url("../city.svg"); 9 | background-repeat: repeat-y; 10 | background-size: 100% auto; 11 | } 12 | .panel{ 13 | background-color: white; 14 | color: black; 15 | box-shadow: 7px 7px 5px 0px rgba(50, 50, 50, 0.75); 16 | text-align: center; 17 | margin-left: 25%; 18 | margin-right: 25%; 19 | font-family: "Roboto Slab"; 20 | overflow: hidden; 21 | } 22 | .icon{ 23 | border-radius: 50%; 24 | height: 48px; 25 | width: 48px; 26 | } 27 | #avatar{ 28 | border-radius: 50%; 29 | height: 96px; 30 | width: 96px; 31 | } 32 | #leftList{ 33 | text-align: left; 34 | list-style-type: none; 35 | float: left; 36 | max-width: 45%; 37 | } 38 | #leftList .item{ 39 | border-width: 5px; 40 | border-color: grey; 41 | border-style: groove; 42 | right: 50%; 43 | } 44 | #rightList{ 45 | text-align: right; 46 | list-style-type: none; 47 | float: right; 48 | max-width: 45%; 49 | } 50 | #rightList .item{ 51 | border-width: 5px; 52 | border-color: grey; 53 | border-style: groove; 54 | left: 50%; 55 | } 56 | .item{ 57 | display: box; 58 | box-shadow: 7px 7px 5px 0px rgba(50, 50, 50, 0.75); 59 | /*background-color: green;*/ 60 | } 61 | .item img{ 62 | float: left; 63 | } 64 | a:link{ 65 | color: green; 66 | } 67 | .item:hover{ 68 | background-color: royalblue; 69 | opacity: 0.5; 70 | transition: background-color 1000ms linear; 71 | transition: opacity 1500ms linear; 72 | } 73 | h4{ 74 | font-weight: bold; 75 | font-style: italic; 76 | } 77 | 78 | @media (max-width: 600px){ 79 | .panel{ 80 | margin-left: 10%; 81 | margin-right: 10%; 82 | } 83 | } 84 | 85 | -------------------------------------------------------------------------------- /sierpinski/main.js: -------------------------------------------------------------------------------- 1 | const COLOR_LIST = ["red","green","yellow","pink","brown","purple","cyan","blue","orange"]; 2 | 3 | function punto(x,y){ 4 | var p = { 5 | x:x, 6 | y:y 7 | }; 8 | return p; 9 | } 10 | 11 | function puntoMedio(p,q){ 12 | var m = { 13 | x: Math.round((p.x+q.x)/2), 14 | y: Math.round((p.y+q.y)/2) 15 | }; 16 | return m; 17 | } 18 | 19 | function getRandomColor(){ 20 | return COLOR_LIST[Math.floor(COLOR_LIST.length * Math.random())]; 21 | } 22 | 23 | function dibujarPunto(ctx,p,size){ 24 | ctx.fillStyle = getRandomColor(); 25 | ctx.fillRect(p.x,p.y,size,size); 26 | } 27 | 28 | function $(id){ 29 | return document.getElementById(id); 30 | } 31 | 32 | function get(id){ 33 | return Math.round(document.getElementById(id).value); 34 | } 35 | 36 | function main(){ 37 | var canvas = document.getElementById("canvas"); 38 | var ctx = canvas.getContext("2d"); 39 | 40 | var interval; 41 | 42 | $("start").addEventListener("click",function(){ 43 | 44 | const size = get("size"); 45 | const vertex = [punto(get("a-x"),get("a-y")),punto(get("b-x"),get("b-y")),punto(get("c-x"),get("c-y"))]; 46 | 47 | let p = punto(get("s-x"),get("s-y")); 48 | 49 | dibujarPunto(ctx,p,size); 50 | 51 | interval = setInterval(function(){ 52 | var q = vertex[Math.floor(3*Math.random())]; 53 | p = puntoMedio(p,q); 54 | dibujarPunto(ctx,p,size); 55 | },get("speed")); 56 | }); 57 | 58 | $("stop").addEventListener("click",function(){ 59 | clearInterval(interval); 60 | }); 61 | 62 | $("reset").addEventListener("click",function(){ 63 | ctx.fillStyle = "white"; 64 | ctx.fillRect(0,0,600,600); 65 | }); 66 | } 67 | 68 | window.addEventListener("DOMContentLoaded",main); -------------------------------------------------------------------------------- /sierpinski/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Sierpinski 5 | 6 | 7 | 16 | 17 | 18 |
19 | 20 |
21 | 41 | 42 | -------------------------------------------------------------------------------- /html/contact.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Contact 5 | 6 | 7 | 33 | 34 | 35 |

Contact

36 | City 37 |
38 | You will find me trough the Internet: 39 | 55 | 58 |
59 | 60 | 61 | -------------------------------------------------------------------------------- /index.city.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Adrián Arroyo Calle - Personal website 5 | 6 | 7 | 8 | 70 | 71 | 72 | Adrianistan 73 | 74 | 75 |
76 |
77 | Welcome to Adrian Arroyo's website 78 |
79 | 80 | If everybody is thinking alike, then somebody isn't thinking 81 | 82 | 83 | Click on the screen 84 | 85 |
86 |
87 | 88 | 89 | 90 |
91 |
92 | 93 | 94 | 97 | 98 | 99 | -------------------------------------------------------------------------------- /index.old.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Adrián Arroyo Calle personal page 5 | 6 | 7 | 8 | 9 | 10 |

Adrián Arroyo Calle

11 |

"If everyone is thinking alike, then somebody is not thinking" - George S. Patton

12 |

"Si todos piensan igual, entonces alguien no está pensando" - George S. Patton

13 |
14 | 22 |
23 |
24 | 32 |
33 |
34 |

Introduction

35 | Adrian's Avatar 36 |

Hi, my name is Adrián

37 |

Hola, mi nombre es Adrián

38 |
39 |
40 |

My projects

41 |
    42 |
  • Azpazeta
  • 43 |
  • El Juego de las Galaxias
  • 44 |
  • Norzarea
  • 45 |
  • DivWork
  • 46 |
  • DivCity
  • 47 |
  • Bloco
  • 48 |
  • firefox-addons
  • 49 |
  • Tú eres el protagonista
  • 50 |
  • Divel Updater
  • 51 |
  • Templvs
  • 52 |
  • NextDivel
  • 53 |
  • El Pasillo del Infierno
  • 54 |
  • Monopoly
  • 55 |
  • DivHotel
  • 56 |
  • DivElectric
  • 57 |
  • DivWiki
  • 58 |
  • Multiverse City
  • 59 |
  • MVM
  • 60 |
  • Divel Apps
  • 61 |
  • CMake for Haiku
  • 62 |
  • Lumtumo
  • 63 |
  • La Maquinaria de Videojuegos
  • 64 |
  • GAJSE
  • 65 |
66 |
67 |
68 |

Biography

69 |
70 |
71 |

Pictures

72 |
73 |
Videos
74 |
75 |

Contact me

76 |
77 |
78 |
79 | 80 | 81 | 82 | -------------------------------------------------------------------------------- /html/donate.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Donate 5 | 6 | 7 | 26 | 27 | 28 |

Donate

29 | City 30 |
31 | You can give me some money if you want 32 |
33 | BTC Address: 1A2j8CwiFEhQ4Uycsjhr3gQPbJxFk1LRmM 34 |
35 |
36 | 37 |
38 |
39 | 40 |
41 |
42 |
43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 |
53 |
54 | 55 |
56 |

BitReserve

57 | BTC Card: 1HW4ZyaPteg6jfnYzhNhTCAba8hwRGDR1Q 58 | EUR Card: 1EGAmZjvQBWX1rbFss8sw1XLejUV5F59yh 59 | USD Card: 171duk1CKFRxoqnopX1m48aeNk35X85ibr 60 | CHF Card: 1DEBUVZtPv5TyjHmUTWeYWCGNci2U8fR6f 61 | JPY Card: 1FSEcqSrDUcTPAkr3yoe7xAa85djtrWDme 62 | INR Card: 1KPPJywa8ExZ4pfjuwMN3CcRymk3yggz4K 63 | MXN Card: 15GXh3kvDF9v3Twq4WQC76PNv9K96hSLFk 64 | XAU Card: 1NqHev1oYyqiTaNRpm6E3RDf1jPVKGJCXH 65 | XAG Card: 1C4b2r9NmSH5g8iPfrz77Qq9Gs1o65iPRP 66 | CNY Card: 16fhfGfhdL2E9BjuXXTAxHFbVfZLegBRzZ 67 | GBP Card: 17g3tmU4Ak23KKzqFN3Fe1EDMooiyGNWd1 68 | XPD Card: 1Eaq7banh1G195k3GuL4SHsHzYEfzT4Yjf 69 | XPT Card: 1KniWVe8txHaouedreHomYcqrMuQ11v3X7 70 |
71 |
72 | 73 | 74 | -------------------------------------------------------------------------------- /html/projects.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Projects 5 | 6 | 7 | 32 | 33 | 34 |

Projects

35 |
36 | 67 |
68 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /html/about.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | About me 5 | 6 | 7 | 8 | 34 | 35 | 36 |

About me

37 | City 38 |
39 |

Hi, my name is Adrián Arroyo Calle and this is my personal website

40 | 41 | 45 |
46 | 47 |
48 | 49 |
50 | 51 |
52 | 53 |
54 | 55 |
56 | 57 |
58 | 59 | 60 | 61 |
62 | follow us in feedly 63 |
64 | Licencia de Creative Commons
Adrián Arroyo Calle Website by Adrián Arroyo Calle is licensed under a Creative Commons Reconocimiento-CompartirIgual 4.0 Internacional License. 65 |
66 | 67 | 68 | 78 | 81 | 82 | 83 | 84 | 85 | 86 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Adrián Arroyo Calle 7 | 8 | 9 | 10 |

Adrián Arroyo Calle

11 |
12 |
13 |
14 |
Hi, my name is Adrián Arroyo Calle. I'm a software engineer from Valladolid, Spain
15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 |
25 | 26 |

Welcome to my personal site on the World Wide Web. I like programming and creating stuff. I also like orienteering, philosophy, science, playing games, watching films and travel.

27 |

I'm currently studying at Valladolid University and I volunteer in BEST Valladolid

28 |
If everybody thinks the same, then somebody isn't thinking
29 |

May I help you? I like to work in cybersecurity, blockchain, game development and websites. I'd like to work with Rust, C++, Elm, JavaScript, Python and C#.

30 |
31 | 34 |
35 | 36 |
37 |
38 | If you want to contact with me, send me an email:
adrian DOT arroyocalle (@) gmail DOT com
39 |
40 |
41 | PGP Public key 42 |
43 | 44 |
45 |
46 |
47 | 48 |
49 |
50 |
51 | 55 |
56 | 57 | 58 | 68 | 71 | 72 | 73 | -------------------------------------------------------------------------------- /css/main.css: -------------------------------------------------------------------------------- 1 | .spanish{ 2 | color: gray; 3 | } 4 | body{ 5 | background-color: green; 6 | margin: 0; 7 | padding: 0; 8 | text-align: center; 9 | 10 | } 11 | article{ 12 | text-align: center; 13 | margin-left: 40px; 14 | margin-right: 40px; 15 | } 16 | header{ 17 | height: 40px; 18 | background-color: blue; 19 | } 20 | footer{ 21 | height: 40px; 22 | background-color: white; 23 | margin-top: 95%; 24 | } 25 | ul{ 26 | list-style: none; 27 | } 28 | li{ 29 | float: left; 30 | background: black; 31 | text-align: center; 32 | border: 2px solid gray; 33 | color: white; 34 | } 35 | .li64{ 36 | height: 64px; 37 | width: 64px; 38 | } 39 | li:hover{ 40 | background: gray; 41 | } 42 | #cube div{ 43 | position: absolute; 44 | width: 120px; 45 | height: 120px; 46 | border: 1px solid #ccc; 47 | background: white; 48 | box-shadow: inset 0 0 20px rgba(0,0,0,0.2); 49 | text-align: center; 50 | line-height: 120px; 51 | font-size: 100px; 52 | } 53 | #cube .face1{ 54 | transform: translateZ(0px); 55 | } 56 | #cube .face2{ 57 | transform: rotateY(90deg) translateZ(0px); 58 | } 59 | #cube .face3{ 60 | transform: rotateY(90deg) rotateX(90deg) translateZ(0px); 61 | } 62 | #cube .face4{ 63 | transform: rotateY(180deg) rotateZ(90deg) translateZ(0px); 64 | } 65 | #cube .face5{ 66 | transform: rotateY(-90deg) rotateZ(90deg) translateZ(0px); 67 | } 68 | #cube .face6{ 69 | transform: rotateX(-90deg) translateZ(0px); 70 | } 71 | @keyframes spincube{ 72 | from, to { } 73 | 16% { transform: rotateY(-90deg); } 74 | 33% { transform: rotateY(-90deg) rotateZ(90deg); } 75 | 50% { transform: rotateY(180deg) rotateZ(90deg); } 76 | 66% { transform: rotateY(90deg) rotateX(90deg); } 77 | 83% { transform: rotateX(90deg); } 78 | } 79 | #cube{ 80 | animation-name: spincube; 81 | animation-play-state: running; 82 | animation-timing-function: ease-in-out; 83 | animation-iteration-count: infinite; 84 | animation-duration: 12s; 85 | transform-style: preserve-3d; 86 | transform-origin: 60px 60px 0; 87 | } 88 | #articles { 89 | -webkit-transform-style: preserve-3d; 90 | transform-style: preserve-3d; 91 | -webkit-transform-origin: 250px 250px 0; 92 | transform-origin: 250px 250px 0; 93 | -webkit-transition: .5s linear; 94 | -ms-transition: .5s linear; 95 | transition: .5s linear; 96 | } 97 | #articles div{ 98 | overflow: visible; 99 | position: absolute; 100 | width: 500px; 101 | height: 500px; 102 | border: 1px solid #ccc; 103 | background: white; 104 | box-shadow: inset 0 0 20px rgba(0,0,0,0.2); 105 | text-align: center; 106 | line-height: 120px; 107 | font-size: 18px; 108 | -webkit-perspective: 900px; 109 | perspective: 900px; 110 | } 111 | #articles .face1{ 112 | -webkit-transform: translateZ(250px); 113 | -moz-transform: translateZ(250px); 114 | transform: translateZ(250px); 115 | position: absolute; 116 | } 117 | #articles .face2{ 118 | -webkit-transform: rotateY(90deg) translateZ(250px); 119 | -moz-transform: rotateY(90deg) translateZ(250px); 120 | transform: rotateY(90deg) translateZ(250px); 121 | position: absolute; 122 | 123 | } 124 | #articles .face3{ 125 | -webkit-transform: rotateY(90deg) rotateX(90deg) translateZ(250px); 126 | -moz-transform: rotateY(90deg) rotateX(90deg) translateZ(250px); 127 | transform: rotateY(90deg) rotateX(90deg) translateZ(250px); 128 | position: absolute; 129 | } 130 | #articles .face4{ 131 | -webkit-transform: rotateY(180deg) rotateX(90deg) translateZ(250px); 132 | -moz-transform: rotateY(180deg) rotateX(90deg) translateZ(250px); 133 | transform: rotateY(180deg) rotateZ(90deg) translateZ(250px); 134 | position: absolute; 135 | } 136 | #articles .face5{ 137 | -webkit-transform: rotateY(-90deg) rotateX(90deg) translateZ(250px); 138 | -moz-transform: rotateY(-90deg) rotateX(90deg) translateZ(250px); 139 | transform: rotateY(-90deg) rotateZ(90deg) translateZ(250px); 140 | position: absolute; 141 | } 142 | #articles .face6{ 143 | -webkit-transform: rotateX(-90deg) translateZ(250px); 144 | -moz-transform: rotateX(-90deg) translateZ(250px); 145 | transform: rotateX(-90deg) translateZ(250px); 146 | position: absolute; 147 | } 148 | -------------------------------------------------------------------------------- /old-site/css/main.css: -------------------------------------------------------------------------------- 1 | .spanish{ 2 | color: gray; 3 | } 4 | body{ 5 | background-color: green; 6 | margin: 0; 7 | padding: 0; 8 | text-align: center; 9 | 10 | } 11 | article{ 12 | text-align: center; 13 | margin-left: 40px; 14 | margin-right: 40px; 15 | } 16 | header{ 17 | height: 40px; 18 | background-color: blue; 19 | } 20 | footer{ 21 | height: 40px; 22 | background-color: white; 23 | margin-top: 95%; 24 | } 25 | ul{ 26 | list-style: none; 27 | } 28 | li{ 29 | float: left; 30 | background: black; 31 | text-align: center; 32 | border: 2px solid gray; 33 | color: white; 34 | } 35 | .li64{ 36 | height: 64px; 37 | width: 64px; 38 | } 39 | li:hover{ 40 | background: gray; 41 | } 42 | #cube div{ 43 | position: absolute; 44 | width: 120px; 45 | height: 120px; 46 | border: 1px solid #ccc; 47 | background: white; 48 | box-shadow: inset 0 0 20px rgba(0,0,0,0.2); 49 | text-align: center; 50 | line-height: 120px; 51 | font-size: 100px; 52 | } 53 | #cube .face1{ 54 | transform: translateZ(0px); 55 | } 56 | #cube .face2{ 57 | transform: rotateY(90deg) translateZ(0px); 58 | } 59 | #cube .face3{ 60 | transform: rotateY(90deg) rotateX(90deg) translateZ(0px); 61 | } 62 | #cube .face4{ 63 | transform: rotateY(180deg) rotateZ(90deg) translateZ(0px); 64 | } 65 | #cube .face5{ 66 | transform: rotateY(-90deg) rotateZ(90deg) translateZ(0px); 67 | } 68 | #cube .face6{ 69 | transform: rotateX(-90deg) translateZ(0px); 70 | } 71 | @keyframes spincube{ 72 | from, to { } 73 | 16% { transform: rotateY(-90deg); } 74 | 33% { transform: rotateY(-90deg) rotateZ(90deg); } 75 | 50% { transform: rotateY(180deg) rotateZ(90deg); } 76 | 66% { transform: rotateY(90deg) rotateX(90deg); } 77 | 83% { transform: rotateX(90deg); } 78 | } 79 | #cube{ 80 | animation-name: spincube; 81 | animation-play-state: running; 82 | animation-timing-function: ease-in-out; 83 | animation-iteration-count: infinite; 84 | animation-duration: 12s; 85 | transform-style: preserve-3d; 86 | transform-origin: 60px 60px 0; 87 | } 88 | #articles { 89 | -webkit-transform-style: preserve-3d; 90 | transform-style: preserve-3d; 91 | -webkit-transform-origin: 250px 250px 0; 92 | transform-origin: 250px 250px 0; 93 | -webkit-transition: .5s linear; 94 | -ms-transition: .5s linear; 95 | transition: .5s linear; 96 | } 97 | #articles div{ 98 | overflow: visible; 99 | position: absolute; 100 | width: 500px; 101 | height: 500px; 102 | border: 1px solid #ccc; 103 | background: white; 104 | box-shadow: inset 0 0 20px rgba(0,0,0,0.2); 105 | text-align: center; 106 | line-height: 120px; 107 | font-size: 18px; 108 | -webkit-perspective: 900px; 109 | perspective: 900px; 110 | } 111 | #articles .face1{ 112 | -webkit-transform: translateZ(250px); 113 | -moz-transform: translateZ(250px); 114 | transform: translateZ(250px); 115 | position: absolute; 116 | } 117 | #articles .face2{ 118 | -webkit-transform: rotateY(90deg) translateZ(250px); 119 | -moz-transform: rotateY(90deg) translateZ(250px); 120 | transform: rotateY(90deg) translateZ(250px); 121 | position: absolute; 122 | 123 | } 124 | #articles .face3{ 125 | -webkit-transform: rotateY(90deg) rotateX(90deg) translateZ(250px); 126 | -moz-transform: rotateY(90deg) rotateX(90deg) translateZ(250px); 127 | transform: rotateY(90deg) rotateX(90deg) translateZ(250px); 128 | position: absolute; 129 | } 130 | #articles .face4{ 131 | -webkit-transform: rotateY(180deg) rotateX(90deg) translateZ(250px); 132 | -moz-transform: rotateY(180deg) rotateX(90deg) translateZ(250px); 133 | transform: rotateY(180deg) rotateZ(90deg) translateZ(250px); 134 | position: absolute; 135 | } 136 | #articles .face5{ 137 | -webkit-transform: rotateY(-90deg) rotateX(90deg) translateZ(250px); 138 | -moz-transform: rotateY(-90deg) rotateX(90deg) translateZ(250px); 139 | transform: rotateY(-90deg) rotateZ(90deg) translateZ(250px); 140 | position: absolute; 141 | } 142 | #articles .face6{ 143 | -webkit-transform: rotateX(-90deg) translateZ(250px); 144 | -moz-transform: rotateX(-90deg) translateZ(250px); 145 | transform: rotateX(-90deg) translateZ(250px); 146 | position: absolute; 147 | } 148 | -------------------------------------------------------------------------------- /js/adrianistan.js: -------------------------------------------------------------------------------- 1 | /* 2 | City JavaScript for Adrianistan 3 | */ 4 | var zones=new Array; 5 | var box=false; 6 | function Zone(title,x,y,width,height,text){ 7 | this.x=x; 8 | this.y=y; 9 | this.width=width; 10 | this.height=height; 11 | this.text=text; 12 | this.title=title; 13 | this.zoomIt=function(){ 14 | zoom.to({ 15 | x: this.x, 16 | y: this.y, 17 | width: this.width, 18 | height: this.height 19 | }); 20 | } 21 | return this; 22 | } 23 | function Text(url) 24 | { 25 | this.url=url; 26 | return this; 27 | } 28 | var pages=[{ 29 | name: "Home", 30 | url: "html/home.html" 31 | }, 32 | { 33 | name: "Advertising", 34 | url: "html/adpv.html" 35 | }, 36 | { 37 | name: "Projects", 38 | url: "html/projects.html" 39 | }, 40 | { 41 | name: "Biography", 42 | url: "html/biography.html" 43 | }, 44 | { 45 | name: "Videos", 46 | url: "html/videos.html" 47 | }, 48 | { 49 | name: "Pictures", 50 | url: "html/pictures.html" 51 | }, 52 | { 53 | name: "Interests", 54 | url: "html/interests.html" 55 | }, 56 | { 57 | name: "Events", 58 | url: "html/events.html" 59 | }, 60 | { 61 | name: "Contact", 62 | url: "html/contact.html" 63 | }]; 64 | var show=false; 65 | var pageCount=0; 66 | function Refresh() 67 | { 68 | var frame=document.getElementById("iframe-content"); 69 | var prev=document.getElementById("prev"); 70 | var next=document.getElementById("next"); 71 | frame.src=pages[pageCount].url; 72 | var prevPage=pageCount-1; 73 | var nextPage=pageCount+1; 74 | if(prevPage<0) 75 | prevPage=pages.length-1; 76 | prev.textContent=pages[prevPage].name; 77 | if(nextPage>pages.length-1) 78 | nextPage=0; 79 | next.textContent=pages[nextPage].name; 80 | } 81 | window.addEventListener("load",function(){ 82 | var msgbox=document.getElementById("message-box"); 83 | var frame=document.getElementById("iframe-content"); 84 | var prev=document.getElementById("prev"); 85 | var next=document.getElementById("next"); 86 | prev.addEventListener("click",function(evt){ 87 | evt.stopPropagation(); 88 | pageCount--; 89 | if(pageCount<0) 90 | pageCount=pages.length-1; 91 | Refresh(); 92 | }); 93 | next.addEventListener("click",function(evt){ 94 | evt.stopPropagation(); 95 | pageCount++; 96 | if(pageCount>pages.length-1) 97 | pageCount=0; 98 | Refresh(); 99 | }); 100 | document.addEventListener("click",function(evt){ 101 | if(show) 102 | { 103 | show=false; 104 | msgbox.style.visibility="hidden"; 105 | }else{ 106 | show=true; 107 | msgbox.style.height=window.innerHeight*3/4+"px"; 108 | msgbox.style.visibility="visible"; 109 | frame.style.width=window.innerWidth/2+"px"; 110 | frame.style.height=window.innerHeight*3/4+"px"; 111 | 112 | Refresh(); 113 | } 114 | }); 115 | //var biography=new Text("html/biography.html"); 116 | //zones.push(new Zone("Biography",100,100,200,200,biography)); 117 | 118 | 119 | /*document.addEventListener("click",function(evt){ 120 | var x=evt.clientX; //or screenX? 121 | var y=evt.clientY; 122 | zones.forEach(function(zone){ 123 | if(xzone.x-100) 124 | if(yzone.y-100) 125 | { 126 | zone.zoomIt(); 127 | var msgbox=document.getElementById("message-box"); 128 | var iframe=document.getElementById("iframe-content"); 129 | if(box) 130 | { 131 | box=false; 132 | msgbox.style.visibility="hidden"; 133 | }else 134 | { 135 | box=true; 136 | iframe.src=zone.text.url; 137 | msgbox.style.visibility="visible"; 138 | msgbox.style.bottom=zone.y-50+"px"; 139 | msgbox.style.left=zone.x+50+"px"; 140 | msgbox.style.width=zone.width/2+"px"; 141 | msgbox.style.height=zone.height/2+"px"; 142 | iframe.style.width=zone.width/2+"px"; 143 | iframe.style.height=zone.height/2+"px"; 144 | } 145 | } 146 | }); 147 | });*/ 148 | /*document.addEventListener("mouseover",function(evt){ 149 | var x=evt.clientX; //or screenX? 150 | var y=evt.clientY; 151 | console.log("Mouse: "+x+"-"+y); 152 | zones.forEach(function(zone){ 153 | if(xzone.x-100) 154 | if(yzone.y-100) 155 | { 156 | zone.zoomIt(); 157 | } 158 | }); 159 | 160 | }); 161 | 162 | document.addEventListener("mouseout",function(evt){ 163 | var x=evt.clientX; //or screenX? 164 | var y=evt.clientY; 165 | console.log("Mouse: "+x+"-"+y); 166 | zones.forEach(function(zone){ 167 | if(xzone.x-100) 168 | if(yzone.y-100) 169 | { 170 | zone.zoomIt(); 171 | } 172 | }); 173 | });*/ 174 | }); 175 | function moveToZone(index) 176 | { 177 | zoom.to({ 178 | x: zones[index].x, 179 | y: zones[index].y, 180 | width: zones[index].width, 181 | height: zones[index].height 182 | }); 183 | //DISPLAY TEXT 184 | } 185 | -------------------------------------------------------------------------------- /buy-software/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Buy Adrián Arroyo's software & get support 5 | 6 | 7 | 45 | 46 | 47 |

Get support and advice

48 |

Get personal and professional support from Adrián Arroyo Calle. Do it right.

49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 |
ServicePrice
One time software installation or software upgradeFREE
One time hardware installation or hardware upgradeMin 5 EUR
Flat rate - Software supportMin 2 EUR/Month
Flat rate - Hardware supportMin 10 EUR/Month
Technical advice - Technical choiceFREE
Technical advice - HOWTOMin 2 EUR
Custom developmentSee prices below
83 |

Custom development prices

84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 |
ServicePrice
Modify existing C++ software from Adrián ArroyoMin 10 EUR
Modify existing JavaScript software from Adrián ArroyoMin 7 EUR
New C++ app Linux-onlyMin 50 EUR
New C++ app Windows/LinuxMin 70 EUR
New JavaScript/TypeScript server appMin 30 EUR
New JavaScript/TypeScript frontend appMin 25 EUR (no CSS)
Firefox add-on OR Firefox OS appMin 10 EUR
New Haiku-only appMin 10 EUR
New Rust CLI appMin 20 EUR
126 | All prices can be negotiated 127 |
128 |

Buy Adrián Arroyo's software

129 |

Are you interested in develop/fork Adrián Arroyo's software without any license restriction? You can buy software directly to Adrián Arroyo an avoid license restrictions

130 |

Prices are calculated as see in the table

131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 |
FeaturePrice
Lines of code10 EUR per 1000
Custom data resources (images, audio, maps)+5 EUR each resource unless Creative Commons
Linux packaging+5 EUR
Windows packaging+2 EUR
Cross-platform Windows/Linux+15 EUR
Good brandingNegotiated
Website (optional)+15 EUR
165 |
166 | 176 | 179 | 180 | 181 |
182 | 183 | 184 | -------------------------------------------------------------------------------- /literatura-adrianistani/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Literatura Adrianistaní 5 | 6 | 7 | 8 | 9 | 43 | 44 | 45 |

Literatura Adrianistaní

46 | 47 | 48 | 49 | Portada de Literatura Adrianistaní 50 | 51 |

Descripción

52 |

53 | En este pequeño libro están escritos los mejores relatos, compuestos de la mejor creatividad, y en ellos, hacemos lo posible por transportaros a la más inimaginable realidad para que al menos por un ratito os hagamos sentir irreales, y a la vez igual de dichosos que nosotros nos sentimos al presentar esta colección. Disfrutadlo. 54 |

55 |

Ficha técnica

56 |

57 | Autores: y Raúl Izquierdo Buznego
58 | Fecha de publicación:
59 | Precio: 3 € 60 |

61 |

¿Dónde comprar?

62 | 74 |

Donativos

75 |
76 | 77 | 78 | 79 | 80 |
81 |
82 | 83 | 84 | 89 | 90 | 100 | 103 | 104 | 105 |
106 | 107 | 108 | -------------------------------------------------------------------------------- /img/azpazeta.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 18 | 20 | 42 | 44 | 45 | 47 | image/svg+xml 48 | 50 | 51 | 52 | 53 | 54 | 58 | 65 | 83 | 101 | 119 | 137 | 138 | 139 | -------------------------------------------------------------------------------- /old-site/img/azpazeta.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 18 | 20 | 42 | 44 | 45 | 47 | image/svg+xml 48 | 50 | 51 | 52 | 53 | 54 | 58 | 65 | 83 | 101 | 119 | 137 | 138 | 139 | -------------------------------------------------------------------------------- /cv/resume.tex: -------------------------------------------------------------------------------- 1 | %!TEX TS-program = xelatex 2 | %!TEX encoding = UTF-8 Unicode 3 | % Awesome CV LaTeX Template 4 | % 5 | % This template has been downloaded from: 6 | % https://github.com/posquit0/Awesome-CV 7 | % 8 | % Author: 9 | % Claud D. Park 10 | % http://www.posquit0.com 11 | % 12 | % Template license: 13 | % CC BY-SA 4.0 (https://creativecommons.org/licenses/by-sa/4.0/) 14 | % 15 | 16 | 17 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 18 | % Configuration 19 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 20 | %%% Themes: Awesome-CV 21 | \documentclass[]{awesome-cv} 22 | \usepackage{textcomp} 23 | \usepackage{graphicx} 24 | %%% Override a directory location for fonts(default: 'fonts/') 25 | \fontdir[fonts/] 26 | 27 | %%% Configure a directory location for sections 28 | \newcommand*{\sectiondir}{resume/} 29 | 30 | %%% Override color 31 | % Awesome Colors: awesome-emerald, awesome-skyblue, awesome-red, awesome-pink, awesome-orange 32 | % awesome-nephritis, awesome-concrete, awesome-darknight 33 | %% Color for highlight 34 | % Define your custom color if you don't like awesome colors 35 | \colorlet{awesome}{awesome-red} 36 | %\definecolor{awesome}{HTML}{CA63A8} 37 | %% Colors for text 38 | %\definecolor{darktext}{HTML}{414141} 39 | %\definecolor{text}{HTML}{414141} 40 | %\definecolor{graytext}{HTML}{414141} 41 | %\definecolor{lighttext}{HTML}{414141} 42 | 43 | %%% Override a separator for social informations in header(default: ' | ') 44 | %\headersocialsep[\quad\textbar\quad] 45 | \begin{document} 46 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 47 | % Profile 48 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 49 | \begin{minipage}[b]{0.66666\textwidth} 50 | \begin{center} 51 | \headerfirstnamestyle{Adrián} \headerlastnamestyle{Arroyo Calle} \\ 52 | \vspace{2mm} 53 | {\faEnvelope\ adrian.arroyocalle@gmail.com} | {\faMobile\ +34 602 133 602} \newline {\faMapMarker\ San Fernando 5, 4º C, 47010 Valladolid, Spain} \newline {\faLink\ \url{http://adrianistan.eu}} 54 | \end{center} 55 | \end{minipage} 56 | \begin{minipage}[b]{0.33333\textwidth} 57 | \includegraphics[width=0.8\textwidth]{adrian} 58 | \end{minipage} 59 | 60 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 61 | % Education 62 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 63 | \cvsection{Education} 64 | \begin{cventries} 65 | \cventry 66 | {BS in Computer Science} 67 | {Valladolid University} 68 | {Valladolid, Spain} 69 | {Unfinished} 70 | {} 71 | \end{cventries} 72 | 73 | \vspace{-2mm} 74 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 75 | % Experience 76 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 77 | \cvsection{Experience} 78 | \begin{cventries} 79 | \cventry 80 | {IT Coordinator} 81 | {BEST Valladolid} 82 | {Valladolid, Spain} 83 | {October 2017 – Present} 84 | {\begin{cvitems} 85 | \item {Coordinate the IT working group} 86 | \end{cvitems}} 87 | \cventry 88 | {Archaeologist voluntary} 89 | {Diputación Provincial de Soria} 90 | {Garray, Spain} 91 | {August 2017} 92 | {\begin{cvitems} 93 | \item {Work as a volunteer in the arqueological site of Numancia} 94 | \end{cvitems}} 95 | \end{cventries} 96 | \cvsection{Skills} 97 | \begin{cventries} 98 | \cventry 99 | {} 100 | {\def\arraystretch{1.15}{\begin{tabular}{ l l } 101 | Programming languages: & {\skill{ Rust, C, C++, Python, C\#, Java, JavaScript, TypeScript, Elm}} \\ 102 | Languages: & {\skill{ Spanish (native), English ( FIRST B2)}} \\ 103 | Software: & {\skill{GNU/Linux, Windows, Haiku, \LaTeX ,MySQL, MongoDB, Microsoft Office, Git, Inkscape}} \\ 104 | \end{tabular}}} 105 | {} 106 | {} 107 | {} 108 | \end{cventries} 109 | 110 | \vspace{-7mm} 111 | \cvsection{Projects} 112 | \begin{cventries} 113 | \cventry 114 | {A blog mainly about programming in Spanish} 115 | {Blog Adrianistán} 116 | {WordPress,Rust,JavaScript,Python} 117 | {http://blog.adrianistan.eu} 118 | {} 119 | \cventry 120 | {A puzzle game for web and mobile phones} 121 | {Anrokku} 122 | {TypeScript, Apache Cordova, Phaser} 123 | {} 124 | {https://play.google.com/store/apps/details?id=eu.adrianistan.anrokku} 125 | \cventry 126 | {A forum to talk about game development} 127 | {Gamedev Hispano} 128 | {Node.js, MongoDB, NodeBB} 129 | {http://gamedevhispano.com} 130 | {} 131 | \cventry 132 | {A web to learn about Blockchain} 133 | {Aprende Blockchain} 134 | {Angular 2, TypeScript} 135 | {http://blockchain.adrianistan.eu} 136 | {} 137 | \cventry 138 | {Useful addons for Firefox and Thunderbird} 139 | {firefox-addons} 140 | {JavaScript} 141 | {http://github.com/aarroyoc/firefox-addons} 142 | {} 143 | \cventry 144 | {An opensource implementation of Free Cell solitaire for Haiku OS} 145 | {SuperFreeCell} 146 | {C++} 147 | {http://github.com/aarroyoc/SuperFreeCell} 148 | {} 149 | \cventry 150 | {A 3D voxel editor} 151 | {Kovel} 152 | {C++, wxWidgets, OpenGL} 153 | {http://adrianistan.eu/kovel} 154 | {} 155 | 156 | \vspace{-5mm} 157 | \end{cventries} 158 | \cvsection{Honors \& Awards} 159 | \begin{cvhonors} 160 | \cvhonor 161 | {1st place at VallaHackaton 2017} 162 | {Created a game in two days about the theme \textquotedbl{}break\textquotedbl{}} 163 | {Valladolid, Spain} 164 | {May 2017} 165 | \cvhonor 166 | {Winner of \textquotedbl{}Las Matemáticas en el Planeta Tierra\textquotedbl{}} 167 | {Created a three dimensional raytracer to show how computer generated movies are} 168 | {Valladolid, Spain} 169 | {April 2016} 170 | \cvhonor 171 | {Finalist of Google Code-In contest} 172 | {Helped Haiku with apps and ports} 173 | {Mountain View, California} 174 | {February 2016} 175 | \end{cvhonors} 176 | \ 177 | \end{document} -------------------------------------------------------------------------------- /js/cookiechoices.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2014 Google Inc. All rights reserved. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | (function(window) { 18 | 19 | if (!!window.cookieChoices) { 20 | return window.cookieChoices; 21 | } 22 | 23 | var document = window.document; 24 | // IE8 does not support textContent, so we should fallback to innerText. 25 | var supportsTextContent = 'textContent' in document.body; 26 | 27 | var cookieChoices = (function() { 28 | 29 | var cookieName = 'displayCookieConsent'; 30 | var cookieConsentId = 'cookieChoiceInfo'; 31 | var dismissLinkId = 'cookieChoiceDismiss'; 32 | 33 | function _createHeaderElement(cookieText, dismissText, linkText, linkHref) { 34 | var butterBarStyles = 'position:fixed;width:100%;background-color:#eee;' + 35 | 'margin:0; left:0; top:0;padding:4px;z-index:1000;text-align:center;'; 36 | 37 | var cookieConsentElement = document.createElement('div'); 38 | cookieConsentElement.id = cookieConsentId; 39 | cookieConsentElement.style.cssText = butterBarStyles; 40 | cookieConsentElement.appendChild(_createConsentText(cookieText)); 41 | 42 | if (!!linkText && !!linkHref) { 43 | cookieConsentElement.appendChild(_createInformationLink(linkText, linkHref)); 44 | } 45 | cookieConsentElement.appendChild(_createDismissLink(dismissText)); 46 | return cookieConsentElement; 47 | } 48 | 49 | function _createDialogElement(cookieText, dismissText, linkText, linkHref) { 50 | var glassStyle = 'position:fixed;width:100%;height:100%;z-index:999;' + 51 | 'top:0;left:0;opacity:0.5;filter:alpha(opacity=50);' + 52 | 'background-color:#ccc;'; 53 | var dialogStyle = 'z-index:1000;position:fixed;left:50%;top:50%'; 54 | var contentStyle = 'position:relative;left:-50%;margin-top:-25%;' + 55 | 'background-color:#fff;padding:20px;box-shadow:4px 4px 25px #888;'; 56 | 57 | var cookieConsentElement = document.createElement('div'); 58 | cookieConsentElement.id = cookieConsentId; 59 | 60 | var glassPanel = document.createElement('div'); 61 | glassPanel.style.cssText = glassStyle; 62 | 63 | var content = document.createElement('div'); 64 | content.style.cssText = contentStyle; 65 | 66 | var dialog = document.createElement('div'); 67 | dialog.style.cssText = dialogStyle; 68 | 69 | var dismissLink = _createDismissLink(dismissText); 70 | dismissLink.style.display = 'block'; 71 | dismissLink.style.textAlign = 'right'; 72 | dismissLink.style.marginTop = '8px'; 73 | 74 | content.appendChild(_createConsentText(cookieText)); 75 | if (!!linkText && !!linkHref) { 76 | content.appendChild(_createInformationLink(linkText, linkHref)); 77 | } 78 | content.appendChild(dismissLink); 79 | dialog.appendChild(content); 80 | cookieConsentElement.appendChild(glassPanel); 81 | cookieConsentElement.appendChild(dialog); 82 | return cookieConsentElement; 83 | } 84 | 85 | function _setElementText(element, text) { 86 | if (supportsTextContent) { 87 | element.textContent = text; 88 | } else { 89 | element.innerText = text; 90 | } 91 | } 92 | 93 | function _createConsentText(cookieText) { 94 | var consentText = document.createElement('span'); 95 | _setElementText(consentText, cookieText); 96 | return consentText; 97 | } 98 | 99 | function _createDismissLink(dismissText) { 100 | var dismissLink = document.createElement('a'); 101 | _setElementText(dismissLink, dismissText); 102 | dismissLink.id = dismissLinkId; 103 | dismissLink.href = '#'; 104 | dismissLink.style.marginLeft = '24px'; 105 | return dismissLink; 106 | } 107 | 108 | function _createInformationLink(linkText, linkHref) { 109 | var infoLink = document.createElement('a'); 110 | _setElementText(infoLink, linkText); 111 | infoLink.href = linkHref; 112 | infoLink.target = '_blank'; 113 | infoLink.style.marginLeft = '8px'; 114 | return infoLink; 115 | } 116 | 117 | function _dismissLinkClick() { 118 | //EXECUTE COOKIES 119 | //EXECUTE COOKIES 120 | console.log("Click, installing cookies"); 121 | var scripts=document.getElementsByClassName("cookie"); 122 | for(var i=0;i window.innerHeight - rangeY ) { 138 | window.scroll( scrollOffset.x, scrollOffset.y + ( 1 - ( window.innerHeight - mouseY ) / rangeY ) * ( 14 / level ) ); 139 | } 140 | 141 | // Left 142 | if( mouseX < rangeX ) { 143 | window.scroll( scrollOffset.x - ( 1 - ( mouseX / rangeX ) ) * ( 14 / level ), scrollOffset.y ); 144 | } 145 | // Right 146 | else if( mouseX > window.innerWidth - rangeX ) { 147 | window.scroll( scrollOffset.x + ( 1 - ( window.innerWidth - mouseX ) / rangeX ) * ( 14 / level ), scrollOffset.y ); 148 | } 149 | } 150 | 151 | function getScrollOffset() { 152 | return { 153 | x: window.scrollX !== undefined ? window.scrollX : window.pageXOffset, 154 | y: window.scrollY !== undefined ? window.scrollY : window.pageYOffset 155 | } 156 | } 157 | 158 | return { 159 | /** 160 | * Zooms in on either a rectangle or HTML element. 161 | * 162 | * @param {Object} options 163 | * - element: HTML element to zoom in on 164 | * OR 165 | * - x/y: coordinates in non-transformed space to zoom in on 166 | * - width/height: the portion of the screen to zoom in on 167 | * - scale: can be used instead of width/height to explicitly set scale 168 | */ 169 | to: function( options ) { 170 | 171 | // Due to an implementation limitation we can't zoom in 172 | // to another element without zooming out first 173 | if( level !== 1 ) { 174 | zoom.out(); 175 | } 176 | else { 177 | options.x = options.x || 0; 178 | options.y = options.y || 0; 179 | 180 | // If an element is set, that takes precedence 181 | if( !!options.element ) { 182 | // Space around the zoomed in element to leave on screen 183 | var padding = 20; 184 | var bounds = options.element.getBoundingClientRect(); 185 | 186 | options.x = bounds.left - padding; 187 | options.y = bounds.top - padding; 188 | options.width = bounds.width + ( padding * 2 ); 189 | options.height = bounds.height + ( padding * 2 ); 190 | } 191 | 192 | // If width/height values are set, calculate scale from those values 193 | if( options.width !== undefined && options.height !== undefined ) { 194 | options.scale = Math.max( Math.min( window.innerWidth / options.width, window.innerHeight / options.height ), 1 ); 195 | } 196 | 197 | if( options.scale > 1 ) { 198 | options.x *= options.scale; 199 | options.y *= options.scale; 200 | 201 | magnify( options, options.scale ); 202 | 203 | if( options.pan !== false ) { 204 | 205 | // Wait with engaging panning as it may conflict with the 206 | // zoom transition 207 | panEngageTimeout = setTimeout( function() { 208 | panUpdateInterval = setInterval( pan, 1000 / 60 ); 209 | }, 800 ); 210 | 211 | } 212 | } 213 | } 214 | }, 215 | 216 | /** 217 | * Resets the document zoom state to its default. 218 | */ 219 | out: function() { 220 | clearTimeout( panEngageTimeout ); 221 | clearInterval( panUpdateInterval ); 222 | 223 | magnify( { x: 0, y: 0 }, 1 ); 224 | 225 | level = 1; 226 | }, 227 | 228 | // Alias 229 | magnify: function( options ) { this.to( options ) }, 230 | reset: function() { this.out() }, 231 | 232 | zoomLevel: function() { 233 | return level; 234 | } 235 | } 236 | 237 | })(); 238 | -------------------------------------------------------------------------------- /literatura-adrianistani/picturefill.min.js: -------------------------------------------------------------------------------- 1 | /*! Picturefill - v2.3.1 - 2015-04-09 2 | * http://scottjehl.github.io/picturefill 3 | * Copyright (c) 2015 https://github.com/scottjehl/picturefill/blob/master/Authors.txt; Licensed MIT */ 4 | window.matchMedia||(window.matchMedia=function(){"use strict";var a=window.styleMedia||window.media;if(!a){var b=document.createElement("style"),c=document.getElementsByTagName("script")[0],d=null;b.type="text/css",b.id="matchmediajs-test",c.parentNode.insertBefore(b,c),d="getComputedStyle"in window&&window.getComputedStyle(b,null)||b.currentStyle,a={matchMedium:function(a){var c="@media "+a+"{ #matchmediajs-test { width: 1px; } }";return b.styleSheet?b.styleSheet.cssText=c:b.textContent=c,"1px"===d.width}}}return function(b){return{matches:a.matchMedium(b||"all"),media:b||"all"}}}()),function(a,b,c){"use strict";function d(b){"object"==typeof module&&"object"==typeof module.exports?module.exports=b:"function"==typeof define&&define.amd&&define("picturefill",function(){return b}),"object"==typeof a&&(a.picturefill=b)}function e(a){var b,c,d,e,f,i=a||{};b=i.elements||g.getAllElements();for(var j=0,k=b.length;k>j;j++)if(c=b[j],d=c.parentNode,e=void 0,f=void 0,"IMG"===c.nodeName.toUpperCase()&&(c[g.ns]||(c[g.ns]={}),i.reevaluate||!c[g.ns].evaluated)){if(d&&"PICTURE"===d.nodeName.toUpperCase()){if(g.removeVideoShim(d),e=g.getMatch(c,d),e===!1)continue}else e=void 0;(d&&"PICTURE"===d.nodeName.toUpperCase()||!g.sizesSupported&&c.srcset&&h.test(c.srcset))&&g.dodgeSrcset(c),e?(f=g.processSourceSet(e),g.applyBestCandidate(f,c)):(f=g.processSourceSet(c),(void 0===c.srcset||c[g.ns].srcset)&&g.applyBestCandidate(f,c)),c[g.ns].evaluated=!0}}function f(){function c(){clearTimeout(d),d=setTimeout(h,60)}g.initTypeDetects(),e();var d,f=setInterval(function(){return e(),/^loaded|^i|^c/.test(b.readyState)?void clearInterval(f):void 0},250),h=function(){e({reevaluate:!0})};a.addEventListener?a.addEventListener("resize",c,!1):a.attachEvent&&a.attachEvent("onresize",c)}if(a.HTMLPictureElement)return void d(function(){});b.createElement("picture");var g=a.picturefill||{},h=/\s+\+?\d+(e\d+)?w/;g.ns="picturefill",function(){g.srcsetSupported="srcset"in c,g.sizesSupported="sizes"in c,g.curSrcSupported="currentSrc"in c}(),g.trim=function(a){return a.trim?a.trim():a.replace(/^\s+|\s+$/g,"")},g.makeUrl=function(){var a=b.createElement("a");return function(b){return a.href=b,a.href}}(),g.restrictsMixedContent=function(){return"https:"===a.location.protocol},g.matchesMedia=function(b){return a.matchMedia&&a.matchMedia(b).matches},g.getDpr=function(){return a.devicePixelRatio||1},g.getWidthFromLength=function(a){var c;if(!a||a.indexOf("%")>-1!=!1||!(parseFloat(a)>0||a.indexOf("calc(")>-1))return!1;a=a.replace("vw","%"),g.lengthEl||(g.lengthEl=b.createElement("div"),g.lengthEl.style.cssText="border:0;display:block;font-size:1em;left:0;margin:0;padding:0;position:absolute;visibility:hidden",g.lengthEl.className="helper-from-picturefill-js"),g.lengthEl.style.width="0px";try{g.lengthEl.style.width=a}catch(d){}return b.body.appendChild(g.lengthEl),c=g.lengthEl.offsetWidth,0>=c&&(c=!1),b.body.removeChild(g.lengthEl),c},g.detectTypeSupport=function(b,c){var d=new a.Image;return d.onerror=function(){g.types[b]=!1,e()},d.onload=function(){g.types[b]=1===d.width,e()},d.src=c,"pending"},g.types=g.types||{},g.initTypeDetects=function(){g.types["image/jpeg"]=!0,g.types["image/gif"]=!0,g.types["image/png"]=!0,g.types["image/svg+xml"]=b.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#Image","1.1"),g.types["image/webp"]=g.detectTypeSupport("image/webp","data:image/webp;base64,UklGRh4AAABXRUJQVlA4TBEAAAAvAAAAAAfQ//73v/+BiOh/AAA=")},g.verifyTypeSupport=function(a){var b=a.getAttribute("type");if(null===b||""===b)return!0;var c=g.types[b];return"string"==typeof c&&"pending"!==c?(g.types[b]=g.detectTypeSupport(b,c),"pending"):"function"==typeof c?(c(),"pending"):c},g.parseSize=function(a){var b=/(\([^)]+\))?\s*(.+)/g.exec(a);return{media:b&&b[1],length:b&&b[2]}},g.findWidthFromSourceSize=function(c){for(var d,e=g.trim(c).split(/\s*,\s*/),f=0,h=e.length;h>f;f++){var i=e[f],j=g.parseSize(i),k=j.length,l=j.media;if(k&&(!l||g.matchesMedia(l))&&(d=g.getWidthFromLength(k)))break}return d||Math.max(a.innerWidth||0,b.documentElement.clientWidth)},g.parseSrcset=function(a){for(var b=[];""!==a;){a=a.replace(/^\s+/g,"");var c,d=a.search(/\s/g),e=null;if(-1!==d){c=a.slice(0,d);var f=c.slice(-1);if((","===f||""===c)&&(c=c.replace(/,+$/,""),e=""),a=a.slice(d+1),null===e){var g=a.indexOf(",");-1!==g?(e=a.slice(0,g),a=a.slice(g+1)):(e=a,a="")}}else c=a,a="";(c||e)&&b.push({url:c,descriptor:e})}return b},g.parseDescriptor=function(a,b){var c,d=b||"100vw",e=a&&a.replace(/(^\s+|\s+$)/g,""),f=g.findWidthFromSourceSize(d);if(e)for(var h=e.split(" "),i=h.length-1;i>=0;i--){var j=h[i],k=j&&j.slice(j.length-1);if("h"!==k&&"w"!==k||g.sizesSupported){if("x"===k){var l=j&&parseFloat(j,10);c=l&&!isNaN(l)?l:1}}else c=parseFloat(parseInt(j,10)/f)}return c||1},g.getCandidatesFromSourceSet=function(a,b){for(var c=g.parseSrcset(a),d=[],e=0,f=c.length;f>e;e++){var h=c[e];d.push({url:h.url,resolution:g.parseDescriptor(h.descriptor,b)})}return d},g.dodgeSrcset=function(a){a.srcset&&(a[g.ns].srcset=a.srcset,a.srcset="",a.setAttribute("data-pfsrcset",a[g.ns].srcset))},g.processSourceSet=function(a){var b=a.getAttribute("srcset"),c=a.getAttribute("sizes"),d=[];return"IMG"===a.nodeName.toUpperCase()&&a[g.ns]&&a[g.ns].srcset&&(b=a[g.ns].srcset),b&&(d=g.getCandidatesFromSourceSet(b,c)),d},g.backfaceVisibilityFix=function(a){var b=a.style||{},c="webkitBackfaceVisibility"in b,d=b.zoom;c&&(b.zoom=".999",c=a.offsetWidth,b.zoom=d)},g.setIntrinsicSize=function(){var c={},d=function(a,b,c){b&&a.setAttribute("width",parseInt(b/c,10))};return function(e,f){var h;e[g.ns]&&!a.pfStopIntrinsicSize&&(void 0===e[g.ns].dims&&(e[g.ns].dims=e.getAttribute("width")||e.getAttribute("height")),e[g.ns].dims||(f.url in c?d(e,c[f.url],f.resolution):(h=b.createElement("img"),h.onload=function(){if(c[f.url]=h.width,!c[f.url])try{b.body.appendChild(h),c[f.url]=h.width||h.offsetWidth,b.body.removeChild(h)}catch(a){}e.src===f.url&&d(e,c[f.url],f.resolution),e=null,h.onload=null,h=null},h.src=f.url)))}}(),g.applyBestCandidate=function(a,b){var c,d,e;a.sort(g.ascendingSort),d=a.length,e=a[d-1];for(var f=0;d>f;f++)if(c=a[f],c.resolution>=g.getDpr()){e=c;break}e&&(e.url=g.makeUrl(e.url),b.src!==e.url&&(g.restrictsMixedContent()&&"http:"===e.url.substr(0,"http:".length).toLowerCase()?void 0!==window.console&&console.warn("Blocked mixed content image "+e.url):(b.src=e.url,g.curSrcSupported||(b.currentSrc=b.src),g.backfaceVisibilityFix(b))),g.setIntrinsicSize(b,e))},g.ascendingSort=function(a,b){return a.resolution-b.resolution},g.removeVideoShim=function(a){var b=a.getElementsByTagName("video");if(b.length){for(var c=b[0],d=c.getElementsByTagName("source");d.length;)a.insertBefore(d[0],c);c.parentNode.removeChild(c)}},g.getAllElements=function(){for(var a=[],c=b.getElementsByTagName("img"),d=0,e=c.length;e>d;d++){var f=c[d];("PICTURE"===f.parentNode.nodeName.toUpperCase()||null!==f.getAttribute("srcset")||f[g.ns]&&null!==f[g.ns].srcset)&&a.push(f)}return a},g.getMatch=function(a,b){for(var c,d=b.childNodes,e=0,f=d.length;f>e;e++){var h=d[e];if(1===h.nodeType){if(h===a)return c;if("SOURCE"===h.nodeName.toUpperCase()){null!==h.getAttribute("src")&&void 0!==typeof console&&console.warn("The `src` attribute is invalid on `picture` `source` element; instead, use `srcset`.");var i=h.getAttribute("media");if(h.getAttribute("srcset")&&(!i||g.matchesMedia(i))){var j=g.verifyTypeSupport(h);if(j===!0){c=h;break}if("pending"===j)return!1}}}}return c},f(),e._=g,d(e)}(window,window.document,new window.Image); -------------------------------------------------------------------------------- /js/cookie.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2014 Google Inc. All rights reserved - 2014-2015 Adrián Arroyo Calle 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | function setup(window) { 18 | 19 | if (!!window.cookieChoices) { 20 | return window.cookieChoices; 21 | } 22 | 23 | var document = window.document; 24 | // IE8 does not support textContent, so we should fallback to innerText. 25 | var supportsTextContent = 'textContent' in document.body; 26 | 27 | var cookieChoices = (function() { 28 | 29 | var cookieName = 'displayCookieConsent'; 30 | var cookieConsentId = 'cookieChoiceInfo'; 31 | var dismissLinkId = 'cookieChoiceDismiss'; 32 | 33 | function _createHeaderElement(cookieText, dismissText, linkText, linkHref) { 34 | var butterBarStyles = 'position:fixed;width:100%;background-color:#eee;' + 35 | 'margin:0; left:0; top:0;padding:4px;z-index:1000;text-align:center;'; 36 | 37 | var cookieConsentElement = document.createElement('div'); 38 | cookieConsentElement.id = cookieConsentId; 39 | cookieConsentElement.style.cssText = butterBarStyles; 40 | cookieConsentElement.appendChild(_createConsentText(cookieText)); 41 | 42 | if (!!linkText && !!linkHref) { 43 | cookieConsentElement.appendChild(_createInformationLink(linkText, linkHref)); 44 | } 45 | cookieConsentElement.appendChild(_createDismissLink(dismissText)); 46 | return cookieConsentElement; 47 | } 48 | 49 | function _createDialogElement(cookieText, dismissText, linkText, linkHref) { 50 | var glassStyle = 'position:fixed;width:100%;height:100%;z-index:999;' + 51 | 'top:0;left:0;opacity:0.5;filter:alpha(opacity=50);' + 52 | 'background-color:#ccc;'; 53 | var dialogStyle = 'z-index:1000;position:fixed;left:50%;top:50%'; 54 | //var contentStyle = 'position:relative;left:-50%;margin-top:-25%;' + 55 | // 'background-color:#fff;padding:20px;box-shadow:4px 4px 25px #888;'; 56 | var contentStyle = "position:fixed;left:0px;top:0px;" + 57 | "background-color:#fff;padding:20px;box-shadow:4px 4px 25px #888;"; 58 | 59 | var cookieConsentElement = document.createElement('div'); 60 | cookieConsentElement.id = cookieConsentId; 61 | 62 | var glassPanel = document.createElement('div'); 63 | glassPanel.style.cssText = glassStyle; 64 | 65 | var content = document.createElement('div'); 66 | content.style.cssText = contentStyle; 67 | 68 | var dialog = document.createElement('div'); 69 | dialog.style.cssText = dialogStyle; 70 | 71 | var dismissLink = _createDismissLink(dismissText); 72 | dismissLink.style.display = 'block'; 73 | dismissLink.style.textAlign = 'right'; 74 | dismissLink.style.marginTop = '8px'; 75 | 76 | content.appendChild(_createConsentText(cookieText)); 77 | if (!!linkText && !!linkHref) { 78 | content.appendChild(_createInformationLink(linkText, linkHref)); 79 | } 80 | content.appendChild(dismissLink); 81 | dialog.appendChild(content); 82 | cookieConsentElement.appendChild(glassPanel); 83 | cookieConsentElement.appendChild(dialog); 84 | return cookieConsentElement; 85 | } 86 | 87 | function _setElementText(element, text) { 88 | if (supportsTextContent) { 89 | element.textContent = text; 90 | } else { 91 | element.innerText = text; 92 | } 93 | } 94 | 95 | function _createConsentText(cookieText) { 96 | var consentText = document.createElement('span'); 97 | _setElementText(consentText, cookieText); 98 | return consentText; 99 | } 100 | 101 | function _createDismissLink(dismissText) { 102 | var dismissLink = document.createElement('a'); 103 | _setElementText(dismissLink, dismissText); 104 | dismissLink.id = dismissLinkId; 105 | dismissLink.href = '#'; 106 | dismissLink.style.marginLeft = '24px'; 107 | return dismissLink; 108 | } 109 | 110 | function _createInformationLink(linkText, linkHref) { 111 | var infoLink = document.createElement('a'); 112 | _setElementText(infoLink, linkText); 113 | infoLink.href = linkHref; 114 | infoLink.target = '_blank'; 115 | infoLink.style.marginLeft = '8px'; 116 | return infoLink; 117 | } 118 | 119 | function _dismissLinkClick() { 120 | //EXECUTE COOKIES 121 | //EXECUTE COOKIES 122 | console.log("Click, installing cookies"); 123 | var scripts=document.getElementsByClassName("cookie"); 124 | for(var i=0;i 9 | % http://www.posquit0.com 10 | % 11 | % Notes: 12 | % 1) This class file defines the structure and layout of the template file (cv.tex, resume.tex). 13 | % 2) It has been written in such a way that under most circumstances you 14 | % should not need to edit it. 15 | % 16 | % Class license: 17 | % LPPL v1.3c (http://www.latex-project.org/lppl) 18 | % 19 | 20 | 21 | %------------------------------------------------------------------------------- 22 | % Identification 23 | %------------------------------------------------------------------------------- 24 | \ProvidesClass{awesome-cv}[2015/12/14 v1.3 Awesome Curriculum Vitae Class] 25 | \NeedsTeXFormat{LaTeX2e} 26 | 27 | 28 | %------------------------------------------------------------------------------- 29 | % Class options 30 | % 31 | % (need to be done before the external package loading, for example because 32 | % we need \paperwidth, \paperheight and \@ptsize to be defined before loading 33 | % geometry and fancyhdr) 34 | %------------------------------------------------------------------------------- 35 | % Options for draft or final 36 | \DeclareOption{draft}{\setlength\overfullrule{5pt}} 37 | \DeclareOption{final}{\setlength\overfullrule{0pt}} 38 | % Inherit options of article 39 | \DeclareOption*{ 40 | \PassOptionsToClass{\CurrentOption}{article} 41 | } 42 | \ProcessOptions\relax 43 | \LoadClass{article} 44 | 45 | 46 | %------------------------------------------------------------------------------- 47 | % 3rd party packages 48 | %------------------------------------------------------------------------------- 49 | % Needed to make fixed length table 50 | \RequirePackage{array} 51 | % Needed to handle list environment 52 | \RequirePackage{enumitem} 53 | % Needed to handle text alignment 54 | \RequirePackage{ragged2e} 55 | % Needed to configure page layout 56 | \RequirePackage{geometry} 57 | % Needed to make header & footer effeciently 58 | \RequirePackage{fancyhdr} 59 | % Needed to manage colors 60 | \RequirePackage{xcolor} 61 | % Needed to use \ifxetex-\else-\fi statement 62 | \RequirePackage{ifxetex} 63 | % Needed to use \if-\then-\else statement 64 | \RequirePackage{xifthen} 65 | % Needed to use a toolbox of programming tools 66 | \RequirePackage{etoolbox} 67 | % Needed to change line spacing in specific environment 68 | \RequirePackage{setspace} 69 | % Needed to manage fonts 70 | \ifxetex 71 | \RequirePackage[quiet]{fontspec} 72 | % To support LaTeX quoting style 73 | \defaultfontfeatures{Ligatures=TeX} 74 | \else 75 | \RequirePackage[T1]{fontenc} 76 | % Replace by the encoding you are using 77 | \RequirePackage[utf8]{inputenc} 78 | \fi 79 | % Needed to manage math fonts 80 | \RequirePackage{unicode-math} 81 | % Needed to use icons from font-awesome 82 | % (https://github.com/posquit0/latex-fontawesome) 83 | \RequirePackage{fontawesome} 84 | % Needed to deal a paragraphs 85 | \RequirePackage{parskip} 86 | % Needed to deal hyperlink 87 | \RequirePackage{hyperref} 88 | \hypersetup{ 89 | pdftitle={}, 90 | pdfauthor={}, 91 | pdfsubject={}, 92 | pdfkeywords={}, 93 | colorlinks=false, 94 | allbordercolors=white 95 | } 96 | 97 | 98 | %------------------------------------------------------------------------------- 99 | % Configuration for directory locations 100 | %------------------------------------------------------------------------------- 101 | % Configure a directory location for fonts(default: 'fonts/') 102 | \newcommand*{\fontdir}[1][fonts/]{\def\@fontdir{#1}} 103 | \fontdir 104 | 105 | 106 | %------------------------------------------------------------------------------- 107 | % Configuration for layout 108 | %------------------------------------------------------------------------------- 109 | %% Page Layout 110 | % Configure page margins with geometry 111 | \geometry{left=2.0cm, top=1.5cm, right=2.0cm, bottom=2.0cm, footskip=.5cm} 112 | 113 | %% Header & Footer 114 | % Set offset to each header and offset 115 | \fancyhfoffset{0em} 116 | % Remove head rule 117 | \renewcommand{\headrulewidth}{0pt} 118 | % Clear all header & footer fields 119 | \fancyhf{} 120 | % Enable if you want to make header or footer using fancyhdr 121 | \pagestyle{fancy} 122 | 123 | 124 | %------------------------------------------------------------------------------- 125 | % Configuration for colors 126 | %------------------------------------------------------------------------------- 127 | % Gray-scale colors 128 | \definecolor{white}{HTML}{FFFFFF} 129 | \definecolor{black}{HTML}{000000} 130 | \definecolor{darkgray}{HTML}{333333} 131 | \definecolor{gray}{HTML}{5D5D5D} 132 | \definecolor{lightgray}{HTML}{999999} 133 | % Basic colors 134 | \definecolor{green}{HTML}{C2E15F} 135 | \definecolor{orange}{HTML}{FDA333} 136 | \definecolor{purple}{HTML}{D3A4F9} 137 | \definecolor{red}{HTML}{FB4485} 138 | \definecolor{blue}{HTML}{6CE0F1} 139 | % Text colors 140 | \definecolor{darktext}{HTML}{414141} 141 | \colorlet{text}{darkgray} 142 | \colorlet{graytext}{gray} 143 | \colorlet{lighttext}{lightgray} 144 | % Awesome colors 145 | \definecolor{awesome-emerald}{HTML}{00A388} 146 | \definecolor{awesome-skyblue}{HTML}{0395DE} 147 | \definecolor{awesome-red}{HTML}{DC3522} 148 | \definecolor{awesome-pink}{HTML}{EF4089} 149 | \definecolor{awesome-orange}{HTML}{FF6138} 150 | \definecolor{awesome-nephritis}{HTML}{27AE60} 151 | \definecolor{awesome-concrete}{HTML}{95A5A6} 152 | \definecolor{awesome-darknight}{HTML}{131A28} 153 | \colorlet{awesome}{awesome-red} 154 | 155 | % Awesome section color 156 | \newcounter{colorCounter} 157 | \def\@sectioncolor#1#2#3{% 158 | {% 159 | \color{% 160 | \ifcase\value{colorCounter}% 161 | awesome\or% 162 | awesome\or% 163 | awesome\or% 164 | awesome\or% 165 | awesome\else% 166 | awesome\fi% 167 | } #1#2#3% 168 | }% 169 | \stepcounter{colorCounter}% 170 | } 171 | 172 | 173 | %------------------------------------------------------------------------------- 174 | % Configuration for fonts 175 | %------------------------------------------------------------------------------- 176 | % Set font for header (default is Roboto) 177 | \newfontfamily\headerfont[ 178 | Path=\@fontdir, 179 | UprightFont=*-Regular, 180 | ItalicFont=*-Italic, 181 | BoldFont=*-Bold, 182 | BoldItalicFont=*-BoldItalic, 183 | ]{Roboto} 184 | 185 | \newfontfamily\headerfontlight[ 186 | Path=\@fontdir, 187 | UprightFont=*-Thin, 188 | ItalicFont=*-ThinItalic, 189 | BoldFont=*-Medium, 190 | BoldItalicFont=*-MediumItalic, 191 | ]{Roboto} 192 | 193 | % Set font for footer (default is Source Sans Pro) 194 | \newfontfamily\footerfont[ 195 | Path=\@fontdir, 196 | UprightFont=*-Regular, 197 | ItalicFont=*-It, 198 | BoldFont=*-Bold 199 | ]{SourceSansPro} 200 | 201 | % Set font for body (default is Source Sans Pro) 202 | \newfontfamily\bodyfont[ 203 | Path=\@fontdir, 204 | UprightFont=*-Regular, 205 | ItalicFont=*-It, 206 | BoldFont=*-Bold, 207 | BoldItalicFont=*-BoldIt 208 | ]{SourceSansPro} 209 | 210 | \newfontfamily\bodyfontlight[ 211 | Path=\@fontdir, 212 | UprightFont=*-Light, 213 | ItalicFont=*-LightIt, 214 | BoldFont=*-Semibold, 215 | BoldItalicFont=*-SemiboldIt 216 | ]{SourceSansPro} 217 | 218 | 219 | %------------------------------------------------------------------------------- 220 | % Configuration for styles 221 | %------------------------------------------------------------------------------- 222 | % Configure styles for each CV elements 223 | % For fundamental structures 224 | \newcommand*{\headerfirstnamestyle}[1]{{\fontsize{32pt}{1em}\headerfontlight\color{graytext} #1}} 225 | \newcommand*{\headerlastnamestyle}[1]{{\fontsize{32pt}{1em}\headerfont\bfseries\color{text} #1}} 226 | \newcommand*{\headerpositionstyle}[1]{{\fontsize{7.6pt}{1em}\bodyfont\scshape\color{awesome} #1}} 227 | \newcommand*{\headeraddressstyle}[1]{{\fontsize{8pt}{1em}\headerfont\itshape\color{lighttext} #1}} 228 | \newcommand*{\headersocialstyle}[1]{{\fontsize{6.8pt}{1em}\headerfont\color{text} #1}} 229 | \newcommand*{\headerquotestyle}[1]{{\fontsize{9pt}{1em}\bodyfont\itshape\color{darktext} #1}} 230 | \newcommand*{\footerstyle}[1]{{\fontsize{8pt}{1em}\footerfont\scshape\color{lighttext} #1}} 231 | \newcommand*{\sectionstyle}[1]{{\fontsize{16pt}{1em}\bodyfont\bfseries\color{text}\@sectioncolor #1}} 232 | \newcommand*{\subsectionstyle}[1]{{\fontsize{12pt}{1em}\bodyfont\scshape\textcolor{text}{#1}}} 233 | 234 | % For elements of entry 235 | \newcommand*{\entrytitlestyle}[1]{{\fontsize{10pt}{1em}\bodyfont\bfseries\color{darktext} #1}} 236 | \newcommand*{\entrypositionstyle}[1]{{\fontsize{8pt}{1em}\bodyfont\scshape\color{graytext} #1}} 237 | \newcommand*{\entrydatestyle}[1]{{\fontsize{8pt}{1em}\bodyfontlight\slshape\color{graytext} #1}} 238 | \newcommand*{\entrylocationstyle}[1]{{\fontsize{9pt}{1em}\bodyfontlight\slshape\color{awesome} #1}} 239 | \newcommand*{\descriptionstyle}[1]{{\fontsize{9pt}{1em}\bodyfontlight\upshape\color{text} #1}} 240 | \newcommand*{\skill}[1]{{\fontsize{9pt}{1em}\bodyfontlight\upshape\color{text} \textnormal{#1}}} 241 | 242 | % For elements of subentry 243 | \newcommand*{\subentrytitlestyle}[1]{{\fontsize{8pt}{1em}\bodyfont\mdseries\color{graytext} #1}} 244 | \newcommand*{\subentrypositionstyle}[1]{{\fontsize{7pt}{1em}\bodyfont\scshape\color{graytext} #1}} 245 | \newcommand*{\subentrydatestyle}[1]{{\fontsize{7pt}{1em}\bodyfontlight\slshape\color{graytext} #1}} 246 | \newcommand*{\subentrylocationstyle}[1]{{\fontsize{7pt}{1em}\bodyfontlight\slshape\color{awesome} #1}} 247 | \newcommand*{\subdescriptionstyle}[1]{{\fontsize{8pt}{1em}\bodyfontlight\upshape\color{text} #1}} 248 | 249 | % For elements of honor 250 | \newcommand*{\honortitlestyle}[1]{{\fontsize{9pt}{1em}\bodyfont\color{graytext} #1}} 251 | \newcommand*{\honorpositionstyle}[1]{{\fontsize{9pt}{1em}\bodyfont\bfseries\color{darktext} #1}} 252 | \newcommand*{\honordatestyle}[1]{{\fontsize{9pt}{1em}\bodyfont\color{graytext} #1}} 253 | \newcommand*{\honorlocationstyle}[1]{{\fontsize{9pt}{1em}\bodyfontlight\slshape\color{awesome} #1}} 254 | 255 | % For elements of skill 256 | \newcommand*{\skilltypestyle}[1]{{\fontsize{10pt}{1em}\bodyfont\bfseries\color{darktext} #1}} 257 | \newcommand*{\skillsetstyle}[1]{{\fontsize{9pt}{1em}\bodyfontlight\color{text} #1}} 258 | 259 | % For elements of the cover letter 260 | \newcommand*{\paragraphstyle}[1]{{\fontsize{14pt}{1em}\bodyfont\bfseries\color{text}\@sectioncolor #1}} 261 | \newcommand*{\recipientaddressstyle}[1]{{\fontsize{9pt}{1em}\bodyfont\scshape\color{graytext} #1}} 262 | \newcommand*{\recipienttitlestyle}[1]{{\fontsize{11pt}{1em}\bodyfont\bfseries\color{darktext} #1}} 263 | \newcommand*{\lettertitlestyle}[1]{{\fontsize{10pt}{1em}\bodyfontlight\bfseries\color{darktext} \underline{#1}}} 264 | \newcommand*{\letterdatestyle}[1]{{\fontsize{9pt}{1em}\bodyfontlight\slshape\color{graytext} #1}} 265 | \newcommand*{\lettertextstyle}{\fontsize{10pt}{1.4em}\bodyfontlight\upshape\color{graytext}} 266 | \newcommand*{\letternamestyle}[1]{{\fontsize{10pt}{1em}\bodyfont\bfseries\color{darktext} #1}} 267 | \newcommand*{\letterenclosurestyle}[1]{{\fontsize{10pt}{1em}\bodyfontlight\slshape\color{lighttext} #1}} 268 | 269 | 270 | %------------------------------------------------------------------------------- 271 | % Commands for personal information 272 | %------------------------------------------------------------------------------- 273 | % Define writer's name 274 | % Usage: \name{}{} 275 | % Usage: \firstname{} 276 | % Usage: \lastname{} 277 | % Usage: \familyname{} 278 | \newcommand*{\name}[2]{\def\@firstname{#1}\def\@lastname{#2}} 279 | \newcommand*{\firstname}[1]{\def\@firstname{#1}} 280 | \newcommand*{\lastname}[1]{\def\@lastname{#1}} 281 | \newcommand*{\familyname}[1]{\def\@lastname{#1}} 282 | \def\@familyname{\@lastname} 283 | 284 | % Define writer's address 285 | % Usage: \address{
} 286 | \newcommand*{\address}[1]{\def\@address{#1}} 287 | 288 | % Define writer's position 289 | % Usage: \name{} 290 | \newcommand*{\position}[1]{\def\@position{#1}} 291 | 292 | % Defines writer's mobile (optional) 293 | % Usage: \mobile{} 294 | \newcommand*{\mobile}[1]{\def\@mobile{#1}} 295 | 296 | % Defines writer's email (optional) 297 | % Usage: \email{} 298 | \newcommand*{\email}[1]{\def\@email{#1}} 299 | 300 | % Defines writer's link (optional) 301 | % Usage: \link{} 302 | \newcommand*{\link}[1]{\def\@link{#1}} 303 | 304 | % Defines writer's github (optional) 305 | % Usage: \github{} 306 | \newcommand*{\github}[1]{\def\@github{#1}} 307 | 308 | % Defines writer's github (optional) 309 | % Usage: \github{} 310 | \newcommand*{\location}[1]{\def\@location{#1}} 311 | 312 | % Defines writer's linked-in (optional) 313 | % Usage: \linkedin{} 314 | \newcommand*{\linkedin}[1]{\def\@linkedin{#1}} 315 | 316 | % Defines writer's stackoverflow profile (optional) 317 | % Usage: \stackoverflow{}{} 318 | % e.g.https://stackoverflow.com/users/123456/sam-smith 319 | % would be \stackoverflow{123456}{sam-smith} 320 | \newcommand*{\stackoverflow}[2]{\def\@stackoverflowid{#1}\def\@stackoverflowname{#2}} 321 | 322 | % Defines writer's skype (optional) 323 | % Usage: \skype{} 324 | \newcommand*{\skype}[1]{\def\@skype{#1}} 325 | 326 | % Defines writer's twitter (optional) 327 | % Usage: \twitter{} 328 | \newcommand*{\twitter}[1]{\def\@twitter{#1}} 329 | 330 | % Defines writer's quote (optional) 331 | % Usage: \quote{} 332 | \renewcommand*{\quote}[1]{\def\@quote{#1}} 333 | 334 | % Defines recipient's information (cover letter only) 335 | % Usage: \recipient{}{} 336 | % Usage: \recipientname{} 337 | % Usage: \recipientaddress{} 338 | \newcommand*{\recipient}[2]{\def\@recipientname{#1}\def\@recipientaddress{#2}} 339 | \newcommand*{\recipientname}[1]{\def\@recipientname{#1}} 340 | \newcommand*{\recipientaddress}[1]{\def\@recipientaddress{#1}} 341 | 342 | % Defines the title for letter (cover letter only, optional) 343 | % Usage: \lettertitle{} 344 | \newcommand*{\lettertitle}[1]{\def\@lettertitle{#1}} 345 | 346 | % Defines the date for letter (cover letter only) 347 | % Usage: \letterdate{<date>} 348 | \newcommand*{\letterdate}[1]{\def\@letterdate{#1}} 349 | 350 | % Defines a message of opening for letter (cover letter only) 351 | % Usage: \letteropening{<message>} 352 | \newcommand*{\letteropening}[1]{\def\@letteropening{#1}} 353 | 354 | % Defines a message of closing for letter (cover letter only) 355 | % Usage: \letterclosing{<message>} 356 | \newcommand*{\letterclosing}[1]{\def\@letterclosing{#1}} 357 | 358 | % Defines an enclosure for letter (cover letter only, optional) 359 | % Usage: \letterenclosure[<enclosure name>]{<enclosure>} 360 | \newcommand*{\letterenclname}[1][Enclosure]{\def\@letterenclname{#1}} 361 | \newcommand*{\letterenclosure}[2][]{ 362 | % if an optional argument is provided, use it to redefine \enclname 363 | \ifthenelse{\equal{#1}{}}{}{\def\@letterenclname{#1}} 364 | \def\@letterenclosure{#2} 365 | } 366 | 367 | 368 | %------------------------------------------------------------------------------- 369 | % Commands for extra 370 | %------------------------------------------------------------------------------- 371 | % Define separator for social informations in header 372 | % Usage: \headersocialsep{<separator>} 373 | % Default: \quad\textbar\quad 374 | \newcommand*{\headersocialsep}[1][\quad\textbar\quad]{\def\@headersocialsep{#1}} 375 | \headersocialsep 376 | 377 | 378 | %------------------------------------------------------------------------------- 379 | % Commands for utilities 380 | %------------------------------------------------------------------------------- 381 | % Use to align an element of tabular table 382 | \newcolumntype{L}[1]{>{\raggedright\let\newline\\\arraybackslash\hspace{0pt}}m{#1}} 383 | \newcolumntype{C}[1]{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}m{#1}} 384 | \newcolumntype{R}[1]{>{\raggedleft\let\newline\\\arraybackslash\hspace{0pt}}m{#1}} 385 | 386 | % Use to draw horizontal line with specific tickness 387 | \def\vhrulefill#1{\leavevmode\leaders\hrule\@height#1\hfill \kern\z@} 388 | 389 | % Use to execute conditional statements by checking empty string 390 | \newcommand*{\ifempty}[3]{\ifthenelse{\isempty{#1}}{#2}{#3}} 391 | 392 | 393 | %------------------------------------------------------------------------------- 394 | % Commands for elements of CV structure 395 | %------------------------------------------------------------------------------- 396 | % Define a header for CV 397 | % Usage: \makecvheader 398 | \newcommand*{\makecvheader}{ 399 | \begin{center} 400 | \headerfirstnamestyle{ 401 | \@firstname 402 | } \headerlastnamestyle{ 403 | \@lastname 404 | } 405 | \\ 406 | \vspace{0.4mm} 407 | \ifthenelse{\isundefined{\@position}}{}{\headerpositionstyle{\@position\\}} 408 | \vspace{0.4mm} 409 | \ifthenelse{\isundefined{\@address}}{}{\headeraddressstyle{\@address\\}} 410 | \vspace{-0.5mm} 411 | \headersocialstyle{ 412 | \newbool{isstart} 413 | \setbool{isstart}{true} 414 | \ifthenelse{\isundefined{\@mobile}} 415 | {} 416 | { 417 | \faMobile\ \@mobile 418 | \setbool{isstart}{false} 419 | } 420 | \ifthenelse{\isundefined{\@email}} 421 | {} 422 | { 423 | \ifbool{isstart} 424 | { 425 | \setbool{isstart}{false} 426 | } 427 | {\@headersocialsep} 428 | \href{mailto:\@email}{\faEnvelope\ \@email} 429 | } 430 | \ifthenelse{\isundefined{\@link}} 431 | {} 432 | { 433 | \ifbool{isstart} 434 | { 435 | \setbool{isstart}{false} 436 | } 437 | {\@headersocialsep} 438 | \href{http://\@link}{\faLink\ \@link} 439 | } 440 | \ifthenelse{\isundefined{\@github}} 441 | {} 442 | { 443 | \ifbool{isstart} 444 | { 445 | \setbool{isstart}{false} 446 | } 447 | {\@headersocialsep} 448 | \href{https://github.com/\@github}{\faGithubSquare\ \@github} 449 | } 450 | \ifthenelse{\isundefined{\@stackoverflowid}} 451 | {} 452 | { 453 | \ifbool{isstart} 454 | { 455 | \setbool{isstart}{false} 456 | } 457 | {\@headersocialsep} 458 | \href{https://stackoverflow.com/users/\@stackoverflowid}{\faStackOverflow\ \@stackoverflowname} 459 | } 460 | \ifthenelse{\isundefined{\@linkedin}} 461 | {} 462 | { 463 | \ifbool{isstart} 464 | { 465 | \setbool{isstart}{false} 466 | } 467 | {\@headersocialsep} 468 | \href{https://www.linkedin.com/in/\@linkedin}{\faLinkedinSquare\ \@linkedin} 469 | } 470 | \ifthenelse{\isundefined{\@location}} 471 | {} 472 | { 473 | \ifbool{isstart} 474 | { 475 | \setbool{isstart}{false} 476 | } 477 | {\@headersocialsep} 478 | {}{\faMapMarker\ \@location} 479 | } 480 | \ifthenelse{\isundefined{\@twitter}} 481 | {} 482 | { 483 | \ifbool{isstart} 484 | { 485 | \setbool{isstart}{false} 486 | } 487 | {\@headersocialsep} 488 | \href{https://twitter.com/\@twitter}{\faTwitter\ \@twitter} 489 | } 490 | \ifthenelse{\isundefined{\@skype}} 491 | {} 492 | { 493 | \ifbool{isstart} 494 | { 495 | \setbool{isstart}{false} 496 | } 497 | {\@headersocialsep} 498 | \faSkype\ \@skype 499 | } 500 | } \\ 501 | \ifthenelse{\isundefined{\@quote}} 502 | {} 503 | {\vspace{6.0mm}\headerquotestyle{\@quote\\}\vspace{5.0mm}} 504 | \end{center} 505 | } 506 | 507 | % Define a footer for CV 508 | % Usage: \makecvfooter{<left>}{<center>}{<right>} 509 | \newcommand*{\makecvfooter}[3]{ 510 | \fancyfoot{} 511 | \fancyfoot[L]{ 512 | \footerstyle{#1} 513 | } 514 | \fancyfoot[C]{ 515 | \footerstyle{#2} 516 | } 517 | \fancyfoot[R]{ 518 | \footerstyle{#3} 519 | } 520 | } 521 | 522 | % Define a section for CV 523 | % Usage: \cvsection{<section-title>} 524 | \newcommand{\cvsection}[1]{ 525 | \par\addvspace{1.5ex} 526 | \phantomsection{} 527 | \sectionstyle{#1} 528 | \color{gray}\vhrulefill{0.9pt} 529 | \par\nobreak\addvspace{1ex} 530 | } 531 | 532 | % Define a subsection for CV 533 | % Usage: \cvsubsection{<subsection-title>} 534 | \newcommand{\cvsubsection}[1]{ 535 | \phantomsection{} 536 | \subsectionstyle{#1} 537 | } 538 | 539 | % Define an environment for cventry 540 | \newenvironment{cventries}{ 541 | \begin{center} 542 | }{ 543 | \end{center} 544 | } 545 | % Define an entry of cv information 546 | % Usage: \cventry{<position>}{<title>}{<location>}{<date>}{<description>} 547 | \newcommand*{\cventry}[5]{ 548 | \setlength\tabcolsep{0pt} 549 | \setlength{\extrarowheight}{0pt} 550 | \begin{tabular*}{\textwidth}{@{\extracolsep{\fill}} L{12.5cm} R{4.5cm}} 551 | \ifempty{#2#3} 552 | {\entrypositionstyle{#1} & \entrydatestyle{#4} \\} 553 | {\entrytitlestyle{#2} & \entrylocationstyle{#3} \\ 554 | \entrypositionstyle{#1} & \entrydatestyle{#4} \\} 555 | \multicolumn{2}{L{17cm}}{\descriptionstyle{#5}} \\ 556 | \end{tabular*} 557 | } 558 | 559 | % Define an environment for cvsubentry 560 | \newenvironment{cvsubentries}{ 561 | \begin{center} 562 | }{ 563 | \end{center} 564 | } 565 | % Define a subentry of cv information 566 | % Usage: \cvsubentry{<position>}{<title>}{<date>}{<description>} 567 | \newcommand*{\cvsubentry}[4]{ 568 | \setlength\tabcolsep{0pt} 569 | \setlength{\extrarowheight}{0pt} 570 | \begin{tabular*}{\textwidth}{@{\extracolsep{\fill}} L{12.5cm} R{4.5cm}} 571 | \setlength\leftskip{0.2cm} 572 | \subentrytitlestyle{#2} & \ifthenelse{\equal{#1}{}} 573 | {\subentrydatestyle{#3}}{} 574 | \ifthenelse{\equal{#1}{}} 575 | {} 576 | {\subentrypositionstyle{#1} & \subentrydatestyle{#3} \\} 577 | \ifthenelse{\equal{#4}{}} 578 | {} 579 | {\multicolumn{2}{L{17.0cm}}{\subdescriptionstyle{#4}} \\} 580 | \end{tabular*} 581 | } 582 | 583 | % Define an environment for cvhonor 584 | \newenvironment{cvhonors}{ 585 | \begin{center} 586 | \setlength\tabcolsep{0pt} 587 | \setlength{\extrarowheight}{0pt} 588 | \begin{tabular*}{\textwidth}{@{\extracolsep{\fill}} C{1.5cm} L{13.0cm} R{2.5cm}} 589 | }{ 590 | \end{tabular*} 591 | \end{center} 592 | } 593 | % Define a line of cv information(honor, award or something else) 594 | % Usage: \cvhonor{<position>}{<title>}{<location>}{<date>} 595 | \newcommand*{\cvhonor}[4]{ 596 | \honordatestyle{#4} & \honorpositionstyle{#1}, \honortitlestyle{#2} & \honorlocationstyle{#3} 597 | \\ 598 | } 599 | 600 | % Define an environment for cvskill 601 | \newenvironment{cvskills}{ 602 | \begin{center} 603 | \setlength\tabcolsep{1ex} 604 | \setlength{\extrarowheight}{0pt} 605 | \begin{tabular*}{\textwidth}{@{\extracolsep{\fill}} r L{15.2cm}} 606 | }{ 607 | \end{tabular*} 608 | \end{center} 609 | } 610 | % Define a line of cv information(skill) 611 | % Usage: \cvskill{<type>}{<skillset>} 612 | \newcommand*{\cvskill}[2]{ 613 | \skilltypestyle{#1} & \skillsetstyle{#2} 614 | \\ 615 | } 616 | 617 | % Define an environment for cvitems(for cventry) 618 | \newenvironment{cvitems}{ 619 | \vspace{-4mm} 620 | \begin{justify} 621 | \begin{itemize}[leftmargin=2ex, nosep, noitemsep] 622 | \setlength{\parskip}{0pt} 623 | \renewcommand{\labelitemi}{\bullet} 624 | }{ 625 | \end{itemize} 626 | \end{justify} 627 | \vspace{-2mm} 628 | } 629 | 630 | 631 | %------------------------------------------------------------------------------- 632 | % Commands for elements of Cover Letter 633 | %------------------------------------------------------------------------------- 634 | % Define an environment for cvletter 635 | \newenvironment{cvletter}{ 636 | \lettertextstyle 637 | }{ 638 | } 639 | 640 | % Define a paragraph for cvletter 641 | % Usage: \cvparagraph{<paragraph-title>} 642 | \newcommand{\cvparagraph}[1]{ 643 | \par\addvspace{2.5ex} 644 | \phantomsection{} 645 | \paragraphstyle{#1} 646 | \color{gray}\vhrulefill{0.9pt} 647 | \par\nobreak\addvspace{0.4ex} 648 | } 649 | 650 | % Define a title of the cover letter 651 | % Usage: \makelettertitle 652 | \newcommand*{\makelettertitle}{ 653 | \vspace{8.4mm} 654 | \setlength\tabcolsep{0pt} 655 | \setlength{\extrarowheight}{0pt} 656 | \begin{tabular*}{\textwidth}{@{\extracolsep{\fill}} L{12.5cm} R{4.5cm}} 657 | \recipienttitlestyle{\@recipientname} & \letterdatestyle{\@letterdate} 658 | \end{tabular*} 659 | \begin{singlespace} 660 | \recipientaddressstyle{\@recipientaddress} \\\\ 661 | \end{singlespace} 662 | \ifthenelse{\isundefined{\@lettertitle}} 663 | {} 664 | {\lettertitlestyle{\@lettertitle} \\} 665 | \lettertextstyle{\@letteropening} 666 | } 667 | 668 | % Define a closing of the cover letter 669 | % Usage: \makeletterclosing 670 | \newcommand*{\makeletterclosing}{ 671 | \vspace{3.4mm} 672 | \lettertextstyle{\@letterclosing} \\\\ 673 | \letternamestyle{\@firstname \@lastname} 674 | \ifthenelse{\isundefined{\@letterenclosure}} 675 | {\\} 676 | { 677 | \\\\\\ 678 | \letterenclosurestyle{\@letterenclname: \@letterenclosure} \\ 679 | } 680 | } 681 | --------------------------------------------------------------------------------