Veremos como configurar los servidores y clientes para realizar conexiones remotas VNC y RDP.
1. Actualización de Ubuntu Server.
2. VNC configuración del servidor Ubuntu y comprobación de los clientes Windows 11 y aubuntu.Veremos como configurar los servidores y clientes para realizar conexiones remotas VNC y RDP.
1. Actualización de Ubuntu Server.
2. VNC configuración del servidor Ubuntu y comprobación de los clientes Windows 11 y aubuntu.En esta entrada disponemos de varios vídeos dónde podremos ver como configurar algunas reglas de nuestro firewall Opnsense y mucho más...
1. Configuración inicial.
2. Crear DMZ.En este vídeo de seguridad informática veremos como mediante Metasploit y Pretermeter, ejecutar un keylogger en una máquina víctima, y a posteriori ejecutar un ShellReverse para tener acceso al sistema.
Disponemos en este post de unos vídeos de configuración de Apache en Ubuntu. Instalación y configuración, ssl con webmin, sitios 80 y 443.
1. Apache instalación, comandos y configuración.
Estos son unos vídeos de introducción a PrestaShop y a WooCommerce para WordPress.
1. WooCommerce instalación y configuración.
2. PrestaShop instalación.
En esta serie de vídeos podremos ver como realizar y recuperar una imagen del sistema con clonezilla, y como clonar una máquina virtual en VirtualBox.
1. Crear imagen del sistema con Clonezilla.
2. Recuperar imagen del sistema con Clonezilla.
LDAP (Lightweight Directory Access Protocol) es un protocolo estándar que permite a las aplicaciones y sistemas acceder a información almacenada en un directorio, como usuarios, grupos y recursos. En esencia, LDAP actúa como un intermediario para consultar y administrar datos en un directorio centralizado, facilitando la autenticación, autorización y gestión de recursos en una red.
En este post encontráis unos videos que os explican la configuración e instalación de Ldap en Ubuntu Server, preaparción de los clientes Windows 11 y Ubuntu, gestión de unidades organizativas y usuarios, y más cosas.
1. Ldap instalación y configuración.
Disponemos de una serie de vídeos que van desde la instalación de Ubuntu Server, configuración de IP estática, configuración y conexión ssh, compartir archivos scp, tareas programadas cron...
1. Instalación de Ubuntu Server.
En esta entrada encontraremos una serie de vídeos relacionados con Windows Server 2022.
En ellos se describe desde la instalación inicial a la creación de perfiles móviles, carpetas compartidas, directivas de grupo, unir clientes Windows y mucho más.
1. Instalación no gráfica.
Os comparto un par de vídeos que describen el uso básico del editor de vídeo gratuito OpenShot.
1. Descarga e instalación.
En esta entrada se comparten varios vídeos relacionados con: Flashear Bios - Programar Memoria W25Qxxx.
1. Programador USB CH341A.
En Php no se permite la herencia múltiple, sólo se permite la herencia simple.
Una clase sólo puede heredar de una clase padre, para simular la herencia múltiple
podemos usar los traits.
Si quisiera tener dos clases padre, a la segunda clase padre no la definiré
como class, sino como traits.
Y para extender esta segunda clase padre, dentro de la clase hija, definiremos
dentro de la clase hija el trait:
class Persona00{ }
trait Persona01{ }
class Persona02 extendes Persona00{
use Persona01; }
Con esto logramos extender la clase Persona00 y la clase Persona01.
Lo mismo podríamos hacer dentro de un trait para extender otros.
Una de las diferencias entre los traits y las clases es que los traits no se pueden instanciar.
¿Qué es y en qué consiste la programación orientada a objetos?
Se
trata de un paradigma de programación.
Dos grandes grupos o categorías:
Leguajes
de programación orientados a procedimientos y orientados a objetos.
- Programación orientada a procedimientos: cobol, basic…
- Desventajas:
- Unidades de código muy
grandes en aplicaciones complejas.
- Código difícil de descifrar
en aplicaciones complejas.
- Código poco reutilizable.
- Error en una línea,
probable que el programa caiga.
- Difícil de depurar.
¿Qué es una excepción?
Son
un error que ocurre durante la ejecución de un programa.
La sintaxis es correcta, pero durante la ejecución ha ocurrido algo inesperado.
La solución son la captura o control de excepción.
Consiste en decirle al programa, intenta realizar esta operación y si no puedes
ejecutar el resto del programa.
Los generadores extraen valores de una función, que se van a almacenar en objetos iterables. Esto quiere decir que estos objetos los vamos a poder recorrer con un bucle, iteradores o el método next.
Estos valores se almacenan de uno en uno y permanecen en un estado de espera
(pausa o suspensión de estado) hasta que se solicita el siguiente.
En una función en lugar de utilizar la instrucción return utilizamos la instrucción
yield.
En una función tradicional que construya una lista de valores, la instrucción
return nos devuelve todos los valores.
Pero la instrucción yield, sólo nos devuelve el primer valor y se mantiene a la
espera.
El control de flujo retorna a la llamada a la función y la llamar de nuevo a la
función nos retorna el segundo valor, por eso decimos que se generan objetos
iterables.
La diferencia estriba en que se nos devuelven los valores uno a uno, dentro de
un objeto iterable.
- Las ventajas:
- Es más eficiente que una función tradicional, menos consumo de memoria y
recursos.
- Para trabajar con listas de valores infinitos.
La instrucción Continue lo que hace es tras evaluar una condición y se esta se cumple, ignorar el código que se ha de ejecutar a continuación y comenzar la siguiente vuelta de bucle.
Si la condición a evaluar no se cumple se ejecuta el código dentro del bucle normalmente.
While es un bucle indeterminado, pues no
sabemos cuántas veces ejecutará el código en su interior.
Sintaxis:
Palabra reservada While.
Condición que se ha de cumplir, exactamente igual que un condicional.
Mientras la condición sea verdadera el bucle se ejecuta.
En el momento que la condición pasa a ser falsa, el bucle deja de ejecutar el
código en su interior y continuaría la ejecución del flujo del programa.
While condición:
Código a
ejecutar.
El objetivo del bucle es repetir una serie de código una serie de veces.
Existen dos tipos de bucles, los determinados y los indeterminados.
Un bucle consta de dos partes, la declaración del bucle y el cuerpo.
En el flujo, leerá la declaración del bucle y luego leerá las líneas de código.
Si es un bucle determinado leerá el código que se encuentre dentro del bucle un
número determinado de veces, un número concreto.
Si es un bucle indeterminado puede ejecutarlo un número de veces o un bucle
infinito.
El elemento a recorrer puede ser una lista, una tupla, un texto…
La sintaxis es:
for
variable in elemento_a_recorrer:
(Identación)Cuerpo del bucle.
(Identación)Cuerpo del bucle.
(Identación)Cuerpo del bucle.
Estructuras de control de flujo o condicionales.
Tenemos dos grandes grupos, los condicionales y los bucles.
El flujo de ejecución de un programa es el orden en que se ejecutan sus
instrucciones.
El flujo normalmente es de arriba hacia abajo, aunque este flujo se puede ver
alterado entre otras causas por las estructuras de control de flujo.
De tal forma que el programa al llegar a la estructura condicional, a la
estructura de control de flujo, evalúa la condición y ejecuta el código que
está en su interior, dependiendo de que esta condición se cumpla o no.
Y cuando termina de ejecutar las instrucciones, continua ejecutando las
siguientes instrucciones después del condicional.
De un lenguaje a otro lo que cambia es la sintaxis del cada lentuaje.
La diferencia entre los diccionarios y las estructuras de almacenamiento de datos que hemos visto anteriormente, como las listas, tuplas o conjuntos, es que estos almacenan los datos con una estructura de clave:valor.
Similar a un array bidimensional o asociativo en php.
La clave es única y podemos almacenar cualquier tipo de valor, incluso tuplas, listas y otros diccionarios.
La sintaxis: Los elementos van entre llaves igual que los set, conjuntos, pero con estructura de clave:valor.
nombre={“Clave01”:”Valor01”, “Clave02”:”Valor02”,…}
Acceder a un elemento del diccionario.
print(nombre[“clave”])
Acceder a un diccionario completo.
print(nombre)
Los sets o conjuntos se utilizan para almacenar varios valores en una variable.
Los valores se establecen entre llaves. conjunto={“elemento1”, “elemento2”,
“elemento3”,…}
Los elementos son no ordenados, inmutables, no permiten valores duplicados.
No ordenado significa que los elementos en un conjunto no tienen un orden
definido.
Los elementos pueden aparecer en un orden diferente cada vez que los usas, y no
puede ser referido por índice o clave.
Los elementos del conjunto son inmutables, lo que significa que no podemos
cambiar los elementos después de la creación del conjunto.
Una vez que se crea un conjunto, no puede cambiar sus elementos, pero puede
eliminar elementos y añadir nuevos elementos.
Los elementos del conjunto pueden ser de cualquier tipo de dato:
set1 = {"abc", 34, True,
40, "male"}
Las tuplas son listas inmutables, no se pueden modificar después de su creación.
Ni se pueden eliminar, ni añadir, modificar o mover elementos.
No permiten realizar búsquedas, pero
permiten comprobar si un elemento se encuentra en una tupla.
Permiten extraer rangos, pero estos son
una tupla nueva.
Una tupla unitaria es una tupla con un
solo elemento tupla=(“elemento”,)
¿Qué beneficios tienen las tuplas?
- Son más rápidas.
- Ocupan menos espacio en memoria.
- Mayor optimización.
- Nos permiten formatear strings, o cadenas.
- Pueden utilizarse como clave de un diccionario.
Las listas es el equivalente al array en otros lenguajes.
Las listas nos permiten guardar diferentes
tipos de valores, cosa que los array no.
Las listas se pueden expandir dinámicamente, añadiendo nuevos valores.
Sintaxis de una lista:
nombre_lista=[elemento1, elemento2, elemento3,…].
Pueden tener ningún elemento, una lista
vacía, un elemento o varios separados por comas…
Las funciones son unas funciones básicas en cualquier lenguaje de programación.
Una función son varias líneas de código
agrupadas, formando un bloque, que tienen una tarea, que a su vez se pueden
dividir en tareas más pequeñas.
Pueden devolver o no valores, pueden tener o no parámetros o argumentos, a las funciones también se les denomina métodos.
Tipos de datos:
- Numéricos: Enteros (int) edad = 35
Coma
Flotante (float)
Complejos
- Texto:
- Booleanos: True. False.
>>> prompt es el punto donde dentro de nuestro editor donde introduciremos nuestras instrucciones en Python.
Una instrucción sería:
>>> print(“Hola Mundo”) la podemos definir como una línea de código.
Una de las características de Python es que el final de las instrucciones en Python no llevan ; al contrario que en otros lenguajes de programación.
Sólo hemos de pulsar la tecla intro para ejecutar el código y como vemos el IDLE nos muestra el resultado.
https://www.python.org/downloads/ Para las descargas.
- Descargamos la última versión, ejecutamos el asistente y seguimos la instalación típica de Windows.
Es importante en la instalación decirle que agregue Python al Path, para que podamos trabajar con phyton desde la consola, independientemente del directorio donde nos encontremos en ese momento.
Tras finalizar la instalación nos aparece una ventana dándonos la opción de deshabilitar el límite de longitud del path que trae Windows por defecto que es de 260 caracteres, esto sería opcional, aunque no necesario.
Ya podremos ver en todos los programas los paquetes instalados de Python, incluido un IDLE que no es más que una ventana de consola.
Podremos comprobar las variables de entrono o añadir las rutas de instalación y scripts de Python:
Cuando generamos las interfaces hemos de generar todos los métodos como públicos.
Si queremos desarrollar un método ya no podremos utilizar las interfaces, tendremos que utilizar las clases abstractas.
Estas se comportan de una manera similar a las interfaces, pero nos permiten definir los métodos como protegidos o extender la funcionalidad de algún método.
Para crear una clase abstracta lo hacemos igual que si creásemos una clase normal, pero delante escribimos abstract.
abstract class MiClaseAbstracta{
abstract protected function setNombre($nombre);
abstract protected function getNombre();
}
Las interfaces son unas plantillas que obligan a los desarrolladores a implementar una estructura y unos métodos de forma obligatoria.
Permite una clase con funciones definidas, pero sin desarrollarla que obliga a todas las clases que lo implemente a tener estos métodos como mínimo.
Dentro de la clase que implemente las interfaces podemos definir los métodos que queramos, pero los definidos por las interfaces son obligatorios.
Con la palabra clave public, lo que hacíamos era darles una visibilidad pública a nuestras propiedades.
Podríamos acceder a nuestras propiedades desde cualquier lado, por medio de un objeto instanciado o un heredado de una clase padre.
Cuando no definimos si una propiedad o método es de un tipo o de otro, php entiende por defecto que es de tipo público.
Existen tres formas de declarar nuestras propiedades, pública, protegida y privada.
Este proceso se define como encapsulamiento.
Si declaramos una propiedad como protegida o privada no vamos a poder acceder directamente a su valor.
Los objetos, como persona, van a tener características diferentes y necesitamos almacenar una información distinta.
Necesitamos crear subclases que heredan las características principales de la clase padre, pero podemos agregarle más características.
Para esto decimos que se extienden de la clase padre.
class Mallorca extends alumno{ }
Con esto logramos que esta clase herede todas las propiedades de la clase alumno y todas las propiedades o métodos.
Los objetos se crean a partir de clases y las clases vienen a ser como plantillas.
Vamos a crear objetos de tipo persona que van a tener un nombre, apellido, edad, y lo primero que vamos a hacer es construir esa plantilla.
Podemos decir que programar es resolver un problema utilizando el poder de procesamiento que tiene nuestra computadora.
Un paradigma es una forma en que enfrentamos la forma de resolver un problema. Si quisiéramos encender una hoguera podríamos hacerlo de muchas maneras.
El paradigma procedimental consiste en ejecutar una sentencia tras otra de una manera ininterrumpida, con un flujo de programa de arriba hacia abajo y si quisiésemos reutilizar un código podríamos generar una función e ir ejecutándolo las veces necesarias.
Este paradigma funciona bien cuando estamos trabajando con programas pequeños, pero nos dará problemas cuando estamos utilizando programas grandes.