Como el titulo lo indica esta es una pequeña lista (sin ningún orden en especifico) de sitios que ofrecen cursos en linea de manera gratuita, los enlaces en negrita utilizan HTTPS, espero les guste.

Actualizado el 23/03/19

Si encuentras algún enlace roto, fraudulento o quieres sugerir algún sitio no dudes en colocarlo en los comentarios. Adicionalmente los enlaces no disponibles o que contengan malware se colocan como tachados temporalmente y si no se corrige el problema se eliminan en la siguiente actualización de la publicación.

Saludos…

NOTA: No todos los sitios incluyen certificado.

En seguridad de la información, ciencias de la computación y otros campos, el principio de mínimo privilegio (también conocido como el principio de menor autoridad) indica que en una particular capa de abstracción de un entorno computacional, cada parte (como ser un proceso, un usuario o un programa, dependiendo del contexto) debe ser capaz de acceder solo a la información y recursos que son necesarios para su legítimo propósito.

Operar bajo el principio del menor privilegio, tal como su nombre lo indica, parte de la premisa de otorgar los permisos necesarios y suficientes a un usuario para desempeñar sus actividades, por un tiempo limitado, y con el mínimo de derechos necesarios para sus tareas. Una práctica que se puede implementar en cuanto al uso de la tecnología, con el objetivo de procurar la seguridad de la información, así como nuestra privacidad.

La asignación de permisos a un usuario, más allá de los derechos necesarios para llevar a cabo una acción determinada, puede permitirle llevar a cabo acciones para las cuales no está autorizado, como acceder, obtener o modificar información. Además, los privilegios deben estar considerados para las entidades o servicios puedan cumplir con sus objetivos, sin comprometer la privacidad o la seguridad; sin embargo, en esta tarea, recae una importante responsabilidad de los usuarios para conocer y otorgar los permisos necesarios y suficientes.

Ejemplo de Control de Acceso

Si contratas a un jardinero, te encargas que tenga acceso a tu jardín, pero no a tu habitación, sala de estar o a tu oficina. Y además de esto, concedes su acceso por el tiempo que estará trabajando en tu propiedad (ejemplo, entre las 10am y las 2pm). Esta idea es bastante sencilla, le brindas a una persona los permisos necesarios para que realice su trabajo, por el tiempo que lo necesita.

Los beneficios de este principio incluyen:

  • Mejor estabilidad del sistema: Cuando el código se limita en el alcance de los cambios que puede realizar en un sistema, es más fácil para poner a prueba sus posibles acciones e interacciones con otras aplicaciones. En la práctica, por ejemplo, las aplicaciones que se ejecutan con derechos restringidos no tendrán acceso para realizar operaciones que podrían colgar una máquina o afectar negativamente a otras aplicaciones que se ejecutan en el mismo sistema.
  • Mejor seguridad del sistema: Cuando el código se limita en las acciones de todo el sistema se puede realizar, vulnerabilidades en una aplicación no se pueden utilizar para explotar el resto de la máquina. Por ejemplo, Microsoft afirma que “se ejecuta en modo de usuario estándar ofrece a los clientes una mayor protección contra el daño accidental a nivel del sistema causado por ataques destructores y malware, como rootkits, spyware y virus indetectables”.
  • La facilidad de despliegue: En general, el menos privilegios de una aplicación requiere más fácil es para desplegar dentro de un entorno más amplio. Esto por lo general los resultados de los dos primeros beneficios, las aplicaciones que instalan controladores de dispositivos o requieren privilegios de seguridad elevados suelen tener medidas adicionales que intervienen en su implementación, por ejemplo, en Windows una solución sin controladores de dispositivos se puede ejecutar directamente sin necesidad de instalación, mientras que los controladores de dispositivo deben ser instalado por separado utilizando el servicio de instalación de Windows con el fin de otorgar privilegios elevados.

