<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Juan Carlos</title>
    <description>The latest articles on DEV Community by Juan Carlos (@juancarlospaco).</description>
    <link>https://dev.to/juancarlospaco</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F137759%2F37fee47a-af93-4857-a560-5d690d82a1ae.png</url>
      <title>DEV Community: Juan Carlos</title>
      <link>https://dev.to/juancarlospaco</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/juancarlospaco"/>
    <language>en</language>
    <item>
      <title>Aprende a programar con Nim</title>
      <dc:creator>Juan Carlos</dc:creator>
      <pubDate>Thu, 11 Mar 2021 14:28:43 +0000</pubDate>
      <link>https://dev.to/juancarlospaco/aprende-a-programar-con-nim-10nd</link>
      <guid>https://dev.to/juancarlospaco/aprende-a-programar-con-nim-10nd</guid>
      <description>&lt;h1&gt;
  
  
  Copipastear
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Todos los ejemplos se pueden copiar y pegar para ejecutarlos directamente!&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://play.nim-lang.org" rel="noopener noreferrer"&gt;Playground para practicar desde el navegador web.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://nim-lang.org/install.html" rel="noopener noreferrer"&gt;Instalar en la computadora.&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Hola Mundo
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;echo&lt;/code&gt; sirve para imprimir por la terminal los argumentos&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="s"&gt;"Hola Mundo"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Otro ejemplo&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;2.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"OwO"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kp"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Comentarios
&lt;/h1&gt;

&lt;p&gt;Los comentarios son texto ignorado por el programa,&lt;br&gt;
es decir el texto en un comentario no existe para la computadora,&lt;br&gt;
usualmente se usa para documentar el codigo para que las personas lo puedan entender mejor.&lt;/p&gt;

&lt;p&gt;Comentario es una linea que empieza con &lt;code&gt;#&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="c"&gt;# Esto es un comentario&lt;/span&gt;
&lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="s"&gt;"Hola"&lt;/span&gt; &lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;" "&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Mundo"&lt;/span&gt; &lt;span class="c"&gt;# Otro comentario&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Tipos Basicos
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;assert&lt;/code&gt; comprueba que el argumento evalua a Verdadero.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;is&lt;/code&gt; sirve para comprobar el tipo de algo, &lt;br&gt;
se usa de la forma &lt;code&gt;valor is Tipo&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="n"&gt;assert&lt;/span&gt; &lt;span class="mi"&gt;42&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;
&lt;span class="n"&gt;assert&lt;/span&gt; &lt;span class="mf"&gt;3.14&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="kt"&gt;float&lt;/span&gt;
&lt;span class="n"&gt;assert&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt;
&lt;span class="n"&gt;assert&lt;/span&gt; &lt;span class="s"&gt;"x"&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;
&lt;span class="n"&gt;assert&lt;/span&gt; &lt;span class="sc"&gt;'z'&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="kt"&gt;char&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Variables
&lt;/h1&gt;

&lt;p&gt;Las variables se declaran con &lt;code&gt;var&lt;/code&gt;, &lt;code&gt;let&lt;/code&gt;, &lt;code&gt;const&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;nombre&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"valor"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Mas ejemplos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;42&lt;/span&gt;

&lt;span class="k"&gt;var&lt;/span&gt;
  &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Para no repetir tanto el 'var' "&lt;/span&gt;
  &lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"podes agrupar las variables asi"&lt;/span&gt;
  &lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;

&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;666&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
  &lt;span class="mi"&gt;420&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;
  &lt;span class="mi"&gt;42&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Tiempo de Compilacion&lt;/th&gt;
&lt;th&gt;Tiempo de Ejecucion&lt;/th&gt;
&lt;th&gt;Inmutable&lt;/th&gt;
&lt;th&gt;Requiere Asignamiento&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;var&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Si&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;let&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Si&lt;/td&gt;
&lt;td&gt;Si&lt;/td&gt;
&lt;td&gt;Si&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;const&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Si&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Si&lt;/td&gt;
&lt;td&gt;Si&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h1&gt;
  
  
  Matematica Basica
&lt;/h1&gt;

&lt;p&gt;Division entera usa el operador &lt;code&gt;div&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Modulo usa el operador &lt;code&gt;mod&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
&lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
&lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
&lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt; &lt;span class="ow"&gt;div&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
&lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt; &lt;span class="ow"&gt;mod&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Valores Numericos
&lt;/h1&gt;

&lt;p&gt;Puedes usar numeros Binarios, Hexadecimales, Octales, etc.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="m"&gt;0b1100&lt;/span&gt;  &lt;span class="c"&gt;# Binario&lt;/span&gt;
&lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="mh"&gt;0xFFFF&lt;/span&gt;  &lt;span class="c"&gt;# Hexadecimal&lt;/span&gt;
&lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="mo"&gt;0o777&lt;/span&gt;   &lt;span class="c"&gt;# Octal&lt;/span&gt;

&lt;span class="c"&gt;# _ es ignorado, es util para numeros grandes&lt;/span&gt;
&lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="mi"&gt;2_000_000&lt;/span&gt;

&lt;span class="c"&gt;# Se comprobara que este numero siempre sea Positivo.&lt;/span&gt;
&lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="mf"&gt;0.&lt;/span&gt;&lt;span class="n"&gt;Positive&lt;/span&gt;  &lt;span class="c"&gt;# &amp;gt;= 0&lt;/span&gt;

&lt;span class="c"&gt;# Se comprobara que este numero siempre sea Natural.&lt;/span&gt;
&lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="mf"&gt;1.&lt;/span&gt;&lt;span class="n"&gt;Natural&lt;/span&gt;   &lt;span class="c"&gt;# &amp;gt; 0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  If Elif Else
&lt;/h1&gt;

&lt;p&gt;Control de flujo con bloques If Elif Else&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
  &lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="s"&gt;"Ejemplo"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;condicional&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;condicional&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
  &lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="mi"&gt;42&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
  &lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Un If Elif Else en una linea es un "Operador Ternario"&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;condicional&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;condicional&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="mi"&gt;42&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Mas ejemplos&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;valor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;valor&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
  &lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="s"&gt;"valor es cero"&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;valor&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
  &lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="s"&gt;"valor es negativo"&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
  &lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="s"&gt;"valor es positivo"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Case Switch
&lt;/h1&gt;

&lt;p&gt;Case Switch es similar a un If Elif Else pero funciona distinto.&lt;br&gt;
Tambien puede tener un &lt;code&gt;else:&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;valor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"gato"&lt;/span&gt;

&lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="n"&gt;valor&lt;/span&gt;
&lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="s"&gt;"perro"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
  &lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="s"&gt;"valor es perro"&lt;/span&gt;
&lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="s"&gt;"gato"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"gatito"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
  &lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="s"&gt;"valor es gato"&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
  &lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="s"&gt;"valor es otro animal"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;case switch puede coincidir con multiples condiciones &lt;br&gt;
&lt;code&gt;of 1, 2, 3, 4, 5:&lt;/code&gt; en el ejemplo de abajo.&lt;/p&gt;

&lt;p&gt;case switch puede usar &lt;code&gt;elif&lt;/code&gt; como se observa abajo.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;valor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;42&lt;/span&gt;

&lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="n"&gt;valor&lt;/span&gt;
&lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
  &lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="s"&gt;"valor es cero"&lt;/span&gt;
&lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
  &lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="s"&gt;"valor esta entre 0 y 5"&lt;/span&gt;
&lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="mf"&gt;6&lt;/span&gt;&lt;span class="p"&gt;..&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
  &lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="s"&gt;"valor esta entre 6 y 9"&lt;/span&gt;
&lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="n"&gt;valor&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
  &lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="s"&gt;"valor es negativo"&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
  &lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="s"&gt;"valor es otro numero"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Bloques
&lt;/h1&gt;

&lt;p&gt;Bloques de codigo con un nuevo Contexto (Scope) se crean con &lt;code&gt;block&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;ejemplo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Afuera del block"&lt;/span&gt;

&lt;span class="k"&gt;block&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
  &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;ejemplo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Adentro del block"&lt;/span&gt;
  &lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="n"&gt;ejemplo&lt;/span&gt;

&lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="n"&gt;ejemplo&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tambien puede usarse para evaluar codigo a un valor&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;valor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;block&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
  &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
  &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
  &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;

&lt;span class="n"&gt;assert&lt;/span&gt; &lt;span class="n"&gt;valor&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bloques pueden tener un nombre etiqueta.&lt;/p&gt;

&lt;p&gt;Se puede salir explicitamente de un bloque usando &lt;code&gt;break&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="s"&gt;"Afuera del block"&lt;/span&gt;

&lt;span class="k"&gt;block&lt;/span&gt; &lt;span class="n"&gt;el_bloque_loco&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
  &lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="s"&gt;"Adentro del block"&lt;/span&gt;
  &lt;span class="k"&gt;break&lt;/span&gt; &lt;span class="n"&gt;el_bloque_loco&lt;/span&gt;

&lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="s"&gt;"Afuera del block"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Bucle For
&lt;/h1&gt;

&lt;p&gt;El bucle &lt;code&gt;for&lt;/code&gt; sirve para iterar un valor iterable,&lt;br&gt;
para aplicar algun tipo de logica a los items individualmente.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;for&lt;/code&gt; se puede interrumpir con &lt;code&gt;break&lt;/code&gt; tambien.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="mf"&gt;5&lt;/span&gt;&lt;span class="p"&gt;..&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
  &lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; 
    &lt;span class="k"&gt;break&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Otro ejemplo&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="ow"&gt;mod&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="s"&gt;"item es par"&lt;/span&gt;
  &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="s"&gt;"item es impar"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Bucle While
&lt;/h1&gt;

&lt;p&gt;El bucle &lt;code&gt;while&lt;/code&gt; es similar al &lt;code&gt;for&lt;/code&gt;,&lt;br&gt;
pero sirve para repetir un bloque de codigo,&lt;br&gt;
siempre y cuando un argumento de condicion booleana sea verdadera.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;while&lt;/code&gt; se puede interrumpir con &lt;code&gt;break&lt;/code&gt; tambien.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;z&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="n"&gt;z&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
  &lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="n"&gt;z&lt;/span&gt;
  &lt;span class="n"&gt;inc&lt;/span&gt; &lt;span class="n"&gt;z&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Leer y Escribir archivos
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;readFile&lt;/code&gt; sirve para leer archivos.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;writeFile&lt;/code&gt; sirve para escribir archivos.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="n"&gt;writeFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/tmp/ejemplo.txt"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Los datos van aca."&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;contenido&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;readFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/tmp/ejemplo.txt"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="n"&gt;contenido&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Leer y Escribir Variables de Entorno
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;getEnv&lt;/code&gt; sirve para leer Variables de Entorno.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;putEnv&lt;/code&gt; sirve para escribir Variables de Entorno.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="n"&gt;putEnv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"EXAMPLE"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="n"&gt;getEnv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"EXAMPLE"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Funciones
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;proc&lt;/code&gt; declara una nueva funcion, &lt;br&gt;
los argumentos llevan su tipo y el tipo de retorno va al final.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="k"&gt;proc &lt;/span&gt;&lt;span class="nf"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;argumento0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;argumento1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
  &lt;span class="n"&gt;argumento0&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;argumento1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tambien se puede escribir en una linea&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="k"&gt;proc &lt;/span&gt;&lt;span class="nf"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;argumento0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;argumento1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;argumento0&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;argumento1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Puede no retornar ningun tipo&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="k"&gt;proc &lt;/span&gt;&lt;span class="nf"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;argumento0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;argumento1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; 
  &lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="n"&gt;argumento0&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;argumento1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Puede no tomar ningun argumento&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="k"&gt;proc &lt;/span&gt;&lt;span class="nf"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; 
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;42&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Una funcion sin nombre es una funcion anonima&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="k"&gt;proc&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;argumento0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;float&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kt"&gt;float&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;argumento0&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mf"&gt;1.0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Mas ejemplos&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="k"&gt;proc &lt;/span&gt;&lt;span class="nf"&gt;saludar&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; 
  &lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="s"&gt;"Hola Mundo"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Funcion que retorna muchas cosas juntas&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="k"&gt;proc &lt;/span&gt;&lt;span class="nf"&gt;retornaMuchasCosas&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt; &lt;span class="n"&gt;auto&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
  &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;clave0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;clave1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;clave2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"texto"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Funcion Flecha (Arrow Functions) esta en &lt;a href="https://nim-lang.github.io/Nim/sugar.html" rel="noopener noreferrer"&gt;el modulo de azucar&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;import&lt;/code&gt; importa modulos de la libreria estandard, o de terceros.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="n"&gt;sugar&lt;/span&gt;

&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;saludar&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;argumento&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="s"&gt;"Hola "&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;argumento&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Otro ejemplo, pero sin argumentos&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="n"&gt;sugar&lt;/span&gt;

&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;saludar&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="s"&gt;"ejemplo"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Arrow Function multi-linea&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="n"&gt;sugar&lt;/span&gt;

&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;ejemplo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
  &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
  &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;assert&lt;/span&gt; &lt;span class="n"&gt;ejemplo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;45&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Estructura de Programa
&lt;/h1&gt;

