lunes, enero 03, 2022

tldr pages

Esta es una utileria moderna para una actividad clasica, creo que puede ser una categoria en el blog:  


tldr.sh

"The tldr pages are a community effort to simplify the beloved man pages with practical examples."


Es necesario instalar el Node Package Manager:

sudo apt-get install npm


Con eso puedes instalar la aplicacion:

sudo npm install -g tldr


Ejemplo:

tony@nuc:~$ tldr ss
  ss
  Utility to investigate sockets.
  More information: https://manned.org/ss.8.
  - Show all TCP/UDP/RAW/UNIX sockets:
    ss -a -t|-u|-w|-x
  - Filter TCP sockets by states, only/exclude:
    ss state/exclude bucket/big/connected/synchronized/...
  - Show all TCP sockets connected to the local HTTPS port (443):
    ss -t src :443
  - Show all TCP sockets listening on the local 8080 port:
    ss -lt src :8080
  - Show all TCP sockets along with processes connected to a remote ssh port:
    ss -pt dst :ssh
  - Show all UDP sockets connected on specific source and destination ports:
    ss -u 'sport == :source_port and dport == :destination_port'
  - Show all TCP IPv4 sockets locally connected on the subnet 192.168.0.0/16:
    ss -4t src 192.168/16

jueves, octubre 28, 2021

Java Mug

 


Tenia tiempo que no encontraba una taza relacionada con la tecnología, esto me recuerda a los tiempos en la universidad donde por elección hacia mis proyectos en java...

viernes, septiembre 17, 2021

Comandos Basicos Git

 Esto es solo una lista de referencia rápida de comandos básicos de git:

Primero esta el setup inicial:

$ git config --global user.name "Lalo Landa"
$ git config --global user.email lalolanda@example.com

Esta información será guardada en el archivo ~/.gitconfig

$git clone

Este es el comando que te permite clonar en tu maquina un repositorio

$git status

Ver el estatus del directorio actual, este comando te dirá si tienes cambios realizados pero no empujados aun al repositorio. 

$git log

Mostrara un listado de los commits mas recientes, su fecha y comentarios

$git show

Te dará detalles del ultimo commit indicando los cambios específicos que se hicieron, se puede ver los detalles de un commit si al comando se le agrega el hash a detallar.

$git commit <file>

Es el comando que permite agregar los cambios al repositorio

$git add <file>

Permite agregar archivos para que también formen parte del repositorio 

$git pull

Este comando sincroniza el repositorio local en base al contenido el repositorio origen

$git push

Con este comando podemos empujar nuestros cambios comprometidos al repositorio remoto

$git stash

Este comando te permite guardar tus cambios locales que después puedes volver a trabajar con git stash pop

$git branch <nombre>

Creas un branch del mismo repositorio

$git checkout <branch>

Con este comando te cambias al branch donde quieres trabajar


Mas información: https://git-scm.com


lunes, mayo 03, 2021

Python Snippets: path, time, datetime

Este es un snippet sobre encontrar el archivo mas reciente de un directorio y calcular el tiempo que ha pasado desde su creación, esto es solo la base para una función que busco hacer para un script 


import glob
import os.path
import time
from datetime import datetime

folder_path = 'D:\\python\\doodles\\'
file_type = '*.txt'
now = datetime.now()

# get the most recent file from directory
files = glob.glob(folder_path +file_type)
latest_file = max(files, key=os.path.getctime)

# get the creation time from the most recent file
latest_creation_ctime = os.path.getctime(latest_file)
latest_creation_time = datetime.fromtimestamp(latest_creation_ctime)

# calculate the diference
duration = now - latest_creation_time
duration_in_seconds = duration.total_seconds() 

# print the number of minutes since the file was created
print(int(duration_in_seconds)/60)

miércoles, abril 21, 2021

Python Snippets - dotenv

python-dotenv es una libreria para usar variables de entorno u otra información sensible, este es solo un ejemplo sencillo:

podemos codificar en base64 cierta información como:

$ echo 'joe' | base64
am9lCg==
$ echo 'mysecret' | base64
bXlzZWNyZXQK

en un archivo llamado .env dejamos lo siguiente :

test_user = "am9lCg=="
test_secret = "bXlzZWNyZXQK"

Instalamos la librería:

pip install python-dotenv


Y podemos usarlo de esta forma:

import base64
from dotenv import load_dotenv
import os

