viernes, 22 de octubre de 2021

Simple Login con KumbiaPHP v 1.1.5

Recientemente tuve necesidad de implementar un Sistema de Login con KumbiaPHP y pude percatarme que prácticamente todas las referencias publicadas en la comunidad de Kumbieros se encuentran bastante desactualizadas; algunas hasta por casi una década. De manera que, me pareció adecuado compartir una sencilla solución que implemente con la versión actual de KumbiaPHP v1.1.5

Para comenzar, vale la pena señalar que no pretendo descubrir el agua tibia, esta solución no es más que la recopilación y conveniente ajuste de varias aportaciones encontradas en diferentes fuentes disponibles en la red. Pero tampoco hagamos alharaca de eso y vayamos a lo concreto.

Construyendo el Sistema de Login

Librería de Autenticación

Si bien es cierto que en KumbiaPHP v1.1.5 contamos con Auth2 e incluso con una implementación propia en Kumbia_Auth para facilitar las tareas de autenticación de usuarios, en esta solución haremos uso de la libreria Auth.

Persistencia de datos

Por supuesto que cada solución tendrá necesidades específicas; pero en nuestro caso, hemos procurado mantener la total simplicidad, de manera que para la persistencia de datos nos resulta suficiente disponer de una tabla como la que podemos generar con el siguiente script

