Mostrando entradas con la etiqueta python3. Mostrar todas las entradas
Mostrando entradas con la etiqueta python3. Mostrar todas las entradas

jueves, 27 de junio de 2024

Un viaje de 10 años por las estadísticas de IPv6 en la región

En el mes de IPv6, y justo cuando se cumplen 10 años de recolección de estadísticas de IPv6 por parte de LACNIC, deseamos mostrarte un resumen de los hitos, logros, avances y estadísticas de este protocolo en nuestra región.


Contexto histórico

Hace 10 años -más exactamente en el mes de mayo del 2014- en LACNIC hicimos un pequeño trabajo que ha perdurado hasta estos días y no parece que lo detengamos en un futuro cercano: armamos el colector de estadísticas de IPv6.


¿Colector de estadísticas?

El colector no es más que un script en python3 que se conecta a las estadísticas de google [1], las procesa , limpia y luego almacena en nuestra base de datos. Con estos números desde LACNIC hacemos gran cantidad de cosas, como por ejemplo:

  • Página con estadísticas por país https://stats.labs.lacnic.net/IPv6/graph-access.html (por cierto la más visitada en ese portal y utilizada por decenas de personas)
  • Creación del ranking de IPv6: https://stats.labs.lacnic.net/IPv6/ipv6ranking.html
  • Videos como el bar chart race: https://www.youtube.com/watch?v=l9CKQCa1z0U
  • Textos de resumenes anuales como: https://blog.acostasite.com/2019/12/retrospectiva-sobre-el-crecimiento-de.html

¿Qué se mide?

Los números que verán en las gráficas siguientes, representan el porcentaje de penetración de IPv6 en el usuario final, por ejemplo si vemos que dice 30%, significa que de cada 100 personas, 30 ya cuentan con IPv6


Comencemos el paseo

2014. Primero arranquemos con aquellos países que estaban abrazando IPv6 para aquel año. Es decir, países que tenían algo de penetración IPv6 en el 2014 (> 1%), como Perú que ya contaba con un 4,6 % y Ecuador que terminaba dicho año con un poco más de 1%. Ya en esta fechas decíamos “hay que seguir los ejemplo de Ecuador y Perú”.




2015. La carrera por la adopción de IPv6 estaba en pleno apogeo. Este año algunos países comenzaron su carrera en lo que años subsiguientes se verían grandes resultados. Países como Bolivia y Brasil comenzaban sus despliegues de IPv6 y terminaban el año con 3% y 6% respectivamente, dando inicio a su emocionante trayectoria.




2016. En este año Argentina, Guatemala y Trinidad y Tobago se hicieron presentes y lograron finalizar el año con 1,93%, 1%  y 11% respectivamente. Es importante mencionar que  los países pioneros no detuvieron sus despliegues de IPv6. Por ejemplo Brasil terminaba el año con más de 10% y Ecuador con 18%, siendo el valor más alto para este año. Tomando en cuenta que Brasil tiene una población de 215mm, no era nada malo el 10% :-)




2017. La fiesta de IPv6 seguía creciendo; por ejemplo México alcanzó un 4,5% y Uruguay un envidiable 30%. Este año finaliza con el 10% de latinoamericanos con acceso en IPv6. La fiesta estaba aún entrando en calor.



2018 El Caribe es el protagonista anotando tres países más: República Dominicana (1,2%), Sint Marteen (13%) y Belize (1%) dejaron su huella. México tuvo un gran crecimiento moviéndose de 4% a 24%.






2019. El Caribe mostraba su determinación, Guyana Francesa daba un salto asombroso, alcanzando 37% en tiempo récord. Colombia y Paraguay también brillaban con 1,4% y 1,8% respectivamente. Y el resto de la región seguía adelante, con Argentina llegando al 8%, Bolivia al 15%, Brasil al 28%, México al 31%, Perú al 18% ¡el promedio regional del 20%!




2020. La evolución no se detenía; Chile y Surinam rompían barreras, alcanzando 1,2% y 6,8% respectivamente. Nicaragua, Belize, Bolivia y Paraguay mostraban crecimientos notables, con un emocionante avance en IPv6.