&lt;p&gt;Para darle mas estructura puedes crear una funcion principal &lt;code&gt;main&lt;/code&gt;, &lt;br&gt;
no es obligatorio, pero es recomendado.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;when&lt;/code&gt; es un &lt;code&gt;if&lt;/code&gt; pero que se evalua durante la compilacion.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;isMainModule&lt;/code&gt; es &lt;code&gt;true&lt;/code&gt; cuando es el modulo principal que se esta ejecutando.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="k"&gt;proc &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
  &lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="s"&gt;"Hola Mundo"&lt;/span&gt;

&lt;span class="k"&gt;when&lt;/span&gt; &lt;span class="n"&gt;isMainModule&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
  &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Programa de conversion de escalas de Temperatura&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="k"&gt;proc &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;celsius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
  &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;kelvin&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;celsius&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;273&lt;/span&gt;
  &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;fahrenheit&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;celsius&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;1.8&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mf"&gt;32.0&lt;/span&gt;
  &lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="s"&gt;"Temperatura Celsius: "&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;celsius&lt;/span&gt;
  &lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="s"&gt;"Temperatura Fahrenheit: "&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fahrenheit&lt;/span&gt;
  &lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="s"&gt;"Temperatura Kelvin: "&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;kelvin&lt;/span&gt;

&lt;span class="k"&gt;when&lt;/span&gt; &lt;span class="n"&gt;isMainModule&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
  &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;celsius&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;22&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Base64
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;base64&lt;/code&gt; sirve para convertir a Base64.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="n"&gt;base64&lt;/span&gt;
&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;datos&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Hello World"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;assert&lt;/span&gt; &lt;span class="n"&gt;datos&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s"&gt;"SGVsbG8gV29ybGQ="&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Abrir navegador web
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;browsers&lt;/code&gt; sirve para abrir una direccion web en el navegador web.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="n"&gt;browsers&lt;/span&gt;
&lt;span class="n"&gt;openDefaultBrowser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"https://nim-lang.org"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Busqueda Binaria
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;algorithm&lt;/code&gt; contiene algoritmos comunes, como ser la Busqueda Binaria.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="n"&gt;algorithm&lt;/span&gt;
&lt;span class="n"&gt;assert&lt;/span&gt; &lt;span class="n"&gt;binarySearch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;
&lt;span class="n"&gt;assert&lt;/span&gt; &lt;span class="n"&gt;binarySearch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  JSON
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;json&lt;/code&gt; tiene todo lo necesario para manipular datos JSON.&lt;/p&gt;

&lt;p&gt;JSON se escribe literal en el codigo, &lt;br&gt;
el operador &lt;code&gt;%*&lt;/code&gt; se encarga de "entender" el JSON.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;

&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;datos&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;%*&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="s"&gt;"clave"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"valor"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s"&gt;"otro"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s"&gt;"ultimo"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;2.5&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;assert&lt;/span&gt; &lt;span class="n"&gt;datos&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="n"&gt;JsonNode&lt;/span&gt;
&lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="n"&gt;datos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pretty&lt;/span&gt;

&lt;span class="n"&gt;writeFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/tmp/ejemplo.json"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;datos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pretty&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="n"&gt;parseFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/tmp/ejemplo.json"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Distancia de Levenshtein
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;editdistance&lt;/code&gt; implementa la Distancia de Levenshtein.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;editdistance&lt;/span&gt;
&lt;span class="n"&gt;assert&lt;/span&gt; &lt;span class="n"&gt;editdistance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Gatito"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Patito"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Random
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;random&lt;/code&gt; implementa generador de numeros al azar y utilidades de random.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="n"&gt;random&lt;/span&gt;
&lt;span class="n"&gt;randomize&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;num&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;rand&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;99&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c"&gt;# Numero al azar entre 0 y 99&lt;/span&gt;
&lt;span class="n"&gt;assert&lt;/span&gt; &lt;span class="n"&gt;num&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="p"&gt;..&lt;/span&gt;&lt;span class="mi"&gt;99&lt;/span&gt;

&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;colores&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"rojo"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"verde"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"azul"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;alazar&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sample&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;colores&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;assert&lt;/span&gt; &lt;span class="n"&gt;alazar&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;colores&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  HTTP
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;httpclient&lt;/code&gt; tiene un Cliente HTTP.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="n"&gt;httpclient&lt;/span&gt;
&lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;cliente&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;newHttpClient&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="n"&gt;cliente&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getContent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"http://nim-lang.org"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Tipos
&lt;/h1&gt;

&lt;p&gt;Puedes crear tus propios tipos usando &lt;code&gt;type&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Los nombres de los tipos deben usar siempre la primer letra en mayuscula.&lt;/p&gt;

&lt;p&gt;Este es un tipo vacio sin ningun atributo&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="k"&gt;type&lt;/span&gt; &lt;span class="n"&gt;Nombre&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;object&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este tipo tiene atributos&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="k"&gt;type&lt;/span&gt; &lt;span class="n"&gt;Nombre&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;object&lt;/span&gt;
  &lt;span class="n"&gt;atributo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;  &lt;span class="c"&gt;# Atributo de tipo string&lt;/span&gt;
  &lt;span class="n"&gt;otro&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;         &lt;span class="c"&gt;# Atributo de tipo int&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tambien se puede agrupar tipos en un bloque &lt;code&gt;type&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="k"&gt;type&lt;/span&gt; 
  &lt;span class="n"&gt;TipoVacio&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;object&lt;/span&gt;

  &lt;span class="n"&gt;Nombre&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;object&lt;/span&gt;
    &lt;span class="n"&gt;atributo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;  &lt;span class="c"&gt;# Atributo de tipo string&lt;/span&gt;
    &lt;span class="n"&gt;otro&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;         &lt;span class="c"&gt;# Atributo de tipo int&lt;/span&gt;

  &lt;span class="n"&gt;Otro&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;object&lt;/span&gt;
    &lt;span class="n"&gt;foo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt;         &lt;span class="c"&gt;# Atributo de tipo bool&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Orientacion a Objetos
&lt;/h1&gt;

&lt;p&gt;Un tipo puede heredar de otro tipo usando &lt;code&gt;object of&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Todos los tipos heredan de un tipo raiz,&lt;br&gt;
que es la madre de todos los tipos,&lt;br&gt;
el objeto raiz es &lt;code&gt;RootObj&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;En este ejemplo &lt;code&gt;Gatito&lt;/code&gt; hereda de &lt;code&gt;Animal&lt;/code&gt;,&lt;br&gt;
a su vez &lt;code&gt;Animal&lt;/code&gt; hereda de &lt;code&gt;RootObj&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="k"&gt;type&lt;/span&gt; 
  &lt;span class="n"&gt;Animal&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;ref&lt;/span&gt; &lt;span class="k"&gt;object&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="n"&gt;RootObj&lt;/span&gt;

  &lt;span class="n"&gt;Gatito&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;ref&lt;/span&gt; &lt;span class="k"&gt;object&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="n"&gt;Animal&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Metodos en Objetos
&lt;/h1&gt;

&lt;p&gt;Para tener funcionalidades en los objetos se puede darle funciones,&lt;br&gt;
se le otorgan funcionalidad usando &lt;code&gt;self: Objeto&lt;/code&gt;,&lt;br&gt;
&lt;code&gt;self: Objeto&lt;/code&gt; siempre debe ser el primer argumento.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="k"&gt;type&lt;/span&gt; 
  &lt;span class="n"&gt;Animal&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;ref&lt;/span&gt; &lt;span class="k"&gt;object&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="n"&gt;RootObj&lt;/span&gt;
  &lt;span class="n"&gt;Gatito&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;ref&lt;/span&gt; &lt;span class="k"&gt;object&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="n"&gt;Animal&lt;/span&gt;

&lt;span class="k"&gt;proc &lt;/span&gt;&lt;span class="nf"&gt;miau&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Gatito&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
  &lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="s"&gt;"Miau Miau"&lt;/span&gt;

&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;gato&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Gatito&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;gato&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;miau&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Constructores de Objeto
&lt;/h1&gt;

&lt;p&gt;Para darle valores por defecto a los atributos de algun tipo se puede usar un Constructor,&lt;br&gt;
un constructor es simplemente una funcion que retorna el tipo.&lt;/p&gt;

&lt;p&gt;Por convencion usualmente se nombra al constructor como "new+tipo" o "init+tipo",&lt;br&gt;
es decir para el tipo &lt;code&gt;Gatito&lt;/code&gt; deberia ser&lt;br&gt;
&lt;code&gt;newGatito()&lt;/code&gt; o &lt;code&gt;initGatito()&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="k"&gt;type&lt;/span&gt; 
  &lt;span class="n"&gt;Animal&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;ref&lt;/span&gt; &lt;span class="k"&gt;object&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="n"&gt;RootObj&lt;/span&gt;
  &lt;span class="n"&gt;Gatito&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;ref&lt;/span&gt; &lt;span class="k"&gt;object&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="n"&gt;Animal&lt;/span&gt;
    &lt;span class="n"&gt;edad&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;
    &lt;span class="n"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;

&lt;span class="k"&gt;proc &lt;/span&gt;&lt;span class="nf"&gt;newGatito&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;edad&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="n"&gt;Gatito&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
  &lt;span class="n"&gt;Gatito&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;edad&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;edad&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;proc &lt;/span&gt;&lt;span class="nf"&gt;miau&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Gatito&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
  &lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="s"&gt;"Miau Miau"&lt;/span&gt;

&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;gato&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;newGatito&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;edad&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"Bastet"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;assert&lt;/span&gt; &lt;span class="n"&gt;gato&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;edad&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
&lt;span class="n"&gt;assert&lt;/span&gt; &lt;span class="n"&gt;gato&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;nombre&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s"&gt;"Bastet"&lt;/span&gt;
&lt;span class="n"&gt;gato&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;miau&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Volvamos a darle mas estructura de programa&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="k"&gt;type&lt;/span&gt; 
  &lt;span class="n"&gt;Animal&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;ref&lt;/span&gt; &lt;span class="k"&gt;object&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="n"&gt;RootObj&lt;/span&gt;
  &lt;span class="n"&gt;Gatito&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;ref&lt;/span&gt; &lt;span class="k"&gt;object&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="n"&gt;Animal&lt;/span&gt;
    &lt;span class="n"&gt;edad&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;
    &lt;span class="n"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;

&lt;span class="k"&gt;proc &lt;/span&gt;&lt;span class="nf"&gt;newGatito&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;edad&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="n"&gt;Gatito&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
  &lt;span class="n"&gt;Gatito&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;edad&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;edad&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;proc &lt;/span&gt;&lt;span class="nf"&gt;miau&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Gatito&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
  &lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="s"&gt;"Miau Miau"&lt;/span&gt;

&lt;span class="k"&gt;proc &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;edad&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
  &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;gato&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;newGatito&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;edad&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;edad&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="n"&gt;assert&lt;/span&gt; &lt;span class="n"&gt;gato&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;edad&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
  &lt;span class="n"&gt;assert&lt;/span&gt; &lt;span class="n"&gt;gato&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;nombre&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s"&gt;"Bastet"&lt;/span&gt;
  &lt;span class="n"&gt;gato&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;miau&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="k"&gt;when&lt;/span&gt; &lt;span class="n"&gt;isMainModule&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
  &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;edad&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nombre&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Bastet"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Colecciones
&lt;/h1&gt;

&lt;p&gt;Colecciones sirven para agrupar valores dentro de un mismo contenedor.&lt;/p&gt;

&lt;p&gt;No veremos cada una en detalle por que eso ya es parte de la libreria estandard, &lt;br&gt;
pero aqui esta un resumen rapido de los contenedores:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Indexado&lt;/th&gt;
&lt;th&gt;Indice&lt;/th&gt;
&lt;th&gt;Tipos&lt;/th&gt;
&lt;th&gt;Capacidad&lt;/th&gt;
&lt;th&gt;Longitud&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://nim-lang.github.io/Nim/manual.html#types-array-and-sequence-types" rel="noopener noreferrer"&gt;array&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Si&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Homogeneo&lt;/td&gt;
&lt;td&gt;Estatica&lt;/td&gt;
&lt;td&gt;Estatica&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://nim-lang.github.io/Nim/manual.html#types-set-type" rel="noopener noreferrer"&gt;set&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Valor&lt;/td&gt;
&lt;td&gt;Homogeneo&lt;/td&gt;
&lt;td&gt;Dinamica&lt;/td&gt;
&lt;td&gt;Dinamica&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://nim-lang.github.io/Nim/manual.html#types-array-and-sequence-types" rel="noopener noreferrer"&gt;seq&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Si&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Homogeneo&lt;/td&gt;
&lt;td&gt;Dinamica&lt;/td&gt;
&lt;td&gt;Dinamica&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://nim-lang.github.io/Nim/tables.html" rel="noopener noreferrer"&gt;tabla&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Clave&lt;/td&gt;
&lt;td&gt;Homogeneo&lt;/td&gt;
&lt;td&gt;Dinamica&lt;/td&gt;
&lt;td&gt;Dinamica&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://nim-lang.github.io/Nim/manual.html#types-tuples-and-object-types" rel="noopener noreferrer"&gt;tupla&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Si&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;0&lt;/code&gt;/Clave&lt;/td&gt;
&lt;td&gt;Heterogeneo&lt;/td&gt;
&lt;td&gt;Estatica&lt;/td&gt;
&lt;td&gt;Estatica&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://nim-lang.github.io/Nim/json.html" rel="noopener noreferrer"&gt;JSON&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Clave&lt;/td&gt;
&lt;td&gt;Heterogeneo&lt;/td&gt;
&lt;td&gt;Dinamica&lt;/td&gt;
&lt;td&gt;Dinamica&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://nim-lang.github.io/fusion/src/fusion/btreetables.html" rel="noopener noreferrer"&gt;BTrees&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Clave&lt;/td&gt;
&lt;td&gt;Homogeneo&lt;/td&gt;
&lt;td&gt;Dinamica&lt;/td&gt;
&lt;td&gt;Dinamica&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://nim-lang.github.io/Nim/critbits.html" rel="noopener noreferrer"&gt;CritBits&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Clave&lt;/td&gt;
&lt;td&gt;Homogeneo&lt;/td&gt;
&lt;td&gt;Dinamica&lt;/td&gt;
&lt;td&gt;Dinamica&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Si necesitas una lista usa &lt;code&gt;seq&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Si necesitas un diccionario mapeado usa &lt;code&gt;table&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Si necesitas tipos mezclados usa &lt;code&gt;JSON&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Si necesitas retornar muchos valores de una funcion usa &lt;code&gt;tuple&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Existen mas contenedores pero esos son los mas comunes.&lt;/p&gt;