load_dotenv()
duser = base64.b64decode(os.environ.get("test_user")).decode('utf-8')
dsecret = base64.b64decode(os.environ.get("test_secret")).decode('utf-8')

print("Decoded information")
print(duser)
print(dsecret)

lo cual entregara como output:

Decoded information
joe
mysecret


Esto no es lo mas seguro y para producción u otras situaciones es necesario buscar una alternativa segura.


 https://pypi.org/project/python-dotenv/


lunes, abril 12, 2021

Ejemplo sencillo de python con selenium con docker

 He usado Selenium (https://www.selenium.dev) para interactuar con sitios web, en particular Selenium WebDriver y lo he usado con Python, en el ejemplo de abajo tengo un script solo para sacar el titulo del ultimo post de este blog, para este caso estoy usando chrome junto con el chromedriver los cuales necesitan tener la misma versión.

web.py

from selenium import webdriver

# define webdriver options
options = webdriver.ChromeOptions()
options.add_argument('--ignore-certificate-errors')
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')

driver = webdriver.Chrome(executable_path="/usr/local/bin/chromedriver",options=options)
driver.get('https://moyoy.blogspot.com')

# get title of last post based on xpath 
last_post_xpath = '//*[@id="Blog1"]/div[1]/div[1]/div/div/div/h3/a'
last_post_title = driver.find_element_by_xpath(last_post_xpath).text
print(last_post_title)
driver.quit()


Como esto se puede ejecutar desde una maquina sin interfaz grafica buscaba crear un contenedor para poder estar haciendo pruebas y después poder desplegar una pequeña aplicación que usaría las librerías de Selenium pero me tope con varios problemas hasta que logre crear un contenedor que me pudiera ejecutar el script de arriba

Dockerfile

FROM python:3.8

# install google chrome
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
RUN sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list'
RUN apt-get -y update
RUN apt-get install -y google-chrome-stable

# install chromedriver
RUN apt-get install -yqq unzip
RUN wget -O /tmp/chromedriver.zip http://chromedriver.storage.googleapis.com/`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE`/chromedriver_linux64.zip
RUN unzip /tmp/chromedriver.zip chromedriver -d /usr/local/bin/

# set display port to avoid crash
ENV DISPLAY=:99

# upgrade pip
RUN pip install --upgrade pip

# install selenium
RUN pip install selenium

# add basic script
ADD web.py .
CMD ["python3", "web.py"]


Con los siguientes comandos construyen el contenedor y después lo ejecutan 

$docker build -t selenium-python .

$docker run -it selenium-python


tony@x220:~/docker/selenium-python$ docker run -it selenium-python
Invocando un pipeline de gitlab a través de la API


Dure varias horas buscando la configuración de un contenedor que me funcionara por lo que dejo este ejemplo muy básico aquí en caso de que otra persona tenga el mismo problema.

Existen algunos cambios recientes en Selenium y en como se define el driver en el código de python, posiblemente haga una actualización sobre ello


Gracias a la información en este repo pude resolver algunos de los problemas con los que me encontré:

https://hub.docker.com/r/joyzoursky/python-chromedriver/


miércoles, abril 07, 2021

Invocando un pipeline de gitlab a través de la API

Este es un ejemplo muy sencillo de como ejecutar un pipeline a través del uso de su API sobrescribiendo un valor en de una variable previamente definida

En esta sección: CI / CD -> Settings -> Variables he definido una variable simple llamada GREETING con el valor Hola

mi archivo .gitlab-ci.yaml es el siguiente:

image: "tonymoyoy/ubuntu_ansible:v1"


stages:
    - build
    - test

build:
    stage: build
    script:
        - echo $GREETING
        - echo "Construyendo"
        - mkdir build
        - touch build/info2.txt
    artifacts:
        paths:
            - build/

test:
    stage: test
    script:
        - echo "Probando"
        - test -f "build/info2.txt"

En la sección: CI / CD -> Settings -> Pipeline triggers agregue un trigger llamado pew, el cual genera un Token

Con esto podemos usar curl para iniciar el pipeline, en este caso sobre el branch master y proporcionando el valor Hello a la variable GREETING


curl -X POST \
    -F token=<YOUR-TRIGGER-TOKEN> \
    -F "ref=master" \
    -F "variables[GREETING]=Hello" \
http://<YOURGITLAB>/api/v4/projects/4/trigger/pipeline


En el log del pipeline podremos ver que tomo el valor de la variable: