<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>El blog de 13Node Informática</title>
	<atom:link href="https://13node.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>https://13node.com/blog/</link>
	<description>Desarrollo Web, Diseño Gráfico y Marketing Online.</description>
	<lastBuildDate>Tue, 03 Feb 2026 12:54:05 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.1</generator>

<image>
	<url>https://13node.com/wp-content/uploads/2023/01/13node-96x96.png</url>
	<title>El blog de 13Node Informática</title>
	<link>https://13node.com/blog/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Condiciones y Tarifas de Programación de Software en 13Node</title>
		<link>https://13node.com/condiciones-y-tarifas-de-programacion-de-software-en-13node/</link>
					<comments>https://13node.com/condiciones-y-tarifas-de-programacion-de-software-en-13node/#respond</comments>
		
		<dc:creator><![CDATA[Danilo Ulloa]]></dc:creator>
		<pubDate>Tue, 03 Feb 2026 12:54:05 +0000</pubDate>
				<category><![CDATA[Legalidad]]></category>
		<category><![CDATA[Soporte]]></category>
		<guid isPermaLink="false">https://13node.com/?p=44890</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[<div class="wpb-content-wrapper"><div class="vc_row wpb_row vc_row-fluid"><div class="wpb_column vc_column_container vc_col-sm-12"><div class="vc_column-inner"><div class="wpb_wrapper">
	<div class="wpb_text_column wpb_content_element" >
		<div class="wpb_wrapper">
			<h2>Soporte y Servicios Web</h2>
<p>Ofrecemos un servicio altamente cualificado para <b>WordPress </b>y <b>Laravel</b>, donde podrás elegir diferentes packs y niveles de prioridad.</p>
<p>Incluyen soporte, optimización y limpieza de Web comprometida</p>
<h3>Planes Flexibles</h3>

		</div>
	</div>
			<link rel="stylesheet" id="wd-pricing-table-css" href="https://13node.com/wp-content/themes/woodmart/css/parts/el-pricing-table.min.css?ver=8.4.1" type="text/css" media="all" /> 						<div class="pricing-tables-wrapper wd-wpb">
				<div class="pricing-tables wd-grid-f-stretch" style="--wd-gap-lg:20px;--wd-gap-md:20px;--wd-gap-sm:20px;">
								<div class="wd-price-table wd-col  price-style-default" >
				<div class="wd-plan">
					<div class="wd-plan-name">
						<span class="wd-plan-title title">Básico 1 Hora</span>
					</div>
				</div>
				<div class="wd-plan-inner">
										<div class="wd-plan-price" style="">
						
													<span class="wd-price-value">
								50€							</span>
						
											</div>
											<div class="wd-plan-features">
															<div class="wd-plan-feature">
									Soporte Profesional								</div>
															<div class="wd-plan-feature">
									Análisis Personalizado								</div>
															<div class="wd-plan-feature">
									Modificación Módulos o CSS								</div>
															<div class="wd-plan-feature">
									Pequeñas Optimizaciones y Limpiezas								</div>
															<div class="wd-plan-feature">
									Disponibilidad 9/5								</div>
															<div class="wd-plan-feature">
									SLA 48 Horas								</div>
													</div>
										<div class="wd-plan-footer">
																								</div>
				</div>
			</div>

					<div class="wd-price-table wd-col  price-style-default" >
				<div class="wd-plan">
					<div class="wd-plan-name">
						<span class="wd-plan-title title">Básico 4 Horas</span>
					</div>
				</div>
				<div class="wd-plan-inner">
										<div class="wd-plan-price" style="">
						
													<span class="wd-price-value">
								180€							</span>
						
											</div>
											<div class="wd-plan-features">
															<div class="wd-plan-feature">
									Soporte Profesional								</div>
															<div class="wd-plan-feature">
									Análisis Personalizado								</div>
															<div class="wd-plan-feature">
									Modificación Módulos o CSS								</div>
															<div class="wd-plan-feature">
									Pequeñas Optimizaciones y Limpiezas								</div>
															<div class="wd-plan-feature">
									Disponibilidad 9/5								</div>
															<div class="wd-plan-feature">
									SLA 48 Horas								</div>
													</div>
										<div class="wd-plan-footer">
																								</div>
				</div>
			</div>

					<div class="wd-price-table wd-col  price-style-default" >
				<div class="wd-plan">
					<div class="wd-plan-name">
						<span class="wd-plan-title title">Básico 8 Horas</span>
					</div>
				</div>
				<div class="wd-plan-inner">
										<div class="wd-plan-price" style="">
						
													<span class="wd-price-value">
								400€							</span>
						
											</div>
											<div class="wd-plan-features">
															<div class="wd-plan-feature">
									Soporte Profesional								</div>
															<div class="wd-plan-feature">
									Análisis Personalizado								</div>
															<div class="wd-plan-feature">
									Modificación Módulos o CSS								</div>
															<div class="wd-plan-feature">
									Pequeñas Optimizaciones y Limpiezas								</div>
															<div class="wd-plan-feature">
									Disponibilidad 9/5								</div>
															<div class="wd-plan-feature">
									SLA 48 Horas								</div>
													</div>
										<div class="wd-plan-footer">
																								</div>
				</div>
			</div>

						</div>
			</div>
		
	<div class="wpb_text_column wpb_content_element" >
		<div class="wpb_wrapper">
			<h3>Planes Urgentes</h3>

		</div>
	</div>
			<div class="pricing-tables-wrapper wd-wpb">
				<div class="pricing-tables wd-grid-f-stretch" style="--wd-gap-lg:20px;--wd-gap-md:20px;--wd-gap-sm:20px;">
								<div class="wd-price-table wd-col  price-style-default" >
				<div class="wd-plan">
					<div class="wd-plan-name">
						<span class="wd-plan-title title">Básico 1 Hora</span>
					</div>
				</div>
				<div class="wd-plan-inner">
										<div class="wd-plan-price" style="">
						
													<span class="wd-price-value">
								100€							</span>
						
											</div>
											<div class="wd-plan-features">
															<div class="wd-plan-feature">
									Soporte Profesional								</div>
															<div class="wd-plan-feature">
									Análisis Personalizado								</div>
															<div class="wd-plan-feature">
									Modificación Módulos o CSS								</div>
															<div class="wd-plan-feature">
									Pequeñas Optimizaciones y Limpiezas								</div>
															<div class="wd-plan-feature">
									Disponibilidad 9/7								</div>
															<div class="wd-plan-feature">
									SLA 8 Horas								</div>
													</div>
										<div class="wd-plan-footer">
																								</div>
				</div>
			</div>

					<div class="wd-price-table wd-col  price-style-default" >
				<div class="wd-plan">
					<div class="wd-plan-name">
						<span class="wd-plan-title title">Básico 4 Horas</span>
					</div>
				</div>
				<div class="wd-plan-inner">
										<div class="wd-plan-price" style="">
						
													<span class="wd-price-value">
								400€							</span>
						
											</div>
											<div class="wd-plan-features">
															<div class="wd-plan-feature">
									Soporte Profesional								</div>
															<div class="wd-plan-feature">
									Análisis Personalizado								</div>
															<div class="wd-plan-feature">
									Modificación Módulos o CSS								</div>
															<div class="wd-plan-feature">
									Pequeñas Optimizaciones y Limpiezas								</div>
															<div class="wd-plan-feature">
									Disponibilidad 9/7								</div>
															<div class="wd-plan-feature">
									SLA 8 Horas								</div>
													</div>
										<div class="wd-plan-footer">
																								</div>
				</div>
			</div>

					<div class="wd-price-table wd-col  price-style-default" >
				<div class="wd-plan">
					<div class="wd-plan-name">
						<span class="wd-plan-title title">Básico 8 Horas</span>
					</div>
				</div>
				<div class="wd-plan-inner">
										<div class="wd-plan-price" style="">
						
													<span class="wd-price-value">
								760€							</span>
						
											</div>
											<div class="wd-plan-features">
															<div class="wd-plan-feature">
									Soporte Profesional								</div>
															<div class="wd-plan-feature">
									Análisis Personalizado								</div>
															<div class="wd-plan-feature">
									Modificación Módulos o CSS								</div>
															<div class="wd-plan-feature">
									Pequeñas Optimizaciones y Limpiezas								</div>
															<div class="wd-plan-feature">
									Disponibilidad 9/7								</div>
															<div class="wd-plan-feature">
									SLA 8 Horas								</div>
													</div>
										<div class="wd-plan-footer">
																								</div>
				</div>
			</div>

						</div>
			</div>
		</div></div></div></div><div class="vc_row wpb_row vc_row-fluid"><div class="wpb_column vc_column_container vc_col-sm-12"><div class="vc_column-inner"><div class="wpb_wrapper">
	<div class="wpb_text_column wpb_content_element" >
		<div class="wpb_wrapper">
			<h2>Licencias de Plugins</h2>
<p>Para más información, lea el siguiente apartado de Licencias de WordPress</p>
<p><blockquote class="wp-embedded-content" data-secret="GZooQ9jrwz"><a href="https://13node.com/support/wordpress-license/">Licencia Plugins y Themes 13Node</a></blockquote><iframe class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="«Licencia Plugins y Themes 13Node» — 13Node Informática" src="https://13node.com/support/wordpress-license/embed/#?secret=F6XKOIHUaZ#?secret=GZooQ9jrwz" data-secret="GZooQ9jrwz" width="500" height="282" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe></p>

		</div>
	</div>
</div></div></div></div>
</div>]]></content:encoded>
					
					<wfw:commentRss>https://13node.com/condiciones-y-tarifas-de-programacion-de-software-en-13node/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Activar Windows 10/11 usando la consola</title>
		<link>https://13node.com/activar-windows-10-usando-la-consola/</link>
		
		<dc:creator><![CDATA[Danilo Ulloa]]></dc:creator>
		<pubDate>Tue, 06 May 2025 07:16:25 +0000</pubDate>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[Soporte]]></category>
		<guid isPermaLink="false">https://13node.com/?p=44384</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[<div class="wpb-content-wrapper"><div class="vc_row wpb_row vc_row-fluid"><div class="wpb_column vc_column_container vc_col-sm-12"><div class="vc_column-inner"><div class="wpb_wrapper">
	<div class="wpb_text_column wpb_content_element" >
		<div class="wpb_wrapper">
			<p>Vamos a ver como activar Windows 10/11 usando la CMD (command prompt o consola), para hacerlo debemos estar conectados a internet, y no es necesaria una VPN.</p>