--
-- Estructura de tabla para la tabla usuarios
--
DROP TABLE IF EXISTS usuarios;
CREATE TABLE IF NOT EXISTS usuarios (
id TINYINT(3) NOT NULL AUTO_INCREMENT,
login VARCHAR(50) NOT NULL,
password VARCHAR(50) NOT NULL,
level TINYINT(3) NOT NULL,
PRIMARY KEY (id),
UNIQUE KEY `UK_Usuarios_login` (`login`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
--
-- Volcar la base de datos para la tabla usuarios
--
INSERT INTO usuarios (id, login, password, level) VALUES
(1, 'coloca-aqui-tu-usuario', 'coloca-aqui-tu-password', 1);

Tampoco hemos de fijarnos para este ejercicio en la falta de encriptación de la columna que almacenará los passwords. Aunque por supuesto, es una practica que recomendamos considerar.

Modelo

Nuestra clase de modelo será tan sencilla como

<?php
class Usuarios extends ActiveRecord
{ }

Controlador

En un controlador que como otros autores hemos nombrado PrincipalController hemos implementado las funciones login y logout, junto con el siempre mandatorio index, que en nuestro caso, mantenemos vacío.

Login

La función de login inicia con la verificación de los datos recibidos, antes de enviarlos a la librería Auth para la ejecución de la autenticación.

    public function login(){
        if (Input::hasPost("login","password")){
            $pwd = Input::post("password");
            $usuario=Input::post("login");
 
            $auth = new Auth("model", "class: usuarios", "login: $usuario", "password: $pwd");
            if ($auth->authenticate()) {
                Redirect::to("/");
            } else {
                Flash::error("Falló");
            }
        }
    }

Logout

En la función logout, básicamente destruimos el objeto de la sesión

    public function logout(){
        Auth::destroy_identity();
        Redirect::to("/");
    }

Vista

Por supuesto que, hemos mantenido la capa de vista igualmente simple, aunque claro que necesitaremos construir nuestro formulario de ingreso.

El index.phtml como ya hemos mencionado lo mantenemos vacío. Y aunque presuntamente el logout.phtml pudiera haberse mantenido igualmente vacío, la verdad le hemos colocado…

<?php echo View::content(); ?>

No haremos de ello un tema, solo pasemos a lo interesante. Que por supuesto, es el login.phtml.

En este archivo, además del clásico…

<?php echo View::content(); ?>

Hemos de colocar nuestro formulario

<?php echo F<?php echo Form::open("principal/login"); ?>
<i class="fas fa-user-alt"></i><?php echo Form::label("Usuario","login"); ?>
<?php echo Form::text("login"); ?>
<?php echo Form::label(" "," "); ?>
<i class="fas fa-key"></i><?php echo Form::label("Password","password"); ?>
<?php echo Form::pass("password"); ?>
<?php echo Form::label(" "," "); ?>
<?php echo Form::submit("Ingresar"); ?>
<?php echo Form::close(); ?>

Con lo cual ya tendremos implementado nuestro simple sistema de login en KumbiaPHP v1.1.5, pero ahora toca usarlo.

jueves, 30 de septiembre de 2021

Understanding Sprint Review Meetings

El Sprint Review ES una reunión de colaboración donde se busca “feedback” de todos los presentes, fundamentalmente para crear transparencia sobre el incremento de producto y permitir la adaptación del “Product Backlog” y/o el “Release Plan” si fuera el caso.

El Sprint Review NO ES una reunión donde se aprueban los “Product Backlog Items” terminados. Si sucede de esta manera podría indicar falta de colaboración entre el “Product Owner” y el equipo de desarrollo durante el Sprint.

Durante el Sprint y en forma continua el equipo de desarrollo y el “Product Owner” trabajan de manera conjunta para lograr un incremento de producto al final del Sprint. Durante este proceso, muchos de los ítems fueron validados según los criterios de terminado llegando a esta reunión con la confianza de lo que se ha logrado.

Si en lugar de ello, el proceso implica entregar al equipo de desarrollo las historias refinadas al inicio del Sprint y pedirles que se revise al final del Sprint, se está implementando SWAT, sacrificando la colaboración y el empirismo en favor de un proceso y documentos funcionales, yendo en contra de los valores ágiles.

El objetivo principal del Sprint Review es la actualización del Product Backlog en base al feedback de los participantes

El Sprint Review es importante para incorporar los acontecimientos del negocio en la elaboración/actualización del “Product Backlog” y considerar aquello que es importante para el negocio. El “Product Backlog” es un artefacto vivo y es una salida de esta reunión. El “Product Backlog” adaptado considera el “feedback” de los interesados, los últimos acontecimientos de negocio así como el alineamiento estratégico hacia los objetivos de negocio del producto.

Finalmente, hay que destacar que, El equipo de desarrollo tiene un compromiso con el objetivo del Sprint, no con la cantidad de ítems seleccionados en el Sprint Backlog, mucho menos con un determinado consumo de horas. De manera que, las métricas que bien pudieran incorporarse deben reflejar el impacto de negocio y la satisfacción de los clientes del uso del producto, mismas que sirven para considerar perspectivas que ayuden en la definición/re-definición del “Product Backlog”.

Espero que te haya parecido útil e interesante este artículo.

No olvides visitarme en mi perfil de GitHub: https://github.com/era5mx.

………….

Quiero man.tener.me informado: Seguir en Twitter @eldavid_oficial https://twitter.com/eldavid_oficial

Regálame un ME GUSTA. Y si eres solidario, COMPARTE para que otros puedan aprovecharlo.

sábado, 4 de septiembre de 2021

Vacunados, encargados de llevar la pandemia al siguiente nivel en términos de contagio y mortalidad.

Como lo señalaron oportunamente las autoridades de la OMS, las personas vacunadas, son los generadores de las nuevas cepas que amenazan llevar la pandemia al siguiente nivel en términos de contagio y mortalidad.

La variante C.1.2. contiene una gran cantidad de variaciones relacionadas con una mayor transmisibilidad y una mayor resistencia a las vacunas. La variante C.1.2 ha acumulado varias sustituciones más que lo que cabría esperar, según los antecedentes del índice evolutivo del SARS-CoV-2”, se señala en el estudio. “Esto indica la probabilidad de que estas mutaciones hayan surgido durante un periodo de evolución acelerada en un solo individuo con una infección viral prolongada a través de una evolución conjunta del virus”.

Para ser más claros, han sido incubados en un huesped vacunado.

Para reproducirse, los virus introducen su información genética en una célula huésped, durante cada reproducción se producen pequeños errores de copia, y cada uno de esos errores también cambia el código genético del virus; es decir, que el virus muta.

Las vacunas que se utilizan actualmente ejercen una presión evolutiva sobre el virus. Son principalmente las variantes del virus, que escapan al control del sistema inmunitario gracias a sus mutaciones, las que se seleccionan y siguen siendo capaces de reproducirse.

Esto no significa necesariamente que un virus se vuelva cada vez más letal a través de la selección; pero las últimas conclusiones del Grupo Asesor sobre Amenazas de Virus Respiratorios Nuevos y Emergentes, del Reino Unido, sugieren que la variante no solo es hasta un 70% más infecciosa, sino también más mortal.

Desde que arrancó la vacunación contra la COVID-19 en diciembre de 2020, se han administrado más de 3.970 millones de dosis en todo el mundo, según los datos recogidos por el portal Our World in Data. Así, unas 1.100 millones personas han completado la pauta (14,1% de la población), mientras que más de 2.153 millones (27,6%)han recibido al menos la primera inyección.

Aún así el último informe epidemiológico de la Organización Mundial de la Salud (OMS), publicado el miércoles, mostró que los contagios aumentaron un 8% del 18 al 25 de julio, mientras que las muertes por coronavirus crecieron un 21% en la semana del 19 al 25 de julio en comparación con el período del 12 al 18.

En concreto, estamos a un paso de que la pandemia pase al siguiente nivel tal como lo aseguró Rochelle Walensky, directora de los Centros para el Control y la Prevención de Enfermedades de Estados Unidos (CDC) en la rueda de prensa brindada el martes y donde expresara que la gran inquietud es que el coronavirus podría estar a “unas pocas mutaciones” de escapar al efecto de las vacunas.

El coronavirus podría estar a “unas pocas mutaciones” de escapar al efecto de las vacunas.

Rochelle Walensky, directora de los Centros para el Control y la Prevención de Enfermedades de Estados Unidos (CDC)

Espero que te haya parecido útil e interesante este artículo.

No olvides visitarme en mi perfil de GitHub: https://github.com/era5mx.

………….

Quiero man.tener.me informado: Seguir en Twitter @eldavid_oficial https://twitter.com/eldavid_oficial

Regálame un ME GUSTA. Y si eres solidario, COMPARTE para que otros puedan aprovecharlo.