Help
RSS
API
Feed
Maltego
Contact
Domain > agus.tinproject.es
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2024-10-24
87.98.231.4
(
ClassC
)
Port 80
HTTP/1.1 200 OKdate: Thu, 24 Oct 2024 02:13:23 GMTcontent-type: text/html; charsetUTF-8transfer-encoding: chunkedserver: Apachex-powered-by: PHP/7.4link: https://agus.tinproject.es/wp-json/>; relhttps://api.w.org/accept-ranges: nonevary: Accept-Encodingx-iplb-request-id: 3428EA69:65E2_5762E704:0050_6719AD42_2047C:7CBFx-iplb-instance: 51946 !DOCTYPE html>html langes>head>meta charsetUTF-8>meta nameviewport contentwidthdevice-width, initial-scale1>link relprofile hrefhttp://gmpg.org/xfn/11>link relpingback hrefhttp://agus.tinproject.es/xmlrpc.php>title>agus.tinproject.es – …el blog de Agustín Herranz/title>meta namerobots contentmax-image-preview:large />link reldns-prefetch href//fonts.googleapis.com />link relalternate typeapplication/rss+xml titleagus.tinproject.es » Feed hrefhttps://agus.tinproject.es/feed/ />link relalternate typeapplication/rss+xml titleagus.tinproject.es » Feed de los comentarios hrefhttps://agus.tinproject.es/comments/feed/ />script typetext/javascript>/* !CDATA */window._wpemojiSettings {baseUrl:https:\/\/s.w.org\/images\/core\/emoji\/14.0.0\/72x72\/,ext:.png,svgUrl:https:\/\/s.w.org\/images\/core\/emoji\/14.0.0\/svg\/,svgExt:.svg,source:{concatemoji:http:\/\/agus.tinproject.es\/wp-includes\/js\/wp-emoji-release.min.js?ver6.4.5}};/*! This file is auto-generated */!function(i,n){var o,s,e;function c(e){try{var t{supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(o,JSON.stringify(t))}catch(e){}}function p(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var tnew Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data),r(e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0),new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data));return t.every(function(e,t){return ert})}function u(e,t,n){switch(t){caseflag:return n(e,\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f,\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f)?!1:!n(e,\ud83c\uddfa\ud83c\uddf3,\ud83c\uddfa\u200b\ud83c\uddf3)&&!n(e,\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f,\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f);caseemoji:return!n(e,\ud83e\udef1\ud83c\udffb\u200d\ud83e\udef2\ud83c\udfff,\ud83e\udef1\ud83c\udffb\u200b\ud83e\udef2\ud83c\udfff)}return!1}function f(e,t,n){var rundefined!typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):i.createElement(canvas),ar.getContext(2d,{willReadFrequently:!0}),o(a.textBaselinetop,a.font600 32px Arial,{});return e.forEach(function(e){oet(a,e,n)}),o}function t(e){var ti.createElement(script);t.srce,t.defer!0,i.head.appendChild(t)}undefined!typeof Promise&&(owpEmojiSettingsSupports,sflag,emoji,n.supports{everything:!0,everythingExceptFlag:!0},enew Promise(function(e){i.addEventListener(DOMContentLoaded,e,{once:!0})}),new Promise(function(t){var nfunction(){try{var eJSON.parse(sessionStorage.getItem(o));if(objecttypeof e&&numbertypeof e.timestamp&&(new Date).valueOf()e.timestamp+604800&&objecttypeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if(undefined!typeof Worker&&undefined!typeof OffscreenCanvas&&undefined!typeof URL&&URL.createObjectURL&&undefined!typeof Blob)try{var epostMessage(+f.toString()+(+JSON.stringify(s),u.toString(),p.toString().join(,)+));,rnew Blob(e,{type:text/javascript}),anew Worker(URL.createObjectURL(r),{name:wpTestEmojiSupports});return void(a.onmessagefunction(e){c(ne.data),a.terminate(),t(n)})}catch(e){}c(nf(s,u,p))}t(n)}).then(function(e){for(var t in e)n.supportstet,n.supports.everythingn.supports.everything&&n.supportst,flag!t&&(n.supports.everythingExceptFlagn.supports.everythingExceptFlag&&n.supportst);n.supports.everythingExceptFlagn.supports.everythingExceptFlag&&!n.supports.flag,n.DOMReady!1,n.readyCallbackfunction(){n.DOMReady!0}}).then(function(){return e}).then(function(){var e;n.supports.everything||(n.readyCallback(),(en.source||{}).concatemoji?t(e.concatemoji):e.wpemoji&&e.twemoji&&(t(e.twemoji),t(e.wpemoji)))}))}((window,document),window._wpemojiSettings);/* > *//script>style idwp-emoji-styles-inline-css typetext/css> img.wp-smiley, img.emoji { display: inline !important; border: none !important; box-shadow: none !important; height: 1em !important; width: 1em !important; margin: 0 0.07em !important; vertical-align: -0.1em !important; background: none !important; padding: 0 !important; }/style>link relstylesheet idwp-block-library-css hrefhttp://agus.tinproject.es/wp-includes/css/dist/block-library/style.min.css?ver6.4.5 typetext/css mediaall />style idclassic-theme-styles-inline-css typetext/css>/*! This file is auto-generated */.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}/style>style idglobal-styles-inline-css typetext/css>body{--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);}:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width: var(--wp--style--global--content-size);margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignwide{max-width: var(--wp--style--global--wide-size);}body .is-layout-flex{display: flex;}body .is-layout-flex{flex-wrap: wrap;align-items: center;}body .is-layout-flex > *{margin: 0;}body .is-layout-grid{display: grid;}body .is-layout-grid > *{margin: 0;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}.wp-block-navigation a:where(:not(.wp-element-button)){color: inherit;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}.wp-block-pullquote{font-size: 1.5em;line-height: 1.6;}/style>link relstylesheet idlibre-style-css hrefhttp://agus.tinproject.es/wp-content/themes/libre/style.css?ver6.4.5 typetext/css mediaall />link relstylesheet idlibre-libre-css hrefhttps://fonts.googleapis.com/css?familyLibre+Baskerville%3A400%2C400italic%2C700&subsetlatin%2Clatin-ext typetext/css mediaall />link relstylesheet idcore3.0-css hrefhttp://agus.tinproject.es/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/styles/shCore.css?ver3.0 typetext/css mediaall />link relstylesheet idcore-Midnight3.0-css hrefhttp://agus.tinproject.es/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/styles/shCoreMidnight.css?ver3.0 typetext/css mediaall />link relstylesheet idtheme-Midnight3.0-css hrefhttp://agus.tinproject.es/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/styles/shThemeMidnight.css?ver3.0 typetext/css mediaall />script typetext/javascript srchttp://agus.tinproject.es/wp-includes/js/jquery/jquery.min.js?ver3.7.1 idjquery-core-js>/script>script typetext/javascript srchttp://agus.tinproject.es/wp-includes/js/jquery/jquery-migrate.min.js?ver3.4.1 idjquery-migrate-js>/script>link relhttps://api.w.org/ hrefhttps://agus.tinproject.es/wp-json/ />link relEditURI typeapplication/rsd+xml titleRSD hrefhttps://agus.tinproject.es/xmlrpc.php?rsd />meta namegenerator contentWordPress 6.4.5 />script typetext/javascript srchttp://agus.tinproject.es/wp-content/plugins/si-captcha-for-wordpress/captcha/si_captcha.js?ver1729736003>/script>!-- begin SI CAPTCHA Anti-Spam - login/register form style -->style typetext/css>.si_captcha_small { width:175px; height:45px; padding-top:10px; padding-bottom:10px; }.si_captcha_large { width:250px; height:60px; padding-top:10px; padding-bottom:10px; }img#si_image_com { border-style:none; margin:0; padding-right:5px; float:left; }img#si_image_reg { border-style:none; margin:0; padding-right:5px; float:left; }img#si_image_log { border-style:none; margin:0; padding-right:5px; float:left; }img#si_image_side_login { border-style:none; margin:0; padding-right:5px; float:left; }img#si_image_checkout { border-style:none; margin:0; padding-right:5px; float:left; }img#si_image_jetpack { border-style:none; margin:0; padding-right:5px; float:left; }img#si_image_bbpress_topic { border-style:none; margin:0; padding-right:5px; float:left; }.si_captcha_refresh { border-style:none; margin:0; vertical-align:bottom; }div#si_captcha_input { display:block; padding-top:15px; padding-bottom:5px; }label#si_captcha_code_label { margin:0; }input#si_captcha_code_input { width:65px; }p#si_captcha_code_p { clear: left; padding-top:10px; }.si-captcha-jetpack-error { color:#DC3232; }/style>!-- end SI CAPTCHA Anti-Spam - login/register form style --> style typetext/css> .site-title a, .site-description { color: #141414; } /style> style typetext/css idcustom-background-css>body.custom-background { background-color: #f4f4f4; }/style> link relicon hrefhttps://agus.tinproject.es/wp-content/uploads/2017/03/cropped-twitter-back-32x32.jpg sizes32x32 />link relicon hrefhttps://agus.tinproject.es/wp-content/uploads/2017/03/cropped-twitter-back-192x192.jpg sizes192x192 />link relapple-touch-icon hrefhttps://agus.tinproject.es/wp-content/uploads/2017/03/cropped-twitter-back-180x180.jpg />meta namemsapplication-TileImage contenthttps://agus.tinproject.es/wp-content/uploads/2017/03/cropped-twitter-back-270x270.jpg /> style typetext/css idwp-custom-css> /*Puedes añadir tu propio CSS aquí.Haz clic en el icono de ayuda de arriba para averiguar más.*/.custom-header {margin-bottom: 0px;padding-top: 1.75em;} /style> /head>body classhome blog custom-background group-blog>div idpage classhfeed site> a classskip-link screen-reader-text href#content>Ir al contenido/a> a hrefhttps://agus.tinproject.es/ relhome> img srchttp://agus.tinproject.es/wp-content/uploads/2012/12/cropped-header3mirror.jpg width1088 height300 alt classcustom-header> /a> header idmasthead classsite-header rolebanner> div classsite-branding> h1 classsite-title>a hrefhttps://agus.tinproject.es/ relhome>agus.tinproject.es/a>/h1> p classsite-description>…el blog de Agustín Herranz/p> /div>!-- .site-branding --> nav idsite-navigation classmain-navigation rolenavigation> button classmenu-toggle aria-controlsprimary-menu aria-expandedfalse>Menu/button> div idprimary-menu classmenu>ul>li classpage_item page-item-2 page_item_has_children>a hrefhttps://agus.tinproject.es/acerca-de/>Información/a>ul classchildren> li classpage_item page-item-18>a hrefhttps://agus.tinproject.es/acerca-de/>Acerca de/a>/li>/ul>/li>li classpage_item page-item-28>a hrefhttps://tinproject.es>Volver a tínproject.es/a>/li>/ul>/div> /nav>!-- #site-navigation --> /header>!-- #masthead --> div idcontent classsite-content> div idprimary classcontent-area> main idmain classsite-main rolemain> article idpost-2868 classpost-2868 post type-post status-publish format-standard hentry category-de-todo-un-poco category-programacion tag-python> header classentry-header> h2 classentry-title>a hrefhttps://agus.tinproject.es/2018/12/25/advent-of-code-2018/ relbookmark>Advent of Code 2018/a>/h2> div classentry-meta> span classposted-on>a hrefhttps://agus.tinproject.es/2018/12/25/advent-of-code-2018/ relbookmark>time classentry-date published datetime2018-12-25T19:14:11+01:00>25 diciembre 2018/time>time classupdated datetime2018-12-25T19:14:14+01:00>25 diciembre 2018/time>/a>/span>span classbyline> span classauthor vcard>a classurl fn n hrefhttps://agus.tinproject.es/author/admin/>Agustín/a>/span>/span> /div>!-- .entry-meta --> /header>!-- .entry-header --> div classentry-content> figure classwp-block-image>img fetchpriorityhigh decodingasync width902 height728 srchttps://agus.tinproject.es/wp-content/uploads/2018/12/adventofcode.png alt classwp-image-2869 srcsethttps://agus.tinproject.es/wp-content/uploads/2018/12/adventofcode.png 902w, https://agus.tinproject.es/wp-content/uploads/2018/12/adventofcode-300x242.png 300w, https://agus.tinproject.es/wp-content/uploads/2018/12/adventofcode-768x620.png 768w sizes(max-width: 902px) 100vw, 902px />figcaption>Mi Advent of Code 2018/figcaption>/figure>p>Estos días he estado tratando de solucionar el Advent of Code (a hrefhttps://adventofcode.com/>https://adventofcode.com//a>). Son una serie de puzles de programación, uno cada día del calendario de adviento, con los que consigues estrellas para salvar la Navidad y a Santa Claus…/p>p>Empecé por unos amigos de H4ckademy que lo estaban haciendo y al final me piqué, y le he ido dedicando tiempo (quizá demasiado). Mi objetivo era programar un poco y refrescar mi Python, ya que últimamente solo em>‘metaprogramo en YAML’/em> y lo echo un poco de menos. También quería aprovechar para usar ciertas novedades de Python 3.7 y usar cosas de la librería estándar que no se suelen usar normalmente./p>p>Me puse la limitación de usar sólo Python 3.7 para resolver los problemas, aunque aparte de las em>baterías incluidas/em> he usado dos dependencias externas para desarrollo: pytest para los tests y flake8 como linter./p>p>Al final el em>‘timebox’/em> del calendario de adviento ha llegado a su fin y, aunque sigo picado, he decidido dejarlo aquí. He conseguido 43 estrellas de las 50 totales, aunque lo que de verdad me llevo es haberle dado un buen repaso a los módulos: em>collections/em>, em>itertools/em>, em>functools/em>, em>operator/em>. Y haber usado em>dataclases/em>, em>f-strings/em>, em>enums/em>, em>regex/em>, y muchos em>iterators/em> y em>comprehensions/em>…/p>p>Mis soluciones están en GitHub: a hrefhttps://github.com/tinproject/adventofcode2018>https://github.com/tinproject/adventofcode2018/a>/p>p>En general he disfrutado la experiencia, la temática y el mantener el hilo a lo largo de los puzles creo que lo hacen bastante recomendable, y además, una vez al año no hace daño./p>p>¡Feliz Navidad!/p> /div>!-- .entry-content -->/article>!-- #post-## --> article idpost-2860 classpost-2860 post type-post status-publish format-standard hentry category-devops category-projectines tag-backup tag-gitlab tag-nas tag-qnap> header classentry-header> h2 classentry-title>a hrefhttps://agus.tinproject.es/2018/04/20/backups-de-gitlab-en-un-nas-qnap/ relbookmark>Backups de GitLab en un NAS QNAP/a>/h2> div classentry-meta> span classposted-on>a hrefhttps://agus.tinproject.es/2018/04/20/backups-de-gitlab-en-un-nas-qnap/ relbookmark>time classentry-date published updated datetime2018-04-20T17:51:48+02:00>20 abril 2018/time>/a>/span>span classbyline> span classauthor vcard>a classurl fn n hrefhttps://agus.tinproject.es/author/admin/>Agustín/a>/span>/span> /div>!-- .entry-meta --> /header>!-- .entry-header --> div classentry-content> p>Hace tiempo que tengo un GitLab en casa donde guardo mis proyectos personales funcionando sobre una máquina virtual en un microserver HP con ESXi./p>p>El caso es que actualizando el ESXi he visto que uno de los discos del RAID 10 del server está en em>rebuilding/em> desde hace más de un día y me he decidido a configurar de una vez los backups del GitLab, más que nada por lo que pueda pasar../p>p>Como mi GitLab no tiene mucho movimiento y no me apetece pagar por tener un montón de datos repetidos en la nube, buscando alternativas he visto que QNAP tiene la opción de instalar un ‘Object Storage Server’: a hrefhttps://www.qnap.com/en/how-to/tutorial/article/hosting-s3-and-openstack-compatible-object-storage-services-in-qts>Hosting S3 and OpenStack-compatible object storage services in QTS/a>, y como además poseo un NAS QNAP pues perfecto./p>p>El guardar los backups únicamente en un NAS que se encuentra al lado del servidor no es muy resiliente que digamos, pero para mi requisito de evitar un fallo de hardware es más que suficiente. Además es em>tinfoil friendly,/em> y siempre puedo subir manualmente una copia encriptada a Glacier. a hrefhttps://agus.tinproject.es/2018/04/20/backups-de-gitlab-en-un-nas-qnap/#more-2860 classmore-link>Sigue leyendo span classscreen-reader-text>«Backups de GitLab en un NAS QNAP»/span> span classmeta-nav>→/span>/a>/p> /div>!-- .entry-content -->/article>!-- #post-## --> article idpost-2832 classpost-2832 post type-post status-publish format-standard hentry category-sin-categora category-programacion tag-python> header classentry-header> h2 classentry-title>a hrefhttps://agus.tinproject.es/2017/11/08/alex-martelli-patterns-in-python/ relbookmark>Alex Martelli, patterns in Python./a>/h2> div classentry-meta> span classposted-on>a hrefhttps://agus.tinproject.es/2017/11/08/alex-martelli-patterns-in-python/ relbookmark>time classentry-date published datetime2017-11-08T23:22:40+01:00>8 noviembre 2017/time>time classupdated datetime2018-04-20T15:30:10+02:00>20 abril 2018/time>/a>/span>span classbyline> span classauthor vcard>a classurl fn n hrefhttps://agus.tinproject.es/author/admin/>Agustín/a>/span>/span> /div>!-- .entry-meta --> /header>!-- .entry-header --> div classentry-content> p>a hrefhttps://en.wikipedia.org/wiki/Alex_Martelli>Alex Martelli/a> es em>Senior Staff Engineer/em> (anteriormente em>Über Tech Lead/em>) en Google, es uno de los em>pythonistas/em> de largo recorrido de la PSF, inventor del término a hrefhttps://en.wikipedia.org/wiki/Duck_typing#History>em>duck-typing/em>/a>, y frecuente orador en conferencias de Python donde ha dado multitud de charlas muy instructivas./p>p>Recientemente he estado viendo unas cuantas de sus charlas, en concreto las que tratan sobre patrones de diseño de software (Software Design Patterns) para el lenguaje de programación Python./p>p>Aún me acuerdo cuando en H4ckademy un compañero, que se estaba leyendo el libro a hrefhttp://shop.oreilly.com/product/9780596007126.do>Head First Design Patterns/a>, me pidió ayuda para implementar una factoría en Python, ya que él apenas conocía el lenguaje. Estaba tratando de hacer la implementación ‘de libro’ (Java) del patrón: con una clase factoría que hay que em>instanciar/em> y donde después has de invocar a un método de esa instancia para obtener el nuevo objeto. Cuando ví el código le dije: «¿Por que no usas una simple función?»./p>p>Y es que la implementación de diversos patrones de diseño de software en Python, por las características del lenguaje, difiere bastante de la implementación de la presente en los textos clásicos sobre patrones como el a hrefhttps://en.wikipedia.org/wiki/Design_Patterns>em>Gang of 4/em>/a>, que están originalmente escritos para lenguajes de tipado estático como C++ o Java. Como bien dice Alex Martelli en una de sus charlas, muchos de los patrones presentes en esos textos clásicos sirven principalmente para evitar las limitaciones impuestas por un sistema de tipado estático, y en muchos otros casos son patrones que ya se encuentran integrados dentro del propio lenguaje, por lo que su aplicación en Python es relativa. Aún así hay muchos patrones cuya vigencia se mantiene, especialmente cuando usamos orientación a objetos. a hrefhttps://agus.tinproject.es/2017/11/08/alex-martelli-patterns-in-python/#more-2832 classmore-link>Sigue leyendo span classscreen-reader-text>«Alex Martelli, patterns in Python.»/span> span classmeta-nav>→/span>/a>/p> /div>!-- .entry-content -->/article>!-- #post-## --> article idpost-2817 classpost-2817 post type-post status-publish format-standard hentry category-programacion tag-git tag-git-lfs tag-linux tag-windows> header classentry-header> h2 classentry-title>a hrefhttps://agus.tinproject.es/2017/03/14/instalar-git-lfs/ relbookmark>Instalar Git LFS/a>/h2> div classentry-meta> span classposted-on>a hrefhttps://agus.tinproject.es/2017/03/14/instalar-git-lfs/ relbookmark>time classentry-date published datetime2017-03-14T11:08:06+01:00>14 marzo 2017/time>time classupdated datetime2017-03-15T19:38:41+01:00>15 marzo 2017/time>/a>/span>span classbyline> span classauthor vcard>a classurl fn n hrefhttps://agus.tinproject.es/author/admin/>Agustín/a>/span>/span> /div>!-- .entry-meta --> /header>!-- .entry-header --> div classentry-content> p>a hrefhttps://git-lfs.github.com/>Git Large File Storage (LFS)/a> es una aplicación que nos permite guardar ficheros binarios de gran tamaño junto un repositorio git./p>p>La forma que tiene git para almacenar las diferencias entre archivos funciona muy bien con ficheros de texto plano o código, pero para ficheros binarios como vídeos, audios, pdfs, ficheros comprimidos, etc. el calcular las diferencias a bajo nivel entre diferentes versiones de dichos ficheros no tiene mucho sentido. Además de que como normalmente son ficheros de tamaño considerable supone una gran penalización de rendimiento para el uso normal de git./p>p>Para ello git-lfs lo que hace es que guarda en un fichero de texto dentro del repositorio git un em>puntero/em> que apunta al fichero binario almacenado en fuera del repositorio git (en la carpeta .git en local). La ubicación de los archivos em>reales/em> es transparente para el usuario. Supuestamente tanto Github, como Bitbucket, como GitLab (lo que he probado yo) lo soportan. a hrefhttps://agus.tinproject.es/2017/03/14/instalar-git-lfs/#more-2817 classmore-link>Sigue leyendo span classscreen-reader-text>«Instalar Git LFS»/span> span classmeta-nav>→/span>/a>/p> /div>!-- .entry-content -->/article>!-- #post-## --> article idpost-1443 classpost-1443 post type-post status-publish format-aside hentry category-programacion tag-python post_format-post-format-aside> header classentry-header> h2 classentry-title>a hrefhttps://agus.tinproject.es/2013/09/12/nota-mental-como-usar-python-3-3-con-anaconda-en-windows/ relbookmark>Nota mental: como usar Python 3.3 con Anaconda en Windows./a>/h2> div classentry-meta> span classposted-on>a hrefhttps://agus.tinproject.es/2013/09/12/nota-mental-como-usar-python-3-3-con-anaconda-en-windows/ relbookmark>time classentry-date published datetime2013-09-12T15:11:05+02:00>12 septiembre 2013/time>time classupdated datetime2018-11-26T22:27:23+01:00>26 noviembre 2018/time>/a>/span>span classbyline> span classauthor vcard>a classurl fn n hrefhttps://agus.tinproject.es/author/admin/>Agustín/a>/span>/span> /div>!-- .entry-meta --> /header>!-- .entry-header --> div classentry-content> p>Normalmente para estas cosas utilizo linux, pero necesito hacerlo en windows y siempre se me olvida el como./p>pre classbrush: text; gutter: true>C:\>conda create -n py33 python3.3 anacondaC:\>activate py33/pre>p>y ya está. Para instalar paquetes no disponibles a través de conda usamos pip./p>pre classbrush: text; gutter: true>py33 c:\Anaconda\envs>pip install pyshp/pre> /div>!-- .entry-content -->/article>!-- #post-## --> nav classnavigation posts-navigation aria-labelEntradas> h2 classscreen-reader-text>Navegación de entradas/h2> div classnav-links>div classnav-previous>a hrefhttps://agus.tinproject.es/page/2/ >Entradas anteriores/a>/div>/div> /nav> /main>!-- #main --> /div>!-- #primary --> /div>!-- #content --> footer idcolophon classsite-footer rolecontentinfo> div classsite-info> a hrefhttp://es.wordpress.org/>Creado con WordPress/a> span classsep> | /span> Tema: Libre por a hrefhttp://wordpress.com/themes/ reldesigner>Automattic/a>. /div>!-- .site-info --> /footer>!-- #colophon -->/div>!-- #page -->!-- WP SyntaxHighlighter Ver.1.7.3 Begin -->script typetext/javascript srchttp://agus.tinproject.es/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shCore.js?ver3.0>/script>script typetext/javascript srchttp://agus.tinproject.es/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shAutoloader.js?ver3.0>/script>script typetext/javascript srchttp://agus.tinproject.es/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushXml.js?ver3.0>/script>script typetext/javascript>//!CDATA SyntaxHighlighter.autoloader( bash shell http://agus.tinproject.es/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushBash.js?ver3.0 ,cpp c http://agus.tinproject.es/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushCpp.js?ver3.0 ,css http://agus.tinproject.es/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushCss.js?ver3.0 ,diff patch http://agus.tinproject.es/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushDiff.js?ver3.0 ,java http://agus.tinproject.es/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushJava.js?ver3.0 ,js jscript javascript http://agus.tinproject.es/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushJScript.js?ver3.0 ,php http://agus.tinproject.es/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushPhp.js?ver3.0 ,plain text http://agus.tinproject.es/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushPlain.js?ver3.0 ,py python http://agus.tinproject.es/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushPython.js?ver3.0 ,rails ror ruby rb http://agus.tinproject.es/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushRuby.js?ver3.0 ,sass scss http://agus.tinproject.es/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushSass.js?ver3.0 ,sql http://agus.tinproject.es/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushSql.js?ver3.0 ,vb vbnet http://agus.tinproject.es/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushVb.js?ver3.0 ,xml xhtml xslt html http://agus.tinproject.es/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushXml.js?ver3.0 ); SyntaxHighlighter.defaultsauto-links true; SyntaxHighlighter.defaultsquick-code true; SyntaxHighlighter.defaultstitle ; SyntaxHighlighter.defaultsclass-name notranslate; SyntaxHighlighter.defaultscollapse false; SyntaxHighlighter.defaultsfirst-line 1; SyntaxHighlighter.defaultsgutter true; SyntaxHighlighter.defaultspad-line-numbers false; SyntaxHighlighter.defaultssmart-tabs true; SyntaxHighlighter.defaultstab-size 4; SyntaxHighlighter.defaultstoolbar true; SyntaxHighlighter.config.strings.expandSource + expand source; SyntaxHighlighter.config.strings.help ?; SyntaxHighlighter.config.strings.alert SyntaxHighlighter\n\n; SyntaxHighlighter.config.strings.noBrush Cant find brush for: ; SyntaxHighlighter.config.strings.brushNotHtmlScript Brush wasnt configured for html-script option: ; SyntaxHighlighter.all(); //>/script>!-- WP SyntaxHighlighter Ver.1.7.3 End -->script typetext/javascript idlibre-script-js-extra>/* !CDATA */var libreadminbar ;/* > *//script>script typetext/javascript srchttp://agus.tinproject.es/wp-content/themes/libre/js/libre.js?ver20150623 idlibre-script-js>/script>script typetext/javascript srchttp://agus.tinproject.es/wp-content/themes/libre/js/navigation.js?ver20120206 idlibre-navigation-js>/script>script typetext/javascript srchttp://agus.tinproject.es/wp-content/themes/libre/js/skip-link-focus-fix.js?ver20130115 idlibre-skip-link-focus-fix-js>/script>script typetext/javascript srchttp://agus.tinproject.es/wp-content/plugins/page-links-to/dist/new-tab.js?ver3.3.6 idpage-links-to-js>/script>/body>/html>
Port 443
HTTP/1.1 200 OKDate: Thu, 24 Oct 2024 02:13:24 GMTContent-Type: text/html; charsetUTF-8Transfer-Encoding: chunkedConnection: keep-aliveServer: ApacheX-Powered-By: PHP/7.4Link: https://agus.tinproject.es/wp-json/>; relhttps://api.w.org/Accept-Ranges: noneVary: Accept-Encoding !DOCTYPE html>html langes>head>meta charsetUTF-8>meta nameviewport contentwidthdevice-width, initial-scale1>link relprofile hrefhttp://gmpg.org/xfn/11>link relpingback hrefhttps://agus.tinproject.es/xmlrpc.php>title>agus.tinproject.es – …el blog de Agustín Herranz/title>meta namerobots contentmax-image-preview:large />link reldns-prefetch href//fonts.googleapis.com />link relalternate typeapplication/rss+xml titleagus.tinproject.es » Feed hrefhttps://agus.tinproject.es/feed/ />link relalternate typeapplication/rss+xml titleagus.tinproject.es » Feed de los comentarios hrefhttps://agus.tinproject.es/comments/feed/ />script typetext/javascript>/* !CDATA */window._wpemojiSettings {baseUrl:https:\/\/s.w.org\/images\/core\/emoji\/14.0.0\/72x72\/,ext:.png,svgUrl:https:\/\/s.w.org\/images\/core\/emoji\/14.0.0\/svg\/,svgExt:.svg,source:{concatemoji:https:\/\/agus.tinproject.es\/wp-includes\/js\/wp-emoji-release.min.js?ver6.4.5}};/*! This file is auto-generated */!function(i,n){var o,s,e;function c(e){try{var t{supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(o,JSON.stringify(t))}catch(e){}}function p(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var tnew Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data),r(e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0),new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data));return t.every(function(e,t){return ert})}function u(e,t,n){switch(t){caseflag:return n(e,\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f,\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f)?!1:!n(e,\ud83c\uddfa\ud83c\uddf3,\ud83c\uddfa\u200b\ud83c\uddf3)&&!n(e,\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f,\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f);caseemoji:return!n(e,\ud83e\udef1\ud83c\udffb\u200d\ud83e\udef2\ud83c\udfff,\ud83e\udef1\ud83c\udffb\u200b\ud83e\udef2\ud83c\udfff)}return!1}function f(e,t,n){var rundefined!typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):i.createElement(canvas),ar.getContext(2d,{willReadFrequently:!0}),o(a.textBaselinetop,a.font600 32px Arial,{});return e.forEach(function(e){oet(a,e,n)}),o}function t(e){var ti.createElement(script);t.srce,t.defer!0,i.head.appendChild(t)}undefined!typeof Promise&&(owpEmojiSettingsSupports,sflag,emoji,n.supports{everything:!0,everythingExceptFlag:!0},enew Promise(function(e){i.addEventListener(DOMContentLoaded,e,{once:!0})}),new Promise(function(t){var nfunction(){try{var eJSON.parse(sessionStorage.getItem(o));if(objecttypeof e&&numbertypeof e.timestamp&&(new Date).valueOf()e.timestamp+604800&&objecttypeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if(undefined!typeof Worker&&undefined!typeof OffscreenCanvas&&undefined!typeof URL&&URL.createObjectURL&&undefined!typeof Blob)try{var epostMessage(+f.toString()+(+JSON.stringify(s),u.toString(),p.toString().join(,)+));,rnew Blob(e,{type:text/javascript}),anew Worker(URL.createObjectURL(r),{name:wpTestEmojiSupports});return void(a.onmessagefunction(e){c(ne.data),a.terminate(),t(n)})}catch(e){}c(nf(s,u,p))}t(n)}).then(function(e){for(var t in e)n.supportstet,n.supports.everythingn.supports.everything&&n.supportst,flag!t&&(n.supports.everythingExceptFlagn.supports.everythingExceptFlag&&n.supportst);n.supports.everythingExceptFlagn.supports.everythingExceptFlag&&!n.supports.flag,n.DOMReady!1,n.readyCallbackfunction(){n.DOMReady!0}}).then(function(){return e}).then(function(){var e;n.supports.everything||(n.readyCallback(),(en.source||{}).concatemoji?t(e.concatemoji):e.wpemoji&&e.twemoji&&(t(e.twemoji),t(e.wpemoji)))}))}((window,document),window._wpemojiSettings);/* > *//script>style idwp-emoji-styles-inline-css typetext/css> img.wp-smiley, img.emoji { display: inline !important; border: none !important; box-shadow: none !important; height: 1em !important; width: 1em !important; margin: 0 0.07em !important; vertical-align: -0.1em !important; background: none !important; padding: 0 !important; }/style>link relstylesheet idwp-block-library-css hrefhttps://agus.tinproject.es/wp-includes/css/dist/block-library/style.min.css?ver6.4.5 typetext/css mediaall />style idclassic-theme-styles-inline-css typetext/css>/*! This file is auto-generated */.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}/style>style idglobal-styles-inline-css typetext/css>body{--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);}:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width: var(--wp--style--global--content-size);margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignwide{max-width: var(--wp--style--global--wide-size);}body .is-layout-flex{display: flex;}body .is-layout-flex{flex-wrap: wrap;align-items: center;}body .is-layout-flex > *{margin: 0;}body .is-layout-grid{display: grid;}body .is-layout-grid > *{margin: 0;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}.wp-block-navigation a:where(:not(.wp-element-button)){color: inherit;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}.wp-block-pullquote{font-size: 1.5em;line-height: 1.6;}/style>link relstylesheet idlibre-style-css hrefhttps://agus.tinproject.es/wp-content/themes/libre/style.css?ver6.4.5 typetext/css mediaall />link relstylesheet idlibre-libre-css hrefhttps://fonts.googleapis.com/css?familyLibre+Baskerville%3A400%2C400italic%2C700&subsetlatin%2Clatin-ext typetext/css mediaall />link relstylesheet idcore3.0-css hrefhttps://agus.tinproject.es/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/styles/shCore.css?ver3.0 typetext/css mediaall />link relstylesheet idcore-Midnight3.0-css hrefhttps://agus.tinproject.es/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/styles/shCoreMidnight.css?ver3.0 typetext/css mediaall />link relstylesheet idtheme-Midnight3.0-css hrefhttps://agus.tinproject.es/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/styles/shThemeMidnight.css?ver3.0 typetext/css mediaall />script typetext/javascript srchttps://agus.tinproject.es/wp-includes/js/jquery/jquery.min.js?ver3.7.1 idjquery-core-js>/script>script typetext/javascript srchttps://agus.tinproject.es/wp-includes/js/jquery/jquery-migrate.min.js?ver3.4.1 idjquery-migrate-js>/script>link relhttps://api.w.org/ hrefhttps://agus.tinproject.es/wp-json/ />link relEditURI typeapplication/rsd+xml titleRSD hrefhttps://agus.tinproject.es/xmlrpc.php?rsd />meta namegenerator contentWordPress 6.4.5 />script typetext/javascript srchttps://agus.tinproject.es/wp-content/plugins/si-captcha-for-wordpress/captcha/si_captcha.js?ver1729736004>/script>!-- begin SI CAPTCHA Anti-Spam - login/register form style -->style typetext/css>.si_captcha_small { width:175px; height:45px; padding-top:10px; padding-bottom:10px; }.si_captcha_large { width:250px; height:60px; padding-top:10px; padding-bottom:10px; }img#si_image_com { border-style:none; margin:0; padding-right:5px; float:left; }img#si_image_reg { border-style:none; margin:0; padding-right:5px; float:left; }img#si_image_log { border-style:none; margin:0; padding-right:5px; float:left; }img#si_image_side_login { border-style:none; margin:0; padding-right:5px; float:left; }img#si_image_checkout { border-style:none; margin:0; padding-right:5px; float:left; }img#si_image_jetpack { border-style:none; margin:0; padding-right:5px; float:left; }img#si_image_bbpress_topic { border-style:none; margin:0; padding-right:5px; float:left; }.si_captcha_refresh { border-style:none; margin:0; vertical-align:bottom; }div#si_captcha_input { display:block; padding-top:15px; padding-bottom:5px; }label#si_captcha_code_label { margin:0; }input#si_captcha_code_input { width:65px; }p#si_captcha_code_p { clear: left; padding-top:10px; }.si-captcha-jetpack-error { color:#DC3232; }/style>!-- end SI CAPTCHA Anti-Spam - login/register form style --> style typetext/css> .site-title a, .site-description { color: #141414; } /style> style typetext/css idcustom-background-css>body.custom-background { background-color: #f4f4f4; }/style> link relicon hrefhttps://agus.tinproject.es/wp-content/uploads/2017/03/cropped-twitter-back-32x32.jpg sizes32x32 />link relicon hrefhttps://agus.tinproject.es/wp-content/uploads/2017/03/cropped-twitter-back-192x192.jpg sizes192x192 />link relapple-touch-icon hrefhttps://agus.tinproject.es/wp-content/uploads/2017/03/cropped-twitter-back-180x180.jpg />meta namemsapplication-TileImage contenthttps://agus.tinproject.es/wp-content/uploads/2017/03/cropped-twitter-back-270x270.jpg /> style typetext/css idwp-custom-css> /*Puedes añadir tu propio CSS aquí.Haz clic en el icono de ayuda de arriba para averiguar más.*/.custom-header {margin-bottom: 0px;padding-top: 1.75em;} /style> /head>body classhome blog custom-background group-blog>div idpage classhfeed site> a classskip-link screen-reader-text href#content>Ir al contenido/a> a hrefhttps://agus.tinproject.es/ relhome> img srchttps://agus.tinproject.es/wp-content/uploads/2012/12/cropped-header3mirror.jpg width1088 height300 alt classcustom-header> /a> header idmasthead classsite-header rolebanner> div classsite-branding> h1 classsite-title>a hrefhttps://agus.tinproject.es/ relhome>agus.tinproject.es/a>/h1> p classsite-description>…el blog de Agustín Herranz/p> /div>!-- .site-branding --> nav idsite-navigation classmain-navigation rolenavigation> button classmenu-toggle aria-controlsprimary-menu aria-expandedfalse>Menu/button> div idprimary-menu classmenu>ul>li classpage_item page-item-2 page_item_has_children>a hrefhttps://agus.tinproject.es/acerca-de/>Información/a>ul classchildren> li classpage_item page-item-18>a hrefhttps://agus.tinproject.es/acerca-de/>Acerca de/a>/li>/ul>/li>li classpage_item page-item-28>a hrefhttps://tinproject.es>Volver a tínproject.es/a>/li>/ul>/div> /nav>!-- #site-navigation --> /header>!-- #masthead --> div idcontent classsite-content> div idprimary classcontent-area> main idmain classsite-main rolemain> article idpost-2868 classpost-2868 post type-post status-publish format-standard hentry category-de-todo-un-poco category-programacion tag-python> header classentry-header> h2 classentry-title>a hrefhttps://agus.tinproject.es/2018/12/25/advent-of-code-2018/ relbookmark>Advent of Code 2018/a>/h2> div classentry-meta> span classposted-on>a hrefhttps://agus.tinproject.es/2018/12/25/advent-of-code-2018/ relbookmark>time classentry-date published datetime2018-12-25T19:14:11+01:00>25 diciembre 2018/time>time classupdated datetime2018-12-25T19:14:14+01:00>25 diciembre 2018/time>/a>/span>span classbyline> span classauthor vcard>a classurl fn n hrefhttps://agus.tinproject.es/author/admin/>Agustín/a>/span>/span> /div>!-- .entry-meta --> /header>!-- .entry-header --> div classentry-content> figure classwp-block-image>img fetchpriorityhigh decodingasync width902 height728 srchttps://agus.tinproject.es/wp-content/uploads/2018/12/adventofcode.png alt classwp-image-2869 srcsethttps://agus.tinproject.es/wp-content/uploads/2018/12/adventofcode.png 902w, https://agus.tinproject.es/wp-content/uploads/2018/12/adventofcode-300x242.png 300w, https://agus.tinproject.es/wp-content/uploads/2018/12/adventofcode-768x620.png 768w sizes(max-width: 902px) 100vw, 902px />figcaption>Mi Advent of Code 2018/figcaption>/figure>p>Estos días he estado tratando de solucionar el Advent of Code (a hrefhttps://adventofcode.com/>https://adventofcode.com//a>). Son una serie de puzles de programación, uno cada día del calendario de adviento, con los que consigues estrellas para salvar la Navidad y a Santa Claus…/p>p>Empecé por unos amigos de H4ckademy que lo estaban haciendo y al final me piqué, y le he ido dedicando tiempo (quizá demasiado). Mi objetivo era programar un poco y refrescar mi Python, ya que últimamente solo em>‘metaprogramo en YAML’/em> y lo echo un poco de menos. También quería aprovechar para usar ciertas novedades de Python 3.7 y usar cosas de la librería estándar que no se suelen usar normalmente./p>p>Me puse la limitación de usar sólo Python 3.7 para resolver los problemas, aunque aparte de las em>baterías incluidas/em> he usado dos dependencias externas para desarrollo: pytest para los tests y flake8 como linter./p>p>Al final el em>‘timebox’/em> del calendario de adviento ha llegado a su fin y, aunque sigo picado, he decidido dejarlo aquí. He conseguido 43 estrellas de las 50 totales, aunque lo que de verdad me llevo es haberle dado un buen repaso a los módulos: em>collections/em>, em>itertools/em>, em>functools/em>, em>operator/em>. Y haber usado em>dataclases/em>, em>f-strings/em>, em>enums/em>, em>regex/em>, y muchos em>iterators/em> y em>comprehensions/em>…/p>p>Mis soluciones están en GitHub: a hrefhttps://github.com/tinproject/adventofcode2018>https://github.com/tinproject/adventofcode2018/a>/p>p>En general he disfrutado la experiencia, la temática y el mantener el hilo a lo largo de los puzles creo que lo hacen bastante recomendable, y además, una vez al año no hace daño./p>p>¡Feliz Navidad!/p> /div>!-- .entry-content -->/article>!-- #post-## --> article idpost-2860 classpost-2860 post type-post status-publish format-standard hentry category-devops category-projectines tag-backup tag-gitlab tag-nas tag-qnap> header classentry-header> h2 classentry-title>a hrefhttps://agus.tinproject.es/2018/04/20/backups-de-gitlab-en-un-nas-qnap/ relbookmark>Backups de GitLab en un NAS QNAP/a>/h2> div classentry-meta> span classposted-on>a hrefhttps://agus.tinproject.es/2018/04/20/backups-de-gitlab-en-un-nas-qnap/ relbookmark>time classentry-date published updated datetime2018-04-20T17:51:48+02:00>20 abril 2018/time>/a>/span>span classbyline> span classauthor vcard>a classurl fn n hrefhttps://agus.tinproject.es/author/admin/>Agustín/a>/span>/span> /div>!-- .entry-meta --> /header>!-- .entry-header --> div classentry-content> p>Hace tiempo que tengo un GitLab en casa donde guardo mis proyectos personales funcionando sobre una máquina virtual en un microserver HP con ESXi./p>p>El caso es que actualizando el ESXi he visto que uno de los discos del RAID 10 del server está en em>rebuilding/em> desde hace más de un día y me he decidido a configurar de una vez los backups del GitLab, más que nada por lo que pueda pasar../p>p>Como mi GitLab no tiene mucho movimiento y no me apetece pagar por tener un montón de datos repetidos en la nube, buscando alternativas he visto que QNAP tiene la opción de instalar un ‘Object Storage Server’: a hrefhttps://www.qnap.com/en/how-to/tutorial/article/hosting-s3-and-openstack-compatible-object-storage-services-in-qts>Hosting S3 and OpenStack-compatible object storage services in QTS/a>, y como además poseo un NAS QNAP pues perfecto./p>p>El guardar los backups únicamente en un NAS que se encuentra al lado del servidor no es muy resiliente que digamos, pero para mi requisito de evitar un fallo de hardware es más que suficiente. Además es em>tinfoil friendly,/em> y siempre puedo subir manualmente una copia encriptada a Glacier. a hrefhttps://agus.tinproject.es/2018/04/20/backups-de-gitlab-en-un-nas-qnap/#more-2860 classmore-link>Sigue leyendo span classscreen-reader-text>«Backups de GitLab en un NAS QNAP»/span> span classmeta-nav>→/span>/a>/p> /div>!-- .entry-content -->/article>!-- #post-## --> article idpost-2832 classpost-2832 post type-post status-publish format-standard hentry category-sin-categora category-programacion tag-python> header classentry-header> h2 classentry-title>a hrefhttps://agus.tinproject.es/2017/11/08/alex-martelli-patterns-in-python/ relbookmark>Alex Martelli, patterns in Python./a>/h2> div classentry-meta> span classposted-on>a hrefhttps://agus.tinproject.es/2017/11/08/alex-martelli-patterns-in-python/ relbookmark>time classentry-date published datetime2017-11-08T23:22:40+01:00>8 noviembre 2017/time>time classupdated datetime2018-04-20T15:30:10+02:00>20 abril 2018/time>/a>/span>span classbyline> span classauthor vcard>a classurl fn n hrefhttps://agus.tinproject.es/author/admin/>Agustín/a>/span>/span> /div>!-- .entry-meta --> /header>!-- .entry-header --> div classentry-content> p>a hrefhttps://en.wikipedia.org/wiki/Alex_Martelli>Alex Martelli/a> es em>Senior Staff Engineer/em> (anteriormente em>Über Tech Lead/em>) en Google, es uno de los em>pythonistas/em> de largo recorrido de la PSF, inventor del término a hrefhttps://en.wikipedia.org/wiki/Duck_typing#History>em>duck-typing/em>/a>, y frecuente orador en conferencias de Python donde ha dado multitud de charlas muy instructivas./p>p>Recientemente he estado viendo unas cuantas de sus charlas, en concreto las que tratan sobre patrones de diseño de software (Software Design Patterns) para el lenguaje de programación Python./p>p>Aún me acuerdo cuando en H4ckademy un compañero, que se estaba leyendo el libro a hrefhttp://shop.oreilly.com/product/9780596007126.do>Head First Design Patterns/a>, me pidió ayuda para implementar una factoría en Python, ya que él apenas conocía el lenguaje. Estaba tratando de hacer la implementación ‘de libro’ (Java) del patrón: con una clase factoría que hay que em>instanciar/em> y donde después has de invocar a un método de esa instancia para obtener el nuevo objeto. Cuando ví el código le dije: «¿Por que no usas una simple función?»./p>p>Y es que la implementación de diversos patrones de diseño de software en Python, por las características del lenguaje, difiere bastante de la implementación de la presente en los textos clásicos sobre patrones como el a hrefhttps://en.wikipedia.org/wiki/Design_Patterns>em>Gang of 4/em>/a>, que están originalmente escritos para lenguajes de tipado estático como C++ o Java. Como bien dice Alex Martelli en una de sus charlas, muchos de los patrones presentes en esos textos clásicos sirven principalmente para evitar las limitaciones impuestas por un sistema de tipado estático, y en muchos otros casos son patrones que ya se encuentran integrados dentro del propio lenguaje, por lo que su aplicación en Python es relativa. Aún así hay muchos patrones cuya vigencia se mantiene, especialmente cuando usamos orientación a objetos. a hrefhttps://agus.tinproject.es/2017/11/08/alex-martelli-patterns-in-python/#more-2832 classmore-link>Sigue leyendo span classscreen-reader-text>«Alex Martelli, patterns in Python.»/span> span classmeta-nav>→/span>/a>/p> /div>!-- .entry-content -->/article>!-- #post-## --> article idpost-2817 classpost-2817 post type-post status-publish format-standard hentry category-programacion tag-git tag-git-lfs tag-linux tag-windows> header classentry-header> h2 classentry-title>a hrefhttps://agus.tinproject.es/2017/03/14/instalar-git-lfs/ relbookmark>Instalar Git LFS/a>/h2> div classentry-meta> span classposted-on>a hrefhttps://agus.tinproject.es/2017/03/14/instalar-git-lfs/ relbookmark>time classentry-date published datetime2017-03-14T11:08:06+01:00>14 marzo 2017/time>time classupdated datetime2017-03-15T19:38:41+01:00>15 marzo 2017/time>/a>/span>span classbyline> span classauthor vcard>a classurl fn n hrefhttps://agus.tinproject.es/author/admin/>Agustín/a>/span>/span> /div>!-- .entry-meta --> /header>!-- .entry-header --> div classentry-content> p>a hrefhttps://git-lfs.github.com/>Git Large File Storage (LFS)/a> es una aplicación que nos permite guardar ficheros binarios de gran tamaño junto un repositorio git./p>p>La forma que tiene git para almacenar las diferencias entre archivos funciona muy bien con ficheros de texto plano o código, pero para ficheros binarios como vídeos, audios, pdfs, ficheros comprimidos, etc. el calcular las diferencias a bajo nivel entre diferentes versiones de dichos ficheros no tiene mucho sentido. Además de que como normalmente son ficheros de tamaño considerable supone una gran penalización de rendimiento para el uso normal de git./p>p>Para ello git-lfs lo que hace es que guarda en un fichero de texto dentro del repositorio git un em>puntero/em> que apunta al fichero binario almacenado en fuera del repositorio git (en la carpeta .git en local). La ubicación de los archivos em>reales/em> es transparente para el usuario. Supuestamente tanto Github, como Bitbucket, como GitLab (lo que he probado yo) lo soportan. a hrefhttps://agus.tinproject.es/2017/03/14/instalar-git-lfs/#more-2817 classmore-link>Sigue leyendo span classscreen-reader-text>«Instalar Git LFS»/span> span classmeta-nav>→/span>/a>/p> /div>!-- .entry-content -->/article>!-- #post-## --> article idpost-1443 classpost-1443 post type-post status-publish format-aside hentry category-programacion tag-python post_format-post-format-aside> header classentry-header> h2 classentry-title>a hrefhttps://agus.tinproject.es/2013/09/12/nota-mental-como-usar-python-3-3-con-anaconda-en-windows/ relbookmark>Nota mental: como usar Python 3.3 con Anaconda en Windows./a>/h2> div classentry-meta> span classposted-on>a hrefhttps://agus.tinproject.es/2013/09/12/nota-mental-como-usar-python-3-3-con-anaconda-en-windows/ relbookmark>time classentry-date published datetime2013-09-12T15:11:05+02:00>12 septiembre 2013/time>time classupdated datetime2018-11-26T22:27:23+01:00>26 noviembre 2018/time>/a>/span>span classbyline> span classauthor vcard>a classurl fn n hrefhttps://agus.tinproject.es/author/admin/>Agustín/a>/span>/span> /div>!-- .entry-meta --> /header>!-- .entry-header --> div classentry-content> p>Normalmente para estas cosas utilizo linux, pero necesito hacerlo en windows y siempre se me olvida el como./p>pre classbrush: text; gutter: true>C:\>conda create -n py33 python3.3 anacondaC:\>activate py33/pre>p>y ya está. Para instalar paquetes no disponibles a través de conda usamos pip./p>pre classbrush: text; gutter: true>py33 c:\Anaconda\envs>pip install pyshp/pre> /div>!-- .entry-content -->/article>!-- #post-## --> nav classnavigation posts-navigation aria-labelEntradas> h2 classscreen-reader-text>Navegación de entradas/h2> div classnav-links>div classnav-previous>a hrefhttps://agus.tinproject.es/page/2/ >Entradas anteriores/a>/div>/div> /nav> /main>!-- #main --> /div>!-- #primary --> /div>!-- #content --> footer idcolophon classsite-footer rolecontentinfo> div classsite-info> a hrefhttp://es.wordpress.org/>Creado con WordPress/a> span classsep> | /span> Tema: Libre por a hrefhttp://wordpress.com/themes/ reldesigner>Automattic/a>. /div>!-- .site-info --> /footer>!-- #colophon -->/div>!-- #page -->!-- WP SyntaxHighlighter Ver.1.7.3 Begin -->script typetext/javascript srchttps://agus.tinproject.es/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shCore.js?ver3.0>/script>script typetext/javascript srchttps://agus.tinproject.es/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shAutoloader.js?ver3.0>/script>script typetext/javascript srchttps://agus.tinproject.es/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushXml.js?ver3.0>/script>script typetext/javascript>//!CDATA SyntaxHighlighter.autoloader( bash shell https://agus.tinproject.es/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushBash.js?ver3.0 ,cpp c https://agus.tinproject.es/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushCpp.js?ver3.0 ,css https://agus.tinproject.es/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushCss.js?ver3.0 ,diff patch https://agus.tinproject.es/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushDiff.js?ver3.0 ,java https://agus.tinproject.es/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushJava.js?ver3.0 ,js jscript javascript https://agus.tinproject.es/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushJScript.js?ver3.0 ,php https://agus.tinproject.es/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushPhp.js?ver3.0 ,plain text https://agus.tinproject.es/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushPlain.js?ver3.0 ,py python https://agus.tinproject.es/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushPython.js?ver3.0 ,rails ror ruby rb https://agus.tinproject.es/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushRuby.js?ver3.0 ,sass scss https://agus.tinproject.es/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushSass.js?ver3.0 ,sql https://agus.tinproject.es/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushSql.js?ver3.0 ,vb vbnet https://agus.tinproject.es/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushVb.js?ver3.0 ,xml xhtml xslt html https://agus.tinproject.es/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushXml.js?ver3.0 ); SyntaxHighlighter.defaultsauto-links true; SyntaxHighlighter.defaultsquick-code true; SyntaxHighlighter.defaultstitle ; SyntaxHighlighter.defaultsclass-name notranslate; SyntaxHighlighter.defaultscollapse false; SyntaxHighlighter.defaultsfirst-line 1; SyntaxHighlighter.defaultsgutter true; SyntaxHighlighter.defaultspad-line-numbers false; SyntaxHighlighter.defaultssmart-tabs true; SyntaxHighlighter.defaultstab-size 4; SyntaxHighlighter.defaultstoolbar true; SyntaxHighlighter.config.strings.expandSource + expand source; SyntaxHighlighter.config.strings.help ?; SyntaxHighlighter.config.strings.alert SyntaxHighlighter\n\n; SyntaxHighlighter.config.strings.noBrush Cant find brush for: ; SyntaxHighlighter.config.strings.brushNotHtmlScript Brush wasnt configured for html-script option: ; SyntaxHighlighter.all(); //>/script>!-- WP SyntaxHighlighter Ver.1.7.3 End -->script typetext/javascript idlibre-script-js-extra>/* !CDATA */var libreadminbar ;/* > *//script>script typetext/javascript srchttps://agus.tinproject.es/wp-content/themes/libre/js/libre.js?ver20150623 idlibre-script-js>/script>script typetext/javascript srchttps://agus.tinproject.es/wp-content/themes/libre/js/navigation.js?ver20120206 idlibre-navigation-js>/script>script typetext/javascript srchttps://agus.tinproject.es/wp-content/themes/libre/js/skip-link-focus-fix.js?ver20130115 idlibre-skip-link-focus-fix-js>/script>script typetext/javascript srchttps://agus.tinproject.es/wp-content/plugins/page-links-to/dist/new-tab.js?ver3.3.6 idpage-links-to-js>/script>/body>/html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]