2021. Centroamérica se convertía en el epicentro de la acción, El Salvador, Nicaragua y Honduras emergían con 13%, 18% y 6% respectivamente. Guyana continuaba su ascenso, superando el 16%. Y Chile destacaba con un notable crecimiento, ¡1,1% hasta un emocionante 13%!




2022  Parecía que la fiebre de IPv6 era contagiosa. Costa Rica y Panamá se sumaban con 5% y 1,1%. Curazao también se unía al movimiento con 1%. Surinam destacaba por un impresionante avance:  de un conservador  3% a un impresionante 21%. Uruguay rompía la barrera del 50%, marcando un hito emocionante en la región








2023  El despliegue a nivel de LAC continúa, con Bonaire, Sint Eustatius y Saba marcando un valiente 1%, mientras que Haití y Venezuela[3] [4]  emergen con un prometedor 3% y 2% respectivamente. Para diciembre de este año, un 34% de nuestra región cuenta con IPv6, señalando un avance notable en la adopción del nuevo protocolo.







Conclusiones

La adopción de IPv6 en América Latina y el Caribe comenzó en 2014 con Perú y Ecuador como líderes. A lo largo de los años siguientes, la región experimentó un crecimiento constante, con países como México, Brasil y Bolivia. Para 2022, el impulso continuó, con Costa Rica, Panamá, Argentina y Chile alcanzando cifras destacadas. Con un 34% de la región adoptando IPv6  para fines del 2023, se estableció un hito significativo en el camino hacia un Internet más avanzado y accesible en la región. Uruguay no puede quedar a un lado siendo el único país que supera el 50% de penetración de IPv6 en el usuario final.


Por último, recordemos que alrededor del 30% de la población no se encuentra conectada a Internet, y la manera correcta de llegar a ellos es con IPv6.


Referencias

https://www.google.com/intl/en/ipv6/statistics.html

https://stats.labs.lacnic.net/IPv6/graph-access.html

lunes, 23 de enero de 2023

Python: leyendo un archivo de texto -

Situación:

  Leyendo un archivo en python3 de texto (csv o txt) hay un carácter que se puede "apreciar" utilizando "more" en terminal pero en python3 es más complicada la situación. 


Ejemplo 1:

 $ more epa.csv 

<U+FEFF>el texto


   En mi caso, el archivo lo generé utilizando Excel y grabando como csv.


Ejemplo 2:

 



Problema:

  Python3 lee el archivo bien, no arroja error pero ese "carácter" invisible queda en las variables, los textos, etc y puede traer algún inconveniente.


Solución:

  La solución es leer el archivo y especificar el encoding, algo tan sencillo como:


FILENAME="epa.csv"

with open(FILENAME, encoding='utf-8-sig') as file:

    for line in file:

        print (line)


Explicación (tomado de: https://stackoverflow.com/questions/17912307/u-ufeff-in-python-string):

The Unicode character U+FEFF is the byte order mark, or BOM, and is used to tell the difference between big- and little-endian UTF-16 encoding.


Espero te haya ayudado





viernes, 2 de diciembre de 2022

4 posibles soluciones en Python3 a: UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 503: ordinal not in range(128)

Problema: 
 Al ejecutar un script en python se recibe un mensaje similar a: 

return codecs.ascii_decode(input, self.errors)[0] UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 503: ordinal not in range(128) 

Causa:
  Por defecto python intenta utilizar ASCII como encoding, en caso de que el archivo a leer, la variable a declarar tenga otro codec debe ser especificado, sin embargo, en líneas generales UTF-8 es capaz de solucionar la mayoría de las situaciones

Soluciones

1) Especifar el encoding al momento de leer un archivo:
 with open(os.path.expanduser(path), encoding='utf-8') as f:

2) Asignar una variable e indicar la forma de decodificarla:
s = s.decode('utf-8')

3) Declarar variables de entorno (Linux). Por ejemplo

 export LANG=en_US.UTF-8 

export LC_ALL=en_US.UTF-8 export 

export PYTHONIOENCODING=utf8

4) Indicar al comienzo del script el coding. Por ejemplo

#!/usr/bin/python
# coding: utf-8



Suerte, espero haya sido de tu ayuda.





jueves, 1 de julio de 2021

Super sencillo script en python3 para optimizar las tablas de MYSQL

#!/usr/bin/python3.3

#The objetive of this script is to find all tables in a MYSQL DB and opmitize all of them

import dbconnect