&lt;p&gt;Existen mas contenedores en paquetes de terceros.&lt;/p&gt;

&lt;p&gt;Un contenedor no es mas que un Tipo,&lt;br&gt;
puedes crear tus propios contenedores personalizados.&lt;/p&gt;

&lt;h1&gt;
  
  
  Frontend
&lt;/h1&gt;

&lt;p&gt;Puede correr el codigo en el navegador web,&lt;br&gt;
hay modulos en la libreria estandard orientados a la web.&lt;/p&gt;

&lt;p&gt;Los modulos que solo funcionan para JavaScript,&lt;br&gt;
su nombre comienza con "js",&lt;br&gt;
por ejemplo &lt;a href="https://nim-lang.github.io/Nim/jsfetch.html" rel="noopener noreferrer"&gt;jsfetch&lt;/a&gt;, &lt;a href="https://nim-lang.github.io/Nim/jsre.html" rel="noopener noreferrer"&gt;jsre&lt;/a&gt;, &lt;a href="https://nim-lang.github.io/Nim/jsbigints.html" rel="noopener noreferrer"&gt;jsbigints&lt;/a&gt;, etc etc.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/juancarlospaco/nodejs" rel="noopener noreferrer"&gt;Tambien puede correr el codigo en NodeJS,&lt;br&gt;
con paquetes de terceros.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;...y en cualquier contexto que tenga un interprete de JavaScript.&lt;/p&gt;

&lt;h1&gt;
  
  
  Documentacion
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://nim-lang.github.io/Nim/lib.html" rel="noopener noreferrer"&gt;Pagina de la libreria estandard.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nim-lang.github.io/Nim/manual.html" rel="noopener noreferrer"&gt;Manual de usuario&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nim-lang.github.io/Nim/theindex.html" rel="noopener noreferrer"&gt;Indice de documentacion de la libreria estandard.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nim-lang.github.io/fusion/theindex.html" rel="noopener noreferrer"&gt;Indice de documentacion de las extensiones de stdlib.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nim-lang/Nim/wiki/Nim-for-Python-Programmers#table-of-contents" rel="noopener noreferrer"&gt;Guia detallada para desarrolladores Python.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nim-lang/Nim/wiki/Nim-for-TypeScript-Programmers#table-of-contents" rel="noopener noreferrer"&gt;Guia detallada para desarrolladores TypeScript.&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Gracias por leer
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://nim-lang.org" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F4huq62a5r8tck64apdtd.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://t.me/NimArgentina" rel="noopener noreferrer"&gt;Chat en Espanol, grupo de usuarios&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://discord.gg/nim" rel="noopener noreferrer"&gt;Chat en Ingles, official.&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👑&lt;/p&gt;

</description>
      <category>nim</category>
      <category>python</category>
      <category>typescript</category>
      <category>spanish</category>
    </item>
    <item>
      <title>Rock, Paper, Scissors on 1 Tweet</title>
      <dc:creator>Juan Carlos</dc:creator>
      <pubDate>Mon, 30 Nov 2020 01:42:15 +0000</pubDate>
      <link>https://dev.to/juancarlospaco/rock-paper-scissors-on-1-tweet-4kfo</link>
      <guid>https://dev.to/juancarlospaco/rock-paper-scissors-on-1-tweet-4kfo</guid>
      <description>&lt;p&gt;This is my "Rock, Paper and Scissors" Game on 1 Tweet.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="n"&gt;random&lt;/span&gt;

&lt;span class="n"&gt;randomize&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="s"&gt;"Rock r&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;Paper p&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;Scissor s"&lt;/span&gt;

&lt;span class="k"&gt;let&lt;/span&gt;
  &lt;span class="n"&gt;o&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"rock"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"paper"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"scissor"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
  &lt;span class="n"&gt;pc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;rand&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;..&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
  &lt;span class="n"&gt;us&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="n"&gt;stdin&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;readLine&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
    &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="sc"&gt;'r'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="sc"&gt;'p'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;   &lt;span class="mi"&gt;2&lt;/span&gt;

&lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;PC&lt;/span&gt;&lt;span class="se"&gt;\t&lt;/span&gt;&lt;span class="s"&gt;You&lt;/span&gt;&lt;span class="se"&gt;\t&lt;/span&gt;&lt;span class="s"&gt;Winner&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;pc&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sc"&gt;'&lt;/span&gt;&lt;span class="se"&gt;\t&lt;/span&gt;&lt;span class="sc"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;us&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sc"&gt;'&lt;/span&gt;&lt;span class="se"&gt;\t&lt;/span&gt;&lt;span class="sc"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;pc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ord&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;us&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ord&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;mod&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;
  &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"PC"&lt;/span&gt;
  &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"You"&lt;/span&gt;
  &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"No"&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;How to run the code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ nim r file.nim

Rock    r
Paper   p
Scissor s

p

PC      You     Winner
paper   paper   No

$
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Keys:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rock =  r 
&lt;/li&gt;
&lt;li&gt;Paper =  p  &lt;/li&gt;
&lt;li&gt;Scissors =  s 
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is not even too code-golfed, because we can remove the line &lt;code&gt;import random&lt;/code&gt; by compiling with &lt;code&gt;--import:random&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;We can remove the &lt;code&gt;randomize()&lt;/code&gt; but then we need to recompile to make the PC choose another option, so is not a good idea.&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1333221690554396672-252" src="https://platform.twitter.com/embed/Tweet.html?id=1333221690554396672"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1333221690554396672-252');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1333221690554396672&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;It uses the &lt;code&gt;random&lt;/code&gt; module from standard library:&lt;br&gt;
&lt;a href="https://nim-lang.github.io/Nim/random.html" rel="noopener noreferrer"&gt;https://nim-lang.github.io/Nim/random.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;case&lt;/code&gt; switch from from standard library:&lt;br&gt;
&lt;a href="https://nim-lang.github.io/Nim/manual.html#statements-and-expressions-case-statement" rel="noopener noreferrer"&gt;https://nim-lang.github.io/Nim/manual.html#statements-and-expressions-case-statement&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;readLine&lt;/code&gt; to read a line from standard input:&lt;br&gt;
&lt;a href="https://nim-lang.github.io/Nim/io.html#readLine%2CFile" rel="noopener noreferrer"&gt;https://nim-lang.github.io/Nim/io.html#readLine%2CFile&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;How your Rock, Paper and Scissors game looks like?&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Thank you for reading
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://nim-lang.org" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F4huq62a5r8tck64apdtd.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://t.me/nim_lang" rel="noopener noreferrer"&gt;Telegram Nim English.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://t.me/NimArgentina" rel="noopener noreferrer"&gt;Telegram Nim en Español.&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Come learn programming with us...&lt;br&gt;
👑&lt;/p&gt;

</description>
      <category>nim</category>
      <category>python</category>
    </item>
    <item>
      <title>Exotic Features of Python3</title>
      <dc:creator>Juan Carlos</dc:creator>
      <pubDate>Fri, 30 Oct 2020 15:35:33 +0000</pubDate>
      <link>https://dev.to/juancarlospaco/exotic-features-of-python3-1492</link>
      <guid>https://dev.to/juancarlospaco/exotic-features-of-python3-1492</guid>
      <description>&lt;h1&gt;
  
  
  Python
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;math&lt;/span&gt; 

&lt;span class="k"&gt;assert&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;

&lt;span class="k"&gt;assert&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="k"&gt;assert&lt;/span&gt; &lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# print(f"""{ "yep\nope" }""")  # ERROR?
&lt;/span&gt;
&lt;span class="k"&gt;assert&lt;/span&gt; &lt;span class="nb"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mf"&gt;0.0&lt;/span&gt;
&lt;span class="k"&gt;assert&lt;/span&gt; &lt;span class="nb"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1.5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mf"&gt;2.0&lt;/span&gt;
&lt;span class="k"&gt;assert&lt;/span&gt; &lt;span class="nb"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;2.5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mf"&gt;2.0&lt;/span&gt;

&lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;53&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="k"&gt;assert&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mf"&gt;1.0&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;

&lt;span class="n"&gt;o&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;99999&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;assert&lt;/span&gt; &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getsizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;824456&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getsizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;824472&lt;/span&gt;
&lt;span class="k"&gt;assert&lt;/span&gt; &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getsizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;24&lt;/span&gt;

&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;assert&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;
&lt;span class="k"&gt;assert&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;

&lt;span class="c1"&gt;#anon = lambda x:          ERROR?   
#           if x &amp;gt; 0:
#               return 1
#           else: 
#               return 0
&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Nim
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="n"&gt;math&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;strformat&lt;/span&gt;

&lt;span class="n"&gt;assert&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;compiles&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kp"&gt;false&lt;/span&gt; &lt;span class="p"&gt;^&lt;/span&gt; &lt;span class="kp"&gt;false&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;assert&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kp"&gt;false&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="kp"&gt;false&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="kp"&gt;false&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;assert&lt;/span&gt; &lt;span class="k"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;^&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="k"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;^&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="s"&gt;fmt"&lt;/span&gt;&lt;span class="se"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"{ "&lt;/span&gt;&lt;span class="n"&gt;yep&lt;/span&gt;&lt;span class="o"&gt;\&lt;/span&gt;&lt;span class="s"&gt;nope" }&lt;/span&gt;&lt;span class="se"&gt;"&lt;/span&gt;&lt;span class="s"&gt;""&lt;/span&gt;

&lt;span class="n"&gt;assert&lt;/span&gt; &lt;span class="n"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mf"&gt;1.0&lt;/span&gt;
&lt;span class="n"&gt;assert&lt;/span&gt; &lt;span class="n"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1.5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mf"&gt;2.0&lt;/span&gt;
&lt;span class="n"&gt;assert&lt;/span&gt; &lt;span class="n"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;2.5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mf"&gt;3.0&lt;/span&gt;

&lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="ow"&gt;shl&lt;/span&gt; &lt;span class="mi"&gt;53&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="n"&gt;assert&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;compiles&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mf"&gt;1.0&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;seq&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="kt"&gt;bool&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="p"&gt;..&lt;/span&gt;&lt;span class="mi"&gt;99999&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add&lt;/span&gt; &lt;span class="kp"&gt;false&lt;/span&gt;
&lt;span class="n"&gt;assert&lt;/span&gt; &lt;span class="n"&gt;sizeOf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;
&lt;span class="n"&gt;assert&lt;/span&gt; &lt;span class="n"&gt;sizeOf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kp"&gt;false&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;

&lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;seq&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;assert&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;compiles&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;assert&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;compiles&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="p"&gt;^&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;][&lt;/span&gt;&lt;span class="p"&gt;^&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;][&lt;/span&gt;&lt;span class="p"&gt;^&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;][&lt;/span&gt;&lt;span class="p"&gt;^&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;][&lt;/span&gt;&lt;span class="p"&gt;^&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;][&lt;/span&gt;&lt;span class="p"&gt;^&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;][&lt;/span&gt;&lt;span class="p"&gt;^&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;][&lt;/span&gt;&lt;span class="p"&gt;^&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;anon&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
             &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
               &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
             &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; 
               &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
           &lt;span class="p"&gt;)&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FDhYegpq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/6s40ohwgnt5zou9lq5n0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FDhYegpq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/6s40ohwgnt5zou9lq5n0.png" alt="Alt Text" width="512" height="430"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Some occasional weird &lt;em&gt;"exotic features"&lt;/em&gt; found in the wild.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://play.nim-lang.org/#ix=2Cuu"&gt;Play with the Nim code.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://tio.run/##fVHLbsIwELz7K7bhEtMSJQH6iEh7aq@VuNIcXOFAJLAtx0h2q357uk4gUFRY2dJ6Zzyzaytn1lKMm6baKqkN1K6@gy0za0JYXXOsvLFNzWE43Cd5DskZhqUuqQQs2qzoGcYpHib@ekLhJj85jxJKyACUroQJyyAIviFwXH0IqXgAP1igAAN4nc/f5y@9npY7sQzjaEq9bRzFf4FkD6TnQHoCEAc5YBOzGUzHFG5xoD3X@UMUwwwcIRJZi4KUUkPlR9NMrHj45INmICOmFEfldmB6UMD3i1bc1NUXl2UoW8/HdDKZ3gPqXEIf0v/vd9pt3xNCbNeQPTjb3tUu4uL68hr2SB8lxbXdscmACSnQdMO2n0sGNoM@um/BBL/wGFUJFp4hzv5UfWhudlrgS58CHKfL4BI3bppf"&gt;Play with the Python code.&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Code here is reduced to the minimal that still reproduces the bug,&lt;br&gt;
