viernes, 23 de julio de 2021

Intro al Tipado de Python

Listado de Tipos:

from typing import (
    Dict,
    List,
    Tuple,
    Set,
    Deque,
    NamedTuple,
    IO,
    Pattern,
    Match,
    Text,
    Optional,
    Sequence,
    Iterable,
    Mapping,
    MutableMapping,
    Any,
)


Ejemplo(s):


### Clases

from typing import ClassVar, Dict, List

class Foo:

    x: int = 1  # instance variable. default = 1
    y: ClassVar[str] = "class var"  # class variable

    def __init__(self) -> None:
        self.i: List[int] = [0]

    def foo(self, a: int, b: str) -> Dict[int, str]:
        return {a: b}

foo = Foo()
foo.x = 123


### ContextManager

from typing import ContextManager, Generator, IO
from contextlib import contextmanager

@contextmanager
def open_file(name: str) -> Generator:
    f = open(name)
    yield f
    f.close()

cm: ContextManager[IO] = open_file(__file__)
with cm as f:
    print(f.read())


Referencias:

https://www.pythonsheets.com/notes/python-typing.html


sábado, 3 de julio de 2021

Git Cherry Pick / git-cherry-pick

 Saludos Estimados !!

Hace mucho tiempo que no escribo aquí, y hoy me tope con algo que ya había realizado muchas veces en el pasado pero me enrede y ya no me salía, por lo que les compartó y/o me autocomparto por si lo vuelvo a necesitar el buen git-cherry-pick.

No es muy recomendable ya que un abuso de este comando puede dejarte una buena enredadera que después es difícil encontrarle forma, pero si que es útil como en el siguiente caso.

Necesitamos pasar un commit de un branch a otro, esto por que el branch original quedo muy desactualizado y por error se utilizó, es verdad que el rebase es una opción pero será un largo camino que recorrer además de que puede prestarse a errores de dedo en el camino, so el cherry pick en este caso nos resulta más económico además que no son muchos cambios que pueden revisarse fácilmente aquí los pasos:


1. Nos movemos a la branch donde tenemos nuestro commit: 

    git checkout MiBranchConCommit

2. Ahora vamos a revisar cuál es el hash de nuestro commit:

    git log --one line

    La salida de este comando será algo como:

    86f82f9 (HEAD -> SSCI-101-cherry-pick, origin/SSCI-101-cherry-pick) BRANCH-01test 1

    90805b1 (origin/master, origin/SSCI-85, origin/HEAD, master) BRANCH-02 test 2

    c3451b8 BRANCH test 3

    Vamos a tomar el último de este commit por lo que el número será: 86f82f9

3. Ahora vamos al branch de destino:

    git checkout BranchDestino

4. Una vez que nos encontremos ahí entonces aplicaremos el siguiente comando:

    git cherry-pick 86f82f9


Con este último comando se aplicará el mismo commit a este branch. Una opción interesante (que usualmente utilizo) solo en caso de que tuviéramos la misma base (o HEAD) en las ramas seria utilizar:

    git cherry-pick 86f82f9 --ff

Esta opción --ff hace referencia a fast forward existen más opciones por acá https://git-scm.com/docs/git-cherry-pick sin embargo este nos colocará el commit hacia adelante o por arriba de todos los previous commits.

¿Cómo ves?, si consideras que puede haber otros caminos, te agradezco me los compartas en los comentarios.


Espero te sea de utilidad !


Referencias:

https://git-scm.com/docs/git-cherry-pick


martes, 25 de octubre de 2016

Detalle con Google Chrome Free 3 of 9 Extended

El día de hoy me tope con un detalle con Google Chrome y la fuente Free 3 of 9 Extended usualmente la fuente funcionaba correctamente en una aplicación me toco desarrollar alguna vez pero derepente empezó a fallar, buscando en línea me encontre con que había al parecer un detalle con la forma en que renderiza las fuentes, y bueno finalmente con el link que agrego a las referencias una forma de como solucionarlo, lo que me funciono a mí fue en el código html colocar la fuente directamente en el tag usando el atributo style y sin colocar la palabra Extended en la fuente de la siguiente forma:

<font style="font-family:'Free 3 of 9'">*123*</font>

NOTA: Observen las comillas simples ' para la fuente.

De esta forma el problema se soluciono.


Espero te sea de utilidad !


Referencias
https://productforums.google.com/forum/#!topic/chrome/_KLiTgccPLA
https://productforums.google.com/forum/#!topic/chrome/Vd5abMVzKFI

Detalle con Google Chrome Free 3 of 9 Extended