<p>Enseñaremos 2 Métodos, usad el que creáis mas conveniente.</p>
<h2>Activar Windows 10/11 usando CMD</h2>
<p>Usando el comando slmgr podremos cambiar nuestra licencia, así como consultar el estado y la fecha de caducidad de la misma.</p>
<h2>Lista de Claves de Windows 10 gratis</h2>
<blockquote>
<ul>
<li dir="auto"><strong>Home: </strong>TX9XD-98N7V-6WMQ6-BX7FG-H8Q99</li>
<li dir="auto"><strong>Home N:</strong>3KHY7-WNT83-DGQKR-F7HPR-844BM</li>
<li dir="auto"><strong>Home Single Language: </strong>7HNRX-D7KGG-3K4RQ-4WPJ4-YTDFH</li>
<li dir="auto"><strong>Home Country Specific:</strong>PVMJN-6DFY6–9CCP6–7BKTT-D3WVR</li>
<li dir="auto"><strong>Professional:</strong>W269N-WFGWX-YVC9B-4J6C9-T83GX</li>
<li dir="auto"><strong>Professional N:</strong>MH37W-N47XK-V7XM9-C7227-GCQG9</li>
<li dir="auto"><strong>Professional N:</strong> 9FNHH-K3HBT-3W4TD-6383H-6XYWF</li>
<li dir="auto"><strong>Education:</strong>NW6C2-QMPVW-D7KKK-3GKT6-VCFB2</li>
<li dir="auto"><strong>Education N:</strong>2WH4N-8QGBV-H22JP-CT43Q-MDWWJ</li>
<li><strong>Enterprise G:</strong> YYVX9-NTFWV-6MDM3-9PT4T-4M68B</li>
<li><strong>Enterprise G N:</strong> 44RPN-FTY23-9VTTB-MP9BX-T84FV</li>
<li dir="auto"><strong>Enterprise: </strong>NPPR9-FWDCX-D2C8J-H872K-2YT43</li>
<li dir="auto"><strong>Enterprise N:</strong>DPH2V-TTNVB-4X9Q3-TJR4H-KHJW4</li>
</ul>
</blockquote>
<h2>Activa Windows usando la línea de comandos</h2>
<h3>Paso 1: Abrir la Consola</h3>
<p><img fetchpriority="high" decoding="async" class="aligncenter size-full wp-image-43842" src="https://13node.com/wp-content/uploads/2024/09/activar-windows-10.jpg" alt="" width="784" height="640" srcset="https://13node.com/wp-content/uploads/2024/09/activar-windows-10.jpg 784w, https://13node.com/wp-content/uploads/2024/09/activar-windows-10-150x122.jpg 150w, https://13node.com/wp-content/uploads/2024/09/activar-windows-10-300x245.jpg 300w, https://13node.com/wp-content/uploads/2024/09/activar-windows-10-768x627.jpg 768w" sizes="(max-width: 784px) 100vw, 784px" /></p>
<p>Primero, haga clic en el cuadro de búsqueda o en el botón de inicio de la barra de tareas, luego escriba CMD y después de ver el Símbolo del Sistema, ejecútelo como administrador.</p>
<h3>Paso 2: Instalar la clave de cliente de KMS</h3>
<p>Para ello usaremos el siguiente comando</p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">slmgr /ipk laclavelegidamasarriba</pre>
<p>Recuerde seleccionar una de las claves de licencia de la lista anterior que coincida con su versión de Windows y reemplácela por la frase laclavelegidamasarriba en el comando.</p>
<p>Para ver la versión de Windows, haga clic derecho en el botón de inicio y seleccione la opción de Sistema. Su versión de Windows se puede ver en la segunda sección, en Edición.</p>
<p>También puede seguir estos pasos copiándolos y pegándolos. Haga clic derecho en la línea de comando y seleccione pegar para realizar el reemplazo.</p>
<h2><img decoding="async" class="aligncenter wp-image-43838 size-full" src="https://13node.com/wp-content/uploads/2024/09/activar-windows-1.webp" alt="" width="640" height="360" srcset="https://13node.com/wp-content/uploads/2024/09/activar-windows-1.webp 640w, https://13node.com/wp-content/uploads/2024/09/activar-windows-1-150x84.webp 150w, https://13node.com/wp-content/uploads/2024/09/activar-windows-1-300x169.webp 300w" sizes="(max-width: 640px) 100vw, 640px" /><img loading="lazy" decoding="async" class="aligncenter wp-image-43832 size-full" src="https://13node.com/wp-content/uploads/2024/09/activar-windows-3.png" alt="" width="406" height="132" srcset="https://13node.com/wp-content/uploads/2024/09/activar-windows-3.png 406w, https://13node.com/wp-content/uploads/2024/09/activar-windows-3-150x49.png 150w, https://13node.com/wp-content/uploads/2024/09/activar-windows-3-300x98.png 300w" sizes="auto, (max-width: 406px) 100vw, 406px" /></h2>
<h3>Paso 3: Establecer la dirección del KMS</h3>
<p>Usaremos el siguiente comando:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">slmgr /skms kms8.msguides.com</pre>
<p>para conectarnos a un servidor de validación de claves que no sea el de Microsoft. También podríamos usar kms.digiboy.ir como dirección para el KMS.</p>
<h2><img loading="lazy" decoding="async" class="aligncenter wp-image-43834 size-full" src="https://13node.com/wp-content/uploads/2024/09/activar-windows-5.png" alt="" width="384" height="144" srcset="https://13node.com/wp-content/uploads/2024/09/activar-windows-5.png 384w, https://13node.com/wp-content/uploads/2024/09/activar-windows-5-150x56.png 150w, https://13node.com/wp-content/uploads/2024/09/activar-windows-5-300x113.png 300w" sizes="auto, (max-width: 384px) 100vw, 384px" /></h2>
<h3>Paso 4: Activar Windows</h3>
<p>El último paso es activar tu Windows usando el comando:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">slmgr /ato</pre>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-43836 size-full" src="https://13node.com/wp-content/uploads/2024/09/activar-windows-7.png" alt="" width="264" height="152" srcset="https://13node.com/wp-content/uploads/2024/09/activar-windows-7.png 264w, https://13node.com/wp-content/uploads/2024/09/activar-windows-7-150x86.png 150w" sizes="auto, (max-width: 264px) 100vw, 264px" />Ahora comprobamos el estado de la activación:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-43844" src="https://13node.com/wp-content/uploads/2024/09/activar-windows-8.jpg" alt="" width="1026" height="728" srcset="https://13node.com/wp-content/uploads/2024/09/activar-windows-8.jpg 1026w, https://13node.com/wp-content/uploads/2024/09/activar-windows-8-150x106.jpg 150w, https://13node.com/wp-content/uploads/2024/09/activar-windows-8-300x213.jpg 300w, https://13node.com/wp-content/uploads/2024/09/activar-windows-8-1024x727.jpg 1024w, https://13node.com/wp-content/uploads/2024/09/activar-windows-8-768x545.jpg 768w" sizes="auto, (max-width: 1026px) 100vw, 1026px" /></p>
<p>Felicidades tu Windows se ha activado correctamente. Recuerda que puedes usar este mismo método para activar Windows 11, pero las claves de licencias son diferentes en las descritas en este artículo, pero pueden ser encontradas con facilidad en internet.</p>

		</div>
	</div>
</div></div></div></div><div class="vc_row wpb_row vc_row-fluid"><div class="wpb_column vc_column_container vc_col-sm-12"><div class="vc_column-inner"><div class="wpb_wrapper">
	<div class="wpb_text_column wpb_content_element" >
		<div class="wpb_wrapper">
			<h2>Activar Windows 10/11 usando Powershell</h2>
<ol>
<li><strong><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-44875" src="https://13node.com/wp-content/uploads/2025/05/activar-windows-powershell.png" alt="Activar Windows con Powershell" width="742" height="676" srcset="https://13node.com/wp-content/uploads/2025/05/activar-windows-powershell.png 742w, https://13node.com/wp-content/uploads/2025/05/activar-windows-powershell-300x273.png 300w, https://13node.com/wp-content/uploads/2025/05/activar-windows-powershell-150x137.png 150w" sizes="auto, (max-width: 742px) 100vw, 742px" />Abre PowerShell</strong><br />
Haz clic en el <strong>Menú de Inicio</strong>, escribe <code>PowerShell</code>, luego ábrelo.</li>
<li>Copia y pega el código de abajo:
<ul>
<li>Para <strong>Windows 8, 10, 11</strong>: <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4cc.png" alt="📌" class="wp-smiley" style="height: 1em; max-height: 1em;" />
<pre class="EnlighterJSRAW" data-enlighter-language="generic">irm https://get.activated.win | iex</pre>
<p>Para <strong>Windows 7 y superior:</strong></p>
<pre class="notranslate"><code>iex ((New-Object Net.WebClient).DownloadString('https://get.activated.win'))</code></pre>
</li>
</ul>
</li>
<li>Aparecerá el menú de activación. Seleccione las opciones resaltadas en verde para activar Windows u Office.</li>
</ol>

		</div>
	</div>