but sometimes finding it on big code bases is not easy.&lt;/p&gt;

&lt;p&gt;The examples use Python &lt;code&gt;3.8&lt;/code&gt; and &lt;a href="http://nim-lang.org"&gt;Nim&lt;/a&gt; &lt;code&gt;1.4&lt;/code&gt;,&lt;br&gt;
because I was migrating source code from Python to &lt;a href="http://nim-lang.org"&gt;Nim&lt;/a&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  For Python
&lt;/h1&gt;

&lt;p&gt;&lt;a href="http://nim-lang.org"&gt;Nim&lt;/a&gt; &lt;a href="https://github.com/juancarlospaco/faster-than-requests#use"&gt;can be used to do Python&lt;/a&gt;, is an alternative to Cython,&lt;br&gt;
but with &lt;a href="https://github.com/Yardanico/nimpylib#usage"&gt;more Pythonic syntax&lt;/a&gt;, and more features.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Pebaz/nimporter#possible-benefits"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--G-y-n-yL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/3i6nb9my6swplbyr2h08.png" alt="Alt Text" width="512" height="512"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Nim builtin features:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Write easy as Python, runs fast as Rust.&lt;/li&gt;
&lt;li&gt;Runs on Backend and Frontend.&lt;/li&gt;
&lt;li&gt;No GIL, no virtual machine.&lt;/li&gt;
&lt;li&gt;Automatic deterministic memory management with No Garbage Collector.&lt;/li&gt;
&lt;li&gt;Strong inferred static typing, no hints required.&lt;/li&gt;
&lt;li&gt;Complete online HTML documentation with search.&lt;/li&gt;
&lt;li&gt;No Dependencies, no need to setup virtual environment.&lt;/li&gt;
&lt;li&gt;Side-effects free functions.&lt;/li&gt;
&lt;li&gt;Multi-line multi-expression fast anonymous functions.&lt;/li&gt;
&lt;li&gt;Arrow functions.&lt;/li&gt;
&lt;li&gt;Immutability.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://en.wikipedia.org/wiki/Uniform_Function_Call_Syntax#Nim_programming_language"&gt;UFCS&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nim-lang.github.io/Nim/docgen.html"&gt;Documentation generator with Markdown/RST doc comments.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nim-lang.github.io/Nim/testament.html"&gt;Unittests runner, inline runnable example unittests.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Package manager.&lt;/li&gt;
&lt;li&gt;Code style formatter.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nim-lang.github.io/Nim/niminst.html"&gt;App installer generator.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;"import" C/C++/JavaScript libraries.&lt;/li&gt;
&lt;li&gt;Runs on Arduino and Raspberry Pi.&lt;/li&gt;
&lt;li&gt;Proof engine with preconditions and postconditions (Ada like).&lt;/li&gt;
&lt;li&gt;Tiny native binaries, fast compilation.&lt;/li&gt;
&lt;li&gt;Easy to learn for Python/Ruby/D/Go developers.&lt;/li&gt;
&lt;li&gt;Not too verbose, similar to Python on verbosity.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Learn more
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/nim-lang/Nim/wiki/Nim-for-Python-Programmers#table-of-contents"&gt;&lt;strong&gt;Nim for Python Developers.&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Thank you for reading
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://nim-lang.org"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3aSXW6gE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/4huq62a5r8tck64apdtd.png" alt="" width="512" height="490"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There's bridged &lt;a href="https://gitter.im/nim-lang/Nim"&gt;Gitter&lt;/a&gt;, &lt;a href="https://matrix.to/#/#freenode_#nim:matrix.org"&gt;Matrix&lt;/a&gt;, &lt;a href="https://t.me/nim_lang"&gt;Telegram&lt;/a&gt;, &lt;a href="//irc://freenode.net/nim"&gt;IRC&lt;/a&gt;, &lt;a href="https://discord.gg/ezDFDw2"&gt;Discord&lt;/a&gt; for &lt;a href="https://nim-lang.org"&gt;Nim&lt;/a&gt;, come say &lt;em&gt;Hello&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://t.me/NimArgentina"&gt;Telegram en Español.&lt;/a&gt;&lt;br&gt;
👑&lt;/p&gt;

</description>
      <category>python</category>
      <category>nim</category>
    </item>
    <item>
      <title>Figma to WebAssembly WebGL, a click away today</title>
      <dc:creator>Juan Carlos</dc:creator>
      <pubDate>Sun, 21 Jun 2020 20:26:00 +0000</pubDate>
      <link>https://dev.to/juancarlospaco/figma-to-webassembly-webgl-a-click-away-today-1loo</link>
      <guid>https://dev.to/juancarlospaco/figma-to-webassembly-webgl-a-click-away-today-1loo</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HLjXdmib--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ostcanziweh68jvensgv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HLjXdmib--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ostcanziweh68jvensgv.png" alt="Alt Text" width="880" height="392"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZcTfU_ZG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/deidtmbgi7sisyzkjixd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZcTfU_ZG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/deidtmbgi7sisyzkjixd.png" alt="Alt Text" width="880" height="393"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FGfksiHJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ortjqa3bjnq6ojrf6kv5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FGfksiHJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ortjqa3bjnq6ojrf6kv5.png" alt="Alt Text" width="880" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--H-dczFGB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/8hj3z5ufn8l1edc4pmdg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--H-dczFGB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/8hj3z5ufn8l1edc4pmdg.png" alt="Alt Text" width="880" height="394"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Fidget
&lt;/h1&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/IB8Yt2dqZbo"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h1&gt;
  
  
  Figma Plugin
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MEGu_7wU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/3pn7r86s1vtcdptlvnju.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MEGu_7wU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/3pn7r86s1vtcdptlvnju.png" alt="Alt Text" width="880" height="722"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Fidget plugin is Published, it should appear on the Plugins list soon, is waiting for final approval.&lt;/p&gt;

&lt;h1&gt;
  
  
  Get started today
&lt;/h1&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--566lAguM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/treeform"&gt;
        treeform
      &lt;/a&gt; / &lt;a href="https://github.com/treeform/fidget"&gt;
        fidget
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Figma based UI library for nim, with HTML and OpenGL backends.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/treeform/fidgetdocs/banner.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Mf-np-Ft--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://github.com/treeform/fidgetdocs/banner.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;👏 👏 👏 Check out video about the library: &lt;a href="https://www.youtube.com/watch?v=IB8Yt2dqZbo" rel="nofollow"&gt;Fidget: Let's rethink UI development with Nim (NimConf 2020)&lt;/a&gt; 👏 👏 👏&lt;/p&gt;
&lt;p&gt;⚠️ WARNING: This library is still in heavy development. ⚠️&lt;/p&gt;
&lt;h1&gt;
Fidget - A cross platform UI library for nim&lt;/h1&gt;
&lt;p&gt;&lt;code&gt;nimble install fidget&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/treeform/fidget/workflows/Github%20Actions/badge.svg"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5HESwC1M--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://github.com/treeform/fidget/workflows/Github%2520Actions/badge.svg" alt="Github Actions"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://nimdocs.com/treeform/fidget" rel="nofollow"&gt;API reference&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
About&lt;/h2&gt;
&lt;p&gt;Fidget aims to provide performant natively compiled cross platform UIs for any platform - Web with HTML5, Windows, macOS, Linux, iOS and Android with OpenGL.&lt;/p&gt;
&lt;p&gt;Fidget leverages &lt;a href="https://www.figma.com/" rel="nofollow"&gt;Figma&lt;/a&gt; - an app that is taking the design world by storm. It does this by providing a &lt;a href="https://github.com/treeform/fidgetfigma_plugin/code.ts"&gt;Figma Plugin&lt;/a&gt; to export directly to fidget code! No more counting stupid pixels, no more CSS puzzles. Want to change some spaces? Change it in Figma and export.&lt;/p&gt;
&lt;p&gt;Fidget uses plain nim-procs, nim-templates, if-statements and for-loops. As well as providing only minimal primitives found in &lt;a href="https://www.figma.com/" rel="nofollow"&gt;Figma&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;
Example:&lt;/h2&gt;
&lt;p&gt;
  &lt;br&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/treeform/fidgetdocs/uiExampleIce.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bTdb1tzl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://github.com/treeform/fidgetdocs/uiExampleIce.png"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
  &lt;a href="http://kate.vonhouck.com/" rel="nofollow"&gt;Design done by Kate von Houck. Available for hire.&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;See code…&lt;/p&gt;
&lt;/div&gt;