El perceptrón dentro del campo de las redes neuronales tiene dos acepciones. Puede referirse a un tipo de red neuronal artificial desarrollada por Frank Rosenblatt y, dentro de esta teoría emitida por Rosenblatt, también puede entenderse como la neurona artificial o unidad básica de inferencia en forma de discriminador lineal, a partir de lo cual se desarrolla un algoritmo capaz de generar un criterio para seleccionar un sub-grupo a partir de un grupo de componentes más grande. La limitación de este algoritmo es que si dibujamos en un plot estos elementos, se deben poder separar con un hiperplano únicamente los elementos “deseados” discriminándolos (separándolos) de los “no deseados”. El perceptrón puede utilizarse con otros perceptrones u otro tipo de neurona artificial, para formar redes neuronales más complicadas.

El perceptrón usa una matriz para representar las redes neuronales y es un discriminador terciario que traza su entrada X (un vector binario) a un único valor de salida f(x) (un solo valor binario) a través de dicha matriz.

Donde W es un vector de pesos reales y WX es el producto escalar (que computa una suma ponderada). U es el ‘umbral’, el cual representa el grado de inhibición de la neurona, es un término constante que no depende del valor que tome la entrada.

El valor de f(x) (0 o 1) se usa para clasificar X como un caso positivo o un caso negativo, en el caso de un problema de clasificación binario. El umbral puede pensarse de como compensar la función de activación, o dando un nivel bajo de actividad a la neurona del rendimiento. La suma ponderada de las entradas debe producir un valor mayor que U para cambiar la neurona de estado 0 a 1.

Aprendizaje

En el perceptrón, existen dos tipos de aprendizaje, el primero utiliza una tasa de aprendizaje mientras que el segundo no la utiliza. Esta tasa de aprendizaje amortigua el cambio de los valores de los pesos.

El algoritmo de aprendizaje es el mismo para todas las neuronas, todo lo que sigue se aplica a una sola neurona en el aislamiento. Se definen algunas variables primero:

  • El x(j) denota el elemento en la posición J en el vector de la entrada.
  • El w(j) el elemento en la posición J en el vector de peso.
  • El Y denota la salida de la neurona.
  • El δ denota la salida esperada.
  • El α es una constante tal que 0 < α < 1

Los dos tipos de aprendizaje difieren en este paso. Para el primer tipo de aprendizaje, utilizando tasa de aprendizaje, utilizaremos la siguiente regla de actualización de los pesos:

  • w(j)′ = w(j) + α(δ − y) x(j)

Para el segundo tipo de aprendizaje, sin utilizar tasa de aprendizaje, la regla de actualización de los pesos será la siguiente:

  • w(j)′ = w(j) + (δ − y) x(j)

Por lo cual, el aprendizaje es modelado como la actualización del vector de peso después de cada iteración, lo cual sólo tendrá lugar si la salida Y difiere de la salida deseada δ. Para considerar una neurona al interactuar en múltiples iteraciones debemos definir algunas variables más:

  • Xi denota el vector de entrada para la iteración i
  • Wi denota el vector de peso para la iteración i
  • Yi denota la salida para la iteración i
  • Dm = {(x1, y1), … ,(xm, ym)} denota un periodo de aprendizaje de M iteraciones.

En cada iteración el vector de peso es actualizado como sigue:

  • Para cada pareja ordenada (X, Y) en Dm = {(X1, Y1), … ,(Xm, Ym)}
  • Pasar (Xi, Yi, Wi) a la regla de actualización w(j)′ = w(j) + α(δ − Y) x(j)

El periodo de aprendizaje Dm se dice que es separable linealmente si existe un valor positivo Y y un vector de peso W tal que: Yi ⋅ (⟨W, Xi⟩ + U) > Y para todos los i.

Novikoff probó que el algoritmo de aprendizaje converge después de un número finito de iteraciones si los datos son separables linealmente y el número de errores está limitado a:

Sin embargo si los datos no son separables linealmente, la línea de algoritmo anterior no se garantiza que converja.


Perceptrón multicapa

El perceptrón multicapa es una red neuronal artificial formada por múltiples capas, esto le permite resolver problemas que no son linealmente separables, lo cual es la principal limitación del perceptrón. El perceptrón multicapa puede ser totalmente o localmente conectado. En el primer caso cada salida de una neurona de la capa “i” es entrada de todas las neuronas de la capa “i+1”, mientras que en el segundo cada neurona de la capa “i” es entrada de una serie de neuronas (región) de la capa “i+1”.

