<?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>sergio &#8211; Blog</title>
	<atom:link href="https://blog.sergiorios.com.ar/author/sergio/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.sergiorios.com.ar</link>
	<description>Investigación y Desarrollo, Tecnologías Web &#38; Cloud</description>
	<lastBuildDate>Mon, 23 Feb 2026 12:15:20 +0000</lastBuildDate>
	<language>es-AR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.1</generator>

<image>
	<url>https://blog.sergiorios.com.ar/wp-content/uploads/2024/10/cropped-favicon-32x32.png</url>
	<title>sergio &#8211; Blog</title>
	<link>https://blog.sergiorios.com.ar</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>🔁Actualización automática de precios WHMCS en WordPress</title>
		<link>https://blog.sergiorios.com.ar/sincronizar-precios-whmcs-wordpress-whmpress-descuentos/</link>
		
		<dc:creator><![CDATA[sergio]]></dc:creator>
		<pubDate>Wed, 25 Jun 2025 16:25:17 +0000</pubDate>
				<category><![CDATA[Experiencia]]></category>
		<category><![CDATA[Trabajo]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[smarty]]></category>
		<category><![CDATA[tpl]]></category>
		<category><![CDATA[whmpress]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">https://blog.sergiorios.com.ar/?p=192</guid>

					<description><![CDATA[En este post te muestro cómo trabajé con WHMpress, el plugin que conecta WHMCS con WordPress, para lograr dos cosas: ✅ Automatizar la sincronización diaria de precios desde WHMCS.✅ Personalizar los templates para aplicar descuentos visuales desde WordPress. 🔁 Sincronización automática con WHMCS vía Cron WHMpress tiene una función de sincronización manual desde el panel &#8230; <a href="https://blog.sergiorios.com.ar/sincronizar-precios-whmcs-wordpress-whmpress-descuentos/" class="more-link">Continuá leyendo <span class="screen-reader-text">🔁Actualización automática de precios WHMCS en WordPress</span></a>]]></description>
										<content:encoded><![CDATA[
<p>En este post te muestro cómo trabajé con <strong>WHMpress</strong>, el plugin que conecta <strong>WHMCS</strong> con <strong>WordPress</strong>, para lograr dos cosas:</p>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Automatizar la sincronización diaria de precios desde WHMCS.<br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Personalizar los templates para aplicar <strong>descuentos visuales</strong> desde WordPress.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f501.png" alt="🔁" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Sincronización automática con WHMCS vía Cron</h2>



<p>WHMpress tiene una función de sincronización manual desde el panel de WordPress. Pero para automatizarla todos los días, podés crear un archivo <code>cron.php</code> y ejecutarlo con un cron job.</p>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4c4.png" alt="📄" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Código del archivo <code>cron.php</code></h3>



<pre class="wp-block-preformatted has-white-color has-dark-gray-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-be11171fa119b6409c30ad0ef4f50cde"><code>&lt;?php<br><br>require_once(__DIR__ . '/wp-load.php');<br><br>if (!function_exists("whmpress_cron_function")) {<br>    function whmpress_cron_function() {<br>        echo "Starting WHMPress cron job.&lt;br&gt;";<br>        echo "===========================&lt;br&gt;";<br>        echo whmp_fetch_data();<br>        echo "============================&lt;br&gt;";<br>        echo "WHMPress cron job completed.&lt;br&gt;";<br>    }<br>}<br><br>whmpress_cron_function();<br></code></pre>



<h3 class="wp-block-heading"><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;" /> Ejemplo de línea en el crontab</h3>



<pre class="wp-block-preformatted has-white-color has-dark-gray-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-5378ec69df75c4008428fabc1f28b51a"><code>0 3 * * * php /var/www/html/sitio/cron.php &gt;/dev/null 2&gt;&amp;1<br></code></pre>



<p>Este comando ejecuta la sincronización todos los días a las 3 AM desde el servidor.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9f1.png" alt="🧱" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Agregar descuento personalizado en los templates de WHMpress</h2>



<p>Al usar Elementor podés insertar widgets como <code>whmpress_pricing_table</code>. WHMpress permite configurar:</p>



<ul class="wp-block-list">
<li>Producto o servicio</li>



<li>Template visual</li>



<li>Moneda</li>



<li>Ciclo de facturación</li>
</ul>



<p>Además, podés agregar <strong>descuentos personalizados</strong> desde WordPress, sin tocar WHMCS.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f527.png" alt="🔧" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Cómo se agrega el descuento en el widget y el shortcode</h3>



<p>Primero agregamos el parámetro <code>discount</code> en el <code>extract()</code> del shortcode:</p>



<pre class="wp-block-preformatted has-white-color has-dark-gray-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-cd90aa7a33a7bd8da5e7d8a4985b13df"><code>extract( shortcode_atts( [<br>    'discount' =&gt; whmpress_get_option("discount"),<br>    // otros atributos...<br>], $atts ) );<br></code></pre>



<p>Después lo agregamos al array <code>$vars</code>:</p>



<pre class="wp-block-preformatted has-white-color has-dark-gray-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-6e7857bddf5bb52738a3334328b89180"><code>$vars = [<br>    "discount" =&gt; $discount,<br>    "amountwithdiscount" =&gt; floor($tmp2['amount'] * (1 - $discount / 100)),<br>    // ...<br>];<br></code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4e6.png" alt="📦" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Configuración en Elementor (archivo <code>pricing-table.php</code>)</h2>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4c2.png" alt="📂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Ruta: <code>/wp-content/plugins/whmpress/widgets/pricing-table.php</code></p>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f6e0.png" alt="🛠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Agregar el campo de descuento</h3>



<pre class="wp-block-preformatted has-white-color has-dark-gray-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-8087c06d00e909bf63a44072c9809ad6"><code>$this-&gt;add_control(<br>    'discount',<br>    [<br>        'label' =&gt; 'Descuento',<br>        'type' =&gt; \\Elementor\\Controls_Manager::NUMBER,<br>        'default' =&gt; '0',<br>    ]<br>);<br></code></pre>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4e4.png" alt="📤" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Usar el valor en el render</h3>



<pre class="wp-block-preformatted has-white-color has-dark-gray-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-dfec5c45bfafb889ff074a62aff4d34f"><code>$discount = $settings['discount'];<br></code></pre>



<p>Y pasarlo al shortcode:</p>



<pre class="wp-block-preformatted has-white-color has-dark-gray-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-d3a60c031086b5ce0ac41a086c56bd7b"><code>echo do_shortcode('[whmpress_pricing_table <br>    id="' . $id . '" <br>    discount="' . $discount . '"<br>    // otros parámetros<br>]');<br></code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f3a8.png" alt="🎨" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Cómo mostrar el descuento en el template <code>.tpl</code></h2>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4c2.png" alt="📂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Ruta: <code>/wp-content/plugins/whmpress/templates/whmpress_pricing_table/default</code></p>



<p>Usamos condicionales de Smarty para mostrar el monto con y sin descuento:</p>



<pre class="wp-block-preformatted has-white-color has-dark-gray-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-6e3a8e24ac3b8ec2d3caffb60ecc0ea1"><code>{if isset($amountwithdiscount) &amp;&amp; $amountwithdiscount != $amount}<br>    &lt;span class="original-amount">{$prefix}{$amount}&lt;/span><br>    &lt;span class="h-discount-tag">{$discount}% OFF&lt;/span>&lt;br><br>    &lt;div class="holder"><br>        &lt;span class="currency">{$prefix}&lt;/span>&lt;span class="amount">{$amountwithdiscount|number_format:0:',':'.'}&lt;/span><br>{/if}<br></code></pre>



<p>Esto permite mostrar visualmente el ahorro con un formato atractivo.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4b0.png" alt="💰" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Moneda dinámica según la sesión o cookie</h2>



<p>Relacionado con el post anterior, también podés detectar la moneda activa con este fragmento:</p>



<pre class="wp-block-preformatted has-white-color has-dark-gray-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-9c836089b78c3f42e0e867c8071c0655"><code>if (empty($currency)) {<br>    if (isset($_SESSION["whmpress_currency"])) {<br>        $currency = $_SESSION["whmpress_currency"];<br>    }<br>}<br></code></pre>



<p>Esto se integra perfecto con los shortcodes de detección de IP y selección de moneda que documenté acá <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f447.png" alt="👇" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <a class="" href="https://blog.sergiorios.com.ar/trabajo/%e2%9d%93como-integraste-whmcs-con-wordpress-usando-whmpress-y-ademas-lo-personalizaste-con-codigo-propio/">¿Cómo integraste WHMCS con WordPress usando WHMpress y además lo personalizaste con código propio?</a></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Resultado final</h2>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f3af.png" alt="🎯" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Precios actualizados automáticamente desde WHMCS<br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f3af.png" alt="🎯" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Descuentos configurables visualmente desde WordPress<br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f3af.png" alt="🎯" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Integración fluida con Elementor y WHMpress<br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f3af.png" alt="🎯" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Templates visuales adaptados con lógica PHP y Smarty</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>🧩Integración avanzada WHMCS + WordPress</title>
		<link>https://blog.sergiorios.com.ar/integracion-whmcs-wordpress-whmpress-personalizacion/</link>
		
		<dc:creator><![CDATA[sergio]]></dc:creator>
		<pubDate>Wed, 25 Jun 2025 15:09:51 +0000</pubDate>
				<category><![CDATA[Experiencia]]></category>
		<category><![CDATA[Trabajo]]></category>
		<category><![CDATA[moneda]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[shortcodes]]></category>
		<category><![CDATA[whmcs]]></category>
		<category><![CDATA[whmpress]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">https://blog.sergiorios.com.ar/?p=179</guid>

					<description><![CDATA[👉 En este artículo te muestro cómo hice una integración entre WordPress y WHMCS usando el plugin WHMpress, agregando lógica personalizada en PHP para detectar la moneda según la IP del visitante, mantenerla en sesión, permitir que el usuario la cambie manualmente y mostrar una banderita al lado 👇 ⚙️ ¿Qué es WHMpress? WHMpress es &#8230; <a href="https://blog.sergiorios.com.ar/integracion-whmcs-wordpress-whmpress-personalizacion/" class="more-link">Continuá leyendo <span class="screen-reader-text">🧩Integración avanzada WHMCS + WordPress</span></a>]]></description>
										<content:encoded><![CDATA[
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f449.png" alt="👉" class="wp-smiley" style="height: 1em; max-height: 1em;" /> En este artículo te muestro cómo hice una integración entre <strong>WordPress</strong> y <strong>WHMCS</strong> usando el plugin <strong>WHMpress</strong>, agregando lógica personalizada en PHP para detectar la moneda según la IP del visitante, mantenerla en sesión, permitir que el usuario la cambie manualmente y mostrar una banderita al lado <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f447.png" alt="👇" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2699.png" alt="⚙" class="wp-smiley" style="height: 1em; max-height: 1em;" /> ¿Qué es WHMpress?</h2>



<p><a>WHMpress</a> es un plugin premium que permite conectar <strong>WordPress</strong> con <strong>WHMCS</strong>, ideal si vendés servicios como hosting, dominios o VPS.</p>



<p>Con WHMpress podés mostrar productos y precios de WHMCS directamente en WordPress, usando shortcodes o widgets.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9e0.png" alt="🧠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> ¿Cuál era la necesidad?</h2>



<p>Una empresa de IT necesitaba que:</p>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f30d.png" alt="🌍" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Los precios se muestren en la moneda del país del visitante (por IP).<br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9d1-200d-1f4bb.png" alt="🧑‍💻" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Si el usuario cambia la moneda manualmente, se respete su elección.<br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f3c1.png" alt="🏁" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Agregar una banderita (o ícono) al lado del precio, según la moneda.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9e9.png" alt="🧩" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Solución técnica</h2>



<p>A continuación te comparto los <strong>shortcodes</strong> y funciones personalizadas que agregué al archivo <code>functions.php</code> del theme:</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f50d.png" alt="🔍" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 1. Mostrar la IP del visitante</h3>



<pre class="wp-block-preformatted has-white-color has-dark-gray-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-53f8341b99e4463b5075a3067cd759a0"><code>function shortcode_ip_cliente() {<br>    $ip = $_SERVER['HTTP_CF_CONNECTING_IP'] ?? <br>          $_SERVER['HTTP_X_FORWARDED_FOR'] ?? <br>          $_SERVER['REMOTE_ADDR'] ?? 'IP no detectada';<br>    return esc_html($ip);<br>}<br>add_shortcode('ip_cliente', 'shortcode_ip_cliente');<br></code></pre>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f449.png" alt="👉" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Uso: <code>[ip_cliente]</code><br>Esto permite debuggear o ver desde qué IP se está accediendo.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f30e.png" alt="🌎" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 2. Detectar moneda por IP o por URL</h3>



<pre class="wp-block-preformatted has-white-color has-dark-gray-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-dcde2e15900339921838d2762781ee2f"><code>add_action('init', 'whmpress_definir_moneda_por_url_o_ip');<br><br>function whmpress_definir_moneda_por_url_o_ip() {<br>    if (!session_id()) session_start();<br><br>    $monedas = ['USD' => 1, 'ARS' => 2];<br><br>    if (isset($_GET['currency']) &amp;&amp; isset($monedas[strtoupper($_GET['currency'])])) {<br>        $_SESSION['whmpress_currency'] = $monedas[strtoupper($_GET['currency'])];<br>        setcookie('whmpress_currency', $_SESSION['whmpress_currency'], time() + 86400 * 30, "/");<br>        return;<br>    }<br><br>    if (!isset($_SESSION['whmpress_currency']) &amp;&amp; isset($_COOKIE['whmpress_currency'])) {<br>        $_SESSION['whmpress_currency'] = $_COOKIE['whmpress_currency'];<br>        return;<br>    }<br><br>    if (!isset($_SESSION['whmpress_currency'])) {<br>        $ip = $_SERVER['REMOTE_ADDR'];<br>        $geo = @json_decode(file_get_contents("http://www.geoplugin.net/json.gp?ip={$ip}"));<br>        $pais = $geo->geoplugin_countryCode ?? 'US';<br>        $_SESSION['whmpress_currency'] = ($pais === 'AR') ? $monedas['ARS'] : $monedas['USD'];<br>        setcookie('whmpress_currency', $_SESSION['whmpress_currency'], time() + 86400 * 30, "/");<br>    }<br>}<br></code></pre>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f446.png" alt="👆" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Este fragmento detecta automáticamente la moneda inicial según la IP o parámetro <code>?currency=USD</code>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f504.png" alt="🔄" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 3. Selector visual de moneda</h3>



<pre class="wp-block-preformatted has-white-color has-dark-gray-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-1fe40cded2edea24f28a0688508f3fa6"><code>function selector_moneda() {<br>    if (!session_id()) session_start();<br><br>    // lógica reducida para claridad...<br>    $currency_num = $_COOKIE['whmpress_currency'] ?? $_SESSION['whmpress_currency'] ?? 1;<br><br>    if ($currency_num === '1') {<br>        $currency = 'USD'; $currency2 = 'ARS'; $icon1 = '&#x1f310;'; $icon2 = '&#x1f1e6;&#x1f1f7;';<br>    } else {<br>        $currency = 'ARS'; $currency2 = 'USD'; $icon1 = '&#x1f1e6;&#x1f1f7;'; $icon2 = '&#x1f310;';<br>    }<br><br>    $html = '&lt;select onchange="if(this.value) location=this.value;">';<br>    $html .= "&lt;option value='?currency={$currency}' selected>{$icon1} {$currency}&lt;/option>";<br>    $html .= "&lt;option value='?currency={$currency2}'>{$icon2} {$currency2}&lt;/option>";<br>    $html .= '&lt;/select>';<br><br>    return $html;<br>}<br>add_shortcode('selector_moneda', 'selector_moneda');<br></code></pre>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f449.png" alt="👉" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Uso: <code>[selector_moneda]</code><br>Esto genera un pequeño dropdown para cambiar de moneda manualmente. Ideal para la cabecera del sitio.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f3c1.png" alt="🏁" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 4. Mostrar una banderita según la moneda</h3>



<pre class="wp-block-preformatted has-white-color has-dark-gray-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-4299b81b41ff10ab49de521e128a9ecf"><code>function mostrar_bandera_por_moneda() {<br>    if (session_status() == PHP_SESSION_NONE) session_start();<br>    $currency = $_SESSION['whmpress_currency'] ?? null;<br><br>    if ($currency == '2') {<br>        return '&lt;img src="https://flagcdn.com/w40/ar.png" alt="Argentina" width="24" height="18">';<br>    } elseif ($currency == '1') {<br>        return '&lt;span style="font-size:24px;">&#x1f310;&lt;/span>';<br>    }<br>    return '';<br>}<br>add_shortcode('moneda_bandera', 'mostrar_bandera_por_moneda');<br></code></pre>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f449.png" alt="👉" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Uso: <code>[moneda_bandera]</code><br>Se puede usar al lado del precio o del selector para que sea más visual <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f5bc.png" alt="🖼" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2728.png" alt="✨" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Resultado final</h2>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Precios dinámicos según país<br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Cambios manuales de moneda respetados<br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Visualización con íconos o banderas<br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Todo usando <strong>shortcodes simples</strong> en WordPress</p>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>📋Metodologías de trabajo para proyectos</title>
		<link>https://blog.sergiorios.com.ar/metodologias-organizacion-proyectos-scrum-kanban-gantt/</link>
		
		<dc:creator><![CDATA[sergio]]></dc:creator>
		<pubDate>Fri, 30 May 2025 10:17:33 +0000</pubDate>
				<category><![CDATA[Experiencia]]></category>
		<category><![CDATA[Trabajo]]></category>
		<category><![CDATA[gantt]]></category>
		<category><![CDATA[kanban]]></category>
		<category><![CDATA[metodologias]]></category>
		<category><![CDATA[scrum]]></category>
		<guid isPermaLink="false">https://blog.sergiorios.com.ar/?p=138</guid>

					<description><![CDATA[En los últimos meses estuve explorando y probando distintas metodologías de trabajo para organizar mis proyectos como desarrollador. Como muchos, al principio empecé usando múltiples herramientas dispersas: una app para tareas, otra para notas, otra para calendarios, alguna para seguimiento de progreso, y otra más para documentación. Pero con el tiempo me di cuenta de &#8230; <a href="https://blog.sergiorios.com.ar/metodologias-organizacion-proyectos-scrum-kanban-gantt/" class="more-link">Continuá leyendo <span class="screen-reader-text">📋Metodologías de trabajo para proyectos</span></a>]]></description>
										<content:encoded><![CDATA[
<p>En los últimos meses estuve explorando y probando distintas <strong>metodologías de trabajo</strong> para organizar mis proyectos como desarrollador. Como muchos, al principio empecé usando múltiples herramientas dispersas: una app para tareas, otra para notas, otra para calendarios, alguna para seguimiento de progreso, y otra más para documentación. Pero con el tiempo me di cuenta de que eso me generaba más fricción que productividad.</p>



<p>Este es un resumen de mi recorrido, las metodologías que probé, lo que aprendí de cada una, y cómo llegué a construir un sistema más simple y centralizado para gestionar mi trabajo.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">¿Qué metodologías probé?</h3>



<h4 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f300.png" alt="🌀" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>SCRUM</strong></h4>



<p>Scrum es una metodología ágil orientada a equipos, donde el trabajo se divide en ciclos llamados <strong>sprints</strong> (generalmente de 1 a 4 semanas). Cada sprint tiene objetivos definidos y un backlog priorizado. Incluye roles como el <em>Scrum Master</em>, reuniones diarias (stand-ups), retrospectivas, y revisiones al final del sprint.</p>



<p><strong>¿Qué aprendí?</strong><br>Me gustó la idea de trabajar por ciclos con objetivos claros. Sin embargo, Scrum está más pensado para equipos, y como trabajo de forma independiente o en proyectos chicos, no siempre se adapta bien a mis necesidades.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h4 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4cb.png" alt="📋" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>KANBAN</strong></h4>



<p>Kanban es un sistema visual para gestionar tareas usando un <strong>tablero dividido en columnas</strong> como: “Por hacer”, “En proceso”, y “Hecho”. Es flexible, no requiere sprints ni roles específicos, y permite visualizar el flujo de trabajo fácilmente.</p>



<p><strong>¿Qué aprendí?</strong><br>Fue la metodología que mejor se adaptó a mi estilo. Poder ver el avance de mis tareas de forma clara me ayudó a priorizar y mantener el foco sin sobrecargarme. Además, la implementación es sencilla.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h4 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4c5.png" alt="📅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Diagrama de Gantt</strong></h4>



<p>El diagrama de Gantt permite planificar tareas en el tiempo, viendo cuánto dura cada actividad y cómo se relaciona con las demás. Es muy útil para <strong>proyectos con muchas dependencias y fechas clave</strong>.</p>



<p><strong>¿Qué aprendí?</strong><br>Me sirvió para visualizar el panorama completo de un proyecto, sobre todo cuando tengo varias etapas encadenadas. Pero para el día a día lo sentí algo rígido. Lo uso en fases de planificación, pero no para seguimiento diario.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">El problema de las herramientas dispersas</h3>



<p>Durante mucho tiempo probé usar:</p>



<ul class="wp-block-list">
<li>Trello como tablero colaborativo,</li>



<li>Google Keep para notas,</li>



<li>Notion para ambas,</li>



<li>Google Calendar para eventos,</li>



<li>Drive o Notion para documentación,</li>



<li>Jira para scrum y tablero colaborativo,</li>



<li>GitHub solo para código…</li>
</ul>



<p>Este enfoque tiene una gran desventaja: <strong>la fragmentación</strong>. Terminás teniendo la info por todos lados, perdiendo tiempo buscando dónde estaba cada cosa, duplicando tareas, o directamente olvidando ideas. No había una visión clara y unificada de cada proyecto.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">La solución: centralizar y simplificar</h3>



<p>Después de mucho probar, tomé la decisión de <strong>centralizar casi todo mi flujo de trabajo en GitHub</strong>. ¿Cómo lo hago?</p>



<ul class="wp-block-list">
<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Uso los Projects de GitHub con tableros Kanban</strong> para organizar mis tareas.</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4c1.png" alt="📁" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Cada proyecto tiene su propio <strong>repositorio con documentación en el README</strong> o en archivos Markdown dentro del repo.</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4dd.png" alt="📝" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Uso <strong>Google Docs</strong> solo para escribir documentos largos o colaborativos (como planes, acuerdos, etc.).</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4c5.png" alt="📅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Llevo un <strong>calendario de bloques de trabajo</strong> para enfocar mis tareas en tiempos definidos, como &#8220;bloques de 1 o 2 horas&#8221; según la complejidad.</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4d3.png" alt="📓" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Para cosas rápidas o ideas, uso los Issues o los Projects como notas temporales.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Trabajar por bloques de tiempo</h3>



<p>Una parte clave de mi organización actual es definir bloques de trabajo. En lugar de listas infinitas, me enfoco en:</p>



<ul class="wp-block-list">
<li>Establecer objetivos concretos por día.</li>



<li>Trabajar en sesiones de tiempo controlado (como técnica Pomodoro o bloques de 90 minutos).</li>



<li>Evitar multitasking y mantener el foco.</li>
</ul>



<p>Esto me permite tener claridad mental, avanzar más y evitar el desgaste que trae el desorden.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Conclusión</h3>



<p>No existe una metodología perfecta, y cada una tiene algo valioso para aportar. Lo importante es <strong>adaptarlas a tu forma de trabajar</strong> y no quedar preso de las herramientas. Para mí, la clave fue:</p>



<ul class="wp-block-list">
<li><strong>Visualizar el trabajo</strong> con Kanban.</li>



<li><strong>Planificar grandes tareas</strong> con Gantt cuando es necesario.</li>



<li><strong>Reducir el caos de herramientas dispersas.</strong></li>



<li><strong>Enfocar el tiempo en bloques productivos.</strong></li>



<li>Y sobre todo, mantener todo lo más simple y centralizado posible.</li>
</ul>



<p>Si estás en la búsqueda de un sistema de trabajo más organizado, te animo a que pruebes, mezcles, adaptes… y sobre todo, que escuches lo que realmente te funciona.</p>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>🌐API personalizada en WHMCS</title>
		<link>https://blog.sergiorios.com.ar/crear-api-personalizada-whmcs-automatizacion/</link>
		
		<dc:creator><![CDATA[sergio]]></dc:creator>
		<pubDate>Fri, 18 Oct 2024 21:27:30 +0000</pubDate>
				<category><![CDATA[Experiencia]]></category>
		<category><![CDATA[Trabajo]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[whmcs]]></category>
		<guid isPermaLink="false">https://blog.sergiorios.com.ar/?p=80</guid>

					<description><![CDATA[Hoy quiero compartir una experiencia práctica que tuve desarrollando una API personalizada para WHMCS, orientada a resolver una necesidad muy específica: consultar si un cliente existe en el sistema a partir de datos como su ID, DNI o CUIT. Este proyecto surgió a raíz de un requerimiento de integración con una central telefónica, que necesitaba &#8230; <a href="https://blog.sergiorios.com.ar/crear-api-personalizada-whmcs-automatizacion/" class="more-link">Continuá leyendo <span class="screen-reader-text">🌐API personalizada en WHMCS</span></a>]]></description>
										<content:encoded><![CDATA[
<p>Hoy quiero compartir una experiencia práctica que tuve desarrollando una <strong>API personalizada para WHMCS</strong>, orientada a resolver una necesidad muy específica: <strong>consultar si un cliente existe en el sistema a partir de datos como su ID, DNI o CUIT</strong>.</p>



<p>Este proyecto surgió a raíz de un requerimiento de integración con una <strong>central telefónica</strong>, que necesitaba acceder a esta información en tiempo real para facilitar la identificación del cliente durante las llamadas entrantes.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9e0.png" alt="🧠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> El problema: identificar clientes desde un sistema externo</h3>



<p>La necesidad era simple pero concreta: validar si un cliente está registrado en WHMCS y, de ser así, <strong>devolver algunos datos clave</strong>, como nombre, apellido y correo electrónico. Esta información debía estar disponible a través de una API que pudiera ser consumida desde un script externo ejecutado por la central telefónica.</p>



<p>El desafío fue diseñar una solución <strong>rápida, segura y sencilla de implementar</strong>, respetando el entorno de WHMCS y asegurando la correcta exposición de los datos.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f6e0.png" alt="🛠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> La solución: una API de consulta de clientes</h3>



<p>La respuesta fue desarrollar una <strong>API REST personalizada</strong> dentro de WHMCS, capaz de recibir uno de los siguientes parámetros:</p>



<ul class="wp-block-list">
<li><code>client_id</code></li>



<li><code>dni</code></li>



<li><code>cuit</code></li>
</ul>



<p>A partir de ese dato, la API realiza una búsqueda en el sistema y devuelve una respuesta en formato <strong>JSON</strong>. Un ejemplo de respuesta positiva sería:</p>



<pre class="wp-block-preformatted has-white-color has-dark-gray-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-73942dca76e8aefb147b0aeb9cdcd798"><code>{<br>  "result": "success",<br>  "totalresults": 1,<br>  "clients": [<br>    {<br>      "client_id": 123,<br>      "firstname": "Sergio",<br>      "lastname": "Rios",<br>      "email": "sergio@example.com"<br>    }<br>  ]<br>}<br></code></pre>



<p>Si no se encuentra ningún cliente que coincida con los parámetros enviados, la respuesta devuelve un estado diferente, informando que no hay resultados.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f914.png" alt="🤔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> ¿Qué es una API y cómo se consume?</h3>



<p>Una <strong>API (Interfaz de Programación de Aplicaciones)</strong> permite que distintos sistemas se comuniquen entre sí de forma estructurada. En este caso, nuestra API actúa como un puente entre WHMCS y cualquier sistema externo que necesite acceder a los datos de clientes.</p>



<p>Para consumir esta API podés usar herramientas como <strong>Postman</strong> o <strong>Insomnia</strong>, ideales para testear y visualizar respuestas HTTP. Los pasos básicos para probarla son:</p>



<ol class="wp-block-list">
<li><strong>Crear una solicitud</strong> del tipo GET o POST (según cómo se haya implementado).</li>



<li><strong>Ingresar la URL del endpoint</strong> de la API.</li>



<li><strong>Agregar los parámetros de búsqueda</strong>, como el DNI, CUIT o ID.</li>



<li><strong>Autenticarse</strong>, si la API lo requiere (por ejemplo, mediante tokens o headers personalizados).</li>



<li><strong>Enviar la solicitud</strong> y observar la respuesta en formato JSON.</li>
</ol>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4c4.png" alt="📄" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Documentación</h3>



<p>Toda la API fue documentada: se detallan los parámetros requeridos, los métodos disponibles, ejemplos de uso y consideraciones de autenticación. Si te interesa consultarla, podés encontrarla en mi repositorio de GitHub:</p>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f449.png" alt="👉" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <a href="https://github.com/sergiorioscomar/getclientiddnicuit">Mi cuenta en GitHub</a></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Conclusiones</h3>



<p>Desarrollar esta API fue una gran oportunidad para afianzar conceptos como:</p>



<ul class="wp-block-list">
<li>La estructura y seguridad en el diseño de APIs.</li>



<li>Cómo integrar WHMCS con sistemas externos.</li>



<li>La importancia de la documentación técnica clara para facilitar el uso de tus desarrollos.</li>
</ul>



<p>Aunque se trató de una funcionalidad puntual, este tipo de soluciones muestran cómo pequeñas integraciones pueden mejorar significativamente los procesos en entornos reales.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>🏷️Generador de códigos de barras</title>
		<link>https://blog.sergiorios.com.ar/generador-codigos-barra-php-sin-librerias/</link>
		
		<dc:creator><![CDATA[sergio]]></dc:creator>
		<pubDate>Tue, 17 Sep 2024 23:12:15 +0000</pubDate>
				<category><![CDATA[Experiencia]]></category>
		<category><![CDATA[Trabajo]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[PICQER]]></category>
		<guid isPermaLink="false">https://blog.sergiorios.com.ar/?p=59</guid>

					<description><![CDATA[Hace unas semanas, me encontré con un problema recurrente: una API externa que generaba códigos de barras para facturas en un sistema de cobros causaba fallos tras cada actualización. Esto afectaba directamente el funcionamiento del sistema y complicaba los procesos de facturación. Cansado de estos imprevistos y de depender de servicios de terceros, decidí buscar &#8230; <a href="https://blog.sergiorios.com.ar/generador-codigos-barra-php-sin-librerias/" class="more-link">Continuá leyendo <span class="screen-reader-text">🏷️Generador de códigos de barras</span></a>]]></description>
										<content:encoded><![CDATA[
<p>Hace unas semanas, me encontré con un problema recurrente: una API externa que generaba códigos de barras para facturas en un sistema de cobros causaba fallos tras cada actualización. Esto afectaba directamente el funcionamiento del sistema y complicaba los procesos de facturación.</p>



<p>Cansado de estos imprevistos y de depender de servicios de terceros, decidí buscar una solución más robusta y bajo mi control: desarrollar mi propio generador de códigos de barras que funcione directamente en mi servidor.</p>



<h3 class="wp-block-heading">La solución: generar códigos de barras con PHP y PICQER</h3>



<p>Investigando opciones, encontré una excelente biblioteca en PHP llamada <a class="" href="https://github.com/picqer/php-barcode-generator">PICQER</a>. Esta librería permite generar códigos de barras en distintos formatos de manera simple, rápida y completamente local.</p>



<h4 class="wp-block-heading">¿Qué es PICQER?</h4>



<p>PICQER es una biblioteca PHP liviana y eficiente para generar códigos de barras sin necesidad de servicios externos. Soporta formatos como Code 128, EAN-13, EAN-8, entre otros, y permite integrarla fácilmente en cualquier proyecto PHP.</p>



<ul class="wp-block-list">
<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4e6.png" alt="📦" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <a>Ver en Packagist</a></li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4bb.png" alt="💻" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <a class="" href="https://github.com/picqer/php-barcode-generator">Ver en GitHub</a></li>
</ul>



<h3 class="wp-block-heading">Ventajas de usar PICQER</h3>



<ul class="wp-block-list">
<li><strong>Evita dependencias externas</strong>: al alojar el generador en tu propio servidor, no dependés de terceros que puedan cambiar políticas, precios o servicios.</li>



<li><strong>Control total</strong>: podés personalizar la generación y visualización de los códigos según las necesidades del proyecto.</li>



<li><strong>Alto rendimiento</strong>: los escáneres detectan rápidamente los códigos generados, lo cual es fundamental en entornos donde la velocidad es clave.</li>



<li><strong>Fácil implementación</strong>: la librería tiene una curva de aprendizaje baja y viene con ejemplos útiles.</li>
</ul>



<h3 class="wp-block-heading">Ejemplo de implementación básica</h3>



<pre class="wp-block-preformatted has-white-color has-dark-gray-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-8f86b18ab37f57b3c0e2ffd181018df6"><br>&lt;?php<br><code>require 'vendor/autoload.php';<br><br>use Picqer\Barcode\BarcodeGeneratorHTML;<br><br>$generator = new BarcodeGeneratorHTML();<br>$barcodeNumber = isset($_GET['number']) ? $_GET['number'] : '1234567891011121314151617181920';<br><br>echo $generator-&gt;getBarcode($barcodeNumber, $generator::TYPE_CODE_128);<br>echo '&lt;p&gt;' . $barcodeNumber . '&lt;/p&gt;';</code><br>?&gt;<code><br></code></pre>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Podés ver este ejemplo funcionando en mi sitio:<br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f449.png" alt="👉" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <a class="" href="https://sergiorios.com.ar/barcode/bardcode.php?number=1234567891011121314151617181920">Generador de Código de Barras</a></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">¿Cómo integrarlo en tu proyecto?</h3>



<ol class="wp-block-list">
<li><strong>Instalá la librería con Composer</strong>: </li>
</ol>



<pre class="wp-block-preformatted has-white-color has-dark-gray-background-color has-text-color has-background has-link-color has-medium-font-size wp-elements-7f7910292290a22f0d5165799afc00d1"><code>bash</code><br><code>composer require picqer/php-barcode-generator</code> </pre>



<p>2. <strong>Configurá el generador</strong>: adaptá el código de ejemplo a tu necesidad. Podés generar el código como HTML, PNG o SVG, dependiendo del formato que necesites.</p>



<p>3. <strong>Personalizá el tipo de código</strong>: la biblioteca soporta múltiples tipos de códigos como <code>TYPE_CODE_128</code>, <code>TYPE_EAN_13</code>, etc.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Conclusión</h3>



<p>Desarrollar tu propio generador de códigos de barras usando una herramienta como PICQER es una excelente forma de independizarte de servicios externos poco confiables. Es una solución sencilla, eficiente y altamente adaptable a cualquier entorno PHP.</p>



<p>Si estás en una situación similar o simplemente querés mejorar el control sobre tu sistema, te recomiendo darle una oportunidad a esta librería.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>📝Integración API WordPress para mostrar posts</title>
		<link>https://blog.sergiorios.com.ar/consumir-api-wordpress-php-mostrar-posts/</link>
		
		<dc:creator><![CDATA[sergio]]></dc:creator>
		<pubDate>Wed, 07 Feb 2024 22:57:25 +0000</pubDate>
				<category><![CDATA[Experiencia]]></category>
		<category><![CDATA[Trabajo]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">https://blog.sergiorios.com.ar/?p=55</guid>

					<description><![CDATA[En esta publicación, quiero compartir una funcionalidad que recientemente me tocó agregar en el sitio web a una empresa, y que también he implementado en mi propia web. La idea es integrar la API de WordPress en tu sitio web o portafolio para mostrar las últimas publicaciones de tu blog. Es una funcionalidad interesante que &#8230; <a href="https://blog.sergiorios.com.ar/consumir-api-wordpress-php-mostrar-posts/" class="more-link">Continuá leyendo <span class="screen-reader-text">📝Integración API WordPress para mostrar posts</span></a>]]></description>
										<content:encoded><![CDATA[
<p>En esta publicación, quiero compartir una funcionalidad que recientemente me tocó agregar en el sitio web a una empresa, y que también he implementado en mi propia web. La idea es integrar la API de WordPress en tu sitio web o portafolio para mostrar las últimas publicaciones de tu blog. Es una funcionalidad interesante que puede añadir valor a tu perfil profesional al mantenerlo actualizado con tu contenido más reciente.</p>



<p>Voy a explicar cómo lo hice utilizando Laravel, un framework de PHP que facilita mucho el desarrollo web. A continuación, les muestro el código que usé para obtener las publicaciones de un blog de WordPress y mostrarlas en la web.</p>



<h4 class="wp-block-heading">Paso 1: Obtener las Publicaciones del Blog</h4>



<p>Primero, creamos una función en Laravel para obtener las publicaciones. La API de WordPress ofrece un endpoint para obtener los posts, que es: <code>https://[URL DE TU BLOG]/wp-json/wp/v2/posts</code>. Vamos a solicitar las últimas 3 publicaciones, pero este número puede ajustarse según tus necesidades.</p>



<pre class="wp-block-code has-white-color has-dark-gray-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-0828fdf7b77e7587caeb95015fa66083"><code>public function getBlogPosts()
{
    // URL para obtener las publicaciones
    $url = 'https://&#91;URL DE TU BLOG]/wp-json/wp/v2/posts?per_page=3';

    // Hacer la solicitud cURL para obtener las publicaciones
    $posts = $this->makeCurlRequest($url);

    // Si hubo un error en la solicitud
    if (!$posts) {
        return view('index', &#91;'publicaciones' => &#91;]]);
    }

    // Arreglo donde guardaremos las publicaciones con las imágenes
    $postsWithImages = &#91;];

    // Recorrer las publicaciones para obtener la imagen destacada
    foreach ($posts as $post) {
        $featuredMediaId = $post&#91;'featured_media'];

        // Si la publicación tiene imagen destacada, hacer otra solicitud para obtener los detalles de la imagen
        if ($featuredMediaId) {
            $mediaUrl = "https://&#91;URL DE TU BLOG]/wp-json/wp/v2/media/$featuredMediaId";
            $mediaDetails = $this->makeCurlRequest($mediaUrl);

            if ($mediaDetails &amp;&amp; isset($mediaDetails&#91;'media_details']&#91;'sizes']&#91;'full']&#91;'source_url'])) {
                $post&#91;'featured_image_url'] = $mediaDetails&#91;'media_details']&#91;'sizes']&#91;'full']&#91;'source_url'];
            } else {
                $post&#91;'featured_image_url'] = null;
            }
        } else {
            $post&#91;'featured_image_url'] = null;
        }

        // Agregar la publicación con su imagen al arreglo
        $postsWithImages&#91;] = $post;
    }

    // Pasar las publicaciones con las imágenes a la vista
    return view('index', &#91;
        'publicaciones' => $postsWithImages,
    ]);
}
</code></pre>



<h4 class="wp-block-heading">Paso 2: Configurar la Función <code>makeCurlRequest</code></h4>



<p>Para realizar las solicitudes a la API de WordPress, utilizamos una función llamada <code>makeCurlRequest</code>, que se encarga de hacer la solicitud cURL y devolver los datos obtenidos. Asegúrate de tenerla implementada en tu código:</p>



<pre class="wp-block-code has-white-color has-dark-gray-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-d118943ed5e2b37ee3c619c9c5421869"><code>private function makeCurlRequest($url)
    {
        // Inicializar cURL
        $ch = curl_init();

        // Configurar opciones de cURL
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);  

        // Ejecutar la solicitud
        $response = curl_exec($ch);

        // Manejar errores de cURL
        if (curl_errno($ch)) {
            curl_close($ch);
            return false;
        }

        // Cerrar cURL
        curl_close($ch);

        // Decodificar la respuesta JSON
        return json_decode($response, true);
    }
</code></pre>



<h4 class="wp-block-heading">Paso 3: Actualizar la Vista para Mostrar las Publicaciones</h4>



<p>Finalmente, debes actualizar la vista para mostrar las publicaciones con los títulos, extractos y, si es posible, las imágenes destacadas. El siguiente código es un ejemplo básico de cómo hacerlo en Blade, la plantilla de Laravel:</p>



<pre class="wp-block-code has-white-color has-dark-gray-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-72d267687ef49abf36bff3483505de05"><code>&lt;!-- blog dinamico wp --&gt;
        &lt;div class="container py-5"&gt;
            &lt;h1 class="text-center mb-4"&gt;Últimas Publicaciones de Mi Blog&lt;/h1&gt;

            @if(isset($publicaciones) &amp;&amp; count($publicaciones) &gt; 0)
                &lt;div class="row"&gt;
                    @foreach($publicaciones as $publicacion)
                        &lt;div class="col-md-4 mb-4"&gt;
                            &lt;div class="card shadow-sm h-100"&gt;
                                &lt;a href="#" target="_blank"&gt;
                                    @if (isset($publicacion&#91;'featured_image_url']))
                                        &lt;img src="{{ $publicacion&#91;'featured_image_url'] }}"
                                            class="card-img-top img-fluid"
                                            alt="Imagen destacada del post"
                                            style="max-height: 200px; object-fit: cover;"&gt;
                                    @else
                                        &lt;img src="/ruta/a/imagen/por_defecto.jpg"
                                            class="card-img-top img-fluid"
                                            alt="Imagen por defecto"
                                            style="max-height: 200px; object-fit: cover;"&gt;
                                    @endif
                                &lt;/a&gt;
                                &lt;div class="card-body"&gt;
                                    &lt;h5 class="card-title"&gt;
                                        &lt;a href="{{ $publicacion&#91;'link'] }}" target="_blank" class="text-dark text-decoration-none"&gt;{{ $publicacion&#91;'title']&#91;'rendered'] }}&lt;/a&gt;
                                    &lt;/h5&gt;
                                    &lt;p class="card-text"&gt;{{ Str::limit(strip_tags($publicacion&#91;'excerpt']&#91;'rendered']), 150) }}&lt;/p&gt;
                                &lt;/div&gt;
                                &lt;div class="card-footer bg-transparent text-end"&gt;
                                    &lt;a href="{{ $publicacion&#91;'link'] }}" class="btn btn-primary btn-sm" target="_blank"&gt;Leer más&lt;/a&gt;
                                &lt;/div&gt;
                            &lt;/div&gt;
                        &lt;/div&gt;
                    @endforeach

                &lt;/div&gt;
            @else
                &lt;p class="text-center"&gt;No se encontraron publicaciones.&lt;/p&gt;
            @endif
        &lt;/div&gt;
        &lt;/section&gt;
</code></pre>



<h4 class="wp-block-heading">Consideraciones Adicionales</h4>



<ul class="wp-block-list">
<li><strong>Reemplaza <code>[URL DE TU BLOG]</code> por la URL real de tu blog.</strong></li>



<li>Si las publicaciones no tienen imágenes destacadas, la propiedad <code>featured_media</code> será <code>0</code>. Puedes manejar este caso mostrando una imagen predeterminada o simplemente omitiendo la imagen.</li>



<li>Puedes personalizar la cantidad de publicaciones a mostrar cambiando el parámetro <code>per_page</code> en la URL.</li>
</ul>



<p>Espero que esta guía te sea de utilidad si alguna vez necesitas integrar publicaciones de un blog de WordPress en tu sitio web. ¡No dudes en experimentar con la API de WordPress y adaptarla a tus necesidades!</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>📚Primeros desafíos con WHMCS</title>
		<link>https://blog.sergiorios.com.ar/primeros-pasos-whmcs-problemas-soluciones/</link>
		
		<dc:creator><![CDATA[sergio]]></dc:creator>
		<pubDate>Tue, 17 Jan 2023 23:39:27 +0000</pubDate>
				<category><![CDATA[Experiencia]]></category>
		<category><![CDATA[Trabajo]]></category>
		<category><![CDATA[modulo]]></category>
		<category><![CDATA[whmcs]]></category>
		<guid isPermaLink="false">https://blog.sergiorios.com.ar/?p=66</guid>

					<description><![CDATA[En esta publicación quiero compartirles mi primera experiencia trabajando con WHMCS y el uso del ORM Eloquent en PHP. Fue un proyecto desafiante pero a la vez muy enriquecedor, ya que me permitió aprender nuevas tecnologías y poner en práctica mis habilidades de desarrollo. ¿Qué es WHMCS? WHMCS (Web Host Manager Complete Solution) es una &#8230; <a href="https://blog.sergiorios.com.ar/primeros-pasos-whmcs-problemas-soluciones/" class="more-link">Continuá leyendo <span class="screen-reader-text">📚Primeros desafíos con WHMCS</span></a>]]></description>
										<content:encoded><![CDATA[
<p>En esta publicación quiero compartirles mi primera experiencia trabajando con WHMCS y el uso del ORM Eloquent en PHP. Fue un proyecto desafiante pero a la vez muy enriquecedor, ya que me permitió aprender nuevas tecnologías y poner en práctica mis habilidades de desarrollo.</p>



<h4 class="wp-block-heading">¿Qué es WHMCS?</h4>



<p><strong>WHMCS (Web Host Manager Complete Solution)</strong> es una plataforma de automatización de facturación y gestión para empresas de hosting. Permite a las empresas gestionar clientes, servicios, facturación, soporte técnico, y más, en un solo lugar. Una de sus principales ventajas es la flexibilidad para personalizar funcionalidades mediante la creación de módulos y extensiones, lo que facilita la integración con otros sistemas o la implementación de características específicas.</p>



<h4 class="wp-block-heading">¿Qué es el ORM Eloquent?</h4>



<p>El <strong>ORM (Object-Relational Mapping)</strong> Eloquent es una herramienta que forma parte del framework Laravel para trabajar con bases de datos. Facilita la interacción con la base de datos al permitir manipular datos utilizando clases y objetos en lugar de consultas SQL tradicionales. Esto simplifica muchas tareas de desarrollo y hace que el código sea más legible y fácil de mantener.</p>



<h4 class="wp-block-heading">El Desafío: Desarrollar un Módulo de Retención de Clientes</h4>



<p>Mi primera tarea con WHMCS consistió en desarrollar un módulo para la retención de clientes. La idea principal del módulo era ayudar a los operadores a contactar a los clientes que solicitaban la baja de un servicio y ofrecerles un descuento o incentivos para que reconsideraran su decisión.</p>



<p><strong>Características del Módulo:</strong></p>



<ol class="wp-block-list">
<li><strong>Detección de Solicitudes de Baja:</strong> El módulo debía detectar cuando un cliente solicitaba la cancelación de un servicio.</li>



<li><strong>Asignación de Operador:</strong> Se asignaba un operador para contactar al cliente de forma proactiva.</li>



<li><strong>Ofertas de Retención:</strong> Se presentaban distintas opciones, como descuentos o mejoras en el servicio, para motivar al cliente a quedarse.</li>



<li><strong>Registro de Seguimiento:</strong> El módulo registraba las acciones del operador, incluyendo las ofertas realizadas y la respuesta del cliente.</li>
</ol>



<figure class="wp-block-image size-large is-resized"><img fetchpriority="high" decoding="async" width="1024" height="223" src="https://blog.sergiorios.com.ar/wp-content/uploads/2024/10/retencion-1-1024x223.png" alt="" class="wp-image-74" style="width:715px;height:auto" srcset="https://blog.sergiorios.com.ar/wp-content/uploads/2024/10/retencion-1-1024x223.png 1024w, https://blog.sergiorios.com.ar/wp-content/uploads/2024/10/retencion-1-300x65.png 300w, https://blog.sergiorios.com.ar/wp-content/uploads/2024/10/retencion-1-768x167.png 768w, https://blog.sergiorios.com.ar/wp-content/uploads/2024/10/retencion-1.png 1148w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h4 class="wp-block-heading">Desarrollo del Módulo con PHP y Eloquent</h4>



<p>Al trabajar en este proyecto, utilicé el ORM Eloquent para interactuar con la base de datos de WHMCS. La principal ventaja fue la capacidad de definir modelos y relaciones que facilitaban el acceso a la información de los clientes y sus servicios de manera intuitiva. Fue una experiencia interesante, ya que fue la primera vez que implementaba un ORM en un entorno real, y me permitió ver la potencia de usar Eloquent para escribir código limpio y estructurado.</p>



<h4 class="wp-block-heading">Retos y Aprendizajes</h4>



<p>El principal reto fue familiarizarme con el ecosistema de WHMCS y su estructura de datos. Al ser una plataforma bastante específica para empresas de hosting, su curva de aprendizaje puede ser pronunciada. Sin embargo, trabajar con Eloquent ayudó a simplificar el manejo de la base de datos, lo que hizo que el proceso de desarrollo fuera más fluido.</p>



<h4 class="wp-block-heading">Resultado Final</h4>



<p>El módulo de retención de clientes quedó funcional y permitió mejorar el proceso de atención al cliente, brindando a los operadores una herramienta útil para mantener la relación con los clientes y reducir la tasa de cancelaciones.</p>



<h4 class="wp-block-heading">Conclusión</h4>



<p>Desarrollar mi primer módulo para WHMCS fue una experiencia muy valiosa. Me permitió no solo aprender a trabajar con esta plataforma, sino también mejorar mis habilidades en PHP y en el uso de Eloquent como ORM. Si estás comenzando con WHMCS, te animo a explorar las posibilidades que ofrece la creación de módulos personalizados. Es una excelente manera de aprender y a la vez aportar valor a tu equipo o clientes.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>🎨Mis comienzos en diseño y desarrollo web</title>
		<link>https://blog.sergiorios.com.ar/primeros-pasos-diseno-desarrollo-web/</link>
		
		<dc:creator><![CDATA[sergio]]></dc:creator>
		<pubDate>Sun, 18 Oct 2020 21:50:00 +0000</pubDate>
				<category><![CDATA[Anecdota]]></category>
		<category><![CDATA[Experiencia]]></category>
		<category><![CDATA[Historia]]></category>
		<category><![CDATA[desarrollo-web]]></category>
		<category><![CDATA[diseño-web]]></category>
		<guid isPermaLink="false">https://blog.sergiorios.com.ar/?p=85</guid>

					<description><![CDATA[Cuando empecé en el mundo del desarrollo web, trabajaba en un servicio informático, y administraba las redes y servidores en un colegio. Mi jornada comenzaba a las 8 de la mañana y terminaba a las 8 de la noche,salia una hora antes para poder asistir a clases de programación web, seguridad informática y administración de &#8230; <a href="https://blog.sergiorios.com.ar/primeros-pasos-diseno-desarrollo-web/" class="more-link">Continuá leyendo <span class="screen-reader-text">🎨Mis comienzos en diseño y desarrollo web</span></a>]]></description>
										<content:encoded><![CDATA[
<p>Cuando empecé en el mundo del desarrollo web, trabajaba en un servicio informático, y administraba las redes y servidores en un colegio. Mi jornada comenzaba a las 8 de la mañana y terminaba a las 8 de la noche,salia una hora antes para poder asistir a clases de programación web, seguridad informática y administración de sistemas. A pesar de lo agotador, encontraba los fines de semana perfectos para aplicar todo lo que iba aprendiendo.</p>



<h3 class="wp-block-heading">Mi Primer Proyecto Web: Un Sitio para un Estudio Jurídico</h3>



<p>La oportunidad de crear mi primer sitio web completo llegó cuando un cliente del servicio informático me pidió que desarrollara una página para su estudio jurídico, si me animaba. Fue un desafío que me permitió entender los pasos necesarios para llevar a cabo un proyecto web desde cero: el diseño, la accesibilidad y la importancia de definir el contenido. Me di cuenta de que muchos clientes no sabían qué información incluir, lo que me llevó a guiarlos y brindarles apoyo para estructurar el contenido.</p>



<p>Comencé con HTML, CSS y JavaScript, utilizando lo que sabía para dar vida al sitio. Recuerdo haber programado efectos en los textos con JavaScript para hacer la página más entretenida y, en esa época, era común agregar música de fondo, algo que también me solicitaron. Aunque ahora esa práctica ha quedado en el pasado, en aquel momento era lo que se estilaba para hacer un sitio más &#8220;interactivo&#8221;. El término &#8220;full stack&#8221; aún no existía, estamos hablando del año 2011/2012 mas o menos, y quienes hacíamos de todo en el desarrollo web éramos conocidos simplemente como &#8220;webmasters&#8221;. Yo aspiraba a ser uno de ellos.</p>



<h3 class="wp-block-heading">La Satisfacción de Programar</h3>



<p>Uno de los momentos más emocionantes fue programar el formulario de contacto en PHP. Fue un desafío que me ayudó a mejorar mis habilidades en la lógica de programación y en el manejo de formularios. Al ver el sitio terminado, tanto el cliente como yo estábamos encantados con el resultado, lo que me motivó a seguir avanzando en mi aprendizaje.</p>



<h3 class="wp-block-heading">Actualizando el Sitio del Servicio Informático</h3>



<p>Gracias a esa primera experiencia, tuve la oportunidad de trabajar en un proyecto interno para el servicio informático donde trabajaba. El sitio web de la empresa estaba desactualizado y necesitaba un cambio urgente. Me dediqué a renovarlo, aplicando todo lo que había aprendido en mis estudios y en el proyecto del estudio jurídico. Poco a poco, fui mejorando el diseño, la estructura y el contenido, hasta lograr una versión actualizada del sitio que se ajustaba a las necesidades de la empresa.</p>



<h3 class="wp-block-heading">Conclusión</h3>



<p>Mis primeros proyectos web fueron fundamentales para comprender no solo la parte técnica del desarrollo, sino también la importancia de interactuar con los clientes y entender sus necesidades. Desde entonces, cada proyecto ha sido una oportunidad para seguir aprendiendo y mejorando en este apasionante mundo del desarrollo web.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>🖥️Introducción al mundo IT</title>
		<link>https://blog.sergiorios.com.ar/como-empece-informatica-redes-servidores/</link>
		
		<dc:creator><![CDATA[sergio]]></dc:creator>
		<pubDate>Wed, 29 Dec 2010 12:21:40 +0000</pubDate>
				<category><![CDATA[Anecdota]]></category>
		<category><![CDATA[Historia]]></category>
		<category><![CDATA[ao]]></category>
		<category><![CDATA[cs]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[juegos]]></category>
		<category><![CDATA[redes]]></category>
		<category><![CDATA[servidores]]></category>
		<guid isPermaLink="false">https://blog.sergiorios.com.ar/?p=6</guid>

					<description><![CDATA[Después de unos años en el mundo de los videos juegos offline como el Counter strike, Age of Empires, Los sims, empecé a meterme al mundo de los juegos Online 2D por recomendaciones de un amigo, un juego tipo modo Argentum Online, era un vicio, un juego de rol que hay que ir superando niveles, &#8230; <a href="https://blog.sergiorios.com.ar/como-empece-informatica-redes-servidores/" class="more-link">Continuá leyendo <span class="screen-reader-text">🖥️Introducción al mundo IT</span></a>]]></description>
										<content:encoded><![CDATA[
<p>Después de unos años en el mundo de los videos juegos offline como el Counter strike, Age of Empires, Los sims, empecé a meterme al mundo de los juegos Online 2D por recomendaciones de un amigo, un juego tipo modo Argentum Online, era un vicio, un juego de rol que hay que ir superando niveles, donde podes jugar e interactuar con tus amigos hacer equipos y conocer gente nueva en ese mundo, dedicaba mucho tiempo de mi vida, recuerdo con 13 años empecé a intentar utilizar mis conocimientos técnicos adquiridos todos esos años, para distintos fines de los cuales me podría beneficiar como cuando asistía a los cybers con amigos para jugar CS, investigaba y aprendía sobre redes en la red de los cybers y aprendía sobre los software de gestión de cyber y su seguridad, también los compartidos y obviamente como hacerme de algunos juegos y llevarlos a casa. </p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="576" src="https://blog.sergiorios.com.ar/wp-content/uploads/2024/09/cs-1024x576.jpg" alt="" class="wp-image-42" srcset="https://blog.sergiorios.com.ar/wp-content/uploads/2024/09/cs-1024x576.jpg 1024w, https://blog.sergiorios.com.ar/wp-content/uploads/2024/09/cs-300x169.jpg 300w, https://blog.sergiorios.com.ar/wp-content/uploads/2024/09/cs-768x432.jpg 768w, https://blog.sergiorios.com.ar/wp-content/uploads/2024/09/cs-1536x864.jpg 1536w, https://blog.sergiorios.com.ar/wp-content/uploads/2024/09/cs.jpg 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>Cuando se me dio la idea de aprender a programar sitios webs, y clonar sitios para hacer phishing que era la modalidad de robo de contraseñas en ese momento ya que no se les daban mucha importancia a los protocolos de seguridad, yo solo intentaba hacerme de algunas cuentas en el juego. Así empecé a introducirme al mundo del hack y crack. Lo hice por un tiempo creándome un Nick anónimo, introduciéndome en foros, siendo activo en distintas comunidades hackers del momento, pude aprender mucho sobre phishing, troyanos, gusanos, exploits, y todo lo referido al mundo del hacking del momento. Un día jugando vi que habían hackeado el servidor que jugaba, y me contacte con la persona que lo hizo, me ayudo a entender muchos conceptos de redes, servidores incluso bases de datos los cuales en ese momento el servidor tenia fallas.</p>



<p>En ese momento se me ocurrió la idea de levantar mi propio juego online 2d modo Argentum, ya que el código del juego lo habían liberado. El juego estaba programado en visual Basic 6. Lo recuerdo que había que adaptarlo para hacerlo funcionar y tocar un poco de código que obviamente la lógica no entendía mucho, pero decidí de todas formas levantar el juego en mi PC como servidor abriendo los puertos de mi modem.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="800" height="600" src="https://blog.sergiorios.com.ar/wp-content/uploads/2024/09/argentum.jpg" alt="" class="wp-image-40" srcset="https://blog.sergiorios.com.ar/wp-content/uploads/2024/09/argentum.jpg 800w, https://blog.sergiorios.com.ar/wp-content/uploads/2024/09/argentum-300x225.jpg 300w, https://blog.sergiorios.com.ar/wp-content/uploads/2024/09/argentum-768x576.jpg 768w" sizes="(max-width: 800px) 100vw, 800px" /></figure>



<p> Así fue como empecé en el mundo de las redes servidores y sitios webs, sin saber nada de programación, pude levantar mi primer juego Online con amigos, ¡y fue un éxito! A la semana contábamos con 40 usuarios online de forma simultanea y a las dos semanas llegamos a los 60, obviamente que algo andaba mal ya que empezaba a fallar el juego o se volvía lento y no entendíamos por qué.</p>



<p>Al mes de abrir el juego mi “servidor” dijo basta. Volví a dañar mi pc esta vez nuevamente la fuente de alimentación, porque no apagaba nunca mi computadora y no estaba pensada para funcionar como servidor. Me sirvió de experiencia y para ir aprendiendo sobre mis errores. El juego me ayudo a introducirme de lleno al mundo del hacking, bases de datos, redes y servidores.</p>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>👾Historia en hacking ético y sistemas</title>
		<link>https://blog.sergiorios.com.ar/historia-hacking-etico-sistemas-motivacion/</link>
		
		<dc:creator><![CDATA[sergio]]></dc:creator>
		<pubDate>Sun, 17 Oct 2010 01:23:46 +0000</pubDate>
				<category><![CDATA[Anecdota]]></category>
		<category><![CDATA[Historia]]></category>
		<category><![CDATA[ethical-hacking]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[ms-dos]]></category>
		<category><![CDATA[s.o]]></category>
		<category><![CDATA[windows]]></category>
		<guid isPermaLink="false">https://blog.sergiorios.com.ar/?p=10</guid>

					<description><![CDATA[Después de un tiempo de estar aprendiendo con mi computadora MS DOS empecé a incursionar el mundo de los videos juegos que venían para poder instalarse con disquetes. Recuerdo que al estar tanto tiempo encendida la computadora se daño la fuente de alimentación, la cual fue una buena noticia ya era hora de actualizar la &#8230; <a href="https://blog.sergiorios.com.ar/historia-hacking-etico-sistemas-motivacion/" class="more-link">Continuá leyendo <span class="screen-reader-text">👾Historia en hacking ético y sistemas</span></a>]]></description>
										<content:encoded><![CDATA[
<p>Después de un tiempo de estar aprendiendo con mi computadora MS DOS empecé a incursionar el mundo de los videos juegos que venían para poder instalarse con disquetes.</p>



<p>Recuerdo que al estar tanto tiempo encendida la computadora se daño la fuente de alimentación, la cual fue una buena noticia ya era hora de actualizar la pc para mi gusto, en el año 1998 ya había salido el Windows 98, con entorno grafico tres años antes yo tuve la oportunidad de conocer el Windows 95 en la casa de un familiar, cuando tuve el primer contacto con el mouse en el entorno grafico de color casi me explota la cabeza eso si era magia no podía entender cómo funcionaba ese mundo visual nuevo en la computadora. Después de unos años y de tanto insistir, después de cumplir su ciclo mi pc “vieja” cambiamos a un pc con Windows 98 y no solo llego con sistema operativo nuevo el hardware era mucho mas moderno, y sin hablar de la cantidad de programas y juegos que pude instalar sin contar la cantidad de archivos y músicas que llegamos a manejar ya que contaba con la experiencia de mi hermano que en ese momento ya empezaba con la idea de ser DJ. </p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="943" height="583" src="https://blog.sergiorios.com.ar/wp-content/uploads/2024/09/win98.jpg" alt="" class="wp-image-33" srcset="https://blog.sergiorios.com.ar/wp-content/uploads/2024/09/win98.jpg 943w, https://blog.sergiorios.com.ar/wp-content/uploads/2024/09/win98-300x185.jpg 300w, https://blog.sergiorios.com.ar/wp-content/uploads/2024/09/win98-768x475.jpg 768w" sizes="auto, (max-width: 943px) 100vw, 943px" /></figure>



<p>Aprendí a instalar cualquier software, drivers, juegos, hacer “trucos” en las instalaciones, a trabajar con office y todo lo que el sistema operativo nuevo podía ofrecer, estaba fascinado, pero faltaba algo… Ya que empezaba a tener experiencia investigando y aprendiendo con encarta necesitaba el acceso a internet para poder seguir aprendiendo o eso pensaba. Con la llegada de internet, mi mundo se expandió muchísimo, tanto así que la ambición de aprender y probar cosas nuevas me llevó a “Dañar” mi computadora por segunda vez, y esta vez no era por la fuente de alimentación, sino que con el tema de las descargas y ganas de aprender” me hackearon, así es mi primer virus informático cuando intentaba descargar un juego y cursos para aprender sobre informática. </p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="980" height="565" src="https://blog.sergiorios.com.ar/wp-content/uploads/2024/09/Virus-informatico.png" alt="" class="wp-image-34" srcset="https://blog.sergiorios.com.ar/wp-content/uploads/2024/09/Virus-informatico.png 980w, https://blog.sergiorios.com.ar/wp-content/uploads/2024/09/Virus-informatico-300x173.png 300w, https://blog.sergiorios.com.ar/wp-content/uploads/2024/09/Virus-informatico-768x443.png 768w" sizes="auto, (max-width: 980px) 100vw, 980px" /></figure>



<p>Tuvimos que llamar un técnico informático para que haga una “limpieza” a mi computadora. Cuando vi ese técnico llegar y solucionar el problema, entendí que quería hacer el resto de mi vida, lo principal en que me quería convertir. Estaba fascinado no solo por la solución del problema sino por cómo me infectaron aprendí un poco sobre el mundo del hacking, las malas intenciones en el mundo de internet. Quería aprender mas y mas y no tener que volver a depender de otra persona para solucionar los problemas de mi computadora. Fue así donde descubrí lo que quería hacer el resto de mi vida “solucionar problemas informáticos” y mi pasión por la seguridad informática. Ahí empezó todo con tan solo 7 años de edad.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