&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/treeform/fidget"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;h1&gt;
  
  
  Hello World
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Hello World on the Browser:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="n"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Hello World"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Hello World on the Backend:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="s"&gt;"Hello World"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Thank you for playing
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://nim-lang.org"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3aSXW6gE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/4huq62a5r8tck64apdtd.png" alt="" width="512" height="490"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/nim-lang/Nim/wiki/Nim-for-Python-Programmers#table-of-contents"&gt;For Python Developers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nim-lang/Nim/wiki/Nim-for-TypeScript-Programmers#table-of-contents"&gt;For TypeScript Developers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nim-lang.org/documentation.html"&gt;Documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There's bridged &lt;a href="https://gitter.im/nim-lang/Nim"&gt;Gitter&lt;/a&gt;, &lt;a href="https://matrix.to/#/#freenode_#nim:matrix.org"&gt;Matrix&lt;/a&gt;, &lt;a href="https://t.me/nim_lang"&gt;Telegram&lt;/a&gt;, &lt;a href="//irc://freenode.net/nim"&gt;IRC&lt;/a&gt;, &lt;a href="https://discord.gg/ezDFDw2"&gt;Discord&lt;/a&gt; for &lt;a href="https://nim-lang.org"&gt;Nim&lt;/a&gt;, come say &lt;em&gt;Hi&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://t.me/NimArgentina"&gt;Telegram en Español.&lt;/a&gt; &lt;a href="https://discord.gg/rNFg9pS"&gt;Discord en Español.&lt;/a&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>nim</category>
      <category>javascript</category>
      <category>webassembly</category>
    </item>
    <item>
      <title>PLZ a new PIP</title>
      <dc:creator>Juan Carlos</dc:creator>
      <pubDate>Fri, 27 Mar 2020 20:56:25 +0000</pubDate>
      <link>https://dev.to/juancarlospaco/plz-a-new-pip-1fj5</link>
      <guid>https://dev.to/juancarlospaco/plz-a-new-pip-1fj5</guid>
      <description>&lt;p&gt;&lt;strong&gt;PLZ is a PIP Alternative designed for Dockers, Alpines, Vagrants, and containers.&lt;/strong&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Features
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;1&lt;/code&gt; Megabyte, &lt;code&gt;1&lt;/code&gt; file, &lt;code&gt;0&lt;/code&gt; Dependencies, ~&lt;code&gt;500&lt;/code&gt; Lines of code.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Documentation Generator with Markdown to HTML &amp;amp; PDF&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No Garbage Collector&lt;/strong&gt; (Rust-like memory management).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Single file&lt;/strong&gt;, it can even delete itself after use.&lt;/li&gt;
&lt;li&gt;Install, uninstall, reinstall, download, upload to PyPI, etc.&lt;/li&gt;
&lt;li&gt;Checks GPG if package has it, checks SHA sum for all packages.&lt;/li&gt;
&lt;li&gt;Designed for Docker or Alpine usage.&lt;/li&gt;
&lt;li&gt;Inferred Strong Static Typing with Z3 Theorem Prover.&lt;/li&gt;
&lt;li&gt;Immutable programming, No Global Mutable State.&lt;/li&gt;
&lt;li&gt;The only PIP alternative in the world that just works even with Python/Virtualenv completely broken. Can fix a broken PIP.&lt;/li&gt;
&lt;li&gt;Machine code performance, as fast as optimized C.&lt;/li&gt;
&lt;li&gt;High performance with low resources (RPi, VPS, cloud, old pc, etc).&lt;/li&gt;
&lt;li&gt;No Installs, no setups, just copy &amp;amp; paste and run.&lt;/li&gt;
&lt;li&gt;Colored output on the Terminal.&lt;/li&gt;
&lt;li&gt;Project skeleton creator to create your own new Python projects.&lt;/li&gt;
&lt;li&gt;Wont save any passwords, databases, keys, secrets, to disk nor Internet.&lt;/li&gt;
&lt;li&gt;No temporary folders nor files.&lt;/li&gt;
&lt;li&gt;Not meant as a drop-in replacement for anything pre-existing.&lt;/li&gt;
&lt;li&gt;Tiny single file source code (not counting string constants).&lt;/li&gt;
&lt;li&gt;Works fully isolated, self-contained standalone application.&lt;/li&gt;
&lt;li&gt;It does NOT depend on &lt;code&gt;pip&lt;/code&gt; (Not a &lt;code&gt;pip&lt;/code&gt; wrapper).&lt;/li&gt;
&lt;li&gt;GitHub Actions CI Builds every commit from zero.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GnTvN1W1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/6si9egj2y8ohnw99crwk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GnTvN1W1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/6si9egj2y8ohnw99crwk.png" alt="Alt Text" width="512" height="512"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Use
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;plz &lt;span class="nb"&gt;install &lt;/span&gt;pre-commit   &lt;span class="c"&gt;# Install 1 or more packages&lt;/span&gt;
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;plz uninstall pre-commit &lt;span class="c"&gt;# Uninstall 1 or more packages&lt;/span&gt;
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;plz reinstall pre-commit &lt;span class="c"&gt;# Reinstall 1 or more packages&lt;/span&gt;
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;plz download pre-commit  &lt;span class="c"&gt;# Download 1 or more packages&lt;/span&gt;
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;plz &lt;span class="nb"&gt;hash &lt;/span&gt;file.py         &lt;span class="c"&gt;# Show SHA CheckSum of file/package&lt;/span&gt;
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;plz open file.py         &lt;span class="c"&gt;# Open a module in your default code editor&lt;/span&gt;
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;plz backup /folder/      &lt;span class="c"&gt;# Compressed backup of file/package with SHA Checksum&lt;/span&gt;
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;plz init                 &lt;span class="c"&gt;# New Python project template (Interactive)&lt;/span&gt;
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;plz stats                &lt;span class="c"&gt;# PyPI official service status report&lt;/span&gt;
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;plz newpackages          &lt;span class="c"&gt;# List all the new Packages uploaded to PyPI recently&lt;/span&gt;
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;plz lastupdates          &lt;span class="c"&gt;# List all existing Packages updated on PyPI recently&lt;/span&gt;
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;plz lastjobs             &lt;span class="c"&gt;# List all new Job Posts updated on Python recently&lt;/span&gt;
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;plz userpackages         &lt;span class="c"&gt;# List all existing Packages by User (Interactive)&lt;/span&gt;
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;plz latestversion        &lt;span class="c"&gt;# Show the Latest Version of a PYPI Package (SemVer)&lt;/span&gt;
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;plz forceInstallPip      &lt;span class="c"&gt;# Force install PIP on arbitrary folder (get-pip.py)&lt;/span&gt;
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;plz doc file.md          &lt;span class="c"&gt;# Markdown/ReSTructuredText to HTML  (MD/RST can be mixed).&lt;/span&gt;
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;plz doc2latex file.md    &lt;span class="c"&gt;# Markdown/ReSTructuredText to Latex (MD/RST can be mixed).&lt;/span&gt;
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;plz doc2json file.md     &lt;span class="c"&gt;# Markdown/ReSTructuredText to JSON  (MD/RST can be mixed).&lt;/span&gt;
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;plz upload packg-1.0.zip &lt;span class="c"&gt;# Similar to "twine upload" (Interactive,asks user,wont need Twine).&lt;/span&gt;
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;plz &lt;span class="nt"&gt;--enUsUtf8&lt;/span&gt;           &lt;span class="c"&gt;# Force Encoding to UTF-8 and Language to English&lt;/span&gt;
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;plz &lt;span class="nt"&gt;--cleanpyc&lt;/span&gt;           &lt;span class="c"&gt;# Clean all __pycache__ and *.pyc&lt;/span&gt;
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;plz &lt;span class="nt"&gt;--cleanpypackages&lt;/span&gt;    &lt;span class="c"&gt;# Clean all __pypackages__&lt;/span&gt;
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;plz &lt;span class="nt"&gt;--cleantemp&lt;/span&gt;          &lt;span class="c"&gt;# Clean all temporary folder.&lt;/span&gt;
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;plz &lt;span class="nt"&gt;--cleanpipcache&lt;/span&gt;      &lt;span class="c"&gt;# Clean all PIP Cache folder.&lt;/span&gt;
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;plz &lt;span class="nt"&gt;--cleanvenvs&lt;/span&gt;         &lt;span class="c"&gt;# Clean Virtualenvs (interactive, asks Y/N 1-by-1).&lt;/span&gt;
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;plz &lt;span class="nt"&gt;--publicip&lt;/span&gt;           &lt;span class="c"&gt;# Show your Public IP Address (Internet connectivity check).&lt;/span&gt;
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;plz &lt;span class="nt"&gt;--log&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;file.log       &lt;span class="c"&gt;# Full path to a verbose local log file.&lt;/span&gt;
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;plz &lt;span class="nt"&gt;--backuplogs&lt;/span&gt;         &lt;span class="c"&gt;# Compress old PLZ Logs at exit, to save disk resources.&lt;/span&gt;
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;plz &lt;span class="nt"&gt;--putenv&lt;/span&gt;:key&lt;span class="o"&gt;=&lt;/span&gt;val     &lt;span class="c"&gt;# Set an environment variable "KEY=Value", can be repeated.&lt;/span&gt;
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;plz &lt;span class="nt"&gt;--nice20&lt;/span&gt;             &lt;span class="c"&gt;# Runs with "nice = 20" (CPU Priority, smooth priority).&lt;/span&gt;
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;plz &lt;span class="nt"&gt;--suicide&lt;/span&gt;            &lt;span class="c"&gt;# Deletes itself permanently and exit (single file app).&lt;/span&gt;
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;plz &lt;span class="nt"&gt;--dump&lt;/span&gt;               &lt;span class="c"&gt;# Show system info JSON and quit (for Developers and Bug Reporting).&lt;/span&gt;
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;plz &lt;span class="nt"&gt;--version&lt;/span&gt;            &lt;span class="c"&gt;# Show Version&lt;/span&gt;
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;plz &lt;span class="nt"&gt;--help&lt;/span&gt;               &lt;span class="c"&gt;# Show Help&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_9ZdtKNg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/juancarlospaco/plz/master/python-wat.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_9ZdtKNg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/juancarlospaco/plz/master/python-wat.png" width="512" height="512"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Example
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;plz &lt;span class="nb"&gt;install &lt;/span&gt;bottle
&lt;span class="go"&gt;
2020-03-27T17:04:52-03:00, PID is 419469, 1 packages to download and install ["bottle"]
Generate Install Script? (y/N): n

bottle  0.12.18
https://files.pythonhosted.org/packages/d9/4f/57887a07944140dae0d039d8bc270c249fc7fc4a00744effd73ae2cde0a9/bottle-0.12.18.tar.gz
71557 Bytes total (compressed)
SHA256 (bottle-0.12.18.tar.gz) = 0819b74b145a7def225c0e83b16a4d5711fde751cd92bae467a69efce720f69e
https://files.pythonhosted.org/packages/d9/4f/57887a07944140dae0d039d8bc270c249fc7fc4a00744effd73ae2cde0a9/bottle-0.12.18.tar.gz.asc 
HTTP-404? (Package without PGP Signature)

x bottle-0.12.18/bottle.egg-info/PKG-INFO
x bottle-0.12.18/bottle.egg-info/SOURCES.txt
x bottle-0.12.18/bottle.egg-info/dependency_links.txt
x bottle-0.12.18/bottle.egg-info/top_level.txt
x bottle-0.12.18/MANIFEST.in
x bottle-0.12.18/README.rst
x bottle-0.12.18/bottle.py
x bottle-0.12.18/setup.py
x bottle-0.12.18/PKG-INFO
x bottle-0.12.18/setup.cfg

2020-03-27T17:04:55-03:00 0 Failed, 1 Success on 1 second, 887 milliseconds, 565 microseconds, and 957 nanoseconds to download+install 1 packages

&lt;/span&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;plz init
&lt;span class="go"&gt;
New Python project name?: example
Generate optional Unitests on ./tests (y/N): y
Generate optional Documentation on ./docs (y/N): y
Generate optional Examples on ./examples (y/N): y
Generate optional DevOps on ./devops (y/N): y
Generate optional GitHub files on .github (y/N): y
Generate .gitignore file (y/N): y
Generate optional files (y/N): y
Use Markdown(MD) instead of ReSTructuredText(RST)  (y/N): y

Created a new Python project skeleton, happy hacking, bye...

&lt;/span&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ls &lt;/span&gt;example/
&lt;span class="go"&gt;AUTHORS.md  CHANGELOG.md  CODE_OF_CONDUCT.md  CONTRIBUTING.md  devops  docs examples
LICENSE.md  Makefile  MANIFEST.in  README.md  requirements.txt  setup.cfg  setup.py  tests

&lt;/span&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Hello **World**"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; example.md
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;plz doc example.md 
&lt;span class="gp"&gt;Hello &amp;lt;strong&amp;gt;&lt;/span&gt;World&amp;lt;/strong&amp;gt;
&lt;span class="go"&gt;
&lt;/span&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;cat &lt;/span&gt;example.html
&lt;span class="gp"&gt;Hello &amp;lt;strong&amp;gt;&lt;/span&gt;World&amp;lt;/strong&amp;gt;
&lt;span class="go"&gt;
&lt;/span&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;plz doc2latex example.md
&lt;span class="go"&gt;Hello \textbf{World}

&lt;/span&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;cat &lt;/span&gt;example.tex
&lt;span class="go"&gt;Hello \textbf{World}

&lt;/span&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;plz &lt;span class="nt"&gt;--dump&lt;/span&gt;
&lt;span class="go"&gt;{
  "hostCPU": "amd64",
  "hostOS": "linux",
  "cpuEndian": "littleEndian",
  "getTempDir": "/tmp/",
  "now": "2020-03-27T17:40:00-03:00",
  "getFreeMem": 151552,
  "getTotalMem": 528384,
  "getOccupiedMem": 267376,
  "countProcessors": 8,
  "arch": "x86_64",
  "ssd": true,
  "FileSystemCaseSensitive": true,
  "git": "2.25.1",
  "node": "v13.9.0",
  "python": "3.8.1"
}

&lt;/span&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;plz &lt;span class="nt"&gt;--suicide&lt;/span&gt;  &lt;span class="c"&gt;# Good bye world :(&lt;/span&gt;
&lt;span class="go"&gt;true

&lt;/span&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;plz
&lt;span class="go"&gt;Command not found: plz
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--J4AMO00r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://raw.githubusercontent.com/juancarlospaco/plz/master/pepehack.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--J4AMO00r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://raw.githubusercontent.com/juancarlospaco/plz/master/pepehack.gif" alt="" title="Work in progress!" width="56" height="56"&gt;&lt;/a&gt; Output, messages and other stuff may change in the future.&lt;/p&gt;

&lt;h1&gt;
  
  
  Star PLZ on GitHub
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vjNgsYYr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://starchart.cc/juancarlospaco/plz.svg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vjNgsYYr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://starchart.cc/juancarlospaco/plz.svg" alt="Stars over time" title="Star PLZ on GitHub!" width="880" height="344"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;We re-implemented PIP on ~500 lines of code, it deserves a Star ?.&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;h2&gt;&lt;a href="https://github.com/juancarlospaco/plz"&gt;https://github.com/juancarlospaco/plz&lt;/a&gt;&lt;/h2&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👑&lt;/p&gt;

</description>
      <category>python</category>
      <category>nim</category>
    </item>
    <item>
      <title>Discord Bot on 1 Tweet</title>
      <dc:creator>Juan Carlos</dc:creator>
      <pubDate>Wed, 29 Jan 2020 14:35:49 +0000</pubDate>
      <link>https://dev.to/juancarlospaco/discord-bot-on-1-tweet-1k32</link>
      <guid>https://dev.to/juancarlospaco/discord-bot-on-1-tweet-1k32</guid>
      <description>&lt;blockquote class="ltag__twitter-tweet"&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--qOyS5p3k--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/947841211548753926/4v-cCJv2_normal.jpg" alt="Juan_Carlos profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Juan_Carlos
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        &lt;a class="mentioned-user" href="https://dev.to/juancarlospaco"&gt;@juancarlospaco&lt;/a&gt;
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ir1kO05j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      import asyncdispatch,discordnim&lt;br&gt;let bot=newShard"Bot KEY"&lt;br&gt;proc f(b:Shard,m:MessageCreate)=&lt;br&gt; discard b.channelMessageSend(&lt;a href="https://t.co/SvzWCHxr4Q"&gt;m.channel&lt;/a&gt;_id,m.content)&lt;br&gt;discard bot.addHandler(EventType.message_create,f)&lt;br&gt;waitFor bot.startSession()&lt;br&gt;&lt;br&gt;# &lt;a href="https://twitter.com/discordapp"&gt;@discordapp&lt;/a&gt; Async Bot,1Tweet &lt;a href="https://twitter.com/nim_lang"&gt;@nim_lang&lt;/a&gt;👑
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      13:27 PM - 29 Jan 2020
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1222511481872404480" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fFnoeFxk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-reply-action-238fe0a37991706a6880ed13941c3efd6b371e4aefe288fe8e0db85250708bc4.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1222511481872404480" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--k6dcrOn8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-retweet-action-632c83532a4e7de573c5c08dbb090ee18b348b13e2793175fea914827bc42046.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/like?tweet_id=1222511481872404480" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SRQc9lOp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-like-action-1ea89f4b87c7d37465b0eb78d51fcb7fe6c03a089805d7ea014ba71365be5171.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;
&lt;br&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="n"&gt;asyncdispatch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;discordnim&lt;/span&gt;