El día de hoy me tope con un detalle con Google Chrome y la fuente Free 3 of 9 Extended usualmente la fuente funcionaba correctamente en una aplicación me toco desarrollar alguna vez pero derepente empezó a fallar, buscando en línea me encontre con que había al parecer un detalle con la forma en que renderiza las fuentes, y bueno finalmente con el link que agrego a las referencias una forma de como solucionarlo, lo que me funciono a mí fue en el código html colocar la fuente directamente en el tag usando el atributo style y sin colocar la palabra Extended en la fuente de la siguiente forma:

<font style="font-family:'Free 3 of 9'">*123*</font>

NOTA: Observen las comillas simples ' para la fuente.

De esta forma el problema se soluciono.


Espero te sea de utilidad !


Referencias
https://productforums.google.com/forum/#!topic/chrome/_KLiTgccPLA
https://productforums.google.com/forum/#!topic/chrome/Vd5abMVzKFI

miércoles, 16 de septiembre de 2015

Colocar un mensaje prelogin en Linux Ubuntu Server

Este es un tema que cada vez que lo tengo que hacer olvido cuál es exactamente el archivo, debido a que puede hacerse de diferentes formas pero la que mejor me ha funcionado es la siguiente:

$ sudo vi /etc/issue

NOTA: Con \n obtienes el nombre de la maquina, y con \l la terminal que se esta utilizando.


Espero te sea de utilidad !


Referencias:


martes, 1 de septiembre de 2015

Conectarse a una base de datos remota de firebird con isql

Realmente es muy simple pero necesito dejar la nota por que de manera recurrente lo he necesitado:

$ isql
SQL> CONNECT "[IP_SERVER]/[PUERTO]:[DATABASE_PATH]" user 'USER' password 'PASS';

Ejemplo:


CONNECT "10.10.1.2/3050:C:\bds\mibase.gdb" user 'SYSDBA' password '1234';


Espero te sea de utilidad !



Referencias:
http://wiki.metawerx.net/wiki/HowToSetUpARemoteFireBirdConnection

viernes, 28 de agosto de 2015

Ubuntu crontab: agregando una tarea para purgar django_session

Como de costumbre necesito agregar un cronjob para limpiar la tabla de sesiones de django y aquí dejaré documentado el proceso, un proceso cron es aquel que puede repetirse dependiendo de la configuración.

Dentro del sistema operativo podemos ejecutar

$ sudo crontab -e

Posteriormente el sistema preguntará por el editor en mi caso muy particular me gusta utilizar vim (opción 3), sin embargo da opciones a varios editores.

Ahora bien nos vamos al final del archivo la forma es estructurar el contenido de acuerdo a como se nos explica en la siguiente imagen:


Cada línea del archivo crontab esta compuesta por estos componentes, aquí un ejemplo:

#crontab
#------------

1 * * * * touch /webapps/hola.txt

#------------

OJO: Si estas editando con vim necesitas dar ESC y luego :wq!  así es con el signo de exclamación para que así instale el crontab.

En el crontab anterior estamos configurando que cada vez que el minutero del reloj marque 1, se va crear un archivo que dice hola.txt.

Ahora bien para el motivo que necesito hice un archivo con extensión .sh y lo coloque en mi directorio de /home/my_user/cron_django_session.sh con el siguiente contenido:

/webapps/mi_proyecto/venv/bin/python /webapps/mi_proyecto/django_app/manage.py clearsessions
strFecha=$(date)
echo $strFecha > /home/administrador/cron_django_session.log

NOTA: Revisar rutas de archivos

Posteriormente le damos permisos usando el comando:
$ chmod +x cron_django_session.sh

Posteriormente vamos al crontab para añadir la ejecución de este archivo:

0 1 * * * /home/my_user/cron_django_session.sh >/dev/null 2>&1

De esta forma el script se va ejecutar todos los días a la 1 a.m. al final se agrega >/dev/null 2>&1 para que no todo el tiempo el sistema operativo intente enviar un correo al usuario root, en caso de que se necesite se debe quitar esa parte.


Espero te sea de utilidad !

Referencias:
http://www.debian-tutorials.com/crontab-tutorial-cron-howto
http://www.guatewireless.org/os/linux/como-agregar-tareas-al-cron-de-linux.html
https://docs.djangoproject.com/en/1.8/topics/http/sessions/#clearing-the-session-store
http://www.opencsw.org/community/questions/289/how-to-clear-the-django-session-cache
https://vinta.ws/code/clear-session-in-django.html
http://stackoverflow.com/questions/10289970/add-10-minute-cron-job-to-ubuntu-package


ACTUALIZACIÓN 2015-10-20

Si quieres verificar como se ejecuta el cronjob puedes ver varios archivos a mi me funciono:
$ sudo vi /var/log/syslog

Referencias:
http://unix.stackexchange.com/questions/207/where-are-cron-errors-logged