Las capas pueden clasificarse en tres tipos:

  • Capa de entrada: Constituida por aquellas neuronas que introducen los patrones de entrada en la red. En estas neuronas no se produce procesamiento.
  • Capas ocultas: Formada por aquellas neuronas cuyas entradas provienen de capas anteriores y cuyas salidas pasan a neuronas de capas posteriores.
  • Capa de salida: Neuronas cuyos valores de salida se corresponden con las salidas de toda la red.

La propagación hacia atrás (también conocido como retropropagación del error o regla delta generalizada), es un algoritmo utilizado en el entrenamiento de estas redes, por ello, el perceptrón multicapa también es conocido como red de retropropagación.

Limitaciones:

  • El Perceptrón Multicapa no extrapola bien, es decir, si la red se entrena mal o de manera insuficiente, las salidas pueden ser imprecisas.
  • La existencia de mínimos locales en la función de error dificulta considerablemente el entrenamiento, pues una vez alcanzado un mínimo el entrenamiento se detiene aunque no se haya alcanzado la tasa de convergencia fijada.

Cuando caemos en un mínimo local sin satisfacer el porcentaje de error permitido se puede considerar: cambiar la topología de la red (número de capas y número de neuronas), comenzar el entrenamiento con unos pesos iniciales diferentes, modificar los parámetros de aprendizaje, modificar el conjunto de entrenamiento o presentar los patrones en otro orden.

Hace unos días durante una entrevista de trabajo observe como las personas tienden a pensar que contratar a un informático significa que este puede y debe hacer todo lo relacionado con computadoras dentro de la organización, lo cual nos llevas a sobrecargas de trabajo e incumplimiento de fechas de entrega.

Para aclarar un poco el panorama decidí escribir este post con algunas definiciones que considero importantes:

Front-end y Back-end: Son términos que se refieren a la separación de intereses entre una capa de presentación y una capa de acceso a datos, respectivamente. Pueden traducirse al español el primero como interfaz, frontal final o frontal y el segundo como motor, dorsal final o zaga,​ aunque es común dejar estos términos en inglés.

En diseño de software el front-end es la parte del software que interactúa con los usuarios y el back-end es la parte que procesa la entrada desde el front-end. La separación del sistema en front-ends y back-ends es un tipo de abstracción que ayuda a mantener las diferentes partes del sistema separadas. La idea general es que el front-end sea el responsable de recolectar los datos de entrada del usuario, que pueden ser de muchas y variadas formas, y los transforma ajustándolos a las especificaciones que demanda el back-end para poder procesarlos, devolviendo generalmente una respuesta que el front-end recibe y expone al usuario de una forma entendible para este. La conexión del front-end y el back-end es un tipo de interfaz.

En diseño web (o desarrollo web) hace referencia a la visualización del usuario navegante por un lado (front-end), y del administrador del sitio con sus respectivos sistemas por el otro (back-end).


DBA: Un administrador de bases de datos (también conocido como DBA, en inglés database administrator) es aquel profesional que administra las tecnologías de la información y la comunicación, siendo responsable de los aspectos técnicos, tecnológicos, científicos, inteligencia de negocios y legales de bases de datos, y de la calidad de datos.

Sus tareas incluyen las siguientes:

  • Implementar, dar soporte y gestionar bases de datos corporativas.
  • Crear y configurar bases de datos relacionales.
  • Ser responsables de la integridad de los datos y la disponibilidad.
  • Diseñar, desplegar y monitorizar servidores de bases de datos.
  • Diseñar la distribución de los datos y las soluciones de almacenamiento.
  • Garantizar la seguridad de las bases de datos, realizar copias de seguridad y llevar a cabo la recuperación de desastres.
  • Planificar e implementar el aprovisionamiento de los datos y aplicaciones.
  • Diseñar planes de contingencia.
  • Diseñar y crear las bases de datos corporativas de soluciones avanzadas.
  • Analizar y reportar datos corporativos que ayuden a la toma de decisiones en la inteligencia de negocios.
  • Producir diagramas de entidades relacionales y diagramas de flujos de datos, normalización esquemática, localización lógica y física de bases de datos y parámetros de tablas.

El control de tecnologías de bases de datos y las matemáticas permite al DBA rendir informes, realizar reportes sobre cualquier proceso industrial y participar de forma activa en procesos avanzados de desarrollo, consolidando las capacidades propias de un profesional de tecnologías de la información y un ingeniero especialista.


