<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ Enrique Viveros Acosta - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Descubre miles de cursos de programación escritos por expertos. Aprende Desarrollo Web, Ciencia de Datos, DevOps, Seguridad y obtén asesoramiento profesional para desarrolladores. ]]>
        </description>
        <link>https://www.freecodecamp.org/espanol/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ Enrique Viveros Acosta - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/espanol/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Sat, 23 May 2026 19:21:57 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/espanol/news/author/eriglesias/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ ¿Qué son los objetos en Javascript? ]]>
                </title>
                <description>
                    <![CDATA[ Los objetos son estructuras de datos importantes en JavaScript. Esto se debe en parte a que los arreglos son objetos en JavaScript, y los usarás todo el tiempo. Los objetos son muy importantes para agrupar datos y funcionalidades, por lo que puedes hacer muchas cosas con un objeto en JavaScript. ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/que-son-los-objetos-javascript/</link>
                <guid isPermaLink="false">63f500d922450a0629add5b3</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Enrique Viveros Acosta ]]>
                </dc:creator>
                <pubDate>Fri, 04 Aug 2023 05:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2023/07/Your-paragraph-text.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/objects-in-javascript/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">What are Objects in JavaScript?</a>
      </p><h3 id="los-objetos-son-estructuras-de-datos-importantes-en-javascript-esto-se-debe-en-parte-a-que-los-arreglos-son-objetos-en-javascript-y-los-usar-s-todo-el-tiempo-">Los objetos son estructuras de datos importantes en JavaScript. Esto se debe en parte a que los arreglos son objetos en JavaScript, y los usarás todo el tiempo.</h3><p>Los objetos son muy importantes para agrupar datos y funcionalidades, por lo que puedes hacer muchas cosas con un objeto en JavaScript. El nodo DOM y cualquier nodo DOM creado con <code>createElement</code> son ejemplos de un objeto en JavaScript.</p><p>En este artículo, cubriremos todo lo siguiente acerca de los objetos:</p><ul><li><a href="#objeto">¿Qué es un objeto en JavaScript? </a></li><li><a href="#crear-un-objeto">Cómo crear un objeto en JavaScript </a></li><li><a href="#agregar-props">Cómo agregar propiedades a un objeto </a></li><li><a href="#palabra-clave-let">¿Por qué usar la palabra clave <code>let</code> en lugar de la notación de punto? </a></li><li><a href="#modificar-props">Cómo modificar propiedades en un objeto</a> </li><li><a href="#eliminar-props">Cómo eliminar propiedades de un objeto</a> </li><li><a href="#claves-especiales">Cómo usar claves especiales en objetos</a></li><li><a href="#acceder-props">Cómo acceder a propiedades con corchetes cuadrados </a></li><li><a href="#establecer-props">Cómo establecer propiedades de forma dinámica </a></li><li><a href="#sintaxis-abreviada">Sintaxis abreviada de métodos</a></li><li><a href="#metodos-abreviados">Ventajas de usar métodos abreviados de objetos en lugar de métodos regulares</a></li><li><a href="#operador-propagacion">Operador de propagación de objetos</a> </li><li><a href="#destructuracion">Destructuración de objetos</a></li><li><a href="#palabra-clave-this">Cómo usar la palabra clave &nbsp;<code>this</code> en JavaScript </a></li><li><a href="#conclusion">Conclusión</a></li></ul><!--kg-card-begin: html--><h2 id="objeto"><strong>¿Qué es un objeto en JavaScript?</strong></h2><!--kg-card-end: html--><p>Los objetos en la vida cotidiana tienen propiedades y acciones de "método". Tomemos, por ejemplo, un ventilador. Es un objeto con propiedades como marca, color o modelo, y acciones que puede realizar, como enfriar habitaciones y controlar la humedad.</p><p>Como se explicó arriba, los objetos en JavaScript son estructuras de datos fundamentales que comprenden propiedades y métodos. Mientras que los métodos son funciones/acciones que un objeto puede realizar (como conducir y enfriar habitaciones con objetos de la vida real como automóviles y ventiladores), las propiedades son características de un objeto, como su nombre y valor.</p><p>Los objetos te permiten agrupar datos relacionados y dividir el código en piezas lógicas. En JavaScript, tenemos valores primitivos y valores de referencia. Number, Boolean, Null, Undefined, String y Symbol son valores primitivos, mientras que los objetos como nodos DOM, arrays, etc., son valores de referencia.</p><p>Tanto en la vida real como en JavaScript, puedes usar objetos de diferentes formas según sus propiedades y métodos. Aprenderemos más sobre los objetos en JavaScript ahora.</p><!--kg-card-begin: html--><h2 id="crear-un-objeto"><strong>Cómo crear un objeto en JavaScript</strong></h2><!--kg-card-end: html--><p>Usaremos el siguiente código como ejemplo:</p><figure class="kg-card kg-code-card"><pre><code class="language-javascript">const person = {
  name:'kamal',
  age:30,
  friends:[
     'Shola','Ade','Ibraheem'
  ],
  greet:function(){
    alert('Hello World')
  }
}</code></pre><figcaption>Creación de un objeto&nbsp;</figcaption></figure><p>En el código anterior, tenemos un objeto <code>person</code> que creamos con llaves. El objeto tiene pares clave-valor. Puede almacenar pares clave-valor en un objeto de JavaScript, asociando cada clave con un valor único.</p><p>Estos pares clave-valor te permiten recuperar valores utilizando las claves asociadas. Por ejemplo, el objeto anterior representa a una persona con propiedades como "nombre", "edad", "amigos" y una función "saludar". Cada propiedad se convierte en un par clave-valor con el nombre de propiedad como clave y el valor de propiedad como valor. Tanto las propiedades como los métodos se crean dentro del objeto.</p><p>Para crear una clave en un objeto, no necesitas usar las palabras clave <code>let</code> o <code>const</code>. Debido a que los objetos son dinámicos, puedes agregar o cambiar propiedades sin declarar una variable. En su lugar, comienzas con el nombre que prefieras, seguido de dos puntos y luego el valor.</p><p>Creamos un arreglo <code>friends</code> (amigos) dentro del objeto para mostrar que podemos tener un objeto dentro de otro objeto. Creamos un método (que es una función) dentro del objeto con <code>greet</code> como clave.</p><!--kg-card-begin: html--><h3 id="agregar-props"><strong>Cómo crear propiedades a un objeto</strong></h3><!--kg-card-end: html--><p>Hay dos enfoques principales para agregar propiedades a un objeto en JavaScript. El primero es crear un objeto completamente nuevo.</p><pre><code class="language-javascript">let person = {
  name:'kamal',
  age:30,
  friends:[
     'Shola','Ade','Ibraheem'
  ],
  greet:function(){
    alert('Hello World')
  }
}
 person = {
  name:'kamal',
  age:30,
  friends:[
     'Shola','Ade','Ibraheem'
  ],
  greet:function(){
    alert('Hello World')
  },
  isAdmin:true
}</code></pre><p>Con el código anterior, creamos el objeto "person" utilizando la palabra clave <code>let</code>, lo que nos permite reasignarlo a un nuevo valor. Luego agregamos la propiedad "isAdmin" al objeto "person". Si ejecutas <code>console.log(person)</code>, verás que "isAdmin" ahora forma parte de las propiedades del objeto.</p><p>El segundo enfoque es agregar propiedades utilizando la notación de punto.</p><pre><code class="language-javascript">const person = {
  name:'kamal',
  age:30,
  friends:[
     'Shola','Ade','Ibraheem'
  ],
  greet:function(){
    alert('Hello World')
  }
}
person.isAdmin = true;</code></pre><p>Con la notación de punto, puedes acceder a propiedades que un objeto no ha agregado previamente. Por ejemplo, si el objeto "person" no tiene una propiedad "isAdmin", al acceder a ella se obtendrá "undefined".</p><p>Puedes agregar la propiedad "isAdmin" al objeto "person" utilizando la notación de punto, y también puedes sobrescribir cualquier propiedad asignándole un nuevo valor. Este enfoque es más corto y más simple en comparación con otros métodos.</p><!--kg-card-begin: html--><h3 id="palabra-clave-let"><strong>¿Por qué la palabra clave <span style="background-color: #eee; padding: 5px;">let</span> sobre la notación de punto?</strong></h3><!--kg-card-end: html--><p>La elección entre utilizar la palabra clave <code>let</code> y la notación de punto depende de si necesitas crear una nueva referencia de objeto o modificar una existente.</p><p>Utilizarías la palabra clave <code>let</code> para crear un nuevo objeto cuando necesites crear una nueva referencia a un objeto, independiente de cualquier referencia existente a objetos similares.</p><p>Por otro lado, utilizarías la notación de punto para agregar o modificar propiedades en una referencia existente de objeto. Esto es útil cuando deseas realizar cambios en un objeto sin crear una nueva referencia.</p><!--kg-card-begin: html--><h3 id="modificar-props"><strong>Cómo modificar las propiedades en un objeto</strong></h3><!--kg-card-end: html--><p>También puedes usar la notación de punto para modificar propiedades en un objeto. El siguiente código muestra que la propiedad <code>name</code> con el valor <code>kamal</code> se cambiará a <code>lawal</code> cuando se modifique utilizando la notación de punto.</p><pre><code class="language-javascript">const person = {
  name:'kamal',
  age:30,
  friends:[
     'Shola','Ade','Ibraheem'
  ],
  greet:function(){
    alert('Hello World')
  }
}
person.isAdmin = true;
person.name = 'lawal';
console.log(person);</code></pre><!--kg-card-begin: html--><h3 id="eliminar-props"><strong>Cómo eliminar propiedades en un objeto</strong></h3><!--kg-card-end: html--><p>Es muy sencillo eliminar una propiedad en un objeto. JavaScript tiene una palabra clave especial llamada "delete" que te permite eliminar cualquier propiedad que desees.</p><pre><code class="language-javascript">const person = {
  name:'kamal',
  age:30,
  friends:[
     'Shola','Ade','Ibraheem'
  ],
  greet:function(){
    alert('Hello World')
  }
}
person.isAdmin = true;
delete person.friends;
console.log(person);</code></pre><p>La propiedad <code>friends</code> será eliminada del objeto con el código anterior.</p><!--kg-card-begin: html--><h3 id="claves-especiales"><strong>Cómo usar claves especiales en objetos</strong></h3><!--kg-card-end: html--><p>Puedes utilizar cualquier cosa como nombre de clave que puedas utilizar como nombre de variable. Sin embargo, no todos los nombres de clave pueden funcionar como nombres de variable, ya que las claves son más flexibles que las variables.</p><pre><code class="language-javascript">let person = {
 name:'kamal',
 age:37,
}</code></pre><p>Supongamos que quieres usar "apellido" (last name) como clave en lugar de "nombre" (name). La sintaxis de JavaScript no permite dos palabras separadas en esta convención de nombres.</p><p>Pero puedes superar esto usando una clave especial en un objeto. JavaScript convierte automáticamente cualquier clave que ingreses en una cadena, incluso la clave "edad" (age). Como resultado, los objetos en JavaScript son un diccionario de claves de cadena y valores de cualquier tipo.</p><pre><code class="language-javascript">let person = {
  last name:'kamal',
  age:30,
  friends:[
     'Shola','Ade','Ibraheem'
  ],
  greet:function(){
    alert('Hello World')
  }
}</code></pre><p>Para usar "apellido" (last name) como clave en el código anterior, debes informar a JavaScript que es una clave al encerrarla entre comillas, ya sea simples o dobles. Se recomienda utilizar un nombre que también pueda ser utilizado como variable en lugar de este método excepcional de establecer una clave.</p><pre><code class="language-javascript">let person = {
  'last name':'kamal',
  age:30,
  friends:[
     'Shola','Ade','Ibraheem'
  ],
  greet:function(){
    alert('Hello World')
  }
}</code></pre><p>El uso de comillas simples para rodear "apellido" (last name) y utilizarlo como nombre de clave es un código JavaScript válido y funcionará correctamente.</p><!--kg-card-begin: html--><h3 id="acceder-props"><strong>Cómo acceder a propiedades con corchetes cuadrados</strong></h3><!--kg-card-end: html--><p>Para agregar y modificar propiedades en un objeto, puedes utilizar el método de notación de objeto. Sin embargo, en JavaScript existe otro método para acceder a las propiedades de un objeto, conocido como notación de corchetes cuadrados, que te permite acceder a una propiedad creada por una <strong>clave especial</strong> en JavaScript.</p><pre><code class="language-javascript">let person = {
  'last name':'kamal',
  age:30,
  friends:[
     'Shola','Ade','Ibraheem'
  ],
}
// console.log(person.last name); is not valid in JavaScript</code></pre><p>No puedes acceder al nombre de clave 'apellido' (last name) &nbsp;utilizando el método de notación de punto, pero puedes usar la notación de corchetes cuadrados, que está disponible para cualquier objeto.</p><pre><code class="language-javascript">console.log(person['last name']);</code></pre><p>El código anterior mostrará el valor de la clave 'apellido' (last name), que es <code>kamal</code> Sin embargo, es crucial encerrar la clave entre comillas simples o dobles.</p><!--kg-card-begin: html--><h3 id="establecer-props"><strong>Cómo establecer propiedades de forma dinámica</strong></h3><!--kg-card-end: html--><p>Puedes habilitar otra característica dinámica con corchetes y objetos en JavaScript. Esto funciona cuando necesitas definir una nueva propiedad, especialmente cuando no conoces el nombre de la propiedad de antemano.</p><p>Por ejemplo, es posible que no conozcas la entrada de usuario específica de antemano. Sin embargo, deberás agregar la propiedad con ese nombre al objeto.</p><pre><code class="language-javascript">const userName ='level';