&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;bot&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;newShard&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Bot KEY"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c"&gt;# KEY is a valid Discord "Token" Key&lt;/span&gt;

&lt;span class="k"&gt;proc &lt;/span&gt;&lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Shard&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;MessageCreate&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;  &lt;span class="c"&gt;# Async Event Handler &lt;/span&gt;
  &lt;span class="k"&gt;discard&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;channelMessageSend&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;channel_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;discard&lt;/span&gt; &lt;span class="n"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;addHandler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;EventType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;message_create&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c"&gt;# Hook Handler&lt;/span&gt;

&lt;span class="n"&gt;waitFor&lt;/span&gt; &lt;span class="n"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;startSession&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;  &lt;span class="c"&gt;# Run Bot&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;Ideally you need to add &lt;code&gt;asyncCheck&lt;/code&gt; instead of &lt;code&gt;discard&lt;/code&gt;, and a &lt;code&gt;disconnect()&lt;/code&gt; at exit for the bot, but basically is a working async chat bot!.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="n"&gt;asyncdispatch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;discordnim&lt;/span&gt;

&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;bot&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;newShard&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Bot "&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;getEnv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"DISCORD_TOKEN"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;  &lt;span class="c"&gt;# DISCORD_TOKEN is a valid Discord "Token" Key&lt;/span&gt;

&lt;span class="k"&gt;proc &lt;/span&gt;&lt;span class="nf"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Shard&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;mesage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;MessageCreate&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;  
  &lt;span class="sd"&gt;## Async Event Handler &lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;mesage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;author&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;me&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="c"&gt;# Bot wont reply itself&lt;/span&gt;
    &lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="n"&gt;mesage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="n"&gt;mesage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt; &lt;span class="c"&gt;# case switch on message content&lt;/span&gt;
    &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="s"&gt;"!help"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;         &lt;span class="c"&gt;# message content is "!help"&lt;/span&gt;
      &lt;span class="n"&gt;asyncCheck&lt;/span&gt; &lt;span class="n"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;channelMessageSend&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mesage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;channel_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Some help"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="s"&gt;"!ping"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;         &lt;span class="c"&gt;# message content is "!ping"&lt;/span&gt;
      &lt;span class="n"&gt;asyncCheck&lt;/span&gt; &lt;span class="n"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;channelMessageSend&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mesage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;channel_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"pong"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;               &lt;span class="c"&gt;# message content is something else                 &lt;/span&gt;
      &lt;span class="n"&gt;asyncCheck&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;channelMessageSend&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mesage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;channel_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;mesage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="k"&gt;discard&lt;/span&gt; &lt;span class="n"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;addHandler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;EventType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;message_create&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c"&gt;# Hook Handler&lt;/span&gt;