</div></div></div></div>
</div>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Denuncia ante la AEPD (Agencia Española de Protección de Datos)</title>
		<link>https://13node.com/denuncia-ante-la-aepd-agencia-espanola-de-proteccion-de-datos/</link>
		
		<dc:creator><![CDATA[Danilo Ulloa]]></dc:creator>
		<pubDate>Sun, 01 Sep 2024 08:26:27 +0000</pubDate>
				<category><![CDATA[Legalidad]]></category>
		<category><![CDATA[Soporte]]></category>
		<guid isPermaLink="false">https://13node.com/?p=42385</guid>

					<description><![CDATA[Cuando una empresa u organización, ya sea del ámbito privado o público, infringe el uso de nuestros datos personales, tenemos]]></description>
										<content:encoded><![CDATA[<p>Cuando una empresa u organización, ya sea del ámbito privado o público, infringe el uso de nuestros datos personales, tenemos el derecho de presentar una denuncia ante la Agencia Española de Protección de Datos (AEPD).</p>
<h3>¿Quiénes pueden presentar una denuncia ante la AEPD y por qué?</h3>
<p>Cualquier persona que detecte una infracción en el uso de datos personales puede presentar una denuncia ante la AEPD. No es necesario ser directamente afectado para tomar esta acción; basta con ser testigo de una posible violación de la normativa de protección de datos.</p>
<h3>¿Cuáles son las infracciones que se pueden denunciar?</h3>
<p>Las infracciones que pueden ser denunciadas están detalladas en la Ley Orgánica de Protección de Datos y Garantía de los Derechos Digitales (LOPDGDD), específicamente en los artículos 72 a 74. Si la denuncia prospera y se demuestra la infracción, esto podría resultar en sanciones para el responsable. Estas infracciones también están contempladas en el Reglamento General de Protección de Datos (RGPD). Algunos ejemplos incluyen la instalación de cámaras de videovigilancia que graban áreas públicas, el envío de comunicaciones comerciales sin consentimiento, la falta de respuesta a las solicitudes de derechos ARCO o ARSULIPO, la cesión de datos personales a terceros sin consentimiento, la publicación de fotografías donde las personas son identificables sin su autorización, y <strong>la ausencia de un aviso legal en una página web</strong>, entre otros.</p>
<h3>Sanciones según el tipo de infracción en la LOPD</h3>
<p>La Ley Orgánica de Protección de Datos (LOPD) establece diferentes tipos de sanciones económicas en función de la gravedad de la infracción cometida:</p>
<ul>
<li><strong>Infracciones leves</strong>: Sanciones de hasta 40.000 euros.</li>
<li><strong>Infracciones graves</strong>: Sanciones que van desde 40.001 euros hasta 300.000 euros.</li>
<li><strong>Infracciones muy graves</strong>: Sanciones que pueden oscilar entre 300.001 euros y 20 millones de euros o el 4% del volumen de facturación anual del infractor, aplicándose la cantidad que sea mayor.</li>
</ul>
<p>Es importante mencionar que, de acuerdo con la Ley Orgánica de Protección de Datos y Garantía de los Derechos Digitales (LOPDGDD), también se contempla el apercibimiento como una primera medida en ciertos casos de infracciones leves.</p>
<p>Además, es fundamental distinguir entre sanciones e indemnizaciones en materia de protección de datos. Las sanciones son medidas administrativas impuestas por la Agencia Española de Protección de Datos (AEPD) y suponen un pago a la entidad reguladora. Por otro lado, las indemnizaciones, tal como lo establece el artículo 82 del Reglamento General de Protección de Datos (RGPD), son compensaciones económicas que se reconocen a la persona afectada por el daño sufrido y que se obtienen a través de un proceso judicial.</p>
<h2>Pasos a seguir para tramitar una denuncia</h2>
<p>Ya sabes que puedes <strong>denunciar infracciones de la Ley de Protección de Datos</strong> y el contenido que debe tener la denuncia, pero puede que te estés preguntando «<strong>¿cómo denunciar el uso de mis datos personales?</strong>»</p>
<p>Si has identificado una infracción relacionada con la Ley de Protección de Datos y deseas presentar una denuncia ante la Agencia Española de Protección de Datos (AEPD), sigue estos pasos:</p>
<ol>
<li><strong>Ejercicio de los derechos ARCO</strong>: Antes de presentar una denuncia, es importante ejercer los derechos ARCO (Acceso, Rectificación, Cancelación, Oposición) frente al responsable del tratamiento de los datos. Esto implica enviar una solicitud formal para rectificar, eliminar o limitar el uso de tus datos personales. Por ejemplo, si recibes correos comerciales no autorizados, puedes solicitar la eliminación de tus datos de la lista de envíos. Si la infracción no te afecta directamente, puedes pasar directamente a la denuncia.</li>
<li><strong>Recopilación de pruebas</strong>: Es crucial reunir evidencias que demuestren la infracción de la normativa de protección de datos. Estas pruebas pueden ser en cualquier formato, siempre que sean claras y reproducibles. Además, si has ejercido alguno de los derechos ARCO, deberás adjuntar documentación adicional, como respuestas negativas o copias selladas de tus solicitudes.</li>
<li><strong>Completar el formulario de denuncia</strong>: Una vez recopiladas las pruebas, debes llenar el formulario de denuncia de la AEPD, proporcionando todos los detalles necesarios, como tus datos personales y una descripción clara de los hechos.</li>
<li><strong>Envío de la denuncia</strong>: La denuncia se puede enviar de manera online a través del registro electrónico de la AEPD, utilizando un certificado digital, o de forma presencial en la sede de la AEPD en Madrid.</li>
</ol>
<h3>Duración del procedimiento de denuncia</h3>
<p>El proceso de denuncia ante la AEPD se divide en dos etapas: una fase de investigación preliminar, sin un plazo específico, que puede durar alrededor de un año, y un procedimiento sancionador, que debe resolverse en un máximo de seis meses.</p>
<h3>Denuncias anónimas</h3>
<p>Es posible presentar denuncias de forma anónima, pero solo en el contexto laboral, a través del canal de denuncias de las empresas. Aunque la AEPD garantiza la confidencialidad del denunciante, no se recomienda el anonimato, ya que puede limitar la capacidad de respuesta ante denuncias falsas o malintencionadas.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Symfony Series 1: Instalar Symfony y Docker</title>
		<link>https://13node.com/symfony-series-1-instalar-symfony-y-docker/</link>
		
		<dc:creator><![CDATA[Danilo Ulloa]]></dc:creator>
		<pubDate>Mon, 22 Apr 2024 15:02:15 +0000</pubDate>
				<category><![CDATA[Redacción]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<guid isPermaLink="false">https://13node.com/?p=42334</guid>

					<description><![CDATA[Primera Parte de mi Serie de Tutoriales Symfony, instalar Symfony y Docker. Llevo tiempo queriendo hacer algo de Symfony, si]]></description>
										<content:encoded><![CDATA[<p>Primera Parte de mi Serie de Tutoriales Symfony, instalar Symfony y Docker. Llevo tiempo queriendo hacer algo de Symfony, si habéis trabajado en laravel o seguido alguno de nuestros tutoriales veréis que es muy similar.</p>
<p>Al final la serie de symfony tendrá un git compartido donde uniré todos los tutoriales que vaya sacando de Symfony.</p>
<h2>Pre requisitos</h2>
<ul>
<li>Algo de experiencia con Symfony, <a href="https://twig.symfony.com/">Twig</a>, y ORMs (especificamente Doctrine, o conocer Laravel y Blade, veréis que cambia la forma de escribirlo, pero no la forma de hacerlo).</li>
<li>Recomendamos tener conocimientos de Docker (como lo que es un <em>contenedor</em>, <em>image</em>, <em>network</em>, and <em>service</em>).</li>
<li><a href="https://getcomposer.org/">Composer</a> instalado globalmente.</li>
<li><a href="https://www.docker.com/products/docker-desktop">Docker Desktop</a>.</li>
<li><a href="https://symfony.com/doc/current/cloud/getting-started.html#installing-the-cli-tool">La herramienta Symfony CLI</a>.</li>
</ul>
<h2>Empecemos con Docker</h2>
<p>Volviendo al tema, vamos a desarrollar, usaremos docker porque así será mas sencillo de usar en cualquier máquina estos contenedores, que son entornos de ejecución pequeños y ligeros. Los contenedores hacen un uso compartido del kernel del sistema operativo subyacente, pero, por lo demás, se ejecutan de forma aislada unos de otros.</p>
<p>Al integrar Docker en tu proyecto Symfony, puedes estar seguro de que siempre que tu aplicación se esté ejecutando, el entorno y su configuración serán los mismos, independientemente de dónde esté implementada.</p>
<p>En este artículo, te mostraré cómo usar Docker con un proyecto Symfony. Nginx se utilizará como servidor web, PHP-FPM procesará las solicitudes PHP y MySQL será la base de datos completando el backend.</p>
<p>Doy por hecho que ya hemos creado nuestro directorio y tenemos la consola abierta y lista para empezar, usaremos docker compose ya que queremos instalar varios servicios:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">mkdir symfony-test
cd symfony-test
touch docker-compose.yml</pre>
<p>En nuestro archivo docker-compose.yml introducimos:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="yaml">version: '3.8'
services:</pre>
<p>Los servicios son en realidad son los contenedores.</p>
<p>En las siguientes secciones, describiremos los contenedores para nuestra base de datos MySQL, PHP y el servidor web Nginx.</p>
<h3>Definir el contenedor de la base de datos.</h3>
<p>Para definir el contenedor de la base de datos, en docker-compose.yml, actualizaremos los servicios y añadiremos el contenedor para la base de datos:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="yaml">services:

  database:
    container_name: database
    image: mysql:8.0
    command: --default-authentication-plugin=caching_sha2_password
    environment:
      MYSQL_ROOT_PASSWORD: symfony
      MYSQL_DATABASE: symfony-test
      MYSQL_USER: symfony
      MYSQL_PASSWORD: symfony
    ports:
      - '4306:3306'
    volumes:
      - ./mysql:/var/lib/mysql</pre>
<p><strong>container_name</strong> establece el nombre del contenedor cuando se ejecuta, en lugar de que Docker Compose lo genere automáticamente.</p>
<p><strong>image</strong> le permite a Docker saber a partir de qué imagen queremos construir el contenedor. En este caso, hemos especificado mysql:8.0 porque queremos usar la versión 8 de MySQL.</p>
<p>El <strong>comando</strong> especifica el complemento de autenticación que utilizará MySQL para autenticar a los usuarios. Usando <strong>environment</strong>, podemos especificar variables de entorno como el nombre, el usuario y la contraseña de la base de datos, así como la contraseña del usuario root.</p>
<p>Necesitamos un <strong>puerto</strong> para conectarnos a nuestra base de datos. Usando la clave de puertos, especificamos un puerto en nuestra máquina de desarrollo local y lo asignamos a un puerto en el contenedor que se usará para manejar las conexiones de la base de datos.</p>
<p>Finalmente especificamos el <strong>volume</strong> , en este caso, declaramos un volume para que nuestra base de datos no se pierda cuando los contenedores se destruyan o reconstruyan.</p>
<h3>Definir el contenedor PHP</h3>
<p>A diferencia del contenedor de base de datos, necesitamos especificar algunas instrucciones adicionales para configurar nuestro contenedor PHP. Para hacer esto, construiremos el contenedor PHP a partir de un <strong>Dockerfile</strong>. En el directorio raíz, symfony-test, crea un directorio llamado php. Luego, en symfony-test/php, crea un archivo llamado Dockerfile.</p>
<p>Nota: este archivo no tiene extensión.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">mkdir php
touch php/Dockerfile</pre>
<p>Luego, el symfony-test/php/Dockerfile, deberá contener este código;</p>
<pre class="EnlighterJSRAW" data-enlighter-language="dockerfile">FROM php:8.2-fpm

RUN apt update \
    &amp;&amp; apt install -y zlib1g-dev g++ git libicu-dev zip libzip-dev zip \
    &amp;&amp; docker-php-ext-install intl opcache pdo pdo_mysql \
    &amp;&amp; pecl install apcu \
    &amp;&amp; docker-php-ext-enable apcu \
    &amp;&amp; docker-php-ext-configure zip \
    &amp;&amp; docker-php-ext-install zip

WORKDIR /var/www/symfony-test

RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

RUN curl -sS https://get.symfony.com/cli/installer | bash
</pre>
<p>Aquí aparte de instalar la última versión de php, instalaremos las librerias de las que depende Symfony, el directorio donde estará nuestro contenedor, así como composer y Symfony CLI.</p>
<p>Ahora tenemos que añadirlo a nuestro docker-compose.yml justo después de la base de datos:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="dockerfile">php:
    container_name: php
    build:
      context: ./php
    ports:
      - '9000:9000'
    volumes:
      - ./app:/var/www/symfony-test
    depends_on:
      - database</pre>
<p>Este contenedor es diferente al de la base de datos, en vez de una imagen especificamos un «contexto» en el que basarse, que es nuestro Dockerfile, mapeamos puertos y volumen donde se ejecutará nuestra aplicación y dependencia de la base de datos, indicando a docker que genere la base de datos antes del contenedor de PHP.</p>
<p>No nos olvidemos de crear la carpeta app dentro de la raíz de symfony-test que es donde crearemos nuestra app de Symfony:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">mkdir app
</pre>
<h3>Definir el contenedor Nginx</h3>
<p>Antes de construir el contenedor Nginx, tenemos que hacer la configuración predeterminada para el servidor. En la raíz de symfony-test, crearemos un un directorio llamado nginx y dentro un archivo default.conf para contener nuestra configuración usando el siguiente comandos.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">mkdir -p nginx/default.conf</pre>
<p>y dentor de default.conf</p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">server {

    listen 80;
    index index.php;
    server_name localhost;
    root /var/www/symfony-test/public;
    error_log /var/log/nginx/project_error.log;
    access_log /var/log/nginx/project_access.log;

    location / {
        try_files $uri /index.php$is_args$args;
    }

    location ~ ^/index\\.php(/|$) {
        fastcgi_pass php:9000;
        fastcgi_split_path_info ^(.+\\.php)(/.*)$;
        include fastcgi_params;

        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;

        fastcgi_buffer_size 128k;
        fastcgi_buffers 4 256k;
        fastcgi_busy_buffers_size 256k;

        internal;
    }

    location ~ \\.php$ {
        return 404;
    }

}
</pre>
<p>y ahora terminamos nuestro docker-compose.yml y debería quedar así:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="yaml">version: '3.8'
services:

  database:
    container_name: database
    image: mysql:8.0
    command: --default-authentication-plugin=caching_sha2_password
    environment:
      MYSQL_ROOT_PASSWORD: symfony
      MYSQL_DATABASE: symfony-test
      MYSQL_USER: symfony
      MYSQL_PASSWORD: symfony
    ports:
      - '4306:3306'
    volumes:
      - ./mysql:/var/lib/mysql
  php:
    container_name: php
    build:
      context: ./php
    ports:
      - '9000:9000'
    volumes:
      - ./app:/var/www/symfony-test
    depends_on:
      - database
  nginx:
    container_name: nginx
    image: nginx:stable-alpine
    ports:
      - '8080:80'
    volumes:
      - ./app:/var/www/symfony-test
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - php
      - database</pre>
<h3>Construir los contenedores</h3>
<p>Una vez implementado todo esto, finalmente podemos construir nuestros contenedores ejecutando el siguiente comando.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">docker compose up -d --build</pre>
<p>Cuando termine de compilar debería saliros algo así como a mí:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-42339 size-full" src="https://13node.com/wp-content/uploads/2024/04/docker-compose.jpg" alt="" width="960" height="500" srcset="https://13node.com/wp-content/uploads/2024/04/docker-compose.jpg 960w, https://13node.com/wp-content/uploads/2024/04/docker-compose-150x78.jpg 150w, https://13node.com/wp-content/uploads/2024/04/docker-compose-300x156.jpg 300w, https://13node.com/wp-content/uploads/2024/04/docker-compose-768x400.jpg 768w" sizes="auto, (max-width: 960px) 100vw, 960px" /></p>
<p>Y si abrimos nuestro Docker Desktop deberíamos ver los contenedores funcionando:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-42340 size-full" src="https://13node.com/wp-content/uploads/2024/04/docker-desktop.jpg" alt="" width="960" height="284" srcset="https://13node.com/wp-content/uploads/2024/04/docker-desktop.jpg 960w, https://13node.com/wp-content/uploads/2024/04/docker-desktop-150x44.jpg 150w, https://13node.com/wp-content/uploads/2024/04/docker-desktop-300x89.jpg 300w, https://13node.com/wp-content/uploads/2024/04/docker-desktop-768x227.jpg 768w" sizes="auto, (max-width: 960px) 100vw, 960px" /></p>
<h2>Crear una aplicación Symfony</h2>
<p>Tenemos 2 maneras de hacerlo, ya que hemos hecho que app sea una carpeta permanente, podemos usar Symfony CLI para crearla ahí directamente o ejecutar el CLI dentro del contenedor de docker</p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">symfony new app</pre>
<p>o si es dentro del contenedor:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">symfony new .</pre>
<p>Con la aplicación creada, puedes ir a <a href="http://localhost:8080/">http://localhost:8080/</a> y verás la página predeterminada de Symfony, te dejo un ejemplo justo debajo, además, si lo has creado desde docker verás dentro de app/ que persiste todo el proyecto.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-42343 size-full" src="https://13node.com/wp-content/uploads/2024/04/symfony-7.jpg" alt="" width="960" height="643" srcset="https://13node.com/wp-content/uploads/2024/04/symfony-7.jpg 960w, https://13node.com/wp-content/uploads/2024/04/symfony-7-150x100.jpg 150w, https://13node.com/wp-content/uploads/2024/04/symfony-7-300x201.jpg 300w, https://13node.com/wp-content/uploads/2024/04/symfony-7-768x514.jpg 768w" sizes="auto, (max-width: 960px) 100vw, 960px" /></p>
<p>Con esto os dejamos y continuaremos en la segunda parte de la Serie Symfony.</p>
<p>El código final lo pondremos en <a href="https://github.com/trecenode/symfony-test">https://github.com/trecenode/symfony-test</a></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Crear cuadricula estilo Pixels</title>
		<link>https://13node.com/crear-cuadricula-estilo-pixels/</link>
		
		<dc:creator><![CDATA[Danilo Ulloa]]></dc:creator>
		<pubDate>Thu, 14 Mar 2024 19:29:15 +0000</pubDate>
				<category><![CDATA[Redacción]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<guid isPermaLink="false">https://13node.com/?p=42312</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[<div class="wpb-content-wrapper"><div class="vc_row wpb_row vc_row-fluid"><div class="wpb_column vc_column_container vc_col-sm-12"><div class="vc_column-inner"><div class="wpb_wrapper">
	<div class="wpb_text_column wpb_content_element" >
		<div class="wpb_wrapper">
			<p>¿Que tal estimados lectores? Este tutorial que os traigo es para hacer una cuadrícula estilo pixels, porque la vida en cuadraditos es mejor, así que desarrollaremos una interfaz gráfica basada en cuadrados.</p>
<h2>Librerías y Preparación</h2>
<p>Necesitamos dos librerías, la primera jQuery y la segunda Masonry de David DeSandro, que incluiremos justo antes del <code>&lt;/body&gt;</code> de nuestro archivo.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="html">&lt;script src="https://code.jquery.com/jquery-3.6.0.min.js"&gt;&lt;/script&gt;
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/masonry/4.2.2/masonry.pkgd.min.js"&gt;&lt;/script&gt;
&lt;script&gt;
// Inicializamos Masonry
$(document).ready(function(){
  $('.grid-container').masonry({
    itemSelector: '.grid-item',
    columnWidth: '.grid-item',
    horizontalOrder: true
  });
});
&lt;/script&gt;</pre>
<h2>Generar el HTML</h2>
<p>El HTML es sencillo, crearemos un <code>grid-container</code> para contener nuestros pixels y <code>grid-item</code> para cada pixel.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="html">&lt;div class="grid-container"&gt;
  &lt;div class="grid-item bg-text"&gt;
        &lt;h2&gt;Pixels&lt;/h2&gt;&lt;br&gt;
        Crea una cuadricula en forma de pixels para mostrar tu contenido.
    &lt;/div&gt;
    &lt;div class="grid-item grid-item-large bg-text"&gt;
        &lt;h2&gt;¿Tutorial?&lt;/h2&gt;&lt;br&gt;
        &lt;a href="https://13node.com/redaccion/tutoriales/crear-cuadricula-estilo-pixels/"&gt;Leer tutorial en 13Node.com&lt;/a&gt;
    &lt;/div&gt;
    &lt;div class="grid-item grid-item-large-v bg-image"&gt;
        &lt;img src="http://placehold.it/384x384/"&gt;
    &lt;/div&gt;
&lt;/div&gt;</pre>
<p>Como ves en el ejemplo, también hemos creado otras clases que explicaremos en detalle en el css.</p>
<h2>El CSS, la guinda del pastel</h2>
<pre class="EnlighterJSRAW" data-enlighter-language="css">.grid-container {
    margin: 0 auto;
    max-width: 100%;
    padding: 0;
    box-sizing: border-box;
    background:
        linear-gradient(90deg, #f2f2f2 1px, transparent 0),
        linear-gradient(#f2f2f2 1px, transparent 0),
        linear-gradient(90deg, #f2f2f2 1px, transparent 0),
        linear-gradient(#f2f2f2 1px, transparent 0);
    background-size:
        192px 192px,
        192px 192px,
        192px 192px,
        192px 192px; 
}

.grid-item {
    width: 192px;
    height: 192px;
    max-width: 192px;
    max-height: 192px;
    box-sizing: border-box;
    padding: 20px;
}

.grid-container .grid-item.grid-item-large {
    width: 384px;
    height: 192px;
    max-width: 384px;
    max-height: 192px;
}

.grid-container .grid-item.grid-item-large-v {
    width: 384px;
    height: 384px;
    max-width: 384px;
    max-height: 384px;
}

@media (min-width: 768px) {
    .grid-container .grid-item {
        width: calc(100% / 3);
    }
}

@media (min-width: 992px) {
    .grid-container .grid-item {
        width: calc(100% / 4); 
    }
}

.bg-image {
  padding: 0;
}

.bg-text {
  background-color: #f7f7f7;
}
</pre>
<div class="flex flex-grow flex-col max-w-full">
<div class="min-h-&#091;20px&#093; text-message flex flex-col items-start gap-3 whitespace-pre-wrap break-words &#091;.text-message+&amp;&#093;:mt-5 overflow-x-auto" data-message-author-role="assistant" data-message-id="3778bbd6-24e8-4413-964e-8648b55d4a52">
<div class="markdown prose w-full break-words dark:prose-invert dark">
<p>Este CSS está diseñado para un layout de cuadrícula (<code>grid</code>) con contenedores y elementos de cuadrícula, optimizado para diferentes tamaños de pantalla y con estilos específicos para imágenes y texto. A continuación, te explico cada parte:</p>
<h3><code>.grid-container</code></h3>
<ul>
<li><strong><code>margin: 0 auto;</code></strong>: Centra el contenedor en la página.</li>
<li><strong><code>max-width: 100%;</code></strong>: Asegura que el contenedor no exceda el ancho de la ventana del navegador.</li>
<li><strong><code>padding: 0;</code></strong>: Elimina el relleno interno del contenedor.</li>
<li><strong><code>box-sizing: border-box;</code></strong>: Incluye el padding y el borde en el cálculo del ancho y alto del elemento.</li>
<li><strong><code>background:</code></strong>: Crea un patrón de cuadrícula usando gradientes lineales. Se repite en cuatro direcciones para formar un patrón que simula las líneas de una cuadrícula. Cada línea tiene 1px de ancho y se separa cada 192px, creando un efecto de cuadrícula sobre un fondo transparente.</li>
</ul>
<h3><code>.grid-item</code></h3>
<ul>
<li>Establece el tamaño de los elementos de la cuadrícula a 192px por 192px.</li>
<li><strong><code>box-sizing: border-box;</code></strong>: El tamaño total del elemento incluye su relleno y borde.</li>
<li><strong><code>padding: 20px;</code></strong>: Añade espacio interior alrededor del contenido dentro de cada elemento de la cuadrícula.</li>
</ul>
<h3><code>.grid-container .grid-item.grid-item-large</code></h3>
<ul>
<li>Variante del elemento de cuadrícula que es dos veces más ancho que el estándar. Útil para elementos que necesitan destacarse o contener más contenido.</li>
</ul>
<h3><code>.grid-container .grid-item.grid-item-large-v</code></h3>
<ul>
<li>Variante que es tanto doble de ancho como de alto, ideal para elementos de gran tamaño o más significativos dentro de la cuadrícula.</li>
</ul>
<h3><code>@media (min-width: 768px)</code> y <code>@media (min-width: 992px)</code></h3>
<ul>
<li>Estas son reglas de media query que ajustan el ancho de los elementos de la cuadrícula basándose en el ancho de la pantalla, permitiendo un diseño responsivo. A medida que la pantalla se hace más grande, los elementos ocupan una menor fracción del ancho del contenedor, pasando de ocupar 1/3 a 1/4 del ancho disponible, lo que permite una disposición más flexible y adaptativa.</li>
</ul>
<h3><code>.bg-image</code></h3>
<ul>
<li>Estilo específico para elementos de imagen dentro de la cuadrícula, eliminando el relleno para que la imagen pueda ocupar todo el espacio disponible.</li>
</ul>
<h3><code>.bg-text</code></h3>
<ul>
<li>Define un fondo claro para elementos de texto, mejorando la legibilidad y contrastando con el posible patrón de cuadrícula del fondo.</li>
</ul>
<p>Este conjunto de estilos ofrece una base robusta para crear un sistema de cuadrícula visualmente atractivo y responsivo, adecuado para galerías de imágenes, portfolios, y más, con especial atención a la presentación de elementos destacados y la adaptabilidad a diferentes tamaños de pantalla.</p>
</div>
</div>
</div>
<p>Podemos obviamente experimentar y hacer cosas, os dejamos el codepen donde experimentamos.</p>

		</div>
	</div>
</div></div></div></div><div class="vc_row wpb_row vc_row-fluid"><div class="wpb_column vc_column_container vc_col-sm-12"><div class="vc_column-inner"><div class="wpb_wrapper">
	<div class="wpb_raw_code wpb_raw_html wpb_content_element" >
		<div class="wpb_wrapper">
			<p class="codepen" data-height="300" data-slug-hash="qBwapMZ" data-user="trecenode" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>Mira el Pen <a href="https://codepen.io/trecenode/pen/qBwapMZ">
  Pixels! Tutorial 13Node.com</a> by Danilo U. (<a href="https://codepen.io/trecenode">@trecenode</a>)
  en CodePen.</span>
</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>
		</div>
	</div>
</div></div></div></div>
</div>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Tutorial para crear theme de libros desde cero con CPT</title>
		<link>https://13node.com/tutorial-para-crear-theme-desde-cero-con-cpt/</link>
		
		<dc:creator><![CDATA[Danilo Ulloa]]></dc:creator>
		<pubDate>Wed, 13 Mar 2024 14:46:40 +0000</pubDate>
				<category><![CDATA[Informática]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[Wordpress]]></category>
		<guid isPermaLink="false">https://13node.com/?p=42308</guid>

					<description><![CDATA[WordPress es una plataforma de gestión de contenido extremadamente versátil que permite a los usuarios crear una amplia variedad de]]></description>
										<content:encoded><![CDATA[<p>WordPress es una plataforma de gestión de contenido extremadamente versátil que permite a los usuarios crear una amplia variedad de sitios web, desde blogs personales hasta tiendas en línea complejas. Uno de los puntos fuertes de WordPress es su capacidad para personalizarse a través de temas y plugins.</p>
<p>En este tutorial, nos centraremos en la creación de un tema de WordPress desde cero. Utilizaremos un enfoque básico pero funcional para mostrar libros. Utilizaremos un Custom Post Type para representar los libros en nuestro sitio web y crearemos plantillas específicas para mostrarlos como queremos.</p>
<h2>Definir la plantilla</h2>
<p>Primero creamos nuestro style.css que es básico para que wordpress nos entienda, en nuestro caso solo lo usamos para enlazar al css que realmente vamos a usar:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="css">/*
Theme Name: Trecebook
Theme URI: https://13node.com/informatica/wordpress/tutorial-para-crear-theme-desde-cero-con-cpt/
Description: Tema básico para mostrar libros en WordPress.
Author: 13Node
Author URI:  https://13node.com
Version: 1.0
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Text Domain: trecebook
*/

@import url("css/init.css");
@import url("css/main.css");
@import url("css/media.css");</pre>
<h2>Crear el Custom Post Type &#8216;Libro&#8217; y la Taxonomía &#8216;Género&#8217;</h2>
<p>Este es el segundo paso, crearemos nuestras funciones en un nuevo archivo llamado <code>functions.php</code> y como todo archivo functions.php empezamos con el encabezado del tema:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="php">&lt;?php
/*
Theme Name: Trecebook
Theme URI: https://13node.com/informatica/wordpress/tutorial-para-crear-theme-desde-cero-con-cpt/
Description: Tema básico para mostrar libros en WordPress.
Author: 13Node
Author URI: https://13node.com
Version: 1.0
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Text Domain: trecebook
*/
</pre>
<p>Ahora añadiremos el código de nuestro CPT para poder añadir nuestros libros desde el backoffice de wordpress:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="php">function trecebook_cpt() {
    $labels = array(
        'name'               =&gt; _x('Libros', 'post type general name', 'trecetextdomain'),
        'singular_name'      =&gt; _x('Libro', 'post type singular name', 'trecetextdomain'),
        'menu_name'          =&gt; _x('Libros', 'admin menu', 'trecetextdomain'),
        'name_admin_bar'     =&gt; _x('Libro', 'add new on admin bar', 'trecetextdomain'),
        'add_new'            =&gt; _x('Agregar Nuevo', 'book', 'trecetextdomain'),
        'add_new_item'       =&gt; __('Agregar Nuevo Libro', 'trecetextdomain'),
        'new_item'           =&gt; __('Nuevo Libro', 'trecetextdomain'),
        'edit_item'          =&gt; __('Editar Libro', 'trecetextdomain'),
        'view_item'          =&gt; __('Ver Libro', 'trecetextdomain'),
        'all_items'          =&gt; __('Todos los Libros', 'trecetextdomain'),
        'search_items'       =&gt; __('Buscar Libros', 'trecetextdomain'),
        'parent_item_colon'  =&gt; __('Libro Padre:', 'trecetextdomain'),
        'not_found'          =&gt; __('No se encontraron libros.', 'trecetextdomain'),
        'not_found_in_trash' =&gt; __('No se encontraron libros en la papelera.', 'trecetextdomain')
    );

    $args = array(
        'labels'             =&gt; $labels,
        'public'             =&gt; true,
        'publicly_queryable' =&gt; true,
        'show_ui'            =&gt; true,
        'show_in_menu'       =&gt; true,
        'query_var'          =&gt; true,
        'rewrite'            =&gt; array('slug' =&gt; 'libro'),
        'capability_type'    =&gt; 'post',
        'has_archive'        =&gt; true,
        'hierarchical'       =&gt; false,
        'menu_position'      =&gt; null,
        'supports'           =&gt; array('title', 'editor', 'thumbnail')
    );

    register_post_type('libro', $args);

    add_action('add_meta_boxes', 'add_libro_meta_boxes');
    add_action('save_post', 'save_libro_meta_data');
}
</pre>
<p>A continuación creamos las meta boxes personalizadas que necesitamos, para la portada y el título usaremos la imagen destacada y el propio título de wordpress.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="php">function add_libro_meta_boxes() {
    add_meta_box(
        'libro_meta_box',
        'Detalles del Libro',
        'render_libro_meta_box',
        'libro',
        'normal',
        'default'
    );
}

function render_libro_meta_box($post) {
    wp_nonce_field('save_libro_meta_data', 'libro_meta_box_nonce');

    $autores = get_post_meta($post-&gt;ID, 'autores', true);
    $anio_publicacion = get_post_meta($post-&gt;ID, 'anio_publicacion', true);

    echo '&lt;label for="autores"&gt;Autores&lt;/label&gt;';
    echo '&lt;input type="text" id="autores" name="autores" value="' . esc_attr($autores) . '" size="25" /&gt;';
    echo '&lt;br&gt;';
    echo '&lt;label for="anio_publicacion"&gt;Año de publicación&lt;/label&gt;';
    echo '&lt;input type="text" id="anio_publicacion" name="anio_publicacion" value="' . esc_attr($anio_publicacion) . '" size="25" /&gt;';
}

function save_libro_meta_data($post_id) {
    if (!isset($_POST['libro_meta_box_nonce'])) {
        return;
    }

    if (!wp_verify_nonce($_POST['libro_meta_box_nonce'], 'save_libro_meta_data')) {
        return;
    }

    if (defined('DOING_AUTOSAVE') &amp;&amp; DOING_AUTOSAVE) {
        return;
    }

    if (!current_user_can('edit_post', $post_id)) {
        return;
    }

    $autores = sanitize_text_field($_POST['autores']);
    $anio_publicacion = sanitize_text_field($_POST['anio_publicacion']);

    update_post_meta($post_id, 'autores', $autores);
    update_post_meta($post_id, 'anio_publicacion', $anio_publicacion);
}

add_action('init', 'trecebook_cpt');
</pre>
<p>Queremos que en vez de categorías, se categorice (valga la redundancia) en Géneros:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="php">function trecebook_taxonomia_genero() {
    $labels = array(
        'name'              =&gt; _x('Géneros', 'taxonomy general name', 'trecetextdomain'),
        'singular_name'     =&gt; _x('Género', 'taxonomy singular name', 'trecetextdomain'),
        'search_items'      =&gt; __('Buscar Géneros', 'trecetextdomain'),
        'all_items'         =&gt; __('Todos los Géneros', 'trecetextdomain'),
        'parent_item'       =&gt; __('Género Padre', 'trecetextdomain'),
        'parent_item_colon' =&gt; __('Género Padre:', 'trecetextdomain'),
        'edit_item'         =&gt; __('Editar Género', 'trecetextdomain'),
        'update_item'       =&gt; __('Actualizar Género', 'trecetextdomain'),
        'add_new_item'      =&gt; __('Agregar Nuevo Género', 'trecetextdomain'),
        'new_item_name'     =&gt; __('Nuevo Nombre de Género', 'trecetextdomain'),
        'menu_name'         =&gt; __('Género', 'trecetextdomain'),
    );
    $args = array(
        'hierarchical'      =&gt; true,
        'labels'            =&gt; $labels,
        'show_ui'           =&gt; true,
        'show_admin_column' =&gt; true,
        'query_var'         =&gt; true,
        'rewrite'           =&gt; array('slug' =&gt; 'genero'),
    );
    register_taxonomy('genero', array('libro'), $args);
}
add_action('init', 'trecebook_taxonomia_genero');
</pre>
<p>Y terminamos con nuestra query para mostrar solo los CPT de Libros.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="php">function trece_libros_query() {
    $args = array(
        'post_type' =&gt; 'libro',
        'posts_per_page' =&gt; -1,
    );

    return new WP_Query($args);
}</pre>
<h2>Plantilla Base del Tema</h2>
<p>Primero, necesitamos crear la estructura básica de nuestro tema de WordPress. Aquí está el código para nuestra plantilla base (<code>index.php</code>) con nuestra query solo para libros:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="php">&lt;?php get_header(); ?&gt;

&lt;section class="content content-main"&gt;
    &lt;div class="content-video col8-12 col12-12-m"&gt;
    &lt;iframe width="560" height="315" src="https://www.youtube.com/embed/Yb_zOs6v87U?si=i-7IFgWt3smv-oGr" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen&gt;&lt;/iframe&gt;
    &lt;/div&gt;
    &lt;div class="content-txt col8-12 col10-12-m col12-12-s"&gt;
        &lt;h1&gt;Lorem ipsum dolor, sit amet consectetur adipisicing elit.&lt;/h1&gt;
    &lt;/div&gt;
&lt;/section&gt;

&lt;section class="content content-grid"&gt;
&lt;?php
$libros_query = trece_libros_query();

if ($libros_query-&gt;have_posts()) :
    while ($libros_query-&gt;have_posts()) : $libros_query-&gt;the_post();
?&gt;
        &lt;div class="content-grid-item col3-12 col4-12-m col6-12-s"&gt;
            &lt;a href="&lt;?php the_permalink(); ?&gt;"&gt;
                &lt;div class="content-grid-item-img"&gt;&lt;?php the_post_thumbnail('thumbnail'); ?&gt;&lt;/div&gt;
                &lt;div class="content-grid-item-title"&gt;
                    &lt;h2&gt;&lt;?php the_title(); ?&gt;&lt;/h2&gt;
                &lt;/div&gt;
            &lt;/a&gt;
        &lt;/div&gt;
&lt;?php
    endwhile;
    wp_reset_postdata();
else :
    echo '&lt;p class="text-center"&gt;No se encontraron libros.&lt;/p&gt;';
endif;
?&gt;
&lt;/section&gt;

&lt;?php get_footer(); ?&gt;
</pre>
<p>Obviamente necesitaremos el <code>header.php</code>:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="php">&lt;!DOCTYPE html&gt;
&lt;html &lt;?php language_attributes(); ?&gt;&gt;
&lt;head&gt;
    &lt;meta charset="&lt;?php bloginfo('charset'); ?&gt;"&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1"&gt;
    &lt;title&gt;&lt;?php wp_title(); ?&gt;&lt;/title&gt;
    &lt;?php wp_head(); ?&gt;
    &lt;link rel="stylesheet" href="&lt;?php echo get_stylesheet_uri(); ?&gt;"&gt;
&lt;/head&gt;
&lt;body &lt;?php body_class(); ?&gt;&gt;

&lt;header class="header"&gt;
    &lt;a href="&lt;?php echo esc_url(home_url('/')); ?&gt;" id="logo"&gt;&lt;?php bloginfo('name'); ?&gt;&lt;/a&gt;
&lt;/header&gt;</pre>
<p>Y el <code>footer.php</code>:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="php">&lt;footer class="footer"&gt;
    &lt;p&gt;© &lt;?php echo date('Y'); ?&gt; &lt;?php bloginfo('name'); ?&gt;&lt;/p&gt;
&lt;/footer&gt;

&lt;?php wp_footer(); ?&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<h3>Vista de Libros</h3>
<p>Y para terminar la plantilla de los libros que comprobaremos si hay cada metabox rellena, sino no lo mostramos.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="php">&lt;?php get_header(); ?&gt;

&lt;div id="content"&gt;
    &lt;?php while (have_posts()) : the_post(); ?&gt;
        &lt;section &lt;?php post_class('content content-libro'); ?&gt;&gt;
            &lt;?php
                $autores = get_post_meta(get_the_ID(), 'autores', true);
                $anio_publicacion = get_post_meta(get_the_ID(), 'anio_publicacion', true);
                $genero = get_the_terms(get_the_ID(), 'genero');

                if (has_post_thumbnail()) {
                    echo '&lt;div class="content-libro-img col6-12 col12-12-s"&gt;' . get_the_post_thumbnail(get_the_ID(), 'large') . '&lt;/div&gt;';
                }
            ?&gt;
            &lt;div class="content-libro-info col6-12 col12-12-s"&gt;
                &lt;h1&gt;&lt;?php the_title(); ?&gt;&lt;/h1&gt;
                &lt;ul&gt;
                    &lt;?php 
                    if ($autores) {
                        echo '&lt;li&gt;&lt;h2&gt;' . $autores . '&lt;/h2&gt;&lt;/li&gt;';
                    } 
                    if ($anio_publicacion) {
                        echo '&lt;p&gt;&lt;strong&gt;Año de publicación:&lt;/strong&gt; ' . $anio_publicacion . '&lt;/p&gt;';
                    }
                    if ($genero) {
                        echo '&lt;p&gt;&lt;strong&gt;Género:&lt;/strong&gt; ';
                        foreach ($genero as $term) {
                            echo $term-&gt;name . ' ';
                        }
                        echo '&lt;/p&gt;';
                    }
                    ?&gt;
                &lt;/ul&gt;
                &lt;?php the_content(); ?&gt;
            &lt;/div&gt;
        &lt;/section&gt;
    &lt;?php endwhile; ?&gt;
&lt;/div&gt;

&lt;?php get_footer(); ?&gt;</pre>
<p>&nbsp;</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>La Confluencia del Diseño Web y SEO</title>
		<link>https://13node.com/la-confluencia-del-diseno-web-y-seo/</link>
		
		<dc:creator><![CDATA[Danilo Ulloa]]></dc:creator>
		<pubDate>Wed, 13 Mar 2024 10:32:22 +0000</pubDate>
				<category><![CDATA[Posicionamiento]]></category>
		<category><![CDATA[Redacción]]></category>
		<guid isPermaLink="false">https://13node.com/?p=42301</guid>

					<description><![CDATA[En el dinámico entorno digital de hoy, la excelencia en diseño web y la maestría en SEO se presentan como]]></description>
										<content:encoded><![CDATA[<p>En el dinámico entorno digital de hoy, la excelencia en diseño web y la maestría en SEO se presentan como los bastiones esenciales para cualquier negocio en busca de prominencia en línea. En 13Node Informática, entendemos profundamente cómo un sitio web estéticamente agradable y funcional no solo captura el interés de los visitantes sino que también facilita su recorrido por el sitio, enriqueciendo así su experiencia total.</p>
<p><strong>Claves del Diseño Web con Perspectiva SEO</strong></p>
<p>La interacción entre el diseño web y el SEO desempeña un papel pivotal en el desarrollo de sitios web que no solo encantan a primera vista sino que también están afinados para resonar con los algoritmos de los motores de búsqueda.</p>
<div id="attachment_42304" style="width: 1034px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-42304" class="wp-image-42304 size-large" src="https://13node.com/wp-content/uploads/2024/03/wpo-y-seo-1-1024x567.jpg" alt="WPO y SEO" width="1024" height="567" srcset="https://13node.com/wp-content/uploads/2024/03/wpo-y-seo-1-1024x567.jpg 1024w, https://13node.com/wp-content/uploads/2024/03/wpo-y-seo-1-150x83.jpg 150w, https://13node.com/wp-content/uploads/2024/03/wpo-y-seo-1-1200x665.jpg 1200w, https://13node.com/wp-content/uploads/2024/03/wpo-y-seo-1-300x166.jpg 300w, https://13node.com/wp-content/uploads/2024/03/wpo-y-seo-1-768x425.jpg 768w, https://13node.com/wp-content/uploads/2024/03/wpo-y-seo-1.jpg 1280w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><p id="caption-attachment-42304" class="wp-caption-text">Resultados Reales de WPO con un cliente propio</p></div>
<p><strong>La Esencialidad de la Responsividad</strong></p>
<p>Con la era digital en constante evolución, adaptarse a diversas pantallas no es una opción sino un requisito. Un sitio web responsivo asegura una experiencia sin contratiempos para todos los usuarios, factor clave para el posicionamiento SEO dado que Google favorece aquellos sitios adaptativos en sus clasificaciones. Más del 70% del tráfico web actual proviene de dispositivos móviles. Para evaluar tu sitio en diferentes dispositivos, herramientas en línea como <a href="https://responsivetesttool.com/" target="_new" rel="noopener">https://responsivetesttool.com/</a> pueden ser de gran ayuda.</p>
<p><strong>Optimización de Imágenes y Tiempos de Carga</strong></p>
<p>Las imágenes enriquecen visualmente, pero su peso puede ser un lastre para el tiempo de carga del sitio. Emplear técnicas de compresión de imágenes sin sacrificar calidad es crucial para mantener un balance óptimo entre estética y funcionalidad, lo cual tiene un impacto positivo en el SEO.</p>
<p><strong>El Diseño Web Aprendiendo de SEO</strong></p>
<p>Es vital que el diseño web se nutra de los principios de SEO para asegurar que los sitios no solo destaquen estéticamente sino que también alcancen una posición destacada en los resultados de búsqueda orgánica.</p>
<p><strong>Optimizando la Experiencia del Usuario (UX)</strong></p>
<p>La navegación intuitiva y accesibilidad de un sitio web es primordial. Esto abarca desde un diseño adaptable hasta menús claros y una estructura de sitio que guíe a los usuarios de manera fluida. Herramientas como las migas de pan mejoran la navegación y el enlazado interno, potenciando así el SEO.</p>
<div id="attachment_42305" style="width: 310px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-42305" class="size-medium wp-image-42305" src="https://13node.com/wp-content/uploads/2024/03/migas-de-pan-ecommerce-300x80.png" alt="migas de pan ecommerce" width="300" height="80" srcset="https://13node.com/wp-content/uploads/2024/03/migas-de-pan-ecommerce-300x80.png 300w, https://13node.com/wp-content/uploads/2024/03/migas-de-pan-ecommerce-150x40.png 150w, https://13node.com/wp-content/uploads/2024/03/migas-de-pan-ecommerce-768x206.png 768w, https://13node.com/wp-content/uploads/2024/03/migas-de-pan-ecommerce.png 798w" sizes="auto, (max-width: 300px) 100vw, 300px" /><p id="caption-attachment-42305" class="wp-caption-text">Ejemplo de migas de pan para un e-commerce</p></div>
<p><strong>Importancia de la Velocidad de Carga</strong></p>
<p>Una página web que carga rápido no solo mejora la experiencia del usuario sino que también hace que sea preferida sobre otras por los motores de búsqueda. Optimizar imágenes, reducir el código JavaScript y CSS, y utilizar técnicas de carga diferida son estrategias esenciales para acelerar los tiempos de carga.</p>
<p><strong>El Papel del SEO Técnico</strong></p>
<p>Incorporar una estructura de URL clara, el uso adecuado de etiquetas HTML, y menús accesibles son fundamentales para un rastreo e indexación efectivos por parte de los motores de búsqueda.</p>
<p><strong>Contenido y Uso de Palabras Clave</strong></p>
<p>El contenido debe ser informativo, relevante, y actual, con una integración estratégica de palabras clave para evitar el sobreuso. Además, es crucial que los elementos visuales estén también optimizados para SEO.</p>
<p><strong>Estructuración de Código y Datos Estructurados</strong></p>
<p>Un código limpio y la implementación de datos estructurados son cruciales para mejorar la comprensión del contenido por parte de los motores de búsqueda, mejorando así la visibilidad y posicionamiento en los resultados de búsqueda.</p>
<p><strong>Preguntas Frecuentes:</strong></p>
<ul>
<li><strong>¿Cómo influye el diseño web en el SEO?</strong> Afecta directamente a la usabilidad, velocidad de carga, e indexabilidad.</li>
<li><strong>¿Puede un gran diseño web suplir un SEO deficiente?</strong> Aunque es vital, debe complementarse con una sólida estrategia SEO.</li>
<li><strong>Mejoras en diseño para potenciar el SEO?</strong> Enfocarse en UX, optimizar multimedia, y asegurar responsividad y fácil navegación.</li>
<li><strong>¿Por qué es crítico el diseño responsivo?</strong> Es primordial para el ranking en Google.</li>
<li><strong>Impacto de la velocidad de carga en SEO?</strong> Es crucial, los sitios rápidos tienen mejor posición.</li>
<li><strong>Datos estructurados: ¿Por qué son importantes?</strong> Mejoran la comprensión del contenido por parte de motores de búsqueda, potenciando la visibilidad.</li>
</ul>
<p>Con una década de experiencia, 13Node Informática se enorgullece de ser líder en integrar diseño web y SEO, propulsando a nuestros clientes hacia el éxito digital.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>¿Como hacer que Google Fonts cumpla con el GDPR?</title>
		<link>https://13node.com/como-hacer-que-google-fonts-cumpla-con-el-gdpr/</link>
		
		<dc:creator><![CDATA[Danilo Ulloa]]></dc:creator>
		<pubDate>Sat, 30 Sep 2023 16:48:29 +0000</pubDate>
				<category><![CDATA[Legalidad]]></category>
		<category><![CDATA[Soporte]]></category>
		<guid isPermaLink="false">https://13node.com/?p=42179</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[<div class="wpb-content-wrapper"><div class="vc_row wpb_row vc_row-fluid"><div class="wpb_column vc_column_container vc_col-sm-12"><div class="vc_column-inner"><div class="wpb_wrapper">
	<div class="wpb_text_column wpb_content_element" >
		<div class="wpb_wrapper">
			<div class="flex flex-grow flex-col gap-3 max-w-full">
<div class="min-h-&#091;20px&#093; flex flex-col items-start gap-3 overflow-x-auto whitespace-pre-wrap break-words">
<div class="markdown prose w-full break-words dark:prose-invert light">
<p><strong><span style="color: #ff0000;">Advertencia</span>: Las autoridades legales pueden multarte si usas la API de Google Fonts en tu página web.</strong></p>
<p>La privacidad de los datos y la protección de la información personal son una preocupación seria para los sitios web, especialmente para aquellos que atienden a usuarios de la Unión Europea (UE), que están protegidos por la ley de privacidad y protección de datos más estricta del mundo: el <a href="https://gdpr.eu">Reglamento General de Protección de Datos (RGPD)</a>.</p>
<p>En enero de 2022, la Datenschutzbehörde (Ministerio Federal de Justicia de Austria) penalizó a un sitio web no identificado por utilizar los servicios de Google Analytics (GA) y enviar la información privada de los usuarios a Google sin su consentimiento. El tribunal regional de Múnich, Alemania, ordenó al propietario del sitio web pagar una multa de 100 euros por la violación del artículo 44 del RGPD.</p>
<p>Esto plantea una gran interrogante sobre el cumplimiento de los otros servicios de la empresa, como Google Font API, con la normativa del RGPD.</p>
<p>Recientemente, la «compliance de Google Fonts API con la normativa del RGPD» ha sido un tema candente para los webmasters de todo el mundo, con los tribunales penalizando a los sitios web que utilizan servicios de fuentes de terceros, como Google Fonts, por violar la privacidad de los usuarios.</p>
<p>Vamos a explorar más sobre el cumplimiento del RGPD por parte de Google Fonts.</p>
<h2>¿Son compatibles Google Fonts con el RGPD?</h2>
<p><strong>No, Google Fonts no cumple con el RGPD.</strong></p>
<p>Google Fonts es un servicio de fuentes web que ofrece una API para entregar archivos de fuentes. Google Fonts recopila las solicitudes de los usuarios, obtiene los archivos de sus servidores y los entrega a los usuarios finales para producir fuentes. En este proceso, el servidor de Google necesita la dirección IP del receptor para entregar los archivos.</p>
<p>Según la normativa del RGPD, una dirección IP es información personal, que se puede utilizar para identificar al usuario. Compartir esta información personal de los usuarios con servicios de terceros sin su consentimiento viola el derecho a la autodeterminación informativa del usuario. Por lo tanto, Google Fonts viola el RGPD.</p>
<p>En enero de 2022, un tribunal alemán declaró que Google Fonts no cumple con el RGPD/DSGVO. Por lo tanto, los sitios web que utilizan la API de Google Fonts actualmente están en la mira de la autoridad de RGPD de la UE.</p>
<h2>El RGPD de la UE afecta a las fuentes tipográficas de Google</h2>
<p>Según BuiltWith, actualmente más de 57 millones de sitios web en producción utilizan la API de Google Fonts. Las decisiones tomadas por el tribunal alemán con respecto al cumplimiento del RGPD de los servicios de fuentes de terceros, como Google Fonts, están destinadas a crear un gran caos entre esta gran comunidad de propietarios de sitios web.</p>
<p>La multa por utilizar Google Fonts en los sitios web puede afectar gravemente a las empresas. Según las fuentes, la multa por incumplimiento del RGPD de Google Fonts puede llegar a los 250.000 euros por infracción. Evita sanciones elevadas haciendo que Google Fonts cumpla con el RGPD en su sitio web.</p>
<h2>Prepara tu sitio web para el cumplimiento del RGPD de Google Fonts</h2>
<p>Debes alojar las fuentes de Google en tu servidor para cumplir con la normativa del RGPD. Si no eres una persona experta en tecnología, te recomendamos que busques la ayuda de expertos profesionales para ayudarte a alojar las fuentes de Google localmente en tu servidor. Nuestro equipo de desarrolladores te ayudará a hacer que Google Fonts cumpla con el RGPD al alojarlas en tu servidor local.</p>
</div>
</div>
</div>

		</div>
	</div>
</div></div></div></div><div class="vc_row wpb_row vc_row-fluid"><div class="wpb_column vc_column_container vc_col-sm-12"><div class="vc_column-inner"><div class="wpb_wrapper">
	<div class="wpb_text_column wpb_content_element trece-info" >
		<div class="wpb_wrapper">
			<p>¡Los profesionales de 13Node pueden ayudarte a hacer que Google Fonts cumpla con la normativa del RGPD en tu sitio de WordPress. ¡<a href="https://13node.com">Contáctanos</a> ahora!</p>

		</div>
	</div>
</div></div></div></div><div class="vc_row wpb_row vc_row-fluid"><div class="wpb_column vc_column_container vc_col-sm-12"><div class="vc_column-inner"><div class="wpb_wrapper">
	<div class="wpb_text_column wpb_content_element" >
		<div class="wpb_wrapper">
			<h2 class="font-claude-response-body break-words whitespace-normal leading-&#091;1.7&#093;">Bunny Fonts: La alternativa que cumple completamente con el GDPR</h2>
<p class="font-claude-response-body break-words whitespace-normal leading-&#091;1.7&#093;">Para quienes buscan una solución que cumpla de forma nativa con el GDPR sin necesidad de configuraciones adicionales, Bunny Fonts se presenta como una excelente alternativa a Google Fonts. Este servicio, desarrollado por bunny.net, funciona como un proxy que replica la API de Google Fonts pero con servidores ubicados exclusivamente en Europa, garantizando que ningún dato de los usuarios sea transferido a servidores fuera de la UE. A diferencia de Google Fonts, Bunny Fonts no registra direcciones IP ni recopila información personal de los visitantes, cumpliendo así plenamente con las normativas europeas de protección de datos. La implementación es sencilla: basta con reemplazar «fonts.googleapis.com» por «fonts.bunny.net» en el código de tu sitio web, manteniendo la misma sintaxis y acceso a las mismas familias tipográficas.</p>
<p class="font-claude-response-body break-words whitespace-normal leading-&#091;1.7&#093;">Además, Bunny Fonts ofrece un rendimiento comparable e incluso en ocasiones superior, convirtiéndose en una opción práctica para desarrolladores y propietarios de sitios web que priorizan la privacidad de sus usuarios sin sacrificar la funcionalidad.</p>

		</div>
	</div>
</div></div></div></div>
</div>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Como arreglar la redirección /wp-admin/upgrade.php?_wp_http_referer=%2Fwp-admin%2F después de iniciar sesión</title>
		<link>https://13node.com/como-arreglar-la-redireccion-wp-admin-upgrade-despues-de-iniciar-sesion/</link>
		
		<dc:creator><![CDATA[Danilo Ulloa]]></dc:creator>
		<pubDate>Wed, 09 Aug 2023 08:49:49 +0000</pubDate>
				<category><![CDATA[Informática]]></category>
		<category><![CDATA[Wordpress]]></category>
		<guid isPermaLink="false">https://13node.com/?p=39042</guid>

					<description><![CDATA[El problema de la redirección /wp-admin/upgrade.php?_wp_http_referer=%2Fwp-admin%2F después de iniciar sesión, sucede cuando el número de la version en wp-include/version.php es]]></description>
										<content:encoded><![CDATA[<p>El problema de la redirección /wp-admin/upgrade.php?_wp_http_referer=%2Fwp-admin%2F después de iniciar sesión, sucede cuando el número de la version en wp-include/version.php es diferente del valor que está en la tabla  <strong>wp_option</strong><em>, la fila db_version</em>.</p>
<h2><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-39044" src="https://13node.com/wp-content/uploads/2023/08/wp_version.jpg" alt="" width="871" height="495" srcset="https://13node.com/wp-content/uploads/2023/08/wp_version.jpg 871w, https://13node.com/wp-content/uploads/2023/08/wp_version-150x85.jpg 150w, https://13node.com/wp-content/uploads/2023/08/wp_version-300x170.jpg 300w, https://13node.com/wp-content/uploads/2023/08/wp_version-768x436.jpg 768w" sizes="auto, (max-width: 871px) 100vw, 871px" />Solución Rápida</h2>
<ol>
<li>Crea una copia de la base de datos y de los archivos.</li>
<li>Revisa en la base de datos tabla wp_options el valor de db_version.</li>
<li>Actualiza <strong>wp-include/version.php</strong> para forzar que sea igual que la versión de la base de datos.</li>
<li>Esto debería darte como mínimo acceso al panel de administración.</li>
<li>Exporta la información de tu página web en formato XML.</li>
<li>Intenta actualizar WordPress a la última versión.</li>
<li>Si falla, restaura la copia de seguridad del paso 1, o empieza un nuevo WordPress e importa el xml obtgenido en el paso 5.</li>
</ol>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-39043" src="https://13node.com/wp-content/uploads/2023/08/wp_options_db_version.jpg" alt="" width="887" height="502" srcset="https://13node.com/wp-content/uploads/2023/08/wp_options_db_version.jpg 887w, https://13node.com/wp-content/uploads/2023/08/wp_options_db_version-150x85.jpg 150w, https://13node.com/wp-content/uploads/2023/08/wp_options_db_version-300x170.jpg 300w, https://13node.com/wp-content/uploads/2023/08/wp_options_db_version-768x435.jpg 768w" sizes="auto, (max-width: 887px) 100vw, 887px" />Aqui dejo una tabla de versiones para saber con facilidad que versión estamos.</p>
<table class="widefat">
<tbody>
<tr>
<td><b>6.1</b></td>
<td>53496</td>
</tr>
<tr>
<td>6.1.1</td>
<td>53496</td>
</tr>
<tr>
<td>6.1.2</td>
<td>53496</td>
</tr>
<tr>
<td><b>6.1.3</b></td>
<td>53496</td>
</tr>
<tr>
<td><b>6.2</b></td>
<td>53496</td>
</tr>
<tr>
<td>6.2.1</td>
<td>53496</td>
</tr>
<tr>
<td>6.2.2</td>
<td>53496</td>
</tr>
<tr>
<td><b>6.3</b></td>
<td>55853</td>
</tr>
</tbody>
</table>
<p>Ver Más: <a href="https://codex.wordpress.org/WordPress_Versions" rel="nofollow">https://codex.wordpress.org/WordPress_Versions</a></p>
<p>Espero que este tutorial te ayude a arreglar los problemas relacionados con tu wordpress, si no solo quedará la opción de restaurar la tabla WP_Options de copias de seguridad previas. Por favor, coméntanos como te ha ido en los comentarios.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>ISO 27001, ¿sirve de algo si se usa tecnología obsoleta?</title>
		<link>https://13node.com/iso-27001-sirve-de-algo-tecnologia-obsoleta/</link>
		
		<dc:creator><![CDATA[Danilo Ulloa]]></dc:creator>
		<pubDate>Mon, 17 Jul 2023 08:41:23 +0000</pubDate>
				<category><![CDATA[Redacción]]></category>
		<guid isPermaLink="false">https://13node.com/?p=39036</guid>

					<description><![CDATA[Como muchos freelance o profesionales sabréis, los certificados ISO constas de un conjunto de normas elaboradas por la Organización Internacional]]></description>
										<content:encoded><![CDATA[<div class="flex flex-grow flex-col gap-3">
<div class="min-h-[20px] flex items-start overflow-x-auto whitespace-pre-wrap break-words flex-col gap-4">
<div class="markdown prose w-full break-words dark:prose-invert light">
<p>Como muchos freelance o profesionales sabréis, los certificados ISO constas de un conjunto de normas elaboradas por la Organización Internacional de Estandarización (ISO) con el propósito de ordenar la gestión dentro de las empresas en sus diferentes ámbitos y departamentos. Para los freelance o empresas, es básicamente para poder acceder a clientes que exigen que la empresa/freelance cumple con lo establecido en la norma (como clientes de Organismos Públicos).</p>
<h2>¿Qué es el ISO 27001?</h2>
<p>ISO 27001 es una norma internacional que establece los requisitos para un Sistema de Gestión de Seguridad de la Información (SGSI) en una organización. Su objetivo principal es ayudar a proteger la confidencialidad, integridad y disponibilidad de la información sensible y valiosa para la empresa.</p>
<h2>¿Cumpliré la normativa ISO 27001 si uso tecnología obsoleta como PHP 5.6?</h2>
<p>El hecho de que una organización utilice tecnología como PHP 5.6, que puede considerarse insegura, no invalida el valor del ISO 27001 en sí mismo. ISO 27001 es una norma de gestión que se enfoca en establecer un marco para identificar, analizar y mitigar los riesgos de seguridad de la información en una organización. También promueve la implementación de controles de seguridad adecuados para proteger los activos de información. (Aunque en la cláusula 6.1.2 de la ISO, dice claramente que se deben tener en cuenta, pero como en los procesos de certificación no miran estas cosas &#8230;)</p>
<p>Sin embargo, es esencial tener en cuenta que la seguridad de la información es un enfoque holístico y que la tecnología utilizada también desempeña un papel crucial en la seguridad general. En el caso de PHP 5.6, es cierto que esta versión ha alcanzado su fin de vida (End of Life, EOL) y ya no recibe actualizaciones de seguridad, lo que significa que existen vulnerabilidades conocidas que no serán corregidas por el equipo de desarrollo.</p>
<p>El uso de tecnologías obsoletas y sin soporte como PHP 5.6 puede exponer a una organización a riesgos de seguridad significativos, ya que los atacantes pueden aprovechar estas vulnerabilidades conocidas para comprometer sistemas y acceder a datos sensibles. Además, los proveedores de software y sistemas operativos también pueden dejar de ofrecer soporte para versiones antiguas, lo que dificultará aún más mantener un ambiente seguro.</p>
<p>En resumen, aunque ISO 27001 es valioso para establecer un marco de seguridad en una organización, también es esencial mantener actualizada la tecnología y adoptar prácticas de seguridad modernas para garantizar la protección adecuada de la información y mitigar los riesgos de seguridad. Utilizar tecnologías obsoletas e inseguras puede poner en peligro los esfuerzos de cumplimiento de la norma y aumentar la exposición a amenazas cibernéticas.</p>
</div>
</div>
</div>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Como la Tecnología ha Ayudado al Marketing</title>
		<link>https://13node.com/como-la-tecnologia-ha-ayudado-al-marketing/</link>
		
		<dc:creator><![CDATA[Danilo Ulloa]]></dc:creator>
		<pubDate>Mon, 26 Jun 2023 08:30:59 +0000</pubDate>
				<category><![CDATA[Redacción]]></category>
		<guid isPermaLink="false">https://13node.com/?p=39029</guid>

					<description><![CDATA[En los últimos años, el campo del marketing ha experimentado una notable evolución gracias a la utilización de datos y]]></description>
										<content:encoded><![CDATA[<div class="flex flex-grow flex-col gap-3">
<div class="flex items-start overflow-x-auto whitespace-pre-wrap break-words flex-col gap-4">
<div class="markdown prose w-full break-words dark:prose-invert light">
<p>En los últimos años, el campo del marketing ha experimentado una notable evolución gracias a la utilización de datos y tecnología.</p>
<p>Hasta la fecha actual, el marketing digital ha permitido a las empresas alcanzar a sus consumidores de una manera más efectiva y eficiente. En este artículo, analizaremos el papel crucial que desempeñan los datos y la tecnología en el ámbito de la mercadotecnia, así como los cambios que han generado en el panorama del marketing.</p>
<p>Desde hace mucho tiempo, el uso de datos ha sido una herramienta valiosa para los especialistas en marketing. Sin embargo, con la llegada de la tecnología, la cantidad de información disponible ha aumentado significativamente. El análisis de datos se ha convertido en una parte esencial del proceso de toma de decisiones en el campo de la mercadotecnia, ya que los datos proporcionan información valiosa sobre el comportamiento del consumidor, las tendencias del mercado y las oportunidades de crecimiento.</p>
<p>La tecnología ha permitido a los especialistas en marketing acceder a datos en tiempo real. Actualmente, existen herramientas de análisis de datos, como Google Analytics, que les permiten observar cómo los consumidores interactúan con los sitios web y otros canales digitales. Además, las redes sociales y otras plataformas ofrecen información detallada sobre los intereses y comportamientos de los consumidores en todo momento.</p>
<p>La recolección y el análisis de datos se han convertido en elementos fundamentales de la estrategia de marketing de las empresas. Esto ayuda a los especialistas en marketing a identificar oportunidades de crecimiento y a ajustar sus estrategias para aprovecharlas. Por ejemplo, los datos pueden revelar si ciertos grupos de consumidores están más interesados en un producto o servicio en particular. Esto permite a los especialistas en marketing crear campañas específicas para ese grupo y obtener resultados favorables.</p>
<p>El uso de tecnología y datos también ha mejorado la eficiencia de la publicidad. La programática, por ejemplo, utiliza tecnología para automatizar el proceso de compra de publicidad digital. En lugar de comprar anuncios directamente de un sitio web, los anuncios se adquieren mediante un proceso automatizado que utiliza datos para determinar a qué consumidores se les mostrarán. Esto significa que los especialistas en marketing pueden comprar publicidad de manera más eficiente y obtener mejores resultados. Sin duda, esto es impresionante, ¿no crees?</p>
<p>Otro papel importante de la tecnología en el campo del marketing es la automatización. Esto permite a las empresas automatizar procesos como el envío de correos electrónicos, la gestión de redes sociales y la publicidad digital. Como resultado, los especialistas en marketing disponen de más tiempo para concentrarse en estrategias de marketing más efectivas y creativas, sin tener que perder tanto tiempo en tareas operativas.</p>
<p>Además, el uso de datos y tecnología en la mercadotecnia ofrece una amplia gama de beneficios y ventajas, que incluyen:</p>
<ol>
<li>Personalización: La tecnología permite a las empresas ofrecer experiencias personalizadas a los consumidores. Utilizando datos de comportamiento y otros datos relevantes, los especialistas en marketing pueden crear campañas específicas y anuncios personalizados que sean más relevantes para cada consumidor.</li>
<li>Mejora de la experiencia del consumidor: El uso de tecnología y datos también puede mejorar la experiencia del consumidor. Por ejemplo, la automatización del envío de correos electrónicos permite enviar mensajes relevantes y oportunos a los consumidores, lo que aumenta la probabilidad de convertirlos en clientes leales.</li>
<li>Análisis de datos: La tecnología permite recopilar y analizar grandes cantidades de datos en tiempo real. Esto puede proporcionar información valiosa sobre el comportamiento del consumidor, las tendencias del mercado y las oportunidades de crecimiento basadas en dicho análisis.</li>
<li>Mejora de la segmentación: La tecnología y los datos permiten a los especialistas en marketing identificar y segmentar a los consumidores de manera más efectiva. Esto significa que las empresas pueden dirigirse a grupos específicos de consumidores con mensajes efectivos y relevantes.</li>
<li>Mayor medición y seguimiento: Finalmente, en la actualidad, la tecnología permite medir y rastrear de manera más efectiva el rendimiento de las campañas. Esto significa que se puede identificar lo que funciona y lo que no, y ajustar toda la estrategia en consecuencia.</li>
</ol>
<p>El uso de datos y tecnología en el campo de la mercadotecnia ofrece una amplia gama de beneficios y ventajas que pueden ayudar a las empresas a llegar a los consumidores de manera más efectiva y eficiente.</p>
</div>
</div>
</div>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Diseño web en Tenerife: la ventaja insular para vender en todas las Islas Canarias</title>
		<link>https://13node.com/diseno-web-en-tenerife-la-ventaja-insular-para-vender-en-todas-las-islas-canarias/</link>
		
		<dc:creator><![CDATA[Danilo Ulloa]]></dc:creator>
		<pubDate>Fri, 02 Jun 2023 12:41:05 +0000</pubDate>
				<category><![CDATA[Redacción]]></category>
		<guid isPermaLink="false">https://13node.com/?p=39014</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[<div class="wpb-content-wrapper"><div class="vc_row wpb_row vc_row-fluid"><div class="wpb_column vc_column_container vc_col-sm-12"><div class="vc_column-inner"><div class="wpb_wrapper">
	<div class="wpb_text_column wpb_content_element" >
		<div class="wpb_wrapper">
			<p>El diseño web se ha convertido en una herramienta esencial para cualquier negocio en la era digital. En un entorno altamente competitivo, tener una presencia en línea efectiva es fundamental para alcanzar el éxito. En este sentido, las Islas Canarias, y en particular Tenerife, ofrecen ventajas únicas debido a su condición insular. En este artículo, exploraremos cómo el diseño web en Tenerife puede aprovechar la insularidad y facilitar la venta en todas las islas del archipiélago.</p>
<h2>¿Por qué contratar un servicio de diseño web en Tenerife?</h2>
<p>Elegir una <strong>agencia de diseño web en Tenerife</strong> implica trabajar con profesionales que conocen de primera mano la realidad fiscal (IGIC), cultural y logística de las Islas Canarias. Gracias a esa cercanía el equipo entiende tus necesidades locales y puede plasmar tu identidad canaria sin tópicos.</p>
<p>En definitiva, consigues una web hecha a medida, optimizada para el usuario canario y lista para competir en tu nicho.</p>
<h2>¿Cómo puede mi negocio vender online en todas las islas Canarias?</h2>
<p>Empezando por un punto de venta en las islas, podemos ayudarte con recomendaciones de empresas de locales (transportistas, imprenta,&#8230;), y servicios en 24/48h para tus clientes.</p>
<p>Conocemos la diferencia por código postal de cada isla, así que configuramos tu tienda online para que cada Isla tenga el precio adecuado de envío.</p>
<h2>¿Cómo adaptamos tu web a la identidad de cada isla?</h2>
<p>Cada isla tiene su propio acento, fiestas y preferencias de compra. Nuestro proceso incluye:</p>
<ul>
<li><strong>Investigación de buyer personas insulares</strong> (no es lo mismo un cliente en La Palma que en Gran Canaria).</li>
<li><strong>Microcopys y creatividades por isla</strong>: textos y visuales que generan cercanía.</li>
<li>Landing pages geolocalizadas: “diseño web Fuerteventura”, “tienda online La Gomera”, etc.</li>
</ul>
<p>Con esta personalización garantizamos que cada visitante sienta que hablas su idioma.</p>
<h2>¿Cómo impulsa el diseño web el turismo en Canarias?</h2>
<p>El turismo representa más del 35 % del PIB canario. Un sitio optimizado puede:</p>
<ul>
<li><strong>Conectar con turistas antes de su llegada</strong> mediante contenidos en varios idiomas y SEO internacional.</li>
<li>Incluir <strong>sistemas de reserva online sin comisiones</strong> para hoteles, excursiones y experiencias locales.</li>
<li>Mostrar <strong>testimonios en vídeo</strong> que aumentan la confianza y la intención de reserva.</li>
</ul>
<p>Así transformamos tu web en un agente activo de captación turística.</p>
<h2>¿Cómo optimizamos tu sitio para el SEO local en cada isla?</h2>
<ul>
<li><strong>Keyword research específico</strong>: «diseño web Tenerife», «agencia ecommerce Gran Canaria», etc.</li>
<li><strong>Schema Markup LocalBusiness</strong> y enlazado con tu perfil de Google Business.</li>
<li><strong>Link‑building en medios canarios</strong> y directorios sectoriales.</li>
<li>WPO (Web Performance Optimization) para reducir el TTFB desde Canarias y mejorar Core Web Vitals.</li>
</ul>
<p>Esta estrategia integral incrementa tu visibilidad orgánica y atrae tráfico cualificado.</p>
<h2>¿Por qué 13Node es tu socio ideal?</h2>
<ul>
<li><strong>14 años de experiencia</strong> y más de 300 proyectos lanzados.</li>
<li>Equipo multidisciplinar: diseño, programación, SEO, copywriting y analítica.</li>
</ul>

		</div>
	</div>
</div></div></div></div><div class="vc_row wpb_row vc_row-fluid"><div class="wpb_column vc_column_container vc_col-sm-12"><div class="vc_column-inner"><div class="wpb_wrapper">
	<div class="wpb_text_column wpb_content_element" >
		<div class="wpb_wrapper">
			<blockquote>
<p style="text-align: center;"><strong>Solicita ahora tu auditoría gratuita y recibe un informe con oportunidades de mejora en menos de 48h.</strong></p>
</blockquote>
<div>
<hr />
</div>
<p>El <a href="https://13node.com/diseno-web/"><strong>diseño web en Tenerife</strong></a> no es solo una cuestión estética: es una ventaja competitiva que te acerca a tus clientes en todo el archipiélago. Aprovecha la posición estratégica de la isla, su tejido logístico y su identidad multicultural para escalar tu negocio. En 13Node transformamos tu idea en una plataforma online que vende—y convence—de La Graciosa a El Hierro.</p>

		</div>
	</div>
</div></div></div></div>
</div>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Licencia Plugins y Themes 13Node</title>
		<link>https://13node.com/wordpress-license/</link>
		
		<dc:creator><![CDATA[Danilo Ulloa]]></dc:creator>
		<pubDate>Sun, 16 Apr 2023 09:41:00 +0000</pubDate>
				<category><![CDATA[Legalidad]]></category>
		<category><![CDATA[Soporte]]></category>
		<guid isPermaLink="false">https://13node.com/?p=42322</guid>

					<description><![CDATA[Las Bases de la Licencia Básica La Licencia Básica de 13Node le otorga a usted, el comprador, una licencia continua,]]></description>
										<content:encoded><![CDATA[<h2>Las Bases de la Licencia Básica</h2>
<ol>
<li>La Licencia Básica de 13Node le otorga a usted, el comprador, una licencia continua, no exclusiva y mundial para hacer uso de la obra digital (Plugin, Theme o Código en adelante el Artículo) que ha seleccionado. Lea el resto de esta licencia para conocer los detalles que se aplican a su uso del Artículo.</li>
<li>Tiene licencia para utilizar el Artículo para crear un único Producto final para usted o para un cliente (una «aplicación única»), y el Producto final se puede distribuir de forma gratuita.</li>
<li>Un producto final es una de las siguientes cosas, y ambas requieren una aplicación de habilidad y esfuerzo.
<ul>
<li>Para un Artículo que es una plantilla, el Producto Final es una implementación personalizada del Artículo. Por Ejemplo: Es una Plantilla para una web y el Producto Final es la plantilla rellena con el contenido del cliente.</li>
<li>Para otros tipos de Artículo, un Producto Final es un trabajo que incorpora el Artículo así como otras cosas, de modo que tiene un alcance mayor y una naturaleza diferente al Artículo. Por Ejemplo: Es un botón y el producto final es una Aplicación que lo implementa.</li>
</ul>
</li>
</ol>
<h3>¿Que puedo hacer con el Objeto que compre?</h3>
<ol start="4">
<li>Puede crear un Producto final para un cliente y puede transferir ese único Producto final a su cliente cobrando cualquier tarifa. En este momento la licencia se transfiere a su cliente. (Clave y URL)</li>
<li>Modificar o manipular el Artículo. Puedes combinar el Artículo con otras obras y realizar una obra derivada del mismo. Las obras resultantes están sujetas a los términos de esta licencia. Puede hacer estas cosas siempre que el Producto final que cree sea uno de los permitidos según la cláusula 3.</li>
</ol>
<h3>Que no se puede hacer</h3>
<ol start="6">
<li>No se puede vender el producto final, excepto a un cliente. (Si usted o su cliente desean vender el producto final, necesitarán la <strong>Licencia Extendida</strong>).</li>
<li>No puede redistribuir el artículo como stock, en una herramienta o plantilla, o con archivos fuente. No puedes hacer esto con un artículo, ya sea solo o junto con otros artículos, e incluso si modificas el artículo. No puede redistribuir ni poner a disposición el artículo tal como está o con modificaciones superficiales. Estas cosas no están permitidas incluso si la redistribución es gratuita.</li>
<li>No puede utilizar el Artículo en ninguna aplicación que permita a un usuario final personalizar un producto digital o físico según sus necesidades específicas, como una aplicación «bajo demanda», «hecha a pedido» o «constrúyalo usted mismo». Puede usar el Artículo de esta manera solo si compra una licencia separada para cada producto final que incorpore el Artículo creado usando la aplicación.</li>
<li>Aunque puede modificar el artículo y, por lo tanto, eliminar los componentes no deseados antes de crear su producto final único, no puede extraer ni utilizar un único componente de un artículo de forma independiente. Por Ejemplo: Un código contiene una función, no puedes sacarla del plugin y usarla en otra instalación o fuera del plugin.</li>
<li>No debe permitir que un usuario final del Producto final extraiga el Artículo y lo utilice por separado del Producto final.</li>
<li>No puede utilizar un Artículo en un logotipo, marca comercial o marca de servicio.</li>
<li>Los artículos que contienen versiones digitales de productos reales, marcas comerciales u otra propiedad intelectual propiedad de otros no han sido autorizados. Estos Artículos tienen licencia únicamente para uso editorial. Es su responsabilidad considerar si el uso de estos Artículos requiere una autorización y, de ser así, obtener esa autorización del propietario de los derechos de propiedad intelectual.</li>
<li>Esta licencia puede rescindirse si la incumple. Si eso sucede, debe dejar de hacer copias o distribuir el Producto final hasta que retire el Artículo del mismo.</li>
<li>13Node conserva la propiedad del Artículo pero le otorga la licencia en estos términos.</li>
<li>13Node se reserva el derecho a actualizar esta política cuando lo crea conveniente.</li>
</ol>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Como escanear tu Servidor Debian en busca de Malware</title>
		<link>https://13node.com/como-escanear-tu-servidor-debian-en-busca-de-malware/</link>
		
		<dc:creator><![CDATA[Danilo Ulloa]]></dc:creator>
		<pubDate>Wed, 05 Apr 2023 10:19:57 +0000</pubDate>
				<category><![CDATA[Servidores]]></category>
		<category><![CDATA[Soporte]]></category>
		<guid isPermaLink="false">https://13node.com/?p=38964</guid>

					<description><![CDATA[Si has notado algún comportamiento raro en tu servidor Linux puede ser resultado de una infección de malware, mientras que]]></description>
										<content:encoded><![CDATA[<p>Si has notado algún comportamiento raro en tu servidor Linux puede ser resultado de una infección de malware, mientras que otros software maliciosos pueden no alertarte de su presencia. Escanear tu servidor en busca de diferentes tipos de programas no deseados puede ayudarte a reparar incidencias, o al menos, darte la paz mental de tener un servidor limpio.</p>
<p>Hay muchas opciones para conseguir un sistema limpio de malware, en esta guía analizaremos unos cuantos programas que puedes utilizar para comprobar tu sistema.</p>
<h2>ClamAV</h2>
<p>ClamAV es un antivirus open-source bastante popular y disponible en múltiples plataformas incluida la mayoría de distribuciones Linux. Instálalo en tu sistema Debian con el siguiente comando.</p>
<pre>sudo apt install clamav clamav-daemon</pre>
<p>Con los módulos obligatorios instalados, a continuación, debes actualizar la base de datos de virus para ClamAV.</p>
<p>Primero, detén todos los procesos relacionados para permitir la actualización.</p>
<pre>sudo systemctl stop clamav-freshclam</pre>
<p>Luego usa el comando de abajo para lanzar el actualizador del antivirus.</p>
<pre>sudo freshclam</pre>
<p>Cuando acabes de actualizar tus deficiniones de virus, inicia y activa los servicios.</p>
<pre>sudo systemctl start clamav-freshclam
sudo systemctl enable clamav-freshclam</pre>
<p>Ahora, hagamos un escaneo a tu directorio home solo para asegurarnos de que el comando funcione.</p>
<pre>sudo clamscan -r /home</pre>
<p>Asegurándote de que tu directorio home no tiene virus ni ningún tipo de malware, el escaneo debe salirnos vacío. Pero, ¿Y como sabemos que funciona? Para esto, puedes descargar un archivo de prueba de anti-virus, que es un pequeño programa totalmente inofensivo que la mayoría de anti-virus lo reportarán como infectado, con un nombre obvio para este fin EICAR-AV-Test.  Usa el siguiente comando para descargar el archivo en tu directorio home.</p>
<pre>wget -P ~/ http://www.eicar.org/download/eicar.com</pre>
<p>Ahora escanea la carpeta de home de nuevo usando el comando de escaneo que mencionamos anteriormente y debería recibir un aviso de un archivo infectado al final del resumen cuando se complete el escaneo. Cuando confirmes que ClamAV encuentra el archivo de prueba correctamente, use el siguiente comando para escanearlo nuevamente y eliminar el archivo infectado una vez encontrado.</p>
<pre>sudo clamscan --infected --remove --recursive /home</pre>
<p>Ten cuidado cuando uses el parámetro -remove. Primero haz un escaneo sin el, y luego un escaneo mas localizado eliminando archivos o los eliminas manualmente, así evitamos perder información.</p>
<p>Para realizar un escaneo completo de tu servidor, usa el siguiente comando.</p>
<pre>sudo clamscan --infected --recursive --exclude-dir="^/sys" /</pre>
<p>El escaneo va a través de cada directorio en tu sistema raíz de manera recursiva, pero salta el directorio /sys para evitar alertas innecesarios, ya que el sistema posee algunos archivos que no pueden ser leídos, los cuales no contienen virus de todas maneras.</p>
<h2>Rkhunter</h2>
<p>Rkhunter es una opción común utilizada para escanear sistemas de rootkits y vulnerabilidades en general. Puede ser instalado de manera sencilla usando el administrador de paquetes en sistemas Debian.</p>
<pre>sudo aptitude install rkhunter</pre>
<p>Una vez instalado y antes de escanear, necesitas actualizar la base de datos.</p>
<pre>sudo rkhunter --propupd</pre>
<p>Esto te permite conocer el estado actual de algunos archivos, evitando así falsos positivos. Después de actualizar, simplemente lanza el escáner.</p>
<pre>sudo rkhunter --checkall</pre>
<p>El escaneo revisará a través de algunos comandos del sistema, buscando rootkits y malware, a nivel de ajustes de red y local y finalmente nos devolverá el resumen así como guardarlas en un registro.</p>
<p>Ahora puedes mirar el resultado del registro del escáner.</p>
<pre>sudo cat /var/log/rkhunter.log | grep -i warning</pre>
<p>Revisemos bien este archivo, ya que nos puede dar buenas pistas de como podemos mejorar la seguridad de nuestro sistema.</p>
<h2>Chkrootkit</h2>
<p>Chkrootkites un escáner de rootkit popular, el cual lanza muchas comprobaciones útiles y puede detectar actos sospechosos. Se puede instalar en la mayoría de distribuciones con el administrador de paquetes, en un servidor Debian usa el siguiente comando.</p>
<pre>sudo apt install chkrootkit</pre>
<p>Una vez hecho, escanea tu servidor con este comando.</p>
<pre>sudo chkrootkit</pre>
<p>El escaneo buscará muchos tipos de infecciones e imprimirá en pantalla sus hallazgos. Puede desplazarse por la lista para verificar si hay advertencias.</p>
<p>Chkrootkit no escribe un informe en un archivo, solo lo muestra en pantalla de forma predeterminada, pero si desea automatizar las comprobaciones o echar un vistazo a los resultados más tarde, utilice tee para guardar los resultados en un archivo.</p>
<pre>sudo chkrootkit | sudo tee /var/log/chkrootkit/chkrootkit.log</pre>
<p>Ahora puedes fácilmente buscar en el registro por alguna alerta.</p>
<pre>sudo cat /var/log/chkrootkit/chkrootkit.log | grep -i warning</pre>
<p>Si bien la opción se puede usar para ayudar a determinar si una máquina se ha visto comprometida, no debe tomarse como la «última palabra», utilícela junto con otros escáneres para diagnosticar posibles infecciones.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Mostrar impuesto 0% en Woocommerce</title>
		<link>https://13node.com/mostrar-impuesto-0-en-woocommerce/</link>
					<comments>https://13node.com/mostrar-impuesto-0-en-woocommerce/#comments</comments>
		
		<dc:creator><![CDATA[Danilo Ulloa]]></dc:creator>
		<pubDate>Wed, 04 Jan 2023 10:30:35 +0000</pubDate>
				<category><![CDATA[Informática]]></category>
		<category><![CDATA[Wordpress]]></category>
		<guid isPermaLink="false">https://13node.com/?p=38916</guid>

					<description><![CDATA[Como bien sabéis, en España, entró en vigor la bajada de impuestos al 0%, para los alimentos básicos (leche, quesos,]]></description>
										<content:encoded><![CDATA[<p><span class="break-words"><span dir="ltr">Como bien sabéis, en España, entró en vigor la bajada de impuestos al 0%, para los alimentos básicos (leche, quesos, huevos, frutas, verduras&#8230;) y claro, a los que gestionamos algún ecommerce, donde se venden este tipo de productos, nos ha tocado aplicar esta rebaja en las webs.</p>
<p>En mi caso en un WooCommerce me di cuenta que, al bajar el IVA del 4.000% al 0.0000%, el impuesto ya no se mostraba en el subtotal de la página del carrito, ni en la de pago, ni en las facturas (y todos sabemos que con hacienda, no podemos jugarnosla) ya que al parecer, WooCommerce la ocultaba automáticamente.</p>
<p>Y esto pasa solamente cuando aplicas el 0.0000%, porque en el momento que le des un valor superior, por ejemplo del 1.0000%, el problema deja de existir. Pero necesitamos el IVA al 0.0000% para evitar sanciones.</p>
<p>Entonces, ¿qué hago si tengo este problema de impuestos? Seguro que hay otras alternativas, pero voy a mostrar la que me funcionó&#8230;</p>
<p>Añadí, en mi archivo functions.php, el siguiente código:<br />
</span></span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="php">add_filter( 'woocommerce_cart_hide_zero_taxes', '__return_false' );</pre>
<p><span class="break-words"><span dir="ltr">(que básicamente lo que hace es mostrar la línea de impuestos, incluso si la tasa de impuestos es 0.0000%)</p>
<p>y este otro código para mostrar el IVA al 0.0000% cuando se haga un pedido:<br />
</span></span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="php">add_filter( 'woocommerce_order_hide_zero_taxes', '__return_false' );</pre>
<p><span class="break-words"><span dir="ltr">Una vez añadidos los códigos, todos los pedidos pasaron a mostrar el IVA, incluso los pedidos que se habían realizado anteriormente.<br />
</span></span></p>
<p>Espero que os haya ayudado.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://13node.com/mostrar-impuesto-0-en-woocommerce/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
