├── .gitignore ├── ALGORITMS └── SORT │ └── note.md ├── ARCHITECTURE └── BASIC │ └── note.md ├── BACK_END ├── API_REST │ └── note.md ├── JAVA │ └── TEST │ │ └── note.md ├── JAVASCRIPT │ └── ecmas6.md ├── NODE │ └── note.md ├── REGULAR_EXPRESSIONS │ └── note.md └── micro_servicios │ └── note.md ├── BD ├── BD │ └── apuntes.md ├── BDBASIC │ └── apuntes.md ├── BDNoSQL │ └── notes.md ├── GRAPHQL │ └── note.md └── MONGO │ └── note.md ├── CRECIMIENTO ├── ESTRATEGIAS │ └── note.md ├── GESTIONTIEMPO │ └── note.md └── PRODUCTIVIDAD │ └── note.md ├── English ├── B1 │ └── notes.md ├── B1Plus │ └── note.md ├── Curso de Inglés Práctico: Gramática │ └── note.md └── note.md ├── FRONT_END ├── HTMLCSS │ └── note.md ├── PREPROCESADORES │ └── note.md └── REACT │ └── PWA │ └── note.md ├── README.md ├── SERVER ├── AWS │ └── note.md ├── DIGITALOCEAN │ └── note.md └── LINUX_SERVER │ └── note.md ├── devops ├── Docker │ └── note.md ├── note.md └── swarm │ └── note.md └── requirements └── notes.md /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store -------------------------------------------------------------------------------- /ALGORITMS/SORT/note.md: -------------------------------------------------------------------------------- 1 | # Algoritmos de ordenamiento 2 | Tanto en la computación como en matemáticas un algoritmo de ordenamiento es un algoritmo que pone los de una lista o un vector en una secuencia dada por una relación de orden. 3 | 4 | ## Bubble sort 5 | Ordenamiento de burbuja que funciona revisando cada elemento de la lista que va ser ordenado con el siguiente intercambiandolos si están en un orden equivocado. 6 | 7 | ```python 8 | def bubble_sort(A): 9 | size_array = len(A) # c0 = 1 10 | 11 | for index_i in range(size_array):# c1 = n 12 | swap = False # c2 = 1 13 | for index_j in range(0, size_array - index_i - 1): # c3 = n^2 14 | if A[index_j] > A[index_j + 1]: # c4 = 1 15 | A[index_j], A[index_j + 1] = A[index_j + 1], A[index_j] # c5 = 1 16 | swap = True # c6 = 1 17 | 18 | if not swap: # c7 = 1 19 | break 20 | 21 | if __name__ == "__main__": 22 | array = [2,78] 23 | bubble_sort(array) 24 | 25 | # T(n) = c0 + c1*n + c2 + c3*n + c4 + c5 + c6 + c7 26 | # T(n) = c3*n^2 + c1*n + c0 + c2 + + c4 + c5 + c6 + c7 27 | # T(n) = n^2 + n 28 | # T(n) = n^2 29 | 30 | # Time complexity = O(n^2) 31 | # Space complexity = O(1) 32 | ``` 33 | 34 | ## Selection Sort 35 | 36 | Algoritmo que ordena una matriz al encontrar repetidamente el elemnto mínimo (Considerando el orden acsendente) de la parte no ordenada y lo pone al principio. 37 | 38 | El algortimo mantiene 2 sub arrays. 39 | * El array ordenado 40 | * El array restante que no esta desordenado. 41 | 42 | En cada iteración el elemento mínimo del arreglo desordenado se toma y se coloca el el sub array ordenado. 43 | 44 | Considere los siguientes pasos: 45 | 46 | Encontrar el elemnto mínimo y colocarlo al inicio. 47 | ``` 48 | [64 25 12 22 11] 49 | [11 25 12 22 64] 50 | [11 12 22 25 64] 51 | ``` 52 | 53 | 54 | ```python 55 | def selection_sort(A): 56 | size_array = len(A) # c0 = 1 57 | index_i = 0 # c1 = 1 58 | 59 | for index_i in range(size_array): # c2 = n 60 | low_index = index_i # c3 = 1 61 | 62 | for index_j in range(index_i + 1, size_array): # c4 = n^2 63 | if A[index_j] < A[low_index]: # c5 = 1 64 | low_index = index_j # c6 = 1 65 | 66 | A[index_i], A[low_index] = A[low_index], A[index_i] # c7 = 1 67 | 68 | if __name__ == "__main__": 69 | A = [200,10000,12,35,7,8,9,2,4] 70 | selection_sort(A) 71 | 72 | # T(n) = c0 + c1 + c2*n + c3 + c4*n^2 + c5 + c6 + c7 73 | # T(n) = c4*n^2 + c2*n + c0 + c1 + c3 + c5 + c6 + c7 74 | # T(n) = n^2 + n 75 | # T(n) = n^2 76 | 77 | # Time complexity = O(n^2) 78 | # Space complexity = O(1) 79 | ``` -------------------------------------------------------------------------------- /ARCHITECTURE/BASIC/note.md: -------------------------------------------------------------------------------- 1 | # Fundamentos de arquitectura de software 2 | 3 | ¿Cómo la arquitectura esta envuelata en el desarrollo de software? 4 | 5 | ## Proceso de desarrollo de software 6 | 7 | #### Etapas de proceso de desarrollo 8 | En el desarrollo de software tradicional tenía etapas muy marcadas donde la salida de una etapa representaba la entrada de otra. 9 | 10 | * Análisis de requerimiento: Todo surge a partir de un problema del cual debemos de entender cómo se debe de resolver, ahora en este problema pude existir requerimientos funcionales y no funcionales. 11 | * Diseño de la solución: Análisis profundo del problema del cual debemos obtener las posibles soluciones bien detalladas utilizando modelos. 12 | * Desarrollo y evolución: Implementación de la solución y evaluar el funcionamiento de este, al final tendremos un producto u artefacto de software. 13 | * Despliegue: Se necesita de infraestructura para poder poner el producto en linea, por ejemplo servidores web, balanceadores. 14 | * Mantenimiento y evolución: Desarrollo + Despliegue + Mantenimiento, esta etapa se mantienen hasta que el producto deja de ser necesario. 15 | 16 | #### Dificultades en el desarrollo de software 17 | En la etapa de análisis y diseño nos concentramos en los problemas que queremos resolver, estos problemas de dividen en 2 grandes tipos de problemas, esenciales y accidentales. 18 | 19 | Los problemas esenciales se dividen en 4, que tratan sobre entender el concepto que vamos a resolver: 20 | * Complejidad: Cuando el problema es complejo. 21 | * Conformidad: En qué contexto se va a utilizar. 22 | * Tolerancia al cambio: Va a poder cambiarse y si podemos adaptarnos a los cambios. 23 | * Invisibilidad: El software no es tangible ya que su forma esta plasmada en código. 24 | 25 | * Problemas Accidentales: esta basada prácticamente en la infraestructura a utilizar por ejemplo tecnologías, lenguajes, frameworks etc. 26 | 27 | * Lenguajes de alto nivel 28 | * Multi-procesamiento 29 | * Entornos de programación 30 | 31 | *No hay un proceso que pueda solucionar un problema esencial* 32 | 33 | * Si la solución es muy compleja, tal vez la opción es no desarrollar y mejor comprar software. 34 | * No desarrollar, Aprovechar Open source: utilizar módulos ya desarrollados y personalizar. 35 | * Metodologías ágiles, la idea es obtener feedback muy rápido. Se obtiene un prototipo rápido: la idea es obtener feedback de forma muy rápido para saber si estamos solucionando el problema. 36 | * Desarrollo evolutivo: en donde a partir de un producto pequeño podemos iterarlo para obtener algo más complejo. 37 | * Grandes diseñadores: Diseñar un problema con gran calidad. 38 | 39 | #### Roles 40 | Es importante diferenciar del ROL y puesto de trabajo ya que hay roles que pueden ser desarrolladas por la misma persona. 41 | 42 | * Experto del dominio: Experto en el negocio que nos ayuda a entender el problema a resolver, stakeholders en las metodologías ágiles. 43 | * Administrador de sistemas DEV OPS: Rol de operaciones y desarrollo, SRE (Site Reability, Enginier). 44 | * Equipo de desarrollo: QA, Testing, Desarrolladores, Arquitectos todos los involucrados en el desarrollo 45 | * Gestor de proyecto facilitador: Lleva al equipo para el desarrollo en proceso iterativo. 46 | 47 | 48 | ## Introducción a la arquitectura de software 49 | #### ¿Qué es la arquitectura de software? 50 | * La estructura del sistema esta compuesta por elementos de software, sus propiedades visibles y sus relaciones (Bass, Clemment, Kazman 2003). 51 | * Conjunto de desiciones (Theory and Practice 2010). 52 | * Cualquier cosa importante (Fowler 2002). 53 | 54 | #### Importancia de la comunicación Ley de Conway 55 | Cualquier organización que diseña un sistema producirá un diseño cuya estructura es una copia de la estructura de comunicación de la organización. 56 | 57 | #### Objetivos del arquitecto 58 | El arquitecto conecta a todos los stakeholder con el sistema a construir, analizando los requeriemientos de los stakeholder. 59 | * Cliente: Entregas, respetando tiempos de entrega y costos 60 | * Manager: Cumplir con requerimientos del cliente, crear equipos de trabajo auto gestionables. 61 | * DEV: Que se sea fácil de desarrollar y mantener. 62 | * Usuario: Que el producto cumpla con el objetivo. 63 | * Tester QA: Que el producto sea sencillo de probar. 64 | 65 | El arquitecto es el encargado de tomar las decisiones para que el impacto del diseño sea agradable para todos los involucrados. 66 | 67 | #### Arquitectura y metodologias 68 | Metodología tradicional: diseñar solución a gran escala. 69 | Metodología ágil: emerge de un equipo autogestionado. 70 | 71 | ## Análisis de requerimientos 72 | 73 | #### Entender el problema 74 | Comprender el problema, lo importante es separar la comprensión de la propuesta de solución y debemos evitar mezclarlo con la parte tecnológica, esto no debe de influir en la propuesta de solución. 75 | 76 | Se debe de separar en espacio del problema y espacio de la solución. 77 | 78 | Espacio del problema: saber lo que voy a resolver sin entrar en el cómo. 79 | * Idea 80 | * Criterios de de éxito 81 | * Historias de usuarios 82 | 83 | Espacio de la solución: Entra en el detalle del como "detalles técnicos". 84 | * Diseño 85 | * Desarrollo 86 | * Evaluación 87 | * Criterios de aceptación 88 | * Despliegue 89 | 90 | #### Requerimientos 91 | Una vez comprendido el espacio del problema y de solución vamos a la parte del requerimiento. 92 | 93 | Requerimiento de Producto: ¿Qué es lo que el producto necesita?. 94 | Requerimiento de producto se divide en 3: 95 | * Capa de negocio: Reglas de negocio que alimentan a los requerimientos. [Requerimientos de negocio, Reglas de negocio] 96 | * Capa de usuario: Tiene que ver como el usuario se desenvuelve utilizando el sistema.[Requerimientos de usuario, Atributos de calidad, Requerimientos No funcionales] 97 | * Capa funcional: Requerimientos del sistema, ¿Qué cosa tiene operativamente? Restricciones operativas.[Requerimientos de sistema, Requerimientos Funcionales, Restricciones] 98 | 99 | Requerimientos de producto: 100 | Funcionales: Historias de usuarios, hablan específicamente de lo que hace el sistema, cómo el sistema responde a un estimulo. 101 | No funcionales: Son los que agregan cualidades al sistema, por ejemplo que él login sea más seguro, en este caso se agrega una cualidad. Crear reportes en tiempo real pueda considerarse como no funcionales. 102 | 103 | Los requerimientos significativos engloban todos aquellos que afecte a hora de diseñar. 104 | 105 | Requerimientos de proyectos: Fechas de entrega, planes 106 | Requerimientos de proyecto: Tiene que ver con el rol de gestor de proyecto: 107 | * Recursos 108 | * Capacitación 109 | * Certificaciones 110 | * Documentos de usuarios 111 | * Infraestructura 112 | * Licencias 113 | * Plan de despliegue 114 | * Plan de transiciones 115 | * Infraestructura 116 | 117 | #### Riesgos 118 | Es importante identificar los riesgos y plantear los posibles escenarios en caso de que estos sucedan con el objetivo de asegurar las soluciones arquitectónicas. 119 | 120 | Se pueden identificar: 121 | * En la toma de requerimientos: dificultad/ complejidad 122 | * En los atributos de calidad: Incertidumbre, en cuanto más incertidumbre más alto el riesgo. 123 | * Conocimiento del dominio: Riesgo genérico: aquellos que se pueden atacar de forma estándar. 124 | 125 | una vez identificados se debe de priorizar, recuerde que no se debe priorizar todos, si no aquellos que pongan en riesgo a la propuesta de solución. 126 | 127 | #### Restricciones 128 | Restricciones que limitan las opciones del sistema tanto de diseño y desarrollo. 129 | 130 | * Los stakeholders son los que dan las restricciones, "Reglas de negocios". 131 | * La integración con otros sistemas "Restricciones técnicas". 132 | * Ciclo de vida del producto "Preciso de evolución de producto". 133 | 134 | El arquitecto debe de balancear entre requerimientos y restricciones. 135 | 136 | Realizar reto de App. 137 | 138 | ## Estilos de arquitectura 139 | Es algo genérico que se puede reutilizar para resolver un problema en especifico. 140 | 141 | Colecciones de decisiones de diseño aplicados en un contexto determinado esperando tener el éxito que sé obtuvo anteriormente. 142 | 143 | El panorama arquitectónico. 144 | Puede estar implícito dentro de una tecnología. 145 | Se debe de balancear beneficios y contras de cada arquitectura. 146 | 147 | #### Llamado y retorno 148 | Cada uno de los componentes hace invocaciones a los componentes externos y estos retornan información. 149 | 150 | Cada llamado espera una respuesta. 151 | 152 | * Programa y subrutinas: Instrucciones secuenciales que el programa ejecuta una por una. 153 | 154 | * Orientada a objetos: Se utiliza en sistemas que sabemos vamos a utilizar por mucho tiempo. En este caso la abstracción ya no es una subrutina, ahora tenemos objectos que se hacen llamados entre sí y esperan respuesta. 155 | 156 | Arquitectura de multinivel. 157 | Un ejemplo es la arquitectura **Cliente servidor**. 158 | 159 | #### Flujo de datos 160 | En este caso no nos preocupamos tanto por la secuencia de ejecución sino por los datos que van a ir de un lugar a otro. 161 | 162 | * Lote secuencial: Procesar algo y que cuesta ser procesado, por ejemplo un reporte. 163 | 164 | * Flujo de datos: Diferentes aplicaciones conectadas en tiempo real lo cual no dependen del usuario para ser ejecutados. 165 | Por ejemplo en los comando de linux que la salida de un comando puede ser la entrada de otro, como por ejemplo. 166 | ~~~ 167 | grep | sed | grep | sed 168 | ~~~ 169 | 170 | #### Centradas en datos 171 | Se tienen múltiples componentes cada uno tiene una función específica. 172 | 173 | * Pizarrón: Por ejemplo para realizar una tarea donde se necesitan varias partes involucradas donde es necesario que todas ellas se terminen para poder tener una salida. 174 | 175 | * Centrado en datos: Ejemplo común es cuando dos aplicaciones utiliza la misma base de datos, cualquiera de los componentes no se comunican entre sí pero si escriben en la base de datos. 176 | 177 | * Sistema experto o etilo basado en reglas: Algún componente de tipo cliente va comunicarse con otro que va tratar de inferir las reglas y determinar si es una regla o una consulta, posteriormente consulta a una base de conocimiento. 178 | 179 | Concentración de cómo hacer o guardar algo. 180 | 181 | #### Componentes independientes 182 | Existen dos grupos de componentes. 183 | Cada aplicación se desarrollan por separados desacoplados 184 | * Invocación implícita: pueden mandarse mensajes entre si sin saber quién los esta mandando llamar. 185 | * basados en eventos 186 | * Publicar - Suscribir 187 | * Orientado a servicios 2.0: Se tiene un bus inteligente que sabe que hacer, **Enterprise Service Bus E.S.B**. 188 | 189 | 190 | * Invocación explicita: Desarrollar componentes que se conocen entre si pero están desacoplados. 191 | * Orientado a servicios 1.0 192 | 193 | #### Comparar estilos 194 | * Estilo monolítico: donde se despliega un solo artefacto. 195 | * Eficiencia, puede ser optimizado, fáciles de probar. 196 | * Curva de aprendizaje: Es más fácil comprender de que como se construye. 197 | * Capacidad de prueba: Más fácil de realizar test completos ya que todos los módulos se encuentran juntos. 198 | * Capacidad de modificación: Más fácil de integrar nuevos módulos. 199 | 200 | * Estilo distribuido: donde se tienen despliegues diferentes pero se comunican entre si. 201 | * Modularidad: Cada producto se despliega por separado 202 | * Disponibilidad: Que su un producto no esta disponible no significa que todos lo estén. 203 | * Uso de recursos: Utiliza menos recursos ya no es tan grande. 204 | * Adaptabilidad: 205 | 206 | A partir de los riesgos restricciones y requerimientos podremos elegir una arquitectura de acuerdo a nuestro problema a solucionar. 207 | -------------------------------------------------------------------------------- /BACK_END/API_REST/note.md: -------------------------------------------------------------------------------- 1 | # Api Rest 2 | 3 | #### ¿Qué es un API y para que sirve? 4 | 5 | API: Application Programming Interface, conjunto de reglas que definen como se van a comunicar dos aplicaciones, por ejemplo qué tipos de request y response se van a utilizar. 6 | 7 | En **POO** una API son todos los elemento públicos que están disponibles. 8 | 9 | ## Conocer conceptos principales de Rest 10 | 11 | #### ¿Qué es y cómo funciona el protocolo HTTP? 12 | 13 | HTTP: Hytpertext Transfer Protocol, conjunto de reglas en las que se van a comunicar dos entidades. 14 | 15 | Protocolo: conjunto de reglas. 16 | 17 | #### ¿Qué significa Rest? 18 | 19 | REST: Representational State Transfer o bien transferencia de estado representacional. 20 | 21 | API RESTful es una API diseñada con los conceptos de REST. 22 | * Recurso: todo dentro de una Api RESTFul debe ser un recurso. 23 | * URI: Todos los recursos se manipulan a partir de una URL (Identificadores Universales de Recursos). 24 | * Acction: todas las peticiones de un Api Rest debe de estar asociado con un verbo HTTP: 25 | * Get: para obtener recursos. 26 | * Post: para escribir un recurso. 27 | * Put: Para editar un recurso. 28 | * Delete: para eliminar un recurso. 29 | 30 | #### Métodos de autenticación 31 | #### HTTP 32 | * Mediante HTTP auth user, debe de ir en el encabezado authorization. 33 | 34 | #### HMAC 35 | * HMAC: (Hash Message Authorizarion Code) para lo cual se necesita 3 elementos, Basado en Hash de Mensajes: 36 | * Función hash: Difícil de romper y que sea conocida por el cliente y el servidor. 37 | * Clave Secreta: para corroborar el HASH 38 | * UID: Id de usuario será utilizado dentro del HASH junto con la clave secreta y el timestamp 39 | 40 | Es mucho más seguro que la autenticación vía HTTP. 41 | 42 | #### Acceso mediante Tokens 43 | Roles del servidores: 44 | * Uno se encarga de la autenticación. 45 | * Otro se encarga de desplegar los recursos del API. 46 | 47 | Flujo. 48 | * Petición para la solicitud de Token 49 | * El servidor devuelve token 50 | * El usuario hace una petición para pedir recurso. 51 | * El servidor con los recursos hace una petición al servidor de autenticación para verificar token sea valido. 52 | * Una vez verificado el token, el servidor devuelve los recursos al cliente. 53 | 54 | 55 | ## Manejo de Errores en servicio REST 56 | 57 | Para las respuestas con error se utilizaran los siguientes códigos: 58 | en los encabezados HTTP. 59 | * 400: Bad Request, que el servidor no puede procesar la petición. 60 | * 404: Not Found, el servidor no encuentra el recurso buscado. 61 | * 500 Invernal Error Server, la petición no se pudo procesar por un error en el servidor. 62 | 63 | ## Buenas prácticas 64 | * Utilizar sustantivos para nombrar los recursos. 65 | * Añadir los nombres en plural para las URLs 66 | * Las modificaciones se deben de hacer con su verbo HTTP correspondiente. 67 | * Para devolver recursos asociados se debe incorporar sub-recursos 68 | ~~~ 69 | autos/1/choferes 70 | ~~~ 71 | * Navegabilida vía vínculos 72 | * Cuando devuelva colecciones deben de ser filtrables, ordenables y paginables. 73 | * Versionar las api 74 | ~~~ 75 | v1/autos/1/choferes 76 | ~~~ 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /BACK_END/JAVA/TEST/note.md: -------------------------------------------------------------------------------- 1 | # Test 2 | 3 | Aportan muchos beneficos como por ejemplo comprobar los requerimientos, documentación y ayudan al diseño de la aplicación. 4 | 5 | #### Tipos de test 6 | * Test unitarios: prueba una clase. 7 | * Test de integración: como se integran varias funcionalidades. 8 | * Funcionales: funcionalidad del sistema. 9 | * Test de iniciación: test de todo el flujo. 10 | * Test de estres: comprabar que la aplicación soporta varias peticiones. 11 | 12 | -------------------------------------------------------------------------------- /BACK_END/JAVASCRIPT/ecmas6.md: -------------------------------------------------------------------------------- 1 | # ECMAScript 2 | 3 | ECMAScript es la especificación del lenguaje por ECMA Internacional institución encargada de los estándares. 4 | 5 | ## ¿Qué se implemento en ES6? 6 | Nace en Junio del 2015 7 | * Default params y concatenación 8 | * LET y CONST, Multilinea, Spread Operator y Desestructuración 9 | * Arrow Functions, Promesas y Parámetros en objetos 10 | * Clases, Módulos y Generadores 11 | [Referencias](https://carlosazaustre.es/ecmascript6) 12 | 13 | #### Default params y concatenación 14 | ~~~js 15 | //es6 default values 16 | function newFunction2(name = 'Jose Luis', age = 30, country = 'México') { 17 | console.log(name, age, country); 18 | } 19 | ~~~ 20 | 21 | ~~~js 22 | //Template literals 23 | let hello = 'Hello'; 24 | let world = 'World'; 25 | 26 | console.log(`${hello} ${world}`); 27 | ~~~ 28 | 29 | #### LET y CONST, Multilinea, Spread Operator y Desestructuración 30 | 31 | ~~~js 32 | //es6 33 | let lorem = `Concatenar lieneas 34 | con salto de liena`; 35 | 36 | console.log(lorem); 37 | ~~~ 38 | 39 | ~~~js 40 | //Desestructuración de elementos 41 | let person = { 42 | name: 'Jose luis', 43 | age: 30 44 | }; 45 | 46 | let { name, age } = person; 47 | 48 | console.log(name, age); 49 | ~~~ 50 | 51 | ~~~js 52 | //Spread operator 53 | let teamOne = ['Jose','Luis']; 54 | let teamTwo = ['Laura', 'Sandi']; 55 | 56 | let funcionTeam = [...teamOne, ...teamTwo]; 57 | 58 | console.log(`Result: ${funcionTeam}`); 59 | Result: [ 'Jose', 'Luis', 'Laura', 'Sandi' ] 60 | ~~~ 61 | 62 | ~~~js 63 | //var, let, const 64 | { 65 | var varVariable = 'global'; 66 | } 67 | 68 | { 69 | let letVariable = 'global'; 70 | const contant = 'Const Varible '; 71 | //Presenta erro debido que se declara 72 | //como constate por lo cúal no se le puede 73 | //reasignar nuevo valor 74 | contant = 'Const Varible '; 75 | } 76 | 77 | // Se tiene error debido a que existe en 78 | // bloque donde fue declarado. 79 | console.log(varVariable, letVariable); 80 | ~~~ 81 | 82 | #### Arrow Functions, Promesas y Parámetros en objetos 83 | 84 | ~~~js 85 | //Párametros en objetos 86 | let name = 'Jose Luis'; 87 | let age = 30; 88 | 89 | //es5 90 | let obj = { 91 | 'name': name, 92 | 'age': age 93 | } 94 | 95 | let obj2 = { name, age }; 96 | 97 | console.log(obj); 98 | console.log(obj2); 99 | ~~~ 100 | 101 | ~~~js 102 | // arrow function 103 | // 104 | let names = [ 105 | {'name': 'Jose Luis'}, 106 | {'name': 'Laura'}, 107 | ]; 108 | 109 | //Se pasa una fusión anónima 110 | name.map(function (item) { 111 | console.log(item.name); 112 | }); 113 | 114 | //Se pasa una fusión anónima Arrow Function 115 | name.map(item => console.log(item.name)); 116 | 117 | //Otra forma para declararlo 118 | const listName = (name, age) => { 119 | //body function 120 | }; 121 | 122 | //Si en la función solo se realiza una operación 123 | const square = num => num * num; 124 | ~~~ 125 | 126 | ~~~js 127 | //Promesas 128 | 129 | // Una Promise (promesa en castellano) es 130 | //un objeto que representa la terminación o el 131 | //fracaso eventual de una operación asíncrona 132 | 133 | //Utiliza dos callbacks resolve y reject 134 | //Cuando todo sale bien se ejecuta resolve de locontrario 135 | //reject 136 | 137 | const promise = (value) => { 138 | return new Promise((resolve, reject) => { 139 | if (value) { 140 | resolve('Todo bien'); 141 | } else { 142 | reject('Algo salio mal'); 143 | } 144 | }); 145 | }; 146 | 147 | promise(false) 148 | .then(result => console.log(result)) 149 | .catch(error => console.error(error)); 150 | 151 | 152 | //se ejecuta con .then y para capturar el error .catch 153 | //puede utilziar tambien async await para que esta 154 | //el comportamiento sea como una opearacón sincrona 155 | //para capturar el error utilizamos un bloque de try catch 156 | 157 | const executePromise = async(value) =>{ 158 | try { 159 | let result = await promise(value); 160 | console.log(result); 161 | } catch (error) { 162 | console.error(error); 163 | } 164 | } 165 | 166 | executePromise(false); 167 | ~~~ 168 | 169 | #### Clases, Módulos y Generadores 170 | 171 | ~~~js 172 | //Clases, Módulos y Generadores 173 | 174 | class Calculator { 175 | constructor(){ 176 | this.a = 0; 177 | this.b = 2; 178 | } 179 | 180 | sum(a, b) { 181 | this.a = a; 182 | this.b = b; 183 | return this.a +this.b; 184 | } 185 | } 186 | 187 | const calc = new Calculator(); 188 | console.log(calc.sum(2,3)); 189 | ~~~ 190 | 191 | ~~~js 192 | //Modulos 193 | //module.js 194 | const hello = () => { 195 | return 'Hello module'; 196 | } 197 | export default hello; 198 | 199 | //index.js 200 | import hello from './module'; 201 | hello(); 202 | ~~~ 203 | 204 | ~~~js 205 | //Generators 206 | // Función especial que retorna valores según la lógica implementada 207 | function* hello(){ 208 | if(true){ 209 | yield 'Hello'; 210 | } 211 | if(true) { 212 | yield 'World' 213 | } 214 | } 215 | 216 | const generator = hello(); 217 | 218 | console.log(generator.next().value); 219 | console.log(generator.next().value); 220 | console.log(generator.next().value); 221 | ~~~ 222 | 223 | ## ¿Qué se implemento en ES7? 224 | Nace en Junio del 2016 225 | 226 | #### Método que permite include para arreglos y strings 227 | ~~~js 228 | let numbers = [1,2,3,4,5,6,7]; 229 | 230 | if (numbers.includes(7)) { 231 | console.log('El 7 se encuentra') 232 | } else { 233 | console.log('El 7 se NO encuentra') 234 | } 235 | ~~~ 236 | 237 | #### ¿Cómo elevar a la potencia.? 238 | ~~~js 239 | let base = 4; 240 | let exponenent = 3; 241 | let result = base ** exponenent; 242 | 243 | console.log('result: ',result); 244 | ~~~ 245 | 246 | ## ¿Qué se implemento en ES8? 247 | Nace en Junio del 2017 248 | ~~~js 249 | const data = { 250 | front: 'Oscar', 251 | back: 'Isabel', 252 | desing: 'Ana', 253 | }; 254 | 255 | //Crear una matriz 256 | const entries = Object.entries(data); 257 | ~~~ 258 | 259 | ~~~js 260 | const data = { 261 | front: 'Oscar', 262 | back: 'Isabel', 263 | desing: 'Ana', 264 | }; 265 | 266 | // Crear un array de string solo con los values. 267 | const values = Object.values(data); 268 | console.log(values); 269 | ~~~ 270 | 271 | ~~~js 272 | // Agregar una número de caracteres al inicio 273 | const str = 'Hello'; 274 | str.padStart(8,'Hi') //"Hi Hello" 275 | 'abc'.padStart(10); // " abc" 276 | 'abc'.padStart(10, "foo"); // "foofoofabc" 277 | 'abc'.padStart(6,"123465"); // "123abc" 278 | 279 | 280 | str.padEnd(8,'Hi') //"Hello Hi" 281 | 'abc'.padEnd(10); // "abc " 282 | 'abc'.padEnd(10, "foo"); // "fabcfoofoo" 283 | 'abc'.padEnd(6,"123465"); // "abc123" 284 | ~~~ 285 | 286 | 287 | #### Async Away 288 | 289 | ~~~js 290 | 291 | const hello = () => { 292 | return new Promise((resolve, reject) => { 293 | (true) ? setTimeout(() => resolve('Hello Worls', 300)) 294 | : reject(new Error()); 295 | }); 296 | }; 297 | 298 | const helloAsync = async () => { 299 | try { 300 | const helloWorld = await hello(); 301 | console.log(helloWorld); 302 | } catch (error) { 303 | console.error(error.message); 304 | } 305 | }; 306 | 307 | helloAsync(); 308 | ~~~ 309 | 310 | ## ¿Qué se implemento en ES9? 311 | Se lanzo el Julio de 2018 312 | 313 | ~~~js 314 | //Operador de reposo 315 | 316 | const data = { 317 | front: 'Oscar', 318 | back: 'Isabel', 319 | desing: 'Ana', 320 | }; 321 | let { desing, ...all} = data; 322 | console.log(desing, all); // Ana { front: 'Oscar', back: 'Isabel'} 323 | ~~~ 324 | 325 | ~~~js 326 | // operador de propagación 327 | const obj1 = { 328 | name: 'Luis' 329 | } 330 | 331 | const obj2 = { 332 | ...obj1, 333 | country: 'MX' 334 | } 335 | 336 | console.log(obj2); //{name: 'Luis', country: 'MX'} 337 | ~~~ 338 | 339 | 340 | ## ¿Qué se implemento en ES10? 341 | Se lanzo en Junio de 2019 342 | ~~~js 343 | // flat 344 | let array = [1,2,3,[1,2,3,[1,2,3]]] 345 | 346 | console.log(array.flat()); // se llama niveles 347 | console.log(array.flat(1)); // se llama niveles 348 | ~~~ 349 | 350 | ~~~js 351 | //flatMap 352 | let array = [1,2,3,4] 353 | console.log(array.flatMap(values => [value, value * 2])); 354 | ~~~ 355 | 356 | ~~~js 357 | //trimStart 358 | let hello = ' hello '; 359 | 360 | console.log(hello.trimStart()); 361 | console.log(hello.trimEnd()); 362 | ~~~ 363 | 364 | ~~~js 365 | //optional error 366 | 367 | try { 368 | 369 | } catch { 370 | console.log(error); 371 | } 372 | ~~~ 373 | 374 | 375 | ~~~js 376 | //optional error 377 | 378 | let entries = [["name","Luis"],["country", "MX"]]; 379 | 380 | console.log(Object.formEntrie(entries));// { name: 'Luis', country: 'MX' } 381 | ~~~ 382 | 383 | 384 | 385 | 386 | 387 | 388 | 389 | 390 | 391 | 392 | -------------------------------------------------------------------------------- /BACK_END/NODE/note.md: -------------------------------------------------------------------------------- 1 | # Node 2 | 3 | #### Características 4 | * Entorno de ejecución fuera de un navegador. 5 | * Lenguaje concurrente. 6 | * MonoHilo. 7 | * Comunicación asyncrono 8 | * Motor V8 de google, convierte el lenguaje de java script a código maquina. 9 | * Funcionamiento basado en módulos. 10 | * Orientado a eventos lo que permite la programación de forma reactiva. 11 | 12 | #### EventLoop 13 | Bucle de eventos y la razón por la que JavaScript trabaja de forma asyncrona. 14 | 15 | * No se bloquea 16 | * Alta concurrencia. 17 | 18 | EventQUEUE -> Envia al event loop (Si es posible los resuelve en el momento si no lo manda a) -> ThreadPool 19 | ThreadPool por cada tarea crea un nuevo hilo en nuestro procesador y cundo termina lo manda alevent loop y este a queue. 20 | 21 | 22 | #### MonoHilo: Implicaciones de diseño de seguridad 23 | Si existe un error este detendrá todo el flujo de el programa ya que todo trabaja en el mismo hilo, 24 | razón por la que debemos de tener cuidado. 25 | 26 | #### Variables de entorno 27 | Variables que se definen en el servidor, para poder leer estas variables de con process.env.NOMBRE-VARIABLE. 28 | 29 | Process es un objeto que proporciona información y control sobre proceso actual de node, este simpre es global. 30 | 31 | #### Herramientas para ser más felices: Nodemon y PM2 32 | Nodemon crea una herrmienta que cada que hay cambio de forma automarica. 33 | PM2 para entorno de Producción, administración de procesos. 34 | 35 | #### CallBacks 36 | Como gestionar algo asyncrono. 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /BACK_END/REGULAR_EXPRESSIONS/note.md: -------------------------------------------------------------------------------- 1 | # Expreciones Regulares 2 | 3 | **.** : Encuentra todo lo que sea un carácter , menos salto de linea. 4 | 5 | **\***: Cero o más 6 | 7 | **\d** : Encuentra todos los dígitos. 8 | 9 | **\w**: All carachters 10 | 11 | **\s**: White spaces 12 | 13 | **[]**: Para crear clases 14 | 15 | **[0-6]**: Se busca un rango de dígitos. 16 | 17 | **[a-zA-Z]**: Se busca un rango de a hasta la z. 18 | 19 | **\\**: Este carácter que no ayuda a escapar caracteres reservados, por ejemplo **\\.** va a buscar el punto y no cualquier carácter. 20 | 21 | **\n**: Salto de linea 22 | 23 | **\***: Greedy Cero o muchos "todo" 24 | **+**: Uno o más 25 | **?**: Cero o uno 26 | 27 | **{0,}**: Contadores, dónde se tiene un rango de 0 hasta infinito si no se espesifica 28 | 29 | **(?)**: Delimitador que indica al patrón que encuentre las coincidencias de manera rápida (o greedy). 30 | 31 | **^**: Negación. 32 | 33 | -------------------------------------------------------------------------------- /BACK_END/micro_servicios/note.md: -------------------------------------------------------------------------------- 1 | # Micro servicios. 2 | 3 | Es un enfoque de desarrollo basado en servicios, en vez de tener un monolito se tiene varios servicios independientes. 4 | 5 | ## Características 6 | * Autónomos 7 | * Expecializados 8 | * Registro y auto-descibrimiento de servicios 9 | * Escalado flexible 10 | * Tolerancia a fallos 11 | * Balanceo de carga 12 | * Configuración centralizada 13 | * Libertad de tecnologia 14 | * Agilidad, equipos más pequeños 15 | * Ciclo de desarrollo más cortos 16 | * Código reutilizable 17 | 18 | ## Micro servicios 19 | Son un conjunto de componentes pequeños y autónomos que colaboran entre si. 20 | 21 | Aplicación monolitica es la que hace todo. 22 | 23 | ### Características 24 | * Función única 25 | * Independientes: Los servicios no conocen las demas implementaciones. 26 | * Registro y auto-decubrimiento: desacoplado de la app. 27 | * Auto escalado y agilidad. 28 | * Confiabilidad y tolerancia a fallos: Hystrinx eviatr errores en cascada. 29 | * Balanceo de cargas: Districbución de cargas de forma equitatitava: Ribbon. 30 | * Configuración centralizada: Spring cloud config, git. 31 | 32 | ### Ventajas 33 | * Nueva tecnolía y adopción de procesos. 34 | * Reducción de costo 35 | * Ciclos de liberación más rapidos. 36 | * Equipos de desarrollo más pequeños. 37 | 38 | ## Implementación de Servicios. 39 | Si tenemos dos servicios que implementan la misma interface lo que podemos hacer es utilizar. 40 | * @Primary: Colocar esta anotación en el servicio pricipal. 41 | * @Qualifier(name = "serviceName") 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /BD/BD/apuntes.md: -------------------------------------------------------------------------------- 1 | # Base de datos 2 | Es un conjunto de datos con un mismo contexto que pueden ser convertidos en información. 3 | 4 | #### Base de datos relacionales y no relacionales 5 | Existen dos tipos de bases de datos, bases de datos relacionarles y no relacionarles. 6 | 7 | 8 | Ejemplos de Gestores para bases de datos Relacionales: 9 | - SqlServer 10 | - MySQL 11 | - Postgrestsql 12 | - MariaDB 13 | - Oracle 14 | 15 | Ejemplos de Gestores para bases de datos No Relacionales: 16 | - Casandra 17 | - Neo4j 18 | - MongoDB 19 | - Elasticsearch 20 | 21 | #### Servicios de base de datos 22 | Servicios de bases de datos se clasifican en dos tipos Auto Administradas y Administradas. 23 | - Auto Administradas: Base de datos instalada en el servidor en donde tu te encargas de todo el mantenimiento de la misma. 24 | 25 | - Administradas: Servicio contratado como por ejemplo Aws, Azure entre otros. 26 | 27 | #### Historia de las RBD 28 | 29 | Edgar Codd inventor de las RBD. 30 | 31 | Surgen de a necesidad de almacenar datos y en un principio se hacia en texto plano, fáciles de guardar pero difíciles de consultarlas. 32 | 33 | ##### Entidades y atributos. 34 | 35 | Una entidad es similar a un objeto (POO) y representa algo del mundo real y cuenta con atributos y por convención las entidades se nombran en plural. 36 | 37 | * Atributos compuestos son aquellos que tienen atributos ellos mismos. 38 | Atributos llaves son atributos que identifican a la entidad. 39 | 40 | * Entidades débiles: no pueden existir sin una entidad fuerte 41 | 42 | * Entidades débiles por identidad: No se distinguen entre si más que por la clave de su identidad. 43 | 44 | * Entidades débiles por existencia: Se les asigna una clave propia. 45 | 46 | 47 | ##### Relaciones 48 | Las relaciones nos permiten unir nuestras entidades. 49 | 50 | ##### Cardinalidad 51 | La carnalidad es una propiedad de las relaciones y tiene que ver con los números de pertenencias. 52 | 53 | * Cardinalidad: 1 a 1 54 | * Cardinalidad: 0 a 1 55 | * Cardinalidad: 1 a N 56 | * Cardinalidad: 0 a N 57 | 58 | #### Diagrama Físico, tipos de datos y constrains 59 | 60 | ##### Tipos de datos 61 | * Texto: Char(n), VARCHAR(n), TEXT 62 | * Número: INTEGER, BIGINT, SMALLINT, DECIMAL(n,s), NUMERIC(n,s) 63 | * Fecha/hora_ DATE,TIME, DATATIME, TIMESTAMP 64 | * Lógicos: BOOLEAN 65 | 66 | ##### Constraints (Restricciones) 67 | * NOT NULL: Asegura que la columna no tenga valores nulos 68 | * UNIQUE: Se asegura que cada valor en la columna no se repita 69 | * PRIMARY KEY: Es una combinación de NOT NULL y UNIQUE 70 | * FOREING KEY: Identifica de manera única una tupla en otra tabla. 71 | * CHECK: Se asegura que el valor en la columna cumpla una condición dada 72 | * DEFAULT: Colocan un valor por defecto 73 | * INDEX: Se crea por columna para permitir búsqueda más rápidas 74 | 75 | 76 | #### Normalización 77 | Nos permite minimizar la redundancia en una base de datos. 78 | * Primera forma normal (1FN): Atributos atómicos, los datos no deben de estar repetidos 79 | * Segunda forma normal (2FN): Debe cumplir la 1FN y cada campo de la tabla debe de depender de una clave única. 80 | * Tercera forma normal (2FN): Cumplir con las dos formas normales anteriores y no debe de existir dependencias con campos no clave. 81 | * Cuarta forma normal (4FN): Cumplir con las tres formas normales anteriores y los campos multivaluados se identifican por una clave única. 82 | -------------------------------------------------------------------------------- /BD/BDBASIC/apuntes.md: -------------------------------------------------------------------------------- 1 | # SQL y MySql 2 | 3 | 4 | #### ¿Qué es una base de datos? 5 | Una Base de datos es un lugar donde se almacenan una gran cantidad de datos que posteriormente a través de un proceso se convierten en información. 6 | 7 | #### Comandos MySql 8 | Iniciar sesión 9 | ~~~sql 10 | mysql -u user-name -p 11 | ~~~ 12 | Donde -u es usuario y -p es password. 13 | ___ 14 | ~~~sql 15 | use data-base-name; 16 | ~~~ 17 | Cambiar de base de datos a utilizar. 18 | ___ 19 | 20 | ~~~sql 21 | show full columns from books; 22 | ~~~ 23 | Muestra el detalle completo de la tabla. 24 | ___ 25 | 26 | 27 | #### Motores de base de datos 28 | Los motores de base datos más conocidos son __Innodb__ y __Myissam__, entre ambos existen ciertas diferencia notables que vale la pena mencionar para saber cuál elegir. 29 | 30 | Innodb considerado como un motor de base de datos transaccional conforme [ACID](https://dosideas.com/noticias/base-de-datos/973-acid-en-las-bases-de-datos) con la capacidad de commit, rollback, recuperación de fallos. 31 | 32 | Myissam es un motor de base de datos que trata tablas no transaccionales lo cual lo hace más rápido en la lectura y escritura de datos. 33 | 34 | ##### Algunas ventajas y desventajas 35 | Innodb 36 | + Soporte de transacciones. 37 | + Bloqueo de registros. 38 | 39 | Myissam 40 | + Mayor velocidad en la recuperación de datos. 41 | + Recomendable para aplicaciones donde predominan la sentencia __select__ que los __inserts/updates__. 42 | 43 | #### Cardinalidad 44 | La cardinalidad son simplemente las relaciones que pueden existir entre las tablas de una base de datos. 45 | + uno a uno 46 | + uno a muchos 47 | + muchos a a uno 48 | 49 | #### Lenguaje DDL 50 | Lenguaje de definición de datos: 51 | + Create: crear objectos tales como vistas, tablas, store procedures e indices. 52 | + Drop: Utilizado para eliminar objectos como vistas, store procedures, tablas. 53 | + Alter: Empleado para editar tablas agregando campos o cambiando la definición de los mismos. 54 | 55 | Una buena practica es que el nombre de la tabla debe ser un sustantivo en plural en ingles. 56 | 57 | ~~~sql 58 | create table if not exists books( 59 | id Integer unsigned primary key auto_increment, 60 | author Integer, 61 | title varchar(100) not null, 62 | year integer unsigned default 1990, 63 | language varchar(2) not null default 'es' comment 'ISO 639', 64 | cover_url varchar(500), 65 | price double(6,2) not null default 10.0,sellable tinyint () defaul 1, 66 | copies integer not null default 1, 67 | description text 68 | ); 69 | ~~~ 70 | 71 | #### Lenguaje DML 72 | Lenguaje de manipulación de datos proporcionado por los sistemas gestores de base de datos que permite tareas de consultas o modificación de datos. 73 | 74 | ##### Select 75 | ~~~sql 76 | select * from table where field = 'value' 77 | ~~~ 78 | ##### Insert 79 | ~~~sql 80 | insert into table (field1, field2) values (value1, value2); 81 | ~~~ 82 | 83 | ##### Update 84 | ~~~sql 85 | udate table field = 'value to modify' where field = value 86 | ~~~ 87 | ##### Delete 88 | ~~~sql 89 | delete from table where field = value; 90 | ~~~ 91 | 92 | ##### Inner JOIN 93 | Es considerada la forma más fácil de obtener información, prácticamente se obtienen todos las filas dela tabla A que coinciden con la table B. 94 | 95 | ~~~sql 96 | select * from table_a as a inner join table_b as b on a.pk = b.pk; 97 | ~~~ 98 | 99 | ##### Left JOIN 100 | Se selecciona todas las filas de la tabla A y ademas de las que coincidan de la tabla B. 101 | 102 | ~~~sql 103 | select * from table_a as a left join table_b as b on a.pk = b.pk; 104 | ~~~ 105 | ##### Right JOIN 106 | Se selecciona todas las filas de la tabla B y ademas de las que coincidan de la tabla A. 107 | 108 | ~~~sql 109 | select * from table_a as a left join table_b as b on a.pk = b.pk; 110 | ~~~ 111 | ##### Outer JOIN 112 | Retorna todas las filas de ambas tablas ademas de hacer la unión entre las tablas que coinciden. 113 | 114 | ~~~sql 115 | select * from table_a as a outer join table_b as b on a.pk = b.pk; 116 | ~~~ 117 | ##### Left excluding JOIN 118 | Para este caso retorna todas las filas de la tabla A que no tengan ninguna coincidencia con la tabla B. 119 | ~~~sql 120 | select * from table_a as a left join table_b as b on a.pk = b.pk where b.pk is null; 121 | ~~~ 122 | ##### Right excluding JOIN 123 | Para este caso retorna todas las filas de la tabla B que no tengan ninguna coincidencia con la tabla A. 124 | ~~~sql 125 | select * from table_a as a right join table_b as b on a.pk = b.pk where b.pk is null; 126 | ~~~ 127 | ##### Outer excluding JOIN 128 | Para este caso retorna todas las filas de ambas tablas que no tengan coincidencias. 129 | ~~~sql 130 | select * from table_a as a full outer join table_b as b on a.pk = b.pk where a.pk is null or b.pk is null; 131 | ~~~ -------------------------------------------------------------------------------- /BD/BDNoSQL/notes.md: -------------------------------------------------------------------------------- 1 | # Base de datos Not Only Sql "NoSql" 2 | 3 | En las base daos NoSql se ecunatran seccionadas en 4 grandes grupos. 4 | 5 | #### Key Value 6 | 7 | #### Grab Data Bases 8 | 9 | #### Wide-Colum stores 10 | 11 | #### Document Data bases 12 | 13 | -------------------------------------------------------------------------------- /BD/GRAPHQL/note.md: -------------------------------------------------------------------------------- 1 | # GraphQL 2 | 3 | #### ¿Qué es GraphQL? 4 | Paradigma implementado para la comunicación entre aplicaciones, antes existían protocolos como CORBA, SOAP, RPC y el más reciente Rest. 5 | 6 | GraphQl puede ser visto como una evolución del protocolo REST. 7 | 8 | Ventajas: 9 | * Lenguaje agnostico que permite definir de forma clara y concisa los objectos y acciones del API. 10 | * Validación automatica de los datos a ingresar. 11 | * Control de errores. 12 | 13 | La última versión de Junio 18 14 | 15 | #### Schema y tipos de datos. 16 | 17 | Es Schema es la base de una API en GrapQL, es la encargada de definir los datos que se van a utilizar. 18 | 19 | En el Schema se definen campos, argumentos, tipos. 20 | 21 | Tipos de datos: 22 | * String 23 | * Int 24 | * Float 25 | * Boolean 26 | * ID 27 | 28 | #### Queries y Resolvers 29 | 30 | Un Query nos permite ejecutar una petición al API, GraphQL devuelve el valor dentro de un Object data. 31 | 32 | Para ejecutar la petición se debe de utilizar un resolver este va a contener las mismas propiedades declaradas dentro del Query. 33 | 34 | Un resolver es una función que resuelve el valor de un tipo o campo. 35 | 36 | #### Sirviendo el API en la web 37 | 38 | ~~~js 39 | app.use('/api', gqlMiddleware({ 40 | schema: schema, // definir el schema 41 | rootValue: resolvers, // definir el resolver a utilizar 42 | graphiql: true // entorno de desarrollo que va utilizar 43 | })) 44 | ~~~ 45 | 46 | #### Custom Types 47 | Tipo de dato customizado. 48 | 49 | ~~~json 50 | type Course { 51 | _id: ID 52 | title: String 53 | teacher: String 54 | description: String 55 | topic: String 56 | } 57 | 58 | type Query { 59 | getCourses: [Course] 60 | } 61 | ~~~ 62 | 63 | #### Argumentos 64 | ID! Argumento debe ser obligatorio 65 | 66 | #### Mutations e Inputs 67 | Mutations practicamnete es un mecanismo para insertar datos. 68 | Los mutations por lo general siempre reciben un parametro de tipo Input 69 | ~~~js 70 | nombreMutation(input: InputType): tipo 71 | ~~~ 72 | 73 | #### Nested Types 74 | Relación entre tipos de del schema 75 | ~~~graphql 76 | type Course { 77 | _id: ID! 78 | title: String! 79 | teacher: String! 80 | description: String 81 | topic: String @deprecated 82 | "Nested types, relación entre tipos de datos, en este caso un curso tiene varios estudiantes" 83 | people: [Student] 84 | level: Level 85 | } 86 | ~~~ 87 | 88 | #### Fragments 89 | 90 | Los Fragments nos permiten agrupar campos para que puedan ser reutilizacos en diferentes peticiones. 91 | 92 | ~~~graphql 93 | { 94 | allCourses: getCourses{ 95 | ...CourseFields 96 | teacher 97 | } 98 | 99 | oneCourse: getCourse(id: "5e652905b7a4b80533d535b9"){ 100 | ...CourseFields 101 | } 102 | } 103 | 104 | fragment CourseFields on Course { 105 | _id 106 | title 107 | people{ 108 | name 109 | } 110 | } 111 | ~~~ 112 | 113 | #### Variables 114 | Las variables son utilizacadas para utilizarlas en los queries. 115 | 116 | Declaración de variables. 117 | ~~~ 118 | $nombre: tipo 119 | ~~~ 120 | 121 | ~~~graphql 122 | query GetCourse2 ($course: ID!) { 123 | getCourse(id: $course){ 124 | _id 125 | title 126 | people{ 127 | _id 128 | name 129 | } 130 | } 131 | } 132 | ~~~ 133 | 134 | Requiere un objeto JSON como: 135 | 136 | ~~~json 137 | json 138 | { 139 | "course": "5cb4b8ce75f954a0585f7be3" 140 | } 141 | ~~~ 142 | 143 | #### Errors 144 | GraphQL nos va a retornar un objeto llamado errors con detaller del mismo. 145 | 146 | 147 | #### Nota 148 | Instalar CORS para poder acceder desde cualquier lugar. 149 | * Schemas types 150 | * Custom types 151 | * Argumentos 152 | * Nested types 153 | * Resolver tipos 154 | * Errores 155 | * Alias y fragments 156 | * Variables 157 | * Enums 158 | * Interfaces 159 | * Directivas 160 | * Unions 161 | 162 | 163 | 164 | -------------------------------------------------------------------------------- /BD/MONGO/note.md: -------------------------------------------------------------------------------- 1 | # MongoDB 2 | 3 | ## Introducción 4 | #### Base de datos NoSQL 5 | Las base de datos **Not Only SQL** se clasifican en 4 familias 6 | * Key Values stores: Guardan datos de forma llave Valor. 7 | * Casos de uso: guardar datos en cache. 8 | * Ejemplo: Redis. 9 | * Características: muy sencillas y rápidas. 10 | 11 | * Graph Databases: Basadas en Grafos. 12 | * Casos de uso: Realizar consultas eficientes en una base de datos relaciónal. 13 | * Ejemplo: Neo4J, JanusGraph. 14 | 15 | * Wide-column Store: Bases de datos columnares en donde la columna cuenta con un id así como la fila. 16 | * Casos de uso: Se usa en big data, el diseño de estas se vuelve complejo 17 | * Ejemplo: Cassandra o HBase. 18 | 19 | * Documente database: Base de datos basada en documentos. 20 | * Casos de uso: Nos permite modelar casos de la vida real de forma muy sencilla. 21 | * Ejemplo: MongoDM, CouchBase. 22 | 23 | #### Definición de MongoDB y su ecosistema 24 | 25 | Base de datos NoSQL que permite guardar grandes cantidades de datos en documentos de forma distribuida. 26 | Características 27 | * Guardar documentos de tipo BSON (Binary JSON) 28 | * Base de datos distribuida: Cluster de MongoDB el cual permite escalar de forma horizontal. 29 | * Es SchemaLess: Las colecciones podrían no tener la misma estructura, esto lo hace muy flexible. 30 | * Código abierto. 31 | * MongoDB mobile. 32 | * Stich: Crear servicios ServerLess. 33 | 34 | 35 | #### Mongo Shell 36 | Comandos 37 | * show dbs: Mostrar las base de datos. 38 | 39 | #### MongoDB + Drivers 40 | Los drivers son las librerías para comunicar la app con la base de datos: 41 | * C 42 | * C++ 43 | * Go 44 | * Java 45 | * Node.js 46 | * Perl 47 | 48 | Para agregar los drives se debe de utilizar un gestor de dependencias: 49 | * Maven/Gradle para Java 50 | * npm para Java script 51 | 52 | Proceso de conexión a la base de datos. 53 | * Crear conexión **MongoClient** 54 | * Obtener la base de datos **MongoDataBase** 55 | * Acceder a una colección **MongoCollection** 56 | * **CRUD** 57 | 58 | ## Operaciones CRUD 59 | #### Bases de datos, Colecciones y Documentos en MongoDB 60 | Las bases de datos son un contenedor físico para las colecciones. 61 | 62 | * Colecciones: Son agrupaciones de documentos las cuales no están atadas a una estructura 63 | Rigida, 64 | * Documentos: Son registros dentro de las colecciones, unidad básica de MongoDB, estos son similares a JSON pero en realidad son BSON. 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 |
SQLNoSQL
TablasColecciones
TuplaDocumentos
80 | 81 | 82 | ## Operaciones CRUD dentro de la consola 83 | ~~~js 84 | db.dbName.insertOne({}) 85 | db.dbName.findOne() 86 | db.dbName.inserMany([{},{},{},{}]) 87 | db.dbName.find({},{}).pretty() 88 | db.dbName.updateOne(Object({_id:””}),{$set: {} } ) 89 | db.dbName.updateMany(Object({_id:””}),{$set: {} } ) 90 | db.dbName.deleteOne(Object({_id:””}),{$set: {} } ) 91 | db.dbName.deleteMany(Object({_id:””}),{$set: {} } ) 92 | ~~~ 93 | ## Esquemas y relaciones 94 | #### Tipos de datos 95 | Tipos de datos que se utilizan en MongoDB 96 | * Strings 97 | * Boolean 98 | * ObjectId: Utiliza el tiempo para poder generar ids únicos. 99 | * Date 100 | * Númericos: Double, Integer, Integer64 lists y Decimals. 101 | * Array: Arreglos o listas de cualquier otro tipo de dato. 102 | * Documentos embebidos: un documento puede tener otro documento. 103 | 104 | 105 | #### ¿Qué son los esquemas y las relaciones? 106 | Es la forma en la cual se enlazan unos con otros. 107 | 108 | #### Proyecciones 109 | Solo obtener los datos que necesitamos. 110 | ~~~js 111 | db.dataBase.findOne({ status: “A”}, { item: 1, status: 1} ) // Para el query solo nos trae item y estatus incluido el _id. 112 | ~~~ 113 | 114 | **Operaciones de comparación** 115 | * $eq: = 116 | * $gt: > 117 | * $gte: >= 118 | * $lt: < 119 | * $lte: <= 120 | * $ne: != 121 | * $in: Valores dentro de un arreglo 122 | * $nin: Valores no incluidos dentro de un arreglo. 123 | 124 | **Operaciones Lógico** 125 | * $and 126 | * $not 127 | * $nor 128 | * $or 129 | 130 | **Operadores pora arreglos** 131 | * $all: Arreglos que contengan todos los elementos del query. 132 | * $elementMatch: Elemento que cumple con la condición. 133 | * $size: Documento que tiene un dato tipo array con un tamaño en específico. 134 | 135 | #### Operaciones Avanzadas con Agregaciones 136 | 137 | * Pipeliene de Agregaciones: grupo de múltiples etapas que ejecutan agregaciones en diferentes momentos, estas corren en todo el cluster. 138 | 139 | * Map-Reduce: Nos permite definir funciones de JavaScript para ejecutar funciones avanzadas. Por ejemplo utilizar map o reduce. 140 | 141 | * Agregaciones de proposito único: Funciones definidas las cuales nos ayudan a calcular algo en particular, debemos de tener cuidado ya que podrían mejorar o afectar el rendimiento de la base de datos. Por ejemplo: count(), estimateDocumentCount y distinct. 142 | 143 | #### Indices 144 | Ayudan a que las consultas sean más eficientes. 145 | 146 | Tipos de indices: 147 | * De un solo campo: 148 | * Compuestos: Se definen con varios campos 149 | * Multi-llave: Se definen con varios campos 150 | * Geoespaciales: Ayudan hacer queries por latitud y longitud 151 | * Indeices de texto 152 | * Hashes: Convertir valores en hash- 153 | 154 | ~~~js 155 | db.survery.getIndexes() // obtenemos los indices de una colección. 156 | db.survery.createIndex({ _id: "text"}) // creamos un index de tipo text 157 | db.survery.find({ $text: { $search: "1" } }) // Realizar query con indice 158 | ~~~ -------------------------------------------------------------------------------- /CRECIMIENTO/ESTRATEGIAS/note.md: -------------------------------------------------------------------------------- 1 | # Estrategias para aprender en linea. 2 | 3 | Aprender es la capacidad de adquirir conocimiento, para esta palabra se necesita definir las siguientes: 4 | * Perseguir: Persiguiendo conocimiento. 5 | * Atrapar/Prender: Atrapar el conocimiento y apoderarse de él y aplicarlo. 6 | 7 | 8 | Según la doctora **Barbara Oakley** Existen dos tipos de pensamiento: 9 | * Enfocado: Dedicarle tiempo ininterrumpido y este tipo es adecuado cuando ya se tienen base sobre el tema que se esta estudiando. 10 | * Difuso: Se dedica fracciones de tiempo con pequeños periodos de descanso, este pensamiento se presenta cuando se tiene que aprender sobre algo nuevo, en este tipo de pensamiento es muy útil la técnica pomodoro. 11 | 12 | Etapas del aprendizaje **Kolb** 13 | Para el aprendizaje se debe de te tener entrada de información y una vez procesada deberíamos tener una salida. 14 | 15 | Los tipos de entrada se clasifican en: 16 | Experiencia Concreta (EC): Involucrarse para tener experiencias. 17 | Observación Reflexiva (OR): Se inicia con la parte teórica, 18 | 19 | Las salidas pueden ser: 20 | Conceptualización Abstracta (CA): Se obtiene una conceptualización abstracta con base a la hipótesis generada a través de la teoría, 21 | Experimentación Activa (EA): Se inicia en él aprendizaje a través de la experiencia. 22 | 23 | Según **Kolb** para un aprendizaje optimo se debe de contemplar las siguientes 4 fases: 24 | 25 | **Actuar** 26 | 27 | Alumno activo, involucran en la experimentación, se aburren en planes a largo plazo. 28 | ⁃ Aprenden mejor cuando cuado realizan actividades cortas y les gusta el resultado inmediato. 29 | ⁃ Se les dificulta aprender cuando adoptan un papel pasivo, cuando tienen que trabajar solos. 30 | 31 | **Reflexionar** 32 | 33 | Alumno reflexivo analiza sus experiencias desde muchas perspectivas para posteriormente armar una conclusión. 34 | ⁃ 35 | 36 | **Teorizar** 37 | 38 | Alumno teórico piensan de forma secuencial, les gusta analizar y sintetizar la información. 39 | ⁃ Aprenden mejor a partir de modelos, teorías, sistemas con ideas que presentan un desafio. 40 | ⁃ Les cuesta aprender con actividades qué impliquen ambigüedad e incertidumbre o participar sin fundamentos teóricos. 41 | 42 | **Experimentar** 43 | 44 | Alumno pragmático les gusta probara ideas, teorías y técnicas nuevas y comprobar si estas funcionan en su campo, siempre están buscando optimizar las tareas que realizan. 45 | ⁃ Aprenden mejor con actividades relacionadas con la teoría y la practica, cuando ven a los demás realizar algo, poner en practica lo que han aprendido. 46 | ⁃ Cuando tienen que aprehender de temas que no se relacionan con sus necesidades inmediatas. 47 | 48 | 49 | #### Reglas de aprendizaje efectivo 50 | 51 | * Aprender individualmente: 52 | * Interiorizar los aprendido 53 | * Asimilar la información 54 | 55 | * Factores determinantes en este tipo de aprendizaje: 56 | * Inteligencia: 40% heredado y 50% influencia. 57 | * Atención: Enfocada, y difusa 58 | * Memoria: Capacidad de recordar algo donde se aplica abstracción y síntesis. 59 | 60 | 61 | * Aprender en grupo 62 | * Compartir lo que aprendes 63 | 64 | * Aprender colaborativamente 65 | * Crear una opinión fuerte de lo que aprendes 66 | * Tener a alguien que te cuestione e lo que aprendiste. 67 | 68 | 69 | #### La atención 70 | 71 | La atención es un proceso cognitivo que nos permite enfocarnos y concentrarnos en una cosa en específico. 72 | 73 | No podemos concentrarnos en muchos estímulos al mismo tiempo **“Sobrecarga”**. 74 | 75 | Consejos para memorizar mejor. 76 | 77 | #### Chunking como estrategia de aprendizaje individual. 78 | 79 | Pedazos de información, es considerada una habilidad muy útil cuando se debe de aprender muchísima información. 80 | 81 | Una vez fragmentar la información y estudiada debemos de conectarlas para darles sentido ya que se tiene como objetivo interrelacionarse estos conceptos. 82 | 83 | 84 | #### Tips de lectura 85 | 86 | * Reducir los movimientos sacádicos 87 | * Concentrarte al máximo para evitar releer 88 | * Lee en silencio 89 | * Usar un señalador 90 | * Visualizar frases completas en lugar de palabras 91 | Leer mucho. 92 | 93 | * Profesor por un Día. 94 | Tener la oportunidad de explicar lo aprendido. 95 | 96 | * Parafrasear: Posibilidad de recordar algo con nuestras palabras. 97 | 98 | * Cuestionar conocimiento: Cuando explicamos tenemos la oportunidad de ver que tanto comprendimos. 99 | 100 | * Repasar lo aprendido: Como profesor debemos estudiar y repasar los conceptos. 101 | 102 | * Hacer notas extras: Debemos extender las notas que tenemos debido a que debemos responder a las posibles dudas que surgen en tu audiencia. 103 | 104 | #### Técnica de Feynman 105 | * Elige un tema. 106 | * Escribe lo aprendido usando paráfrasis y lenguaje sencillo, luego léelo en voz alta. 107 | * Arregla los posibles errores. 108 | * Repasa e intenta simplificar. 109 | 110 | 111 | Diálogo me conduce a la reflexión de mi aprendizaje 112 | Un argumento es una reflexión 113 | 114 | #### Metacognición 115 | La metacognición es la capacidad para reflexionar, analizar y criticar lo que se esta aprendiendo. 116 | 117 | #### Estrategias meta congestivas: 118 | 119 | Técnicas: 120 | * Trázate un objectivo. 121 | * Detente a reflexionar sobre el objetivo mientras estas aprendiendo. 122 | * Al finalizar evalúa tu objectivo. 123 | 124 | Ayudate de las siguientes preguntas 125 | * ¿Qué aprendí? 126 | * ¿Cómo lo aprendí? 127 | * ¿Qué fue los más difícil de aprender? 128 | * ¿Cómo lo logré? 129 | * ¿Qué habilidades mejoré? -------------------------------------------------------------------------------- /CRECIMIENTO/GESTIONTIEMPO/note.md: -------------------------------------------------------------------------------- 1 | # Gestion efectiva de tiempo 2 | 3 | Para le gestión de tiempo efectivamente debemos enfocarnos en el flujo de trabajo y gestionar todas las tares que se tienen por hacer. 4 | 5 | #### Criterios de priorización. 6 | * Importante: Son aquellas que producen resultados tangibles, están alienadas a una meta o estrategia en común y los efectos de no realizarlos son graves. 7 | * Urgente: Requiere atención inmediata, desplaza nuestra atención y tiene fecha de entrega. 8 | 9 | Cuadrantes: 10 | 11 | * (1) Urgente no importantes: Primeras tareas en realizar ya que no están alineadas a una meta pero necesitan atención inmediata. 12 | * (2) Urgentes e importantes: Actividades que se planearon pero se fueron rezagando, por lo cual no deberían existir tareas que en este apartado, se debería analizar la razón por la cual esta tareas llegaron a este punto. 13 | * (3) No urgente e importantes: Tareas planeadas para lograr nuestros objetivos. 14 | * (4 )No urgentes y no importantes: Se deberían eliminar estas tareas dentro de nuestras actividades. 15 | 16 | Debemos de ser eficientes en las tareas que realizamos, para lo cual debemos evitar: 17 | * Mediocridad: las tareas que realizamos en poco tiempo y por lo cual no agregamos ningún tipo de valor. 18 | * Perfeccionismo: Las tareas tienen un gran valor pero toma demasiado tiempo esto afecta en la realización de otras tareas. 19 | 20 | Por lo que cada tarea que realicemos deben de estar entre la mediocridad y el perfeccionismo, cada tarea debe tener un valor agregado y el tiempo es considerable como para no afectar a otras actividades. 21 | 22 | El tiempo libre también es necesario planearlo ya que en este podríamos practicar algún hobby lo cual ayuda mucho a la creatividad lo cual afecta directamente en ser productivos. 23 | 24 | 25 | Tipos de tareas: 26 | * Individuales. 27 | * Otros dependen de mí. 28 | * Yo dependo de otros. 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /CRECIMIENTO/PRODUCTIVIDAD/note.md: -------------------------------------------------------------------------------- 1 | # Curso de productividad. 2 | 3 | ## ¿Qué es la productividad? 4 | 5 | **Productivad**: Es cuando con los recursos que cuento, timepo determinado y espacion puedo generar un determinado producto. 6 | 7 | Debemos considerar los siguietes conceptos en productividad: 8 | * Eficacia "FINES": Capacidad de lograr el efecto que se desea o espera. 9 | * Eficiencia "MEDIOS": Capacidad de lograr un fin empleando los mejores medios posibles. 10 | * Efectividad: Cuantificación del logro de la meta. 11 | 12 | 13 | **DCU**: Diseñado Centrado en tu usuario. 14 | 15 | Analisis -> Prueba -> Elaboración -> 16 | 17 | 18 | ## Autoconocimiento 19 | Gestión de ti mismo 20 | 21 | Implica gobernar áreas espesificas de ti: tiempo, recursos, canales (plataformas sociales), hábitos (alimentación, cosas que te hacen daño) 22 | 23 | **6W** 24 | When? 25 | Where? 26 | What? 27 | Who? 28 | How' 29 | Why? 30 | 31 | Escribir sobre preguntas 100. 32 | 33 | Preguntas para identificar fortalezas: 34 | * ¿Qué tienes que otros no? 35 | * ¿Qué hacer mejor que otros? 36 | * ¿Cómo describen los demas tus puntos fuertes? 37 | * ¿Qué valor son unnicos para ti? 38 | 39 | Preguntas para identificar Debilidades: 40 | * ¿Tareas que evitas porque no crees que puedas hacerlas? 41 | * ¿En qué cree que no eres bueno? 42 | * ¿Cómo describen los demas tus debilidades? 43 | * ¿Cuáles son los rasgos de personalidad que te detienen? 44 | * ¿Cuáles cree que son tus habitos negativos/malos? 45 | 46 | Preguntas para identificar Oportunidades: 47 | * ¿Te consideras dentro de una industria en crecimiento? 48 | * Si es así, ¿Cómo puede utilizar sus recursos para aprovechar este creciemiento? 49 | * ¿Tu no estas haciendo algo? 50 | * ¿Hay algo de lo que se quejen tus empleadores? 51 | 52 | Preguntas para identificar Amenazas: 53 | * ¿Cuáles son los obstáculos en tu vida profecional? 54 | * ¿Eres parte de un entorno competitivo poco saludable? 55 | * ¿Cambiar la tecnologia es una amenaza para su posición actual? 56 | * ¿Te sientes amenazado por aluna de las debilidades de tu propio "user persona"? 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | * El trabajo duro no es ser productivo. 66 | 67 | -------------------------------------------------------------------------------- /English/B1/notes.md: -------------------------------------------------------------------------------- 1 | # Quantifiers 2 | 3 | Indicate amount or quantities 4 | 5 | |Large quantities|Small quantities| 6 | |----------|:-------------:| 7 | | Much | A few | 8 | | Many | A little | 9 | | A lot of | | 10 | 11 | 12 | ### Much 13 | With uncountable nouns, mainly with **interrogative sentences** 14 | 15 | ### Many 16 | With plural countable nouns, mainly with **interrogative** ans **negative** sentences. 17 | 18 | 19 | ### A lot of/ lots of 20 | With uncountable and plural countable nouns, mainly use in **affirmative** sentences. 21 | 22 | ### A few 23 | With plural countable nouns, usually in affirmative sentences. **Mean that there are not many but enough**. 24 | 25 | | A few | Few | 26 | |----------|:-------------:| 27 | | Positive means | Negative means | 28 | | Not many, but enough | Not enough | 29 | 30 | ### A little / little 31 | 32 | With uncountable nouns, usually in **affirmative** sentences. 33 | 34 | | A little | Little | 35 | |----------|:-------------:| 36 | | Not many, but enough | Not enough | 37 | 38 | 39 | # Nobody, No-one, Nowhere , Nothing 40 | These words can be used at the beginning of a sentences or you can use them by themselves as answers to questions. 41 | 42 | * Nobody/No-one: Not anybody. 43 | * Nothing: Not anything. 44 | * Nowhere: Not anywhere. 45 | 46 | #### Note 47 | We don't use **Nobody**/ **Nothing** / **Nowhere** with a negative verb such as **isn't** / **Didn't** / **Can't**. 48 | 49 | #### Idiom 50 | Out oof nowhere: Appearing suddenly without warning. 51 | 52 | 53 | # Everyone, Everybody, Everything, Everywhere 54 | Are indefinitive pronouns. 55 | We use them to refer to a total number of people, things and places, we write them as a word. 56 | 57 | #### Example: 58 | * His name was Henry, but everyone called him Harry. 59 | 60 | #### Note 61 | It use with singular verb. 62 | 63 | 64 | 65 | # Adverbs: Also / As well / Too 66 | Those meaning in additions, adding points, or emphasizing. 67 | 68 | You can use them at the end of a sentence, in this case mean the same. 69 | 70 | ### Too 71 | You can use too when you agree with someone. 72 | 73 | ### Also 74 | It is commonly use in written english. The main difference is you can use it ath the beginning of the sentence. 75 | 76 | * Make sure you wear a sweater, **also**, bring a hat. 77 | 78 | 79 | # Need to and Need 80 | Need to: Require 81 | 82 | ## Main verb It needs an auxiliary. 83 | 84 | #### Example 85 | * Do they **need to** call more volunteers? 86 | * They don't **need to** call more volunteers? 87 | 88 | ## Modal verb 89 | Absence of obligation or necessary. 90 | * (-) She You **need** only worry about her exam. 91 | * (+) You **need** only just ask. 92 | * (?) **Need** they sign our contract? 93 | 94 | # Compound noun 95 | Noun: A word that names persons place idea or thing. 96 | * Noun contract: Something that oyu can touch. 97 | * Abstract: Natural, feelings, quantities. 98 | * Introduce with articles, possessive, adjectives. 99 | 100 | A compound noun fixed expression with mora than one word. 101 | 102 | Rule: 103 | * First: Purpose or kind. 104 | * Second: Who or what. 105 | * Stress the first syllable. 106 | 107 | Examples: 108 | * NOUN + NOUN : housewife, classroom. 109 | * ADJECTIVE + NOUN : high school, old age, dinning room, green house. 110 | * NOUN + VERB : Rainfall, train spotting. 111 | * NOUN + ADVERB : Passed-by, runner-up. 112 | * VERB + NOUN : Driving license, washing machine. 113 | * ADVERB + NOUN : Bystander. 114 | * ADJECTIVE + VERB : Dry cleaning. 115 | 116 | # Reflexive pronouns and past continuos 117 | We use reflexive pronouns when the actions **affects the same subject** who performs it. 118 | 119 | * I love myself. 120 | * Your put yourself in danger. 121 | * He looks at himself. 122 | 123 | When a person does something on their own. 124 | * In myself did all these things. 125 | * She did the project by herself. 126 | 127 | # Past continuos 128 | We use past continuos to describe things that were happening at specific moment in the past. 129 | 130 | ### Structure 131 | * (+) Subject + Verb BE in PAST + Verb ING + Complement 132 | * (-) Subject + Verb BE in PAST + NOT + Verb ING + Complement 133 | * (?) WH + Verb BE in PAST + Subject + Verb ING + Complement + ? 134 | 135 | ### Example 136 | * She was walking when she saw herself in the mirror. 137 | * They weren't cooking when the food burned. 138 | 139 | # All/All of, Most/Most of, No/None of 140 | 141 | ## All 142 | We can use **all + noun** to talk about the **whole (100%)**, it is used with countable and uncountable nouns. 143 | 144 | ### Example 145 | * **All** cars have wheels. 146 | * **All** my friends live in Madrid. 147 | * We **all** went 148 | * They were **all** happy 149 | 150 | ## All of 151 | We can use also **all of + object pronoun** 152 | ### Example 153 | * **All of them** were at the party. 154 | * He invited me **all of us** to lunch. 155 | 156 | ## Most 157 | We can use most + noun to talk about all people or things in general or most of the/my/etc. + Noun to. 158 | 159 | Talk about specific people or thing. 160 | 161 | ### Example 162 | * **Most of people** trust policeman. 163 | * **Most of people** at the pub were drinking. 164 | 165 | ## Most of 166 | We can also use **most of + object pronoun**. 167 | 168 | ### Example 169 | * **Most of us** come from Madrid. 170 | * They fired **most of them**. 171 | 172 | ## No 173 | We use **no + noun** in affirmative sentences. 174 | 175 | ### Example 176 | * She has **no friends**. 177 | * There are ### Example. 178 | 179 | ## No of 180 | We can use **no of + noun/ pronoun**. 181 | * **None of workers** are from Spain. 182 | * **None of them** is from Spain. 183 | 184 | 185 | # Prepositions whit time 186 | 187 | ## During 188 | For part of a period of time; ath the same time as another event. 189 | ### Example 190 | * He slept **during** the meeting. 191 | 192 | ## Until 193 | Up to, but not after a specific time. 194 | ### Example 195 | * I will stay **until** ten o'clock. 196 | * They will study **until** the day of the exam. 197 | 198 | ## For 199 | During a length of time. 200 | ### Example 201 | * She was working here **for** one month. 202 | 203 | ## Since 204 | Between a past time and now. 205 | ### Example 206 | * I have lived in new York **since** 2012. 207 | 208 | 209 | # For vs Since 210 | 211 | Duration of time. 212 | * I have been living in Spain **for** 6 years. 213 | 214 | Starting point: continuos until now. 215 | * I have been living in Spain since 2012. 216 | 217 | # Yet, Still. Already 218 | 219 | ## Still 220 | Mean that something is ongoing, hasn't finished particularly earlier. 221 | ### Example 222 | * Is your gather still at the same company? 223 | * The baby is still crying. 224 | 225 | ## Yet 226 | Means that something that we expected has happened or hasn't happened. 227 | We usually put it at the end of a sentence. 228 | 229 | ### Example 230 | * She won't have sent the email yet. 231 | 232 | ## Already 233 | Means that something happened earlier than we expected, with present perfect tense. 234 | ### Example 235 | * He has already done the shopping, he is watching T.V. now. 236 | 237 | # Separable vs Inseparable phrasal verbs 238 | 239 | |Separable|Inseparable| 240 | |----------|:-------------:| 241 | | Transitive verbs |Intransitive verbs | 242 | 243 | ### Transitive verbs 244 | A transitive verb has an object. 245 | [Examples](https://englishpost.org/transitive-verbs-list/) 246 | 247 | ### Intransitive verbs 248 | An intransitive vern doesn't have an object. 249 | [Examples](https://englishstudyonline.org/intransitive-verb/) 250 | 251 | ### Object 252 | An object is a noun, pronoun or phrase tha receives the action of the verb. 253 | 254 | # Comparative short Adjectives 255 | |Short adjectives|Spelling rules| Examples| 256 | |----------|:-------------:|:-------------:| 257 | |Usually| + **es** | slow = slower, fast = faster, tall = taller | 258 | |Ending in **e**| + **r** | Large = larger, nice = nicer | 259 | |Some 2 syllable, adjectives, especially ending in **y** | - **y**, + **i**, + **er** | Hungry = Hungrier, Happy = happier, funny = funnier | 260 | |Ending in **a** vowel + consonant| Double the consonant + **er** | Big = bigger, Fat = fatter, Fit = fitter | 261 | 262 | # How to use going to and the near future 263 | We use be going to talk about plans and intentions. 264 | ### Examples 265 | * I'm going to have a big birthday celebration. 266 | * They are going to get married in small church. 267 | 268 | # Present perfect vs Past simple 269 | |Present perfect simple|Past simple| 270 | |----------|:-------------:| 271 | |Un finish actions that started in the past and continue to the present| Finished actions| 272 | |A finish action in someone's life **When the person is still alive**|A finish action in someone's life **When the person is dead**| 273 | |A finish action with result in the present|A finish action with no result in the present| 274 | |With and un finished time word **this week**, **this month**, **today**|With a finished word **last week**, **last month**, **yesterday** | 275 | 276 | 277 | -------------------------------------------------------------------------------- /English/B1Plus/note.md: -------------------------------------------------------------------------------- 1 | # Module 1 2 | # Hear / Hear about / Her from / Hear of 3 | 4 | ## To hear + Noun / Pronoun 5 | Here is the verb of involontary perception. It must be built with the modal auxiliary **can**. 6 | 7 | ### Example 8 | * If you keep quiet, you **can** hear the birds singing in the garden. Sorry but I **can't** hear anything. 9 | 10 | ## Hear + Direct Object Complement + infinitive without TO 11 | To Hear someone DO something: Hear can be followed by the infinitive without TO (base verb) if the action is seen entirely, from beginning to end. 12 | 13 | ### Example 14 | * I could her him speak about his father and was really shocked by his words. 15 | 16 | ## Hear + Direct Object Complement + infinitive without -ing 17 | To Hear someone Do something: Hear can be followed by the verb + **ING** if the action which is described is in progress at that moment. (**It's being doing**) 18 | 19 | ### Example 20 | * I could hear the teacher speaking.. I was late for the lesson! 21 | 22 | ## To Hear about 23 | TO know or learn about a fact or event. 24 | 25 | ### Example 26 | * Have you heard about the tennis championship taking place in your town? 27 | 28 | ## To Hear from 29 | TO have or receive new from someone 30 | 31 | ### Example 32 | * Have you hear from Jim since came back from Europe? 33 | 34 | ## To hear OF 35 | * TO be Told/Know about someone or something. 36 | 37 | ### Example 38 | * Have you hear of that actor? I don't know any of the plays he acted in! 39 | 40 | # Present continuous 41 | Present continuos + always, constantly, express habits that annoy us, surprise us or happen mora than usual. 42 | 43 | ### Example 44 | * He's always leaving dirty clothes all over the place. 45 | * I like her because she's always making jokes. 46 | 47 | # Restrictive Relative clause / Nonrestrictive Relative clause 48 | 49 | |Restrictive Relative clause|Nonrestrictive Relative clause| 50 | |----------|:-------------:| 51 | | A relative clause that is essential to the meaning of a sentence | A relative clause that is not essential to the meaning of a sentence | 52 | | The paper **that** I have just finished is due tomorrow | The final manuscript, **which** was well formatted, was submitted on time | 53 | | The employees **who** work this afternoon are late | The woman, **whoever** she was, left yesterday morning | 54 | 55 | 56 | 57 | # Relative pronouns 58 | A relative pronoun is a pronoun that introduces a relative clauses within a complex sentence. 59 | 60 | ### Example 61 | Mike found the keys **that he had lost**. 62 | 63 | That is a relative pronoun which introduces the relative clause **that he had lost**. 64 | 65 | In English, the relative pronouns are **who**, **whom**, **which**, **whose**, and **that**. 66 | 67 | ## Who 68 | Subject or Object pronoun for people. 69 | 70 | ### Example 71 | * They caught the lady **who** killed her baby. 72 | * I know the man **who** you met. 73 | 74 | ## Which 75 | Subject or Object pronoun 76 | 77 | ### Example 78 | * I read the book **which** is on the table. 79 | * I visited the town **which** you told me about. 80 | 81 | ## Which 82 | Referring to whole sentence. 83 | 84 | ### Example 85 | * They were unsuccessful **which** is disappointing. 86 | 87 | ## Whom 88 | Used for object pronoun for people, especially **in non-restrictive** clauses (in **restrictive** relative clause use **who**) 89 | 90 | ### Example 91 | * The boy **whom** you told me about got the best grades in mathematics. 92 | 93 | ## That 94 | Subject or object pronoun for people, animals, and things in restrictive relative clauses (Who or which are also possible). 95 | 96 | ### Example 97 | * I like the vase **that** is over there. 98 | 99 | 100 | 101 | 102 | # So 103 | |Purpose|Example| 104 | |----------|:-------------:| 105 | | to agree | so do I | 106 | | to refer to | I think so | 107 | | quantifier | very | 108 | | so much/many | quantifier | 109 | | conjunctions | show a result | 110 | 111 | 112 | # So that 113 | Adverb clause marker => purpose 114 | 115 | ### Example 116 | * I worked over time this week so that I could take time off next week. 117 | * so that I could take time off next week: shows the purpose. 118 | 119 | 120 | # So adjective/adverb that 121 | 122 | 123 | 124 | # Module 2 125 | 126 | # Reciprocal pronouns 127 | We use reciprocal pronouns when each of two or more subjects is acting in the same way towards the others. 128 | 129 | There are only tow reciprocal pronouns. 130 | 131 | * Each other 132 | * One other 133 | 134 | ### Example 135 | * Mary and John gave **each other** gold rings on their wedding day. 136 | * Ram and Mina were talking to **each other** in the hallway. 137 | * We gives **each other** gifts during the holidays. 138 | * The students congratulate **one another** after giving practice speeches. 139 | * The kids spend the afternoon kicking the ball to **one another**. 140 | 141 | 142 | # If I were you 143 | You imagine your self in the position or situation of the other person. 144 | It is used to give advice. 145 | 146 | ## Structure 147 | * If were you + I would verb 148 | * I would + verb + If I were you 149 | 150 | ## Why If I were and not If I was? 151 | This is the SUBJUNCTIVE mood which is used for HYPOTHETICAL situations. It is a conditional which is a contrary to fact (The fact is I am not you). 152 | With TO BE, use WERE for all subjects in the SUBJUNCTIVE. 153 | 154 | ### Examples 155 | * If I were you, I would study more. 156 | * If I were you, I wouldn't do that. 157 | * I would go to the doctor if I were you. 158 | * I wouldn't got there if I were you. 159 | 160 | 161 | 162 | # Module 3 163 | 164 | # Present Perfect with yet, just, already, still 165 | 166 | We often use yet, just, already and still with the present perfect because they are related to the present moment. 167 | 168 | ## Just 169 | **Just** used with the present perfect means "**a short time before**" 170 | * I've just seen Susan coming out of the Cinema 171 | * Have you just take my pen? 172 | 173 | ## Yet 174 | **Yet** used with the present perfect means "**at any time up to now**". We used it to emphasise that we expect something to happen soon. yet in this context is only used in negative sentences and questions. 175 | * Have you finished your homework yet? 176 | * I haven't finished it yet. I'll do it after dinner. 177 | * Where's Sam? He hasn't arrive yet. 178 | 179 | ## Still 180 | **Still** used with the present perfect means that something hasn't happened. We use it to emphasise that we expected the thing to happen earlier. Still in this context is only used in negative sentences. 181 | 182 | * I've been waiting for an hour and the bus still hasn't come. 183 | * They promised me tha the report yesterday but they still haven't finished it. 184 | * She still hasn't replied to my email. MAybe she's on holiday. 185 | 186 | ## Already 187 | Already used with the present perfect means "**before now**", We used it to emphasise that something happened before something else or earlier than expected. 188 | 189 | * I've already spent my salary and it's two weeks before payday. 190 | * He wanted to see Sudden Risk but I've already seen it. 191 | * The trains left already. 192 | 193 | 194 | # 5 Types of English Verb + Verb Combinations 195 | 196 | ##  English Verbs + -ING Form 197 | avoid deny finish regret 198 | be/get used to dislike imagine risk 199 | can’t help don’t mind look forward to spend time 200 | can’t stand enjoy practice stop 201 | consider feel like recommend suggest 202 | 203 | * She denies stealing the bags 204 | * I practice running every day 205 | * He stops smoking for health 206 | * I spend time listening music 207 | 208 | # 2 – English Verbs + Infinitive (with TO) 209 | 210 | agree expect manage pretend threaten 211 | attempt fail need promise try 212 | claim hesitate offer refuse want 213 | decide hope plan seem would like 214 | deserve learn prepare tend 215 | 216 | * They want to practice boxing 217 | * I deserve to goo grades 218 | * I claim to get a new salary 219 | * She hesitated to call me yesterday 220 | 221 | # 3 – English Verbs + Object + Infinitive (with TO) 222 | advise convince inform require 223 | allow encourage instruct teach 224 | authorize force permit tell 225 | cause get persuade urge 226 | challenge hire remind warn 227 | 228 | * I instruct him to get a new job 229 | * She allow him to play with his brothers 230 | * He authorize them to get a free day 231 | * She force them to work more time 232 | 233 | # 4 – English Verbs + Infinitive (with TO) or -ING Form 234 | 235 | begin prefer 236 | continue remember* 237 | hate* start 238 | like try 239 | love 240 | 241 | * She start studying very hard 242 | * I try to get a new job 243 | * I continue working in the same company 244 | * She prefers to walk instead used bus 245 | 246 | # 5 – English Verbs + Object + Simple Form (without TO) 247 | 248 | let 249 | make 250 | help 251 | have 252 | 253 | * Let us speak please 254 | * I made some bread 255 | * Can you help me please 256 | 257 | 258 | # Adverbs of comment 259 | 260 | There are some adverbs and adverbial expressions which tell us about the speaker's viewpoint or opinion about an action, or make some comment on the action. 261 | 262 | |Viewpoint or commenting adverb|At the start of a sentence|Before the main verb|At the end of a sentence| 263 | |:----------:|:-------------:|:----------:|:-------------:| 264 | | Clearly | **Clearly**, he doesn't know what he is doing | He **clearly** doesn't know what he is doing | He doesn't know what he is doing, **clearly** | 265 | | obviously | **Obviously**, you are acting silly. | You are **obviously** acting silly | You are acting silly, **obviously**. | 266 | | personally | **Personally**, I'd rather go by train. | I'd **personally** rather go by train. | I'd rather go by train, **personally**. | 267 | | presumably | **Presumably**, he didn't have time to go to the post office. | He **presumably** didn't have time to go to the post office. | He didn't have time to go to the post office, **presumably**. | 268 | | seriously | **Seriously**, I can't give this speech. | I **seriously** can't give this speech. | I can't give this speech, **seriously**. | 269 | | surely | **Surely** you tried to get here on time. | You **surely** tried to get here on time. | You tried to get here on time, **surely**. | 270 | | technically | **Technically**, we cannot fly to Mars and back. | We **technically** cannot fly to Mars and back. | We cannot fly to Mars and back, **technically**. | 271 | | undoubtedly | **Undoubtedly**, he has a good reason not to come. | He **undoubtedly** has a good reason not to come. | He has a good reason not to come, **undoubtedly**. | 272 | | bravely | **Bravely**, I kept on walking. | I **bravely** kept on walking. | *I kept on walking, **bravely**. | 273 | | Carelessly | **Carelessly**, she threw her book into the pond. | She **carelessly** threw her book into the pond. | *She threw her book into the pond, **carelessly**. | 274 | | certainly | **Certainly** you should be there. | You **certainly** should be there. / You should **certainly** be there. | You should be there, **certainly**. | 275 | | cleverly | **Cleverly**, Sally hid the jellybeans. | Sally **cleverly** hid the jellybeans. | *Sally hid the jellybeans, **cleverly**. | 276 | | definitely | ***Definitely**, you are smart. | You **defintely** are smart. / You are **definitely** smart. | *You are smart, **definitely**. | 277 | | foolishly | **Foolishly**, they cried out. | They **foolishly** cried out.| They cried out, **foolishly**. | 278 | | generously | **Generously**, he donated the money. | He **generously** donated the money.| *He donated the money, **generously**. | 279 | | stupidly | **Stupidly**, they played in the street. | They **stupidly** played in the street.| *They played in the street, **stupidly**. | 280 | | obviously | **Obviously**, we are lost. | We are **obviously** lost. / *We **obviously** are lost.| We are lost, obviously. | 281 | 282 | # So Vs Such 283 | We can say about **So** and **Such** That; 284 | * Both of them usually have the same meaning **Very**. 285 | * Both of them show extremes. 286 | * We can use both of them to add emphasis to the sentence. 287 | * Although they have some similarities, there are some main differences in their use in a sentence. 288 | 289 | ### Examples So 290 | * So + Adjective = Mark seems so un happy 291 | * So + Adverbs = She speaks so quicly. 292 | * So + Judgement Adjective = It is so rainy outside 293 | * So Much/Many/Few/Little/ + Noun = There are so few cars in the park a lot 294 | 295 | ### Examples Such 296 | * Such + a/an + Adjective + Noun = She is such an intelligent boy 297 | * Such + Judgment Noun = He is such Lier, Don't be such a fool 298 | * Such + a/an Noun = Why did you say such thing? 299 | 300 | # Resources / Materials Part 1: 301 | ## Parallel comparatives 302 | 303 | |Kind|Examples|Structures| 304 | |----------|:-------------:|:-------------:| 305 | | Short and simple | The cheaper, the better |the + comparative (comma) the + comparative | 306 | | Adding nouns | The bigger the risk, the greater the reward. | the + comparative + the + noun (comma) the + comparative + the + noun| 307 | | Comparing actions | The longer they waited, the more anxious they became. | the + comparative + subject + verb (comma) the + comparative + subject + verb| 308 | 309 | ## The…the… with comparative adjectives 310 | 311 | Comparison and contrast are expressed by the use of the…the… with comparative adjectives in parallel clauses. This structure is used to show proportionate increase or decrease. 312 | 313 | 314 | 315 | * The more adventurous it is, the more I like it. (NOT The more it is adventurous, the more I like it.) 316 | * The less I see him the more I like him. 317 | * The more he reads, the less he understands. 318 | * The older we grow, the wiser we become. 319 | * The higher you climb, the colder it gets. 320 | * The richer one grows, the greater one’s worries. 321 | * The less you spend, the more you save. 322 | * The sooner they go, the better it is. 323 | 324 | 325 | 326 | 327 | # Resources / Materials Part 1: 328 | 329 | # The passive with GET 330 | Get is often used instead of be in the passive voice in informal spoken English to refer to an action that happens by accident or unexpectedly: 331 | * Their car **got stolen** in front of their house last night. 332 | * Jerry **got fired** because he was always late for work. 333 | 334 | 335 | Get expresses action and change and is only used with action verbs, not state verbs: 336 | 337 | * Jerry **was fired** because he was always late for work. 338 | * Jerry **got fired** because he was always late for work. (fire is an action verb) 339 | 340 | As get in the passive voice expresses action, it makes it possible to differentiate between an action and a state if it is not otherwise clear: 341 | 342 | * The living room window **was broken**. (state or action) 343 | * The living room window **got broken**. (action) 344 | 345 | The passive with be and the agent mentioned also makes the distinction clear: 346 | * The living room window was broken by the burglar. (action) 347 | 348 | A reflexive pronoun after get indicates that the recipient of the action is in some way involved in or responsible for what happened: 349 | * He **got injured** while playing football. (it was an accident) 350 | * He **got himself injured** while trying bike stunts. (it was partly his fault) 351 | 352 | The get passive is also used in certain idiomatic expressions: 353 | 354 | 355 | ## Idiomatic expressions with the get passive 356 | * get dressed 357 | * get washed 358 | * get engaged 359 | * get married 360 | * get divorced 361 | * get lost 362 | * get mixed up 363 | * get started 364 | 365 | 366 | # FUTURE IN THE PAST 367 | The future in the past is used to refer to something that was the future at some time in the past. It does not matter if the future event happened or not as it was thought to be the future at the time. 368 | 369 | As for the simple future forms will, going to and the continuous, there are three future in the past forms: **would**, **was/were going to** and **was/were + continuous** verb. 370 | 371 | * Would is used to talk about a past future promise or prediction with no evidence. 372 | * Was/were going to is used to talk about a past future firm plan, intention or a prediction with evidence. 373 | * Was/were + continuous verb is used to talk about a future in the past that was a personal arrangement. 374 | 375 | ## Examples 376 | * He **was** sure she **would** never help him. It turned out he had been right – a past promise 377 | * She **promised** she **would** call me, but she never did – a past promise. 378 | * They **said** they **would** be here by 9pm, but they haven’t arrived yet – a promise. 379 | * The newspapers **said** it **would** rain but it’s stayed dry – a prediction without evidence. 380 | * I **thought** they **would** win, but it was a draw – a prediction without evidence 381 | 382 | 383 | 384 | # English Grammar: Future Intentions 385 | Here are some ways you can talk about your future plans and intentions in English. These are activities that you know will happen, because you planned them and decided to do them. 386 | 387 | ## Be going to + verb 388 | Use this to talk about activities you planned before. 389 | Remember to change “be” to the correct form for the subject: 390 | 391 | * I am going to play tennis tomorrow. 392 | * You are going to see your cousin next week. 393 | * He / She is going to get married in September. 394 | * We are going to have a party this weekend. 395 | * They are going to save up for a new car. 396 | 397 | ## Question form 398 | As with all verbs that use the verb “to be”, change the subject and the form of the verb to make questions: 399 | 400 | * Am I going to…? 401 | * Are you going to…? 402 | * Is he / she going to…? 403 | * Are we going to…? 404 | * Are they going to…? 405 | 406 | ## Short replies 407 | 408 | * Yes I am / No I’m not 409 | * Yes you are / No you aren’t (or No you’re not) 410 | * Yes he is / No he isn’t 411 | * Yes we are / No we aren’t (or No we’re not) 412 | * Yes they are / No they aren’t (or No they’re not) 413 | 414 | ## Negative form 415 | 416 | * I am not going to leave my job. 417 | * You aren’t going to visit your cousin this week. 418 | * He / She isn’t going to get married. 419 | * We aren’t going to move house. 420 | * They aren’t going to study at university. 421 | 422 | 423 | # Present Continuous 424 | 425 | We use the Present Continuous to talk about planned appointments and activities. These are the types of activities that you write in your diary, for example. We often give a time reference. 426 | 427 | * Very often, “be going to” and the Present Continuous can be used in the same situations. 428 | * I’m visiting our new office in London this afternoon. (I’m gong to visit our new office…) 429 | * You’re meeting the boss tomorrow. (You’re going to meet the boss…) 430 | * He / She is working from home next week. (He is going to work from home…) 431 | * We’re taking the train to Scotland. (We are going to take the train…) 432 | They’re leaving later today. (They are going to leave…) 433 | 434 | # Be planning to / Be thinking of 435 | 436 | You can use the verbs “plan” and “think” in the present continuous is to talk about activities that aren’t 100% definite. 437 | 438 | * I’m planning to study abroad next year. 439 | * We’re thinking of getting a dog. 440 | 441 | Remember: “be planning to” is followed by the verb; “be thinking of” is followed by a gerund (ing form). 442 | 443 | # Review of “will” 444 | 445 | We can use “will” to talk about the future and make predictions. 446 | 447 | * “We won’t have enough money to buy a new house this year.” 448 | 449 | We can also use “will” to talk about decisions that we make at the time of speaking (NOT decisions that we plan before): 450 | 451 | * “I’ll help you with your bags.” (at the moment you see someone with a heavy bag) 452 | 453 | # Past Perfect Tense 454 | The past perfect, also called the pluperfect, is a verb tense used to talk about actions that were completed before some point in the past. 455 | 456 | ## Example 457 | We were shocked to discover that someone had graffitied “Tootles was here” on our front door. We were relieved that Tootles had used washable paint. 458 | 459 | The past perfect tense is for talking about something that happened before something else. Imagine waking up one morning and stepping outside to grab the newspaper. On your way back in, you notice a mysterious message scrawled across your front door: Tootles was here. When you’re telling this story to your friends later, how would you describe this moment? You might say something like: 460 | 461 | * I turned back to the house and saw that some someone named Tootles had defaced my front door! 462 | 463 | In addition to feeling indignant on your behalf, your friends will also be able to understand that Tootles graffitied the door at some point in the past before the moment this morning when you saw his handiwork, because you used the past perfect tense to describe the misdeed. 464 | 465 | ## The Past Perfect Formula 466 | The formula for the past perfect tense is had + [past participle]. It doesn’t matter if the subject is singular or plural; the formula doesn’t change. 467 | 468 | ## When to Use the Past Perfect 469 | 470 | So what’s the difference between past perfect and simple past? When you’re talking about some point in the past and want to reference an event that happened even earlier, using the past perfect allows you to convey the sequence of the events. It’s also clearer and more specific. Consider the difference between these two sentences: 471 | 472 | * We were relieved that Tootles used washable paint. 473 | * We were relieved that Tootles had used washable paint. 474 | 475 | It’s a subtle difference, but the first sentence doesn’t tie Tootles’s act of using washable paint to any particular moment in time; readers might interpret it as “We were relieved that Tootles was in the habit of using washable paint.” In the second sentence, the past perfect makes it clear that you’re talking about a specific instance of using washable paint. 476 | 477 | Another time to use the past perfect is when you are expressing a condition and a result: 478 | 479 | * If I had woken up earlier this morning, I would have caught Tootles red-handed. 480 | 481 | The past perfect is used in the part of the sentence that explains the condition (the if-clause). 482 | 483 | Most often, the reason to write a verb in the past perfect tense is to show that it happened before other actions in the same sentence that are described by verbs in the simple past tense. Writing an entire paragraph with every verb in the past perfect tense is unusual. 484 | 485 | ## Common Irregular Verbs in the Past Perfect Tense 486 | Infinitive 487 | 488 | |Infinitive|Past Perfect|Negative| 489 | |----------|:-------------:|:-------------:| 490 | | To be | had been | had not been | 491 | | To have | had had | had not had | 492 | | To do | had done | had not done | 493 | | To say | had said | had not said | 494 | | To get | had gotten | had not gotten | 495 | | To make | had made | had not made | 496 | | To go | had gone | had not gone | 497 | | To take | had taken | had not taken | 498 | | To see | had seen | had not seen | 499 | | To come | had come | had not come | 500 | 501 | *The past participle of “to get” is “gotten” in American English. In British English, the past participle is “got.” -------------------------------------------------------------------------------- /English/Curso de Inglés Práctico: Gramática/note.md: -------------------------------------------------------------------------------- 1 | # Curso de Inglés Práctico: Gramática 2 | 3 | ## Grammar: Simple past with the verb be and other verbs 4 | We use the simple past with the verb BE to talk about how things were before. 5 | 6 | Examples: 7 | * I **was** young when we **moved**. 8 | * She **was** a very good student at school. 9 | * He **was** very quite when he **was** a kid. 10 | * **Was** it too difficult? 11 | * You **were** very good students at school. 12 | 13 | Structure: 14 | * Subject + verb BE + complement 15 | * Subject + verb BE + NOT + complement 16 | * Verb BE + subject + complement + ? 17 | 18 | For other verbs the simple past is formed by adding -**ed** at the end of the verb. 19 | 20 | Examples: 21 | * We **moved** to Canada when I was 5. 22 | * I **accepted** the job and I **moved** to Mexico. 23 | * She **didn't** work there for so long 24 | 25 | There are some verbs that change. Irregular verbs. 26 | * She **spoke** English and Portuguese. 27 | * He **had** a very good friend when we **was** a kid. 28 | * They **didn't** **spend** time watching TV. 29 | 30 | ## Vocabulary: Types of determiners 31 | 32 | | Determiner | Example | 33 | |----------- |-------- | 34 | | Articles | A, an, the | 35 | | Possessives | My, your, his, her, its, our, their| 36 | | Demonstratives | This, that, these, those | 37 | | Numerals | One, Two, three, four | 38 | | Ordinals | First, second, next, last | 39 | | Quantifiers | Many, few, some, every, much, a lot of, any, less | 40 | 41 | 42 | ## Grammar: How to use determiners 43 | We use determiners to express the reference of a noun in a given context, they tell us if the noun is general or specific. 44 | 45 | ### Specific determiners 46 | We use specific determiners when we believe the listener/reader knows exactly we are talking about. 47 | 48 | * The definite article: **the** 49 | * Possessives: **My, your, his, her, its, their, our** 50 | * Demonstratives: **This, that, those, these** 51 | * Interrogative: **Which** 52 | 53 | 54 | Examples 55 | * Do you want **the** ketchup? 56 | * Look at **the** lovely dogs 57 | * Thanks for **your** presents 58 | * **This** is **my** computer 59 | * People don't like **this** candidate 60 | 61 | ### General determiners 62 | we use general determiners when the listener doesn't know what we are talking about. 63 | We can use un count noun or a plural noun with **no**. 64 | * A 65 | * An 66 | * Any 67 | * Another 68 | * Other 69 | * What 70 | 71 | Example 72 | * I like **any** dog I see 73 | * I need **another** computer. 74 | * **Education** is the most relevant aspect for society 75 | * **Water** is good for us 76 | 77 | ## Grammar: Expressions to give directions in the city 78 | 79 | There are many expressions to give directions in English 80 | 81 | * **Straight ahead**: To continue in the same direction. 82 | * Go straight ahead for two blocks 83 | * **Turn right**: Turn in different directions. 84 | * **Turn left**: Turin different directions. 85 | * Turn right at the corner and walk straight ahead 86 | * **To across the street** 87 | * Cross the street and you will see the bank. 88 | 89 | ## Prepositions of place 90 | 91 | | Preposition of place | Example |Notes| 92 | |-------------|---------|---------| 93 | |Next to|The bank **is next to** the bakery| 94 | |Beside|The bank is **beside** the bakery| 95 | |close to| The bank is **close to** the pet store| 96 | |Near|The bank is **near** the pet store|you don't us **to**| 97 | |In front of|The restaurant is in front of the pet store|| 98 | |Across|The pet store is across the street|| 99 | 100 | # Grammar: The expression its + adjective + to verb 101 | 102 | |Adjective|Example| 103 | |---------|-------| 104 | |Beautiful|It's beautiful to see the sunset| 105 | |Boring|It's boring to wait for the flight| 106 | |Exciting|It's exciting to visit new places| 107 | |Fascinating|It's fascinating to visit museums| 108 | |Expensive|It's expensive to stay 5 starts hotels| 109 | |Cheap|It's cheap to use public transport| 110 | 111 | 112 | # Grammar: The use of whose and possessive pronouns 113 | Whe use **WH** questions **WHOSE** to identify the owner of an object. 114 | 115 | A: Whose is this cellphone? 116 | B: This cellphone is Sebastian's but this one is **mine**. 117 | 118 | ## Possessive pronouns 119 | We use possessive pronouns to refer to the owner of an object. 120 | 121 | |Pronoun |Possessive Pronoun|Example| 122 | |--------|------------------|-------| 123 | |I|Mine|Juan's car is red **mine** is black| 124 | |You|Yours|My house is white, **yours** is blue| 125 | |He|His|**His** books are only about math **mine** are about programing| 126 | |She|Hers|Jose's desk is black, **hers** are brown| 127 | |It|Its|My dog is hungry and it's eating **its** food| 128 | |We|Ours|**Their** house is far from the city **ours** is very close| 129 | |They| Theirs |**Our** car is fast **theirs** is slow| 130 | 131 | 132 | # Grammar: Reflexive pronouns and the past continuous 133 | We use reflexive pronouns when the action affects the same subject who performs it. 134 | 135 | |Pronoun |Reflexive Pronoun| 136 | |--------|------------------| 137 | |I|Myself| 138 | |You|Yourself| 139 | |He|Himself| 140 | |She|Herself| 141 | |It|Itself| 142 | |We|Ourselves| 143 | |They| Theirselves | 144 | 145 | Example: 146 | * I love **myself**. 147 | * You put **yourself** in danger. 148 | * He looks at **himself**. 149 | 150 | Or when a person doing something on their own. 151 | Example: 152 | * I myself did all these things. 153 | * She did the project herself. 154 | 155 | ## Past continuous 156 | We use the past continuous to describe things that were happening at a specific moment in the past. 157 | 158 | Structure: 159 | * **+** Subject + verb in past + verb ing + complement 160 | * **-** Subject + verb in past + not + verb ing + complement 161 | * **?** WH + verb in past + subject + verb ing + complement + ? 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | -------------------------------------------------------------------------------- /English/note.md: -------------------------------------------------------------------------------- 1 | # Simple present BE. 2 | We use the simple present ad BE to talk about descriptions on locations in the present. 3 | 4 | * I am a teacher. Description 5 | * I am 30 years old. Description 6 | * She is a designer. Description 7 | * She is 27. Description 8 | * He is at the office right now. Location 9 | 10 | # Simple present with others verbs. 11 | We use the simple present with others verbs to talk about regular activities, likes and dislikes. 12 | 13 | * She works in a big office. 14 | * They walk to work every day. 15 | * We don't have a car right now. 16 | * Do you train in the morning? 17 | 18 | Note: When use third person "He, She and It" it is necessary to Conjugate the verbs in **third person**. s, es and ies. 19 | 20 | ## Structure 21 | 22 | * Affirmative 23 | * Subject + verbs + complement 24 | * Negative 25 | * Subject + DO/DOES + not + complement 26 | * Interrogative 27 | * WH/DO/DOES + subject + verb + complement + ? 28 | 29 | Auxiliaries 30 | * DO 31 | * I, we, they and you 32 | * DOES 33 | * He, she and it 34 | 35 | 36 | # Grammar: How to use too and either 37 | 38 | We use **too** and **either** when we want to show that have something in common with someone. 39 | 40 | **Too** is used in affirmative sentences and **either** for negative sentences. 41 | 42 | A: I love flowers 43 | B: I do **too** 44 | 45 | **Note**: We use the corresponding auxiliary to respond the expression. 46 | 47 | A: She isn't cold right now 48 | B: I'm **not either** 49 | 50 | A: They enjoy cooking 51 | B: We do **too**. 52 | 53 | A: He has a car 54 | B: She does **too** 55 | 56 | ## SO, TOO, NEITHER and EITHER 57 | 58 | ### So and too 59 | I like Japanese food a lot. 60 | * So do I / I do too 61 | 62 | I'm crazy about dessert 63 | * So I'm I / I am too 64 | 65 | I can eat spicy food 66 | * So can I / I can too 67 | 68 | ### Neither and Either 69 | I don't like greasy food 70 | * Neither do I / I don't either 71 | 72 | I'm not in the mood for Indian food 73 | * Neither am I / I'm not either 74 | 75 | I can't stand fast food 76 | Neither can I / I can't either 77 | 78 | 79 | # Grammar: Use of different types of verbs 80 | There are different types of verb forms 81 | * To + verb 82 | * Verb + ing 83 | * Modal + verb 84 | 85 | Examples: 86 | * we like **to spend**d time with our friends 87 | * They enjoy **waking** up early: The verb enjoy alway is fallow by **ing** verb 88 | * You **can** go to the GYM in the morning 89 | * They **can't** go outside now 90 | * She hates **working** out 91 | 92 | 93 | # Grammar: The use of object pronouns 94 | Object pronouns are used to replaced nouns that **received an action**. 95 | * My mom loves my sister. She loves her. 96 | * Nicholas cooks spaghetti. He cooks it. 97 | 98 | ## Object pronouns 99 | * I -> Me. She likes me. 100 | * You -> You. John calls you 101 | * He -> Him. I can see him 102 | * She -> Her. My mom loves her 103 | * We -> Us. You need us 104 | * They -> Them. She teach them 105 | * It -> It. I hit it 106 | 107 | 108 | * I have two dogs. I generally walk **them** in the morning when it’s cold. 109 | 110 | * I need to read this book. John is now reading **it**. 111 | * Carolina usually calls her mom in the afternoon. Right now she is calling **her**. 112 | * Many people like Carlos Vives. I personally don’t like **him**. 113 | Let’s go. They are waiting for **yuo**. 114 | 115 | 116 | # Grammar: The use of the pronouns everyone and nobody 117 | 118 | **Everyone** and **nobody** are indefinite pronouns, they use to refer to all members of a group that perform an action. 119 | 120 | Examples: 121 | * **Every** one in my class has a part time job. 122 | * **Nobody** in this conference wants to attend the next one. 123 | * **Everyone** in my family know how to cook. 124 | * **Nobody** in my job has a car **everyone** has a bike. 125 | 126 | # Grammar: Difference between simple present and present continuous 127 | 128 | **Simple present** 129 | We use the simple present to talk about things that happen all time, routines. 130 | 131 | Examples: 132 | * I have tea and crackers for breakfast 133 | * She walks everywhere, she doesn't have a car 134 | * He wakes up early in the morning 135 | * We eat a lot of fruits and vegetables 136 | 137 | **Present continuous** 138 | We use present continuous to talk about things that are happening right now. 139 | 140 | Structure: 141 | * Subject + Verb BE + Verb ING + complement 142 | * Subject + verb BE + NOT + verb ING + complement 143 | * Verb BE + Subject + verb ING + complement + ? 144 | 145 | Examples: 146 | * She is waking up early to go to the Gym 147 | * He isn't eating sugar right now 148 | * What are you doing to stay healthy? 149 | * They aren't reading books right now 150 | * I'm swimming three times a week 151 | * I'm trying to cut down on sugar and coffee 152 | 153 | A: What are you doing these days? 154 | B: I'm jogging at the park 155 | 156 | 157 | # Grammar: The use of the expressions if and when 158 | 159 | We use **IF** and **WHEN** to express the consequence of a specific action. 160 | 161 | Examples: 162 | * **When** I fell sick. I stay hom.e 163 | * **If** I feel sick. I stay home. 164 | * I take medicine **if** the doctor gives to me. 165 | * I take medicine **when** the doctor gives to me. 166 | * I see the doctor **when** I feel really bad. 167 | * I see the doctor **if** I feel really bad. 168 | 169 | # Grammar: How to use going to and the near future 170 | We use **be going to** to talk about plans and intentions. 171 | 172 | Structure: 173 | * Subject + verb be + going to + verb + complement 174 | * Subject + verb be + not + going to + verb + complement 175 | * Wh + verb be + subject + going to + verb + complement + ? 176 | 177 | Examples: 178 | * I'm going to have a big birthday celebration 179 | * They are going to get married in a small church. 180 | * She is going to graduate the next summer. 181 | * I'm not going to give up till pass this course. 182 | * When are we going to celebrate your birthday? 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | -------------------------------------------------------------------------------- /FRONT_END/HTMLCSS/note.md: -------------------------------------------------------------------------------- 1 | # Curso practico de HTML y CSS 2 | 3 | #### HTML 4 | Hyper Text Markup Language que nos ayuda a estructurar la información que se muestra al usuario. 5 | 6 | #### Tags 7 | Html utiliza tags que pueden ser contenedoras siempre abren y cierran pero cuando muestran contenido pueden cerrar o no. 8 | 9 | #### CSS 10 | Lenguaje que nos ayuda darle estilos a lo que estamos mostrando al usuario. 11 | 12 | #### Selector 13 | Selector + propiedad + valor de la propiedad = Reglas. 14 | 15 | Propiedades utilizadas en CSS: 16 | * Etiquetas: Etiquetas de html que se utilizan como referencia para dar el estilo. 17 | * Clases: Son más común utilizar 18 | * Id: id es un identificador de un componente 19 | 20 | 21 | #### HTML semantico 22 | Son nuevas etiquetas incluidas en HTML que nos ayudan a estructurar mejor un sitio web y añadir un significado concreto. 23 | 24 | ~~~html 25 |
26 | 27 | 28 | 29 |
30 |
31 | ~~~ 32 | 33 | #### Tipos de display 34 | Los tipos de display más conocidos son: 35 | * Layout que inici en CSS1 36 | * Flex 37 | * Grid 38 | 39 | [Tipos de display](https://developer.mozilla.org/es/docs/Web/CSS/display) -------------------------------------------------------------------------------- /FRONT_END/PREPROCESADORES/note.md: -------------------------------------------------------------------------------- 1 | # Preprocesadores CSS 2 | ## Introducción 3 | #### Conceptos básicos de CSS 4 | Cascading Styles Sheet, prácticamente son las reglas que se les aplicas a un documento HTML. 5 | * Extención .css 6 | * Puede ser envevido dentro de la etiqueta style en el documento HTML 7 | * Puede ser exportado con la etiqueta link dentro de la etiqueta header. 8 | 9 | **Un estilo CSS esta formado por: Selector, declaración y una propiedad o valor.** 10 | 11 | ```css 12 | h1 { color: blue; } 13 | ``` 14 | 15 | #### Selectores CSS 16 | 17 | Nos permiten seleccionar un elemento de página a la cual vamos a aplicar los estilos. 18 | 19 | Selectores: 20 | * Selector universal **\***: Sirve para aplicar estilos a todo el documento. 21 | ```css 22 | /* 23 | Todas las etiquetas tendran margen de 0 24 | */ 25 | * { 26 | margin: 0; 27 | } 28 | ``` 29 | * Selector de etiqueta: Se utiliza las etiquetas de html a las las cuales podemos agreagrarles estilos. 30 | 31 | ```css 32 | /* 33 | Las etiquetas h1,h2,p tendran color blanco 34 | */ 35 | h1,h2,p { 36 | color: white; 37 | } 38 | ``` 39 | * Selector de ID: este selector se indentfica con **\#**, este debe de setr único 40 | ```css 41 | #service { 42 | color: white; 43 | } 44 | 45 | ``` 46 | * Selector de clase: este selector se indentfica con **.**. 47 | ```css 48 | .service { 49 | color: white; 50 | } 51 | ``` 52 | 53 | * Selector anidado, se aplican estilos a elemetos decendientes 54 | 55 | ```html 56 |