&lt;span class="k"&gt;when&lt;/span&gt; &lt;span class="n"&gt;isMainModule&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
  &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="s"&gt;"Starting Discord Bot"&lt;/span&gt;
    &lt;span class="n"&gt;waitFor&lt;/span&gt; &lt;span class="n"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;startSession&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="c"&gt;# Run Bot&lt;/span&gt;
  &lt;span class="k"&gt;finally&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="s"&gt;"Stopping Discord Bot"&lt;/span&gt;
    &lt;span class="n"&gt;waitFor&lt;/span&gt; &lt;span class="n"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;disconnect&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;   &lt;span class="c"&gt;# Stop Bot&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h1&gt;
  
  
  Discordnim
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;The objects and API are on the &lt;code&gt;discordnim&lt;/code&gt; lib.&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--566lAguM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Krognol"&gt;
        Krognol
      &lt;/a&gt; / &lt;a href="https://github.com/Krognol/discordnim"&gt;
        discordnim
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Discord library for nim
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1&gt;
Discordnim&lt;/h1&gt;
&lt;p&gt;A Discord library for Nim.&lt;/p&gt;
&lt;p&gt;Websockets from &lt;a href="https://github.com/niv/websocket.nim"&gt;niv/websocket.nim&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
Installing&lt;/h1&gt;
&lt;p&gt;This assumes that you have your Nim environment (including &lt;a href="https://github.com/nim-lang/nimble"&gt;Nimble&lt;/a&gt;) already set up, and that your Nim version is &lt;code&gt;1.0.4&lt;/code&gt; or greater
You can check your version with &lt;code&gt;nim --version&lt;/code&gt;&lt;/p&gt;
&lt;div class="snippet-clipboard-content position-relative overflow-auto"&gt;&lt;pre&gt;&lt;code&gt;nim -v
Nim Compiler Version 1.1.1 [Linux: amd64]
Compiled at 2020-01-08
Copyright (c) 2006-2019 by Andreas Rumpf
active boot switches: -d:release
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;nimble install discordnim&lt;/code&gt;&lt;/p&gt;
&lt;h1&gt;
Usage&lt;/h1&gt;
&lt;p&gt;There are some examples in the &lt;code&gt;examples&lt;/code&gt; folder.&lt;/p&gt;
&lt;p&gt;Initialising a &lt;code&gt;Shard&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight highlight-source-nim position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-k"&gt;when&lt;/span&gt; isMainModule
    &lt;span class="pl-k"&gt;import&lt;/span&gt; asyncdispatch, discordnim, ospaths

    &lt;span class="pl-k"&gt;proc&lt;/span&gt; &lt;span class="pl-en"&gt;messageCreate&lt;/span&gt;(s: &lt;span class="pl-c1"&gt;Shard&lt;/span&gt;, m: &lt;span class="pl-c1"&gt;MessageCreate&lt;/span&gt;) &lt;span class="pl-k"&gt;=&lt;/span&gt;
        &lt;span class="pl-k"&gt;if&lt;/span&gt; s.cache.me.id == m.author.id: &lt;span class="pl-k"&gt;return&lt;/span&gt;
        &lt;span class="pl-k"&gt;if&lt;/span&gt; m.content == &lt;span class="pl-s"&gt;"ping"&lt;/span&gt;&lt;span class="pl-k"&gt;:&lt;/span&gt;
            &lt;span class="pl-c1"&gt;asyncCheck&lt;/span&gt; s.&lt;span class="pl-c1"&gt;channelMessageSend&lt;/span&gt;(m.channel_id, &lt;span class="pl-s"&gt;"pong"&lt;/span&gt;)

    &lt;span class="pl-k"&gt;let&lt;/span&gt; d = &lt;span class="pl-c1"&gt;newShard&lt;/span&gt;(&lt;span class="pl-s"&gt;"Bot "&lt;/span&gt; &lt;span class="pl-k"&gt;&amp;amp;&lt;/span&gt; &lt;span class="pl-c1"&gt;getEnv&lt;/span&gt;(&lt;span class="pl-s"&gt;"token"&lt;/span&gt;)) &lt;span class="pl-k"&gt;//&lt;/span&gt; get token &lt;span class="pl-k"&gt;in&lt;/span&gt; &lt;span class="pl-c1"&gt;environment&lt;/span&gt; variables

    &lt;span class="pl-k"&gt;proc&lt;/span&gt; &lt;span class="pl-en"&gt;endSession&lt;/span&gt;() {.&lt;span class="pl-e"&gt;noconv&lt;/span&gt;.} &lt;span class="pl-k"&gt;=&lt;/span&gt;
        &lt;span class="pl-c1"&gt;waitFor&lt;/span&gt; d.&lt;span class="pl-c1"&gt;disconnect&lt;/span&gt;()

    &lt;span class="pl-c1"&gt;setControlCHook&lt;/span&gt;(endSession)
    d.compress = &lt;span class="pl-c1"&gt;true&lt;/span&gt;
    &lt;span class="pl-k"&gt;let&lt;/span&gt; removeProc = d.&lt;span class="pl-c1"&gt;addHandler&lt;/span&gt;(&lt;span class="pl-c1"&gt;EventType&lt;/span&gt;&lt;/pre&gt;…
&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Krognol/discordnim"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;



&lt;h1&gt;
  
  
  Social
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RD3KVYUY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/vsu7vvotyu9djkw8yys5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RD3KVYUY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/vsu7vvotyu9djkw8yys5.png" alt="Alt Text" width="512" height="329"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Say &lt;em&gt;Hi&lt;/em&gt; on the bridged &lt;a href="https://gitter.im/nim-lang/Nim"&gt;Gitter&lt;/a&gt;, &lt;a href="https://matrix.to/#/#freenode_#nim:matrix.org"&gt;Matrix&lt;/a&gt;, &lt;a href="https://t.me/nim_lang"&gt;Telegram&lt;/a&gt;, &lt;a href="//irc://freenode.net/nim"&gt;IRC&lt;/a&gt;, &lt;a href="https://discord.gg/ezDFDw2"&gt;Discord&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://t.me/NimArgentina"&gt;Si hablas Espanol te esperamos en el Chat.&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>nim</category>
    </item>
    <item>
      <title>Nim for TypeScript Devs</title>
      <dc:creator>Juan Carlos</dc:creator>
      <pubDate>Wed, 01 Jan 2020 21:12:03 +0000</pubDate>
      <link>https://dev.to/juancarlospaco/nim-for-typescript-devs-3da6</link>
      <guid>https://dev.to/juancarlospaco/nim-for-typescript-devs-3da6</guid>
      <description>&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;TypeScript&lt;/th&gt;
&lt;th&gt;Nim&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Execution model&lt;/td&gt;
&lt;td&gt;JavaScript code (Compiler)&lt;/td&gt;
&lt;td&gt;JavaScript code (Compiler)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Written using&lt;/td&gt;
&lt;td&gt;TypeScript&lt;/td&gt;
&lt;td&gt;Nim&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;License&lt;/td&gt;
&lt;td&gt;Apache&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Version (Mayor)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;3.x&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;1.x&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Typing&lt;/td&gt;
&lt;td&gt;Static&lt;/td&gt;
&lt;td&gt;Static&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Meta-programming&lt;/td&gt;
&lt;td&gt;❎ &lt;a href="https://github.com/Microsoft/TypeScript/issues/13252#issuecomment-334646630" rel="noopener noreferrer"&gt;#issue-13252&lt;/a&gt;, &lt;a href="https://www.typescriptlang.org/docs/handbook/decorators.html" rel="noopener noreferrer"&gt;Decorators&lt;/a&gt; are limited&lt;/td&gt;
&lt;td&gt;✔️ template, macro&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;int8/16/32/64 types&lt;/td&gt;
&lt;td&gt;❎&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;float32/float64 types&lt;/td&gt;
&lt;td&gt;❎&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Char types&lt;/td&gt;
&lt;td&gt;❎&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Subrange types&lt;/td&gt;
&lt;td&gt;❎ &lt;a href="https://github.com/microsoft/TypeScript/issues/15480#issue-225324972" rel="noopener noreferrer"&gt;#issue-225324972&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;JSON types&lt;/td&gt;
&lt;td&gt;❎ &lt;a href="https://github.com/microsoft/TypeScript/issues/1897#issue-56296923" rel="noopener noreferrer"&gt;#issue-56296923&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Regex types&lt;/td&gt;
&lt;td&gt;❎ &lt;a href="https://github.com/Microsoft/TypeScript/issues/6579#issue-128264906" rel="noopener noreferrer"&gt;#issue-128264906&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Option types&lt;/td&gt;
&lt;td&gt;❎&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dependent types&lt;/td&gt;
&lt;td&gt;❎&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Operator Overloading&lt;/td&gt;
&lt;td&gt;❎&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Custom Operators&lt;/td&gt;
&lt;td&gt;❎&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Enum types&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Immutability&lt;/td&gt;
&lt;td&gt;Limited, &lt;code&gt;readonly&lt;/code&gt; keyword&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Function Arguments Immutability&lt;/td&gt;
&lt;td&gt;Mutable&lt;/td&gt;
&lt;td&gt;Immutable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Full DOM API&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NodeJS integration&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Generics&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Type inference&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Closures&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Object-Oriented&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Methods&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Exceptions&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anonymous Functions&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Arrow Functions&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Array Comprehensions&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Formatted String Literals&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FFI&lt;/td&gt;
&lt;td&gt;✔️ JS only&lt;/td&gt;
&lt;td&gt;✔️ C/C++/JS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Async&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Regex&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Self-Documentation comments&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Package Publishing&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Package Manager&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Code AutoFormatter&lt;/td&gt;
&lt;td&gt;✔️ via NPM&lt;/td&gt;
&lt;td&gt;✔️ Nimpretty&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Syntax similar to&lt;/td&gt;
&lt;td&gt;JavaScript&lt;/td&gt;
&lt;td&gt;CoffeeScript or Python&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fiokz2yvbof8krq0wh3sz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fiokz2yvbof8krq0wh3sz.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Variables
&lt;/h1&gt;

&lt;p&gt;Creating a new variable uses &lt;code&gt;var&lt;/code&gt; or &lt;code&gt;let&lt;/code&gt; or &lt;code&gt;const&lt;/code&gt;.&lt;br&gt;
Nim has immutability and compile-time function execution.&lt;br&gt;
You can assign functions to variables.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;const&lt;/code&gt; is different from TypeScript by being truly immutable.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Declaration&lt;/th&gt;
&lt;th&gt;Compile-Time&lt;/th&gt;
&lt;th&gt;Run-Time&lt;/th&gt;
&lt;th&gt;Immutable&lt;/th&gt;
&lt;th&gt;Requires Assignment&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;var&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;❎&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;td&gt;❎&lt;/td&gt;
&lt;td&gt;❎&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;let&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;❎&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;const&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;td&gt;❎&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h1&gt;
  
  
  Compile-Time Function Execution
&lt;/h1&gt;

&lt;p&gt;Nim has Compile-Time Function Execution that allows you to run &lt;em&gt;Backend-like&lt;/em&gt; code at compile-time and use it on Frontend at run-time.&lt;br&gt;
Compile-time FFI is also possible, you can pull data from C/C++ libs at compile-time and use it on Frontend at run-time. &lt;br&gt;
Most code that works at compile-time and NimScript also tends to work for Frontend.&lt;/p&gt;

&lt;p&gt;Example: &lt;a href="https://nim-lang.github.io/Nim/oswalkdir.html" rel="noopener noreferrer"&gt;Compile-time recursive file system walk module.&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Svelte
&lt;/h1&gt;

&lt;p&gt;Nim has some similarities with Svelte for Frontend, but at the time of writing Svelte does not fully supports TypeScript.&lt;br&gt;
Svelte can not do Backend (is not designed to).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fap9y3laweee6g8t68pv4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fap9y3laweee6g8t68pv4.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Build Modes
&lt;/h1&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Release Build&lt;/th&gt;
&lt;th&gt;Debug Build&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Speed&lt;/td&gt;
&lt;td&gt;Fast&lt;/td&gt;
&lt;td&gt;Slow&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;File Size&lt;/td&gt;
&lt;td&gt;Small&lt;/td&gt;
&lt;td&gt;Big&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Optimized&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;td&gt;❎&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tracebacks&lt;/td&gt;
&lt;td&gt;❎&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Run-time checks&lt;/td&gt;
&lt;td&gt;❎&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Compile-time checks&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;assert&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;❎&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;doAssert&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Once compiled it wont need Nim anymore, 100% dependency-free.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;
  
  
  Hello World
&lt;/h1&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="s"&gt;"Hello World"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Console Hello World:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="n"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Hello World"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Thank you for playing
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://nim-lang.org" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F4huq62a5r8tck64apdtd.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There's bridged &lt;a href="https://gitter.im/nim-lang/Nim" rel="noopener noreferrer"&gt;Gitter&lt;/a&gt;, &lt;a href="https://matrix.to/#/#freenode_#nim:matrix.org" rel="noopener noreferrer"&gt;Matrix&lt;/a&gt;, &lt;a href="https://t.me/nim_lang" rel="noopener noreferrer"&gt;Telegram&lt;/a&gt;, &lt;a href="//irc://freenode.net/nim"&gt;IRC&lt;/a&gt;, &lt;a href="https://discord.gg/ezDFDw2" rel="noopener noreferrer"&gt;Discord&lt;/a&gt; for Nim, come say &lt;em&gt;Hi&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://nim-lang.org" rel="noopener noreferrer"&gt;Nim Homepage&lt;/a&gt;&lt;br&gt;
&lt;a href="https://nim-lang.org/learn.html" rel="noopener noreferrer"&gt;Learn Nim today.&lt;/a&gt;&lt;br&gt;
&lt;a href="https://t.me/NimArgentina" rel="noopener noreferrer"&gt;Grupo de Telegram en Español.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;👑&lt;/p&gt;

</description>
      <category>nim</category>
      <category>javascript</category>
      <category>typescript</category>
    </item>
    <item>
      <title>Faster Than Requests with Multi-Thread URL-to-SQLite Web Scraper</title>
      <dc:creator>Juan Carlos</dc:creator>
      <pubDate>Tue, 24 Dec 2019 03:29:23 +0000</pubDate>
      <link>https://dev.to/juancarlospaco/faster-than-requests-with-multi-thread-url-to-sqlite-web-scraper-1og1</link>
      <guid>https://dev.to/juancarlospaco/faster-than-requests-with-multi-thread-url-to-sqlite-web-scraper-1og1</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--eY1ILy9j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/abb2u4bb1vjcaa9mk8bv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--eY1ILy9j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/abb2u4bb1vjcaa9mk8bv.png" alt="Alt Text" width="685" height="435"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Faster Than Requests 0.9.6 🐍
&lt;/h2&gt;

&lt;p&gt;✔️ 5 Web Scrapers, Built-in, One-Liner.&lt;br&gt;
✔️ Multi-Threading mass Downloader.&lt;br&gt;
✔️ GitHub Actions build from scratch on every Push.&lt;br&gt;
✔️ GitHub Actions publish to PYPI on every Release.&lt;br&gt;
✔️ Basic &lt;code&gt;get()&lt;/code&gt;, &lt;code&gt;post()&lt;/code&gt;, &lt;code&gt;download()&lt;/code&gt;, etc.&lt;br&gt;
✔️ Multi-Part data for all POST functions.&lt;br&gt;
✔️ Complete documentation with examples.&lt;br&gt;
✔️ Works on Alpine Linux and Dockers.&lt;br&gt;
✔️ CI, PyPI, Docker, Tests, Fixes, etc.&lt;br&gt;
✔️ &lt;code&gt;0&lt;/code&gt; Dependency, Python &lt;code&gt;3.9&lt;/code&gt; ready, native bare-metal C performance.&lt;/p&gt;

&lt;h1&gt;
  
  
  Multi-Threading Web Scraper
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HJF4nBIN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/njubntdge6dfh3tugr5f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HJF4nBIN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/njubntdge6dfh3tugr5f.png" alt="Alt Text" width="437" height="153"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;threads = True&lt;/code&gt; Multi-Threading, &lt;code&gt;threads = False&lt;/code&gt; no Threads.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  URL-to-SQLite Web Scraper, give it 1 URL, gives back 1 SQLite database
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Mo1rqKQZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/b5g65xy915jp42ztds7k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Mo1rqKQZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/b5g65xy915jp42ztds7k.png" alt="Alt Text" width="489" height="153"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SQLite database can be visualized with any SQLite WYSIWYG, like &lt;a href="https://sqlitebrowser.org"&gt;https://sqlitebrowser.org&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;HTTP Headers are stored as Pretty-Printed JSON. &lt;/li&gt;
&lt;li&gt;Date and Time are stored as Unix Timestamps. &lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Images and Photos Web Scraper
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---uJ9YDb7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/mivzw0kkhhdrkydz6lrs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---uJ9YDb7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/mivzw0kkhhdrkydz6lrs.png" alt="Alt Text" width="481" height="153"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Can get the images from the new HTML5 &lt;code&gt;&amp;lt;picture&amp;gt;&lt;/code&gt; element.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Gimme tha powah
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://github.com/juancarlospaco/faster-than-requests#extras-go-beyond-requests"&gt;https://github.com/juancarlospaco/faster-than-requests#extras-go-beyond-requests&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Star faster_than_requests on GitHub!, awesome stuff incoming...&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👑&lt;/p&gt;

</description>
      <category>python</category>
    </item>
    <item>
      <title>C++ as Assembly2.0</title>
      <dc:creator>Juan Carlos</dc:creator>
      <pubDate>Wed, 18 Dec 2019 08:22:54 +0000</pubDate>
      <link>https://dev.to/juancarlospaco/c-as-assembly2-0-2oo7</link>
      <guid>https://dev.to/juancarlospaco/c-as-assembly2-0-2oo7</guid>
      <description>&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/fCg9MXnucAs"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://nim-lang.org"&gt;Nim&lt;/a&gt; is strong statically typed systems and applications programming language which offers some of the most powerful meta-programming capabilities.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://nim-lang.org"&gt;Nim&lt;/a&gt; is the next iteration of imperative language design and aims to dethrone C/C++ for high performance coding. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://nim-lang.org"&gt;Nim&lt;/a&gt; is also perfectly suited for software typically written in C#, Java, JavaScript, etc. - basically all types of software. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--VNomywSy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/x4gtpi0lsh908qqli965.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VNomywSy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/x4gtpi0lsh908qqli965.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://nim-lang.org"&gt;Nim&lt;/a&gt; can bridge the gap between business logic and high performance, sprinkling improved developer productivity on top. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://nim-lang.org"&gt;Nim&lt;/a&gt; is compiled to C/C++ (and JavaScript among others),&lt;br&gt;
and thus interoperability is straightforward and without any performance penalties,&lt;br&gt;
lots of existing C/C++ software can be reused and built upon.&lt;/p&gt;

&lt;p&gt;Remember to follow the dedicated Dev tag!: &lt;a href="https://dev.to/t/nim"&gt;https://dev.to/t/nim&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;👑&lt;/p&gt;

</description>
      <category>nim</category>
      <category>cpp</category>
      <category>c</category>
      <category>javascript</category>
    </item>
    <item>
      <title>12v fan to 220v fan</title>
      <dc:creator>Juan Carlos</dc:creator>
      <pubDate>Sun, 15 Dec 2019 07:44:51 +0000</pubDate>
      <link>https://dev.to/juancarlospaco/12v-fan-to-220v-fan-566a</link>
      <guid>https://dev.to/juancarlospaco/12v-fan-to-220v-fan-566a</guid>
      <description>&lt;p&gt;&lt;strong&gt;Spanish only post, sorry.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Desde hace tiempo tenia ganas de reemplazar los ventiladores "gamer" originales de 12 volts DC de la PC Desktop,&lt;br&gt;
pero pense en probar reemplazarlos con ventiladores nuevos pero de 220 volts AC,&lt;br&gt;
para liberar un poco de capacidad y conectores de la fuente,&lt;br&gt;
por que los originales hacen ruido y giran lento o recalientan en verano.&lt;/p&gt;

&lt;p&gt;Yo desarme ventiladores "gamer" caros y baratos de CPU/GPU,&lt;br&gt;
note que realmente el motor es el mismo, no es mas grande ni nada,&lt;br&gt;
solo que el ventilador caro tiene mejor plastico y terminacion,&lt;br&gt;
es trasparente y con leds de colores, pero basicamente el motor es el mismo,&lt;br&gt;
estas pagando extra por decoracion, lo unico que mueve aire es el motor.&lt;/p&gt;

&lt;p&gt;Compre 2 fan de 220 volts nuevos en una casa de electronica de Buenos Aires,&lt;br&gt;
son mas baratos que los "gamer", son de aluminio en lugar de plastico,&lt;br&gt;
son mas feos pues solo vienen color negro los de plastico vienen con leds,&lt;br&gt;
usa rulemanes en lugar de bujes, los cables son mucho mas finos (1mm),&lt;br&gt;
consumen menos electricidad (mas voltage necesita menos amperaje),&lt;br&gt;
vienen en medida similar a los originales, inclusive use los mismos tornillos, 1 de 120mm para GPU (nVidia), 1 de 60mm para CPU (AMD).&lt;br&gt;
Lo que mas calienta hoy dia es la placa de video igualmente.&lt;/p&gt;

&lt;p&gt;La parte electrica simplemente la conecte a la ficha de 220 volts de la fuente directamente,&lt;br&gt;
con el cable finito que vino con el ventilador, la fuente tiene una  tecla de apagado igualmente.&lt;/p&gt;

&lt;p&gt;Realmente no llevaron muchas mas adaptaciones que eso, &lt;br&gt;
son practicamente iguales a los ventiladores anteriores originales.&lt;/p&gt;

&lt;p&gt;El centro donde esta el motor del ventilador es mas gordito,&lt;br&gt;
pero las aspas del ventilador son mas anchas y mueven &lt;strong&gt;mucho&lt;/strong&gt; mas aire.&lt;/p&gt;

&lt;p&gt;El motor esta electricamente aislado del cuerpo de aluminio del ventilador.&lt;br&gt;
Guarde los ventiladores originales en una cajita.&lt;/p&gt;

&lt;p&gt;La temperatura es igual o 6 grados mas que la temperatura ambiente.&lt;br&gt;
Considero la adaptacion exitosa y relativamente sencilla, &lt;br&gt;
me gusta hacer &lt;em&gt;hardware experimental DIY&lt;/em&gt;.&lt;br&gt;
Dont do this at home, blah, blah, blah.  :)&lt;br&gt;
Les dejo unas fotos que tome con el movil.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iVHnRmjS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/b2ma5a9cudubuh3cssjg.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iVHnRmjS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/b2ma5a9cudubuh3cssjg.jpg" alt="Alt Text" width="880" height="660"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--odZTCrBU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/rvsa493t3rd85v4c06xd.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--odZTCrBU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/rvsa493t3rd85v4c06xd.jpg" alt="Alt Text" width="880" height="1173"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qJLtwTnt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/9i0pmxptwatpu2h4binm.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qJLtwTnt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/9i0pmxptwatpu2h4binm.jpg" alt="Alt Text" width="880" height="1173"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Resultado final
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ll7NyNxC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/2xgsgg15km35f2n7l0ws.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ll7NyNxC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/2xgsgg15km35f2n7l0ws.jpg" alt="Alt Text" width="880" height="660"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>hardware</category>
      <category>pcbuilding</category>
      <category>spanish</category>
    </item>
    <item>
      <title>Faster Than Requests with MultiThread Web Scraper</title>
      <dc:creator>Juan Carlos</dc:creator>
      <pubDate>Wed, 20 Nov 2019 22:15:52 +0000</pubDate>
      <link>https://dev.to/juancarlospaco/faster-than-requests-with-multithread-web-scrapper-4lpi</link>
      <guid>https://dev.to/juancarlospaco/faster-than-requests-with-multithread-web-scrapper-4lpi</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Ftvucq4enrk03ccvubs6w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Ftvucq4enrk03ccvubs6w.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Alternative HTTP Client, new version &lt;code&gt;0.9&lt;/code&gt;, API for Humans.&lt;/li&gt;