import time

from datetime import datetime



## // VARIABLE DECLARATION ##//

startTime = datetime.now()

conn = dbconnect.dbconnect()

conn.autocommit(True)

cur = conn.cursor()


print ("Starting time: ", startTime)


SQLQUERY=("SHOW TABLES") #Find every table in the DB

cur.execute(SQLQUERY)

tables = cur.fetchall()



if len(tables)>0: #Prevent there are not tables in the list

  for table in tables:  #For every table in the DB

    try:

      SQLQUERY="OPTIMIZE TABLE "+ table[0]  #Construct the SQL QUERY

      print ("   Optimizing", table[0])

      cur.execute(SQLQUERY)

    except:

      pass


print ("Script execution time:",datetime.now()-startTime)

print ("Ending time: ", datetime.now())

print ("******** ****** ")

martes, 1 de septiembre de 2020

Pequeño script en Python3 para obtener los registros DNS RRSIG

(seguramente hay más maneras más de hacer esto, incluso más elegantes pero así lo hice yo) 


import dns.resolver
domain='lacnic.net'
domain = dns.name.from_text(domain)
request = dns.message.make_query(domain, dns.rdatatype.ANY)
response = dns.query.tcp(request,'8.8.8.8')
for item in str(response).splitlines( ):
  if 'RRSIG' in item: 
      print (item)

miércoles, 4 de diciembre de 2019

Python3: Una solucion a UnicodeEncodeError: 'ascii' codec can't encode character '\xe1' in position 26: ordinal not in range(128)

Situación:

  Al ejecutar un script en python3 se recibe un error similar a:


UnicodeEncodeError: 'ascii' codec can't encode character '\xe1' in position 26: ordinal not in range(128)


Solución:

  El problema viene dado (tal como lo explica el mensaje) por manejo de strings y unicode, muy seguramente el código contiene algún tipo de carácteres en  
español, portugués, árabe u otro idioma no cubierto por ASCII

  Si lees en Internet hay DECENAS de maneras de solucionar esto, yo solo voy a mencionar una que funciona y es MUY sencilla.

  Si te encuentras en Linux o MAC es tan sencillo como colocar esto antes de ejecutar tu script (dentro de bash):




export PYTHONIOENCODING=utf8


  Lo que se esta haciendo es declarar la variable de entorno PYTHONIOENCODING a utf8, python3 al ser ejecutado utilizará esta variable como encoding y tu problema será resuelto.

  Claro, pudieses colocar dicha variable al entrar a tu sesión, o dentro de un script en bash que posteriormente llame a tu .py, etc, etc.

Suerte, espero haya sido útil.

 

miércoles, 16 de enero de 2019

Como: Utilizar Python3 con Sublime en Macos

Intro:
  Tengo sublime en MAC y deseo programar con Python3

Pasos:
  Voy a asumir que tiene Sublime y python3 en el sistema

  1) Identificar el path a python3 en tu MAC
    a) Puedes hacerlo con el comando which desde tu terminal. Sería:

MacBook-Pro:~$ which python3
/usr/local/bin/python3

  2) En sublime ir a:
  Tools --> Build System ---> New build system
  
  3) Automáticamente se debió un projecto nuevo, aquí debes colocar lo siguiente:

  {
  "cmd": ["/usr/local/bin/python3", "-u", "$file"],
  "file_regex": "^[ ]*File \"(…*?)\", line ([0–9]*)",
  "selector": "source.python"
}

  
(fijate que en /usr/local/bin/python3 debe ir el path de tu python3 que te trajo el comando which)

  4) Grabar con un nombre "lógico" algo como: python3.sublime-build

  5) Luego solo te falta probar.  En una pestaña nueva copia y pega este código:

import sys
print(sys.version)

   6) Graba el mismo con la finalización .py (quizás prueba.py)

  7) Ya casi está listo. Ve a Tools ---> Build System --> Python3 (antes no estaba!)

  8) Ejecuta:  Tools --> Build


Eso es todo, ahora disfruta Sublime en tu MAC y programando en python3.

Suerte.

Referencias:



Una mejora práctica en el Transporte DNS sobre UDP en IPv6

Por Hugo Salgado y Alejandro Acosta Introducción y planteamiento del problema En el presente documento queremos discutir sobre un draft (bor...