Services

57 |
58 |

Services

59 |
60 | ``` 61 | ```css 62 | /* 63 | Para este caso todas la etiquetas dentro de la case container seran de color blanco. 64 | */ 65 | .container h1{ 66 | color: white; 67 | } 68 | ``` 69 | 70 | * Selector hijo **>** 71 | ```css 72 | /* 73 | Para este caso los hijos directos de la clase service son los que tomaran los estilos 74 | */ 75 | .service > p{ 76 | color: white; 77 | } 78 | ``` 79 | 80 | * Selector adyacente **+** 81 | ```html 82 |

Services

83 |

Services

84 | ``` 85 | 86 | ```css 87 | /* 88 | Para este caso a la primera etiqueta de h1 tendra el color negro y las segunda sera de color blanco 89 | */ 90 | h1 { 91 | color: black; 92 | } 93 | h1+h1{ 94 | color: white; 95 | } 96 | ``` 97 | 98 | * Selector de atributo **input[type: number]** 99 | ```html 100 | 101 | 102 | ``` 103 | 104 | ```css 105 | /* 106 | El inout de tipo texto sera de color azul y el de numero rojo 107 | */ 108 | input[type: "number"]{ 109 | color: red; 110 | } 111 | 112 | input[type: "text"]{ 113 | color: blue; 114 | } 115 | ``` 116 | 117 | Como determinar el valor de una regla CSS 118 | * ID: 100 119 | * clase: 10 120 | * 121 | 122 | ## Evelución de las tecnologías de Front-End 123 | #### Introcucción a los preprocesadores 124 | 125 | Los preprocesadores nos ayudan a escribir pseudocódigo de forma modular el cual puede ser transformado de forma que el navagador pueda entender. 126 | 127 | Ventajas: 128 | * Tiempo 129 | * Código sencillo 130 | * Modularización 131 | 132 | #### Metodologías para estructurar código 133 | 134 | Ventajas 135 | * Evitar redundancia 136 | * Evitar mal uso de propiedades 137 | * Solución de problemas de manejo en sistemas grandes y complejos 138 | 139 | #### Introducción a BEM 140 | 141 | BEM establece que debemos utilziar clases para nuestros selectores: 142 | * Bloques: Son los elementos más grandes los cuales contienen otros elementos 143 | * Elementos: Estos siempre formam parate de un bloque, estos pueden ser: 144 | * Textos 145 | * Botones 146 | * Imagnes 147 | * Modificadores: Se uzan para darle un estilos espesifico a un bloque o elemento. 148 | 149 | #### Guías para creación y mantenimiento de código 150 | 151 | * Ser consistentes con la indentación. 152 | * Consistencia con espacios, corchetes, puntos y comas. 153 | * Consistencia de números, de selectores y divisiones. 154 | * Agrupaciones de propiedades. 155 | Uso de ID’s y clases. 156 | 157 | ## Preprocesadores para HTML 158 | 159 | #### Interpolación 160 | 161 | Prácticamente es la anidación de los elementos de HTML 162 | 163 | ```html 164 | html(lang="en") 165 | head 166 | meta(charset="UTF-8") 167 | meta(name="viewport", content="width=device-width, initial-scale=1.0") 168 | title Document 169 | link(rel="stylesheet", href="style.css") 170 | ``` 171 | 172 | #### Variables 173 | 174 | Para declarar una variable en pug se realiza de la siguiente manera 175 | 176 | ```pug 177 | -var titlte = "Title" 178 | ``` 179 | 180 | Para acceder a ella 181 | ```pug 182 | h1= titlte 183 | 184 | h1 #{titlte} 185 | ``` 186 | 187 | #### Condicionales y Loops 188 | 189 | Loops 190 | ```pug 191 | -var titles = ["One","Two","Three"] 192 | ul 193 | each title in titles 194 | li #{title} 195 | ``` 196 | 197 | Condicionales 198 | ```pug 199 | -var user = "Jose Luis" 200 | if user 201 | a Hola #{user} 202 | else 203 | a.button Registro 204 | ``` 205 | 206 | 207 | #### Mixins 208 | Su finalidad es crear una funcionalidad que pueda ser reutilizada pero no de forma autonoma, nos permiten crear bloaues de código que cambian de acuerdo al valor del paramarametro que le enviemos. 209 | 210 | ```pug 211 | mixin box(image, title, content) 212 | .box 213 | .box__image: img(src="", alt="") 214 | .box__content 215 | h3 #{title} 216 | p #{content} 217 | 218 | 219 | main.content 220 | +box("image0", "title1", "content2") 221 | +box("image0", "title1", "content2") 222 | +box("image0", "title1", "content2") 223 | ``` 224 | 225 | #### Includes y Extends 226 | 227 | Se puede utilizar **Includes** para importar archivos externos y **Extends** permite adicionar bloques de código. 228 | 229 | 230 | ## Introducción a Less 231 | 232 | #### Importar otros archivos 233 | ```less 234 | @import "file.less" 235 | ``` 236 | 237 | #### Declaración de variables 238 | ```less 239 | @primary-color: #000000; 240 | 241 | h1 { 242 | color: @primary-color; 243 | } 244 | ``` 245 | 246 | #### Funciones ya definidas 247 | ```less 248 | //Cambiar la opacidad 249 | color: fade(@color, 50%) 250 | ``` 251 | 252 | #### Mixins 253 | 254 | Su funcionalidad es utilidar esta funcionalidad en otros componentes. 255 | ```less 256 | // se declara 257 | .box-shadow { 258 | -webkit-box-shadow: 10px 10px 5px 0px rgba(0,0,0,0.75); 259 | -moz-box-shadow: 10px 10px 5px 0px rgba(0,0,0,0.75); 260 | box-shadow: 10px 10px 5px 0px rgba(0,0,0,0.75); 261 | } 262 | 263 | //como se invoca 264 | .box { 265 | .box-shadow; 266 | } 267 | ``` 268 | 269 | ## Introducción a Sass 270 | Syntactically Awesome StyleSheets 271 | Badasa en Ruby 272 | 273 | #### Variable 274 | ```scss 275 | $font-one = "Lato"; 276 | 277 | h1 { 278 | font-family: $font-one; 279 | } 280 | ``` 281 | 282 | #### Imports y Extends 283 | 284 | **Import** nos permite escribir código modular separando en diferentes archivos para después importarlos todos en uno solo y tener una base código mucho más ordenada. 285 | 286 | **Extends** sirve para insertar los estilos de un selector en otro. 287 | 288 | ```scss 289 | @import"../componentes/globales.scss"; 290 | 291 | .class-one { 292 | background: #FFFFFF; 293 | } 294 | 295 | .class-two { 296 | @extend .class-one; 297 | } 298 | ``` 299 | 300 | #### Mixins 301 | 302 | Su funcionalidad es utilidar esta funcionalidad en otros componentes. 303 | 304 | ```scss 305 | // se declara 306 | @mixin box-shadow { 307 | -webkit-box-shadow: 10px 10px 5px 0px rgba(0,0,0,0.75); 308 | -moz-box-shadow: 10px 10px 5px 0px rgba(0,0,0,0.75); 309 | box-shadow: 10px 10px 5px 0px rgba(0,0,0,0.75); 310 | } 311 | 312 | //como se invoca 313 | .box { 314 | @include box-shadow; 315 | } 316 | ``` 317 | 318 | 319 | #### Funciones 320 | 321 | La diferencia entre mixins y funciones es que las funciones por general hacen cálculos y regresan un resultado que es usado como valor de alguna propiedad. 322 | 323 | ```scss 324 | @function get-opacity($color, $level){ 325 | @return rgba($color, $level); 326 | } 327 | 328 | .box { 329 | color: get-opacity($color, 50%); 330 | } 331 | ``` 332 | 333 | #### Condicionales y Loops 334 | ```scss 335 | @each $header, $size in (h1: 30px, h2: 25px, h3: 20px){ 336 | #($header){ 337 | font-size: $size; 338 | margin: 0; 339 | } 340 | } 341 | 342 | @if () { 343 | // 344 | } @else { 345 | // 346 | } 347 | ``` 348 | 349 | ## Stylus 350 | 351 | Es el preprocesador CSS más reciente de los tres. Fue creado por TJ Holowaychuk (ex programador de Node.js) y escrito en JADE y Node.js. 352 | 353 | #### Variables 354 | 355 | ```stylus 356 | FontOne = 'Lato' 357 | FontTwo = 'Oswald' 358 | 359 | 360 | h1 361 | font-family FontOne 362 | ```` 363 | 364 | #### Mixins 365 | 366 | ```stylus 367 | container() 368 | ... 369 | 370 | .demo 371 | container() 372 | ``` 373 | 374 | #### Functiones 375 | 376 | ```stylus 377 | add(a, b) 378 | a + b 379 | 380 | body 381 | padding add(10px, 5) 382 | ``` 383 | 384 | #### Condicionales y Loop 385 | 386 | ```stylus 387 | compare(a, b) 388 | if a > b 389 | higher 390 | else if a < b 391 | lower 392 | else 393 | equal 394 | 395 | 396 | compare(5, 2) 397 | 398 | 399 | for header in 3 2 1 400 | h{ header } 401 | font-zise 35px -(5 * header) 402 | margin 0 403 | ``` -------------------------------------------------------------------------------- /FRONT_END/REACT/PWA/note.md: -------------------------------------------------------------------------------- 1 | # Curso de PWA con ReactJS 2 | 3 | #### ¿Qué es una PWA? 4 | 5 | ¿Cómo es la web hoy? 6 | * No funciona muy bien 7 | * Malas conexiones 8 | * La UX no solamente es el diseño de nuestra app. 9 | 10 | Importancia 11 | * 50% de usuarios abandonan sitio en 3 segundos 12 | * cada segundo cuesta entre 5-10% 13 | 14 | 15 | **PWA es un Estándar de calidad en nuestras aplicaciones**. 16 | 17 | Palabras claves: 18 | * Performance 19 | * Instalable Homescreen 20 | * Dar soporte Offline 21 | 22 | 23 | #### Progressive Web App vs. Native App 24 | 25 | Depende de las funcionalidades que necesitemos. 26 | 27 | #### proyecto 28 | 29 | #### Google Lighthouse 30 | 31 | Permite hacer diagnostico de performance de nuestra app. 32 | Notas 33 | * Lighthose no sustituye pruebas con dispositivos reales. 34 | * Diagnostico First meaningful Paint y First interactive: 35 | * First meaningful Paint: tiempo que tarda en renderizar la primera pantalla debe de pasar de 1 y 2 36 | * First to intercative: Cuando ya se cargo React y podemos interactuar con la app. 37 | 38 | Para bajar los tiempos se debe de utilizar Server rendering (First meaningful Paint) 39 | 40 | Depende del framework que estamos utilizando (First intercative), este tiene que ser de almenos de 5 segundos. 41 | 42 | #### Creando un Web Manifest 43 | * short_name: Es el nombre que se utiliza en la Homescreen. 44 | * name: Es el nombre de nuestra aplicación. 45 | * icons: Especifica un array de imágenes que servirán como iconos de la aplicación. Cambiaremos el “favicon.ico” por “icon.png”, especificamos el tamaño a 512x512 y el tipo a “image/png”. 46 | * start_url: Nos indica en que página comienza nuestra aplicación, por compatibilidad siempre conviene que sea “/” en lugar de “./index.html”. 47 | * display: Define el modo de visualización para la aplicación. Standalone significa que la aplicación puede correr por si misma. 48 | * theme_color: Define qué color vamos a usar en la barra de tareas de Android para que combine con nuestra aplicación. 49 | * related_applications: Sirve si queremos que Chrome en el Add to Homescreen recomiende una aplicación del Store. 50 | 51 | ~~~json 52 | { 53 | "short_name": "Recetas", 54 | "name": "Platzi Recetas", 55 | "icons": [ 56 | { 57 | "src": "/icon.png", 58 | "sizes": "512x512", 59 | "type": "image/png" 60 | } 61 | ], 62 | "start_url": "/", 63 | "scope": "/", 64 | "display": "standalone", 65 | "theme_color": "#ffa500", 66 | "background_color": "#ffffff", 67 | "related_applications": [], 68 | "prefer_related_applications": false 69 | } 70 | ~~~ 71 | 72 | 73 | ## Servir Worker 74 | #### ¿Qué es un Service Worker? 75 | * Soporte Offlien 76 | * Proxy in browser 77 | 78 | Es una de las características más importantes de las PWA, es lo que hace las las PWA funcionen, es un script que se ejecuta detrás de un navegador y esto no puede tocar a nuestro DOM. 79 | Se puede tener control absoluto a nivel de red de nuestra aplicación. 80 | 81 | #### Introducción a workbox 82 | 83 | * Los service Workers solo funcionan en producción. 84 | * Limpiar la información del sitio. 85 | * No conviene escribir nuestros services workers debido a la complejidad del manejo del cache. 86 | * react-app-rewired: para evitar hacer [eject](https://medium.com/curated-by-versett/dont-eject-your-create-react-app-b123c5247741) se va utilizar react-app-rewired 87 | * config-overrides.js: Sobre escribir configuraciones 88 | * precacheAndRoute: archivos js los va aguardad en background 89 | * Cambiar react-scripts por react-app-rewired 90 | 91 | **Buena práctica es limpiar la cache del navegador** 92 | 93 | #### Implementando Workbox 94 | Estrategias de carga con Workbox 95 | 96 | * workbox toma una lista de assets para precargarlos y si la ruta coincide exactamente con un asset entonces lo tomara de cache. 97 | * registerNavigationRoute: se encarga de hacer el funcionamiento de un service worker y sino encuentra una url se dirige a index para que se encargue de mostrar 98 | * Estrategias de carga: 99 | * Network Only: se encarga de checar si hay internet, si hay hace la petición de lo contrario se rompe la aplicación, útil para cuando manejamos datos en tiempo real. 100 | * Network First: hace petición y si no hay red toma datos en cache, utilizar cuando se quiere la última versión y tener soporte en cache. 101 | 102 | #### Aplicando Estrategias de Carga 103 | * Cache First: Busca recursos en cache, si no están estos recursos, entonces hace petición y guarda recurso y muestra datos, utilizar en caso de recursos estáticos tales como imágenes o fuentes. 104 | * Stale While Revalidate: va a cache y a red al mismo tiempo y la que llegue más rápido lo muestra, en este caso siempre van a ser datos en cache, una vez que concluye la petición sustituye el recurso. 105 | 106 | Si se requiere un regla por defecto, esta debe de escribirse hasta el final del archivo. 107 | 108 | #### Google Analytics Offline 109 | 110 | * Para la implementación vamos a configurar react-ga: plugin el cual permite correr google analytics en React. 111 | * Cambiar BrowserRouter por router común para poder extender a los métodos de Router 112 | * Desactivar AdBlocker para desarrollo para no bloquear Google Analytics. 113 | * Workbox ya cuenta con con método para Google Análytics de forma Offline, captura todas las peticiones realizadas con react-ga, y cuando se retome la conexión a internet se enviaran las peticiones. 114 | 115 | ## Fucnionalidades Avanzadas 116 | #### Web Share API 117 | Nos permite usar un share nativo del sistema operativo. 118 | 119 | Web Share API solo funciona con HTTPS y para android 120 | 121 | #### Trabajando Offline 122 | 123 | Para saber si estamos offline utilizamos **Navigator.onLine**, este siempre marca online cuando no estemos offline lo que significa es que si tenemos una mala conexión va a marcar como offline. 124 | 125 | Lo mas correcto es utilizar window, "offline" y "online". 126 | 127 | #### Notificaciones 128 | 129 | Permisos para las notificaciones: 130 | * Estado por defecto: No sabemos si debemos enviar notificaciones por lo que debemos preguntar al usuario. 131 | * Granted: El usuario a concedido enviarle permisos. 132 | * Denieded: el usuario deniega mandarle permisos. 133 | 134 | Identificar si nuestro navegador puede mandar notificaciones. 135 | 136 | * Validar si hay notificaciones y serviceWorker para poder enviar la notificaciones. 137 | * Validar permisos de lo contraio solicitarlo. 138 | 139 | #### Notas 140 | 141 | #### ¿Cuándo usar Network Only? 142 | Por defecto si no queremos cache o manejamos información en tiempo real. 143 | **Network First** es otra estrategia de carga, se encarga mandar la petición a internet, si la conexión a internet esta caída entonces tomara la información que tenga almacenada en cache. 144 | 145 | #### ¿Cuándo usar Network First? 146 | Cuando queremos la última versión de un asset y tener soporte offline. 147 | 148 | **Cache First**: es una estrategia de carga que lo primero que hace es ir al cache y si encuentra el recurso lo sirve directamente. En caso de no encontrarlo va a ir a red, guardar la información en cache y servir esa versión. 149 | 150 | Esta estrategia puede ser peligrosa y solo es recomendable cuando queremos máxima velocidad y estamos manejando un recurso que nunca cambia, como una imagen o alguna fuente. 151 | 152 | **Stale While Revalidate**: esta es una estrategia de carga muy particular y que mejor funciona a la hora de mejorar el rendimiento. Lo que hace es ir a cache y a red al mismo tiempo, toma la versión más rápida que siempre será la de cache y en cuanto recibe la de red va a actualizar la versión de cache. 153 | 154 | Es recomendable esta estrategia cuando queremos mucha velocidad y estamos manejando un recurso que puede estar levemente desactualizado. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Contenido 2 | 3 | 4 | ## Algoritmos 5 | * [Algoritmos de ordenamiento](https://github.com/bautistaj/notes/blob/master/ALGORITMS/SORT/note.md) 6 | 7 | ## Arquitectura de software 8 | * [Fundamentos de arquitectura de software](https://github.com/bautistaj/notes/blob/master/ARCHITECTURE/BASIC/note.md) 9 | ## Crecimiento profesional 10 | * [Gestión de tiempo](https://github.com/bautistaj/notes/blob/master/CRECIMIENTO/GESTIONTIEMPO/note.md) 11 | * [Estrategias de estudio](https://github.com/bautistaj/notes/blob/master/CRECIMIENTO/ESTRATEGIAS/note.md) 12 | 13 | ## Base de datos 14 | * [Fundamentos de bases de datos](https://github.com/bautistaj/notes/blob/master/BD/BD/apuntes.md) 15 | * [SQL y MySql](https://github.com/bautistaj/notes/blob/master/BD/BDBASIC/apuntes.md) 16 | * [MongoDB](https://github.com/bautistaj/notes/blob/master/BD/MONGO/note.md) 17 | ## Backend 18 | * [Fundamentos de APIREST](https://github.com/bautistaj/notes/blob/master/BACK_END/API_REST/note.md) 19 | * [ECMAScript](https://github.com/bautistaj/notes/blob/master/BACK_END/JAVASCRIPT/ecmas6.md) 20 | * [Node](https://github.com/bautistaj/notes/blob/master/BACK_END/NODE/note.md) 21 | * [Expresiones Regulares](https://github.com/bautistaj/notes/blob/master/BACK_END/REGULAR_EXPRESSIONS/note.md) 22 | ## Frontend 23 | * [Web Components](https://github.com/bautistaj/web-components) 24 | * [PWA con React](https://github.com/bautistaj/notes/blob/master/FRONT_END/REACT/PWA/note.md) 25 | 26 | * [Preprocesadores](https://github.com/bautistaj/notes/blob/master/FRONT_END/PREPROCESADORES/note.md) 27 | 28 | ## Servidores 29 | * [Administración de servidores Linux](https://github.com/bautistaj/notes/blob/master/SERVER/LINUX_SERVER/note.md) 30 | * [AWS](https://github.com/bautistaj/notes/blob/master/SERVER/AWS/note.md) 31 | * [DigitalOcean](https://github.com/bautistaj/notes/blob/master/SERVER/DIGITALOCEAN/note.md) 32 | **** 33 | 34 | ## Inglés 35 | * [Curso de Inglés Práctico: Fundamentos](https://github.com/bautistaj/notes/blob/master/English/note.md) 36 | * [Curso de Inglés Práctico: Gramática](https://github.com/bautistaj/notes/blob/master/English/Curso%20de%20Ingl%C3%A9s%20Pr%C3%A1ctico:%20Gram%C3%A1tica/note.md) 37 | 38 | 39 | -------------------------------------------------------------------------------- /SERVER/AWS/note.md: -------------------------------------------------------------------------------- 1 | # AWS 2 | 3 | #### ¿Qué es el cómputo en la nube? 4 | * Sitios web 5 | * Respaldos y configuración 6 | * Archivos permanentes 7 | * DevOps 8 | * Análisis masivos 9 | * Computo Serverless: Micorservicios 10 | * Computo de alto rendimiento 11 | * Aplicaciones empresariales: Levantar servicios cada que se utilice 12 | * Internet of Things 13 | * Aplicaciones empresariales 14 | * Distribución de media: Archivos, mecanismos de hacer transcoding 15 | * Servicios móviles 16 | * Cómputo cientifico 17 | * E-commerce 18 | * Ambientes híbridos. 19 | * Blockchain 20 | 21 | Ventajas de AWS 22 | * Cero inversión inicial 23 | * Uso lo que necesitas 24 | * Velocidad cuando la necesitas 25 | * Si no lo usas. no lo pagas 26 | * Cobertura mundial. 27 | 28 | 29 | #### Introducción a la oferta de servicios de AWS y sus aplicaciones 30 | 31 | * Sección de computo: 32 | * Storage 33 | * DataBase 34 | * Migrations of services 35 | * Networking & Content 36 | * Developer Tools 37 | * Management Tool 38 | * Cloud Watch 39 | * Media Service 40 | * Elastic trasncoder: transmisión streaming 41 | * Machine Leraning 42 | * Recognition 43 | * Analytics 44 | * Security, Identity & Compliance 45 | * IAM Administración de usuarios 46 | * GuardDuty: Registro de actividad para ataques 47 | * Mobile Services 48 | * AR & VR 49 | * Application Integration 50 | * Customer Engagement 51 | * Business Productivity 52 | * Desktop & Apps Streaming 53 | * Workspace configuración de recursos 54 | * Internet of Things 55 | * Game Development 56 | 57 | #### Ejemplo de arquitectura con Elastic Beanstalk 58 | Tiene como ventaja la alta disponibilidad y la eficiencia para atender una gran cantidad de usuarios 59 | 60 | #### ¿Qué es EC2? 61 | Maquinas virtuales en linea 62 | * instancias: Maquinas virtuales 63 | * Seguridad: Generación de diferentes llaves 64 | * Espacio: Diversos opciones de espacio en disco, virtualmente infinito 65 | * Redundancia: Tener varias copias de misma máquina. 66 | * Firewall: Configuración desde maquina y los puertos a utilizar. 67 | * Direcciones IP estáticas: Puedes optar comprar una IP pública estática. 68 | * Respaldos: Respaldo de ambientes, sistemas 69 | * Escalables: Incrementar los recursos de la máquina: CPU, RAM 70 | * Migración de snapshot: Puedes copiar snapshot en cualquier región. 71 | 72 | #### Creando una isntancia de ECs 73 | 74 | #### Conectándonos a nuestra instancia desde Windows 75 | 76 | Responsable 77 | * Actualizar software 78 | * Libertad de instalar lo que se necesite 79 | * Respaldos 80 | * Restauración 81 | 82 | Actualizar e instalar emacs 83 | * yum update 84 | * yum emacs 85 | 86 | #### Subiendo un proyecto: Clonando un repositorio de GitHub a nuestra Instancia de EC2 87 | * Instalar git: yum install git 88 | * Clonar proyecto 89 | 90 | #### Subiendo un proyecto a nuestra instancia de EC2: Ejecutar nuestro proyecto 91 | Instalar 92 | * pip install flask: pip gestor de dependencias de python 93 | * security groups agregar nueva regla para abrir puerto. 94 | 95 | #### ¿Qué es Lambda y Serverless? 96 | 97 | ¿Qué es lambda? 98 | Lugar donde puedes ejecutar tus funciones de código. 99 | * Serverless: No existe un servidor y solo el código que AWS se encarga de ejecutarlo. 100 | * Lenguajes soportados: 101 | * Node (Javascript) 102 | * Python 103 | * Java 8 104 | * C# 105 | * .Net Core 106 | * Go 107 | 108 | Ventajas: 109 | * Seguridad 110 | * Performance 111 | * Código aislado 112 | 113 | 1 000 000 de peticiones gratis al año. 114 | 115 | #### Creando una función Lambda 116 | 117 | ## Elastic Beastalk 118 | 119 | #### Conociendo Elastic Beanstalk 120 | ¿Qué es? 121 | Es una plataforma donde obtienes un balanceador de cargas y tantas instancias de EC2 como se requieran. 122 | Puedes escalar de manera dinámica según la respuesta del usuario CPU, RAM 123 | Soporta: 124 | * Docker image 125 | * GO 126 | * Java SE 127 | * Java con Tomcat 128 | * .NET + Windows server + IIS" 129 | * Node JS 130 | * Python 131 | * Ruby 132 | 133 | #### Creando un ambiente en Elastic Beanstalk 134 | #### Almacenamiento - S3 135 | Opciones de almacenamiento 136 | * S3: Repositorio de archivos para crear y manipular datos. 137 | * Glacier: Servicio de almacenamiento en la nube para almacenar datos y realizar copias de seguridad a largo plazo. 138 | 139 | #### Almacenamiento - Glacier 140 | Repositorio de almacenamiento económico pero más lento excelente para cuando requieras guardar archivos históricos. 141 | Tiempo de respuesta de entre 2 a 15 minutos. 142 | 143 | ## Bases de datos 144 | #### Bases de Datos - RDS Aurora PG 145 | 146 | Amazon creo un servicio llamado RDS que optimiza el rendimiento de base de datos. 147 | RDS tiene varias opciones de motores de base de datos: 148 | * Aurora PG 149 | * Aurora MySQL, MariaDB, PostgreSQL, Oracle y Microsoft SQL Server 150 | 151 | #### Conociendo RDS PG 152 | AWS implementa el motor de PostgreSQL (RDS PG) 153 | * Tareas optimizadas 154 | * Respaldos frecuentes automatizados 155 | * Cifrado 156 | * Migración asistida 157 | * Alta disponibilidad 158 | 159 | No es posible conectarse a la base de datos hasta que explícitamente lo indiques. 160 | 161 | #### Conociendo Aurora PG (Postgrest) 162 | Toma el motor de base datos Postgres optimiza el Kernel de lo cual se obtiene un postgrest 3x más rápido. 163 | * No es gratuito 164 | * AWS RDS PG es eficiente: 165 | * Modificaciones del código al mismo motor de la base de datos 166 | * Instancias de última generación 167 | * Compatible con PG 9.6.x 168 | Debido a que tiene un espejo entonces, al ralizar algún cambio este no deja de funcionar. 169 | Configuración inicial de alta disponibilidad en 3 diferentes zonas. 170 | 171 | #### Mejores prácticas de Bases de Datos y RDS 172 | 173 | * Respaldo diarios 174 | * Replicar la base de datos. 175 | 176 | ## Redes 177 | #### Redes - Route53 178 | Uno de los servicios de red más interesantes es Route53 179 | AWS provee un DNS muy poderos con el cual podras crear subdominios asignados a instancias y lo veras reflejado es segundos. 180 | Route53 esta disponible en todas las regiones. 181 | 182 | 183 | ## Herramientas de administración. 184 | Estas las herramientas de AWS para la administración 185 | * IAM: permite contralar los permisos de accesos de todos los usuarios. 186 | * CloudWatch: Te mostrara diversos eventos que suceden en el entorno, lo cual te va a permitir la centralización de los LOGS. 187 | * Cloudtrail: Herramienta de auditoría que permite ver quién y que realizó en la cuenta de AWS. 188 | 189 | Estas opciones cuentan con almacenamiento histórico. 190 | 191 | #### Utilizando IAM. 192 | 193 | #### Cloud Watch 194 | #### Cloudtrail 195 | 196 | #### Certificate manager 197 | Dos de los más importantes herramientas de seguridad son: 198 | * Certificate Manager: AWS te permite crear tus certificados o bien importarlos si ya tienes uno. 199 | * GuardDuty: Te permite auditar todos los intentos de conexión a tus instancias. 200 | 201 | #### GuardDuty 202 | Sistema de seguridad que permite ver los intentos de acceso a todas las instancias. 203 | 204 | ## Bonus 205 | 206 | #### AWS Rekognition 207 | Deep learning 208 | 209 | #### Creando servicio de postgres 210 | #### Accediendo a nustra base de datos de PG -------------------------------------------------------------------------------- /SERVER/DIGITALOCEAN/note.md: -------------------------------------------------------------------------------- 1 | # Digital Oceal 2 | 3 | Existen tres categorías de servicios de internet: 4 | * Saas: Software as a Service 5 | * PaaS: Platform as aS Service 6 | * IaaS: Infrastructure as a Service 7 | 8 | Digital ocen es IaaS 9 | 10 | #### ¿Cuándo utilizar DigitalOcean? 11 | Existen muchas opciones para realizar despliegue de nuestro proyecto. 12 | 13 | * Hosting gratis: No se puede administrar el hardware, solo para una decena de usuarios. 14 | * Shared hosting: No se puede administrar el hardware, con un poco más de potencia por lo generas se utiliza LAMP 15 | * VPS Virtual Private Server: Dispositivo virtual donde podemos cambiar el hardware, para miles de usuario. 16 | * Dedicado: Maquina física dónde todos los recurso están dedicados a nuestra aplicación. 17 | * Cloud (PaaS/IaaS): Solución de tipo VPS dónde podemos administrar los recurso de hardware 18 | * DataCenter: Cuando se tiene millones de usuarios pero es una solución muy costosa. -------------------------------------------------------------------------------- /SERVER/LINUX_SERVER/note.md: -------------------------------------------------------------------------------- 1 | # Administradores de servidores 2 | 3 | #### Comandos 4 | * clear: Limpiar pantalla 5 | * ls: Listar contenido de directorio 6 | * ls -l: listado en formato largo 7 | * ls -la: listado todos los archivos "incluyendo archivos ocultos" en formato largo 8 | * pwd: print work directory 9 | * ~: Indica que estamos en el home 10 | * touch: Crear nombre de archivos 11 | * cp: copiar archivos/directorios. 12 | * mkdir: male directory, crea directorios 13 | * cd: change directory 14 | * cd ..: Regresar al directorio padre 15 | * cd -: Regresar al directorio inmediato anterior 16 | * **d**rwxr-xr-x indica que es un directorio 17 | * **-**rwxr-xr-x indica que es un archivos 18 | * mv: mover un directorio que también nos sirve para cambiar nombre de directorio. 19 | * rm: remove 20 | * rm -r: Remove de forma recursiva 21 | * touch: modifica la fecha de creación 22 | * 23 | 24 | #### Diferencias entre LESS, CAT, HEAD y TAIL 25 | 26 | Comandos para leer archivos. 27 | * cat: concatenar archivos, no recomendable para archivos grandes. 28 | * less: mostrar contenido de un archivos de forma paginado. 29 | * tail: solo muestra las ultimas 10 lineas del archivos. 30 | * tail -f: solo muestra las primeras lineas pero se mantiene y muestra todos los cambios 31 | * head: muestra las primeras 10 lineas del archivo. 32 | 33 | #### Integración con archivos y permisos 34 | ~~~bash 35 | drwxr-xr-x 2 root root 4096 Feb 19 01:17 bin 36 | drwxr-xr-x 2 root root 4096 Apr 24 2018 boot 37 | ~~~ 38 | Los primeros 0 caracteres excluyendo el primero nos muestran los permisos que se tienen en el archivo. 39 | 40 | ~~~ 41 | r lectura 42 | w escritura 43 | x ejecución 44 | 45 | rwx-rwx-rwx 46 | * Primer grupo es para el usuario propietario del archivo 47 | * Segundo grupo es para el grupo al que pertenece el usuario 48 | * Tercer grupo es para otros usuarios. 49 | ~~~ 50 | 51 | #### comandos 52 | * chmod: change owner 53 | Este comando se puede utilizar con letras **ugoa** donde u: usuario propietario, g: grupo, o: otros usuarios y a: todos. 54 | 55 | Para agregar el permiso de ejecuón al usuario ejecutamos 56 | ~~~ 57 | chmod u+x file.txt 58 | ~~~ 59 | 60 | Para el siguiente comando se agrega el permiso de ejeción para todos los usuarios 61 | ~~~ 62 | chmod +x file.txt 63 | ~~~ 64 | 65 | Hay otra forma de asignar permisos y es utilizando el formato **Octal** [1-7] 66 | ~~~ 67 | chmod 755 file.txt 68 | ~~~ 69 | Los permisos quedarían de la siguiente manera: 70 | ~~~ 71 | rwxr-xr-x 72 | ~~~ 73 | 74 | Para cambiar el propietario se utiliza **chown** change owner 75 | ~~~ 76 | chown root: file.txt 77 | ~~~ 78 | 79 | #### Conociendo las terminales linux 80 | 81 | Terminales de uno a 6 **tty1-tty6** la 7 es para ambientes gráficos. 82 | 83 | Comandos para el cambio de terminal. 84 | 85 | ~~~ 86 | Ctrl+Alt+Fx 87 | ~~~ 88 | 89 | Comando **chvt** 90 | ~~~ 91 | sudo chvt 3 92 | ~~~ 93 | 94 | * w: Cantidad de usuarios en el sistema 95 | * who: para identificar quién esta en sesión. 96 | * tty: terminal a la cual estoy conectado. 97 | * ps: proceso del sistema operativo 98 | * ps -ft tty1: identificar la terminal tyy1 99 | * tyy: muestra la terminal que estas usando. 100 | * kill: matar un proceso utilizando el process id **PID** 101 | 102 | Matar las terminales abiertas. 103 | 104 | #### Manejo y monitoreo de procesos y recursos del sistema 105 | 106 | Tarea importante verificar procesos que se estan ejecutando en el SO. 107 | 108 | 109 | * ps: proces status 110 | * ps aux: 111 | * | : se utiliza para enlazar comandos- 112 | * grep: busca en cadenas texto. 113 | * ctrl+z: Si se tiene un editor abierto es posible detener el proceso con este comando. 114 | * jobs: mostrar los procesos 115 | * fg: for ground, regresar al proceso que se paro. 116 | * &: ejecuta en background 117 | * nohup: Ejecuta el proceso per creara una salida llamada nohup.out en donde se encuentra lo que ejecuta el proceso. 118 | 119 | #### Monitoreo de recursos del sistema 120 | 121 | Monitoreo de CPU, Memoria, HHD. 122 | 123 | * top: Muestra información específica del sistema operativo. 124 | * cat /proc/cpuinfo | grep "Processor" para incluir mayusculas y minúsculas en la búsqueda incluimos **-i** 125 | * free: muestra el estado de la memoria. 126 | * free -h: Formato para humanos. 127 | * du: disk usage, Muestra información del disco duro. 128 | * du -hsc path: nos muestra el peso del directorio/archivo. 129 | * du -sm * : Muestra los archivos mas pesados. 130 | * du -hs * | sort -nr | head -5 131 | * ps auxf | sort -nr -k 3 | head -d: Listar los procesos que consumen más CPU **-k 3**. 132 | * ps auxf | sort -nr -k 4 | head -d: Listar los procesos que consumen más RAM **-k 4**. 133 | 134 | ## Instalación y manejo de software. 135 | 136 | #### Análisis de los parámetros de red 137 | 138 | * Ip publica: 139 | 140 | * Ip privada: solo se tiene acceso en mi propia red. 141 | 142 | * ifconfig: configuración de la interfaz, se listan las tarjetas y direccionamientos. 143 | 144 | * ip a: ip adress show, muestra la información de la red. 145 | 146 | * ip -4 a: muestra las tarjetas que utilizan ipv 4. 147 | 148 | * ip -6 a: muestra las tarjetas que utilizan ipv 6. 149 | 150 | * hostname: muestra el nombre de host. 151 | 152 | * route -n: muestra el gateway. 153 | 154 | * nslookup: nslookup nombre de dominio, nos muestra toda información de red del dominio. 155 | 156 | * curl: hace peticiones. 157 | 158 | * wget: obtener información de internet y descarga de archivos. 159 | 160 | 161 | #### Administración de paquetes acorde a la distribución. 162 | 163 | * Red hat 164 | * .rpm 165 | * Repositorios yum 166 | 167 | * Debian/Ubuntu 168 | * .deb 169 | * dpkg-reconfigure 170 | * repositorios apt 171 | 172 | **Red Hat Package Management** 173 | * Base de datos RPM almacenada en /var/lib/rpm 174 | * rpm -qa: Listar todos los rpm instalados en la máquina. 175 | * rpm -i package.rpm: instalar paquete 176 | * rpm -e package.rpm: Remover paquete del sistema. 177 | 178 | Comando yum 179 | 180 | * yum install package 181 | 182 | **Debian package Management** 183 | * Base de datos DPKG localizada en /var/dpkg 184 | * dpkg -l: Lstar todos los debs instalados en la máquina. 185 | * dpkg -i package.deb: Intalar paquete 186 | * dpkg -r package.deb: Remover paquete. 187 | * dpkg-reconfigure package: reconfigurar paquetes instalados. 188 | * apt install package 189 | 190 | #### Manejo de paquetes en sistemas basados en Debian 191 | 192 | Todo lo que tiene que ver con actualizaciones se debe de tener permisos root. 193 | 194 | * apt dist-upgrade: Modifica Kernel, live bash. 195 | * apt search "mysql$" 196 | * apt-cache search "mysql$" 197 | * dpkg -l 198 | * snap search aws: snap es el nuevo gestor de paquetes. 199 | * snap install canonical-livepatch: instalamos este software para poder actualizar le kernel sin la necesidad de reiniciar 200 | 201 | 202 | #### Administración de software con YUM y RPM para CentOS 203 | 204 | * rpm -qa: muestra todos los paquetes instalados 205 | * rpm -qi bash: Mostrar la información del paquete bash. 206 | * rpm -qc bash: muestra todos los archivos que se contemplan en la configuración de bash. 207 | 208 | * yum update: actualizar repositorios. 209 | 210 | #### Nagios: Desempaquetado, descompresión, compilación e intalación de paquetes. 211 | * sudo apt install build-essential libgd-dev openssl libssl-dev unzip apache2 php gcc libdbi-perl libdbd-mysql-perl 212 | * sudo make all: ejecuta todos los archivos configurados 213 | * sudo male install 214 | * .tar: Empaquetado 215 | * .gz: comprimido 216 | 217 | ## Administración de usuarios 218 | #### Los usuarios una tarea vital en proceso de administración. 219 | comandos 220 | * id: muestra id y grupo de usuario en sesión, debian inicia la creación desde 1000 en Centos desde 500 el usuario 0 es de root 221 | * whoami: Quien soy yo :) 222 | * /etc/passwd: Muestra información de usuario. 223 | * /root:/bash : home 224 | * etc/shadow: Contraseñas sombra 225 | 226 | passwd root para activar el usuario. 227 | 228 | #### Creando y manejando cuentas de usuarios. 229 | 230 | * useradd bob: agregar usuarios, en este caso no tiene password, se debe configurar, no crea un home 231 | * adduser bina: En est caso pide password, crea un home 232 | * userdel bina: Elimina nombre de usuario 233 | * hitory: muestra el histórico de comandos ejecutados. 234 | * !23 : En este caso ejecuta el comando 23. 235 | * usermode: Modificar usuario. 236 | 237 | **Nunca modificar el el archivo passwd con editor de texto.** 238 | 239 | #### Entendiendo la membresía de los grupos 240 | 241 | Comandos 242 | * su: swith user 243 | * sudo su - nodejs 244 | * groups nodejs: Verificamos los grupos de nodejs, por defecto se asigna a mismo grupo nodejs. 245 | * sudo gpasswd -a nodejs sudo: Agregamos al usuario nodejs al grupo sudo. 246 | * gpasswd -d nodejs sudo: Eliminamos del grupo al usuarios nodejs 247 | * usermod -aG sudo nodejs: comando para agreagr al grupo sudo 248 | * groups nodejs: nos muestra el grupo al que pertenece el usuario. 249 | * sudo -l: muestra los permisos del archivo sudores. 250 | 251 | #### Usando PAM para el control de acceso de usuarios. 252 | 253 | * /etc/pam.d/ : Carpeta Configuración 254 | * /lib64/security/ : Carperta de Librerías 255 | * /etc/security : Cambios de configuración. 256 | 257 | * pwscore: Centos validar contraseña. 258 | * ulimit: Listar permisos de usuaris 259 | * ulimit -u 10: Solo tendra 20 procesos 260 | * #!/bin/bash: Encabezado de archivo para script. 261 | * etc/security/time.conf: Como configurar los usarios para que se logean en un horario predeterminado. 262 | * sudo vi /etc/security/time.conf 263 | * grupo wheel: grupo para ejecutar como sudo. 264 | 265 | ## Servicios en el sistema operativo. 266 | 267 | #### Autenticción de clientes y servidores sobre SSH -------------------------------------------------------------------------------- /devops/Docker/note.md: -------------------------------------------------------------------------------- 1 | # Fundamentos de Docker 2 | 3 | # Introducción 4 | 5 | ## Introducción 6 | Durante el desarrollo de software vamos a tener diferentes problamaticas que resolver, como por ejemplo: 7 | las construcción, distribución y la ejecuón. Cada uno de estos problemas nos enfrentamos todos los desarrolladores. 8 | 9 | Acontinuacón detallamos más las problematicas antes mencionadas. 10 | 11 | Escribir código es solo una parte de la contrucción de Software y algunos problematicas a las que nos enfrentamos se describen acontinuacón. 12 | 13 | * Entorno de desarrollo: que nuenstro entorno de desarrollo es diferente a los de stagin, qa o producción. 14 | * Dependencias: las dependencias que utilizamos son diferentes entre cada desarrollador. 15 | * Entorno de ejecución: diferentes sistemas operativos que se utlizan en cada uno de nuestros entornos. 16 | * Equivalencia con entorno productivo: capacidadades de las intancias utlizadoas, como por ejemplo las version de SO, memoria entre otras. 17 | * Servicios externos: las conexiónes a las bases dedatos o bien el consumo de apis 18 | 19 | Distribución de software: Tu código tiene que transformarse en un artefacto, o varios, que puedan ser transportados a donde tengan que ser ejecutados. 20 | 21 | * Divergencia de repositorios 22 | * Divergencia de artefactos 23 | * Versionado 24 | 25 | Ejecutar Software: La máquina donde se escribe el software siempre es distinta a la máquina donde se ejecuta de manera productiva. 26 | 27 | * Compatibilidad con el entorno productivo 28 | * Dependencias 29 | * Disponibilidad de servicios externos 30 | * Recursos de hardware. 31 | 32 | ## Virtualización 33 | 34 | Versión virtual de algún recurso como hardware, sitema operativo, dispositivo de almacenamiento o recurso de red. 35 | Con palabras más simples, es que nos permite atacar los tres grandes problemas del desarrollo de software profecionales. 36 | 37 | Ya antes se a propuesto formas para atacar los problemas antes mencionado como por ejemplo las maquinas virtuales, acontinuación se describe algunas problematicas que presnetan. 38 | * Peso: que va en el orden de GB. 39 | * Consto de administración: necesitan mantenimiento al igual que un maquina. 40 | * Múltipls formatos: VDI, VMDK, VHD. 41 | 42 | 43 | Los contenedores son practicamnte la estandarización 44 | 45 | * Flexibles 46 | * Livianos 47 | * Protables 48 | * Bajo acoplamineto 49 | * Escalables 50 | * Seguros 51 | 52 | ## ¿Qué es y como funciona Docker? 53 | * Docker deamon, es un servicion el cual maneja todas las entidades con las cuales utiliza docker, encargado directo de conmunicación con SO. 54 | * Docker API. 55 | * Client Docker. 56 | 57 | 58 | 4 entidades importantes: 59 | * Container 60 | * Image 61 | * Data volumes 62 | * Network 63 | 64 | 65 | # Contenedores 66 | 67 | ## Comandos de docker 68 | 69 | Arrancar un contenedor. 70 | * docker run 71 | * docker run hello-world 72 | 73 | Arrancar un contenedor asignándole un nombre. 74 | * docker run --name 75 | * docker run --name contenedor_test ubuntu 76 | 77 | Arrancar un contenedor con una terminal interactiva. Pasándole una shell para acceder al contenedor. 78 | 79 | * docker run -it 80 | * docker run -it ubuntu bash 81 | 82 | Arrancar un contenedor. Mapeando un puerto del host a un puerto del contenedor. 83 | 84 | puerto_host : puerto_contenedor 85 | * docker run -p : 86 | * docker run -p 8080:80 nginx 87 | 88 | 89 | Arrancar un contenedor con un volume. 90 | * docker run -v :: 91 | * Volume -> test 92 | * Punto de montaje en el contenedor -> /apps 93 | * Opciones -> rw (Lectura y escritura) 94 | * docker run -v test:/apps:rw nginx 95 | 96 | 97 | 98 | Arrancar un contenedor con un bind mount. 99 | * docker run -v :: 100 | * Ruta del host a compartir -> /home/application 101 | * Punto de montaje en el contenedor -> /apps 102 | * Opciones -> ro (Solo lectura) 103 | * docker run -v /home/application:/apps:ro ubuntu 104 | 105 | Arrancar un contenedor con tmpfs. 106 | * docker run \ 107 | --mount type=tmpfs,destination=,tmpfs-mode=,tmpfs-size= \ 108 | 109 | Ejemplo: 110 | 111 | * Punto de montaje en el contenedor -> /temporal 112 | * Permisos -> Todos los permisos solo para el propietario. 113 | * Tamaño del FS -> 21474836480 bytes = 20G 114 | * docker run \ 115 | --mount type=tmpfs,destination=/temporal,tmpfs-mode=700,tmpfs-size=21474836480 \ 116 | nginx 117 | 118 | 119 | Lista de los contenedores activos. 120 | * docker ps 121 | 122 | 123 | Lista de todos los contenedores activos e inactivos del sistema. 124 | * docker ps -a 125 | 126 | Lista los ID de todos los contenedores. 127 | * docker ps -aq 128 | 129 | Debugging 130 | 131 | Inspeccionar la data de un contenedor. 132 | Por su ID: 133 | * docker inspect 134 | 135 | Por su nombre: 136 | * docker inspect 137 | 138 | Aplicando filtros. Por ejemplo buscando las variables de entorno: 139 | * docker inspect -f '{{ json .Config.Env }}' 140 | 141 | Ver los logs del contenedor. 142 | 143 | docker logs 144 | - Eliminando contenedores 145 | 🔹 Eliminar un contenedor que no este arriba. 146 | 147 | Se puede hacer tanto por nombre como por ID. 148 | * docker rm 149 | 150 | Eliminar un contenedor aunque este arriba. Forzándolo. 151 | 152 | Se puede hacer tanto por nombre como por ID. 153 | * docker rm -f 154 | 155 | 156 | Eliminar todos los contenedores que no esten arriba a la vez. 157 | * docker rm $(docker ps -aq) 158 | 159 | 160 | ## Conceptos fundamentales de Docker: contenedores 161 | Un contenedor es una agrupación lógica la cual esta limitada a los recursos que puede puede acceder. 162 | 163 | Un contenedor es una maquina virtual la cual configuramos a los recursos que puede acceder. 164 | 165 | ## Comprendiendo el estado de Docker 166 | 167 | Comandos: 168 | 169 | * docker run hello-world (corro el contenedor hello-world) 170 | * docker ps (muestra los contenedores activos) 171 | * docker ps -a (muestra todos los contenedores) 172 | * docker inspect (muestra el detalle completo de un contenedor) 173 | * docker inspect (igual que el anterior pero invocado con el nombre) 174 | * docker run –-name hello-platzi hello-world (le asigno un nombre custom “hello-platzi”) 175 | * docker rename hello-platzi hola-platzy (cambio el nombre de hello-platzi a hola-platzi) 176 | * docker rm (borro un contenedor) 177 | * docker container prune (borro todos lo contenedores que esten parados) 178 | 179 | 180 | 181 | 182 | ## Ciclo de vida de los contenedores. 183 | 184 | Cada vez que un contenedor se ejecuta, lo que pasa es que un nuevo proceso se ejecuta. 185 | 186 | Un contenedor corre simpre y cunado su procesos principal esta corriendo. 187 | 188 | Entonces para mantener un contenedor corriendo podemos ejecutar. 189 | * docker run --name alwaysup --detach ubuntu tail -f /dev/null 190 | 191 | Y para connectarnos a un contenedor que se esta ejecutando: 192 | * docker exec -it alwaysup bach 193 | 194 | 195 | El sieguiente comando nos devuelve el pid del proceso pricipal del contenedor. 196 | * docker inspect --format '{{.State.Pid}}' alwaysup 197 | 198 | ## Exponiendo contenedores 199 | 200 | Cada contenedor tiene su propia interfaz de red virtual. 201 | 202 | Para exporner un prueto del contendor a nuestra maquina usamos el siguiente comando. 203 | * docker run -name proxy -p pruesto_anfitrion:puerto_contenedor 204 | * docker run --name proxy -p 8080:80 -d 205 | 206 | 207 | Para poder seguir los log del cotenedor podemos ejecutar: 208 | * docker logs -- tail 10 -f 209 | 210 | # Dato en docker 211 | ## Bind mounts 212 | 213 | Practicamente es atar una maquina una ruta que ejecuta el contenedir con un ruta dentro del contenedor. 214 | Entonces todo lo que oucurre en esta ruta dentro del contenedor va aparecer en la maquina anfitriona. 215 | 216 | Persistir la data en nuestra maquina y no en en el contenedor. 217 | 218 | * docker run -d --name db -v /Users/mac/Documents/DEV/dev-ops/docker/mongo/data:/data/db mongo 219 | 220 | Uno de los riesgos es que tiene acceso a nuestros disco. 221 | 222 | ## Volúmenes 223 | Forma más estandar de manjar datos con docker. 224 | 225 | Los volúmenes son el mecanismo preferido para conservar los datos generados y utilizados por los contenedores de Docker. 226 | 227 | Mostrar todos los vólumenes 228 | * docker volume ls 229 | 230 | Crear un nuevo volumen 231 | * docker volume create dbdata 232 | 233 | Montar un volumen en un docker container 234 | * docker run -d --name db --mount src=dbdata,dst=/data/db mongo 235 | 236 | 237 | ## Insertar y extraer archivos de un contenedor 238 | Para poder copiar un archivo desde el host a nuetro contenedor. 239 | 240 | * docker cp file_name container_name:/path/file_name 241 | * docker cp test.txt copytest:/testing/prueba.txt 242 | 243 | Para extraer un archivo desde el contenedor a nuestro host 244 | * docker cp name_container:/path path_host 245 | * docker cp copytest:/testing/ localtesting 246 | 247 | No es necesario que el contenedor no esta corriendo para extraer los archivos. 248 | 249 | # Conceptos fundamentales de Docker: imágenes 250 | Imagenes es la forma en que docker intenta solucionar os problemas de contrucción y distribuicón de software. 251 | 252 | Las imagenes son plantillas a paratir de las cuales docker genera contenedores. 253 | 254 | Es solo una pieza de software que contiene lo necesario para que un contenedor se peude ejecutar exitosamente. 255 | 256 | Se podria comparar como una clase en POO. 257 | 258 | 259 | Listar las imagenes 260 | * docker image ls 261 | 262 | el *tag* es la version de la imagen. 263 | 264 | Descargar una imagen desde docker hub 265 | * docker pull ubuntu:20.04 266 | 267 | 268 | ## Construyendo una imagen propia 269 | Para construir una imagen nos basamos en un archivo llamado Dockerfile. 270 | 271 | ```Docker 272 | FROM ubuntu:latest 273 | RUN touch /usr/src/hola-platzi.txt 274 | ``` 275 | 276 | 277 | * docker pull 278 | * docker push 279 | 280 | Crear una imagen apartir de un Dockerfile 281 | * docker build -t ubuntu:btaj . 282 | Cambiar el tag para poder publicar nuestras propias imagenes 283 | * dcoker tag ubuntu:btaj bautistaj/ubuntu:btaj 284 | 285 | ## El sistema de capas 286 | 287 | Revisar las capas de una imagen 288 | 289 | * docker history ubuntu 290 | 291 | 292 | Una imagen ocupa espacion dependinedo de las capas agregadas. 293 | 294 | Si agegamos y removemos archivos el peso aunmenta ya que cada capa es inmutable. 295 | 296 | 297 | # Usando Docker para desarrollar aplicaciones 298 | 299 | La configuración de Dockerfile es muy importante, esto para aprovechar todos los beneficios que docker nos ofrece. 300 | 301 | Para el siguiente caso que es para un aplicación de Node. 302 | 303 | Los archivos principales para el manejo de las dependencias son: 304 | * package.json 305 | * package-lock.json 306 | 307 | Por esta razón son las mirameras en mover al contenedor y posteriormente hacer el install de node. 308 | 309 | El siguienete paso es mover los archivos de nuestra app, en este caso docker. 310 | 311 | ```docker 312 | FROM node:12 313 | 314 | COPY ["package.json","package-lock.json", "/usr/src/"] 315 | 316 | WORKDIR /usr/src 317 | 318 | RUN npm install 319 | 320 | COPY [".", "/usr/src/"] 321 | 322 | EXPOSE 3000 323 | 324 | CMD ["npx","nodemon", "index.js"] 325 | ``` 326 | 327 | Ahora bien, necesitamos que nuestra app refleje los cambios de la app sin la necesidad de hacer el build. 328 | Paa ello vamos a realizar un bind-mount de los archivos que implican nustro app. Que para el caso es index.js 329 | * docker run --rm -p 3000:3000 -v /Users/mac/docker/index.js:/usr/src/index.js platziapp 330 | 331 | 332 | 333 | ## Docker networking: colaboración entre contenedores 334 | 335 | Listar las redes de red: 336 | * docker network ls 337 | 338 | bridge: retrocompatibilida 339 | host: para que el contenedor tenga acceso a las redes de la maquina host. 340 | none: deshbilitar la networking. 341 | 342 | Crear red en docker. 343 | * docker network create --attachable platzinet 344 | --atachable permite que otros contenedores se conecte a ella. 345 | 346 | Inspeccionar las redes. 347 | * docker network inspect platzinet 348 | 349 | Vamos a crear un nuevo contenedor con mongo 350 | * docker run -d --name db mongo 351 | 352 | Ahora conectar el contendor anterior a nuestra red 353 | * docker network connect platzinet db 354 | 355 | Es turno de levantar una app para que se conecte a nuestra base de datos. 356 | * docker run -d --name app -p 3000:3000 --env MONGO_URL=mongodb://db:27017/test platziapp 357 | 358 | Si dos contenedores estan connectados a una misma red estas se pueden encontrar entre si con el nombre del contendor. 359 | 360 | Ahora solo resta conectar el contendor anterior a la red 361 | * docker network connect platzinet app 362 | 363 | 364 | ## Docker Compose 365 | 366 | Todo lo anterio se puede realizar utilizando docker-compose 367 | ```docker 368 | version: "3.8" 369 | 370 | services: 371 | app: 372 | image: platziapp 373 | environment: 374 | MONGO_URL: "mongodb://db:27017/test" 375 | depends_on: 376 | - db 377 | ports: 378 | - "3000:3000" 379 | 380 | db: 381 | image: mongo 382 | ``` 383 | 384 | ## Comandos 385 | 386 | Ver la red que crea docer compose 387 | * docker network inspect docker_default 388 | 389 | Ver los servicios de docker compose 390 | * docker-compose ps 391 | 392 | Ver los logs de los servicios 393 | * docker-compose logs -f app 394 | 395 | Ejecutar un compnado 396 | * docker-compose exec app bash 397 | 398 | Bajar los servicios 399 | * docker-compose down 400 | 401 | 402 | ## Docker Compose como herramienta de desarrollo 403 | 404 | ```docker 405 | version: "3.8" 406 | 407 | services: 408 | app: 409 | build: . 410 | environment: 411 | MONGO_URL: "mongodb://db:27017/test" 412 | depends_on: 413 | - db 414 | ports: 415 | - "3000:3000" 416 | volumes: 417 | - .:/usr/src 418 | - /usr/src/node_modules 419 | command: npx nodemon index.js 420 | 421 | db: 422 | image: mongo 423 | ``` 424 | 425 | 426 | ## Compose en equipo: override 427 | 428 | El archivo docker-compose.override.yml nos ayuda a sibreescribir el archivo original lo cuál no ayuda en el desarrollo. 429 | 430 | Archivo docker-compose.yml 431 | ```docker 432 | version: "3.8" 433 | 434 | services: 435 | app: 436 | build: . 437 | environment: 438 | MONGO_URL: "mongodb://db:27017/test" 439 | depends_on: 440 | - db 441 | ports: 442 | - "3000:3000" 443 | volumes: 444 | - .:/usr/src 445 | - /usr/src/node_modules 446 | command: npx nodemon index.js 447 | 448 | db: 449 | image: mongo 450 | ``` 451 | 452 | Archivo docker-compose.overrideyml 453 | ```docker 454 | version: "3.8" 455 | 456 | services: 457 | app: 458 | build: . 459 | volumes: 460 | - .:/usr/src 461 | - /usr/src/node_modules 462 | command: npx nodemon index.js 463 | ``` 464 | 465 | NOTA: *Se recominda manejar los puertos en un solo archivo.* 466 | 467 | 468 | Podemos agregar un rango de puertos para poder escalar las aplicaciones. 469 | 470 | ```docker 471 | ports: 472 | - "3000-3001:3000" 473 | ``` 474 | 475 | Para lavantar más de un servicio de un contenedor: 476 | * docker-compose up -d --scale app=2 477 | 478 | 479 | ## Administrando tu ambiente de Docker 480 | 481 | Eliminar los contenedores 482 | * docker container prune 483 | 484 | Borra todos los contenedores que estén corriendo o apagados 485 | * docker rm -f $(docker ps -aq) 486 | 487 | Lista todos los volumes 488 | * docker volume ls 489 | 490 | Borra todo lo que no se esté usando 491 | * docker system prune 492 | 493 | Limitar los recurso de nustros contenedores 494 | * docker run --name app --memory 1G platziapp 495 | 496 | Ver los estatus de los contenedores 497 | * docker stats 498 | 499 | ## Deteniendo contenedores correctamente: SHELL vs. EXEC 500 | sigterm 501 | sigkill 502 | 503 | Ver los últimos procesos 504 | * docker ps -l 505 | * 506 | Si vemos el estatus de algún contenedor tiene un código de salida mayor a 128, la salida se produjo por un exception. 507 | 508 | 509 | Construyo la imagen 510 | * docker build -t loop. 511 | 512 | Corro el contenedor 513 | * docker run -d --name looper loop. 514 | 515 | Le envía la señal SIGTERM al contenedor, y si no se puede detener manda SIGKILL 516 | * docker stop looper 517 | 518 | Muestra el ps del último proceso 519 | * docker ps -l 520 | 521 | Le envía la señal SIGKILL al contenedor 522 | * docker kill looper 523 | 524 | Ver los procesos del contenedor 525 | * docker exec looper ps -ef 526 | 527 | 528 | *NOTA* 529 | 530 | *SHELL* 531 | Deja como proeceso principal al shell y no así el comando que nosotros estamos ejecutando 532 | 533 | *EXEC* 534 | Deja como proeceso principal el comando que nosotros estamos ejecutando 535 | 536 | 537 | 538 | ## Contenedores ejecutables: ENTRYPOINT vs CMD 539 | 540 | El ENTRYPOINT de un contenedor es el comando que se va a correr y va a utilizar lo que diga comando como parametro del 541 | ENTRYPOINT 542 | 543 | ```docker 544 | FROM ubuntu:trusty 545 | 546 | ENTRYPOINT ["/bin/ping", "-c", "3"] 547 | 548 | CMD ["localhost"] 549 | ``` 550 | 551 | ## El contexto de build 552 | Docker va a montar en un filesystem temporal todo los archivos disponibles en la ruta que se le pasa como parametro, "Que le build puede utilizar" 553 | 554 | 555 | Para evitar que no se copien archivos como node_modules al contenedor debemos utilizar .dockerignore 556 | 557 | Ejemplo .dockerignore 558 | ```docker 559 | *.log 560 | .git 561 | .gitignore 562 | build/* 563 | Dockerfile 564 | npm-debug.logs 565 | README.md 566 | node_modules 567 | docker-compose 568 | ``` 569 | 570 | ## Multi-stage build 571 | ```docker 572 | 573 | # Define una fase llamada builder 574 | FROM node:12 as builder 575 | 576 | # copiar los archivos necesario para las dependecnias 577 | COPY ["package.json", "package-lock.json", "/usr/src/"] 578 | 579 | WORKDIR /usr/src 580 | 581 | # Se intalan las dependencias de producción esto para aprovechar las capas 582 | RUN npm install --only=production 583 | 584 | COPY [".", "/usr/src/"] 585 | 586 | # instalación dependencias de desarrollo 587 | RUN npm install --only=development 588 | 589 | # Ejecutar los test 590 | RUN npm run test 591 | ## Esta imagen esta creada solo para pasar los tests. 592 | 593 | # Productive image 594 | FROM node:12 595 | 596 | COPY ["package.json", "package-lock.json", "/usr/src/"] 597 | 598 | WORKDIR /usr/src 599 | # instar las dependencias de PRO 600 | RUN npm install --only=production 601 | 602 | # Copiar el fichero de la imagen anterior. 603 | # De cada stage se reutilizan las capas que son iguales. 604 | COPY --from=builder ["/usr/src/index.js", "/usr/src/"] 605 | # Pone accesible el puerto 606 | EXPOSE 3000 607 | 608 | CMD ["node", "index.js"] 609 | ### En tiempo de build en caso de que algún paso falle, el build se detendrá por completo. 610 | ``` 611 | 612 | ## Docker-in-Docker 613 | Usar docker desde otros contenedores. 614 | 615 | Se puede comunica con docker deamon debido a que tiene una interfaz "socket". 616 | De este modo 617 | * docker run -it --rm -v /var/run/docker.sock:/var/run/docker.sock docker:19.03.12 618 | * docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock -v $(wich docker):/bin/docker wagoodman/dive:latest prodapp 619 | 620 | 621 | 622 | 623 | 624 | 625 | 626 | 627 | 628 | -------------------------------------------------------------------------------- /devops/note.md: -------------------------------------------------------------------------------- 1 | ## Deploy api with NestJS in Heroku. 2 | 3 | Create app in heroku. 4 | Add instance of Postgres 5 | 6 | See the documentation https://devcenter.heroku.com/articles/heroku-cli#download-and-install 7 | 8 | create an app with heroku. 9 | 10 | heroku login 11 | heroku create store-api 12 | heroku addons:create heroku-postgresql:hobby-dev 13 | 14 | Heroku add-ons are components that support your application, such as data storage, monitoring, analytics, data processing, and more. 15 | 16 | now go to the app > settings > Reveal Config Vars. Heroku add a environment variable called DATABASE_URL, this variable contain the url connection to the data base. 17 | 18 | 19 | GitLab configuration. 20 | 21 | In the repository of the app go to the Settings > CI/CD > Variables. You should to configure two important variables HEROKU_API_KEY and HEROKU_APP_STAGING. HEROKU_API_KEY contain the key for the connection to the heroku instance and HEROKU_APP_STAGING the name of the app and a important configuration is change the flag of Protected to false. 22 | 23 | Configuration of .gitlab-ci.yml 24 | 25 | ``` 26 | image: node:latest # version of the image 27 | 28 | before_script: 29 | - apt-get update -qy # update the packages from the repositories, q = Quiet. Produces output suitable for logging, omitting progress indicators. y = yes. Automatic yes to prompts. 30 | - apt-get install -y ruby-dev 31 | - gem install dpl # dlp is a deploy tool made for continuous deployment that’s developed and used by Travis CI, but can also be used with GitLab CI/CD. https://docs.gitlab.com/ee/ci/examples/deployment/ 32 | 33 | stages: 34 | - staging #Configuration of the stages of the deploy. 35 | 36 | staging: 37 | type: deploy 38 | stage: staging 39 | image: ruby:latest 40 | script: 41 | - dpl --provider=heroku --app=$HEROKU_APP_STAGING --api-key=$HEROKU_API_KEY 42 | 43 | only: # specify the branch tha are listening for the deploy. 44 | - 27-deploy-in-staging-environment # name of the branch 45 | 46 | ``` 47 | 48 | configuration Procfile 49 | ``` 50 | web: npm run start:prod 51 | ``` 52 | 53 | scripts in package.json 54 | ``` 55 | "postinstall": "npm run prestart:prod", 56 | "prestart:prod": "rimraf dist && npm run build && npm run migration:run" 57 | "prebuild": "rimraf dist" 58 | "build": "nest build" 59 | "start:prod": "node dist/main" 60 | "migration:run": "ts-node node_modules/.bin/typeorm migration:run --config ./orm.config.js" 61 | ``` 62 | 63 | Configuration of file to connect data base. 64 | orm.config.js 65 | 66 | ``` 67 | module.exports = { 68 | 'type': 'postgres', 69 | 'url': process.env.DATABASE_URL, 70 | 'entities': [entitiesPath], 71 | 'migrations': [migrationPath], 72 | 'cli': { 73 | 'migrationsDir': 'src/database/migrations' 74 | }, 75 | 'synchronize': true 76 | } 77 | ``` 78 | 79 | .env file 80 | 81 | ``` 82 | PORT=3000 83 | PORT_DB=5444 84 | JWT_SECRET=090909 85 | ENVIRONMENT=PROD 86 | DATABASE_URL=postgres://postgres:password@localhost:5444/persist 87 | ``` 88 | 89 | 90 | # Deploy Angular App in heroku 91 | Create app in heroku 92 | 93 | 94 | crate configuration of environment in file angular.json 95 | "staging": { 96 | "fileReplacements": [ 97 | { 98 | "replace": "src/environments/environment.ts", 99 | "with": "src/environments/environment.staging.ts" 100 | } 101 | ], 102 | "optimization": true, 103 | "outputHashing": "all", 104 | "sourceMap": false, 105 | "extractCss": true, 106 | "namedChunks": false, 107 | "aot": true, 108 | "extractLicenses": true, 109 | "vendorChunk": false, 110 | "buildOptimizer": true, 111 | "budgets": [ 112 | { 113 | "type": "initial", 114 | "maximumWarning": "2mb", 115 | "maximumError": "5mb" 116 | }, 117 | { 118 | "type": "anyComponentStyle", 119 | "maximumWarning": "6kb", 120 | "maximumError": "10kb" 121 | } 122 | ] 123 | }, 124 | 125 | 126 | You should configurate NPM_CONFIG_PRODUCTION in false with the next command 127 | heroku config:set NPM_CONFIG_PRODUCTION=false. 128 | 129 | 130 | 131 | 132 | 133 | Create server.js file for our app 134 | 135 | ```js 136 | const express = require('express'); 137 | const path = require('path'); 138 | 139 | const app = express(); 140 | 141 | app.use(express.static(__dirname+'/dist/persist')); 142 | app.get('/',function(req,res){ 143 | res.sendFile(path.join(__dirname+'/dist/persist/index.html')); 144 | }); 145 | 146 | app.listen(process.env.PORT || 8080); 147 | ``` 148 | 149 | We should install express path 150 | 151 | ```bash 152 | npm install express path --save 153 | ``` 154 | 155 | 156 | create environment variable HEROKU_WEB_APP_STAGING name od the app and HEROKU_API_KEY the access token to heroku. 157 | 158 | 159 | Configure .gitlab-ci.yml 160 | 161 | ```yml 162 | image: node:latest 163 | 164 | before_script: 165 | - apt-get update -qy 166 | - apt-get install -y ruby-dev 167 | - gem install dpl 168 | 169 | stages: 170 | - staging 171 | 172 | staging: 173 | type: deploy 174 | stage: staging 175 | image: ruby:latest 176 | script: 177 | - dpl --provider=heroku --app=$HEROKU_WEB_APP_STAGING --api-key=$HEROKU_API_KEY 178 | only: 179 | - staging 180 | 181 | ``` 182 | 183 | 184 | crate Procfile with next command. 185 | 186 | ``` 187 | web: npm run start:prod 188 | ``` 189 | -------------------------------------------------------------------------------- /devops/swarm/note.md: -------------------------------------------------------------------------------- 1 | # Docker Swarm 2 | 3 | Herramienta que ofrece docker para poder escalar las aplicaciones. 4 | 5 | ## Conceptos básicos 6 | ### ¿Qué es Swarm? 7 | Docker Swarm es un herramienta de orquestación, esto permite el manejo de multiples contenedores desplegados en multiples maquinas. 8 | 9 | ### El problema de la escala. ¿Qué pasa cuándo una computadora sola no alcanza? 10 | 11 | * Escalabilidad: Poder aumentar el poder computo de un servidor para poder servir a más usuarios. Podemos escalar de 2 formas: 12 | * Vertical: Agregar más Hardware 13 | * Horizontal: Tener muchos servidores donde se distribuye la carga. 14 | 15 | * Disponibilidad: Capasidad de un servicio de estar disponibilidad 24/7. 16 | 17 | ### Arquitectura docker swarm 18 | Par la arquitectura de Swarm, se ven involucrados dos tipos de servidores: 19 | 20 | * Manager: Son nodos de la administración del cluster. 21 | * Workers: Es donde se va a ajecutar las aplicaciones, la parte principal. 22 | 23 | Manager y Workers deben de tener la misma version de dokerdeamon y tener visibilidad entre ellos en la misma red. 24 | 25 | ### Preparando tus proyectos con docker swarm: 12 factores. 26 | 27 | !2 fatores que se deben de tener en cuenta para empezar a utilizar Swarm en tus aplicaciones. 28 | 29 | [12 Factores](https://12factor.net/) 30 | 31 | * Codebase: El código debería estar en un repo. 32 | * Dependencies: Las dependencias deben de estar en un archivo de configuración. 33 | * Configuration: Configuración de todos los ambientes con el mismo código. 34 | * Baking Services: Servicios que son necesarios para nuestar aplicación, estos se deberían tratar como servicios externos los cuales deben de tener una configuración para establecer la comunicación. 35 | * Build, Release and Run: Estas faces en el flujo de desarrollo deben de estar bien separadas. 36 | * Processes: La app debe poder ejecutarse sin algún tipo de estado, que el fucionamiento que realice debe ser atomica, de todo lo que necesite debe de tener un service configuration. 37 | * Port Binding: La app debería poder exponerse así misma y no debe existir un intermediario. 38 | * Concurrency: Que la app pueda correr con multiples intancias en paralelo. 39 | * Disposability: La app debe de tener la capacidad de destriurse rapido y levantarse muy rapido y poder cambiar de lugar. 40 | * Dev/Prod parity: Tener las mismas espesificaciones en los diferentes servidores. 41 | * Logs: Flujos de bytes. 42 | * Admin processes: Poder administrar las apps sin la neceisdad de inciar sesion como adminitrador para hacer dichas tareas. 43 | 44 | 45 | ## Primeros pasos. 46 | 47 | ### Tu primer docker swarm 48 | 49 | Para inicializar **Swarm** solo ejecutamos 50 | 51 | ```bash 52 | docker swarm init 53 | ``` 54 | 55 | Cabe mencionar que este nodo se inicializa como un **manager** 56 | 57 | Para agregar un nodo de tipo **worker** necesitamos ejecutar el siguiente comando. 58 | 59 | ```bash 60 | docker swarm join --token 61 | ``` 62 | 63 | Para agregar un **manager** ejecutamos y seguimos las intrucciones. 64 | ```bash 65 | docker swarm join-token manager 66 | ``` 67 | 68 | Listamos los nodos disponibles 69 | ```bash 70 | docker node ls 71 | ``` 72 | 73 | Inspeccionar el nodo, pues usar **self** o bien el ID del container. 74 | ```bash 75 | docker node inspect self 76 | ``` 77 | 78 | Para salir de docker Swarm ejecutamos 79 | ```bash 80 | docker swarm leave --force 81 | ``` 82 | Debemos tener cuidado cuando salimos de un nodo, si este es de tipo **worker** no hay problema, el problema se presenta cunado intentamos salir de un **manager**. 83 | 84 | 85 | 86 | ### Fundamentos de docker swarm, Servicios 87 | 88 | Los servicios de Swarm usan un modelo declarativo, lo que significa que el estado del servicio los pudes definir y confiar en docker para que lo mantenga. 89 | 90 | Comando para crear un servicio 91 | ```bash 92 | docker service create --name pinger alpine ping wwww.google.com 93 | ``` 94 | 95 | Listar los servicios 96 | 97 | ```bash 98 | docker service ls 99 | ``` 100 | 101 | 102 | ### Entendiendo el ciclo de vida de un servicio 103 | 104 | Para ver el estatus de un servicio. 105 | ``` 106 | docker service ps service_name 107 | ``` 108 | 109 | Cliente: 110 | * docker service create 111 | Nodo manager: 112 | * Crea el servicio 113 | * Creaa tareas del servicio y asigna una IP 114 | * Asigna tareas a nodos 115 | Nodo Worker 116 | * Recibe la descriptción de la tarea 117 | * Prepaa la tarea 118 | * Ejecuta contanedores 119 | 120 | 121 | Comando para inpeccionar un servicio 122 | ```bash 123 | docker service inspect service_name 124 | ``` 125 | 126 | Revisar los logs 127 | ```bash 128 | docker service logs -f service_name 129 | ``` 130 | 131 | Eliminar un servicio 132 | ```bash 133 | docker service rm service_name 134 | ``` 135 | 136 | 137 | -------------------------------------------------------------------------------- /requirements/notes.md: -------------------------------------------------------------------------------- 1 | **Sistema Gestor de Exámenes para Laboratorios Clínicos** 2 | 3 | Nombre descriptivo del proyecto 4 | Aplicación web para la gestión de exámenes para laboratorios clínicos y sistemas médicos. 5 | 6 | Descripción del proyecto a nivel funcional (requerimientos): 7 | Esta aplicación cuenta con diferentes tipos de usuario y de acuerdo al rol permitirá realizar acciones que se verán reflejadas y directamente relacionadas con el flujo de trabajo de los demás tipos de usuario. 8 | 9 | Según el tipo de usuario, las funcionalidades son: 10 | 11 | **Paciente:** 12 | 13 | El paciente puede visualizar en una tabla de manera gráfica la información sobre sus últimos exámenes clínicos realizados con fecha y la opción para verlos en línea. 14 | 15 | El paciente puede descargar los resultados en formato PDF de manera individual o seleccionar varios y descargarlos en un mismo documento juntos. 16 | 17 | Si los resultados de los exámenes aún no están disponibles, debe salirle el nombre de los exámenes que se ha realizado y están a la espera de resultados con un ícono inactivo de descarga y un mensaje que indique la no disponibilidad del resultado. 18 | 19 | **Médico** 20 | 21 | Este perfil es quien asigna los exámenes que un paciente se debe realizar y los asocia en el sistema. 22 | 23 | El médico debe tener una vista principal donde puede buscar un paciente por su número de documento y visualizar su información de contacto principal y su historia clínica. En esta vista puede asociar exámenes clínicos a realizarse el paciente, para esto debe contar con una ventana que le permita seleccionar de una lista precargada los diferentes exámenes clínicos posibles y agregarlos uno a uno al paciente. 24 | 25 | En el momento que el médico asocia exámenes clínicos a un paciente, el perfil de paciente ya debe poder visualizar estos exámenes en su vista principal aún si aún no están los resultados. 26 | 27 | Si el paciente tiene su sesión abierta en el momento en que los exámenes se están asociando, debe recibir una notificación en tiempo real para recargar su vista y poder visualizarlos. 28 | 29 | **Bacteriólogo** 30 | 31 | El profesional de la salud cuenta con una interfaz gráfica que le permita buscar a un paciente a través de su número de identificación y abrir una ventana que le permita ingresar los resultados a los exámenes asociados al paciente seleccionado. 32 | 33 | Una vez ingresados los resultados, deben estar inmediatamente disponibles para su descarga desde el lado del paciente. 34 | 35 | Si el paciente tiene su sesión abierta en el momento en que los resultados de los exámenes están disponibles, debe recibir una notificación en tiempo real para recargar su vista y poder descargar sus resultados. 36 | 37 | **Administrador** 38 | 39 | Este perfil lo tendrá personal administrativo que podrá acceder a la información de todos los demás roles y podrá administrarlos (agregar nuevos, editar existentes y eliminarlos) a través de una vista principal tipo tabla donde podrá seleccionar el tipo de perfil que desea cargar y realizar búsquedas por identificación y nombre. 40 | 41 | Es el único perfil que puede crear nuevos bacteriólogos, médicos y pacientes; incluso puede crear otros administradores y realizar las mismas acciones para todos. 42 | 43 | Debe poder cargar información en grupos con una opción para leer archivos en formato .csv que guarde directamente la información de cualquier perfil, generando de manera automática usuario y contraseña para cada registro que será correspondiente a un nuevo usuario en el sistema. 44 | 45 | Cuando se crea un nuevo usuario, debe llegar un correo electrónico a su cuenta con un mensaje de bienvenida y sus credenciales de acceso al sistema. 46 | 47 | **Requerimientos generales** 48 | Al crear un nuevo usuario, independientemente del perfil se debe proveer de manera obligatoria identificación numérica, nombre, apellido, correo electrónico y número de contacto, a partir de esta información se generará de forma automática un nombre de usuario con la estructura: nombre.apellido.ultimos4numerosdeidentificación. Por ejemplo: María Jaramillo con cédula 1234567 su usuario sería maria.jaramillo.4567. 49 | 50 | Cada vez que se genere un nuevo nombre de usuario se debe validar que no exista otro igual, en caso de existir, se asignan los últimos dígitos de manera aleatoria y se conservan las dos primeras partes. 51 | 52 | La contraseña debe estar cifrada y no puede generarse a partir de información personal del usuario. 53 | 54 | El inicio de sesión debe ser el mismo para todos los usuarios e internamente se identificará el perfil al que corresponde y se cargará su información. 55 | 56 | El acceso al sistema se debe realizar a través de la página web del laboratorio clínico que tendrá implícito el formulario de login. 57 | 58 | Ningún usuario debe poder registrarse en ningún rol, todos deben estar creados desde el perfil del administrador pues no es un laboratorio público y por seguridad no todas las personas deben tener acceso a su sistema. 59 | 60 | **Documentación requerida** 61 | Organización del equipo (roles, actividades individuales). 62 | 63 | Mockups del proyecto en web y móvil (si aplica), y de cada feature detallado. 64 | 65 | Explicación escrita detallada de cada feature. 66 | 67 | Diagrama de entidad relación del flujo de base de datos. 68 | 69 | **Manual de uso para administradores.** 70 | 71 | Toda la documentación anterior debe estar en inglés. 72 | 73 | Elementos de seguimiento y planeación 74 | Repositorio desde la etapa inicial del proyecto con toda la documentación de planeación. 75 | 76 | Tablero kanban en el repositorio de GitHub, con las tareas y responsables asignados, configurado con tiempos de entrega por cada tarea y estado actual en tiempo real. 77 | 78 | Readme del proyecto con el estado actual de la aplicación, actualizado hasta el cambio más reciente y en inglés. 79 | 80 | Requerimientos técnicos para frontend 81 | Estructura de maquetación debe ser 100% responsive. 82 | 83 | El CSS debe ser implementado por un preprocesador y usar una metodología CSS. 84 | 85 | Debe contar cumplir con todos los requerimientos de accesibilidad web. 86 | 87 | Todos los elementos del frontend deben contar con pruebas unitarias y un average mínimo de 70%. 88 | 89 | La maquetación no debe ser desarrollada bajo ningún framework prediseñado. 90 | 91 | La estructura de los archivos debe respetar el principio de responsabilidad única. 92 | 93 | Debe implementar buenas prácticas en la escritura de código y código limpio. 94 | 95 | Se deben implementar mensajes para casos de error incluídos en la interfaz gráfica. 96 | 97 | Todo el código debe estar en inglés, incluyendo documentación. 98 | 99 | Requerimientos técnicos para backend 100 | Debe implementar un patrón de diseño justificado que sea escalable y optimizado. 101 | 102 | Se puede implementar más de una tecnología para backend pero debe justificarse por qué es una mejor opción. 103 | 104 | El proyecto de backend debe estar separado al proyecto del frontend. 105 | 106 | Cada feature debe contar con su propio test (average mínimo de 70% por feature). 107 | 108 | Debe ser un sistema con estructura modular escalable. 109 | 110 | La estructura de los archivos debe respetar el principio de responsabilidad única. 111 | 112 | Debe implementar buenas prácticas en el código y código limpio (Eso incluye que bajo ninguna circunstancia se debe repetir código funcionalmente igual, no deben haber bloques de código comentados, toda función debe estar debidamente documentada). 113 | 114 | Se deben implementar excepciones y códigos de error en caso de fallos desde el backend por cada feature (el frontend sólo debería recibirlos, no procesarlos). 115 | 116 | Todo el código debe estar en inglés, incluyendo documentación. 117 | 118 | **Requerimientos de base de datos** 119 | Debe registrar un log de errores. 120 | 121 | No se debe eliminar información definitivamente. 122 | 123 | En caso de bases de datos relacionales, debe contar con todas las llaves primarias y llaves foráneas debidamente documentadas y configuradas. 124 | 125 | Los registros deben ser consistentes a registros reales (simulaciones), no se admiten registros como: test, prueba1, probando, etc. 126 | 127 | **Debe ser escalable.** 128 | 129 | Deben cumplir con buenas prácticas en los nombres y estructuras. 130 | 131 | Debe tener documentado su diseño y funcionamiento, en inglés. 132 | 133 | **Entrega única final** 134 | Documentación requerida completa al 100%. 135 | 136 | Proyecto completo desplegado en un ambiente de producción. 137 | 138 | Sustentación oral del proyecto a nivel estructural y técnico. 139 | 140 | --------------------------------------------------------------------------------