&lt;li&gt;Added Multi-Thread web scraper Built-in one-liner.&lt;/li&gt;
&lt;li&gt;Added Multi-Thread file downloader Built-in one-liner.&lt;/li&gt;
&lt;li&gt;1 file, 0 dependency, ~100 Lines of code, &lt;code&gt;2.7&lt;/code&gt; to &lt;code&gt;3.8&lt;/code&gt;, Alpine &amp;amp; ARM.&lt;/li&gt;
&lt;li&gt;GitHub Actions CI building from scratch.&lt;/li&gt;
&lt;li&gt;GitHub Actions CI running Unittests from scratch.&lt;/li&gt;
&lt;li&gt;Examples for web scraper and file downloader.&lt;/li&gt;
&lt;li&gt;Extras for Data Science, Web Scrapping, HTTP REST JSON APIs.&lt;/li&gt;
&lt;li&gt;Examples, Dockerfile, tests, FAQ, CoC, Debug helpers, JSON helpers.&lt;/li&gt;
&lt;li&gt;Docs has all functions with detailed arguments and returns with types.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Library&lt;/th&gt;
&lt;th&gt;Speed&lt;/th&gt;
&lt;th&gt;Files&lt;/th&gt;
&lt;th&gt;LOC&lt;/th&gt;
&lt;th&gt;Dependency&lt;/th&gt;
&lt;th&gt;Devs&lt;/th&gt;
&lt;th&gt;Scraper&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;PyWGET&lt;/td&gt;
&lt;td&gt;&lt;code&gt;152.39&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;338&lt;/td&gt;
&lt;td&gt;Wget&lt;/td&gt;
&lt;td&gt;&amp;gt;17&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Requests&lt;/td&gt;
&lt;td&gt;&lt;code&gt;15.58&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&amp;gt;20&lt;/td&gt;
&lt;td&gt;2558&lt;/td&gt;
&lt;td&gt;&amp;gt;=7&lt;/td&gt;
&lt;td&gt;&amp;gt;527&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Urllib&lt;/td&gt;
&lt;td&gt;&lt;code&gt;4.00&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;???&lt;/td&gt;
&lt;td&gt;1200&lt;/td&gt;
&lt;td&gt;0(std lib)&lt;/td&gt;
&lt;td&gt;???&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Urllib3&lt;/td&gt;
&lt;td&gt;&lt;code&gt;3.55&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&amp;gt;40&lt;/td&gt;
&lt;td&gt;5242&lt;/td&gt;
&lt;td&gt;&amp;gt;5(SSL)&lt;/td&gt;
&lt;td&gt;&amp;gt;188&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PyCurl&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0.75&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&amp;gt;15&lt;/td&gt;
&lt;td&gt;5932&lt;/td&gt;
&lt;td&gt;Curl,LibCurl&lt;/td&gt;
&lt;td&gt;&amp;gt;50&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FTR&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0.45&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;99&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Yes, 2&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Ffeeds.feedburner.com%2FRecentCommitsToFaster-than-requestsmaster.1.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Ffeeds.feedburner.com%2FRecentCommitsToFaster-than-requestsmaster.1.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Hello World
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http://httpbin.org/get&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;GET&lt;/code&gt;, &lt;code&gt;POST&lt;/code&gt;, &lt;code&gt;PATCH&lt;/code&gt;, &lt;code&gt;PUT&lt;/code&gt;, &lt;code&gt;DELETE&lt;/code&gt; and more.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Multi-Thread Web Scraper Built-in
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;scrapper&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http://example.org&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http://example.io&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;threads&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Theres 2 ready-made Web Scrapers built-in, easy to use one-liner.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Multi-Thread File Downloader Built-in
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;download2&lt;/span&gt;&lt;span class="p"&gt;([(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http://example.org/foo.jpg&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;output.jpg&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;threads&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;delay=1000&lt;/code&gt; for 1 Second delay sleep between downloads.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Multi-Thread Bulk GET
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get2str2&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http://example.org&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http://example.io&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;threads&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;threads=False&lt;/code&gt; for No Multi-Thread.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  GitHub
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/juancarlospaco/faster-than-requests#faster-than-requests" rel="noopener noreferrer"&gt;https://github.com/juancarlospaco/faster-than-requests#faster-than-requests&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🐍😼👍&lt;/p&gt;

</description>
      <category>python</category>
    </item>
    <item>
      <title>Ode to Nimpy</title>
      <dc:creator>Juan Carlos</dc:creator>
      <pubDate>Sat, 16 Nov 2019 17:49:46 +0000</pubDate>
      <link>https://dev.to/juancarlospaco/ode-to-nimpy-4753</link>
      <guid>https://dev.to/juancarlospaco/ode-to-nimpy-4753</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3y6hXelL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/jkb0ywqgnw7lvquj4w30.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3y6hXelL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/jkb0ywqgnw7lvquj4w30.png" alt="Alt Text" title="1 language for the whole stack, run on Frontend, run on Backend" width="680" height="827"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  The Nim experience
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;So far...&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;When PIP3 got broken on &lt;a href="https://www.archlinux.org/"&gt;Arch Linux&lt;/a&gt;,&lt;br&gt;
lots of &lt;a href="http://python.org"&gt;Python&lt;/a&gt; modules got broken,&lt;br&gt;
my &lt;a href="https://nim-lang.org"&gt;Nim&lt;/a&gt; &lt;a href="https://github.com/yglukhov/nimpy#nimpy-"&gt;Nimpy&lt;/a&gt; Python modules continue working.&lt;/p&gt;

&lt;p&gt;When Python3 become default on most Linux,&lt;br&gt;
lots of Python modules got broken,&lt;br&gt;
my &lt;a href="https://github.com/yglukhov/nimpy#nimpy-"&gt;Nimpy&lt;/a&gt; Python modules continue working.&lt;/p&gt;

&lt;p&gt;When "ABI3" of Python3 launched,&lt;br&gt;
some Python modules got broken,&lt;br&gt;
my &lt;a href="https://github.com/yglukhov/nimpy#nimpy-"&gt;Nimpy&lt;/a&gt; Python modules continue working.&lt;/p&gt;

&lt;p&gt;When Python3.8 become default on Linux,&lt;br&gt;
lots of Python modules got broken,&lt;br&gt;
my &lt;a href="https://github.com/yglukhov/nimpy#nimpy-"&gt;Nimpy&lt;/a&gt; Python modules continue working.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://nim-lang.org/install.html"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8N7pQ1xk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/u3wfh0uhohur24bwa3nw.png" alt="Alt Text" width="512" height="483"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"Deprecation Warning"&lt;/em&gt; for a year on Nimpy,&lt;br&gt;
my &lt;a href="https://github.com/yglukhov/nimpy#nimpy-"&gt;Nimpy&lt;/a&gt; Python modules continue working.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"Experimental"&lt;/em&gt; features for a year on Nimpy,&lt;br&gt;
my &lt;a href="https://github.com/yglukhov/nimpy#nimpy-"&gt;Nimpy&lt;/a&gt; Python modules continue working.&lt;/p&gt;

&lt;p&gt;If &lt;a href="https://nimble.directory"&gt;Nimble&lt;/a&gt; get broken someday, just use Git or Curl,&lt;br&gt;
Install packages is copy&amp;amp;paste a file.&lt;/p&gt;

&lt;p&gt;My &lt;a href="https://github.com/yglukhov/nimpy#nimpy-"&gt;Nimpy&lt;/a&gt; Python modules are faster than PyPy,&lt;br&gt;
the most super-optimized Python3.8 code is several orders of magnitude slower than the crappiest unoptimized equivalent on Nim.&lt;/p&gt;

&lt;p&gt;Most times I use a lot less lines of code than CPython, without code-golf,&lt;br&gt;
it is not only about more performance but also it uses less code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/juancarlospaco/nim-presentation-slides/blob/master/ejemplos/basico/c/enchufa_stdio.nim"&gt;C interop is a lot better than CTypes&lt;/a&gt;, JavaScript too,&lt;br&gt;
you can interoperate with anything that has C/C++ or JS API.&lt;/p&gt;

&lt;p&gt;I write a lot less Type Annotations thanks to Type Inference,&lt;br&gt;
but yet &lt;a href="https://dev.to/juancarlospaco/python-cython-nim-cheatsheet-hjj"&gt;Types are strongly enforced&lt;/a&gt;,&lt;br&gt;
variables are not &lt;code&gt;None&lt;/code&gt; out of thin air, integers are not float out of thin air.&lt;/p&gt;
&lt;h1&gt;
  
  
  Deploy
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Deploy anywhere where you can compile C:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AsNMpNs5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/a402cejvekj7lzfs7re9.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AsNMpNs5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/a402cejvekj7lzfs7re9.jpg" alt="Alt Text" width="675" height="653"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;scp&lt;/code&gt; the binary to the server &amp;amp; run!, forget installers and prepared environments, those are kludges of the past.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;
  
  
  You can learn today
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Hello World:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="s"&gt;"Hello World"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;For Python:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nim"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="n"&gt;nimpy&lt;/span&gt;

&lt;span class="k"&gt;proc &lt;/span&gt;&lt;span class="nf"&gt;hello&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{.&lt;/span&gt;&lt;span class="n"&gt;exportpy&lt;/span&gt;&lt;span class="p"&gt;.}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
  &lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="s"&gt;"Hello World"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;{.exportpy.}&lt;/code&gt; is a &lt;a href="https://nim-lang.org/docs/manual.html#pragmas"&gt;&lt;em&gt;Pragma&lt;/em&gt;&lt;/a&gt; to export to Python, is like a Decorator.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;proc&lt;/code&gt; is like &lt;code&gt;def&lt;/code&gt; of Python, it also has &lt;code&gt;func&lt;/code&gt; for Pure-Functional.&lt;/li&gt;
&lt;li&gt;You can use &lt;a href="https://github.com/Yardanico/nimpylib#use"&gt;Python Syntax&lt;/a&gt;, but for this example I go with std lib.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;On Python:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;module&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;hello&lt;/span&gt;
&lt;span class="n"&gt;hello&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://nim-lang.org/install.html"&gt;Install&lt;/a&gt;, &lt;a href="https://nim-lang.org/learn.html"&gt;Tutorial&lt;/a&gt;, &lt;a href="https://nim-lang.org/documentation.html"&gt;Documentation&lt;/a&gt;, &lt;a href="https://nim-lang.org/docs/manual.html"&gt;Manual&lt;/a&gt;, &lt;a href="https://github.com/moigagoo/nimage"&gt;Docker&lt;/a&gt;, &lt;a href="https://t.me/nim_lang"&gt;Chat&lt;/a&gt;, &lt;a href="https://play.nim-lang.org"&gt;Try Nim on the browser&lt;/a&gt;, &lt;a href="https://github.com/nim-lang/Nim/wiki/Nim-for-Python-Programmers"&gt;Nim for Python devs&lt;/a&gt;, &lt;a href="https://nim-lang.org/docs/lib.html"&gt;Standard Library&lt;/a&gt;, &lt;a href="https://github.com/yglukhov/nimpy"&gt;Python integration&lt;/a&gt;, &lt;a href="https://github.com/Yardanico/nimpylib#use"&gt;Python Syntax&lt;/a&gt;, &lt;a href="https://dev.to/juancarlospaco/python-cython-nim-cheatsheet-hjj"&gt;Python/Nim Cheatsheet&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Advanced Nimpy Example:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1McyHYd_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/rkm04sivm8bodyb510uj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1McyHYd_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/rkm04sivm8bodyb510uj.png" alt="Alt Text" width="687" height="325"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go give Star to Nimpy: &lt;a href="https://github.com/yglukhov/nimpy"&gt;https://github.com/yglukhov/nimpy&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Welcome to the Nim
&lt;/h1&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/P8oJUGVbOlQ"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;50 years on the past you can compile C,&lt;br&gt;
100 years on the future you can compile C.&lt;br&gt;
&lt;a href="https://en.wikipedia.org/wiki/Dennis_Ritchie"&gt;Dennis Ritchie&lt;/a&gt; was right.&lt;br&gt;
👑🥰👍&lt;/p&gt;

</description>
      <category>python</category>
      <category>nim</category>
    </item>
  </channel>
</rss>