let person = {
 'first name':'kamal',
  age:30,
  [userName]: 'see',
}
console.log(person);</code></pre><p>Al no envolver el nombre de usuario (<strong>userName</strong>) en corchetes, se agregará la propiedad con el nombre <strong>userName</strong> en lugar del valor almacenado dentro de él. Al agregar corchetes al nombre de usuario, se buscará y tomará el valor almacenado en la variable como nombre de clave y se agregará al objeto persona.</p><!--kg-card-begin: html--><h3 id="sintaxis-abreviada"><strong>Sintaxis abreviada de métodos</strong></h3><!--kg-card-end: html--><p>Hay una sintaxis alternativa que puede usar para definir un método de una manera más eficiente. Tradicionalmente, para crear un método en un objeto, se necesita una clave y un valor, donde crea el valor como un método usando la palabra clave de función.</p><pre><code class="language-javascript">let person = {
  name:'jamaldeen',
  age:30,
  hobbies:[
     'reading','playing','sleeping'
  ],
  speek:function(){
    return this.hobbies
  }
}
console.log(person.speak());</code></pre><p>En el código anterior, el método se crea con una palabra clave de función después de dos puntos. Alternativamente, podrías hacer esto:</p><pre><code class="language-javascript">let person = {
  name:'jamaldeen',
  age:30,
  hobbies:[
     'reading','playing','sleeping'
  ],
  speek(){
    return this.hobbies
  }
}
console.log(person.speak());</code></pre><p>En JavaScript, crear un método con métodos cortos de objeto es una notación abreviada. Se permite omitir la palabra clave "función" y los dos puntos (:) antes del cuerpo de la función usando los métodos cortos.</p><p>Esto se debe a que con la sintaxis del método abreviado, la propiedad se define automáticamente como método, lo que hace que la palabra clave "función" sea inútil.</p><p>El código sigue siendo funcional porque el motor de JavaScript reconoce la sintaxis abreviada y la interpreta como una definición de función regular.</p><!--kg-card-begin: html--><h3 id="metodos-abreviados"><strong>Ventajas de usar métodos cortos de objetos sobre métodos regulares</strong></h3><!--kg-card-end: html--><p>Algunas de las ventajas de usar métodos cortos de objeto sobre métodos regulares son las siguientes: </p><ol><li>Concisión: A diferencia de los métodos regulares, los métodos abreviados de objetos te permiten escribir un código más compacto y legible.</li><li>Mejor rendimiento: Aunque el rendimiento de los métodos abreviados de objetos y los métodos regulares es similar, la sintaxis más corta facilita la escritura y el mantenimiento de tu código.</li><li>Reusabilidad: Puedes reutilizar fácilmente los métodos abreviados de objetos en otros objetos.</li><li>Mejor organización: Con los métodos abreviados de objetos, puedes agrupar fácilmente métodos relacionados dentro de un objeto y mantener tu código organizado.</li></ol><p>Si bien el uso de métodos cortos de objetos es bueno, el uso de métodos regulares aún puede ser más apropiado. Es importante elegir el enfoque correcto en función de sus requisitos particulares.</p><!--kg-card-begin: html--><h3 id="operador-propagacion"><strong>Operador de propagación de objetos</strong></h3><!--kg-card-end: html--><p>El operador de propagación de objetos es una sintaxis popular y poderosa en JavaScript. El operador de propagación toma todos los pares clave-valor de un objeto y copia el nombre y el valor de la clave en un nuevo objeto.</p><p>Un objeto es un valor de referencia, y si deseas una copia del objeto sin apuntar a la misma propiedad en la memoria, el operador de extensión es la respuesta.</p><pre><code class="language-javascript">let person = {
  name:'kamal',
  age:30,
  hobbies:[
     'reading','playing','sleeping'
  ]
}
console.log(person);
const person2 ={...person};
console.log(person2.age);</code></pre><p>La sintaxis del operador de distribución de objetos va entre los corchetes de apertura y cierre. Luego debe haber tres puntos y el objeto que deseas extender en este objeto.</p><!--kg-card-begin: html--><h3 id="destructuracion"><strong>La destructuración de objetos</strong></h3><!--kg-card-end: html--><p>La desestructuración de objetos es una característica importante de JavaScript que te permite extraer valores de un objeto y asignarlos a variables individuales.</p><p>Para realizar la desestructuración de objetos, utiliza un patrón de desestructuración en el lado izquierdo de una instrucción de asignación y el objeto del que deseas extraer valores en el lado derecho. Por ejemplo:</p><pre><code class="language-javascript">const person = { name: 'lawal', age: 39 };
const { person, age } = person;
console.log(name); // 'lawal'
console.log(age); // 39
</code></pre><p>La instrucción <code>const</code> usa la desestructuración de objetos para extraer las propiedades de <code>name</code> (nombre) y <code>age</code> (edad) del objeto persona y asignarlas a dos variables separadas. Esta es una forma concisa y eficiente de extraer valores de un objeto, especialmente cuando se trata de objetos complejos.</p><p>La desestructuración de objetos también te permite proporcionar valores predeterminados, en caso de que la propiedad que deseas extraer no exista en el objeto. También puedes cambiar el nombre de las variables que se extraen utilizando un alias, lo que le otorga un mayor control sobre la estructura y la denominación de los valores extraídos.</p><!--kg-card-begin: html--><h2 id="palabra-clave-this"><strong>Cómo usar la palabra <span style="background-color: #eee; padding: 5px;">this</span> en JavaScript</strong></h2><!--kg-card-end: html--><p>¿Qué es la palabra clave <code>this</code>? Es una palabra clave específica en JavaScript que es más importante cuando se usa dentro de una función en un objeto. Pero puedes usarla &nbsp;en cualquier parte de su código además del cuerpo de la función de un objeto.</p><p><code>this</code> es una palabra clave poderosa que se usa para hacer referencia al objeto actual en el que se usa.</p><pre><code class="language-javascript">let person = {
  name:'kamal',
  age:30,
  greet:function(){
    return `My name is ${this.name}, and my age is ${this.age} years old`;
  },
}
console.log(person.greet());
// My name is kamal, and my age is 30 years old.</code></pre><p>El código anterior demuestra que la palabra clave "this" se refiere al objeto que contiene la función, en este caso el objeto "person", y el resultado muestra el resultado de la función "greet".</p><p>Independientemente de su ubicación dentro de un objeto, la palabra clave <code>this</code> siempre se refiere a la entidad que ejecutó la función en el código. Usar <code>this</code> en diferentes contextos dentro del código puede producir resultados distintos. Por ejemplo:</p><pre><code class="language-javascript">let person = {
  name:'kamal',
  age:30,
  greet:function(){
    return `My name is ${this.name}, and my age is ${this.age} years old`;
  },
}
console.log(this);</code></pre><p>El resultado del código muestra que la palabra clave <code>this</code> &nbsp;imprimirá un objeto de ventana con un console.log.</p><!--kg-card-begin: html--><h2 id="conclusion"><strong>Conclusión</strong></h2><!--kg-card-end: html--><p>En este tutorial, aprendimos sobre el objeto de &nbsp;JavaScript, cómo crear un objeto y cómo modificar/eliminar propiedades en un objeto.</p><p>Hablamos brevemente sobre la importancia del operador de propagación y la desestructuración de objetos en el objeto de JavaScript, así como la popular palabra clave this y cómo usarla en objetos de JavaScript.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Visual Studio vs Visual Studio Code: ¿Cuál es la diferencia entre estos editores de código IDE? ]]>
                </title>
                <description>
                    <![CDATA[ La primera vez que escuché sobre "Visual Studio", pensé que era lo mismo que "Visual Studio Code". No sé por qué Microsoft decidió confundir a todos con los nombres de esas dos herramientas de desarrollo. Pero esa es una historia para otro día. “Visual Studio” y “Visual Studio Code” no ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/visual-studio-vs-visual-studio-code-cual-es-la-diferencia-entre-estos-editores-de-codigo-ide/</link>
                <guid isPermaLink="false">63f4faa822450a0629add4fb</guid>
                
                    <category>
                        <![CDATA[ Visual studio ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Enrique Viveros Acosta ]]>
                </dc:creator>
                <pubDate>Fri, 03 Mar 2023 02:06:11 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2023/02/VSvVSC.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/visual-studio-vs-visual-studio-code/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Visual Studio vs Visual Studio Code – What's The Difference Between These IDE Code Editors?</a>
      </p><p>La primera vez que escuché sobre "Visual Studio", pensé que era lo mismo que "Visual Studio Code". No sé por qué Microsoft decidió confundir a todos con los nombres de esas dos herramientas de desarrollo. Pero esa es una historia para otro día.</p><p>“Visual Studio” y “Visual Studio Code” no son lo mismo. Visual Studio es un entorno de desarrollo integrado (IDE) y Visual Studio Code es un editor de texto enriquecido como Sublime Text y Atom.</p><p>Pero la diferencia entre las herramientas es más que solo IDE y editor de texto.</p><p>Un IDE es una herramienta robusta para escribir, editar, depurar y ejecutar tu código. Un editor de texto solo te permite escribir y editar su código. Es posible que debas salir de un editor de texto para ejecutar tu código o descargar complementos para ayudarte a ejecutarlo por ti.</p><p>En este artículo, aprenderás las principales diferencias entre Visual Studio y Visual Studio Code. Pero primero, necesitamos saber qué es "Visual Studio" y qué es "Visual Studio Code" antes de profundizar en esas diferencias.</p><h2 id="lo-que-cubriremos-"><strong>Lo que cubriremos:</strong></h2><ul><li><a href="#studio">¿Qué es Visual Studio?</a></li><li><a href="#code">¿Qué es Visual Studio Code?</a></li><li><a href="#diferencia">¿Cuál es la diferencia entre “Visual Studio” y “Visual Studio Code”?</a></li><li><a href="#elegir">¿Cuál deberías elegir entre “Visual Studio” y “Visual Studio Code”?</a></li><li><a href="#conclusion">Conclusión</a></li></ul><!--kg-card-begin: html--><h2 id="studio">¿Qué es Visual Studio?</h2><!--kg-card-end: html--><p>Visual Studio fue lanzado por primera vez en 1997 por Microsoft. Es un entorno de desarrollo integrado (IDE) para desarrollar, editar y depurar sitios web, aplicaciones web y móviles, así como servicios en la nube.</p><p>Debido a que es un IDE, las utilidades de programación como un depurador, compilador, detección inteligente (intellisence) y más están incluidas para ti.</p><p>Visual Studio viene con soporte integrado para C# y .NET. También es compatible con otros lenguajes de programación como C, C++, Python, F#, lenguajes web (HTML, CSS, JavaScript) y muchos más. La compatibilidad con Java se eliminó en Visual Studio 2017.</p><p>Visual Studio se ejecuta en Windows y Mac. Tiene 3 ediciones: comunitaria, profesional y empresarial. La versión comunitaria es gratuita, mientras que la profesional y la empresarial no lo son.</p><p>La instalación es bastante más robusta en Windows que en Mac. Entonces, en Windows, es posible que debas descargar más de 42 GB según lo que quiera hacer.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2023/01/Screenshot-2023-01-31-122422.png" class="kg-image" alt="Screenshot-2023-01-31-122422" width="600" height="400" loading="lazy"></figure><p>Pero en Mac, al momento de escribir este artículo, se necesita alrededor de 6,2 GB de espacio en el disco.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2023/01/Screenshot-2023-01-31-at-11.30.22.png" class="kg-image" alt="Screenshot-2023-01-31-at-11.30.22" width="600" height="400" loading="lazy"></figure><!--kg-card-begin: html--><h2 id="code">¿Qué es Visual Studio Code?</h2><!--kg-card-end: html--><p>Visual Studio Code (también llamado VS Code) es como la versión mini de Visual Studio. Es un editor de texto ligero y de código abierto disponible en Windows, Mac y Linux. También está disponible la versión web en <code>https://vscode.dev/</code>.</p><p>VS Code viene con soporte integrado para JavaScript, TypeScript y Node JS, pero puedes usarlo para codificar en cualquier idioma que desees. Todo lo que necesitas hacer es descargar las extensiones correspondientes.</p><p>Algunas de las extensiones están hechas por Microsoft, pero muchas otras son extensiones de terceros.</p><p>A diferencia de Visual Studio, no se necesita mucho espacio para descargar VS Code. Es posible que no necesites más de 200 MB de espacio en disco para descargarlo.</p><p>Como es compatible con JavaScript, TypeScript y Node JS de forma predeterminada, también obtienes un depurador y detección inteligente (intellisence). Pero para obtener detección inteligente, un compilador y depuradores para otros lenguajes, debe descargar las extensiones correspondientes.</p><p>Ahora sabes que Visual Studio es un IDE y Visual Studio Code es un editor de texto. Así que vamos a resumir sus principales diferencias a continuación.</p><!--kg-card-begin: html--><h2 id="diferencia">¿Cuál es la diferencia entre “Visual Studio” y “Visual Studio Code”?</h2><!--kg-card-end: html--><!--kg-card-begin: html--><table style="box-sizing: inherit; margin: 0.5em 0px 2.5em; padding: 0px; border: 0px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-numeric: inherit; font-variant-east-asian: inherit; font-weight: 400; font-stretch: inherit; line-height: inherit; font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, Oxygen, Ubuntu, Cantarell, &quot;Open Sans&quot;, &quot;Helvetica Neue&quot;, sans-serif; font-size: 1.6rem; vertical-align: top; border-spacing: 0px; border-collapse: collapse; display: inline-block; overflow-x: auto; max-width: 100%; width: auto; white-space: nowrap; background: radial-gradient(at left center, rgba(0, 0, 0, 0.2) 0px, rgba(0, 0, 0, 0) 75%) 0px center / 10px 100% no-repeat scroll, radial-gradient(at right center, rgba(0, 0, 0, 0.2) 0px, rgba(0, 0, 0, 0) 75%) 100% center / 10px 100% scroll rgb(255, 255, 255); color: rgb(10, 10, 35); letter-spacing: normal; orphans: 2; text-align: start; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;"><thead style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: left; text-transform: uppercase; background-color: var(--gray10);"><strong style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 12px; vertical-align: baseline; color: var(--gray85);">BASIS</strong></th><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: left; text-transform: uppercase; background-color: var(--gray10);"><strong style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 12px; vertical-align: baseline; color: var(--gray85);">VISUAL STUDIO</strong></th><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: left; text-transform: uppercase; background-color: var(--gray10);"><strong style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 12px; vertical-align: baseline; color: var(--gray85);">VISUAL STUDIO CODE</strong></th></tr></thead><tbody style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;"><strong style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: var(--gray85);">Type</strong></td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">Visual Studio es un IDE completo</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">VS Code es un editor de texto (AKA Code editor)</td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;"><strong style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: var(--gray85);">Platform</strong></td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">Visual Studio se ejecuta en Windows y Mac</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">VS Code se ejecuta en Windows, Mac y Linux</td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;"><strong style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: var(--gray85);">Size</strong></td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">Visual Studio es relativamente grande. Es posible que debas descargar más de 40 GB en Windows y más de 6 GB en Mac</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">VS Code no requiere más de 200 MB en ninguna plataforma</td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;"><strong style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: var(--gray85);">Support</strong></td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">Visual Studio tiene soporte incorporado  para C# y .NET, junto con varios lenguajes comunes además de Java</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">VS Code es compatible con JavaScript, TypeScript y Node JS listos para usar. También es compatible con otros lenguajes de programación, siempre que haya una(s) extensión(es) para eso</td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;"><strong style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: var(--gray85);">Pricing</strong></td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">Visual Studio Community Edition es gratuito, pero las ediciones profesional y empresarial tienen un cósto de $ 45 y $ 250 por mes, respectivamente.</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">Código VS es gratis. La mayoría de las extensiones también son gratuitas, pero hay freemium.</td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;"><strong style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: var(--gray85);">Extensions</strong></td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">Visual Studio no tiene tantas extensiones como VS Code</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;">VS Code tiene numerosas extensiones curadas y profesionales para diversos propósitos</td></tr></tbody></table><!--kg-card-end: html--><!--kg-card-begin: html--><h2 id="elegir">¿Cuál deberías elegir entre “Visual Studio” y “Visual Studio Code”?</h2><!--kg-card-end: html--><p>Ha habido un largo debate sobre cuál es mejor y cuál elegir entre Visual Studio y Visual Studio Code. Bueno, depende de lo que estés haciendo.</p><p>Si estás desarrollando exclusivamente con un lenguaje compatible con Visual Studio, como C#, C, C++, Python y otros, Visual Studio u otros IDE relevantes probablemente sean la mejor opción parati.</p><p>Pero incluso si estás desarrollando en esos lenguajes, pero necesitas una interfaz React, Vue o Angular, el código VS podría ser la mejor opción para ti.</p><p>Si estás trabajando en un equipo, es posible que te proporcionen la versión empresarial de Visual Studio o cualquier otro IDE que se correlacione con el idioma con el que estés trabajando. Por ejemplo, PyCharm para Python e IntelliJ Idea para Java.</p><p>Si estás utilizando Linux, debe elegir Visual Studio Code o algún otro IDE aparte de Visual Studio. Eso es porque Visual Studio no se ejecuta en Linux.</p><p>Si tú eres el tipo de persona a la que le gusta personalizar su editor a su gusto, elige VS Code porque es altamente personalizable. Probablemente, también deberías elegir VS Code si estás mezclando tecnologías.</p><!--kg-card-begin: html--><h2 id="conclusion">Conclusión</h2><!--kg-card-end: html--><p>Este artículo te mostró las diferencias entre Visual Studio y VS Code, y también lo que son ambos por separado.</p><p>El debate nunca debe ser cuál es mejor que el otro, sino cuál es mejor para lo que quieres hacer o lo que necesitas. Es por eso que analizamos algunos escenarios que podrían alentarte a elegir uno sobre el otro.</p><p>Thank you for reading.</p><p>Gracias por leer.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Tutorial de métodos de lista de Java: ejemplo de API de lista de utilidades ]]>
                </title>
                <description>
                    <![CDATA[ Las listas son estructuras de datos comúnmente utilizadas en todos los lenguajes de programación. En este tutorial vamos a investigar la API List de Java. Comenzaremos con las operaciones básicas y luego nos adentraremos en cosas más avanzadas (como una comparación de diferentes tipos de listas, como ArrayList y LinkedList). ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/metodos-de-lista-de-java/</link>
                <guid isPermaLink="false">63ebbe4622450a0629adc5b7</guid>
                
                    <category>
                        <![CDATA[ java ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Enrique Viveros Acosta ]]>
                </dc:creator>
                <pubDate>Tue, 21 Feb 2023 14:47:37 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2023/02/collection0.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/java-list-tutorial-util-list-api-example/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Java List Methods Tutorial – Util List API Example</a>
      </p><p>Las listas son estructuras de datos comúnmente utilizadas en todos los lenguajes de programación.</p><p>En este tutorial vamos a investigar la API List de Java. Comenzaremos con las operaciones básicas y luego nos adentraremos en cosas más avanzadas (como una comparación de diferentes tipos de listas, como ArrayList y LinkedList).</p><p>También te daré algunas pautas para ayudarte a elegir la implementación de la lista que mejor se adapte a tu situación.</p><p>Aunque el conocimiento básico de Java es suficiente para seguir el tutorial, la última sección requiere estructuras de datos básicas (Array, LinkedList) y conocimiento de <a href="https://en.wikipedia.org/wiki/Big_O_notation">Big-O</a>. Si no estás familiarizado con ellos, no dudes en omitir esa sección.</p><h2 id="definici-n-de-listas"><strong>Definición de listas</strong></h2><p>Las listas son colecciones ordenadas de objetos. Son similares a las secuencias en matemáticas en ese sentido. Sin embargo, son diferentes a los conjuntos que no tienen un cierto orden.</p><p>Un par de cosas a tener en cuenta: las listas pueden tener elementos duplicados y nulos. Son tipos de referencia o de objeto y, como todos los objetos en Java, se almacenan en las pilas.</p><p>Una lista en Java es una interfaz y hay muchos tipos de listas que implementan esta interfaz.</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/09/ListHierarchy.png" class="kg-image" alt="ListHierarchy" width="600" height="400" loading="lazy"><figcaption>Collection Hierarchy</figcaption></figure><p>Usaré ArrayList en los primeros ejemplos, porque es el tipo de lista más utilizado.</p><p>ArrayList es básicamente un arreglo de tamaño variable. Casi siempre, vas a querer usar ArrayList en lugar de arreglos regulares, ya que brindan muchos métodos útiles.</p><p>La única ventaja de un arreglo solía ser su tamaño fijo (al no asignar más espacio del que necesita). Pero las listas también admiten tamaños fijos ahora.</p><h2 id="c-mo-crear-una-lista-en-java"><strong>Cómo crear una lista en Java </strong></h2><p>Basta de charlas, empecemos por crear nuestra lista.</p><pre><code class="language-java">import java.util.ArrayList;
import java.util.List;

public class CreateArrayList {
    public static void main(String[] args) {
        ArrayList&lt;Integer&gt; list0 = new ArrayList&lt;&gt;();

        // Makes use of polymorphism
        List list = new ArrayList&lt;Integer&gt;();

        // Local variable with "var" keyword, Java 10
        var list2 = new ArrayList&lt;Integer&gt;();
    }
}</code></pre><p>En los corchetes angulares (&lt;&gt;) especificamos el tipo de objetos que vamos a almacenar.</p><p>Tenga en cuenta que <strong>el tipo entre paréntesis debe ser un tipo de objeto y no un tipo primitivo</strong>. Por lo tanto, tenemos que usar envoltorios de objetos, clase Integer en lugar de int, Double en lugar de double, y así sucesivamente.</p><p>Hay muchas formas de crear una ArrayList, pero presenté tres formas comunes en el fragmento anterior.</p><p>La primera forma es creando el objeto a partir de la clase ArrayList concreta, especificando ArrayList en el lado izquierdo de la asignación.</p><p>El segundo fragmento de código hace uso del polimorfismo mediante el uso de la lista en el lado izquierdo. Esto hace que la asignación se acople libremente con la clase ArrayList y nos permite asignar otros tipos de listas y cambiar fácilmente a una implementación de Lista diferente.</p><p>La tercera forma es la forma Java 10 de crear variables locales haciendo uso de la palabra clave var. El compilador interpreta el tipo de variable comprobando el lado derecho.</p><p>Podemos ver que todas las asignaciones dan como resultado el mismo tipo:</p><pre><code class="language-java">System.out.println(list0.getClass());
System.out.println(list.getClass());
System.out.println(list2.getClass());</code></pre><p>Output:</p><pre><code class="language-java">class java.util.ArrayList
class java.util.ArrayList
class java.util.ArrayList
</code></pre><p>También podemos especificar la capacidad inicial de la lista.</p><pre><code class="language-java">List list = new ArrayList&lt;&gt;(20);</code></pre><p>Esto es útil porque cada vez que la lista se llena e intenta agregar otro elemento, la lista actual se copia en una nueva lista con el doble de capacidad que la lista anterior. Todo esto sucede detrás de escena.</p><p>Esta operación hace que nuestra complejidad sea O(n), por lo que queremos evitarla. La capacidad por defecto es 10, por lo que si sabes que vas a almacenar más elementos, debes especificar la capacidad inicial.</p><h2 id="c-mo-agregar-y-actualizar-elementos-de-lista-en-java"><strong>Cómo agregar y actualizar elementos de lista en Java</strong></h2><p>Para agregar elementos a la lista podemos usar el método add. También podemos especificar el índice del nuevo elemento, pero ten cuidado al hacerlo, ya que puedes generar una excepción <em><em>IndexOutOfBoundsException</em></em>.</p><pre><code class="language-java">import java.util.ArrayList;

public class AddElement {
    public static void main(String[] args) {
        ArrayList&lt;String&gt; list = new ArrayList&lt;&gt;();
        list.add("hello");
        list.add(1, "world");
        System.out.println(list);
    }
}</code></pre><p>Resultado:</p><pre><code>[hello, world]</code></pre><p>Podemos usar el método set para actualizar un elemento.</p><pre><code class="language-java">list.set(1, "from the otherside");
System.out.println(list);</code></pre><p>Resultado:</p><pre><code>[hello, world]
[hello, from the otherside]</code></pre><h2 id="c-mo-recuperar-y-eliminar-elementos-de-lista-en-java"><strong>Cómo recuperar y eliminar elementos de lista en Java</strong></h2><p>Para recuperar un elemento de la lista, puedes usar el método get y proporcionar el índice del elemento que desea obtener.</p><pre><code class="language-java">import java.util.ArrayList;
import java.util.List;

public class GetElement {
    public static void main(String[] args) {
        List list = new ArrayList&lt;String&gt;();
        list.add("hello");
        list.add("freeCodeCamp");

        System.out.println(list.get(1));
    }
}</code></pre><p>Resultado:</p><pre><code class="language-java">freeCodeCamp
</code></pre><p>La complejidad de esta operación en ArrayList es O(1) ya que utiliza un arrelgo de acceso aleatorio regular en segundo plano.</p><p>Para eliminar un elemento de ArrayList, se utiliza el método remove.</p><pre><code class="language-java">list.remove(0);</code></pre><p>Esto elimina el elemento en el índice 0, que es "hola" en este ejemplo.</p><p>También podemos llamar al método remove con un elemento para buscarlo y eliminarlo. Ten en cuenta que solo elimina la primera aparición del elemento si está presente.</p><pre><code class="language-java">public static void main(String[] args) {
        List list = new ArrayList();
        list.add("hello");
        list.add("freeCodeCamp");
        list.add("freeCodeCamp");

        list.remove("freeCodeCamp");
        System.out.println(list);
    }</code></pre><p>Resultado:</p><pre><code class="language-java">[hello, freeCodeCamp]</code></pre><p>Para eliminar todas las ocurrencias, podemos usar el método <em><em>removeAll</em></em> de la misma manera.</p><p>Estos métodos están dentro de la interfaz de List, por lo que todas las implementaciones de List los tienen (ya sea ArrayList, LinkedList o Vector).</p><h2 id="c-mo-obtener-la-longitud-de-una-lista-en-java"><strong>Cómo obtener la longitud de una lista en Java</strong></h2><p>Para obtener la longitud de una lista, o el número de elementos, podemos usar el método size().</p><pre><code class="language-java">import java.util.ArrayList;
import java.util.List;

public class GetSize {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add("Welcome");
        list.add("to my post");
        System.out.println(list.size());
    }
}
</code></pre><p>Resultado:</p><pre><code>2</code></pre><h2 id="listas-bidimensionales-en-java"><strong>Listas bidimensionales en Java</strong></h2><p>Es posible crear listas bidimensionales, similares a los arreglos 2D.</p><pre><code class="language-java">ArrayList&lt;ArrayList&lt;Integer&gt;&gt; listOfLists = new ArrayList&lt;&gt;();</code></pre><p>Usamos esta sintaxis para crear una lista de listas, y cada lista interna almacena números enteros. Pero aún no hemos inicializado las listas internas. Necesitamos crearlos y ponerlas en esta lista nosotros mismos:</p><pre><code class="language-java">int numberOfLists = 3;
for (int i = 0; i &lt; numberOfLists; i++) {
    listOfLists.add(new ArrayList&lt;&gt;());
}</code></pre><p>Estoy inicializando mis listas internas y estoy agregando 3 listas en este caso. También puedo agregar listas más adelante si es necesario.</p><p>Ahora podemos agregar elementos a nuestras listas internas. Para agregar un elemento, primero debemos obtener la referencia a la lista interna.</p><p>Por ejemplo, digamos que queremos agregar un elemento a la primera lista. Necesitamos obtener la primera lista y luego agregarla.</p><figure class="kg-card kg-code-card"><pre><code class="language-java">listOfLists.get(0).add(1);</code></pre><figcaption>Adding elements to 2D list</figcaption></figure><p>Aquí hay un ejemplo para ti. Intenta adivinar el resultado del siguiente segmento de código:</p><pre><code class="language-java">public static void main(String[] args) {
        ArrayList&lt;ArrayList&lt;Integer&gt;&gt; listOfLists = new ArrayList&lt;&gt;();
        System.out.println(listOfLists);
        int numberOfLists = 3;
        for (int i = 0; i &lt; numberOfLists; i++) {
            listOfLists.add(new ArrayList&lt;&gt;());
        }

        System.out.println(listOfLists);

        listOfLists.get(0).add(1);
        listOfLists.get(1).add(2);
        listOfLists.get(2).add(0,3);

        System.out.println(listOfLists);
}</code></pre><p>Resultado:</p><pre><code>[]
[[], [], []]
[[1], [2], [3]]</code></pre><p>Ten en cuenta que es posible imprimir las listas directamente (a diferencia de los arreglos regulares) porque anulan el método t<em><em>toString()</em></em>.</p><h2 id="m-todos-tiles-en-java"><strong>Métodos útiles en Java</strong></h2><p>Existen otros métodos y atajos útiles que se utilizan con frecuencia. En esta sección quiero familiarizarte con algunos de ellos para que te resulte más fácil trabajar con listas.</p><h3 id="c-mo-crear-una-lista-con-elementos-en-java"><strong>Cómo crear una lista con elementos en Java </strong></h3><p>Es posible crear y completar la lista con algunos elementos en una sola línea. Hay dos maneras de hacer esto.</p><p>La siguiente es la forma de la vieja escuela:</p><pre><code class="language-java">public static void main(String[] args) {
        List&lt;String&gt; list = Arrays.asList(
                                "freeCodeCamp",
                                "let's",
                                "create");
 }</code></pre><p>Debes tener cuidado con una cosa al usar este método: Arrays.asList devuelve una lista inmutable. Entonces, si intentas agregar o eliminar elementos después de crear el objeto, obtendrás una excepción <em><em>UnsupportedOperationException.</em></em></p><p>Es posible que tengas la tentación de usar la palabra clave <em><em>final</em></em> para que la lista sea inmutable, pero no funcionará como se esperaba.</p><p>Simplemente, se asegura de que la referencia al objeto no cambie, no le importa lo que sucede dentro del objeto. Por lo que permite poner y quitar.</p><pre><code class="language-java">final List&lt;String&gt; list2 = new ArrayList&lt;&gt;();
list2.add("erinc.io is the best blog ever!");
System.out.println(list2);</code></pre><p>Resultado:</p><pre><code>[erinc.io is the best blog ever!]
</code></pre><p>Ahora veamos la forma moderna de hacerlo:</p><pre><code class="language-java">ArrayList&lt;String&gt; friends =  new ArrayList&lt;&gt;(List.of("Gulbike", "Sinem", "Mete"));
</code></pre><p>El método <em><em>List.of</em> </em> se envió con Java 9. Este método también devuelve una lista inmutable, pero podemos pasarla al constructor ArrayList para crear una lista mutable con esos elementos. Podemos agregar y quitar elementos a esta lista sin ningún problema.</p><h3 id="c-mo-crear-una-lista-con-n-copias-de-alg-n-elemento-en-java"><strong>Cómo crear una lista con N copias de algún elemento en Java</strong></h3><p>Java proporciona un método llamado <em><em>NCopies</em></em> que es especialmente útil para la evaluación comparativa. Puedes llenar un arreglo con cualquier número de elementos en una sola línea.</p><pre><code class="language-java">public class NCopies {
    public static void main(String[] args) {
        List&lt;String&gt; list = Collections.nCopies(10, "HELLO");
        System.out.println(list);
    }
}</code></pre><p>Resultado:</p><pre><code class="language-java">[HELLO, HELLO, HELLO, HELLO, HELLO, HELLO, HELLO, HELLO, HELLO, HELLO]
</code></pre><h3 id="c-mo-clonar-una-lista-en-java"><strong>Cómo clonar una lista en Java </strong></h3><p>Como se mencionó anteriormente, las Listas son tipos de referencia, por lo que se les aplican las reglas de paso por referencia.</p><pre><code class="language-java">public static void main(String[] args) {
        List list1 = new ArrayList&lt;String&gt;();
        list1.add("Hello");
        List list2 = list1;
        list2.add(" World");

        System.out.println(list1);
        System.out.println(list2);
}</code></pre><p>Resultado:</p><pre><code class="language-java">[Hello,  World]
[Hello,  World]</code></pre><p>La variable list1 contiene una referencia a la lista. Cuando lo asignamos a list2 también apunta al mismo objeto. Si no queremos que cambie la lista original, podemos clonar la lista.</p><pre><code class="language-java">ArrayList list3 = (ArrayList) list1.clone();
list3.add(" Of Java");

System.out.println(list1);
System.out.println(list3);</code></pre><p>Resultado:</p><pre><code class="language-java">[Hello,  World]
[Hello,  World,  Of Java]</code></pre><p>Dado que clonamos list1, list3 contiene una referencia a su clon en este caso. Por lo tanto, list1 permanece sin cambios.</p><h3 id="c-mo-copiar-una-lista-a-un-arreglo-en-java"><strong>Cómo copiar una lista a un arreglo en Java</strong></h3><p>A veces necesita convertir su lista en un arreglo para pasarla a un método que acepte un arreglo. Puedes usar el siguiente código para lograrlo:</p><pre><code class="language-java">List&lt;Integer&gt; list = new ArrayList&lt;&gt;(List.of(1, 2));
Integer[] toArray = list.toArray(new Integer[0]);</code></pre><p>Debe pasar un arreglo y el método <em><em>toArray</em></em> &nbsp;devuelve ese arreglo después de llenarla con los elementos de la lista.</p><h3 id="c-mo-ordenar-una-lista-en-java"><strong>Cómo ordenar una lista en Java </strong></h3><p>Para ordenar una lista podemos usar <em><em>Collections.sort</em></em>. Ordena en orden ascendente de forma predeterminada, pero también puedes pasar un comparador para ordenar con lógica personalizada.</p><pre><code class="language-java">List&lt;Integer&gt; toBeSorted = new ArrayList&lt;&gt;(List.of(3,2,4,1,-2));
Collections.sort(toBeSorted);
System.out.println(toBeSorted);</code></pre><p>Resultado:</p><pre><code>[-2, 1, 2, 3, 4]</code></pre><h2 id="c-mo-elejir-qu-tipo-de-lista-usar"><strong>Cómo elejir qué tipo de lista usar?</strong></h2><p>Antes de terminar este artículo, quiero brindarte una breve comparación de rendimiento de diferentes implementaciones de listas para que puedas elegir cuál es mejor para tu caso de uso.</p><p>Vamos a comparar ArrayList, LinkedList y Vector. Todos ellos tienen sus altibajos, así que asegúrate de considerar el contexto específico antes de decidir.</p><h3 id="java-arraylist-vs-linkedlist"><strong>Java ArrayList vs LinkedList</strong></h3><p>Aquí hay una comparación de tiempos de ejecución en términos de complejidad algorítmica.</p><pre><code class="language-markdown">|                       | ArrayList                  | LinkedList |
|-----------------------|----------------------------|------------|
| GET(index)            | O(1)                       | O(n)       |
| GET from Start or End | O(1)                       | O(1)       |
| ADD                   | O(1), if list is full O(n) | O(1)       |
| ADD(index)            | O(n)                       | O(1)       |
| Remove(index)         | O(n)                       | O(1)       |
| Search and Remove     | O(n)                       | O(n)       |</code></pre><p>Generally, the <em><em>get</em></em> operation is much faster on ArrayList but <em><em>add</em></em> and <em><em>remove</em></em> are faster on LinkedList.</p><p>En general, la operación <em><em>get</em></em> (obtener) es mucho más rápida en ArrayList, pero <em><em>add</em> (</em>agregar) y <em><em>remove</em> (</em>eliminar) son más rápidos en LinkedList.</p><p>ArrayList usa un arreglo detrás de escena, y cada vez que se elimina un elemento, los elementos de el arreglo deben cambiarse (que es una operación O (n)).</p><p>Elegir estructuras de datos es una tarea compleja y no existe una receta que se aplique a todas las situaciones. Aún así, intentaré proporcionar algunas pautas para ayudarte a tomar esa decisión más fácilmente:</p><ul><li>Si planeas hacer más operaciones de obtener y agregar que no sean eliminar, usa ArrayList ya que la operación de obtener es demasiado costosa en LinkedList. Tenga en cuenta que la inserción es O(1) solo si la llamas sin especificar el índice y la agrega al final de la lista.</li><li>Si vas a eliminar elementos y/o insertarlos en el medio (no al final) con frecuencia, puedes considerar cambiar a LinkedList porque estas operaciones son costosas en ArrayList.</li><li>Ten en cuenta que si accedes a los elementos secuencialmente (con un iterador), no experimentarás una pérdida de rendimiento con LinkedList mientras obtienes elementos.</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/09/image-72.png" class="kg-image" alt="image-72" width="600" height="400" loading="lazy"><figcaption>Benchmark source: <a href="https://www.programcreek.com/2013/03/arraylist-vs-linkedlist-vs-vector/" style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 17.6px; vertical-align: baseline; background-color: transparent; color: var(--gray90); text-decoration: underline; cursor: pointer; word-break: break-word;">programcreek</a></figcaption></figure><h3 id="java-arraylist-vs-vector"><strong>Java ArrayList vs Vector</strong></h3><p>Vector es muy similar a ArrayList. Si provienes de un entorno de C++, es posible que tengas la tentación de usar un Vector, pero su caso de uso es un poco diferente al de C++.</p><p>Los métodos de Vector tienen la palabra clave <a href="https://docs.oracle.com/javase/tutorial/essential/concurrency/syncmeth.html"><strong>sincronizada</strong></a>, por lo que Vector garantiza la seguridad de subprocesos, mientras que ArrayList no.</p><p>Es posible que prefieras Vector sobre ArrayList en la programación de subprocesos múltiples o puedes usar ArrayList y manejar la sincronización usted mismo.</p><p>En un programa de subproceso único, es mejor quedarse con ArrayList porque la seguridad de subprocesos tiene un costo de rendimiento.</p><h2 id="conclusi-n"><strong>Conclusión</strong></h2><p>En esta publicación, he tratado de proporcionar una descripción general de la API de lista de Java. Hemos aprendido a usar métodos básicos y también hemos visto algunos trucos más avanzados para hacernos la vida más fácil.</p><p>También hicimos una comparación de ArrayList, LinkedList y Vector, que es un tema que se suele preguntar en las entrevistas.</p><p>Gracias por tomarse el tiempo de leer el artículo completo y espero que te &nbsp;haya sido útil.</p><p>Puedes acceder a todo el código desde este <a href="https://github.com/yigiterinc/list-api-tutorial">repositorio</a>.</p><p>Si estás interesado en leer más artículos como este, puede suscribirte a la lista de correo de mi <a href="https://erinc.io/">blog</a> para recibir una notificación cuando publique un nuevo artículo.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Botón de suscripción de YouTube: cómo hacer que la gente se suscriba a tu canal desde un enlace ]]>
                </title>
                <description>
                    <![CDATA[ ¿Sabías que puedes promocionar a las personas para que se suscriban cuando visiten tu canal? Así es como se vería para alguien que haga clic en el enlace en una computadora portátil o de escritorio: Y no te preocupes: si alguien ya está suscrito a tu canal cuando haga clic ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/boton-de-suscripcion-de-youtube-como-hacer-que-la-gente-se-suscriba-a-tu-canal-desde-un-enlace/</link>
                <guid isPermaLink="false">63e26c2e9a3ea706f58b065f</guid>
                
                    <category>
                        <![CDATA[ YouTube ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Enrique Viveros Acosta ]]>
                </dc:creator>
                <pubDate>Mon, 20 Feb 2023 19:25:05 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2023/02/freeCodeCamp_org_-_YouTube-1.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/youtube-subscribe-button-link/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">YouTube Subscribe Button: How to Get People to Subscribe to Your Channel From a Link</a>
      </p><p>¿Sabías que puedes promocionar a las personas para que se suscriban cuando visiten tu canal?</p><p>Así es como se vería para alguien que haga clic en el enlace en una computadora portátil o de escritorio:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2023/02/freeCodeCamp_org_-_YouTube.jpg" class="kg-image" alt="freeCodeCamp_org_-_YouTube" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2023/02/freeCodeCamp_org_-_YouTube.jpg 600w, https://www.freecodecamp.org/espanol/news/content/images/size/w1000/2023/02/freeCodeCamp_org_-_YouTube.jpg 1000w, https://www.freecodecamp.org/espanol/news/content/images/size/w1600/2023/02/freeCodeCamp_org_-_YouTube.jpg 1600w, https://www.freecodecamp.org/espanol/news/content/images/2023/02/freeCodeCamp_org_-_YouTube.jpg 2000w" sizes="(min-width: 720px) 720px" width="2000" height="799" loading="lazy"></figure><p>Y no te preocupes: si alguien ya está suscrito a tu canal cuando haga clic en este enlace, verá tu canal como de costumbre, sin el mensaje de confirmación de suscripción.</p><h2 id="los-dos-m-todos-para-lograr-que-la-gente-se-suscriba-a-tu-canal-de-youtube-directamente"><strong>Los dos métodos para lograr que la gente se suscriba a tu canal de YouTube directamente</strong></h2><p>Hay dos métodos principales que puedes usar para lograr este objetivo de lograr que las personas se suscriban directamente a tu canal:</p><ol><li>Un enlace de suscripción de YouTube que puedes usar en cualquier lugar, incluidos los sitios de redes sociales y las herramientas de mensajería.</li><li>Un botón de suscripción de YouTube que puedes usar en cualquier lugar donde puedes incrustar JavaScript, como tu sitio web personal.</li></ol><h2 id="c-mo-hacer-tu-propio-enlace-de-suscripci-n-de-youtube"><strong>Cómo hacer tu propio enlace de suscripción de YouTube </strong></h2><p>YouTube tiene una función en la que puedes simplemente agregar el parámetro <code>?sub_confirmation=1</code> a la URL de tu canal de YouTube.</p><p>Nuevamente, esto es perfecto para vincular a tu canal de YouTube desde las redes sociales u otro lugar donde no tengas la capacidad de insertar el código para un botón de suscripción adecuado.</p><p>Hay dos tipos de canales en YouTube:</p><ol><li>Canales de canal</li><li>Canales de usuarios </li></ol><p>En la práctica, no existe una gran diferencia entre este tipo de canales. Solo que cada uno de ellos usa una estructura de URL ligeramente diferente.</p><h3 id="c-mo-crear-un-enlace-de-suscripci-n-si-tu-canal-de-youtube-est-clasificado-como-un-canal"><strong>Cómo crear un enlace de suscripción si tu canal de YouTube está clasificado como un canal </strong></h3><p>Puedes saber si tu canal usa la estructura "canal" visitando tu canal y viendo si tiene la palabra "canal" en la barra de direcciones.</p><p>Aquí hay un ejemplo:</p><pre><code>https://www.youtube.com/channel/freecodecamp</code></pre><p>¿Ves la palabra "canal" aquí? Entonces, en este caso, puedes usar esta estructura para tu enlace:</p><pre><code>https://www.youtube.com/channel/&lt;YOUR CHANNEL ID&gt;?sub_confirmation=1</code></pre><p>Simplemente, reemplazarías el &nbsp;<code>&lt;TU ID DE CANAL&gt;</code> en esta URL con el ID de st canal, que puedes encontrar yendo a tu canal de YouTube.</p><p>Será un nombre personalizado (en este caso, <code>freecodecamp</code>) o será una cadena de caracteres de base 64 como esta: <code>UC0syIz79dzjMXIf5VdJ65EA</code></p><p>Una vez que agregues tu ID de canal a ese enlace, estará todo listo. Las personas que hagan clic en ese enlace no solo serán dirigidas a tu canal, sino que también verán el aviso de confirmación de suscripción.</p><h3 id="c-mo-crear-un-enlace-de-suscripci-n-su-tu-canal-de-youtube-est-clasificado-como-usuario"><strong>Cómo crear un enlace de suscripción su tu canal de YouTube está clasificado como usuario</strong></h3><p>Algunos canales más antiguos aún se configuran como usuarios en lugar de canales. Puedes saber si tu canal usa la estructura de "usuario" visitando tu canal y viendo si tiene la palabra "usuario" en la barra de direcciones.</p><p>Aquí tienes un ejemplo:</p><pre><code>https://www.youtube.com/user/thenewboston</code></pre><p>Este canal está configurado como usuario.</p><p>En este caso, usarías esta estructura:</p><pre><code>https://www.youtube.com/user/&lt;YOUR CHANNEL ID&gt;?sub_confirmation=1</code></pre><p>Simplemente, reemplazarías el &nbsp;<code>&lt;YOUR CHANNEL ID&gt;</code> en esta URL con el ID de tu canal. Será un nombre personalizado (en este caso, <code>thenewboston</code>) o será una cadena de caracteres de base 64 como esta: <code><a href="https://www.youtube.com/channel/UC0syIz79dzjMXIf5VdJ65EA">UC0syIz79dzjMXIf5VdJ65EA</a></code></p><p>Una vez que agregues tu ID de canal a ese enlace, estarás listo para comenzar.</p><h2 id="c-mo-hacer-tu-propio-bot-n-de-suscripci-n-de-youtube"><strong>Cómo hacer tu propio botón de suscripción de YouTube</strong></h2><p>Muy bien, aquí está la parte divertida. YouTube te brinda una forma de incrustar botones de suscripción directamente en tu sitio web.</p><p>Así es como se ve uno de estos botones:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2023/02/Configure_a_Button_-_-_YouTube_Subscribe_Button_-_-_Google_Developers.png" class="kg-image" alt="Configure_a_Button_-_-_YouTube_Subscribe_Button_-_-_Google_Developers" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2023/02/Configure_a_Button_-_-_YouTube_Subscribe_Button_-_-_Google_Developers.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2023/02/Configure_a_Button_-_-_YouTube_Subscribe_Button_-_-_Google_Developers.png 690w" width="690" height="290" loading="lazy"><figcaption>Esta es una imagen estática que lleva al aviso de suscripción</figcaption></figure><p>Y aquí está el código HTML incrustable que agregarías a tu blog. Ten en cuenta que este código importará la biblioteca de JavaScript de la plataforma.js (<code>platform.js</code>) de Google para mostrar dinámicamente el botón y tu número de suscriptores actual.</p><pre><code>&lt;script src="https://apis.google.com/js/platform.js"&gt;&lt;/script&gt;

&lt;div class="g-ytsubscribe" data-channelid="&lt;YOUR CHANNEL ID&gt;" data-layout="full" data-theme="dark" data-count="default"&gt;&lt;/div&gt;</code></pre><p>Puedes insertar este código. Asegúrate de reemplazar <code>&lt;YOUR CHANNEL ID&gt;</code> con el ID del canal que ves cuando visitas tu página.</p><p>Si tienes una URL de canal de YouTube personalizada como <code>https://www.youtube.com/freecodecamp</code> puedes usarla como tu ID de canal, pero me parece más confiable usar el ID de 24 caracteres del canal completo.</p><h2 id="c-mo-personalizar-tu-bot-n-de-suscripci-n-de-youtube"><strong>Cómo personalizar tu botón de suscripción de YouTube</strong></h2><p>Hay otras dos formas de personalizar el botón de suscripción.</p><h3 id="c-mo-mostrar-el-nombre-y-el-logotipo-de-tu-canal-en-el-bot-n-de-suscripci-n"><strong>Cómo mostrar el nombre y el logotipo de tu canal en el botón de suscripción</strong></h3><p>Puedes cambiar el <code>data-layout</code> para que sea predeterminado (<code>default</code>) o completo (<code>full</code>) (que mostrará el nombre y el icono de tu canal).</p><p>Así es como se ve esto cuando configuras <code>data-layout="default"</code>:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2023/02/Configure_a_Button_-_-_YouTube_Subscribe_Button_-_-_Google_Developers-1.png" class="kg-image" alt="Configure_a_Button_-_-_YouTube_Subscribe_Button_-_-_Google_Developers-1" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2023/02/Configure_a_Button_-_-_YouTube_Subscribe_Button_-_-_Google_Developers-1.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2023/02/Configure_a_Button_-_-_YouTube_Subscribe_Button_-_-_Google_Developers-1.png 666w" width="666" height="298" loading="lazy"><figcaption>Esta es una imagen estática que llevaría al aviso de suscripción</figcaption></figure><p>Y así es como se ve esto cuando configuras <code>data-layout="full"</code>:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2023/02/Configure_a_Button_-_-_YouTube_Subscribe_Button_-_-_Google_Developers--1-.png" class="kg-image" alt="Configure_a_Button_-_-_YouTube_Subscribe_Button_-_-_Google_Developers--1-" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2023/02/Configure_a_Button_-_-_YouTube_Subscribe_Button_-_-_Google_Developers--1-.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2023/02/Configure_a_Button_-_-_YouTube_Subscribe_Button_-_-_Google_Developers--1-.png 690w" width="690" height="290" loading="lazy"><figcaption>Esta es una imagen estática que lleva al aviso de suscripción</figcaption></figure><p>También puedes establecer el tema en oscuro con <code>data-theme="dark"</code>.</p><p>Y puedes ocultar tu cuenta de suscriptores por completo con <code>data-count="hidden"</code>. Si solo tienes un puñado de suscriptores, es posible que desees ocultar esto durante unos meses mientras acumulas mil suscriptores o más, para evitar la "prueba social negativa".</p><h1 id="por-qu-recomiendo-los-enlaces-de-suscripci-n-de-youtube-en-lugar-de-los-botones-de-suscripci-n-de-youtube"><strong>Por qué recomiendo los enlaces de suscripción de YouTube en lugar de los botones de suscripción de YouTube</strong></h1><p>Hay varias razones por las que recomiendo usar el enfoque de enlace en lugar de estos botones dinámicos.</p><ol><li>Los bloqueadores de anuncios, los cortafuegos y los complementos del navegador pueden impedir que el botón se reproduzca o funcione correctamente. Este botón implica extraer un archivo JavaScript de los CDN de Google, lo que significa que no se procesará en China, por ejemplo, donde Google está actualmente bloqueado.</li><li>Es difícil controlar el estilo de estos botones y pueden verse mal en un dispositivo móvil.</li><li>Estos botones pueden provocar problemas de accesibilidad. El enlace, por otro lado, es solo un enlace y es fácil de usar para las personas en lectores de pantalla u otras herramientas de asistencia.</li></ol><p>Pero Google también admite estos botones de suscripción de YouTube, por lo que depende de ti &nbsp;si quieres usarlos.</p><h2 id="una-herramienta-de-personalizaci-n-para-el-bot-n-de-suscripci-n-de-youtube"><strong>Una herramienta de personalización para el botón de suscripción de YouTube</strong></h2><p>Google tiene una herramienta oficial para personalizar estos botones de suscripción de YouTube. <a href="https://developers.google.com/youtube/youtube_subscribe_button">Puedes acceder aquí</a>. Ten en cuenta que aún necesitarás tener acceso al HTML de la página en la que desea incrustar estos botones.</p><p>Gracias por leer esta guía y espero que te haya ayudado a comprender cómo funcionan estos enlaces y botones de suscripción de YouTube y cómo puedes usarlos para lograr que más personas se suscriban a tu canal.</p><p>Si deseas obtener más consejos sobre cómo ser un creador exitoso de YouTube en general, puedes aprender de los más de 5 años de experimentación de nuestra organización sin ánimo de lucro que nos han ayudado a convertirnos en el canal de programación más grande de YouTube.</p><p>Aquí puedes encontrar nuestro <a href="https://www.freecodecamp.org/news/how-to-start-a-software-youtube-channel/">manual gratuito de YouTube</a>, que también incluye un curso en video de 1 hora. Lo diseñamos pensando en los creadores centrados en el software, pero muchas de las técnicas se pueden aplicar a otros dominios temáticos. Espero que te sea útil.</p><p>Saludos.</p><p>– Quincy</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Los mejores proveedores de email gratuitos [ Tu guía 2021 para cuentas de correo electrónico] ]]>
                </title>
                <description>
                    <![CDATA[ Si estás tratando de decidirte por un buen servicio de correo electrónico gratuito con las funciones adecuadas, encontrarás que hay muchas opciones para elegir. Eso está muy bien, ya que hay algo para todos, pero puede darte un poco de parálisis de decisión. Para ayudarte a elegir el adecuado para ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/los-mejores-proveedores-de-email-gratuitos-tu-guia-2021-para-cuentas-de-correo-electronico/</link>
                <guid isPermaLink="false">63d94ebd12ea69079612bf9e</guid>
                
                    <category>
                        <![CDATA[ Correo Electrónico ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Enrique Viveros Acosta ]]>
                </dc:creator>
                <pubDate>Thu, 16 Feb 2023 02:04:51 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2023/02/5f9c959c740569d1a4ca0dbf.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/the-best-free-email-providers-2021-guide-to-online-email-account-services/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">The Best Free Email Providers [Guide to Online Email Account Services]</a>
      </p><p>Si estás tratando de decidirte por un buen servicio de correo electrónico gratuito con las funciones adecuadas, encontrarás que hay muchas opciones para elegir.</p><p>Eso está muy bien, ya que hay algo para todos, pero puede darte un poco de parálisis de decisión.</p><p>Para ayudarte a elegir el adecuado para tus necesidades, aquí hay un desglose de algunos de los servicios de correo electrónico gratuitos más populares. Veremos cuánto almacenamiento tienen, qué te permiten hacer y por qué podrían funcionar para ti.</p><p>Estos son los servicios de correo electrónico que revisaremos en este artículo:</p><ul><li>Gmail</li><li>Outlook</li><li>ProtonMail</li><li>AOL</li><li>Zoho Mail</li><li>iCloud Mail</li><li>Yahoo! Mail</li><li>GMX</li><li>Hey (como bono - no es &nbsp;gratis, pero es &nbsp;nuevo)</li></ul><p>Así que vamos a mirarlo. </p><h2 id="gmail"><strong>Gmail</strong></h2><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2023/02/gmail-signin.png" class="kg-image" alt="gmail-signin" width="595" height="598" loading="lazy"></figure><p>Gmail es uno de los servicios de correo electrónico más conocidos y utilizados que existen. Es parte del conjunto de servicios de Google y hay varias razones por las que es tan popular.</p><p>Si quieres &nbsp;un correo electrónico con muchas funciones y te encanta G-suite, es probable que Gmail sea una excelente opción para ti.</p><h3 id="funciones-de-gmail"><strong> Funciones de Gmail</strong></h3><p>Estas son algunas de sus increíbles características:</p><ul><li>Puedes programar correos electrónicos para enviarlos en un momento determinado, posponerlos para no perderlos de vista y personalizar tus notificaciones</li><li>Puedes enviar archivos adjuntos grandes por correo electrónico a través de Google Drive (y guardar documentos allí para que no llenen tu computadora local)</li><li>Puedes usar la redacción inteligente (como autocompletar) para ayudarte a escribir tus correos electrónicos más rápido, e incluso puedes traducir tu mensaje directamente en Gmail (debajo de los tres puntos: "Traducir mensaje").</li><li>Usa la función del panel de lectura para que puedas ver tu bandeja de entrada y el correo electrónico que estás leyendo al mismo tiempo (simplemente ve a Configuración - Panel de lectura - y elige dónde lo deseas)).</li><li>Hay opciones de búsqueda avanzada disponibles (simplemente haz clic en la flecha hacia abajo a la derecha de la barra de búsqueda).</li><li>Además de la funcionalidad de búsqueda normal (por carpeta, etc.), también puedes encontrar correos electrónicos por fecha (escriba antes: fecha, como 2020/1/1, y buscará solo en esos mensajes)..</li><li>Gmail tiene buena seguridad y puedes enviar/recibir dinero a través de tu correo electrónico. También tiene "Modo confidencial" y puedes establecer tiempos de caducidad en sus mensajes.</li><li>Some other cool features? Customize the amount of time you have to undo sent emails, auto-advance through your inbox (under the Advanced tab in Settings), Offline mode, and dragging email between tabs.</li><li>¿Algunas otras características geniales? Personaliza la cantidad de tiempo que tienes para deshacer los correos electrónicos enviados, avanzar automáticamente a través de tu bandeja de entrada (en la pestaña Avanzado en Configuración), el modo sin conexión y poder arrastar el correo electrónico entre pestañas.</li></ul><p><strong>Almacenamiento</strong>: Gmail te ofrece 15 GB de almacenamiento gratuito. Ahora, si bien eso parece mucho, ten en cuenta que también lo usan Google Photos, Google Drive y cualquier otra herramienta de Google que uses.</p><p>Así que, si tienes varios gigabytes de fotos en su computadora en Google Photos, puede sagotar tus capacidades de almacenamiento de correo electrónico.</p><p>Si quieres crear una cuenta de Gmail, puedes hacerlo <a href="https://myaccount.google.com/">aquí</a>.</p><h2 id="outlook"><strong>Outlook</strong></h2><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2023/02/Outlook-signin.png" class="kg-image" alt="Outlook-signin" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2023/02/Outlook-signin.png 600w, https://www.freecodecamp.org/espanol/news/content/images/size/w1000/2023/02/Outlook-signin.png 1000w, https://www.freecodecamp.org/espanol/news/content/images/2023/02/Outlook-signin.png 1411w" sizes="(min-width: 720px) 720px" width="1411" height="688" loading="lazy"></figure><p>Si estás buscando un servicio de correo electrónico potente que ofrezca toneladas de funciones además de la capacidad de integrarse con un montón de aplicaciones empresariales, Outlook es una buena opción para ti.</p><p>No es tan fácil de usar como Gmail, por ejemplo, pero puedes hacer más con él. Muchas grandes empresas utilizan Outlook para su correo electrónico y ofrece un calendario sólido, un administrador de tareas y otras funciones personalizables.</p><h3 id="outlook-features"><strong>Outlook Features</strong></h3><p>Estos son algunos de los otros puntos más vendidos de Outlook:</p><ul><li>Puedes crear nuevas reuniones/tareas/contactos directamente desde la bandeja de entrada (sin necesidad de cambiar de ventana).</li><li>También puedes compartir o asignar tareas (como tareas pendientes) con tus compañeros de trabajo, y también puedes compartir tu calendario con ellos.</li><li>Outlook te permite crear tus propias reglas personalizadas (como enviar siempre correos electrónicos desde x a esta carpeta, etc.). También puedes personalizar tus notificaciones, así como la forma en que ves tus mensajes (como cambiar el color del texto para x remitente, etc.).</li><li>También puedes crear fácilmente plantillas de correo electrónico personalizadas si envías mensajes donde el contenido no cambia con frecuencia (¡ahórrate el esfuerzo adicional!).</li><li>Puedes programar los correos electrónicos para que se entreguen exactamente cuando lo desees y posponerlos para poder leerlos más tarde sin perderlos.</li><li>También puedes configurar alertas de mensajes (¡que nunca más se te &nbsp;pierda un correo electrónico VIP!) y usar banderas y categorías para ayudarte a realizar un seguimiento del correo importante y organizar tu bandeja de entrada.</li><li>Se integra fácilmente con otros productos de Microsoft (por ejemplo, si alguien te envía un documento de Word como archivo adjunto, puedes abrirlo directamente en Outlook)</li><li>Si deseas crear un nuevo contacto, simplemente arrastra y suelta un correo electrónico de ellos en la pestaña de contactos, y listo, se creará para ti.</li><li>Puedes usar notas adhesivas como recordatorios (simplemente escriba Ctrl+Shift+N desde cualquier lugar de la interfaz de Outlook, y ahí estará tu nota).</li><li>Outlook también tiene su propia versión de autocompletar llamada partes rápidas para que ahorres &nbsp;algo de tiempo.</li><li>Y puedes @mencionar (mention) a las personas en correos electrónicos masivos para alertarlos de lo que les concierne.</li></ul><p>Mucha gente describe Outlook como correo electrónico "rico en funciones", y ahora puedes ver por qué.</p><p><strong>Almacenamiento</strong>: en cuanto al almacenamiento, Outlook te ofrece 15 GB gratis, igual que Gmail.</p><h3 id="espera-un-minuto-outlook-y-hotmail-son-lo-mismo"><strong>Espera un minuto - ¿ Outlook y Hotmail son lo mismo? </strong></h3><p>Esto es un confuso, pero aquí está el resumen:</p><p>Microsoft compró Hotmail en 1997 (sí, hace mucho tiempo). Pasaron por varias iteraciones de cambio de marca (MSN Hotmail, Windows Live Mail) pero finalmente se decidieron por Windows Live Hotmail alrededor de 2012.</p><p>También fue entonces cuando Microsoft lanzó Outlook.com, el cambio de marca final de todo lo relacionado con Hotmail (nombre).</p><p>If you already have an old @hotmail.com email address, you can keep it. But if you're signing up for Outlook today, you have to choose an @outlook.com address. Sorry, nostalgic email hopefuls.</p><p>Si ya tienes una dirección de correo electrónico antigua @hotmail.com, puedes conservarla. Pero si te registras en Outlook hoy, debes elegir una dirección de @outlook.com. Lo sentimos, nostálgicos del correo electrónico.</p><p>De todos modos, si quieres probar Outlook, puedes <a href="https://outlook.live.com/owa/">registrarte aquí</a> </p><h2 id="proton"><strong>Proton</strong></h2><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2023/02/proton-update.png" class="kg-image" alt="proton-update" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2023/02/proton-update.png 600w, https://www.freecodecamp.org/espanol/news/content/images/size/w1000/2023/02/proton-update.png 1000w, https://www.freecodecamp.org/espanol/news/content/images/2023/02/proton-update.png 1353w" sizes="(min-width: 720px) 720px" width="1353" height="654" loading="lazy"></figure><p>Proton (anteriormente ProtonMail) es una excelente opción para el usuario promedio que no quiere que las organizaciones o los piratas informáticos husmeen en sus correos electrónicos. No es la seguridad más estricta del planeta, pero es más que suficiente para el usuario promedio.</p><p>Proton es un proveedor de correo electrónico encriptado de código abierto con sede en Suiza (presentado por el famoso CERN, la Organización Europea para la Investigación Nuclear) y te brinda todos los beneficios de la ley suiza y la privacidad/seguridad.</p><h3 id="caracter-sticas-de-proton-"><strong>Características de Proton :</strong></h3><p>No es la única opción de correo electrónico encriptado, pero es una de las más conocidas. Veamos por qué:</p><ul><li>Proton es famoso por su servicio de correo electrónico encriptado (utiliza estándares de encriptación de extremo a extremo y de acceso cero para proteger todo el correo electrónico)</li><li>El plan gratuito te brinda una dirección de correo electrónico, 150 mensajes por día, 3 carpetas/etiquetas y soporte limitado</li><li>No tienes que proporcionar ninguna información personal al registrarte para obtener una cuenta.</li><li>Utiliza los <a href="https://es.wikipedia.org/wiki/Pretty_Good_Privacy">estándares de encriptación PGP</a> bastante robustos.</li><li>El cliente web, sus algoritmos de cifrado y el código de iOS son todos de código abierto</li><li>La dirección IP se elimina de todos tus correos electrónicos</li><li>La función Proton Bridge te permite usarla con otros clientes de correo electrónico (lo que significa que puede extraer correos electrónicos de otros clientes y te permite importar contactos de ellos)</li><li>Puede enviar mensajes que se "autodestruyen" después de un período de tiempo específico</li><li>Puede enviar correos electrónicos encriptados a personas que no usan Proton</li><li>La verificación de dirección te permite guardar tu clave firmada en un contrato firmado digitalmente , para que esa clave no pueda ser manipulada una vez verificada (que reemplazó un método anterior de hacer que la administración de claves de cifrado sea automática e invisible para el usuario). Esto ayuda a prevenir los ataques Man in the Middle</li></ul><p>Sin embargo, hay una cosa importante relacionada con la seguridad que debe tener en cuenta: la línea de asunto de su correo electrónico (y la información de la dirección) no están encriptadas. Entonces, si ProtonMail necesita entregar esa información a las autoridades por cualquier motivo, pueden hacerlo y lo harán.</p><p><strong>Almacenamiento</strong>: Proton ofrece "solo" 500 MB de almacenamiento en su plan gratuito. Pero si necesitas más y está dispuesto a pagar, hay 3 planes pagos disponibles (también tienen más funciones).</p><p>¿Quieres probar Proton? &nbsp;puedes <a href="https://proton.me/">crear una cuenta aquí</a></p><p>Si bien no lo cubriremos en este artículo, una buena alternativa es <a href="https://tutanota.com/">Tutanota</a>, con sede en Alemania.</p><h2 id="aol"><strong>AOL</strong></h2><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2023/02/Aol-signin.png" class="kg-image" alt="Aol-signin" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2023/02/Aol-signin.png 600w, https://www.freecodecamp.org/espanol/news/content/images/size/w1000/2023/02/Aol-signin.png 1000w, https://www.freecodecamp.org/espanol/news/content/images/2023/02/Aol-signin.png 1430w" sizes="(min-width: 720px) 720px" width="1430" height="682" loading="lazy"></figure><p>Ah, correo electrónico de AOL. Si eras un niño de finales de los 80 o 90, es probable que tu primera cuenta de correo electrónico fuera con AOL. ¿A quién no le encantaba escuchar esas tres pequeñas palabras: "¡Te llegó un correo!"</p><p>Desde entonces, el mundo parece haber avanzado, pero AOL no se ha quedado atrás por completo. El proveedor de correo electrónico desde hace mucho tiempo ha mantenido sus servicios sencillos actualizados y relevantes. Es especialmente útil si solo deseas utilizar su servicio para enviar y recibir correos electrónicos.</p><h3 id="caracter-sticas-de-aol"><strong>Características de AOL </strong></h3><p>Así que he aquí por qué es posible que quieras considerar AOL:</p><ul><li>Solo tienes que salir y decirlo primero: el correo de AOL tiene espacio de almacenamiento ilimitado. Es el único, que yo sepa. También tiene un límite bastante generoso de archivos adjuntos de 25 MB.</li><li>Tiene toda la protección típica (y esperada) contra spam y virus, junto con otras características básicas como un corrector ortográfico y filtros que te permiten clasificar los correos electrónicos que recibes.</li><li>También puedes usar sus paneles para mantenerte organizado, que tienen enlaces rápidos a la función Tareas pendientes, el calendario y un blog.</li><li>También tiene modo de panel de lectura (para que puedas leer un correo electrónico sin salir de su bandeja de entrada; el correo aparece a un lado)</li><li>Puede s crear carpetas personalizadas para organizar aún más los mensajes (aunque esta característica no es tan sofisticada como la de Gmail o Outlook).</li><li>La papelería de correo electrónico te permite personalizar tu plantilla de correo electrónico con temas, estilos, etc., para que puedas hacer que tus correos electrónicos sean más animados para las vacaciones, los cumpleaños y más.</li><li>Es compatible con los protocolos POP e IMAP (que te permiten descargar correos electrónicos en tu máquina para que puedas acceder a ellos incluso sin Internet)</li></ul><p>Si bien el correo de AOL no es demasiado elegante, es excelente para la funcionalidad básica de correo electrónico. La función de almacenamiento ilimitado también lo hace destacar y lo ayuda a seguir siendo relevante.</p><p>¿Quieres ese espacio de almacenamiento sin fin? Puedes o<a href="https://www.aol.com/">btener una cuenta aquí.</a></p><h2 id="algunas-otras-opciones-de-email-no-pago"><strong>Algunas otras opciones de Email no pago </strong></h2><p>Tal vez quieras más opciones, te entiendo. Te gusta investigar. Bueno, aquí tienes algunas opciones más de excelentes servicios de correo electrónico gratuitos.</p><h2 id="zoho-mail"><strong>Zoho Mail</strong></h2><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2023/02/zoho-signin.png" class="kg-image" alt="zoho-signin" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2023/02/zoho-signin.png 600w, https://www.freecodecamp.org/espanol/news/content/images/size/w1000/2023/02/zoho-signin.png 1000w, https://www.freecodecamp.org/espanol/news/content/images/2023/02/zoho-signin.png 1415w" sizes="(min-width: 720px) 720px" width="1415" height="641" loading="lazy"></figure><p>Zoho Mail ofrece 5 GB de almacenamiento (no está mal) y ofrece correo electrónico encriptado. Es una excelente opción para empresas emergentes y pequeñas empresas.</p><p>Aquí hay un resumen rápido de algunas características geniales de Zoho Mail:</p><p>Puedes crear hasta 25 direcciones comerciales (por lo que, en lugar de @zoho.com, podrías tener @tastytreatsbakery.com, o cualquiera que sea el nombre de tu empresa).</p><ul><li>Es fácil administrar todas tus tareas, calendarios, notas y documentos (fácil integración con Google Drive) desde tu bandeja de entrada</li><li>Garantía de privacidad y datos totalmente encriptados</li><li>Migra fácilmente los correos electrónicos de tu servicio de correo electrónico anterior con su herramienta integrada</li><li>Las "transmisiones" al estilo de las redes sociales te &nbsp;ayudan a comunicarte y colaborar con tus compañeros de equipo</li><li>Organiza tus archivos adjuntos por tipo</li></ul><p>¿Te suena? Puedes <a href="https://www.zoho.com/mail/">registrarte en &nbsp;Zoho</a> en un abrir y cerrar de ojos.</p><h2 id="icloud-mail"><strong>iCloud Mail</strong></h2><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2023/02/icloud-singin.png" class="kg-image" alt="icloud-singin" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2023/02/icloud-singin.png 600w, https://www.freecodecamp.org/espanol/news/content/images/size/w1000/2023/02/icloud-singin.png 1000w, https://www.freecodecamp.org/espanol/news/content/images/2023/02/icloud-singin.png 1427w" sizes="(min-width: 720px) 720px" width="1427" height="632" loading="lazy"></figure><p>Si lo tuyo es el ecosistema de Apple, quizás quieras considerar el correo de iCloud. Ofrece 5 GB de almacenamiento gratuito (puedes comprar más desde solo $ 0,99 al mes) y la interfaz es bastante agradable de usar.</p><p>Aquí hay algunas otras excelentes funciones de correo de iCloud:</p><ul><li>No hay anuncios: redacta tus correos electrónicos en paz</li><li>Atajos de teclado útiles para enviar correos electrónicos de manera eficiente</li><li>Filtrado de spam (automático y manual): también puedes configurar reglas para bloquear los mensajes que no deseas</li><li>Interfaz limpia y minimalista (piensa en la estética del diseño de Apple)</li><li>Puedes marcar ciertos remitentes como "VIP" y el correo de iCloud enviará sus correos electrónicos a una carpeta especial</li><li>Puedes marcar ciertos remitentes como "VIP" y el correo de iCloud enviará sus correos electrónicos a una carpeta especial</li></ul><p>Si quieres probar el correo de iCloud, <a href="https://www.icloud.com/mail">puedes registrarte aquí</a>.</p><h2 id="yahoo-mail"><strong>Yahoo! Mail</strong></h2><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2023/02/Yahoo-signin.png" class="kg-image" alt="Yahoo-signin" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2023/02/Yahoo-signin.png 600w, https://www.freecodecamp.org/espanol/news/content/images/size/w1000/2023/02/Yahoo-signin.png 1000w, https://www.freecodecamp.org/espanol/news/content/images/2023/02/Yahoo-signin.png 1407w" sizes="(min-width: 720px) 720px" width="1407" height="611" loading="lazy"></figure><p>¿No puedes escuchar al cantor cantando "¡Yahoo!"? Bueno, yo puedo.</p><p>En cualquier caso, Yahoo ofrece un impresionante 1 TB de almacenamiento (eso es 1000 GB), solo superado por el almacenamiento ilimitado de AOL.</p><p>Aquí hay algunos otros Yahoo! características del correo:</p><ul><li>Tema y diseño personalizables de la bandeja de entrada</li><li>Fácil integración de calendario, directamente desde tu bandeja de entrada (también puedes usar Google Calendar y cualquier otro con una dirección de iCal).</li><li>Integra tus otros servicios de correo electrónico (como Gmail, AOL, Outlook) para que puedas administrar todas tus bandejas de entrada en un solo lugar</li><li>Yahoo organiza tus correos electrónicos en "Vistas" en el panel izquierdo (como "Fotos", "Documentos", "Recibos", información de "Viajes", etc.)</li><li>Respuestas fuera de la oficina personalizables</li></ul><p>You can see more for yourself <a href="https://login.yahoo.com/">by trying Yahoo! mail out</a>.</p><h2 id="gmx"><strong>GMX</strong></h2><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2023/02/gmx-signin.png" class="kg-image" alt="gmx-signin" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2023/02/gmx-signin.png 600w, https://www.freecodecamp.org/espanol/news/content/images/size/w1000/2023/02/gmx-signin.png 1000w, https://www.freecodecamp.org/espanol/news/content/images/2023/02/gmx-signin.png 1319w" sizes="(min-width: 720px) 720px" width="1319" height="631" loading="lazy"></figure><p>El correo GMX ofrece un poco de todo, y con 65 GB de almacenamiento gratuito, además de archivos adjuntos de hasta 50 MB, es una opción de correo electrónico gratuita muy razonable.</p><p>Veamos por qué más podrías querer mirarlo:</p><ul><li>Opciones de cifrado: manténte seguro (junto con el software antivirus integrado y el filtro de correo no deseado)</li><li>Puedes tener hasta 10 alias diferentes si necesitas recibir correos electrónicos de diferentes direcciones en un solo lugar (como soporte, equipo, ayuda, etc.)</li><li>La extensión MailCheck para Chrome se asegura de que recibas una notificación cuando recibas nuevos correos electrónicos</li><li>Capacidad para organizar todos los correos electrónicos de tus otras cuentas en un solo lugar</li><li>Configuraciones de filtro personalizables (crea las tuyas o use las que proporciona GMX)</li><li>Búsqueda robusta, calendario en línea y función de contactos fácil de usar</li></ul><p>¿Suena GMX como su proveedor de correo electrónico ideal? Puedes registrarse para obtener una <a href="https://www.gmx.com/">cuenta aquí</a>.</p><h2 id="bonus-hey-no-es-gratis-pero-es-nuevo-"><strong>Bonus – Hey [no es gratis pero es nuevo]</strong></h2><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2023/02/hey-signin.png" class="kg-image" alt="hey-signin" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2023/02/hey-signin.png 600w, https://www.freecodecamp.org/espanol/news/content/images/size/w1000/2023/02/hey-signin.png 1000w, https://www.freecodecamp.org/espanol/news/content/images/2023/02/hey-signin.png 1410w" sizes="(min-width: 720px) 720px" width="1410" height="639" loading="lazy"></figure><p>Es posible que hayas escuchado el bombo en torno al nuevo y audaz correo electrónico Hey de Basecamp. No es gratis, pero promete muchas mejoras drásticas a la antigua forma de enviar correos electrónicos.</p><p>Estas son algunas de las principales funciones de Hey.com:</p><p>Puedes filtrar tus correos electrónicos: si recibes un correo electrónico de un remitente molesto, simplemente bloquéalo en ese mismo momento.</p><p>Puedes abrir y luego leer más de un correo electrónico a la vez. No más abrir, leer, cerrar... abrir, leer, cerrar... y así sucesivamente.</p><ul><li>Puedes agregar notas privadas a cualquier hilo de correo electrónico (para que toda tu información sobre ese hilo esté en un solo lugar).</li><li>Hay una carpeta de "rastro en papel" donde puedes enviar todos los recibos y otros mensajes transaccionales (fácil de encontrar, pero sin saturar tu bandeja de entrada)</li><li>Una "biblioteca de archivos adjuntos" recopila todos tus archivos adjuntos para que puedas buscar directamente allí (sin tener que encontrar el correo electrónico primero).</li><li>100 GB de almacenamiento incluido</li></ul><p>Hay muchas más características geniales, y puedes leer sobre ellas en <a href="https://hey.com/">Hey.com</a>. Los planes para individuos cuestan $99/año y para equipos cuestan $12/usuario por mes. Ofrecen una prueba gratuita de 2 semanas si deseas probarlo primero.</p><p>Muy bien, ahora deberías estar bien equipado para elegir un proveedor de correo electrónico gratuito. ¡Buena suerte para encontrar el adecuado para ti!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Una introducción al arte generativo: qué es y cómo se hace ]]>
                </title>
                <description>
                    <![CDATA[ El arte generativo puede ser un tema intimidante: parece que hay muchas matemáticas involucradas, ¡y el arte es complicado en sí mismo! Pero no tiene por qué ser difícil: puedes construir algunas cosas realmente geniales sin un título en matemáticas o arte. Esta publicación desglosará qué es el arte generativo ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/una-introduccion-al-arte-generativo-que-es-y-como-se-hace/</link>
                <guid isPermaLink="false">63d93dc912ea69079612be71</guid>
                
                    <category>
                        <![CDATA[ arte ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Enrique Viveros Acosta ]]>
                </dc:creator>
                <pubDate>Thu, 16 Feb 2023 01:43:55 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2023/01/0_JPekOSiNoJpvFeDP.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/an-introduction-to-generative-art-what-it-is-and-how-you-make-it-b0b363b50a70/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">An introduction to Generative Art: what it is, and how you make it</a>
      </p><p>El arte generativo puede ser un tema intimidante: parece que hay muchas matemáticas involucradas, ¡y el arte es complicado en sí mismo!</p><p>Pero no tiene por qué ser difícil: puedes construir algunas cosas realmente geniales sin un título en matemáticas o arte. Esta publicación desglosará qué es el arte generativo y cómo puedes comenzar a construir tu propio arte generativo.</p><h3 id="primero-qu-es-el-arte-de-c-digo"><strong>Primero, ¿qué es el arte de código?</strong></h3><p>El arte de código (Code art) es cualquier arte que se construye usando código. Hay infinidad de ejemplos en CodePen — por ejemplo CSS art.</p><h3 id="-qu-es-el-arte-generativo"><strong>¿Qué es el arte generativo?</strong></h3><p>A menudo, el arte generativo se inspira en el arte moderno, especialmente en el arte pop, que hace un uso intensivo de patrones geométricos ordenados.</p><p>Sin embargo, es una categoría muy amplia y rica de arte creado con código con una característica central. El arte generativo incorpora un sistema autogobernado o autónomo de alguna manera.</p><p>La aleatoriedad es un tipo de sistema autónomo. Al incorporar el azar en una pieza de código, obtienes una pieza de arte diferente y completamente única cada vez que ejecutas tu script, cargas tu página o respondes a alguna interacción del usuario.</p><p>También existen sistemas autónomos más ordenados. Un ejemplo es el Fractal de Mandelbrot, derivado de una ecuación engañosamente simple.</p><p>¡También podemos integrar ambos enfoques, mezclando orden y caos!</p><p>La obra de arte se convierte en una colaboración entre la computadora y el artista. El programador controla algunos aspectos de la obra de arte, pero no todos. El artista controla tanto la aleatoriedad como el orden en el arte.</p><p>En cierto modo, con un sistema autónomo, el artista cede el control de su arte y la computadora lo hace por él. Una perspectiva más matizada surge cuando se considera un nuevo proceso creativo.</p><p>El codificador-artista se involucra en un circuito de retroalimentación en el que constantemente modifica un sistema para producir resultados más deseables y, a menudo, más sorprendentes.</p><p>Este proceso abarca la experimentación y coincidencias de una manera que remodela el papel del artista. Como artistas generativos, usamos los conceptos básicos del código como bucles, flujo de control y funciones especializadas. Luego los combinamos con fuerzas a menudo impredecibles, para producir resultados completamente únicos, diferentes a cualquier otra cosa que exista.</p><h3 id="ejemplos-de-arte-generativo"><strong>Ejemplos de arte generativo </strong></h3><p><a href="http://www.galaxykate.com/apps/Prototypes/LTrees/" rel="noopener">Kate Compton’s Flowers</a></p><p><a href="http://math.hws.edu/eck/js/edge-of-chaos/CA.html" rel="noopener">Cellular Automata and the Edge of Chaos</a></p><h4 id="arte-generativo-animado-en-multicolor-por-phil-nash"><strong>Arte generativo animado en multicolor por Phil Nash</strong></h4><h4 id="gotas-impresionistas-de-murasaki-uma"><strong>Gotas impresionistas de Murasaki Uma</strong></h4><h4 id="-rbol-generado-por-miriam-nadler"><strong>Árbol generado por Miriam Nadler </strong></h4><p></p><h3 id="-qu-entra-en-una-pieza-de-arte-generativo"><strong>¿Qué entra en una pieza de arte generativo?</strong></h3><ul><li><strong>La aleatoriedad</strong> es crucial para crear arte generativo. El arte debe ser diferente cada vez que ejecute el script de generación, por lo que la aleatoriedad suele ser una gran parte de eso.</li><li><strong>Algoritmos:</strong> la implementación visual de un algoritmo a menudo puede generar un arte increíble, por ejemplo, el árbol binario anterior.</li><li><strong>Geometría</strong>: la mayoría del arte generativo incorpora formas, y las matemáticas de la clase de geometría de la escuela secundaria pueden ayudar en algunos efectos realmente geniales.</li></ul><h3 id="-c-mo-abordar-una-obra-de-arte-generativo"><strong>¿Cómo abordar una obra de arte generativo?</strong></h3><p>Hay dos estrategias principales para crear arte generativo, aunque la mayoría se ubicará entre las dos estrategias.</p><p>La primera es no tener resultados en mente y ver lo que genera la computadora mientras experimentas.</p><p>La segunda es que tienes una idea muy finalizada de cómo quieres que se vea el arte, y la aleatoriedad solo cambia ligeramente el resultado final.</p><h3 id="-por-d-nde-deber-as-empezar"><strong>¿Por dónde deberías empezar?</strong></h3><p>Si sabes JavaScript, <a href="https://p5js.org/es/">p5.js</a> es un excelente lugar para comenzar. Su objetivo es "hacer que la codificación sea accesible para artistas, diseñadores, educadores y principiantes". Es un contenedor en la <a href="https://developer.mozilla.org/es/docs/Web/API/Canvas_API">API de Canvas</a> y simplifica mucho las matemáticas. Se enfoca en el dibujo, pero también puede interactuar con el sonido, el video o la cámara web si estás interesado en esas formas de arte.</p><h4 id="una-introducci-n-r-pida-a-p5"><strong>Una introducción rápida a P5 </strong></h4><p>Primero, carga en el <a href="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.7.2/p5.js" rel="noopener">p5 CDN</a>. &nbsp;Luego, en tu archivo JavaScript, agrega dos funciones que se usarán en casi todos los scripts de p5: <code>setup</code> y &nbsp;<code>draw</code>. Estos nombres son necesarios para que p5 los llame.</p><p><code>setup</code> es llamado cuando se inicia el programa. Probablemente, crearás un lienzo para dibujar dentro de él usando la función <code>createCanvas</code>, y puedes establecer algunos valores predeterminados allí. ¡Solo se llama una vez!</p><p><code>draw</code> se llama después de la configuración, y se ejecuta constantemente hasta que llames <code>noLoop</code>, lo que evitará que se ejecute nuevamente. &nbsp;<code>draw</code> puede controlar cuántas veces se ejecuta la función <code>frameRate</code>.</p><p>Con el arte generativo, yo generalmente pongo &nbsp;<code>noLoop</code> en la función <code>setup</code>, lo que hace que &nbsp;<code>draw</code> solo se ejecute una vez en lugar de continuamente.</p><p><a href="https://codepen.io/aspittel/pen/EeJJBm">Aquí tienes una plantilla de inicio p5 en CodePen</a></p><p>Ya que hemos hablado tanto sobre la importancia de la aleatoriedad para el arte generativo, otra función importante en p5 es <code>random</code>. Funciona de manera similar a <code>Math.random</code> en JavaScrpit, pero puedes establecer un rango para los números para que no tenga que hacer tantas matemáticas para obtener el número en un formato útil.</p><h4 id="l-neas-p5"><strong>Líneas P5</strong></h4><p>Puedes crear una línea en p5.js como esta:</p><pre><code>line(startX, startY, endX, endY)</code></pre><p>Luego, puedes generar aleatoriamente un montón de líneas y crear una simple obra de arte generativo como esta:</p><p>¡Incluso scripts supersimples pueden generar obras de arte geniales!</p><h4 id="formas-p5"><strong>Formas P5</strong></h4><p>También puedes crear formas con p5, como círculos, triángulos y cuadrados.</p><p>Aquí hay un ejemplo de cómo crear algunas formas con p5:</p><pre><code>// circle ellipse(xCoordinate, yCoordinate, width, height) </code></pre><pre><code>// square rect(xCoordinate, yCoordinate, width, height) </code></pre><pre><code>// triangle triangle(xCoordinate1, yCoordinate1, x2, y2, x3, y3)</code></pre><p>¡Luego, podemos crear algunas formas más para construir algo más divertido!</p><h4 id="movimiento-p5"><strong>Movimiento P5</strong></h4><p>Podemos agregar movimiento a nuestros dibujos eliminando la llamada a la función <code>noLoop</code> &nbsp;en la función de configuración <code>setup</code> &nbsp;¡Mira esto!</p><h4 id="color"><strong>Color</strong></h4><p>También puedes jugar con el color con el arte generativo eligiendo colores al azar. Puedes hacer esto matemáticamente a través de valores RGB, o puedes generar una paleta de colores con tu selector de color favorito (hemos estado usando <a href="https://colorbox.io/">este</a>).</p><p>Puedes establecer el color de relleno con la función de &nbsp;<code>color</code> . Esta toma un montón de formatos diferentes, como colores con nombre, RGBA y códigos hexadecimales.</p><p>También puedes cambiar el color del contorno usando &nbsp;<code>stroke</code>. También puedes eliminar ese contorno usando <code>noStroke</code> o hacer que tenga un ancho diferente con <code>strokeWeight</code>.</p><p><br> <strong>Poniéndolo todo junto</strong></p><p>Una vez que tengamos todas esas piezas en su lugar, podemos combinar las técnicas para construir algunas cosas realmente geniales.</p><h3 id="otra-estrategia-tutoriales-de-ajuste-"><strong>Otra estrategia: tutoriales de ajuste: </strong></h3><p>También puedes generar arte generativo realmente genial, tomando el trabajo de otra persona y construyendo a partir de él. Por ejemplo, aquí está el resultado de un tutorial de <a href="https://www.youtube.com/channel/UCvjgXvBlbQiydffZU7m1_aw" rel="noopener">Dan Shiffman</a>:</p><p>Aquí hay dos ajustes para crear diferentes efectos:</p><p>¡<a href="https://codepen.io/collection/nMmoem/">Aquí</a> hay una colección de Codepen con aún más!</p><p>Puedes seguir tutoriales, bifurcar CodePens o proyectos Glitch y crear algo nuevo y único. Solo asegúrate de darle algo de crédito al artista original también.</p><h3 id="ficha-de-ayuda"><strong>Ficha de ayuda </strong></h3><p>Aquí hay una ficha de ayuda con toda la funcionalidad de P5 que usamos para este tutorial.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2023/01/0_hFfffK_1TdH8MOJf.png" class="kg-image" alt="0_hFfffK_1TdH8MOJf" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2023/01/0_hFfffK_1TdH8MOJf.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2023/01/0_hFfffK_1TdH8MOJf.png 800w" sizes="(min-width: 720px) 720px" width="800" height="838" loading="lazy"></figure><h3 id="ponte-en-contacto">Ponte en contacto </h3><p>Esta publicación fue co-escrita con <a href="https://twitter.com/1800thehive" rel="noopener">James Reichard</a>. Si creas tu propio arte, ¡asegúrate de enviarnos un Tweet! (<a href="https://twitter.com/ASpittel" rel="noopener">Ali</a> and <a href="https://twitter.com/1800THEHIVE" rel="noopener">James</a>).</p><p>Publicado originalmente en<em><em> <a href="https://dev.to/aspittel/intro-to-generative-art-2hi7" rel="noopener">dev.to</a>.</em></em></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ 7 Casos en los que no deberías usar Docker ]]>
                </title>
                <description>
                    <![CDATA[ Docker es un cambio de juego. Pero no es una solución única para todos. Docker tiene muchas cosas buenas. Empaca, expide, y ejecuta aplicaciones como una herramienta de contenerización con ligera, portable y autosuficiente. Docker es genial para negocios de todos los tamaños. Cuando trabajas un pedazo de código en ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/7-casos-en-los-que-no-deberias-usar-docker/</link>
                <guid isPermaLink="false">63d15ba30498b108662130d9</guid>
                
                    <category>
                        <![CDATA[ docker ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Enrique Viveros Acosta ]]>
                </dc:creator>
                <pubDate>Mon, 30 Jan 2023 03:04:20 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2023/01/Docker-1.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/7-cases-when-not-to-use-docker/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">7 Cases When You Should Not Use Docker</a>
      </p><p><strong>Docker es un cambio de juego. Pero no es una solución única para todos.</strong></p><p>Docker tiene muchas cosas buenas. Empaca, expide, y ejecuta aplicaciones como una herramienta de contenerización con ligera, portable y autosuficiente. Docker es genial para negocios de todos los tamaños. Cuando trabajas un pedazo de código en un equipo pequeño, elimina el problema "pero funciona en mi computador" . Mientras tanto, empresas usan Docker para construir entregas de ductos de software ágil y ductos para enviar nuevas funciones de forma más rápida y segura.</p><p>Con su sistema de contenedores incorporado, Docker es una excelente herramienta para la computación en la nube. A su vez, Docker Swarm promueve la agrupación en clústeres y el diseño descentralizado. Suena demasiado bueno para ser verdad, ¿verdad? Bueno, todavía hay varios casos en los que no se debe usar Docker. Aquí hay siete de ellos.</p><p>Veámoslos uno por uno.</p><h2 id="no-uses-docker-si-necesitas-aumentar-la-velocidad"><strong><strong>No uses Docker si necesitas aumentar la velocidad</strong></strong></h2><p>Los contenedores Docker son más pequeños y requieren menos recursos que una máquina virtual con un servidor y una base de datos. Al mismo tiempo, Docker utilizará tantos recursos del sistema como lo permita el programador del kernel del alojamiento. No esperes que Docker acelere una aplicación de ninguna manera.</p><p>Es más, Docker podría incluso hacerlo más lento. Si estás trabajando con él, debes establecer límites sobre la cantidad de memoria, CPU o bloque IO que puede usar el contenedor. De lo contrario, si el kernel detecta que la memoria de la máquina de alojamiento se está agotando para realizar funciones importantes del sistema, podría comenzar a eliminar procesos importantes. Si se elimina el proceso incorrecto (incluido el propio Docker), el sistema será inestable.</p><p>Desafortunadamente, los ajustes de memoria de Docker, la prioridad de falta de memoria en el demonio de Docker (Docker daemon) , no resuelven este problema. Por el contrario, una capa adicional entre una aplicación y el sistema operativo también podría resultar en una reducción de la velocidad. Sin embargo, esta disminución será insignificante. Los contenedores Docker no están completamente aislados y no contienen un sistema operativo completo como cualquier máquina virtual.</p><h2 id="no-uses-docker-si-priorisas-la-seguridad"><strong>No uses Docker si priorisas la seguridad </strong></h2><p>La mayor ventaja de seguridad de Docker es que divide la aplicación en partes más pequeñas. Si la seguridad de una parte se ve comprometida, el resto de ellas no se verá afectada.</p><p>Sin embargo, mientras que los procesos aislados en los contenedores prometen una mayor seguridad, todos los contenedores comparten el acceso a un solo sistema operativo de alojamiento. Corres el riesgo de ejecutar contenedores Docker con un aislamiento incompleto. Cualquier código malicioso puede acceder a la memoria de su computadora.</p><p>Existe una práctica popular para ejecutar muchos contenedores en un solo entorno. Así es como haces que tu aplicación esté predispuesta al tipo de ataques de abuso de recursos, a menos que limites las capacidades del contenedor de recursos. Para una máxima eficiencia y aislamiento, cada contenedor debes abordar un área específica de interés.</p><p>Otro problema es la configuración predeterminada de Docker: los usuarios no tienen espacios de nombres (namespace) . Los espacios de nombres permiten que los recursos de software usen otros recursos solo si pertenecen a un espacio de nombres específico.</p><p>Ejecutar aplicaciones con Docker implica ejecutar el demonio de Docker (Docker daemon) &nbsp;con privilegios de superusuario (root). Cualquier proceso que salga del contenedor Docker tendrá los mismos privilegios en el alojamiento que tenía en el contenedor. Ejecutar sus procesos dentro de los contenedores como un usuario sin privilegios no puede garantizar la seguridad. Depende de las capacidades que agregue o elimine. Para mitigar los riesgos de ruptura de contenedores de Docker, no debes descargar contenedores listos para usar de fuentes no confiables.</p><h2 id="no-uses-docker-si-desarrollas-una-aplicaci-n-gui-de-escritorio"><strong>No uses Docker si desarrollas una aplicación GUI de escritorio</strong></h2><p>Docker no se adapta a las aplicaciones que requieren una interfaz de usuario rica. Docker está destinado principalmente a contenedores aislados con aplicaciones basadas en consola. Las aplicaciones basadas en GUI no son una prioridad, su soporte dependerá del caso y la aplicación específicos. Los contenedores de Windows se basan en Nano o Core Server; no permite a los usuarios iniciar una interfaz basada en GUI o un servidor Docker RDP en el contenedor Docker.</p><p>Sin embargo, aún puedes ejecutar <a href="https://hub.docker.com/r/tzutalin/py2qt4/">aplicaciones basadas en GUI</a> desarrolladas con Python y el marco QT en un contenedor de Linux. Además, puedes usar el reenvío X11, pero esta solución es algo incómoda.</p><h2 id="no-uses-docker-si-quieres-aliviar-el-desarrollo-y-la-depuraci-n"><strong>No uses Docker si quieres aliviar el desarrollo y la depuración</strong></h2><p>Docker fue creado por desarrolladores y para desarrolladores. Brinda estabilidad al entorno: un contenedor en la máquina de desarrollo funcionará exactamente igual en el escenario, la producción o cualquier otro entorno. Esto elimina el problema de varias versiones de programas en diferentes entornos.</p><p>Con la ayuda de Docker, puedes agregar fácilmente una nueva dependencia a tu aplicación. Ningún desarrollador de tu equipo necesitará repetir esta manipulación en su máquina. Todo estará funcionando en el contenedor y distribuido a todo el equipo.</p><p>Al mismo tiempo, debes realizar una configuración adicional para codificar tu aplicación en Docker. Además, con la depuración de Docker, debes configurar la salida de registros y configurar los puertos de depuración. Es posible que también necesites asignar puertos para sus aplicaciones y servicios en contenedores. Entonces, si tienes un proceso de implementación complicado y tedioso, Docker ayudará mucho. Si tienes una aplicación simple, solo agregas una complejidad innecesaria.</p><h2 id="no-uses-docker-si-necesitas-usar-diferentes-sistemas-operativos-o-kernels"><strong>No uses Docker si necesitas usar diferentes sistemas operativos o kernels </strong></h2><p>Con las máquinas virtuales, el hipervisor puede abstraer un dispositivo completo. Puede usar Microsoft Azure para ejecutar ambas instancias de Windows Server y Linux Server al mismo tiempo. Sin embargo, la imagen de Docker requiere el mismo sistema operativo para el que se creó.</p><p>Hay una gran base de datos de imágenes de contenedores Docker: Docker Hub. Sin embargo, si se creó una imagen en Linux Ubuntu, solo se ejecutará en el mismo Ubuntu.</p><p>Si una aplicación se desarrolla en Windows, pero la producción se ejecuta en Linux, no podrás usar Docker de manera efectiva. A veces, es más fácil configurar un servidor si tiene varias aplicaciones estáticas.</p><h2 id="no-uses-docker-si-tienes-muchos-datos-valiosos-que-almacenar"><strong>No uses Docker si tienes muchos datos valiosos que almacenar</strong></h2><p>Por diseño, todos los archivos de Docker se crean dentro de un contenedor y se almacenan en una capa de contenedor de escritura. Puede ser difícil recuperar los datos del contenedor si un proceso diferente los necesita. Además, la capa de escritura de un contenedor está conectada a la máquina host en la que se ejecuta el contenedor. Si necesitas mover los datos a otro lugar, no puedes hacerlo fácilmente. Más que eso, todos los datos almacenados dentro de un contenedor se perderán para siempre una vez que el contenedor se apague.</p><p>Primero debes pensar en formas de guardar tus datos en otro lugar. Para mantener los datos seguros en Docker, debes emplear una herramienta adicional: Volúmenes de datos de Docker. Sin embargo, esta solución sigue siendo bastante torpe y necesita ser mejorada.</p><h2 id="no-uses-docker-si-est-s-buscando-la-tecnolog-a-m-s-f-cil-de-administrar"><strong>No uses Docker si estás buscando la tecnología más fácil de administrar </strong></h2><p>Al ser introducido en 2012, Docker sigue siendo una nueva tecnología. Como desarrollador, es posible que debas actualizar las versiones de Docker con regularidad. Desafortunadamente, la compatibilidad con versiones anteriores no está garantizada. Además, la documentación se está quedando atrás con respecto al avance de la tecnología. Como desarrollador, tendrás que resolver algunas cosas tú mismo.</p><p>Además, las opciones de monitorización que ofrece Docker son bastante pobres. Puedes obtener una visión rápida de algunas estadísticas simples. Sin embargo, si deseas ver algunas funciones de monitoreo avanzadas, Docker no tiene nada que ofrecer.</p><p>También, en el caso de una aplicación grande y compleja, la implementación de Docker tiene un costo. Crear y mantener la comunicación entre numerosos contenedores en numerosos servidores requerirá mucho tiempo y esfuerzo. Sin embargo, existe una herramienta útil que facilita el trabajo con aplicaciones Docker de varios contenedores: Docker Compose. Docker Compose define servicios, redes y volúmenes en un solo archivo YAML.</p><p>No obstante, el ecosistema de Docker está bastante fracturado: no todos los productos de contenedores compatibles funcionan bien entre sí. Cada producto está respaldado por una determinada empresa o comunidad. La competencia acalorada entre ellas produce incompatibilidad.</p><h2 id="para-concluir"><strong>Para concluir</strong></h2><p>Los profesionales de KeenEthics disfrutan trabajar con Docker y, a menudo, lo usan para el desarrollo de aplicaciones. A pesar de algunos inconvenientes, puedes usarlo fácilmente para ejecutar y administrar aplicaciones en paralelo en contenedores aislados.</p><p>Instalar una aplicación puede ser tan simple como ejecutar un solo comando – &lt;docker run&gt;. Docker también proporciona un entorno de aislamiento limpio y original para cada prueba, lo que lo convierte en una herramienta importante y útil para las pruebas de automatización.</p><p>Las características de Docker ofrecen beneficios en términos de administración de dependencias y seguridad. Mejorado con herramientas tan útiles como Docker Hub, Docker Swarm y Docker Compose, Docker es una solución popular y fácil de usar.</p><p>A pesar de todos los beneficios de Docker, no debes usarlo para contener todas y cada una de las aplicaciones que desarrolles.</p><p><em>Recuerda</em>:<em> Docker cambia las reglas del juego</em>. <em>Pero no es una solución única para todos.</em></p><p>Docker tampoco es la única herramienta de este tipo en el mercado. Las alternativas de Docker son <a href="https://www.redhat.com/es/technologies/cloud-computing/openshift">rkt</a>, pronunciado como 'rocket', <a href="https://linuxcontainers.org/">Linux Containers</a> u <a href="https://openvz.org/">OpenVZ</a>. Cada uno de estos con sus ventajas y desventajas es bastante similar a Docker. La creciente popularidad y las tasas de uso de Docker se deben únicamente a la decisión de las empresas de adoptarlo.</p><p>Antes de saltar a conclusiones sobre si debe usar Docker o no, investiga los requisitos del proyecto. Habla con tus compañeros de equipo o compañeros y permítales que te ayuden a decidir cuándo usar Docker, &nbsp;y cuándo no usar contenedores y si es uno de esos casos de uso de Docker.</p><p>Te guste o no, esta tecnología tiene futuro. Hay algunos desarrolladores y agencias de desarrollo que odian a Docker y tratan de eliminarlo de todos sus proyectos en curso. Al mismo tiempo, hay especialistas que contienen todo lo que pueden porque ven a Docker como una panacea. Tal vez, no deberías unirte a ninguno de los campos. Mantente imparcial, mantente objetivo y toma una decisión dependiendo de la situación en particular.</p><h2 id="tienes-una-idea-para-un-proyecto-docker"><strong>Tienes una idea para un proyecto Docker?</strong></h2><p>Mi empresa KeenEthics es un equipo de <a href="https://keenethics.com/services-web-development">desarrolladores de aplicaciones web</a> experimentados. En caso de que necesites un presupuesto gratuito de un proyecto similar, no dudes en <a href="https://keenethics.com/contacts?activeForm=estimate">ponerte en contacto</a>.</p><h3 id="p-s-">P.S.</h3><p>Además, me gustaría decir "gracias" a <a href="https://www.linkedin.com/in/oleksiy-pletnov-212b3764/">Alex Pletnov</a> por ser coautor de este artículo, así como a los lectores por leer hasta el final.</p><p></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Métodos arreglo de Java- Cómo imprimir arreglos en Java ]]>
                </title>
                <description>
                    <![CDATA[ Un arreglo es una estructura de datos utilizada para almacenar datos del mismo tipo. Los arreglos almacenan sus elementos en ubicaciones de memoria contiguas. En Java, los arreglos son objetos. Todos los métodos se pueden ser invocados en un arreglo. Podemos almacenar un número fijo de elementos en un arreglo. ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/como-imprimir-arreglos-en-java/</link>
                <guid isPermaLink="false">63cffc410498b10866212c25</guid>
                
                    <category>
                        <![CDATA[ java ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Enrique Viveros Acosta ]]>
                </dc:creator>
                <pubDate>Mon, 30 Jan 2023 02:45:36 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2023/01/Untitled-design--1-.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/java-array-methods-how-to-print-an-array-in-java/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Java Array Methods – How to Print an Array in Java</a>
      </p><p>Un arreglo es una estructura de datos utilizada para almacenar datos del mismo tipo. Los arreglos almacenan sus elementos en ubicaciones de memoria contiguas.</p><p>En Java, los arreglos son objetos. Todos los métodos se pueden ser invocados en un arreglo. Podemos almacenar un número fijo de elementos en un arreglo.</p><p>Declaremos un tipo simple de arreglo primitivo:</p><pre><code class="language-java">int[] intArray = {2,5,46,12,34};</code></pre><p>Ahora tratemos de imprimirlo con el método &nbsp;<code>System.out.println()</code>:</p><pre><code class="language-java">System.out.println(intArray);
// output: [I@74a14482</code></pre><p>¿Por qué no imprimió Java nuestro arreglo? ¿Qué está pasando detrás de escena?</p><p>El método <code>System.out.println()</code> &nbsp;convierte el objeto que pasamos en una cadena llamando &nbsp;<code>String.valueOf()</code>. Sí miramos a la implementación del método <code>String.valueOf()</code>, veremos esto:</p><pre><code class="language-java">public static String valueOf(Object obj) {
    return (obj == null) ? "null" : obj.toString();
}</code></pre><p>Si el objeto pasado es <code>null</code> retorna null, si no este llama <code>obj.toString()</code>. Finalmente, <code>System.out.println()</code> llama <code>toString()</code> a imprimir el resultado.</p><p>Si la clase de ese objeto anula la implementación de &nbsp;<code>Object.toString()</code>'s, llamará al método <code>Object.toString()</code>.</p><p><code>Object.toString()</code> retorna <code>getClass().getName()+</code><strong><strong><strong><strong><code>‘@’</code></strong></strong></strong></strong><code>+Integer.toHexString(hashCode())</code> . De modo simple, retorna: “nombre de la clase @ código hash del objeto”.</p><p>En nuestro resultado anterior <code>[I@74a14482</code>, el <code>[</code> indica que se trata de un arreglo, y <code>I</code> representa int (el tipo de arreglo). <code>74a14482</code> es la representación &nbsp;hexadecimal sin firma del código hash del arreglo.</p><p>Cada vez que estemos creando nuestras propias clases personalizadas, es una buena práctica anular el método <code>Object.toString()</code>.</p><p>No podemos imprimir arreglos en Java usando el método <code>System.out.println()</code>. En vez de eso, estas son las formas en las que podemos imprimir un arreglo: </p><ol><li>Bucles: bucle for y bucle for-each </li><li>método <code>Arrays.toString()</code> </li><li>método <code>Arrays.deepToString()</code> </li><li>método <code>Arrays.asList()</code></li><li>Interfaz Java Iterator </li><li>Java Stream API</li></ol><p>Veámoslos uno por uno.</p><h1 id="1-bucles-bucle-for-y-bucle-for-each"><strong>1. Bucles: </strong>bucle for y bucle for-each </h1><p>Aquí tenemos un ejemplo de un bucle for:</p><pre><code class="language-java">int[] intArray = {2,5,46,12,34};

for(int i=0; i&lt;intArray.length; i++){
    System.out.print(intArray[i]);
    // output: 25461234
}</code></pre><p>Todas las clases anulan &nbsp;<code>Object.toString()</code> y regresan una representación de cadena de su valor.</p><p>Aquí tenemos un bucle for-each:</p><pre><code class="language-java">int[] intArray = {2,5,46,12,34};

for(int i: intArray){
    System.out.print(i);
    // output: 25461234
}</code></pre><h1 id="2-m-todo-arrays-tostring-"><strong>2. Método Arrays.toString()</strong></h1><p><code>Arrays.toString()</code> es un método estático de la clase del arreglo que pertenece al paquete <code>java.util</code>. Retorna una representación de los contenidos del arreglo especificado. Podemos imprimir un arreglo unidimensional usando este método.</p><p>Los elementos del arreglo son convertidos a cadenas usando el método, <code>String.valueOf()</code>, de esta forma:</p><pre><code class="language-java">int[] intArray = {2,5,46,12,34};
System.out.println(Arrays.toString(intArray));
// output: [2, 5, 46, 12, 34]</code></pre><p>Para un tipo de referencia del arreglo, tenemos que asegurarnos que la clase del tipo de referencia anula el método <code>Object.toString()</code>.</p><p>Por ejemplo:</p><pre><code class="language-java">public class Test {
    public static void main(String[] args) {
        Estudiante[] estudiante = {new Estudiante("John"), new Estudiante("Doe")};
        
        System.out.println(Arrays.toString(estudiantes));
        // output: [Estudiante{name='John'}, Estudiante{name='Doe'}]
    }
}

class Estudiante {
    private String name;

    public Estudiante(String name){
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Estudiante{" + "name='" + name + '\'' + '}';
    }
}</code></pre><p>Este método no es apropiado para arreglos multidimensionales. Convierte los arreglos multidimensionales a cadenas usando <code>Object.toString()</code> que describe sus identidades en vez de sus contenidos.</p><p>Por ejemplo:</p><pre><code class="language-java">// creating multidimensional array
int[][] multiDimensionalArr = { {2,3}, {5,9} };

System.out.println(Arrays.toString(multiDimensionalArr));
// output: [[I@74a14482, [I@1540e19d]</code></pre><p>Con la ayuda de <code>Arrays.deepToString()</code>, podemos imprimir arreglos multidimensionales.</p><h1 id="3-m-todo-arrays-deeptostring-"><strong>3. Método Arrays.deepToString() </strong></h1><p><code>Arrays.deepToString()</code> retorna una representación de los "contenidos profundos" del arreglo especificado.</p><p>Si un elemento es un arreglo de un tipo primitivo, es convertido a una cadena invocando la sobrecarga adecuada de <code>Arrays.toString()</code>.</p><p>Aquí tenemos un ejemplo del tipo primitivo de un arreglo multidimensional:</p><pre><code class="language-java">// creating multidimensional array
int[][] multiDimensionalArr = { {2,3}, {5,9} };

System.out.println(Arrays.deepToString(multiDimensionalArr));
// output: [[2, 3], [5, 9]]</code></pre><p>Si un elemento es un arreglo del tipo de referencia, se convierte en una cadena invocando recursivamente <code>Arrays.deepToString()</code>.</p><pre><code class="language-java">Profesor[][] profesores = 
{{ new Profesor("John"), new Profesor("David") }, {new Profesor("Mary")} };

System.out.println(Arrays.deepToString(teachers));
// output: 
[[Profesor{name='John'}, Profesor{name='David'}],[Profesor{name='Mary'}]]</code></pre><p>Tenemos que anular &nbsp;<code>Object.toString()</code> en nuestra clase Profesor.</p><p>Si tienes curiosidad de cómo lo hace recursión, aquí encuentras el <a href="https://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/be44bff34df4/src/share/classes/java/util/Arrays.java#l4611">c<em>ódigo fuente</em></a> para el método &nbsp;<code>Arrays.deepToString()</code>.</p><p><strong><strong><strong><strong>N</strong></strong></strong>OTA<strong><strong><strong>:</strong></strong></strong></strong> Los arreglos unidimensionales de tipo de referencia también pueden ser impresos usando este método. Por ejemplo::</p><pre><code class="language-java">Integer[] oneDimensionalArr = {1,4,7};

System.out.println(Arrays.deepToString(oneDimensionalArr));
// output: [1, 4, 7]</code></pre><h1 id="4-m-todo-arrays-aslist-"><strong>4. Método Arrays.asList() </strong></h1><p>Este método regresa una lista de tamaño fijo respaldada por el arreglo especificado.</p><pre><code class="language-java">Integer[] intArray = {2,5,46,12,34};

System.out.println(Arrays.asList(intArray));
// output: [2, 5, 46, 12, 34]</code></pre><p>Hemos cambiado el tipo int a un número entero, porque List es una colección que guarda una lista de objetos. Cuando estamos convirtiendo un arreglo a una lista debería ser un arreglo de tipo de referencia.</p><p>Java llama &nbsp;<code>Arrays.</code><em><em><em><em><code>asList</code></em></em></em></em><code>(intArray).toString()</code>. Esta técnica usa internamente el método <code>toString()</code> &nbsp;del tipo de los elementos dentro de la lista.</p><p>Otro ejemplo con nuestra clase personalizada Profesor:</p><pre><code class="language-java">Profesor[] profesor = { new Profesor("John"), new Profesor("Mary") };

System.out.println(Arrays.asList(profesor));
// output: [Profesor{name='John'}, Profesor{name='Mary'}]</code></pre><p><strong><strong>NOT</strong>A<strong>:</strong></strong> No podemos imprimir arreglos multidimensionales usando este método. Por ejemplo:</p><pre><code class="language-java">Teacher[][] teachers = 
{{ new Teacher("John"), new Teacher("David") }, { new Teacher("Mary") }};
        
System.out.println(Arrays.asList(teachers));

// output: [[Lcom.thano.article.printarray.Teacher;@1540e19d, [Lcom.thano.article.printarray.Teacher;@677327b6]</code></pre><h1 id="5-interfaz-del-iterator-java"><strong>5. Interfaz del iterator Java</strong></h1><p>Similar a un bucle for-each, podemos usar la interfaz del iterador para recorrer los elementos del arreglo e imprimirlos.</p><p>Se puede crear un objeto iterator invocando el método <code>iterator()</code> sobre una colección (Collection). Ese objeto será usado para iterar sobre la Colección de elementos</p><p>Aquí tenemos un ejemplo de cómo podemos imprimir un arreglo usando la interfaz:</p><pre><code class="language-java">Integer[] intArray = {2,5,46,12,34};

// creando una lista de entero (List of Integer)
List&lt;Integer&gt; list = Arrays.asList(intArray);

// creando un  iterador de la lista de entero (Integer List)
Iterator&lt;Integer&gt; it = list.iterator();

// Si la lista tiene elementos que ser iterados
while(it.hasNext()) {
    System.out.print(it.next());
    // output: 25461234
}</code></pre><h1 id="6-java-stream-api"><strong>6. Java Stream API</strong></h1><p>La Stream API es usa para procesar colecciones de objetos. Una corriente (stream) es una secuencia de objetos. &nbsp;Las corrientes no cambian la estructura de datos original, solo proveen el resultado según las operaciones solicitadas.</p><p>Con la ayuda de a operación en el terminal <code>forEach()</code> podemos iterar a través de cada elemento de la corriente</p><p>Por ejemplo:</p><pre><code class="language-java">Integer[] intArray = {2,5,46,12,34};

Arrays.stream(intArray).forEach(System.out::print);
// output: 25461234</code></pre><p>Ahora ya sabemos cómo imprimir un arreglo en Java.</p><p>Gracias por leerme.</p><p>Imagen de portada por <a href="https://unsplash.com/@acharki95?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Aziz Acharki</a> en <a href="https://unsplash.com/?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a>.</p><p>Puedes leer mis otros artículos en <a href="https://medium.com/@mvthanoshan9/object-oriented-programming-principles-in-java-820919dced1a">Medium</a>.</p><p><strong><strong><strong><strong>Happy Coding!</strong></strong></strong></strong></p><p></p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