Sysadmin: Un Administrador de sistemas es la persona que tiene la responsabilidad de implementar, configurar, mantener, monitorizar, documentar y asegurar el correcto funcionamiento de un sistema informático, o algún aspecto de éste.

El administrador de sistemas tiene por objeto garantizar el tiempo de actividad (uptime), rendimiento, uso de recursos y la seguridad de los servidores que administra de forma dinámica.

En las organizaciones que cuentan con diversos sistemas informáticos, se torna más compleja la administración. De esta forma, las funciones del administrador de sistemas se dividen en roles: administrador de servidores, de bases de datos, de redes, de correo electrónico, de servidores web, de seguridad, de respaldo etc. Cada uno con sus correspondientes tareas específicas.

En muchas organizaciones, la tarea de un Administrador de Sistemas se extiende a la planificación de crecimiento de cada sistema, como también la importante tarea de copia de respaldo de la información contenida en ellos.


Netadmin: Los administradores de red son básicamente el equivalente de red de los administradores de sistemas: mantienen el hardware y software de la red.

Esto incluye el despliegue, mantenimiento y monitoreo del engranaje de la red: switches, routers, cortafuegos, etc. Las actividades de administración de una red por lo general incluyen la asignación de direcciones, asignación de protocolos de ruteo y configuración de tablas de ruteo así como, configuración de autenticación y autorización de los servicios.

Frecuentemente se incluyen algunas otras actividades como el mantenimiento de las instalaciones de red tales como los controladores y ajustes de las computadoras e impresoras. A veces también se incluye el mantenimiento de algunos tipos de servidores como VPN, sistemas detectores de intrusos, etc.

Los analistas y especialistas de red se concentran en el diseño y seguridad de la red, particularmente en la resolución de problemas o depuración de problemas relacionados con la red. Su trabajo también incluye el mantenimiento de la infraestructura de autorización a la red.


Devops: es un acrónimo inglés de development (desarrollo) y operations (operaciones), que se refiere a una cultura o movimiento centrado en la comunicación, colaboración e integración entre desarrolladores de software y los profesionales en las tecnologías de la información (IT). Automatiza el proceso de entrega del software y los cambios en la infraestructura. Su objetivo es ayudar a crear un entorno donde la construcción, prueba y lanzamiento de un software pueda ser más rápido y con mayor fiabilidad.

Las empresas con entregas (releases) muy frecuentes podrían requerir conocimientos de DevOps. Flickr desarrolló un sistema DevOps para cumplir un requisito de negocio de diez despliegues al día. A este tipo de sistemas se les conoce como despliegue continuo (continuous deployment) o entrega continua (continuous delivery), y suelen estar asociados a metodologías lean startup.

En ciencias de la computación se dice que una función o expresión tiene efecto colateral, efecto de lado o efecto secundario si esta, además de retornar un valor, modifica el estado de su entorno. Por ejemplo, una función puede modificar una variable global o estática, modificar uno de sus argumentos, escribir datos a la pantalla o a un archivo, o leer datos de otras funciones que tienen efecto secundario. Los efectos secundarios frecuentemente hacen que el comportamiento de un programa sea más difícil de predecir.

La programación imperativa generalmente emplea funciones con efecto secundario para hacer que los programas funcionen, la programación funcional en cambio se caracteriza por minimizar estos efectos.

En el diseño de CPU las instrucciones con efecto colateral son aquellas instrucciones que modifican valores internos del CPU de forma no explícita – de hecho, la instrucción ADD puede o no modificar otros registros (carry, zero, overflow, etc). Esto causa un problema cuando se diseña un CPU que usa “pipeline” de instrucciones y soporta instrucciones con efecto colateral. Se debe prestar especial cuidado para evitar este riesgo.

Transparencia referencial

Que una función no tenga efecto secundario o colateral es una condición necesaria pero no suficiente para que sea transparente referencialmente. Transparencia referencial significa que una expresión (por ejemplo, una llamada a una función) puede ser reemplazada por su valor; esto requiere que la expresión no tenga efecto colateral y que sea pura, o sea, que siempre retorne el mismo resultado con la misma entrada.