├── .gitignore
├── .vscode
└── settings.json
├── Git y GitHub.docx
├── IA
└── README.md
├── POO
├── .vscode
│ ├── launch.json
│ └── settings.json
├── JS
│ ├── Account.js
│ ├── Car.js
│ ├── Card.js
│ ├── Cash.js
│ ├── Driver.js
│ ├── ES6Account.js
│ ├── ES6Car.js
│ ├── Payment.js
│ ├── Paypal.js
│ ├── Route.js
│ ├── UberBlack.js
│ ├── UberPool.js
│ ├── UberVan.js
│ ├── UberX.js
│ ├── User.js
│ ├── index.html
│ └── index.js
├── Java
│ ├── Account.java
│ ├── Car.java
│ ├── Card.java
│ ├── Cash.java
│ ├── Main.class
│ ├── Main.java
│ ├── Payment.java
│ ├── Paypal.java
│ ├── Route.java
│ ├── UberBlack.java
│ ├── UberPool.java
│ ├── UberVan.java
│ └── UberX.java
├── PHP
│ ├── Account.php
│ ├── Car.php
│ ├── Payment.php
│ ├── Route.php
│ ├── index.php
│ ├── uberBlack.php
│ ├── uberPool.php
│ ├── uberVan.php
│ └── uberX.php
├── Python
│ ├── account.py
│ ├── car.py
│ ├── card.py
│ ├── cash.py
│ ├── main.py
│ ├── payment.py
│ ├── paypal.py
│ ├── route.py
│ ├── uberBlack.py
│ ├── uberPool.py
│ ├── uberVan.py
│ └── uberX.py
├── README.md
├── assets
│ ├── UML.jpg
│ ├── agegacion_clases.jpg
│ ├── agregacion.jpg
│ ├── asociacion.jpg
│ ├── asociacion_clases.jpg
│ ├── composicion.jpg
│ ├── composicion_clases.jpg
│ ├── diagrama_uber.png
│ ├── herencia.jpg
│ ├── herencia_clases.jpg
│ ├── programacion-orientada-a-objetos-poo.pdf
│ └── representacion_clases.jpg
├── herencia.md
└── orientacion_a_objetos.md
├── README.md
├── assets
├── Technical English for Professionals Course.pdf
└── curso-trabajar-como-freelancer.pdf
├── basicos-git.md
├── comandos_git.md
├── css
└── style.css
├── english.md
├── estrategias_aprender_efectivamente.md
├── formacion_profesional_integral.md
├── git_cmd.md
├── git_cmd.txt
├── img
├── algoritmo.png
├── instalacion_raspberry.png
└── programacion.jpg
├── index.html
├── instalar-lamp.md
├── nota.txt
├── python
├── aritmetico.py
├── arreglos.py
├── comparacion.py
├── for.py
├── funcion.py
├── holamundo.py
├── readme.md
└── while.py
├── raspberry_optimization.md
├── raspberrypi.md
├── ser_freelance.md
├── software_development_style_guide.md
├── tips_for_developers.md
├── tips_git.md
└── trabajo_programacion.md
/.gitignore:
--------------------------------------------------------------------------------
1 | ### VisualStudioCode ###
2 | .vscode/*
3 | !.vscode/settings.json
4 | !.vscode/tasks.json
5 | !.vscode/launch.json
6 | !.vscode/extensions.json
7 |
8 | ### VisualStudioCode Patch ###
9 | # Ignore all local history of files
10 | .history
11 |
12 |
13 | ### Python ###
14 | # Byte-compiled / optimized / DLL files
15 | __pycache__/
16 | *.py[cod]
17 | *$py.class
18 |
19 | # C extensions
20 | *.so
21 |
22 | # Distribution / packaging
23 | .Python
24 | build/
25 | develop-eggs/
26 | dist/
27 | downloads/
28 | eggs/
29 | .eggs/
30 | lib/
31 | lib64/
32 | parts/
33 | sdist/
34 | var/
35 | wheels/
36 | pip-wheel-metadata/
37 | share/python-wheels/
38 | *.egg-info/
39 | .installed.cfg
40 | *.egg
41 | MANIFEST
42 |
43 | # PyInstaller
44 | # Usually these files are written by a python script from a template
45 | # before PyInstaller builds the exe, so as to inject date/other infos into it.
46 | *.manifest
47 | *.spec
48 |
49 | # Installer logs
50 | pip-log.txt
51 | pip-delete-this-directory.txt
52 |
53 | # Unit test / coverage reports
54 | htmlcov/
55 | .tox/
56 | .nox/
57 | .coverage
58 | .coverage.*
59 | .cache
60 | nosetests.xml
61 | coverage.xml
62 | *.cover
63 | .hypothesis/
64 | .pytest_cache/
65 |
66 | # Translations
67 | *.mo
68 | *.pot
69 |
70 | # Scrapy stuff:
71 | .scrapy
72 |
73 | # Sphinx documentation
74 | docs/_build/
75 |
76 | # PyBuilder
77 | target/
78 |
79 | # pyenv
80 | .python-version
81 |
82 | # pipenv
83 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
84 | # However, in case of collaboration, if having platform-specific dependencies or dependencies
85 | # having no cross-platform support, pipenv may install dependencies that don't work, or not
86 | # install all needed dependencies.
87 | #Pipfile.lock
88 |
89 | # celery beat schedule file
90 | celerybeat-schedule
91 |
92 | # SageMath parsed files
93 | *.sage.py
94 |
95 | # Spyder project settings
96 | .spyderproject
97 | .spyproject
98 |
99 | # Rope project settings
100 | .ropeproject
101 |
102 | # Mr Developer
103 | .mr.developer.cfg
104 | .project
105 | .pydevproject
106 |
107 | # mkdocs documentation
108 | /site
109 |
110 | # mypy
111 | .mypy_cache/
112 | .dmypy.json
113 | dmypy.json
114 |
115 | # Pyre type checker
116 | .pyre/
117 |
118 | # End of https://www.gitignore.io/api/python
119 |
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "python.pythonPath": "C:\\Users\\FLIAMN\\AppData\\Local\\Programs\\Python\\Python38\\python.exe",
3 | "files.exclude": {
4 | "**/.classpath": true,
5 | "**/.project": true,
6 | "**/.settings": true,
7 | "**/.factorypath": true
8 | }
9 | }
--------------------------------------------------------------------------------
/Git y GitHub.docx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jocode/Getting-Started/5edf25376e68940e58f9f6adf9e061f749006158/Git y GitHub.docx
--------------------------------------------------------------------------------
/IA/README.md:
--------------------------------------------------------------------------------
1 | # IA para todos
2 |
3 | What you'll learn
4 |
5 | - Whats is AI?
6 | - Machine Learning
7 | - Data
8 | - What makes an AI company
9 | - What machine learning can and cannot do
10 | - Optional: Intuitive explanation of Deep Learning
11 | - Building AI projects
12 | - Building AI in your company
13 | - AI and society
14 |
15 | ## :one: :blue_book: ¿Qué es la IA? :fire:
16 |
17 | ### Aprendizaje automático - Machine Learning
18 |
19 | - **Aprendizaje Supervisado**
20 | - Asignación de datos de entrada, para el entrenamiento de la red
21 | - **Aprendizaje no supervisado**
22 |
23 | > La publicidad es una de las formas mas lucrativas en las que se ve el aprendizaje supervisado, de acuerdo a las preferencias que usted tiene.
24 |
25 | - Email
26 | - Audio Transcript
27 | - Traducción
28 | - Anuncios
29 | - Coches autónomos
30 |
31 | :heavy_check_mark: ¿Por qué ahora?
32 |
33 | Performance vs Amount data
34 |
35 | 1. IA tradicional
36 | 2. Pequeña red neuronal
37 | 3. Red neuronal mediana
38 | 4. Red neuronal grande
39 |
40 | :x: Problemas en los datos
41 |
42 | - Etiquetas incorrectas
43 | - Valores perdidos
44 |
45 | - Múltiples tipos de datos
46 | - Imagenes, audio, texto (Datos no estructurados)
47 |
48 | ### La terminología de la IA
49 |
50 | - **Machine Learning**
51 |
52 | Campo de estudio que le da a clos computadores la habilidad de aprender sin estar explícitamente programado (Software)
53 |
54 | > Arthur Samuel (1959)
55 |
56 | - **Data sciece**
57 |
58 | Es la ciencia de extraer conocimiento e ideas de los datos. (Slides)
59 |
60 | Red neuronal y deep learning, nos conduce practicamente a la misma cosa
61 |
62 | > Las redes neuronales fueron originalmente inspiradas por elcerebro, pero los detalles de cómo trabajan no estan para nada relacionadas como trabaja el cerebro biológico.
63 |
64 | ### ¿Qué hace que una empresa sea una empresa de IA?
65 |
66 | AI Transformation
67 |
68 | 1. Execute pilot projects to gain momentum
69 | 2. Build an in-house AI team
70 | 3. Provide broad AI training
71 | 4. Develop an AI strategy
72 | 5. Develop internal and external communications
73 |
74 | ### What makes an ML problem easier
75 |
76 | 1. Learning a "simple" concept
77 | 2. Lots of data avalaible
78 |
79 | > La IA es la nueva electricidad y está transformando todas las industrias.
80 |
81 | ### Deep Learning y Neural Network
82 |
83 | Una red neuronal es un grupo de neuronas artificiales en la que cada una computa una función simple que relaciona una entrada A con una salida B.
84 |
85 | ¿Cuál de estos términos describe mejor el tipo de IA usado en los filtros de correo no deseado de correo electrónico, reconocimiento de voz y otras aplicaciones específicas actuales?
86 |
87 | - Intligencia Artificial Debil (ANI)
88 |
89 | ## :two: :blue_book: Starting an AI project (Creación de Proyectos de iA) :fire:
90 |
91 | - Workflow of projects
92 | - Selecting AI projects
93 | - Organizing data and team for the projects
94 |
95 | ### :zap: Proceso de trabajo de un proyecto de aprendizaje automático
96 |
97 | #### Key steps of a machine learning project
98 |
99 | - **Amazon / Alexa**
100 |
101 | 1. Collect data
102 | 2. Train model
103 | - Iterate many timesuntil good enough
104 | 3. Deploy model
105 | - Get data back
106 | - Maintain / update model
107 |
108 | - **Self-driving car**
109 |
110 | 1. Collect data
111 | - Image, position od other cars
112 | 2. Train model
113 | - Iterate many times until good enough
114 | 3. Deploy Model (Implementar el modelo)
115 | - Get data back
116 | - Main / Update models
117 |
118 | ### :zap: Proceso de trabajo de un proyecto de ciencia de datos
119 |
120 | 1. Collect data
121 | 2. Analyze data
122 | - Iterate many times to get goof insights
123 | 3. Suggest hypotheses/actions
124 | - Deploy changes
125 | - Re-analyze new data periodically
126 |
127 | ### Toda función laboral necesita aprender cómo usar los datos
128 |
129 | - **:star: Data Science y Machine Learning en la agricultura :bamboo:**
130 |
131 | | Data Science | Machine Learning |
132 | | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------- |
133 | | Condiciones del suelo | Agricultura de precisión |
134 | | Condiciones climáticas | Eliminación de la mala hierba |
135 | | Presencia de diferentes cultivos de mercado | Obtención de modelos que relacionen entradas A con B |
136 | | Los equipos de ciencia de datos, recomiendan qué plantar, y cuando hacerlo para mejorar el uso a la vez que se mantiene la condición del suelo de la granja | Recomendaciones para los cultivos |
137 |
138 | Este tiempo de ciencia de datos desempeña y seguirá desempeñando cada vez más importante en la agricultura
139 |
140 | - Agricultura
141 | - Marketing
142 | - Coches autónomos
143 | - Medicina
144 |
145 | > Los datos tienen un impacto gracias a la ciencia de datos y al aprendizaje automático
146 |
147 | ### Cómo elegir un proyecto de IA (Parte 1) :fire:
148 |
149 | Lo ideal es selccionar proyectos que estén entre _Lo que puede hacer la AI_ y los _Elementos valiosos para tu negocio_
150 |
151 | **Cross functional team**
152 |
153 | #### Brainstorming framework
154 |
155 | - Think about automating tasks rather than automating jobs. E.g., call center routing, radiologist.
156 | - What are the main drivers of business value? (¿Claves principales de valor de negocio)
157 | - What are the main pain points in yout business? (¿Cuáles son los principales puntos débiles de tu negocio)
158 |
159 | ### You can make progess even without big data
160 |
161 | - Having more data almost never hurts
162 | - Data makes some business (like web search) defensible.
163 | - But with small datasets, you can still make progress
164 |
165 | > No renuncies solo por tener pocos datos con qué empezar
166 |
167 | ### Cómo elegir un proyecto de IA (Parte 2)
168 |
169 | #### Due diligence on project
170 |
171 | | Tecnical diligence | Business diligence |
172 | | -------------------------------------- | ------------------------------- |
173 | | Can Ai system meet desired performance | Lower Cost |
174 | | How much data is need | Increase revenue |
175 | | Engineering timeline | Launch new product or businesss |
176 |
177 | > Además de una diligencia técnica y empresarial, se debe realizar una diligencia ética que contribuya a una sociedad mejor.
178 |
179 | **Build vs Buy**
180 |
181 | - ML projects can be in-house or outsourced
182 | - DS projects are more commonly in-house
183 | - Some things will be industry standard -avoid building those.
184 |
185 | ### Trabajar con un equipo de IA
186 |
187 | - **Specify your acceptance criteria**
188 |
189 | **Goal** Detect defects with 95% accuracy
190 |
191 | - **Test set** Provide AI team a dataset on which to measure their performance
192 |
193 | ### How AI teams think about data
194 |
195 | - Training set
196 | - Test set
197 |
198 | Generalmente se usan 2 _test set_, para realizar pruebas y verificar la presición del modelo
199 |
200 | ### Pitfall: Expecting 100% accuaracy
201 |
202 | - Limitations of ML
203 | - Inufficient data
204 | - Mislabeled data
205 | - Ambiguous data
206 |
207 | ### :star: Herramientas técnicas para equipos de IA
208 |
209 | **Machine Learning frameworks**
210 |
211 | - Tensor flow
212 | - PyTorch
213 | - Keras
214 | - MXNet
215 | - CNTK
216 | - Caffe
217 | - PaddlePaddle
218 | - Scikit-learn
219 | - R
220 | - Weka
221 |
222 | **Research publications**
223 |
224 | - Arxiv
225 |
226 | ### CPU vs GPU
227 |
228 | - **CPU** Computer processor (Central Processing Unit)
229 | - **GPU** Graphics Processing Unit
230 |
231 | > La principal ventaja de la implementación en el borde es que puede aumentar la respuesta del sistema, y también reducir la cantidad de datos que es necesario enviar a través de la red.
232 |
233 | ## :three: :blue_book: Desarrollo de IA en su empresa :fire:
234 |
235 | - Case studies of complex Ai products
236 | - Roles in an AI team
237 | - Ai Transformation playbook
238 | - Taking your first step
239 |
240 | ### Altavoz Inteligente
241 |
242 | - Amazon _Echo/Alexa_
243 | - Google _Home_
244 | - Apple _Siri_
245 | - Baidu _DuerOS_
246 |
247 | #### Steps to process the command
248 |
249 | AI Pipeline, son los componentes o los pasos para resolver un problema de ML
250 |
251 | 1. Trigger word/wakeword detection
252 | 2. Speech recognition
253 | 3. Intent recognition (Averiguar qué es lo que quiere hacer el usuario)
254 | - Joke
255 | - Time
256 | - Music
257 | - Call
258 | - Wheather
259 | 4. Execute the intent (Joke, Email etc)
260 |
261 | ### Vehículos autónomos
262 |
263 | Steps for decide how to drive
264 |
265 | - Image/ Radar/ Lidar
266 | - Motion Planing
267 | - Steer / Accelerate / Brake
268 |
269 | 1. Image/ Radar/ Lidar - +GPS, Maps
270 | 2. Card detection / Pedestrian detection / Lane Detections / Traffic Light Detection / Obstacle detection
271 | 3. Motion planning (Mostrar el camino que debe seguir el vehiculo en carretera)
272 | 4. Steer / Accelerate / Brake
273 |
274 | ### Roles modelo de un equipo de AI
275 |
276 | - Software Engineer
277 | - Eg. Joke execution, ensure self-driving realiability
278 | - Machine Learning Engineer
279 | - Machine Learning Researcher
280 | - Extend state-of-the-art in Ml
281 | - Data Scientist
282 | - Examine data and provide insights
283 | - Make presentation to team/executive
284 | - Data Engineer
285 | - Organize data
286 | - Make sure dara is save in an easily accessible, secure and cost effective way
287 | - AI Product Manager
288 | - Help decide what to build; what's feasible and valuable
289 |
290 | ### Getting started with a small team
291 |
292 | - 1 Software Engineer
293 | - 1 Machine Learning Engineer/Data Scientist
294 | - Nobody but yourself
295 |
296 | ### Manual de estrategias de transformación de IA (Parte 1)
297 |
298 | 1. Execute pilot projects to gain momentum
299 | 2. Build an in-house AI team
300 | 3. Provide broad Ai training
301 | 4. Develop an AI strategy
302 | 5. Develop internal and external communications
303 |
304 | **1. Execute pilot projects to gain momentum**
305 |
306 | - More important for the initial project to succees rather than be most valueable
307 | - Show traction within 6-12 months
308 | - Can be in-house or outsourced
309 |
310 | **4. Develop an AI strategy**
311 |
312 | - Leverage AI to create an advantage specific to your industry sector
313 | - :star: Design stratgy aligned with the "Virtuous Cycle of AI"
314 |
315 | **Blue River -> John Deere**
316 |
317 | ### Obstáculos de IA que deben evitarse (AI pitfalls to avoid)
318 |
319 | | Don't | Do |
320 | | ------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ |
321 | | Expect Ai to solve everything | Be realistic about what AI can and cannot do given limitations of technology, data and engineering resources |
322 | | Hire 2-3 ML engineers and count solely on them to come up with use cases | Pair engineering talent with business talent and work cross-functionally to find feasible and value projects |
323 | | Expect the AI projct to work the first time | Plan for AI development to be an iterative process, with multiple attemps needed to succeed |
324 | | Expect traditional planning processes to apply whithout changes | Work with AI team to establish timeline estimates, milestones, KPIs, etc |
325 | | Think you need superstar AI engineer before you can do anything |
326 |
327 | ### Su primer paso en AI
328 |
329 | - Get friends to learn about AI
330 | - This course
331 | - Reading group
332 | - Start brainstorming projects
333 | - No projects is too small
334 | - Hire a few ML/DS people to help
335 | - Hire or appint an AI leader (VP, AI, CAIO, etc)
336 | - Discuss with CEO/board possibilities of AI transformation
337 | - Will your company be much more valuable and/or more effective if it were good at AI?
338 |
339 | ### Estudio de las principales áreas de aplicación de la IA
340 |
341 | - **Computer Vision**
342 |
343 | - Image classification/object recognition
344 | - Face recognition
345 | - Object detection
346 | - Image segmentation
347 | - Tracking
348 |
349 | - **Natural Language Processing**
350 |
351 | - Text classification
352 | - Sentiment recognition
353 | - Information retrieval
354 | - E.g, web search
355 | - Name entity recognition
356 | - Machine traslation
357 | - Others: Parsing, part-of-speech tagging
358 |
359 | - **Speech**
360 |
361 | - Speech recognition (speech-to-text)
362 | - Trigger word/wakeword detection
363 | - Speaker ID
364 | - Speech systhesis (text-to-speech, TTS)
365 | - _The quick brown fox jumps over the lazy dog_
366 |
367 | - **Robotics**
368 |
369 | - Perception; figuring out what's in the world around
370 | - Motion planning: finding a path for the robot to folloe
371 | - Control: sending commands to the motors to folloew a path
372 |
373 | - **General machine learning**
374 | - Unstructured data (images, audio, text)
375 | - Structured data
376 |
377 | ## Unsupervised learning (Aprendizaje no supervisado)
378 |
379 | Given data (without any specific desired output labels), find something interesting about the data.
380 |
381 | Una de las críticas del _aprendizaje supervisado_ es que necesita muchos datos etiquetados.
382 |
383 | - Clustering (Segmentacion de mercado)
384 | - Transfer learning
385 | Learn from task A, and use knowledge to help on task B
386 | - Aprendizaje por refuerzo (Reinforcement learning)
387 | Use a 'reward signal' to tell the AI when it is doing well or poorly. It automatically learns to maximize its rewards.
388 | (El aprendizaje por refuerzo es muy eficaz en los videojuegos)
389 | En el helicoptero autónomo de Standford se usó esta técnica
390 | - GANs (Generative Adversarial Network) - Redes generativas adversarias (Antagónicas)
391 | - Knowledge Graph - Grafos de conocimiento
392 |
393 | ## :three: :blue_book: La IA y la sociedad :fire:
394 |
395 | La IA es un superpoder que permite que en un pequeño equipo tenga un efecto en la vida de un gran número de personas.
396 |
397 | - AI and hype
398 | - Limitations of AI
399 | - Bias
400 | - Adversarial attacks
401 | - AI, developing economies, and jobs
402 |
403 | ### Una visión realista de la AI
404 |
405 | La IA está teniendo un impacto importante en la sociedad y en la vida de las personas.
406 |
407 | **Goldlooks rule for AI**
408 |
409 | - Too optimistic: Sentient/super-intelligent AI killer robots comming soon
410 | - Too pessimistic: AI cannot do everithing, so an AI winter is comming
411 | - Just right: AI can't do everithing, but will transform industries
412 |
413 | #### Limitations of AI
414 |
415 | - Performance limitations
416 | - Explainability is hard (but sometimes doable)
417 | - Biased AI through biased data (Parcialidad)
418 | - Adversarial attack on AI
419 |
420 | **Why bias matters?**
421 |
422 | - Hiring tool that discriminated against women
423 | - Facial recognition working better for light-skinned than dark-skinned individuals
424 | - Bank loan approvals
425 | - Toxic effect of reinforcing unhealthy stereotypes
426 |
427 | **Combating bias**
428 |
429 | - Technical solutions
430 | - E.g 'zero out' the bias in words
431 | - Use less biased and/or morre inclusive data
432 | - Transparency and/or auditing processes
433 | - Diverse workforce
434 | - Create less biased applications
435 |
436 | #### Ataques adversos a la IA (Adversarial attacks on AI)
437 |
438 | Un ataque adversario a un sistema de AI, es un intento que haga algo distinto de lo que se esperaba que haga, con el fin de engañarlo.
439 |
440 | _Pegatina de tostadora en la banana del equipo de Google_
441 |
442 | > "Juego de suma cero", contra adversarios-
443 |
444 | ### Usos adversos de la AI (Adverse uses of AI)
445 |
446 | - DeepFakes
447 | - Synthesize video of people doing things they never did
448 | - Undetermining of democracy and privacy
449 | - Oppresive surveillance
450 | - Generanting fake comments
451 | - Spam vs anti-spam and fraud vs anti-frauds
452 |
453 | ### La IA y las economías en desarrollo (AI and developing economies)
454 |
455 | - "Leapfrog"
456 | - Mobile phones
457 | - Mobile payments
458 | - Online education
459 | - Focus on AI to strengthen a country's vertical industries
460 | - Public-provate partnerships to acelerate development
461 | - Invest in education
462 |
463 | ### La IA y los empleos (AI and jobs)
464 |
465 | Todos debemos mantenernos en un constante aprendizaje, esto nos garantizará mayores oportunidades.
466 |
467 | **¿Qué debes hacer para trabajar en IA?**
468 |
469 | Si quieres trabajar en IA, es posible aprender IA desde cero con cursos en línea y otros recursos, y si se combina tus conocimientos actuales, y los relaciona con IA está más cualificado para realizar un y trabajo valioso en este sector aplicando AI, en el área que más se sienta cómodo.
470 |
471 | Industria vertical
472 |
473 | **¿Cuál es el primer paso en la Guía de transformación de IA para ayudar a su empresa a ser experta en IA?**
474 |
475 | Ejecutar proyectos piloto parah ganar impulso. Tener éxito y mostrar avance en 6 a 10 meses.
476 |
--------------------------------------------------------------------------------
/POO/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | // Use IntelliSense to learn about possible attributes.
3 | // Hover to view descriptions of existing attributes.
4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
5 | "version": "0.2.0",
6 | "configurations": [
7 | {
8 | "name": "Python: Archivo actual",
9 | "type": "python",
10 | "request": "launch",
11 | "program": "${file}",
12 | "console": "integratedTerminal"
13 | }
14 | ]
15 | }
--------------------------------------------------------------------------------
/POO/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "python.pythonPath": "C:\\Users\\FLIAMN\\AppData\\Local\\Programs\\Python\\Python38\\python.exe"
3 | }
--------------------------------------------------------------------------------
/POO/JS/Account.js:
--------------------------------------------------------------------------------
1 | function Account(name, document) {
2 |
3 | this.id;
4 | this.name = name;
5 | this.document = document;
6 | this.email;
7 | this.password;
8 |
9 | }
--------------------------------------------------------------------------------
/POO/JS/Car.js:
--------------------------------------------------------------------------------
1 | function Car(license, driver) {
2 | this.id;
3 | this.license = license;
4 | this.driver = driver;
5 | this.passenger;
6 | }
7 |
8 | Car.prototype.printDataCar = function () {
9 | console.log(this.driver);
10 | console.log(this.driver.name);
11 | console.log(this.driver.document);
12 | console.log(this.passenger);
13 | }
--------------------------------------------------------------------------------
/POO/JS/Card.js:
--------------------------------------------------------------------------------
1 | class Paypal extends Payment {
2 |
3 | constructor(id, number, cvv, date) {
4 | super(id);
5 | this.number = number;
6 | this.cvv = cvv;
7 | this.date = date;
8 | }
9 |
10 | }
--------------------------------------------------------------------------------
/POO/JS/Cash.js:
--------------------------------------------------------------------------------
1 | class Cash extends Payment {
2 |
3 | constructor(id) {
4 | super(id);
5 | }
6 |
7 | }
--------------------------------------------------------------------------------
/POO/JS/Driver.js:
--------------------------------------------------------------------------------
1 | class Driver extends Account {
2 |
3 | constructor(id, name, document, email, password) {
4 | super(id, name, document, email, password);
5 | }
6 |
7 | }
--------------------------------------------------------------------------------
/POO/JS/ES6Account.js:
--------------------------------------------------------------------------------
1 | class Account {
2 |
3 | constructor(name, document, email, password) {
4 | this.id;
5 | this.name = name;
6 | this.document = document;
7 | this.email = email;
8 | this.password = password;
9 | }
10 |
11 | printData() {
12 | console.log(this);
13 | }
14 |
15 | }
--------------------------------------------------------------------------------
/POO/JS/ES6Car.js:
--------------------------------------------------------------------------------
1 | /**
2 | * A partir de las nuevas especificaciones del EcmaScript 6 ya podemos declarar una clase con la palabra reservada class, aunque es importante aclarar que estos no dejan de ser prototipos, sino todo lo contrario.
3 | */
4 | class Car {
5 |
6 | constructor(license, driver) {
7 | this.id;
8 | this.license = license;
9 | this.driver = driver;
10 | this.passenger;
11 | }
12 |
13 | printDataCar() {
14 | console.log(this.driver);
15 | console.log(this.license);
16 | console.log(this.passenger);
17 | }
18 |
19 | }
--------------------------------------------------------------------------------
/POO/JS/Payment.js:
--------------------------------------------------------------------------------
1 | function Payment(id) {
2 | this.id = id;
3 | }
--------------------------------------------------------------------------------
/POO/JS/Paypal.js:
--------------------------------------------------------------------------------
1 | class Paypal extends Payment {
2 |
3 | constructor(id, email) {
4 | super(id);
5 | this.email = email;
6 | }
7 |
8 | }
--------------------------------------------------------------------------------
/POO/JS/Route.js:
--------------------------------------------------------------------------------
1 | function Route() {
2 | this.id;
3 | this.init;
4 | this.end;
5 | }
--------------------------------------------------------------------------------
/POO/JS/UberBlack.js:
--------------------------------------------------------------------------------
1 | class UberBlack extends Car {
2 | constructor(license, driver, typeCarAccepted, seatsMaterial) {
3 | super(license, driver);
4 | this.typeCarAccepted = typeCarAccepted;
5 | this.seatsMaterial = seatsMaterial;
6 | }
7 | }
--------------------------------------------------------------------------------
/POO/JS/UberPool.js:
--------------------------------------------------------------------------------
1 | class UberPool extends Car {
2 | constructor(license, driver, brand, model) {
3 | super(license, driver);
4 | this.brand = brand;
5 | this.model = model;
6 | }
7 | }
--------------------------------------------------------------------------------
/POO/JS/UberVan.js:
--------------------------------------------------------------------------------
1 | class UberVan extends Car {
2 | constructor(license, driver, typeCarAccepted, seatsMaterial) {
3 | super(license, driver);
4 | this.typeCarAccepted = typeCarAccepted;
5 | this.seatsMaterial = seatsMaterial;
6 | }
7 | }
--------------------------------------------------------------------------------
/POO/JS/UberX.js:
--------------------------------------------------------------------------------
1 | class UberX extends Car {
2 | constructor(license, driver, brand, model) {
3 | super(license, driver);
4 | this.brand = brand;
5 | this.model = model;
6 | }
7 | }
--------------------------------------------------------------------------------
/POO/JS/User.js:
--------------------------------------------------------------------------------
1 | class User extends Account {
2 |
3 | constructor(id, name, document, email, password) {
4 | super(id, name, document, email, password);
5 | }
6 |
7 | }
--------------------------------------------------------------------------------
/POO/JS/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Programación Orientada a Objetos en JS
8 |
9 |
';
21 | }
22 |
23 | }
24 |
25 | ?>
--------------------------------------------------------------------------------
/POO/PHP/Payment.php:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/POO/PHP/Route.php:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/POO/PHP/index.php:
--------------------------------------------------------------------------------
1 | printData();
12 | $uberPool->printData();
13 |
14 |
15 | ?>
--------------------------------------------------------------------------------
/POO/PHP/uberBlack.php:
--------------------------------------------------------------------------------
1 | typeCarAccepted = $typeCarAccepted;
11 | $this->seatsMaterial = $seatsMaterial;
12 | }
13 |
14 | }
15 |
16 | ?>
--------------------------------------------------------------------------------
/POO/PHP/uberPool.php:
--------------------------------------------------------------------------------
1 | brand = $brand;
11 | $this->model = $model;
12 | }
13 |
14 | }
15 |
16 | ?>
--------------------------------------------------------------------------------
/POO/PHP/uberVan.php:
--------------------------------------------------------------------------------
1 | typeCarAccepted = $typeCarAccepted;
12 | $this->seatsMaterial = $seatsMaterial;
13 | }
14 |
15 | }
16 |
17 | ?>
--------------------------------------------------------------------------------
/POO/PHP/uberX.php:
--------------------------------------------------------------------------------
1 | brand = $brand;
12 | $this->model = $model;
13 | }
14 |
15 | }
16 |
17 | ?>
--------------------------------------------------------------------------------
/POO/Python/account.py:
--------------------------------------------------------------------------------
1 | class Account:
2 | id = int
3 | name = str
4 | document = str
5 | email = str
6 | password = str
7 |
8 | def __init__(self, name, document):
9 | self.name = name
10 | self.document = document
11 |
12 |
--------------------------------------------------------------------------------
/POO/Python/car.py:
--------------------------------------------------------------------------------
1 | from account import Account
2 |
3 |
4 | class Car:
5 | id = int
6 | license = str
7 | driver = Account("", "")
8 | passenger = str
9 |
10 | def __init__(self, name, driver):
11 | self.name = name
12 | self.driver = driver
13 |
14 | def printData(self):
15 | print(self.license, self.passenger)
16 | print(vars(self.driver))
17 |
--------------------------------------------------------------------------------
/POO/Python/card.py:
--------------------------------------------------------------------------------
1 | from payment import Payment
2 |
3 |
4 | class Card(Payment):
5 |
6 | number = int
7 | cvv = int
8 | date = str
9 |
10 | def __init__(self, id, number, cvv, date):
11 | super().__init__(id)
12 | self.number = number
13 | self.cvv = cvv
14 | self.date = date
15 |
--------------------------------------------------------------------------------
/POO/Python/cash.py:
--------------------------------------------------------------------------------
1 | from payment import Payment
2 |
3 |
4 | class Cash(Payment):
5 |
6 | def __init__(self, id):
7 | super().__init__(id)
8 |
--------------------------------------------------------------------------------
/POO/Python/main.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from car import Car
3 | from account import Account
4 | from uberBlack import UberBlack
5 | from paypal import Paypal
6 |
7 | if __name__ == "__main__":
8 | print("Hello python")
9 |
10 | car = Car("ADK823", Account("Juan Magallán", "87133813"))
11 | print(vars(car))
12 | print(vars(car.driver))
13 |
14 | uberBlack = UberBlack("LJD273", Account("Juan Magallán", "87133813"), [
15 | "Audi", "Mercedes"], ["Cuero"])
16 | print(vars(uberBlack))
17 |
18 | paypal = Paypal(1, "juan@correo.com")
19 | print(vars(paypal))
20 |
--------------------------------------------------------------------------------
/POO/Python/payment.py:
--------------------------------------------------------------------------------
1 | class Payment:
2 | id = int
3 |
4 | def __init__(self, id):
5 | self.id = id
6 |
--------------------------------------------------------------------------------
/POO/Python/paypal.py:
--------------------------------------------------------------------------------
1 | from payment import Payment
2 |
3 |
4 | class Paypal(Payment):
5 |
6 | email = str
7 |
8 | def __init__(self, id, email):
9 | super().__init__(id)
10 | self.email = email
11 |
--------------------------------------------------------------------------------
/POO/Python/route.py:
--------------------------------------------------------------------------------
1 | class Route:
2 | id = int
3 | start = []
4 | end = []
--------------------------------------------------------------------------------
/POO/Python/uberBlack.py:
--------------------------------------------------------------------------------
1 | from car import Car
2 |
3 |
4 | class UberBlack(Car):
5 | typeCarAccepted = []
6 | seatsMaterial = []
7 |
8 | def __init__(self, license, driver, typeCarAccepted, seatsMaterial):
9 | super().__init__(license, driver)
10 | self.typeCarAccepted = typeCarAccepted
11 | self.seatsMaterial = seatsMaterial
12 |
--------------------------------------------------------------------------------
/POO/Python/uberPool.py:
--------------------------------------------------------------------------------
1 | from car import Car
2 |
3 |
4 | class UberPool(Car):
5 | brand = str
6 | model = str
7 |
8 | def __init__(self, license, driver, brand, model):
9 | super().__init__(license, driver)
10 | self.brand = brand
11 | self.model = model
12 |
--------------------------------------------------------------------------------
/POO/Python/uberVan.py:
--------------------------------------------------------------------------------
1 | from car import Car
2 |
3 |
4 | class UberVan(Car):
5 | typeCarAccepted = []
6 | seatsMaterial = []
7 |
8 | def __init__(self, license, driver, typeCarAccepted, seatsMaterial):
9 | super().__init__(license, driver)
10 | self.typeCarAccepted = typeCarAccepted
11 | self.seatsMaterial = seatsMaterial
12 |
--------------------------------------------------------------------------------
/POO/Python/uberX.py:
--------------------------------------------------------------------------------
1 | from car import Car
2 |
3 |
4 | class UberX(Car):
5 | brand = str
6 | model = str
7 |
8 | def __init__(self, license, driver, brand, model):
9 | super().__init__(license, driver)
10 | self.brand = brand
11 | self.model = model
12 |
--------------------------------------------------------------------------------
/POO/README.md:
--------------------------------------------------------------------------------
1 | # Programación Orientada a Objetos: POO
2 |
3 | Para resolver un problema como desarrollador es de gran utilidad dividirlo en subproblemas y generar un modelo que te permita implementar las soluciones en código. A lo largo de este curso vas a analizar Uber, una de las aplicaciones más usadas en el mundo, para entender cómo está construida. A partir de este análisis harás la extracción y definición de los objetos, clases y métodos que conforman la aplicación, usarás UML para modelarla y, finalmente, usando diferentes lenguajes como Java, PHP y Python harás la implementación de las clases y objetos de la aplicación.
4 |
5 | ## ¿Por qué aprender Programación Orientada a Objetos?
6 |
7 | - **Vas a programar más rápido**. Tener un análisis previo de lo que estás realizando te ayudará a generar código mucho más veloz
8 |
9 | -**Dejas de ser Programador Jr**. Podrás responder preguntas como ¿Qué es encapsulamiento?, ¿Qué es Abstracción?, ¿Qué es Herencia?, ¿Qué es Polimorfismo? en futuras entrevistas de trabajo
10 |
11 | - Dejar de Copiar y Pegar Código.
12 |
13 | - **Analizar** Problemas
14 | - Observación
15 | - Entendimiento
16 | - Lectura
17 | - **Plasmar** Análisis de problemas
18 | - Diagramas
19 | - **Programar**
20 | - Lenguajes de programación
21 |
22 | ### ¿Qué resuelve la Programación Orientación a Objetos?
23 |
24 | La programación Orientada a Objetos nace de los problemas creados por la programación estructurada y nos ayuda a resolver cierto problemas como:
25 |
26 | - **Código muy largo**: A medida que un sistema va creciendo y se hace más robusta el código generado se vuelve muy extenso haciéndose difícil de leer, depurar, mantener.
27 |
28 | - **Si algo falla, todo se rompe**: Ya que con la programación estructurada el código se ejecuta secuencialmente al momento de que una de esas líneas fallara todo lo demás deja de funcionar.
29 |
30 | - Difícil de mantener.
31 |
32 | Para más información ver [Programación orientada a objetos](https://static.platzi.com/media/public/uploads/programacion-orientada-a-objetos-poo_c4774196-cfdb-412e-bae5-210a97d78f8b.pdf)
33 |
34 | ## Paradigma Orientado a Objetos
35 |
36 | La Programación Orientada a Objetos viene de una filosofía o forma de pensar que es la Orientación a Objetos y esto surge a partir de los problemas que necesitamos plasmar en código.
37 |
38 | _**Es analizar un problema en forma de objetos para después llevarlo a código, eso es la Orientación a Objetos.**_
39 |
40 | Un **paradigma** es una teoría que suministra la base y modelo para resolver problemas.
41 |
42 | El paradigma de Programación Orientada a Objetos se compone de **4 elementos**:
43 |
44 | - Clases
45 | - Propiedades
46 | - Métodos
47 | - Objetos
48 |
49 | Y **4 Pilares**:
50 |
51 | - Encapsulamiento
52 | - Abstracción
53 | - Herencia
54 | - Polimorfismo
55 |
56 | ## Lenguajes Orientados a Objetos
57 |
58 | - **Java**:
59 | – Orientado a Objetos naturalmente
60 | – Es muy útilizado en Android
61 | – Y es usado del lado del servidor o Server Side
62 | - **PHP**
63 | – Lenguaje interpretado
64 | – Pensado para la Web
65 | - **Python**
66 | – Diseñado para ser fácil de usar
67 | – Múltiples usos: Web, Server Side, Análisis de Datos, Machine Learning, etc
68 | - **Javascript**
69 | – Lenguaje interpretado
70 | – Orientado a Objetos pero basado en prototipos
71 | – Pensado para la Web
72 | - C#
73 | - Ruby
74 | - Kotlin
75 |
76 | ## Instalando y configurando VSCode
77 |
78 | Descargar el editor de código desde el sitio web oficial [Visual Studio Code](https://code.visualstudio.com/download). Seleccionar el paquete adecuado para el SO y seguir el proceso de instalación.
79 |
80 | Para soportar cualquier lenguaje visitar [Programming Languages](https://code.visualstudio.com/docs/languages/overview)
81 |
82 | **Plugins for VSCode**
83 |
84 | - **Java**
85 | - Java Extension Pack
86 | - Debugger for Java
87 |
88 | > Para Java es necesario descargar el OpenJDK
89 |
90 | - **Python**
91 | - **PHP**
92 | - PHP Server: Serve your Project with PHP
93 | - **JS**
94 | VSCode como está construido con JS, se integra muy bien y no hay necesidad de instalar nada.
95 |
96 | ## Diagramas de Modelado
97 |
98 | - **OMT**: Object Modeling Techniques. Es una metodología para el análisis orientado a objetos.
99 |
100 | - **UML**: Unified Modeling Language o Lenguaje de Modelado Unificado. Tomó las bases y técnicas de OMT unificándolas. Tenemos más opciones de diagramas como lo son Clases, Casos de Uso, Objetos, Actividades, Iteración, Estados, Implementación.
101 |
102 | ## UML
103 |
104 | Como ya viste UML significa Unified Modeling Language el cual es un lenguaje estándar de modelado de sistemas orientados a objetos.
105 |
106 | 
107 |
108 | Las clases se representan así:
109 |
110 | 
111 |
112 | En la parte superior se colocan los atributos o propiedades, y debajo las operciones de la clase. Notarás que el primer caractér con el que empiezan es un símbolo. Este denotará la visibilidad del atributo o método, esto es un termino que tiene que ver con Encapsulamiento y veremos más adelante a detalle.
113 |
114 | Estos son los niveles de visibilidad que puedes tener:
115 |
116 | - `- private`
117 | - `+ public`
118 | - `# protected`
119 | - `~ default`
120 |
121 | Una forma de representar las relaciones que tendrá un elemento con otro es a través de las flechas en UML, y aquí tenemos varios tipos, estos son los más comunes:
122 |
123 | **Asociación**
124 |
125 | 
126 |
127 | Como su nombre lo dice, notarás que cada vez que esté referenciada este tipo de flecha significará que ese elemento contiene al otro en su definición. La flecha apuntará hacia la dependencia.
128 |
129 | 
130 |
131 | Con esto vemos que la ClaseA está asociada y depende de la ClaseB.
132 |
133 | **Herencia**
134 |
135 | 
136 |
137 | Siempre que veamos este tipo de fecha se estará expresando la herencia.
138 | La dirección de la flecha irá desde el hijo hasta el padre.
139 |
140 | 
141 |
142 | Con esto vemos que la ClaseB hereda de la ClaseA
143 |
144 | **Agregación**
145 |
146 | 
147 |
148 | Este se parece a la asociación en que un elemento dependerá del otro, pero en este caso será: Un elemento dependerá de muchos otros. Aquí tomamos como referencia la multiplicidad del elemento. Lo que comúnmente conocerías en Bases de Datos como Relaciones uno a muchos.
149 |
150 | 
151 |
152 | **Composición**
153 |
154 | 
155 |
156 | Este es similar al anterior solo que su relación es totalmente compenetrada de tal modo que conceptualmente una de estás clases no podría vivir si no existiera la otra.
157 |
158 | 
159 |
160 | Estos son los conceptos básicos del Lenguaje de Modelado unificado y las representaciones que tienen sus figuras.
161 |
162 | Para seguir los conceptos de UML y POO, ver los siguientes temas
163 |
164 | - Orientación a Objetos
165 | - Programación Orientada a Objetos. Análisis
166 | - Clases, Objetos y Método Constructor
167 | - Herencia
168 | - Encapsulamiento
169 | - Polimorfismo
170 |
--------------------------------------------------------------------------------
/POO/assets/UML.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jocode/Getting-Started/5edf25376e68940e58f9f6adf9e061f749006158/POO/assets/UML.jpg
--------------------------------------------------------------------------------
/POO/assets/agegacion_clases.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jocode/Getting-Started/5edf25376e68940e58f9f6adf9e061f749006158/POO/assets/agegacion_clases.jpg
--------------------------------------------------------------------------------
/POO/assets/agregacion.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jocode/Getting-Started/5edf25376e68940e58f9f6adf9e061f749006158/POO/assets/agregacion.jpg
--------------------------------------------------------------------------------
/POO/assets/asociacion.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jocode/Getting-Started/5edf25376e68940e58f9f6adf9e061f749006158/POO/assets/asociacion.jpg
--------------------------------------------------------------------------------
/POO/assets/asociacion_clases.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jocode/Getting-Started/5edf25376e68940e58f9f6adf9e061f749006158/POO/assets/asociacion_clases.jpg
--------------------------------------------------------------------------------
/POO/assets/composicion.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jocode/Getting-Started/5edf25376e68940e58f9f6adf9e061f749006158/POO/assets/composicion.jpg
--------------------------------------------------------------------------------
/POO/assets/composicion_clases.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jocode/Getting-Started/5edf25376e68940e58f9f6adf9e061f749006158/POO/assets/composicion_clases.jpg
--------------------------------------------------------------------------------
/POO/assets/diagrama_uber.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jocode/Getting-Started/5edf25376e68940e58f9f6adf9e061f749006158/POO/assets/diagrama_uber.png
--------------------------------------------------------------------------------
/POO/assets/herencia.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jocode/Getting-Started/5edf25376e68940e58f9f6adf9e061f749006158/POO/assets/herencia.jpg
--------------------------------------------------------------------------------
/POO/assets/herencia_clases.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jocode/Getting-Started/5edf25376e68940e58f9f6adf9e061f749006158/POO/assets/herencia_clases.jpg
--------------------------------------------------------------------------------
/POO/assets/programacion-orientada-a-objetos-poo.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jocode/Getting-Started/5edf25376e68940e58f9f6adf9e061f749006158/POO/assets/programacion-orientada-a-objetos-poo.pdf
--------------------------------------------------------------------------------
/POO/assets/representacion_clases.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jocode/Getting-Started/5edf25376e68940e58f9f6adf9e061f749006158/POO/assets/representacion_clases.jpg
--------------------------------------------------------------------------------
/POO/herencia.md:
--------------------------------------------------------------------------------
1 | # Herencia
2 |
3 | La **herencia** nos permite crear nuevas clases a partir de otras, se basa en modelos y conceptos de la vida real. También tenemos una jerarquía de **padre e hijo**.
4 |
5 | La herencia permite tener las mismas propiedades de un objeto en particular. Es como si tu papá tiene color cafés, tu posiblemente heredes esta misma característica. La herencia es importante tenerla cuando los objetos tienen propiedades y funcionaliadades similares, esto nos permite matener un código limpio y poco redundante.
6 |
7 | El **Encapsulamiento** es hacer que un dato sea inviolable, inalterable cuando se le asigne un modificador de acceso.
8 |
9 | ```java
10 | // Java
11 | class Student extends Person {
12 |
13 | }
14 | ```
15 |
16 | ```php
17 | // PHP
18 | class Student extends Person {
19 |
20 | }
21 | ```
22 |
23 | ```js
24 | // Javascript
25 | student.prototype = new Person();
26 | ```
27 |
28 | ```python
29 | # Python
30 | class Student(Person):
31 | ```
32 |
33 | ## Encapsulamiento
34 |
35 | El **Encapsulamiento** es hacer que un dato sea inviolable, inalterable cuando se le asigne un **_modificador de acceso_**.
36 |
37 | Un sinónimo de encapsulamiento es esconder algo, es decir evitar que un dato sea accedido desde otra parte.
38 |
39 | **Los modificadores de acceso son**:
40 |
41 | - **`public`** Todas las clases
42 | - **`protected`** Clases, paquetes y subclases
43 | - **`default`** Clases y paquetes
44 | - **`private`** Clases
45 |
46 | ## Generando polimorfismo
47 |
48 | **Polimorfismo**: Muchas formas. Poli = muchas, morfismo = formas. _NO es Poliformismo_
49 |
50 | _**Es construir métodos con el mismo nombre pero con comportamiento diferente.**_
51 |
52 | Son comportamientos diferentes que tienen las clases, donde un método se comparte entre varias clases y cada una lo implementa como lo requiera.
53 |
54 | - Muchas formas
55 | - Construir métodos con el mismo nombre pero con un comportamiento diferente.
56 |
57 | > Al sobreescribir un método `@Override` es pieza clave que estamos usando polimorfimo
58 |
59 | ## En Resumen
60 |
61 | - **Asociación**
62 |
63 | Como su nombre lo dice, notarás que cada vez que esté referenciada este tipo de flecha significará que ese elemento contiene al otro en su definición. Si recuerdas la clase Car, este contenía una instancia de Driver. La flecha apuntará hacia la dependencia.
64 |
65 | - **Herencia**
66 |
67 | Siempre que veamos este tipo de flecha se estará expresando la herencia.
68 | En nuestro diagrama tuvimos al menos tres familias conviviendo. La dirección de la flecha irá desde el hijo hasta el padre.
69 |
70 | Al grupo de la superclase se puede llamar familia carro, persona, pago, etc-
71 |
72 | - **Composición**
73 |
74 | Pasemos a una de nuestras piezas claves, pues notarás en el centro del diagrama la clase Trip que está vinculada a User, Car, Route y Payment. La composición va a significar una asociación entre estas clases con la diferencia de que para que esta clase pueda vivir forzosamente necesita a las demás. Es decir que estas clases son obligatorias para que la clase Trip pueda existir, esta dependencia obligatoria podríamos expresarla en el método constructor de la clase Trip, pues para que un objeto pueda ser creado dependerá de que los demás existan.
75 |
--------------------------------------------------------------------------------
/POO/orientacion_a_objetos.md:
--------------------------------------------------------------------------------
1 | # Orientación a Objetos
2 |
3 | ## Objetos
4 |
5 | Los Objetos son aquellos que tienen propiedades y comportamientos, también serán sustantivos.
6 |
7 | - Pueden ser Físicos o Conceptuales
8 |
9 | Las **Propiedades** también pueden llamarse atributos y estos también serán sustantivos. Algunos atributos o propiedades son nombre, tamaño, forma, estado, etc. Son todas las características del objeto.
10 |
11 | Los **Comportamientos** serán todas las operaciones que el objeto puede hacer, suelen ser verbos o sustantivos y verbo. Algunos ejemplos pueden ser que el usuario pueda hacer login y logout.
12 |
13 | ## Abstracción y Clases
14 |
15 | Una **Clase** se el modelo por el cual nuestros objetos se van a construir y nos van a permitir generar más objetos.
16 |
17 | Analizamos Objetos para crear Clases. Las **Clases** _son los modelos sobres los cuales construiremos nuestros objetos_.
18 |
19 | **Abstracción** es cuando separamos los datos de un objeto para generar un molde.
20 |
21 | ## Modularidad
22 |
23 | La **modularidad** va muy relacionada con las clases y es un principio de la Programación Orientado a Objetos y va de la mano con el Diseño Modular que significa dividir un sistema en partes pequeñas y estas serán nuestros módulos pudiendo funcionar de manera independiente.
24 |
25 | La **modularidad** de nuestro código nos va a permitir
26 |
27 | - Evitar colapsos
28 | - Hacer nuestro código más mantenible
29 | - Legibilidad
30 | - Resolución rápida de problemas
31 |
32 | Una buena práctica es separando las clases en archivos diferentes.
33 |
34 | ## Análisis en Programación Orientada a Objetos.
35 |
36 | 1. Identificar el problema
37 | 2. Identificar los objetos
38 | 3. Definir las clases
39 | 4. Implementar las clases
40 |
41 | Las clases se definen así en los diferentes leguajes de programación
42 |
43 | ```php
44 | // PHP
45 | class Person{
46 |
47 | $name = "";
48 | function walk(){}
49 |
50 | }
51 | ```
52 |
53 | ```java
54 | // Java
55 | class Person {
56 |
57 | String name = "";
58 | void walk(){}
59 |
60 | }
61 | ```
62 |
63 | ```python
64 | # Python
65 | class Person:
66 |
67 | name = "";
68 | def walk():
69 |
70 | ```
71 |
72 | ```js
73 | // Javascript
74 | function Person() {}
75 |
76 | Person.prototype.walk() = function() {};
77 | ```
78 |
79 | ## ¿Qué es la herencia?
80 |
81 | **Don’t repeat yourself** es una filosofía que promueve la reducción de duplicación en programación, esto nos va a inculcar que no tengamos líneas de código duplicadas.
82 |
83 | Toda pieza de información nunca debería ser duplicada debido a que incrementa la dificultad en los cambios y evolución
84 |
85 | La **herencia** nos permite crear nuevas clases a partir de otras, se basa en modelos y conceptos de la vida real. También tenemos una jerarquía de **padre e hijo**.
86 |
87 | ## Clases, Objetos y Método Constructor
88 |
89 | En python de usa lowerCamelCase para nombrar los archivos, pero para los nombres de las clases se usa UpperCamelCase
90 |
91 | Para agregar soporte de PHP en VSCode, debemos agregar el intérprete en las configuraciones del sistema.
92 |
93 | Los dos codigos que van en la configuracion de VSCODE
94 |
95 | - `"php.executablePath": "C:/xampp/php/php.exe"`
96 |
97 | - `"php.validate.executablePath": "C:/xampp/php/php.exe"`
98 |
99 | Ruta variables de entorno
100 |
101 | - `C:\xampp\php`
102 |
103 | ## Objetos, método constructor y su sintaxis en código
104 |
105 | Los **objetos** nos ayudan a crear instancia de una clase, el objeto es el resultado de lo que modelamos, de los parámetros declarados y usaremos los objetos para que nuestras clases cobren vida.
106 |
107 | Los **métodos constructores** dan un estado inicial al objeto y podemos añadirle algunos datos al objeto mediante estos métodos. Los atributos o elementos que pasemos a través del constructor serán los datos mínimos que necesita el objeto para que pueda vivir.
108 |
109 | Declaración de objetos en los diferentes lenguajes
110 |
111 | ```java
112 | // Java
113 | Person person = new Person();
114 | ```
115 |
116 | ```python
117 | # Python
118 | persona = Person()
119 | ```
120 |
121 | ```js
122 | // Javascript
123 | var person = new Person();
124 | ```
125 |
126 | ```php
127 | // php
128 | $person = new Person();
129 | ```
130 |
131 | **Método constructor**
132 |
133 | - Dar un estado inicial al objeto
134 | - Tiene el mismo nombre de la clase (En algunos lenguajes)
135 | - Son los parámetros mínimos que necesita el objeto para que pueda vivir.
136 |
137 | Métodos constructores en distintos lenguajes
138 |
139 | ```php
140 | // PHP
141 | class Person{
142 |
143 | public $name;
144 |
145 | public function __construct($name){
146 | $this->name = name;
147 | }
148 |
149 | }
150 | ```
151 |
152 | ```java
153 | // Java
154 | class Person {
155 |
156 | String name = "";
157 |
158 | public Person(String name){
159 | this.name = name;
160 | }
161 |
162 | }
163 | ```
164 |
165 | ```python
166 | # Python
167 | class Person:
168 |
169 | name = "";
170 |
171 | def __init__(self, name):
172 | self.name = name;
173 |
174 | ```
175 |
176 | ```js
177 | // Javascript
178 | function Person(name) {
179 | this.name = name;
180 | }
181 | ```
182 |
183 | En python con **`print(vars(car))`** se imprimen todos las variables del objeto.
184 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Introducción a la programación
2 |
3 | ## Qué es la programación
4 |
5 | Es el proceso de diseñar, codificar, depurar y mantener el código fuente de un programa de computadora.
6 |
7 | Es el arte que nos permite representar por medio de código una de las muchas soluciones para resolver un problema. Cada programador tiene sus propias características.
8 |
9 | La **creatividad** es una cualidad muy importante para un programador, necesitamos resolver problemas y debemos imaginar soluciones.
10 |
11 | > Los pequeños detalles hacen una gran diferencia.
12 |
13 | 
14 |
15 | ## ¿Cómo funciona la programación?
16 |
17 | Le damos órdenes a la computadora para realizar una acción. En programación existen dos elementos importantes:
18 | - **Código** Instrucciones que le damos a la computadora
19 | - **Intérprete y/o compilador** Algunos lenguajes pueden ser interpretados y otros compilados. Este elemento nos permite el código a un lenguaje máquina (1 y 0)
20 |
21 | > NO puedes usar un mismo lenguaje para todo, para eso existen distintas herramientas.
22 |
23 | ## ¿En dónde se utiliza la programación?
24 |
25 | Se usa en todos lados. Los sistemas operativos y embebidos funcionan con código. No importa a lo que te dediques, simpre podrás dar solución a un problema.
26 | De una pequeña idea surge grandes cosas.
27 |
28 | > Cree en lo que haces y eso definirá tu futuro.
29 |
30 | ## Ventajas de ser programador.
31 |
32 | Algunas ventajas de ser programador son:
33 | - La remuneración (USD$ 1600 - 1900)
34 | - Puedes trabajar en cualquier lugar, tiene muchas salidas.
35 | - Capacidad de resolver problemas desde diferentes perspectivas
36 |
37 | **Importante** Hacer proyectos para ganar experiencia. Desarrollar Apps, páginas web, etc.
38 |
39 | ## Cualidades de un programador
40 |
41 | - Creatividad
42 | - Siempre estás aprendiendo
43 | - Es autodidacta. (Hambre de aprender más y más)
44 | - Perseverancia > Talento
45 | - Comunicación. Ser claros y más si se trabaja en equipo
46 |
47 |
48 | ## Lenguajes de programación
49 |
50 | Los lenguajes de programación nos permiten comunicarnos con la computadora.
51 |
52 | **Qué es un lenguaje de programación**
53 | Es un lenguaje que contiene reglas específicas que nos permiten realizar o controlar ciertas acciones en una computadora. Es el puente de comunicación entre la persona y la máquina.
54 |
55 | El intérprete traduce el código del lenguaje de programación a lenguaje máquina; binario (1 y 0).
56 |
57 | Los lenguajes de programación se dividen en dos grupos:
58 | - Lenguajes de alto nivel
59 | - Lenguajes de bajo nivel
60 |
61 | > NO hay mejor lenguaje, algunos hacen tareas mejor que otros. Todo depende de lo que quieras hacer.
62 |
63 | ## Lenguajes de Alto y Bajo Nivel
64 |
65 | Cada uno de ellos tienen una característica importante
66 |
67 | - **Lenguajes de alto Nivel** Los comprendemos mejor las personas. Algunos lenguajes de alto nvel son:
68 | - Python
69 | - PHP
70 | - Ruby
71 | - Java
72 | - C#
73 |
74 | Las ventajas de ellos es que son portables, sencillos y fácil de leer y mantener el código
75 |
76 | - **Lenguajes de bajo Nivel** Lo comprende mejor la máquina. Algunos lenguajes de bajo nivel son:
77 | - Ensamblador
78 |
79 | La ventaja es que se compilan mucho más rápido y optimizan la memoria.
80 |
81 | - **Lenguajes de nivel medio** Por ejemplo **C**. No se pueden considerar de bajo nivel porque usa una sintaxis legible, y se puede manejar fácilmente el hardware de un equipo, escribiendo código optimizado.
82 |
83 | ## Lenguajes interpretados y compilados
84 |
85 | Podemos clasificar los lenguajes en 2 tipos.
86 |
87 | - **Lenguajes compilados** Usan un programa llamada compilador, para traducir el código a lenguaje máquina y crea un archivo ejecutable
88 |
89 |
90 | - **Lenguajes interpretados** Usan un programa llamado intérprete, para poder traducir lo escrito a lenguaje máquina. El código es leido por el intérprete y no crea archivos ejecutables `.exe`
91 |
92 |
93 | ## Algoritmos
94 |
95 | Es un conjunto de reglas ordenadas, definidas y finitas. Que nos permite realizar una actividad.
96 |
97 | 
98 |
99 |
100 | ## Instalación de Python en windows
101 |
102 | Debemos instalar el intérprete de python en windows para poder empezar a escribir nuestras primera líneas de código. También debemos descargar un editor de código. Puede ser Visual Studio Code.
103 |
104 | *Para más información ver* [Python VSCode](https://codigofacilito.com/articulos/python-vsc)
105 |
106 |
107 | **Para ver el contenido de python** ir al directorio [python](python)
108 |
109 |
110 | ## Configurando VS code para desarrollo
111 |
112 | ### **plugins**
113 |
114 | - **Prettier - Code formatter** Nos sirve para formatear el código y que sea más legible.
115 | - **Color Highlight** Nos colorea los hexadecimales que definamos en los estilos.
116 | - **Bracket Pair Colorizer** Nos colorea los llaves, ubicándolos por bloques.
117 | - **Live Server** Ejecuta un servidor local con recargas en vivo para recargar páginas estáticas o dinámicas.
118 | - **Path Intellisense** Completa automáticamente los nombres de archivo que tengamos en los directorios
119 | - **Auto Rename Tag** Cambia automáticamente el nombre de la etiqueta HTML/XML emparejada, igual que visualmente lo hace el IDE de Visual Studio.
120 | - **Material Icon Theme** Íconos de material design para los proyectos que abramos en VSCode
121 |
122 | ### Instalando WSL on Windows 10
123 |
124 | - [:notebook: Windows Subsystem for Linux Installation Guide for Windows 10](https://docs.microsoft.com/en-us/windows/wsl/install-win10)
125 |
126 | Para la instalación de WSL segumos los pasos anteriores. Es importante tener instalado Windows 10.
127 |
128 | Luego, que se tenga habilitada WSL. Descargamos los siguiente desde la windows store.
129 | - Ubuntu 20.04 LTS
130 | - Windows terminal
131 |
132 | Usando el comando pwd, nos indica en qué directorio estamos trabajando.
133 |
134 | - **`pwd`**
135 | - **`cd`** chage directory
136 | - **`ls`** list directory
137 | - **`cd /`** Vamos a la raíz del SO
138 | - **`cd mnt`** Encontramos los discos del PC
139 | - **`cd ~`** Con este comando nos dirije al home del usuario instalado
140 |
141 |
142 | **Creando una carpeta para ls proyectos**
143 |
144 | - **`mkdir dev`** Con este comando creamos un directorio
145 | - **`touch index.html`** Con este comando creamos un archivo
146 | - **`mv index.html dev`** Mueve un archivo dentro de un directorio (Aplica también para carpetas)
147 | - **`cat file`** Muestra el contenido de los archivos.
148 | - **`man cat`** Muestra la documentación de cada comando
149 |
150 | ## Actualizar los paquetes
151 |
152 | Se actualiza los repositorios del sistema operaitivo
153 | - **`sudo apt-get update`**
154 | - **`sudo apt-get upgrade`**
155 |
156 | - **`sudo apt install nodejs`** Instala nodejs
157 | - **`node -v`** Para ver la versión de nodejs instalada.
158 |
159 | - **`sudo apt install npm`** Instala node package manager
160 |
161 | ### Configurando el proyecto con ReactJS
162 |
163 | *__npx__* Instala los paquetes de nodeJS, lo que hace es descargar el programa y ejecutarla borrando los instaladores.
164 |
165 | - **`npx create-react-app react_first`**
166 |
167 | Para darle permisos a un directorio en Linux, podemos usar el comando.
168 |
169 | - **`sudo chown -R user path/to/folder`**
170 |
171 | ### Borrar directorio en linux
172 |
173 | - **`rm directory`** Borra un directorio vacío
174 | - **`rm -rf directory`** Borra un directorio con los archivos que tenga dentro (Borrado recursivo)
175 |
176 | - **`sudo apt install git`** Con esto se instala `git` en linux
177 |
178 | ### Vincular clave SSH e github
179 |
180 | - **`ssh-keygen -t rsa -b 4096 -C email`**
181 |
182 | Usamos el ssh-agent
183 |
184 | - **`eval "$(ssh-agent -s)"`** Evalúa si hay un agente ejecutando
185 |
186 | Para modificar los datos de usuario en git, usamos
187 |
188 | - **`git config --global user.email [email]`**
189 | - **`git config --global user.name [name]`**
190 |
191 | Para verificar que tenemos acceso a github, podemos usar el comando
192 |
193 | - **`ssh -T git@github.com`**
--------------------------------------------------------------------------------
/assets/Technical English for Professionals Course.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jocode/Getting-Started/5edf25376e68940e58f9f6adf9e061f749006158/assets/Technical English for Professionals Course.pdf
--------------------------------------------------------------------------------
/assets/curso-trabajar-como-freelancer.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jocode/Getting-Started/5edf25376e68940e58f9f6adf9e061f749006158/assets/curso-trabajar-como-freelancer.pdf
--------------------------------------------------------------------------------
/basicos-git.md:
--------------------------------------------------------------------------------
1 | # Qué es Git
2 |
3 | Version control systems (VCS) for tracking changes in computeer files
4 |
5 | * Distributed version control
6 | * Coordinates works between multiple developers
7 | * Who made what change and when
8 | * Revert back any time
9 | * Local & remotes repos
10 |
11 | ## Conceptos de Git
12 |
13 | * Mantiene el seguimiento del código en la historia
14 | * Toma (Snapshots) de los archivos
15 | * Usted decide cuando hacer los snapshot a través de un commit (Confirmación, anotación)
16 |
17 |
18 | ## Comandos básicos
19 |
20 | En git hay 3 estados:
21 | 1. El **working directory** Donde se va a estar trabajando con todos los archivos
22 | 2. El **staging area** Es el lugar donde prepara los archivos que va a ser guardados en el repositorio
23 | 3. **repository** Son los archivos que se guardan como snapshots
24 |
25 | * `git init` Inicia un repositorio
26 |
27 | * `git add ` Agrega un archivo a working directory
28 |
29 | * `git status` Muestra el estado de los archivos
30 |
31 | * `git commit` Agrega los archivos del staging area al repositorio
32 |
33 | * `git push` Envía los cambios en tu copia local a un repositorio remoto
34 |
35 | * `git pull` Trae los cambios de un servidor remoro
36 |
37 | * `git clone` Copia el repositorio desde un repositorio remoto
38 |
39 | * `git checkout -- file` Revierte los cambios de los archivos
40 |
41 | * `git diff` Para ver las diferencias hechas en los archivos
42 |
43 |
44 | - **ls** Lista los archivos que hay en ese directorio
45 | - **pwd** Ver la ruta en la terminal
46 |
47 | En el archivo **.gitignore** podemos colocar los archivos y carpetas que queremos que git ignore y no los agregue al repositorio
--------------------------------------------------------------------------------
/comandos_git.md:
--------------------------------------------------------------------------------
1 | # Comandos para la terminal en Git :sunglasses:
2 |
3 | - **`$ git init`**
4 | Rastrea todos los archivos que tengas en un directorio o carpera, es decir, con este comando es que creas
5 | el inicio de git, para que funcione como un CVS
6 |
7 |
8 | 1. Agregar Usuario
9 | - **`$ git config --global user.name "Mi nombre"`**
10 |
11 | 2. Agregar Email de Usuario (Debe ser el que tenga en la cuenta de GitHub, para sincronizar los proyectos)
12 | - **`$ git config --global user.email "email"`**
13 |
14 | 3. LLaves SSH, alternativas al protocolo FTP
15 | - El FTP No lleva control de Versiones del Software
16 | - Los archivos FTP no son seguras, al enviar datos al servidor
17 | - Las claves SSH encripta los archivos incluso las imagenes
18 |
19 |
20 | ## Usando SSH :key:
21 |
22 | - Para comprobar claves SSH existentes
23 | - `$ ls -al ~/.ssh` -> # Lists the files in your .ssh directory, if they exist
24 |
25 | - `$ ssh-keygen` -> Genera la llave
26 |
27 | - `$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"` Genera la llave, le indicamos el email el cuál usará para la conexión
28 |
29 | - `$ cd .ssh` -> Para ingresar a la carpeta donde se guarda la Llave SSH
30 |
31 | - `$ cat ` -> Con este comando, le digo a git, que me mueste la llave, y con ella la conecto a gitHub para que sincronice los proyectos, la llave es única, e identifica al ordenador
32 |
33 | Copiar la llave pública (id_rsa.pub) en la cuenta de GitHub, colocar el nombre y la clave, y guardar los cambios.
34 |
35 | - `$ eval $(ssh-agent -s)` -> Es el agente que mantiene las claves publicas y privadas y verifica las claves para ese servicio
36 |
37 | - `$ ssh-add ~/.ssh/id_rsa` -> Para agregar la contraseña y que git no la pregunte cada vez que haga un pull o push, el agente se inicia manualmente cada vez que se abre el shell o bash de git
38 |
39 | - `$ shh -T git@github.com` -> Confirmar si la llave SSH está vinculada con la cuenta de GitHub
40 |
41 | ## Vincular la llave SSH con github
42 |
43 | - `$ clip < ~/.ssh/id_rsa.pub` -> Copies the contents of the id_rsa.pub file to your clipboard
44 |
45 | - Luego en la cuenta de github, vamos a `settings -> SSH and GPG keys -> New SSH key`
46 | - Le damos un nombre a la llave para identificar el computador que se conectar
47 | - Copiamos la llave en el campo "Key"
48 | Finalmente le damos en el botón "Add SSH key"
49 |
50 |
51 | **_Para más información, visitar los enlaces_**
52 | - https://help.github.com/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent/
53 | - https://help.github.com/articles/working-with-ssh-key-passphrases/
54 |
55 |
56 | Para auto ejecutar en **ssh-agent** en Git para windows, debemos crear un archivo `~/.profile o ~/.bashrc`
57 | **~** Hace referencia a la carpeta del perfil del usuario, para comprobarlo usar el comando
58 | - `$ echo ~`
59 |
60 | To run ssh-agent automatically add following lines on ~/.profile o ~/.bashrc
61 | ```bash
62 | env=~/.ssh/agent.env
63 |
64 | agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }
65 |
66 | agent_start () {
67 | (umask 077; ssh-agent >| "$env")
68 | . "$env" >| /dev/null ; }
69 |
70 | agent_load_env
71 |
72 | # agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2= agent not running
73 | agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)
74 |
75 | if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
76 | agent_start
77 | ssh-add
78 | elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then
79 | ssh-add
80 | fi
81 |
82 | unset env
83 | ```
84 | Now, when you first run Git Bash, you are prompted for your passphrase:
85 |
86 |
87 | 4. Navegar por directorios y crear nuevas carpetas
88 |
89 | - `$ cd` -> Current Directory
90 | - `$ cd ..` -> Se sale una carpeta más
91 | - `$ mkdir ` -> Crea una nueva carpeta
92 | - `$ > file.ext` -> Crea un nuevo archivo
93 |
94 | 5. Traer repositorios desde GitHub
95 |
96 | - `$ git remote add origin ` -> Indica la ruta del repositorio que quiero traer
97 | - `$ git pull` -> Descargo todos los archivos del repositorio remoto a la computadora
98 |
99 |
100 | 6. Conflictos con el archivo index.lock
101 |
102 | - `$ rm -f ./.git/index.lock`
103 |
104 |
105 |
106 | **TIPS**
107 |
108 | En algunas ocasiones git no deja trabajar porque el index esta bloqueado y al realizar commit no lo toma, porque dice que ese directorio tiene otro proceso entonces le da la solucion de que elimine ese archivo
109 |
110 | `fatal: Unable to create '/path/my_proj/.git/index.lock': File exists.`
111 |
112 | If no other git process is currently running, this probably means a
113 | git process crashed in this repository earlier. Make sure no other git
114 | process is running and remove the file manually to continue.
115 |
116 |
117 | [Markdown Emojis on Github :eyes:](https://gist.github.com/rxaviers/7360908)
--------------------------------------------------------------------------------
/css/style.css:
--------------------------------------------------------------------------------
1 | @import url('https://fonts.googleapis.com/css?family=Nunito');
2 |
3 | * {
4 | padding: 0 auto;
5 | margin: 0 auto;
6 | font-family: 'Nunito', sans-serif;
7 | }
8 |
9 | body {
10 | font-family: 'Josefin Sans', sans-serif;
11 | }
12 |
13 | h1 {
14 | text-align: center;
15 | }
16 |
17 | /* Estilos para los textos */
18 | .text{
19 |
20 | }
21 | .text-center {
22 | text-align: center;
23 | }
24 | .text-white {
25 | color: white;
26 | }
27 |
28 | .header {
29 |
30 | }
31 | .header-bg {
32 | background-color: salmon;
33 | height: 150px;
34 | width: 100%;
35 | }
36 |
37 | .article {
38 |
39 | }
40 | .article-bg {
41 | width: 80%;
42 | padding: 10px 10px 10px 10px;
43 | background-color: powderblue;
44 | }
45 |
46 | .flex {
47 | display: flex;
48 | flex-wrap: wrap;
49 | justify-content: center;
50 | align-items: center;
51 | }
52 |
--------------------------------------------------------------------------------
/english.md:
--------------------------------------------------------------------------------
1 | # Curso de Inglés Técnico para Profesionales
2 |
3 | ## How to create a professional profile?
4 |
5 | - **Why is it important to work on our professional profile?**
6 |
7 | - Professional Profile
8 | - Workplace Communication
9 | - Tech world
10 | - Content
11 |
12 | Better Job, Salaries, Recognized
13 | - Writting a goob descriptive professional profile
14 | - Creating a new updating your CV
15 | - Preparing yourself for an interview
16 | - Being able to communicate in your workplace: email, reports, presentations, etc.
17 | - Creating content for your social networks
18 | - Creating a professional portfolio
19 | - Participating un events
20 |
21 | > First, I want to learn English, because I **like it** ... Also, because I want to be a **_better version of myself_**, and this course is an excellent resource to reach my goals.
22 |
23 |
24 | ### Glossary - How to create a professional profile?
25 |
26 | Analysis: Detailed examination of something
27 |
28 | Bachelor degree: Is an undergraduate degree awarded by universities
29 |
30 | Backend developer: A programmer who creates the backend of a website, software or information system
31 |
32 | Business: A commercial activity
33 |
34 | Careers: An occupation undertaken for a significant period of time
35 |
36 | CEO - Chief executive officer: The highest ranking person in a company or other institution
37 |
38 | Cheerful: Happy and optimistic
39 |
40 | City of residence: The city where a person lives
41 |
42 | Collaborate: To work jointly with someone
43 |
44 | Colleagues: A person with whom you work
45 |
46 | Communications: The act of exchanging information
47 |
48 | Company: A commercial business
49 |
50 | Confident: Feeling or believing trust in oneself
51 |
52 | Content marketing: A type of marketing which is focused on creating content to attract clients
53 |
54 | Copy-writing: Act of writing text for advertising purposes
55 |
56 | Curriculum Vitae - CV: A brief account of a person’s, qualifications, and previous occupations
57 |
58 | Curious: Eager to know and learn things
59 |
60 | CTO - Chief technology officer: The person in charge of technology operations within a company
61 |
62 | Descriptive: A detailed characterization of something
63 |
64 | Design: A plan or drawing that shows the functionalities of something
65 |
66 | Designer: A person who plans the functionalities of something
67 |
68 | Determined: Having a firm decision or thought about something
69 |
70 | Draw: Produce a diagram of a person, an animal or an object
71 |
72 | Entrepreneur: A person who owns a business or company
73 |
74 | Experience: The events a person has lived and that has left impression
75 |
76 | Event: A thing that happens or takes place
77 |
78 | Feedback: Information about the performance of a person in a given task
79 |
80 | Fields: A particular branch of study
81 |
82 | Frontend developer: A developer who creates websites or web applications with which the user can interact directly
83 |
84 | Goal-oriented: Focused on achieving one objective only
85 |
86 | Graduate education: Degrees obtained after the bachelor education
87 |
88 | Growth: Something that has grown over time
89 |
90 | Growth team: The team that is in charge of expanding the value of a company
91 |
92 | Job: A paid position of regular employment
93 |
94 | Junior: Low or lower in rank and status
95 |
96 | Illustrator: A person who draws and creates pictures
97 |
98 | Improve: To make or become better
99 |
100 | Interview: A meeting of people face to face
101 |
102 | Leader: A person who commands a group
103 |
104 | Logic: Reasoning conducted according to strict parameters of validity
105 |
106 | Marketing professional: A person who is in charge of running marketing campaigns
107 |
108 | Master’s degree: A degree awarded by university upon the completion of a course of study demonstrating master knowledge of a field
109 |
110 | Portfolio: A folder which contains samples of work, like drawings, projects and outcomes
111 |
112 | Position: The role that a person assumes in a company
113 |
114 | Product areas: The area in charge of developing a product
115 |
116 | Proactive: Controlling the situation and proposing new solutions
117 |
118 | Professional profile: A short description of a person in their professional dimension
119 |
120 | Programmer: A person who writes computer programs
121 |
122 | Project: An enterprise that is planned to achieve a goal
123 |
124 | Project Manager: The person in charge of a project
125 |
126 | Organize: Arrange something systematically
127 |
128 | Outgoing: Friendly and sociable
129 |
130 | Outstanding: Exceptionally good
131 |
132 | Recognition: The acknowledgement of a person within a given field
133 |
134 | Research: The systematic study of a field
135 |
136 | Sales: The exchange of commodities for money
137 |
138 | Sensitive: Highly responsive or susceptible
139 |
140 | Senior: With high or higher rank
141 |
142 | Skill: The ability to do something
143 |
144 | Speciality: A subject of study or line of work
145 |
146 | Social networks: A network of social interactions. A website dedicated to social interactions
147 |
148 | Social relationships: Any relation between two individuals
149 |
150 | Sociable: Willing to talk, interact with others and engage in social activities
151 |
152 | Software: Programs used by a computer
153 |
154 | Start-up: A newly established business
155 |
156 | Strategy: A plan to achieve a specific goal
157 |
158 | Strengths: The things a person considers his or her qualities
159 |
160 | Stress: The state of mental tension
161 |
162 | Support professional: A professional in charge of assisting customers
163 |
164 | Talent: Natural aptitude or skill
165 |
166 | Task: An activity to be done
167 |
168 | Teamwork: The action of a group, especially when is effective
169 |
170 | Tech-world: Industry of technology
171 |
172 | UI designer: The person in charge of designing the interface for the user
173 |
174 | Update: Bring something to a new version
175 |
176 | UX designer: The person in charge of designing the user experience
177 |
178 | Visualize: Form a mental image of a person, an object or an event
179 |
180 | Wardrobe: A person’s entire collection of clothes
181 |
182 | Weaknesses: The things that a person considers he or she needs to work on
183 |
184 | Webinars: A seminar conducted over the internet
185 |
186 | Workflows: A sequence of processes to complete a specific task
187 |
188 | Workplace: The physical place in which a person performs his or her work
189 |
190 |
191 | ### Using specific vocabulary for careers in Information Technology
192 |
193 | I really like everything. I am currently a developer, although I design applications, logos, etc. for me.
194 |
195 | I **like** to get **involved in everythin**g from the conception of the idea to launch the project to the market. _In the not too distant future, I would like to take my own venture forward._
196 |
197 |
198 | ### How to create a successful profile?
199 |
200 | To create your professional profile you must identify **what you can do, what you like and what you are really good at**. Try writing a list for each of them.
201 |
202 | Once you are clear about the things that make you stand out, you can move on to build your professional profile. Review the examples and try to build yours.
203 |
204 | When you are building your profile you should be very descriptive in terms of experience. Do not forget to add adjectives that allow you to talk about your personality, which is also important to include. Remember that recruiters want to know about your professional experience but also how you are on a personal level.
205 |
206 | - **Adjetives**
207 | - Outgoing
208 | - Curious
209 | - Proactive
210 | - Sociable
211 | - Goal-oriented
212 | - Cheerful
213 |
214 | - **Academic achievements**
215 |
216 | > Frontend developer with experience in Javascript, HTML, CSS, CSS preprocessors, ReactJS, VueJS and Android developer. I also work as a backend developer with python, PHP and NodeJS.
217 |
218 | > I like to learn every day, work as a team, I’m curious and I like to create tools that serve people. **_My goal is to help people through technology_**
219 |
220 |
221 | ### Creating your curriculum vitae
222 |
223 | **How to make a good CV?**
224 | A brief description
225 | - Personal information
226 | - Experience
227 | - Education
228 | - Software
229 | - Skills
230 |
231 |
232 | ### Preparing yourself for a job interview
233 |
234 | - When do you feel confident?
235 | - What are your qualities?
236 | - Why do you think this company needs you?
237 | - How can you exceed the positions expectations?
238 |
239 | - **Strengths**
240 | - Organize
241 | - Teamwork
242 | - Leadership
243 | - I like to learn
244 | - **Weaknesses**
245 | - In some cases multitasking
246 | - Patience
247 | - Perfectionist
248 |
249 |
250 |
251 | ### Good strategies for writing in the workplace
252 |
253 | **In this class we will focus on how to write emails, reports and communication via chat.**
254 |
255 | - **Emails**: Each time you write one notice the extension. You must find the balance between what you want to say and the importance of that information for the person who is going to read it.
256 |
257 | - **Reports**: The structure of a good report depends on the data and statistics. Check the expressions that you can use according to what you want to achieve with your report.
258 |
259 | - **Chats**: Conversations via chat are usually more informal than in other channels. There are recognized expressions that are used in English, anywhere in the world, that can help you to be much faster and more effective.
260 |
261 |
262 |
263 | ## How to create content to enhance your professional profile
264 |
265 | ### How to create content to enhance your professional profile
266 |
267 | Nowadays everything is about content. Content gives you the possibility of entering into people’s lives without being intrusive. Right now, all brands, organizations and people that want to be successful create content so their audience and users feel they have something to learn. In this sense, it is important to create a content marketing strategy which allows you to touch people who surround you.
268 |
269 | - **What is the most common way to create a content strategy?**
270 |
271 | For starters, it is necessary to **identify the type of audience** you are communicating with. Knowing their **profile** is going to allow you to recognize the things that might or might not work with them. Consider that it’s different to be a teacher of math, than being a dev who works in San Francisco. With this in mind, you can start creating a map which includes the **topics** that you audience might like the most.
272 |
273 | - **There are many formats to reach your audience**
274 |
275 | Creating content for the audience does not need to be so **rigid**. In fact, you can show your audience that you have many **channels** to teach them things. For instance, you can create **blog posts, videos, webminars, infographics**, instagram stories, and more. Just make sure what the channels are used by the audience you aim to reach and start creating **suitable** content.
276 |
277 | - **Do it frequently**
278 |
279 | Creating content is not a matter of one time, one week or one month, if you want that your content **strategy** works you need to maintain your audience **updated**. To do this, it is advisable to create a **calendar** that helps you determine the time in which is pertinent to publish content. This can be as simple as having an **excel document** where you write the topics you want to cover and the **dates** to publish them.
280 |
281 | These three tips are going to help you create successful content and get recognition in your work environment.
282 |
283 | ### How to use English in your social networks?
284 |
285 | The use of social networks can be very useful when you are looking for a better job. In this class you will learn how to create content for specific social networks.
286 |
287 | - Be very careful with the way you write (spelling and writing).
288 | - Use appropriate vocabulary Don´t be redundant with adjectives and verbs.
289 | - Try to be as professional as possible if your profiles are public.
290 | - Avoid informal language and abbreviations.
291 | - Keep it professional
292 |
293 |
294 | ### Writing good blog posts
295 |
296 | Writing articles for a blog is something that can strengthen your personal brand, and doing it in English can help you better position yourself in different markets.
297 |
298 | - Select a topic that you would like to write about.
299 | - Identify the aspects that you will cover in the article and divide them into fragments.
300 | - Write a draft that includes all the details you will consider.
301 | - Read the draft or ask someone else to read it to get feedback.
302 | - Make sure your content is SEO friendly.
303 |
304 | In the links section you will find an example of bad practices for you to review and propose how to improve.
305 |
306 | [The worst SEO Blog Ever](https://worstseoblogever.wordpress.com/)
307 |
308 |
309 | ## English for programming, marketing and business
310 |
311 | ### Vocabulary for Programming
312 |
313 | - Programming Languages
314 | - Features
315 | - Develop Sites
316 | - Programs
317 | - Algorithms
318 | - Scope
319 | - Steps
320 | - Flowchart
321 | - Graphical representation
322 | - Syntax
323 | - General-purpose
324 | - Backend
325 | - Web Project
326 | - HTML
327 | - High-level
328 | - Weakly-type
329 | - Interpreted Language
330 | - Frameworks
331 | - Libraries
332 | - Angular
333 | - React
334 | - Multiparadigm
335 | - Readeble
336 | - Indentation
337 | - Code blocks
338 | - Parenthesis
339 | - Brackets
340 | - Coders
341 | - Lines of code
342 | - Open source
343 | - Productive
344 | - Functional programming
345 | - Interpretative programming
346 | - Object-oriented
347 |
348 |
349 | ### Best strategies to learn English
350 |
351 | We have learned vocabulary for programmers. Now we will see strategies that you can adopt to keep improving.
352 |
353 | - Read the documentation of the tools you use
354 | - Pay attention to the names of the commands and the syntax of the programming languages you use.
355 | - Participate in forums and events.
356 |
357 |
358 | ### Vocabulary for Marketing
359 |
360 | - Consumer
361 | - Brand
362 | - Cost
363 | - Distribution
364 | - Label
365 | - Launch
366 | - Market reserach
367 | - PR - Public Relations
368 | - Ad copy
369 | - Banner Ad
370 | - Tracking
371 | - CPC - Cost per Click
372 | - CPA - Cost per Acquisition
373 | - LTV - Life Time Value
374 | - MRR - Monthly Recurring Revenue
375 | - Creative stategy
376 | - Demographics
377 | - Campaign Traffic
378 | - Impressions
379 | - Strategic MarketPlanning
380 | - Content Strategy
381 | - Google Adwords
382 | - facebook Ads
383 | - Chanels
384 | - Audience
385 | - Convert
386 | - Display
387 | - Customer Persona
388 | - Age
389 | - Service
390 | - Social media
391 | - Benefits
392 | - Bussiness
393 | - Invest
394 | - Search
395 | - Blog post
396 | - Email arketing
397 | - Promotions
398 | - Discounts
399 | - Promotions
400 | - Discounts
401 | - Updates
402 | - Killer campaigns
403 |
404 |
405 | ### How to create good copy for marketing campaigns
406 |
407 | - Keep it short and strong
408 | - Use "you"
409 | - Know your audience
410 | - Focus on one objetive only
411 |
412 |
413 | ### Business vocabulary overview
414 |
415 | - **Organize**: To arrange something
416 | - **Competitor**: Another business that has a similar service
417 | - **Public Relation (PR)**: The strategy a company creates to appear in relevan media
418 | - **After-sales service**: It is the support that bussinesses provide to ther clients after the purchase
419 | - **Stategy**: A plan that has been designed to achieve a goal
420 | - **Team**: The people that work in a company or a project
421 | - **Headquarters** The place where the main office of a company is located
422 | - **Product** The thing that you offer and sell to you clients
423 | - **Investors** People who give to a company to grow their business
424 | - **Clause** A statement in a contract
425 |
426 |
427 | ### Tips for creating a successful pitch in English
428 |
429 | - Take maximum 10 minutes
430 | - Explain what your product or service really is
431 | - The idea is to sell your product
432 | - Know the audience
433 | - Formal tone
434 | - Informal tone
435 | - Explain your marketing strategy
436 | - **Show enthusiasm**
437 |
438 | (Practice your pitch)
439 |
--------------------------------------------------------------------------------
/estrategias_aprender_efectivamente.md:
--------------------------------------------------------------------------------
1 | # Curso de Estrategias para Aprender en Línea Efectivamente
2 |
3 |
4 | ## Estilos de aprendizaje
5 |
6 | ### Tipos de pensamiento
7 |
8 | La neurociencia es el campo de la ciencia que se encarga de estudiar el sistema nervioso. Hay muchos estudios e investigaciones al respecto pero todavía no tenemos certeza total de cómo funciona nuestro cerebro.
9 |
10 | Según la doctora Barbara Oakley existen dos tipos de pensamientos:
11 |
12 | - **Enfocado:** Cuando nos concentramos en un largo periodo de tiempo ininterrumpido. Podrías concentrarte tratando de aprender algo por muchas horas. Este tipo de pensamiento es adecuado cuando ya tienes una base de conocimiento.
13 |
14 | - **Difuso:** Cuando nos encontramos ante problemas nuevos. Cuando partes desde cero y quieres aprender algo nuevo. Lo mejor es usar este tipo de pensamiento cuando estudias algo nuevo (por ejemplo, en Platzi). Se trata de estudiar con interrupciones de tiempo. La técnica pomodoro te ayudará mucho en este tipo de pensamiento.
15 |
16 |
17 | > **Libro recomendados** Abre tu mente a los números *Barbara Oakley*
18 |
19 |
20 | ### ¿Qué es el aprendizaje?
21 |
22 | **Aprender** es la capacidad de adquirir conocimiento.
23 |
24 | Si quisiéramos abstraer la palabra *aprender* necesitamos definir tres palabras: **Perseguir, Atrapar o Prender**. Estamos tratando de perseguir o atrapar algún conocimiento o dato específico.
25 |
26 | Aprender significa apoderarse de algo, no solo es adquirir conocimiento como dijimos anteriormente. También significa darle sentido a ese concepto y hacerlo más poderoso para luego compartirlo y generar opiniones acerca de él.
27 |
28 | **Psicología, pedagogía y neurociencias** son estas ciencias que se encargan de estudiar cómo funcionan los procesos de aprendizaje en nuestro cerebro. A lo largo de este curso veremos algunos métodos y descubrimiento científicos de cómo podemos mejorar nuestra **capacidad de aprender**.
29 |
30 | **Aprender = Apoderarse de algo**
31 |
32 |
33 | ### Etapas del aprendizaje
34 |
35 | - En la entrada de información tenemos dos tipos de experiencia:
36 | - [x] **Experiencia concreta (EC)**: Es un perfil que le gusta involucrarse y de tener la experiencia.
37 | - [ ] **Observación reflexiva (OR)**: Es un perfil que le gusta comenzar su aprendizaje por medio de la lectura o la teoría.
38 |
39 | - La salida depende un poco de cómo fue la entrada:
40 | - [ ] **Conceptualización abstracta (CA)**: Si eres una persona teórica tendrás una conceptualización abstracta en base a la hipótesis generada sobre la teoría leída.
41 | - [x] **Experimentación activa (EA)**: Son ese tipo de alumnos pragmáticos donde comienzan a través de la experiencia y a partir de ahí pueden generar nuevas experiencias para aplicarlo a nuevas.
42 |
43 |
44 | ### Tipos de estudiantes
45 |
46 | - **Modelo de Kolb:**
47 | - [x] Actuar (Alumno activo) => Reflexionar (Alumno Reflexivo)
48 | - [ ] Teorizar (Alumno teórico) => Experimentar (Alumno pragmático)
49 |
50 |
51 | - [ ] **Alumnos activos**: Son entusiastas y les apasiona las cosas nuevas. Son este tipo de alumnos que actúa antes de pensar. Por lo general, aprenden mejor si tienen una actividad que consideren un desafío. Realizan actividades cortas de resultado inmediatos. Les cuesta aprender cuando se les da un papel pasivo, cuando están en un salón de clases, no se sienten protagonistas de la lección. También cuando deben analizar e interpretar datos y cuando trabajan solos.
52 |
53 | - [x] **Alumnos reflexivos**: Aprenden más cuando pueden observar detenidamente la información que les rodea, cuando les ofrecen tiempo de analizar y reflexionar antes de actuar y pueden pasar desapercibidos. Les cuesta aprender cuando tienen que ser el centro de atención, cuando no pueden realizar la tarea tomándose el tiempo que consideren y cuando tienen que actuar sin reflexionar antes.
54 |
55 | - [ ] **Alumnos teóricos**: Aprenden mejor cuando les presentan modelos objetivos, teorías y sistemas; cuando pueden investigar y rastrear información. A este tipo de alumnos les gusta mucho la forma secuencial de pensamiento, la forma lógica para llegar a la resolución del problema. Les cuesta aprender cuando se les presentan actividades que consideran confusas o inciertas, cuando deben desarrollar actividades muy subjetivas o emocionales y cuando tienen que trabajar sin un marco teórico de referencia.
56 |
57 | - [x] **Alumnos pragmáticos**: Aprenden mejor cuando se les ofrecen actividades en las que pueden relacionar las teorías con situaciones prácticas y cuando pueden poner en práctica lo que deben aprender. Les cuesta aprender cuando se presentan actividades que no se relacionan con la realidad y cuando no pueden relacionar la información con situaciones prácticas.
58 |
59 |
60 |
61 | ### Reglas de aprendizaje efectivo
62 |
63 | - **Aprender individualmente**:
64 | - Interioriza lo aprendido
65 | - Asimila la información Adquirida
66 | - Interioriza pensamientos y reflexiones
67 | - Tómate tu tiempo
68 |
69 | - **Aprender en grupo**:
70 | - Comparte lo que estás aprendiendo
71 | - Explica lo que aprendiste
72 | - Recuerda que entre más explicas, más - aprendes
73 |
74 | - **Aprender colaborativamente**:
75 | - Crea una opinión fuerte de lo que aprendiste
76 | - Ten la oportunidad de que alguien cuestione el conocimiento que adquiriste
77 |
78 |
79 |
80 | ## Estrategias de aprendizaje individual
81 |
82 | ### ¿Nacemos o nos volvemos inteligentes?
83 |
84 | Elementos claves para poder tener un **aprendizaje individual efectivo** son:
85 | - Inteligencia
86 | - Atención
87 | - Memoria
88 |
89 | El aprendizaje individual es el que se genera únicamente entre el estudiante y el profesor o cualquier otra figura que nos esté enseñando algo. Los 3 elementos importantes son: inteligencia, atención y memoria.
90 |
91 | ¿Tú qué dices? ¿Nacemos o nos volvemos inteligentes?
92 |
93 | Según algunos estudios la respuesta es que **nacemos inteligentes**, la inteligencia es heredada de nuestros ancestros. Pero también puedes volverte inteligente o mejorar tu inteligencia gracias al ambiente que nos rodea y qué tan interesados estamos en volvernos aún más inteligentes.
94 |
95 | > Entre el 40% y 50% de la inteligencia es heredada pero el otro 50% es determinado por la influencia de lo que nos rodea y nuestra voluntad de aprender algo nuevo todos los días.
96 |
97 |
98 | ### La atención y lo que no sabías sobre la técnica pomodoro
99 |
100 | La **atención** es un proceso cognitivo que nos permite enfocarnos y concentrarnos en una cosa en específico. Un proceso cognitivo será todo aquel que nos permita procesar información para transmitirla o transformarla en aprendizaje.
101 |
102 | No podemos concentrarnos en muchos estímulos al mismo tiempo porque este lleva a una **sobrecarga cognitiva**. Es por esto que el multitasking es muy mala práctica.
103 |
104 | En el tiempo de pensamiento enfocado el nivel de atención o concentración es bastante prolongado con un tiempo de hasta 10 horas. Debes estar muy atento a qué estás pensando.
105 |
106 | En el tipo de pensamiento difuso, la **técnica pomodoro** nos puede ayudarnos mucho, ya que debemos concentrarnos por lapsos de tiempo mucho más cortos y, además, nos ayuda a **evitar la procrastinación**.
107 |
108 |
109 | ### Cómo puedo sacar el máximo provecho a mi memoria
110 |
111 | La **memoria** es la capacidad de recordar algo. Cuando memorizamos estamos utilizando dos habilidades específicas: abstracción y síntesis. No me memorizamos algo por completo, memorizamos palabras o ideas claves, por eso es importante la abstracción.
112 |
113 | La **memoria funcional** es la parte de nuestro cerebro que nos ayuda a recordar cosas de manera mecánica, es decir, de memoria. Aquí se apoya la teoría de no hacer multitasking cuando intentamos aprender algo. Si hacemos más cosas cuando estamos aprendiendo nuestro coeficiente intelectual será menos efectivo.
114 |
115 | Cuando memorizamos algo tendremos el 90% de probabilidad de olvidarlo.
116 |
117 | Una técnica que puedes seguir para reducir este porcentaje a un 10% es:
118 | - Repasa un concepto 24 horas después (70%)
119 | - Repasa el concepto 1 semana después (50%)
120 | - Repasa el concepto 1 mes después (10%)
121 |
122 | **Correlaciones mnemotécnicas**: Hacer conexiones de lo aprendido con asuntos cotidianos.
123 |
124 |
125 | ### Consejos para memorizar mejor
126 |
127 | - **Antes de dormir**: Recapitula lo que aprendiste durante el día. Puede ser en una libreta, smartphone o en tu cabeza. Recuerda que nunca debes parar de aprender.
128 |
129 | - **Deportes**: Para que nuestro cerebro funcione muy bien necesita altos grados de oxigenación y hace que nuestra memoria esté siempre fresca y sea más prolongada. Nos ayuda a reducir los riesgos de Alzheimer.
130 |
131 | - **Dormir**: Es importante para la memoria y la agilidad mental de nuestro cerebro. Cuando dormimos es cuando se liberan las toxinas que nos hacen daño.
132 |
133 | > Recuerda que todo lo que nos permite desarrollar conocimiento es un proceso cognitivo.
134 |
135 | - **Consejos para memorizar mejor**
136 | - Recapitula lo que aprendiste durante el día
137 | - Haz deporte
138 | - Duerme
139 |
140 |
141 | ### Chunking como estrategia de aprendizaje individual
142 |
143 | El **Chunking**, que significa dividir o fragmentar la información en trozos, es una habilidad muy útil cuando tenemos muchísima información y debemos procesarla para convertirla en aprendizaje.
144 |
145 | Se trata dividir la información que vamos a estudiar por partes y luego volver a conectarlas para darles sentido, ya que estamos tratando de interrelacionar todos estos conceptos. Algo así como separar la información para procesarla más fácilmente y volver a unirla cuando logramos entenderla mejor.
146 |
147 |
148 | ### Hacer apuntes mejora mi proceso de aprendizaje
149 |
150 | Los **apuntes** pueden ser la columna vertebral del conocimiento, son una forma de organizar y estructurar la información de tal manera que tengan sentido para nosotros.
151 |
152 | El uso del lápiz en la toma de apuntes tiene mejor resultados en el proceso de aprendizaje porque el movimiento de nuestras manos implica el uso de los sentidos que producen resultados más altos en las actividades neurales.
153 |
154 |
155 | ### Haciendo apuntes como las Notas de Cornell
156 |
157 | > Universidad de Cornell, Nueva York EEUU
158 |
159 | Las Notas de Cornell son uno de los métodos más efectivos (y desconocidos) para guardar nuestros apuntes efectivamente, debemos seguir los siguientes lineamientos:
160 |
161 | - **Tema, Título o Materia**: ¿Qué vamos a estudiar? Esto lo vas a escribir en la parte superior de tu libreta o donde guardes tus notas.
162 | - **Glosario, Preguntas y Palabras clave**: Esta sección ocupará menos de la mitad del espacio de la primera mitad de tus apuntes. En ella vamos a definir los objetivos o cuestiones que debes resolver con este aprendizaje. Puedes usar el método de correlación mnemotécnico y asignar conceptos familiares para relacionarlos con los nuevos conceptos.
163 | - **Notas**: Esta sección ocupara un poco más de la mitad del espacio después del glosario. Puedes usar lo que mejor te convenga para plasmar la información que estás estudiando: bulletpoints, paráfrasis (evita las frases muy largas), símbolos, colores, entre otras.
164 | - **Resumen o Idea Principal**: Idealmente, esta sección debería ser muy breve y, aún así, capaz de resumir la nota por completo. Para entrar en más detalles podremos leer las notas y el glosario.
165 |
166 |
167 | - **Paráfrasis** Escribir con nuestras propias palabras
168 |
169 |
170 | - **¿Cómo incrementar mi velocidad de lectura?**
171 | 1. Reduce los movimientos sacádicos
172 | 2. Concentrate al máximo para evitar relee
173 | 3. Lee en silencio
174 | 4. Usa un señalador
175 | 5. Visualiza frases completas en lugar de palabras individuales
176 |
177 |
178 | ## Estrategias de aprendizaje en grupo
179 |
180 | **Aprender en grupo** es una gran estrategia de aprendizaje. En principio, porque tienes un motivador personal al estar aprendiendo con otras personas que, además, pueden apoyarte compartiendo su conocimiento. Funcionan como un ancla que nos ayuda a continuar.
181 |
182 | - **Ventajas** de estudiar en grupo:
183 | - Tenemos la oportunidad de aprender de otros
184 | - Exponer tus dudas
185 | - Compartir tu conocimiento
186 | - Entre más explicas más aprendes
187 |
188 | > *"Si no puedes explicar algo de forma sencilla es que ni tú mismo lo has entendido lo suficiente** - Albert Einstein
189 |
190 |
191 | ### Profesor por un día
192 |
193 | Cuando somos **profesores** estamos en la posición de explicar algo a otras personas sobre lo que estamos aprendiendo, estudiando e investigando.
194 |
195 | - **Parafrasear**: Nos da la posibilidad de recordar algo y repetirlo usando nuestras propias palabras.
196 | - **Cuestionar mi conocimiento**: En ese momento, cuando estamos explicando el tema, también tenemos una reflexión sobre qué tanto aprendimos del tema a explicar.
197 | - **Repasar lo aprendido**: Como profesores debemos estudiar y repasar los conceptos para tener los conocimientos al alcance y poderlos explicar.
198 | - **Hacer notas extras**: Las notas normales se nos quedan cortas y debemos extenderlas un poco más cuando queremos explicárselo a otras personas.
199 |
200 | _Solo puedes explicar algo cuando lo entiendes profundamente._
201 |
202 | - **Técnica de Feynman:**
203 | 1. Elige un tema
204 | 2. Escribe lo aprendido usando paráfrasis y lenguaje sencillo, luego léelo en voz alta.
205 | 3. Arregla lo que no está bien explicado
206 | 4. Repasa la información e intenta simplificarlo todavía más.
207 |
208 | **_Nuestros alumnos son los que más comparten._**
209 |
210 |
211 | ### Evaluar mi conocimiento
212 |
213 | **Evaluar conocimiento** te da la oportunidad de corroborar lo que aprendiste, evaluar qué tanto has aprendido. Por lo general, lo mejor es que estas evaluaciones sean diseñadas y aplicadas por otra persona diferente a ti.
214 |
215 | Las **evaluaciones** deben ser diseñadas con ejemplos diversos que te confronten a la resolución de otro tipo de problemas diferentes a lo que aprendiste. Esto también te permitirá complementar tu conocimiento y darte la posibilidad de aprender a aplicarlo en más áreas.
216 |
217 |
218 | ## Estrategias de aprendizaje colectivo
219 |
220 | ### El diálogo me conduce a la reflexión de mi aprendizaje
221 |
222 | Un **argumento** es una reflexión, una respuesta construida en base a la razón, defender una postura con el mayor racionamiento posible y así sea aceptado por la otra persona. Debemos comprender el tema y conocer la mayoría de las alternativas.
223 |
224 | Con estos argumentos lo que queremos es conseguir la aceptación de la otra persona de manera racional. También desarrollamos capacidades lingüísticas, incrementamos en una **50%** la adquisición del conocimientos para el día siguiente.
225 |
226 |
227 |
228 | ## Hábitos para un aprendizaje efectivo
229 |
230 |
231 | - Toma los cursos completos y aprueba el examen.
232 | - Cumples tus objetivos.
233 | - Quita toda distracción. Coloca tu teléfono en modo “No Molestar” o “Do Not Disturb”
234 | - Ten un lugar para estudiar.
235 | - Calendariza tu tiempo de estudio. Como si fueras a la escuela.
236 | - Estudia todos los días. Repasar lo aprendido o aprender algo nuevo.
237 | - Darse recompensas por cada avance. Una recompensa puede ser desde ver una buena película hasta unas buenas vacaciones.
238 | - Descansa y cuida tu vista. Usar gafas o pantallas con filtros.
239 | - Tener pasión por el aprendizaje. Nunca parar de aprender.
--------------------------------------------------------------------------------
/formacion_profesional_integral.md:
--------------------------------------------------------------------------------
1 | # Formación Profesional Integral
2 |
3 | ## ¿Que significa FPI?
4 |
5 | FPI es la formación profesional integral, que es el proceso donde se adquieren conocimientos, destrezas, actitudes y aptitudes para la participación activa en el trabajo y desarrollo profesional y personal.
6 |
7 | ## ¿Cuales son las partes principales del FPI?
8 |
9 | Aprender a aprender, aprender a ser, aprender a hacer y aprender a gestionar. Lo que se enfoca en los 3 pilares del Ser, Hacer y Saber
10 |
11 | ## ¿Cuales son las partes de una guía de aprendizaje?
12 |
13 | Las partes de la guía de aprendizaje son: Conocimientos previos, desarrollo del conocimiento y adherencia del conocimiento, que es donde aplicamos los conocimientos mediante la práctica.
14 |
15 | ## ¿Cual es diferencia entre asincrónico y sincrónico? \*
16 |
17 | Asíncrono se refierere al proceso de comunicación de forma no simultánea, es decir en el que las personas no se conectan al mismo tiempo, es decir, el trabajo que realizamos de forma independiente. Síncrono se refiere al proceso de comunicacion en tiempo real, es decir en donde todas las personas se conectan al tiempo, es este caso el proceso de aprendizaje se da entre todo el grupo.
18 |
19 | ## ¿Cual es la función de la APE?
20 |
21 | La agencia pública se empleo del Sena, es un servicio que permite conectar a empresas y profesionales de forma que se brinde un servicio para las personas que buscan empleo.
22 |
23 | ## ¿Cual es la función de la transversal de idiomas?
24 |
25 | Permite desarrollar habilidades en un nuevo lenguaje, lo que me sirve a mí como aprendiz mejorar en el aspecto personal y laboral, abriendo más oportunidades laborales y ser competitivo a nivel internacional.
26 |
27 | ## ¿Cual es la función de la transversal promover?
28 |
29 | Es la competencia que desarrolla las actividades blandas en los aprendices, como empatía, trabajo en grupo, habilidades sociales, habilidades de comunicación, aceptación de las críticas, toma de decisiones etc. Donde se desarrollan destrezas humanas mediante actividades como la danza, deporte y recreación.
30 |
--------------------------------------------------------------------------------
/git_cmd.md:
--------------------------------------------------------------------------------
1 | # ⌨️ Comandos en Git (La guía completa) ⭐
2 |
3 | ## :coffee: Agregar la identidad
4 | Es necesario configurar la primera vez git, y eso lo hacemos usando los siguientes comandos. Para descargar git en windows, lo podemos hacer en la siguiente dirección https://git-scm.com/download/win.
5 |
6 | ### Identidad
7 |
8 | * `$ git config --global user.name "John Doe"`
9 | * `$ git config --global user.email johndoe@example.com`
10 |
11 | ### Editor por defecto
12 |
13 | * `$ git config --global core.editor emacs`
14 |
15 | ### Herramienta de diferencias
16 | Esta herramienta se usa para resolver conflictos
17 |
18 | * `$ git config --global merge.tool vimdiff`
19 |
20 | ### Comprobar configuración
21 |
22 | * `$ git config --list`
23 |
24 | ### Obtener ayuda
25 |
26 | * `$ git help `
27 | * `$ git --help`
28 | * `$ man git-`
29 |
30 | ### Conectando a github mediante SSH
31 |
32 | Para agregar la clave ssh a github, en caso de realizar conexiones al servidor mediante este protocolo, ver el la documentación de github [Conectando a github con SSH](https://help.github.com/articles/connecting-to-github-with-ssh/)
33 |
34 |
35 | ## :coffee: Comandos Básicos
36 |
37 | ### Iniciar un repositorio en un directorio existente
38 |
39 | * `$ git init`
40 | * `$ git add *.c`
41 | * `$ git add README`
42 | * `$ git commit –m 'versión inicial del proyecto'`
43 | * `$ git commit ` Abre una ventana en Vim para escribir el mensaje de la confirmación del cambio
44 |
45 | * `$ git remote set-url origin url-ssh-del-repositorio-en-github` Definimos el repositorio remoto origin usando la conexión por SSH (Podemos cambiar la dirección del repositorio remoto).
46 | * `$ git remote add origin url-ssh-repo` Se usa para agregar un repositorio remoto.
47 |
48 | ## :coffee: Eliminar commit
49 |
50 | * `$ git reset --soft HEAD~1` Elimina el commit más reciente, guardando el trabajo realizado
51 | * `$ git reset --hard HEAD~1` Elimina el commit más reciente destruyendo el trabajo que has hecho
52 |
53 | ### Cambiar el ultimo commit enviado a GitHub
54 | Si ya he enviado ina confirmación y deseo cambiarlo, debo forzar el envio del commit cambiado con el comando. Recuerde que ya debe haber cambiado el commit localmente
55 |
56 | * `$ git push --force origin master`
57 |
58 | ### Cambiar mensaje de commit antiguos
59 |
60 | * `git rebase -i HEAD~3` Displays a list of the last 3 commits on the current branch
61 | * `pick e499d89 Delete CNAME`
62 | * `reword 0c39034 Better README`
63 |
64 | Luego reemplazar pick con reword antes de cada mensaje del commit que desee cambiar y guardar los cambios.
65 | Finalmente forzar el envío
66 |
67 | * `git push --force`
68 |
69 |
70 |
71 | ## :coffee: Clonar un Repositorio
72 |
73 | * `$ git clone [url]`
74 | * `$ git clone git://github.com/schacon/grit.git mirepo` Renombra el directorio al clonar, con el nombre ``
75 |
76 | ## Comprobar estado de los archivos
77 |
78 | * `$ git status` Muestra los archivos añadidos o eliminados
79 | * `$ git diff` Muestra las líneas añadidas y eliminadas, muestra los cambios que no han sido preparados.
80 |
81 |
82 | ### Saltar el área de preparación
83 |
84 | * `$ git commit -a -m 'added new benchmarks'` Prepara todos los archivos, sin necesidad de agregar el comando git add
85 |
86 | ## :coffee: Eliminando archivos
87 |
88 | * `$ git rm ` Elimina el archivo del staging area
89 |
90 | ## Moviendo archivos
91 |
92 | * `$ git mv ` Renombra los archivos
93 |
94 | ## :coffee: Viendo el histórico de confirmaciones
95 |
96 | * `$ git log`
97 | * `$ git log -p` Muestra las diferencias introducidas en cada confirmación
98 | * `$ git log -2` Muestra únicamente las dos últimas entradas del histórico
99 | * `$ git log --stat` Muestra las estadísticas de cada confirmación
100 | * `$ git log --oneline` Muesta información de un commit en una línea
101 |
102 | ### Modificando la última confirmación
103 |
104 | * `$ git commit --amend` Reescribe el mensaje y los archivos para realizar la confirmación
105 |
106 | ### Deshaciendo preparación de un archivo
107 |
108 | * `$ git reset HEAD ` Saca el archivo del staging area
109 |
110 | ### Deshaciendo la modificación de un archivo
111 |
112 | * `$ git checkout -- ` Elimina las modificaciones que le hayas hecho al archivo
113 |
114 |
115 |
116 | ## :coffee: Trabajando con repositorios remotos
117 |
118 | ### Mostrar repositorios remotos
119 |
120 | * `$ git remote` Obtiene el nombre del repositorio remoto
121 | * `$ git remote -v` Obtiene la url del repositorio
122 |
123 | ### Añadiendo repositorios remotos
124 |
125 | * `$ git remote add [nombre] [url]`
126 |
127 | ### Recibiendo repositorios remotos
128 |
129 | * `$ git fetch [remote-name]` Recupera todos los datos del proyecto remoto que no tengas todavía pero no une las rama remota con la local.
130 | * `$ git pull` Trae los datos del proyecto remoto y lo une a las rama del repositorio local
131 |
132 | ### Enviar datos a repositorio remoto
133 |
134 | * `$ git push [nombre-remoto][nombre-rama]`
135 |
136 | **Importante**
137 | Este comando funciona únicamente si has clonado de un servidor en el que tienes permiso de escritura, y nadie ha enviado información mientras tanto. Si tú y otra persona clonais a la vez, y él envía su información y luego envías tú la tuya, tu envío será rechazado. Tendrás que bajarte primero su trabajo e incorporarlo en el tuyo para que se te permita hacer un envío. Véase el Capítulo 3 para ver en detalle cómo enviar a servidores remotos
138 |
139 | ### Inspeccionando un repositorio remoto
140 |
141 | * `$ git remote show [nombre]`
142 |
143 | ### Renombrando repositorios remotos
144 |
145 | * `$ git remote rename [from] [to]`
146 |
147 |
148 | ## :coffee: Etiquetas
149 | Especifica puntos especificos importantes en la historio, por ejemplo vesiones.
150 |
151 | ### Listar etiquetas
152 |
153 | * `$ git tag`
154 |
155 | * `$ git tag -l 'v1.4.2.*'` Etiquetas por un patron en particular
156 |
157 | ### Crear etiquetas anotadas
158 |
159 | * `$ git tag -a v1.4 -m 'my version 1.4'`
160 |
161 | Esto muestra la información del autor de la etiqueta, la fecha en la que la confirmación fue etiquetada, y # el mensaje de anotación antes de mostrar la información de la confirmación.
162 |
163 | ### Crear etiquetas firmadas
164 |
165 | * `$ git tag -s v1.5 -m 'my signed 1.5 tag'`
166 | Crea una etiqueta firmada con GPG, siempre que tengas una clave privada
167 |
168 |
169 | ### Crear etiquetas ligeras
170 |
171 | * `$ git tag v1.4-lw` Este tipo de etiqueta no almacena información extra
172 |
173 | ### Verificar etiquetas firmadas
174 |
175 | * `git tag -v [tag-name]`
176 |
177 |
178 | ### Etiquetar commit
179 |
180 | * `$ git tag -a v1.2 -m 'version 1.2' 9fceb02` Agregar una etiqueta a un commit
181 |
182 | ### Editar etiquetas
183 |
184 | * `$ git tag -f -m ""` Creará una nueva etiqueta con el mismo nombre sobreescribiendo la original
185 |
186 | * `$ git tag --force [tag name] [commit id]` Edita una etiqueta a un commit específico.
187 |
188 | * `$ git push origin --force --tags` En caso de que haya subido ya la etiqueta debe forzar envío
189 |
190 | ### Enviar etiquetas
191 |
192 | * `git push origin [tagname]`
193 |
194 | Git no manda las etiquetas al servidor cuando de hace un push, para ello se debe hacer un push al igual como una rama pero con el nombre de la etiqueta
195 |
196 | * `$ git push origin --tags` Envía varias etiquetas a la vez
197 |
198 |
199 | ## :coffee: Alias en Git
200 |
201 | Git permite colocar alias a los comandos que vienen por defecto
202 |
203 | * `$ git config --global alias.co checkout`
204 | * `$ git config --global alias.br branch`
205 | * `$ git config --global alias.ci commit`
206 | * `$ git config --global alias.st status`
207 |
208 | * `$ git config --global alias.unstage 'reset HEAD --' `
209 | * `$ git config --global alias.last 'log -1 HEAD'`
210 |
211 |
212 | ## :coffee: Branch
213 |
214 | * `$ git branch` Lista ramas del proyecto local
215 |
216 | * `$ git branch name-branch` Crear ramas
217 |
218 | * `$ git checkout -b name-branch` Crear ramas y cambiar a la rama creada
219 |
220 | * `$ git pull origin name-branch` Traer ramas remotas
221 |
222 | * `$ git push origin --delete name-branch` Eliminar ramas remotas
223 |
224 |
225 | ## :coffee: Creación de primeros archivos para repositorio
226 |
227 | Crear un nuevo repositorio en la línea de comandos
228 |
229 | * `$ echo "# repositorio" >> README.md`
230 | * `$ git init`
231 | * `$ git add README.md`
232 | * `$ git commit -m "first commit"`
233 | * `$ git remote add origin git@github.com:user/repositorio.git`
234 | * `$ git push -u origin master`
235 |
236 |
237 | Enviar un repositorio exitente desde la línea de comandos
238 |
239 | * `$ git remote add origin git@github.com:user/repositorio.git`
240 | * `$ git push -u origin master`
241 |
242 |
243 |
244 | En el caso de crear submodulos que luego quiere agregarlos al repositorio principal podemos usar el comando
245 |
246 | - `$ git rm --cached ` Elimina las secciones submodule en el archivo *.git/config*
247 |
--------------------------------------------------------------------------------
/git_cmd.txt:
--------------------------------------------------------------------------------
1 | COMANDOS GIT
2 |
3 | * Identidad
4 | $ git config --global user.name "John Doe"
5 | $ git config --global user.email johndoe@example.com
6 |
7 | * Editor por defecto
8 | $ git config --global core.editor emacs
9 |
10 | * Herramienta de diferencias
11 | # Se usa para resolver conflictos
12 | $ git config --global merge.tool vimdiff
13 |
14 | * Comprobar configuración
15 | $ git config --list
16 |
17 | * Obtener ayuda
18 | $ git help
19 | $ git --help
20 | $ man git-
21 |
22 | /*********** Comandos Básicos *************/
23 |
24 | * Iniciar un repositorio en un directorio existente
25 | $ git init
26 |
27 | $ git add *.c
28 | $ git add README
29 | $ git commit –m 'versión inicial del proyecto'
30 | $ git commit # Abre una ventana en Vim para escribir el mensaje de la confirmación del cambio
31 |
32 | /***** Eliminar Commit *****/
33 | $ git reset --soft HEAD~1 #Elimina el commit más reciente, guardando el trabajo realizado
34 | $ git reset --hard HEAD~1 # Elimina el commit más reciente destruyendo el trabajo que has hecho
35 |
36 | /** Cambiar el ultimo commit enviado a GitHub **/
37 | Si ya he enviado ina confirmación y deseo cambiarlo, debo forzar el envio del commit cambiado con el comando. Recuerde que ya debe haber cambiado el commit localmente
38 |
39 | $ git push --force origin master
40 |
41 | * Cambiar mensaje de commit antiguos
42 |
43 | git rebase -i HEAD~3 # Displays a list of the last 3 commits on the current branch
44 |
45 | pick e499d89 Delete CNAME
46 | reword 0c39034 Better README
47 |
48 | Luego reemplazar pick con reword antes de cada mensaje del commit que desee cambiar y guardar los cambios.
49 | Finalmente forzar el envío
50 |
51 | git push --force
52 |
53 | /**** Clonar un Repositorio ****/
54 | $ git clone [url]
55 | $ git clone git://github.com/schacon/grit.git mygrit # Renombra el directorio al clonar
56 |
57 | * Comprobar estado de los archivos
58 | $ git status # Mustra los archivos añadidos o eliminados
59 | $ git diff # Muestra las líneas añadidas y eliminadas, muestra los cambios que no han sido preparados.
60 |
61 | /**** Saltar el área de preparación ****/
62 | $ git commit -a -m 'added new benchmarks' # Prepara todos los archivos, sin necesidad
63 | de agregar el comando git add
64 |
65 | * Eliminando archivos
66 | $ git rm # Elimina el archivo del staging area
67 |
68 | * Moviendo archivos
69 | $ git mv # Renombra los archivos
70 |
71 | * Viendo el histórico de confirmaciones
72 | $ git log
73 | $ git log -p # Muestra las diferencias introducidas en cada confirmación
74 | $ git log -2 # Muestra únicamente las dos últimas entradas del histórico
75 | $ git log --stat # Muestra las estadísticas de cada confirmación
76 | $ git log --oneline # Muesta información de un commit en una línea
77 |
78 | * Modificando la última confirmación
79 | $ git commit --amend # Reescribe el mensaje y los archivos para realizar la confirmación
80 |
81 | * Deshaciendo preparación de un archivo
82 | $ git reset HEAD # Saca el archivo del staging area
83 |
84 |
85 | * Deshaciendo la modificación de un archivo
86 | $ git checkout -- # Elimina las modificaciones que le hayas hecho al archivo
87 |
88 |
89 | /******** Trabajando con repositorios remotos *********/
90 |
91 | * Mostrar repositorios remotos
92 | $ git remote # Obtiene el nombre del repositorio remoto
93 | $ git remote -v # Obtiene la url del repositorio
94 |
95 | * Añadiendo repositorios remotos
96 | $ git remote add [nombre] [url]
97 |
98 | * Recibiendo repositorios remotos
99 | $ git fetch [remote-name] # Recupera todos los datos del proyecto remoto que no tengas todavía.
100 | pero no une las rama remota con la local
101 | $ git pull # Trae los datos del proyecto remoto y lo une a las rama del repositorio local
102 |
103 |
104 | * Enviar datos a repositorio remoto
105 | $ git push [nombre-remoto][nombre-rama]
106 | # Importante
107 | Este comando funciona únicamente si has clonado de un servidor en el que tienes permiso de escritura, y nadie ha enviado información mientras tanto. Si tú y otra persona clonais a la vez, y él envía su información y luego envías tú la tuya, tu envío será rechazado. Tendrás que bajarte primero su trabajo e incorporarlo en el tuyo para que se te permita hacer un envío. Véase el Capítulo 3 para ver en detalle cómo enviar a servidores remotos
108 |
109 |
110 | * Inspeccionando un repositorio remoto
111 | $ git remote show [nombre]
112 |
113 | * Renombrando repositorios remotos
114 | $ git remote rename [from] [to]
115 |
116 |
117 | /********** Etiquetas *********/
118 | Especifica puntos especificos importantes en la historio, por ejemplo vesiones.
119 |
120 | * Listar etiquetas
121 | $ git tag
122 | $ git tag -l 'v1.4.2.*' # Busca etiquetas por un patron en particular
123 |
124 | * Crear etiquetas anotadas
125 | $ git tag -a v1.4 -m 'my version 1.4'
126 | # Esto muestra la información del autor de la etiqueta, la fecha en la que la confirmación fue etiquetada, y # el mensaje de anotación antes de mostrar la información de la confirmación.
127 |
128 | *Crear etiquetas firmadas
129 | $ git tag -s v1.5 -m 'my signed 1.5 tag'
130 | # Crea una etiqueta firmada con GPG, siempre que tengas una clave privada
131 |
132 | * Crear etiquetas ligeras
133 | $ git tag v1.4-lw # Este tipo de etiqueta no almacena información extra
134 |
135 | * Verificar etiquetas firmadas
136 | git tag -v [tag-name]
137 |
138 |
139 | * Etiquetar commit
140 | $ git tag -a v1.2 -m 'version 1.2' 9fceb02 # Agregar una etiqueta a un commit
141 |
142 | * Editar etiquetas
143 | $ git tag -f -m ""
144 | # Creará una nueva etiqueta con el mismo nombre sobreescribiendo la original
145 |
146 | # Si quires editar una etiqueta a un commit específico, Git permite hacerlo
147 | $ git tag --force [tag name] [commit id]
148 |
149 | En caso de que haya subido ya la etiqueta debe forzar envío
150 | $ git push origin --force --tags
151 |
152 | * Enviar etiquetas
153 | git push origin [tagname] # Git no manda las etiquetas al servidor cuando de hace un push, para ello
154 | se debe hacer un push al igual como una rama pero con el nombre de la etiqueta
155 |
156 | $ git push origin --tags # Envía varias etiquetas a la vez
157 |
158 |
159 | /******************* Alias en Git **********************/
160 | Git permite colocar alias a los comandos que vienen por defecto
161 | $ git config --global alias.co checkout
162 | $ git config --global alias.br branch
163 | $ git config --global alias.ci commit
164 | $ git config --global alias.st status
165 |
166 | $ git config --global alias.unstage 'reset HEAD --'
167 | $ git config --global alias.last 'log -1 HEAD'
168 |
169 |
170 | /******************** Branch ***************************/
171 |
172 | * Listar ramas del proyecto local
173 | $ git branch
174 |
175 | * Crear ramas
176 | $ git branch name-branch
177 |
178 | * Crear ramas y cambiar a la rama creada
179 | $ git checkout -b name-branch
180 |
181 | * Traer ramas remotas
182 | $ git pull origin name-branch
183 |
184 | * Eliminar ramas remotas
185 | $ git push origin --delete name-branch
186 |
187 |
188 | /***************** Creación de primeros archivos para repositorio ***********************/
189 |
190 | * create a new repository on the command line
191 |
192 | $ echo "# Emproyect" >> README.md
193 | $ git init
194 | $ git add README.md
195 | $ git commit -m "first commit"
196 | $ git remote add origin git@github.com:ideascompany/Emproyect.git
197 | $ git push -u origin master
198 |
199 | * push an existing repository from the command line
200 |
201 | $ git remote add origin git@github.com:ideascompany/Emproyect.git
202 | $ git push -u origin master
203 |
204 |
205 |
--------------------------------------------------------------------------------
/img/algoritmo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jocode/Getting-Started/5edf25376e68940e58f9f6adf9e061f749006158/img/algoritmo.png
--------------------------------------------------------------------------------
/img/instalacion_raspberry.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jocode/Getting-Started/5edf25376e68940e58f9f6adf9e061f749006158/img/instalacion_raspberry.png
--------------------------------------------------------------------------------
/img/programacion.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jocode/Getting-Started/5edf25376e68940e58f9f6adf9e061f749006158/img/programacion.jpg
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Una breve introducción a GitHub
6 |
7 |
8 |
9 |
10 |
Introducción a Git & GitHub
11 |
12 |
13 |
Temario
14 |
15 |
16 |
Qué es Git?
17 |
Para qué Sirve Git?
18 |
Quién creo Git?
19 |
Que empresas usan Git?
20 |
Catálogo de palabras en Git
21 |
22 |
init
23 |
commit
24 |
branch
25 |
merge
26 |
checkout
27 |
reset
28 |
remote
29 |
push
30 |
pull
31 |
32 |
Clientes de Git con Interfaz Gráfica
33 |
Trabajando con la terminal | Comandos para Git
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/instalar-lamp.md:
--------------------------------------------------------------------------------
1 | # Instalar Lamp
2 |
3 | > **Importante**
4 | > El símbolo `^` el linux, significa `ctrl`, por ejemplo si aparece `^+W` es la tecla `ctrl+w`
5 |
6 | A continuación se configura el servidor apache con los motores de base de datos MySQL, postgress y sqlite3
7 |
8 | Primero instalaremos a instalar apache2, php7, mysql 5.6 y algunas librerías
9 |
10 | * `sudo apt-get install apache2 mysql-server php libapache2-mod-php php-mcrypt php-mysql php-cli mcrypt php-pear`
11 |
12 | Si por alguna razón el paquete *php-mcrypt* no está disponible, eliminarlo del comando
13 |
14 | Otras librerías importantes
15 |
16 | * `sudo apt-get install php-gd php-intl php-readline`
17 |
18 | El parámetro *php-gd* para trabajar con imágenes como los captcha
19 |
20 | Instalar mbstring
21 |
22 | * `sudo apt-get install php-mbstring php7.0-mbstring php-gettext libapache2-mod-php7.0`
23 |
24 | Habilitamos el mcrypt y mbstring
25 |
26 | * `sudo phpenmod mcrypt`
27 | * `sudo phpenmod mbstring`
28 |
29 | Habilitar el mod_rewrite para trabajar con urls enriquecidas
30 |
31 | * `sudo a2enmod rewrite`
32 |
33 |
34 | ## Reiniciar el servidor Apache
35 |
36 | Para reiniciar el servidor *apache* ejecutamos el siguiente comando.
37 |
38 | * `service apache2 restart`
39 |
40 | Para mysql, también podemos ejecutar ese comando para mysql.
41 |
42 | - **start** Inicia el servicio
43 | - **stop** Detiene el servicio que le indiquemos
44 |
45 |
46 | ### Instalar sqlite3
47 |
48 | Para instalar sqlite y el respectivo soporte para php, lo hacemos mediante el siguiente comando
49 |
50 | - `sudo apt-get install sqlite php-sqlite3`
51 |
52 | ### Instalar Postgresql
53 |
54 | Para instalar postgresql, su respectivo soporte para php y la herramienta pgadmin
55 |
56 | `sudo apt-get install postgresql postgresql-contrib pgadmin3 pgagent php-pgsql`
57 |
58 |
59 | ### Instalar soporte de MySQL para python
60 |
61 | Para instalar el soporte de MySQL para python, lo instalamos mediante el siguiente comando.
62 |
63 | - `sudo apt-get install python-mysqldb`
64 |
65 |
66 | ### Cambiar la carpeta de trabajo por defecto `/var/www/html`
67 |
68 | Si deseamos cambiar la carpeta de trabajo por defecto que se encuentra en `/var/www/html` debemos modificar el archivo de configuración de apache
69 |
70 | * `sudo nano /etc/apache2/apache2.conf`
71 |
72 | Allí buscamos la directiva *Directory* y configuramos la carpeta que deseemos
73 |
74 | ```xml
75 |
76 | Options indexes FollowSymLinks
77 | AllowOverride All
78 | Require all granted
79 |
80 | ```
81 |
82 | Luego se hacer esta modificación, reiniciamos apache
83 |
84 | * `sudo service apache2 restart`
85 |
86 | Es importante que en *AllowOverride* esté en All para permitir las urls amigables
87 |
88 | Luego modificamos el archivo de sitios
89 |
90 | * `sudo nano /etc/apache2/sites-enabled/000-default.conf`
91 |
92 | Buscamos la línea de `DocumentRoot`, la comentamos y agregamos la nuestra
93 |
94 | ```
95 | #DocumentRoot /var/www/html
96 | DocumentRoot /home/user/public_html
97 | ```
98 |
99 | Una vez terminada la configuración p después de cualquier cambio es importante reiniciar el servidor.
100 |
101 | * `sudo service apache2 restart`
102 |
103 | ## Dar permisos de escritura
104 |
105 | Para permisos de escritura en linux, ejecutamos el siguiente comando en consola.
106 |
107 | * `sudo chmod +w -R carpeta/`
108 |
109 | El parámetro **+w** da permisos se escritura para la carpeta
110 |
111 | El parámetro **-R** le da permiso de escritura a todas las carpetas contenidas en la carpeta raíz (Que le hemos especificado)
112 |
113 |
114 | ## Ingresar a mysql por consola
115 |
116 | Para ingresar a mysql por consola, podemos usar el comando
117 |
118 | * `mysql -u root -p`
119 |
120 | *root* es el nombre de usuario, y con *-p* le indicamos la contraseña
121 |
122 | ## Instalar phpMyAdmin
123 |
124 | 1. Instalarlo desde los repositorios
125 |
126 | * `sudo apt-get install phpmyadmin`
127 |
128 | Los paquetes recomendados
129 | - `php-gd`
130 | - `php-tcpdf`
131 |
132 | * `sudo apt-get install php-gd php-tcpdf`
133 |
134 | 2. Configurar apache para que tome la ruta, para eso debemos abrir el archivo `/etc/apache2/apache2.conf` y agregamos las siguientes líneas
135 |
136 | * `sudo nano /etc/apache2/apache2.conf`
137 |
138 | O abrir el archivo con sublime
139 |
140 | * `sudo subl /etc/apache2/apache2.conf`
141 |
142 | ```
143 | # phpMyAdmin Configuration
144 | Include /etc/phpmyadmin/apache.conf
145 | ```
146 |
147 | 3. Guardar el archivo y reiniciar apache
148 |
149 | * `sudo service apache2 restart`
150 | * `sudo service mysql start`
151 |
152 |
153 | Después de eso se podrá ingresar desd *htt//localhoost/phpmyadmin*
154 |
155 | Para instalar LAMPP se puede usar el siguiente comando
156 |
157 | * `sudo apt-get install mysql-server-5.6 php5 apache2 php5-mysql`
158 |
159 |
160 | > Si por algún motivo, durante la instalación aparece el siguiente error `Access denied for user 'root'@'localhost'` podemos solucionarlo siguiendo los pasos en este enlace:
161 |
162 | - [Access denied for user 'root'@'localhost'](https://stackoverflow.com/questions/39281594/error-1698-28000-access-denied-for-user-rootlocalhost)
163 | - [Habilitar la contraseña para el root en Linux](http://www.conchaalviz.com/blog/como-habilitar-contrasena-para-el-root-de-mysql-en-linux/)
164 |
165 | Por defecto, mysql no permite dejar espacio en blanco para la contraseña.
166 |
167 | Estos errores, pueden arreglarse, al crear la contraseña e instalar los paquetes recomendados. Con eso, se garantiza una buena instalación del gestor de base de datos.
168 |
169 |
170 |
171 | ## Ver los errores de Apache
172 |
173 | Para ver los errores de apache, es necesario ir a la ruta `/var/log/apache2/error.log`. En este archivo, se registran todos los errores que hayan en el servidor y en los proyectos qe estemos desarrolando.
174 |
175 | En caso de cualquier problema, puede ser por la versión de php, al incluir nuevas reglas para la programación. Para eso, copiar el error tal cual y buscarlo, porque los errores pueden ser aleatorios.
176 |
177 | ## Ver el valor de `sql_mode` de MySQL
178 |
179 | Esta configuración de mysql, en algunas ocasiones no deja ingresar valores vacíos en los autoincrementables
180 |
181 | Para ver la configuración, podemos ingresar el siguiente comando
182 |
183 | * `mysql -u user -p`
184 |
185 | Ingresar el usuario, reemplazar *user* por el que tenga y escribir la contraseña
186 |
187 | * `mysql> SELECT @@sql_mode;`
188 |
189 | Luego que esté dentro, vemos la configuración de este parámetro. En algunos casos puede ser este por defecto.
190 |
191 | `ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION`
192 |
193 |
194 | Para cambiar este parámetro y que nos permite ingresar datos vacíos como `' '` debemos cambiar el **sql_mode**, y lo podemos hacer de la siguiente manera
195 |
196 |
197 | Si en la consola, ejecutamos la consulta
198 |
199 | * `SELECT @@GLOBAL.sql_mode;`
200 |
201 | Nos arrojara esto:
202 | `ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION`
203 |
204 | Podemos cambiarlos a
205 |
206 | * `SET GLOBAL sql_mode = '';`
207 |
208 | De esta manera, nos dejar+a ingresar valores vacíos en los campos, pero no es lo más recomendable.
209 |
210 |
211 | *Ver la información* https://stackoverflow.com/questions/35037288/incorrect-decimal-integer-value-mysql#35037657
212 |
213 | Sin embargo, con esta configuración debemos cada vez que se reinicie el servidor, se reestablecen los valores. Para solucionar esto, debemos dejar configurado este desde la configuración de mysql.
214 |
215 | Este archivo de configuración lo encontramos en **`/etc/mysql/my.cnf`**, en la sección *mysqlid*
216 |
217 | Luego que estemos en este archivo, debemos colocar la siguiente sentencia, para indicar la configuración.
218 |
219 | ```sql
220 | [mysqld]
221 | sql-mode=""
222 | ```
223 |
224 | Hay que estar seguros que se tenga **sql-mode** y no guiones bajos y sin comillas dobles en versiones mysql 5.7.8 or mayores.
225 |
226 | *Para más información ver* [Configuración global de sql_mode en mysql](https://stackoverflow.com/questions/2317650/setting-global-sql-mode-in-mysql#26104070)
227 |
228 |
229 | ## :start: Issues en instalación de LAMP on WSL
230 |
231 | Para instalar LAMP en WSL, se usa el comando
232 |
233 | - **`sudo apt-get install lamp-server^`**
234 |
235 | Esto nos instalará todos los servicios necesarios.
236 |
237 | Si por alguna razón, al intentar abrir mysql o apache desde la terminal, da error. Se puede usar la siguiente configuración.
238 |
239 | - **`sudo mysql`** Si no funciona este comando, usar
240 | - **`sudo service mysql start`**
241 | - **`sudo /etc/init.d/mysql start`**
242 |
243 | - **`service apache2 start`** Si no funciona este comando usar el siguiente
244 | - **`sudo service apache2 start`**
245 | - **`sudo /etc/init.d/apache2 start`**
246 |
247 | _**Refs**_
248 |
249 | - [Ubuntu 20.04 set mysql phpmyadmin root password](https://stackoverflow.com/questions/61430362/ubuntu-20-04-set-mysql-phpmyadmin-root-password)
250 | - [Cómo instalar la pila Linux, Apache, MySQL y PHP (LAMP) en Ubuntu 20.04](https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-on-ubuntu-20-04-es)
251 |
252 |
253 | ## Cambiar privilegios en MySQL
254 |
255 | - **`ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';`**
256 |
257 | Cambiar requetimientos para la contraseña
258 |
259 | - **`SHOW VARIABLES LIKE 'validate_password%';`**
260 | - **`SET GLOBAL validate_password.length = 6;`**
261 | - **`SET GLOBAL validate_password.policy=LOW;`**
262 |
263 |
264 | ## Comandos en VIM
265 |
266 | Presione la tecla `Esc` para ingresar al **"Modo normal"**. Luego puede escribir `:` para ingresar al **"Modo de línea de comandos"**. Aparecerán dos puntos (`:`) en la parte inferior de la pantalla y puede escribir uno de los siguientes comandos. Para ejecutar un comando, presione la tecla `Enter`.
267 |
268 | - `:q` Para salir (Abreviatura para `:quit`)
269 | - `:q!` salir sin guardar (abreviatura de `:quit!`)
270 | - `:wq` para escribir y salir
271 | - `:wq!` para escribir y salir incluso si el archivo solo tiene permiso de lectura (si el archivo no tiene permiso de escritura: forzar escritura)
272 | - `:x` para escribir y salir (similar a `:wq`, pero solo escriba si hay cambios)
273 | - `:qa` para salir de todo (abreviatura de `:quitall`)
274 | - `:cq` para salir sin guardar y hacer que Vim devuelva un error distinto de cero (es decir, salir con error)
275 |
276 | Vim tiene una amplia ayuda, a la que puede acceder con el comando **`:help`**, donde puede encontrar respuestas a todas sus preguntas y un tutorial para principiantes.
--------------------------------------------------------------------------------
/nota.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jocode/Getting-Started/5edf25376e68940e58f9f6adf9e061f749006158/nota.txt
--------------------------------------------------------------------------------
/python/aritmetico.py:
--------------------------------------------------------------------------------
1 | print("Ingresa el primer valor")
2 | num1= int(input())
3 | print("Ingresa el segundo valor")
4 | num2= int(input())
5 |
6 | suma = num1+num2
7 | resta = num1-num2
8 | multiplicacion = num1*num2
9 | division = num1/num2
10 |
11 | print("Suma: "+str(suma))
12 | print("Resta: "+str(resta))
13 | print("Multiplicación: "+str(multiplicacion))
14 | print("División: "+str(division))
--------------------------------------------------------------------------------
/python/arreglos.py:
--------------------------------------------------------------------------------
1 | numbers = [1,2,3,4,5]
2 | # Position 0 1 2 3 4
3 |
4 | #Imprimirá '1'
5 | print(numbers[0])
--------------------------------------------------------------------------------
/python/comparacion.py:
--------------------------------------------------------------------------------
1 | print("Ingresa su edad")
2 | edad = int(input())
3 |
4 | if (edad > 18):
5 | print("Eres mayor de edad")
6 | elif (edad == 18):
7 | print("Tienes justo la edad de mayor de edad")
8 | else:
9 | print("Eres menor de edad")
10 |
--------------------------------------------------------------------------------
/python/for.py:
--------------------------------------------------------------------------------
1 | numbers = [1,2,3,4,5,]
2 | nombre = "Johan Camilo"
3 |
4 | for elemento in nombre:
5 | print(elemento)
--------------------------------------------------------------------------------
/python/funcion.py:
--------------------------------------------------------------------------------
1 | def saludar():
2 | print("Hola, bienvenido al mundo de la programación")
3 |
4 | def saludo(nombre):
5 | return "Hola {}, bienvenido".format(nombre)
6 |
7 | print("Ingresa tu nombre")
8 | nombre = input()
9 | print(saludo(nombre))
--------------------------------------------------------------------------------
/python/holamundo.py:
--------------------------------------------------------------------------------
1 | print("Bienvenido, ingresa tu nombre")
2 | saludo = "Hola: "
3 | nombre = input()
4 | print(saludo + nombre)
--------------------------------------------------------------------------------
/python/readme.md:
--------------------------------------------------------------------------------
1 | # Python
2 |
3 | Python es un lenguaje de programación interpretado cuya filosofía hace hincapié en una sintaxis que favorezca un código legible.
4 |
5 | Se trata de un lenguaje de programación multiparadigma, ya que soporta orientación a objetos, programación imperativa y, en menor medida, programación funcional. Es un lenguaje interpretado, usa tipado dinámico y es multiplataforma.
6 |
7 | Python a diferencia de otros lenguajes de programación no usa llaves, en lugar de ellas,usa la identación para reconocer los bloques de código. Por esta razón, y al no usar punto y coma al final de cada sentencia es uno de los lenguajes más legibles y fáciles de codificar.
8 |
9 | 
10 |
11 | ## Primer hola mundo en python
12 |
13 | Para hacer nuestro primero `hola mundo` en python, usamos la función **print();**
14 | ```python
15 | print("Hola mundo")
16 | ```
17 |
18 | Si creamos un archivo con esta línea de código, debemos ubicarnos en la carpeta raíz y a partir de ella ejecutar el comando python, indicando luego el archivo que queremos ejecutar. Por ejemplo
19 |
20 | ``python holamundo.py`
21 |
22 | *La extensión de python `.py`*
23 |
24 | En python los comentarios se pueden poner de dos formas:
25 |
26 | - Escribiendo el símbolo almoadilla (`#`) delante de la línea de texto donde está el comentario.
27 | - Escribiendo triple comilla doble (`"""`) al principio y al final del comentario (que puede ocupar más de una línea).
28 |
29 | ```python
30 | # Este es un comentario de una sola línea
31 |
32 | """ Este es un comentario multilinea. ""
33 | ```
34 |
35 | ## ¿Cómo funciona una variable?
36 |
37 | las variables son espacios en memoria, son como cajas donde podemos guardar valores de un sólo tipo de dato.
38 |
39 | Hay otro tipo de variables que son llamadas **constantes** este tipo de variable no cambia su valor durante la ejecución del programa.
40 |
41 | El signo __+__ funciona como operador de concatenación de 2 variables de tipo texto. Concatenar, quiere decir unir dos textos en uno solo.
42 |
43 | ## Lectura de Datos
44 |
45 | Para leer datos por consola en python, debemos usar la función **input()** precedida de una variable donde queremos que se almacene el valor que digitemos.
46 |
47 | ```python
48 | nombre = input()
49 | ```
50 |
51 | ## Operadores Aritméticos
52 |
53 | Son parte esencial de la programación. Éstos operadores aritméticos son:
54 | - `+` Suma o concatenación
55 | - `-` Resta
56 | - `/` Division
57 | - `*` Multiplicación
58 | - `%` Módulo (Resto o residio de la división)
59 |
60 | Con la función **int()** convertimos una cadena de texto u otro valor a tipo de dato entero.
61 | `int(input())` De esta forma estammos convirtiendo el texto a un número entero
62 |
63 | La función **str()** convierte un tipo de dato a cadena de texto (string)
64 |
65 |
66 | ## Operadores de comparación
67 |
68 | Estos operadores, no permiten comparar 2 valores. Los operadores de comparación son:
69 | - `>` Mayor que
70 | - `<` Menor que
71 | - `>=` Mayor o igual que
72 | - `<=` Menor o igual que
73 | - `==` Igual a
74 | - `===` Idéntico (Quiere decir que tiene el mismo valor y tipo de dato)
75 |
76 | Los operadores de comparación son muy usados junto con las estructuras de control como los condicionales. Un ejemplo de operadores de comparación con condicionales es el siguiente:
77 |
78 | ```python
79 | print("Ingresa su edad")
80 | edad = int(input())
81 |
82 | if (edad > 18):
83 | print("Eres mayor de edad")
84 | elif (edad == 18):
85 | print("Tienes justo la edad de mayor de edad")
86 | else:
87 | print("Eres menor de edad")
88 | ```
89 |
90 | ## Casting (Conversión de tipos de datos)
91 |
92 | Muchas veces para poder trabajar con la información, es necesario que sean del tipo de dato necesario para hacer comparaciones, sumas y demás.
93 |
94 | Por defecto al usar la función `input()`, estamos esperando que el usuario digite un valor por teclado, entonces python lo reconocerá como texto.
95 |
96 | El Casteo o casting, se le conoce al proceso de conversión de un tipo de dato a otro. Algunas funciones para conversión de tipos son:
97 | - **int()** Convierte de string a entero
98 | - **float()** Convierte de string o entero a decimal
99 | - **str()** Convierte un número a decimal
100 |
101 | ## Arreglos
102 |
103 | Son variables que pueden almacenar más de un valor, es como guardar muchas cosas en una sola caja.
104 |
105 | Los arreglos están formados por una colleción de datos, sean números o cadenas de caracteres, pero siempre del mismo tipo de dato.
106 |
107 | Para declarar un arreglo se colocan dentro de corchetes.
108 | ```python
109 | numbers = [1,2,3,4,5]
110 |
111 | ''' Imprime 1
112 | print(numbers[0])
113 | ```
114 |
115 | Para acceder a un valor del arreglo, debemos acceder a la posición en el que se encuentre. La posición inicia desde 0.
116 |
117 | ## Funciones
118 |
119 | Las funciones están definidas por un conjunto de lineas de código, las cuales realizan una función específica. Las funciones nos permiten descomponer los problemas, en tareas pequeñas.
120 |
121 | Para declarar una función, debemos usar la palabra reservada **def** seguido el nombre de la función con *()* al final de la palabra
122 |
123 | ```python
124 | # Definicion de la función
125 | def saludar():
126 | print("Hola, bienvenido al mundo de la programación")
127 |
128 | # LLamada a la función
129 | saludar()
130 | ```
131 |
132 | ### Los argumentos
133 |
134 | Los argumentos nos permiten recibir valores del exterior para usarlas en las funciones.
135 |
136 | ```python
137 | def saludo(nombre):
138 | return "Hola {}, bienvenido".format(nombre)
139 |
140 | print("Ingresa tu nombre")
141 | nombre = input()
142 | print(saludo(nombre))
143 | ```
144 |
145 | ## Los ciclos
146 |
147 | Son bloques de código que realizan tareas repetitivas, pueden ejecutar acciones cierto número de veces mientras una condición se cumpla
148 |
149 | ### Ciclo while
150 |
151 | Repite un bloque de código mientras se cumpla una condición.
152 | ```python
153 | rep = 0
154 | while rep <= 3:
155 | print("Mensaje")
156 | rep+=1
157 |
158 | print("El ciclo se terminó")
159 | ```
160 |
161 | ### Ciclo For
162 |
163 | Repite un bloque de código un determinado número de veces, dependiendo de la condición que tengamos.
164 |
165 | ```python
166 | numbers = [1,2,3,4,5,]
167 | nombre = "Johan Camilo"
168 |
169 | # Imprime cada letra de la variable nombre en una nueva línea
170 | for elemento in nombre:
171 | print(elemento)
172 | ```
173 |
174 | En python, podemos usar el ciclo for, para imprimir items de un arreglo o cadenas de caracteres como en el ejemplo anterior
--------------------------------------------------------------------------------
/python/while.py:
--------------------------------------------------------------------------------
1 | rep = 0
2 | while rep <= 3:
3 | print("Mensaje")
4 | rep+=1
5 |
6 | print("El ciclo se terminó")
7 |
--------------------------------------------------------------------------------
/raspberry_optimization.md:
--------------------------------------------------------------------------------
1 | # Optimizando OpenCV en la Raspberry Pi
2 |
3 | :octocat: https://github.com/opencv/opencv_contrib/releases
4 |
5 | - :star: [Install OpenCV 4 on your Raspberry Pi](https://www.pyimagesearch.com/2018/09/26/install-opencv-4-on-your-raspberry-pi/)
6 | - :star: [Optimizing OpenCV on the Raspberry Pi](https://www.pyimagesearch.com/2017/10/09/optimizing-opencv-on-the-raspberry-pi/)
7 | - [Raspbian Stretch: Install OpenCV 3 + Python on your Raspberry Pi](https://www.pyimagesearch.com/2017/09/04/raspbian-stretch-install-opencv-3-python-on-your-raspberry-pi/)
8 | - [Building a Raspberry Pi security camera with OpenCV](https://www.pyimagesearch.com/2019/03/25/building-a-raspberry-pi-security-camera-with-opencv/)
9 | - [Home surveillance and motion detection with the Raspberry Pi, Python, OpenCV, and Dropbox](https://www.pyimagesearch.com/2015/06/01/home-surveillance-and-motion-detection-with-the-raspberry-pi-python-and-opencv/)
10 | - [Tutorial de python Virtualenv](https://rukbottoland.com/blog/tutorial-de-python-virtualenv/)
11 |
12 | # NEON and FVPV3
13 |
14 | ARM NEON es una extensión de arquitectura de optimización para procesadores ARM. Fue diseñado por los ingenieros de ARM específicamente para un procesamiento de video, procesamiento de imágenes, reconocimiento de voz y aprendizaje automático más rápido. Esta optimización admite datos múltiples de instrucción única (SIMD) (a diferencia de SISD, MISD, MIMD), que describe una arquitectura en la que múltiples elementos de procesamiento en la tubería realizan operaciones en múltiples puntos de datos (hardware) todos ejecutados con una sola instrucción.
15 |
16 | Los ingenieros de ARM también incorporaron VFPV3, una optimización de punto flotante, en el chip que utiliza nuestro Raspberry Pi 3. La página ARM vinculada aquí describe las características incluidas en esta optimización, como los modos de redondeo configurables y el comportamiento personalizable predeterminado, no un número (NaN).
17 |
18 | Lo que esto significa para nosotros es que es probable que nuestra red neuronal funcione más rápido porque el procesador ARM en la Raspberry Pi 3 tiene optimizaciones de hardware que podemos aprovechar con el procesador 4 × ARM Cortex-A53, 1.2GHz.
19 |
20 | Creo que quedará realmente impresionado con los resultados, así que sigamos adelante y obtenga su OpenCV optimizado instalado en la Raspberry Pi.
21 |
22 | # Paso # 1: expanda el sistema de archivos y reclame espacio
23 |
24 | Para el resto de este tutorial haré los siguientes supuestos:
25 |
26 | 1. Estás trabajando con una nueva instalación nueva de Raspbian Stretch.
27 | 2. Esta no es la primera vez que instala OpenCV en Raspberry Pi usando entornos virtuales Python. Si es así, moje sus pies usando una de mis guías introductorias de instalación de OpenCV.
28 | 3. Te sientes cómodo con la línea de comandos y los entornos Unix.
29 | 4. Sabe cómo depurar la salida de CMake para errores comunes (entorno virtual de Python no encontrado, bibliotecas de Python faltantes, etc.).
30 |
31 | Una vez más, este tutorial es una guía avanzada, por lo que presentaré los comandos y solo proporcionaré una explicación si es pertinente; en general, debe saber qué hacen estos comandos antes de ejecutarlos.
32 |
33 | El primer paso es ejecutar, `raspi-config` y expandir su sistema de archivos:
34 |
35 | - **`sudo raspi-config`**
36 | - **`sudo reboot`**
37 |
38 | A partir de ahí, elimine Wolfram Engine y LibreOffice para recuperar ~ 1GB de espacio en su Raspberry Pi:
39 |
40 | ```
41 | $ sudo apt-get purge wolfram-engine
42 | $ sudo apt-get purge libreoffice*
43 | $ sudo apt-get clean
44 | $ sudo apt-get autoremove
45 | ```
46 |
47 | # Paso # 2: Instalar dependencias
48 |
49 | Los siguientes comandos actualizarán y actualizarán cualquier paquete existente, seguido de la instalación de dependencias, bibliotecas de E / S y paquetes de optimización para OpenCV:
50 |
51 | ```
52 | $ sudo apt-get update && sudo apt-get upgrade
53 | $ sudo apt-get install build-essential cmake pkg-config
54 | $ sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
55 | $ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
56 | $ sudo apt-get install libxvidcore-dev libx264-dev
57 | $ sudo apt-get install libgtk2.0-dev libgtk-3-dev
58 | $ sudo apt-get install libcanberra-gtk*
59 | $ sudo apt-get install libatlas-base-dev gfortran
60 | $ sudo apt-get install python2.7-dev python3-dev
61 | ```
62 |
63 | Todo este proceso debería tomar unos 5 minutos.
64 |
65 | **Nota**: agregué libcanberra-gtk \* que toma el GTK específico de ARM para evitar las advertencias GTK (no errores; advertencias) que puede encontrar al ejecutar scripts Python + OpenCV en la Raspberry Pi.
66 |
67 | # Paso # 3: descargue el código fuente de OpenCV
68 |
69 | A continuación, descargue el código fuente de OpenCV para los repositorios opencv y opencv_contrib, y luego descomprimalos:
70 |
71 | ```
72 | $ cd ~
73 | $ wget -O opencv.zip https://github.com/opencv/opencv/archive/4.3.0.zip
74 | $ unzip opencv.zip
75 | $ wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.3.0.zip
76 | $ unzip opencv_contrib.zip
77 | ```
78 |
79 | **NOTA:** Para esta publicación de blog, utilizaremos OpenCV 4.3.0; sin embargo, a medida que se lanzan versiones más nuevas de OpenCV, puede actualizar los números de versión correspondientes.
80 |
81 | Ver las versiones en:
82 |
83 | - :start: [opencv](https://github.com/opencv/opencv/releases)
84 | - :start: [opencv contrib](https://github.com/opencv/opencv_contrib/releases)
85 |
86 | # Paso 4: crea tu entorno virtual de Python e instala NumPy
87 |
88 | Utilizaremos entornos virtuales de Python, una práctica recomendada cuando trabajemos con Python.
89 |
90 | Puede instalar pip, `virtualenv` y `virtualenvwrapper` usando los siguientes comandos:
91 |
92 | ```
93 | $ sudo pip3 install virtualenv virtualenvwrapper
94 | $ sudo rm -rf ~/.cache/pip
95 | ```
96 |
97 | Una vez que se hayan instalado `virtualenv` y `virtualenvwrapper`, abra su `~ / .bashrc` y agregue las siguientes líneas al final del archivo, utilizando su editor de texto basado en terminal favorito, como vim, emacs o nano:
98 |
99 | ```
100 | # virtualenv and virtualenvwrapper
101 | export WORKON_HOME=$HOME/.virtualenvs
102 | export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
103 | export VIRTUALENVWRAPPER_VIRTUALENV=/usr/local/bin/virtualenv
104 | source /usr/local/bin/virtualenvwrapper.sh
105 | export VIRTUALENVWRAPPER_ENV_BIN_DIR=bin
106 | ```
107 |
108 | - **`nano ~/.profile`**
109 |
110 | Deberá ejecutar `source ~ / .bashrc` **cada vez** que abra un nuevo terminal / SSH en su Pi para asegurarse de que las variables del sistema se hayan configurado correctamente (también carga este archivo en el arranque).
111 |
112 | A continuación, cree su entorno virtual Python 3:
113 |
114 | - **`mkvirtualenv cv -p python3`**
115 |
116 | Aquí estoy creando un entorno virtual de Python llamado _cv_ usando Python 3 (alternativamente, también puede usar Python 2.7 cambiando el interruptor `-p` a `python2`).
117 |
118 | Puedes nombrar el entorno virtual como quieras, pero yo uso **`cv`** como la convención de nomenclatura estándar aquí en PyImageSearch.
119 |
120 | Finalmente, instale NumPy en el entorno virtual de Python:
121 |
122 | - **`pip install numpy`**
123 |
124 | # Paso 5: compila e instala la biblioteca OpenCV optimizada para Raspberry Pi
125 |
126 | Ahora estamos listos para compilar e instalar la versión optimizada de Raspberry Pi.
127 |
128 | Asegúrese de estar en el entorno virtual de `cv` con el comando `workon`:
129 |
130 | - **`workon cv`**
131 |
--------------------------------------------------------------------------------
/raspberrypi.md:
--------------------------------------------------------------------------------
1 | # :rocket: Guía de instalación para Raspberry PI :white_check_mark:
2 |
3 | ## Instalando el SO para la tarjeta microSD
4 |
5 | Vamos a la [página oficial](https://www.raspberrypi.org/downloads/) de Raspberry en el apartado de descargas y tenemos 2 opciones:
6 |
7 | - Descargar el **_Raspberry Pi Imager_**, esta aplicación nos facilita el proceso de descarga y escritura del SO en la tarjeta SD (Así como Media Creation Tools de windows)
8 | - Descargar las imágenes del sistema operativo que deseemos usar e instalar el SO en la tarjeta SD mediante programas como [Rufus](https://rufus.ie/) (Más ligero que el siguiente pero sólo funciona para Windows) o [balenaEtcher](https://www.balena.io/etcher/)
9 | - Raspberry OS (Antes llamado Raspbian) es el sistema operativo de Raspberry y existen [3 alternativas](https://www.raspberrypi.org/downloads/raspberry-pi-os/)
10 | - Raspberry Pi OS (32 bits) con escritorio y software recomendado
11 | - Raspberry Pi OS (32-bit) with desktop (Mejor relación)
12 | - Raspberry Pi OS (32-bit) Lite
13 |
14 | También podemos seguir la [guía oficial](https://projects.raspberrypi.org/en/projects/raspberry-pi-setting-up)
15 |
16 | ## Conectando la Tarjeta
17 |
18 | Para ello necesitamos
19 |
20 | - Raspberry Pi
21 | - Fuente de alimentación
22 | - Tarjeta micro SD con Raspbian instalado
23 | - Teclado y Mouse
24 | - Cable HDMI
25 |
26 | Luego seguimos el proceso de configuración del sistema operativo como el idioma deseado y la conexión a red wifi.
27 |
28 | Para actualizar los repositorios usamos los comandos (Recordar que Raspberry OS funciona con Debian, una distribución de Linux)
29 |
30 | - `sudo apt-get update`
31 | - `sudo apt-get upgrade`
32 |
33 | - **`clear`** Limpia la terminal
34 |
35 | Por defecto, Raspberry OS crea un usuario llamado **pi** `pi@raspberrypi`
36 |
37 | - **`pwd`** (print working directory) Muestra la ruta donde esta ubicado actualmente
38 |
39 | - **`ls`** Mustra los archivos que hay en una carpeta
40 |
41 | - **`cd ..`** (cd => change directory) Sube un nivel en la carpetas
42 |
43 | - **`cd home`** Cambia de directorio a la carpeta especificada 'home'
44 |
45 | - **`mkdir micarpeta`** (mkdir => Make Directory) Crea una carpeta con el nombre 'micarpeta'
46 |
47 | - **`rmdir micarpeta`** Elimina la capeta 'micarpeta'
48 |
49 | - **`touch miarchivo.txt`** Creamos un archivo llamado 'miarchivo.txt'
50 |
51 | - **`rm miarchivo.txt`** Eliminamos el archivo con el nombre 'miarchivo.txt'
52 |
53 | - **`nano texto.txt`** Abre un programa editor en la terminal en dónde podemos editar el contenido
54 |
55 | `nano` no es l único editor, también está vim p `imacs`
56 |
57 | - **`cat texto.txt`** Vemos el contenido que hay dentro de un archivo
58 |
59 | - **`history`** Muestra el historial de los comandos digitados (Con las flechas del teclado arriba y abajo podemos navegar entre ellos)
60 |
61 | - **`rm -rf micarpeta`** Elimina una carpeta que contiene archivos
62 |
63 | ## **`apt`** Advance Packaging Tool
64 |
65 | Raspberry OS es basado en Debian. El administrador de paquetes en un programa que administra otros paquetes. Con él podemos instalar y remover paquetes de software.
66 |
67 | - **`sudo`** (SuperUser DO) Debemos digitar este comando cuando deseemos instalar paquetes que requieran privilegios
68 |
69 | - **`sudo apt-get dist-upgrade`** Actualiza y remueve los programas que ya están obsoletis
70 |
71 | - **`sudo apt-get install screenfetch`** Con este comando instalamos programas, éste programa **screenfetch** se ejecuta desde consola y muestra las propiedades del sistema Operativo
72 |
73 | Como Raspberry en un mini computador, podremos programar en él.
74 |
75 | ## **Headless Mode** Modo sin periféricos
76 |
77 | Apagamos la Raspberry Pi. Luego de apagado se puede desconectar.
78 |
79 | - Ver la guía [Cómo configurar Raspberry Pi Zero W en modo Headless vía WiFi](https://mecatronicauno.com/configurar-raspberry-pi-zero-w-modo-headless-via-wifi/)
80 | - Recomendado: [Cómo instalar Raspbian en Raspberry](www.youtube.com/watch?v=fFj3a4qtTkA)
81 |
82 | Para ello necesitamos algunos programas **nmap**, que lo usaremos para escanear que dispositivos están conectados a la red para saber la IP del dispositivo.
83 |
84 | En linux podemos instalarlo usando
85 |
86 | - **`sudo apt-get install nmap`**
87 |
88 | Para escanear las IPs usamos
89 |
90 | - `nmap -sn 192.168.0.0/24` Escanea los primeros 24 dispositivos
91 |
92 | Para escanear las IPs de la red local usamos
93 |
94 | - `nmap -sn 192.168.0.0/24 -oG-`
95 |
96 | O descargar el programa [Advanced IP Scanner](https://www.advanced-ip-scanner.com/es/) Es un software grafico que escanea una red en cuestión de segundos
97 |
98 | ### Putty
99 |
100 | Para conectarnos por SSH podemos usar Putty para windows o usar git bash si tienen instalado git.
101 |
102 | GPIO Hammer Header (Solderless) - Para la conexión en Raspberry Pi Zero W
103 |
104 | [VNC-Connect-and-Raspberry Pi](https://help.realvnc.com/hc/en-us/articles/360002249917-VNC-Connect-and-Raspberry-Pi#operating-vnc-server-at-the-command-line-0-6)
105 |
106 | ## :zap: Configurando Raspberry Pi para conexión por SSH
107 |
108 | > Por defecto la conexión **ssh** no está habilitada en la raspberry Pi. Para ello debemos habilitar la opción usando.
109 |
110 | 1. Insertamos la memoria microSD en el PC y vamos a la carpeta **boot**
111 | 2. Creamos una archivo **ssh** sin extensión. Con windows podemos usar PowerShell y escribir
112 |
113 | - `type nul > ssh` (Ésto nos creará el archivo con nombre ssh)
114 |
115 | 3. Desconectamos la tarjeta y la insertamos en la Raspberry Pi.
116 |
117 | **_Es importante ver la guía 'Cómo configurar Raspberry Pi Zero W en modo Headless vía WiFi, esto nos permitirá conectar la tarjeta a la red WiFi para poder identificarla sin tener que usar monitor, teclado y mouse._**
118 |
119 | Sin para conectarla por wifi, sólo debemos crear el siguiente archivo en la misma carpeta donde se ha colocado el archivo `ssh`. Este archivo lleva el nombre de **`wpa_supplicant.conf`**
120 |
121 | ```
122 | country=CO
123 | ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
124 | update_config=1
125 | network={
126 | ssid="NombreDeMiRedWiFi"
127 | psk="ContraseñaDeMiRedWiFi"
128 | key_mgmt=WPA-PSK
129 | }
130 | ```
131 |
132 | Donde debemos cambiar el país (**Country**) y el nombre y contraseña de la red a la cual estamos conectados. (Esto es si no se tiene un cable ethernet, o si si se quiere conectar vía WIFI para evitar cables)
133 |
134 | Con esto, al conectar la Raspberry se conectará a la red ya podrá ver el dispositivo conectado.
135 |
136 | Si lo deseas, puedes incluir más de una red _wpa_supplicant_ seleccionará la red que califica como la mejor opción basada en:
137 |
138 | - Orden de redes en el archivo wpa_supplicant.conf
139 | - Nivel de seguridad (se prefiere WPA2)
140 | - Intensidad de señal
141 | Al hacerlo se verá algo como esto:
142 |
143 | ```
144 | # Red 1
145 | network={
146 | ssid="SSID1"
147 | psk="password1"
148 | key_mgmt=WPA-PSK
149 | }
150 |
151 | # Red 2
152 | network={
153 | ssid="SSID2"
154 | psk="password2"
155 | key_mgmt=WPA-PSK
156 | }
157 | ```
158 |
159 | ### :lock: Conexión SSH
160 |
161 | Para conectar por SSH podemos usar la terminal de Windows CMD, o usar Putty, (Es un programa que debemos descargar) o mediante GitBash si tienen git instalado.
162 |
163 | En putty, escribimos la ip a la cual está conectada la tarjeta y las contraseña por defecto es **raspberry**
164 |
165 | Usando la terminal, bien sea CMD, o la del sistema operativo que tengamos, digitamos **SSH** y colocamos los siguientes comandos. Recordar que por defecto raspberry tiene el usuario **pi**:
166 |
167 | - **`ssh pi@192.168.0.x`**
168 | - Ingresamos la contraseña, por defecto es **_raspberry_**
169 |
170 | * **`sudo apt-get install screenfetch`** Instala in programa que nos permite ver las características del dispositivo
171 |
172 | Para **cambiar las configuraciones en la raspberry**, de puede acceder a:
173 |
174 | - **`sudo raspi-config`**
175 |
176 | Esto nos abrirá las opciones para configurar raspberry pi
177 |
178 | :star: Para hablitar la opción de VNC (Para ver la interfaz desde otro computador), debemos seleccionar la opción
179 |
180 | - Interface Option
181 | - VNC (Habilitar o deshabilitar la opción gráfica remota)
182 |
183 | Aquí se puedes cambiar otras opciones como la contraseña o el usuario de la tarjeta conectada a la red.
184 |
185 | ### Instalando VNC en Raspberry Pi
186 |
187 | Debemos tener instalado el programa que nos permite realizar la conexión remota. Para ello debemos instalar el paquete en linux mediante
188 |
189 | - `sudo apt-get install -y realvnc-vnc-server realvnc-vnc-viewer`
190 |
191 | Esto nos descargará los archivos necesarios para realizar la conexión y ver la interfaz gráfica.
192 |
193 | - `vncserver` (Con este comando ejecutamos el programa)
194 |
195 | Este programa ejecuta el programa y nos muestra las opciones para poder conectarnos desde el otro ordenador.
196 |
197 | ### Instalando VNC Viewer en el PC
198 |
199 | Se necesita descargar el programa en el PC para poder realizar la conexión. Luego de tenerlo instalado, lo abrimos y vamos a la opción
200 |
201 | - Archivo
202 | - Nueva Conexión
203 |
204 | Esto nos arbirá una ventana donde debemos ingresar los datos que nos ha proporcionado la Raspberry Pi
205 |
206 | ## Apagar la Raspberry Pi usando la consola
207 |
208 | Para apagar la raspberry Pi (Recordar que estamos trabajando con una versión de Linux), podemos ejecutar la siguientes instrucciones:
209 |
210 | - **`sudo power off`** Apaga inmediatamente
211 |
212 | - **`sudo poweroff`** Pregunta la contraseña del super usuario como confirmación para apagar el sistema.
213 |
214 | ## :eyes: :star: Instalando OpenCV en Raspberry Pi
215 |
216 | **REF** [Cómo instalar OpenCV en Raspberry Pi](https://omes-va.com/como-instalar-opencv-en-raspberry-pi/)
217 |
218 | Previo a la instalación de OpenCV en python 3, necesitamos instalar algunos paquetes, esto lo haremos a través de la siguiente línea:
219 |
220 | - `sudo apt-get install libhdf5-dev libhdf5-serial-dev libatlas-base-dev libjasper-dev libqtgui4 libqt4-test`
221 |
222 | > Es importante ejecutar la línea anterior para un correcto funcionamiento
223 |
224 | ### Instalando OpenCV 4 en Raspberry Pi
225 |
226 | Vamos a instalar la versión de OpenCV 4.1.0.25. Usamos pip3 install `opencv-contrib-python`, tal y como lo hicimos en la instalación de OpenCV en Windows, empleamos contrib para que se instalen los módulos principales y extras.
227 |
228 | - `pip3 install opencv-contrib-python==4.1.0.25`
229 |
230 | ## Comprobar que OpenCV 4 se ha instalado correctamente en la Raspberry Pi
231 |
232 | Para comprobar que se ha instalado OpenCV, digitamos python3 en el terminal e importamos OpenCV para finalmente imprimir la versión instalada.
233 |
234 | Digitamos python3 y escribimos los siguiente. Esto nos debería arrojar
235 |
236 | ```py
237 | import cv2
238 | cv2.__version__
239 | # 4.1.0
240 | ```
241 |
242 | - **Probando con una imagen**
243 |
244 | ```py
245 | import cv2
246 |
247 | image = cv2.imread('nombreimagen.jpg')
248 | cv2.imshow('Imagen', image)
249 | cv2.waitKey(0)
250 | cv2.destroyAllWindows()
251 | ```
252 |
253 | - **Reproducir un vídeo**
254 |
255 | ```py
256 | import cv2
257 |
258 | cap = cv2.VideoCapture('nombrevideo.avi')
259 |
260 | while (cap.isOpened()):
261 | ret, frame = cap.read()
262 |
263 | cv2.imshow('Video', frame)
264 |
265 | if cv2.waitKey(25) & 0xFF == 27: # Si se presiona ESC cerramos el ciclo
266 | break
267 |
268 | cap.release()
269 | cv2.destroyAllWindows()
270 | ```
271 |
272 | ## Extras para mejor funcionamiento en Raspberry Pi Zero W
273 |
274 | **REF** [Installing OpenCV in PiZeroW](https://towardsdatascience.com/installing-opencv-in-pizero-w-8e46bd42a3d3)
275 |
276 | 1. Expander el sistema de archivos
277 |
278 | Expandemos el sistema de archivos para no tener problemas de espacio de almacenamiento
279 |
280 | - **`sudo raspi-config --expand-rootfs`**
281 |
282 | 2. Aumentar espacio de intercambio
283 |
284 | El espacio de intercambio es una parte de una unidad de disco duro (HDD) que se utiliza para la memoria virtual. Tener un archivo de intercambio permite que el sistema operativo de su computadora simule que tiene más RAM de la que realmente tiene. Esto aumentará el proceso de compilación de openCV. De lo contrario, terminará con un error de memoria agotada.
285 | Para aumentar el tamaño de Swapsize, abra el archivo de intercambio de su pi zero con el siguiente comando:
286 |
287 | - **`sudo nano /etc/dphys-swapfile`**
288 |
289 | Vaya a Cambiar tamaño y cámbielo a 2048 desde 100. como se muestra a continuación.
290 |
291 | ```
292 | .
293 | # where we want the swapfile to be, this is the default
294 | #CONF_SWAPFILE=/var/swap
295 | # set size to absolute value, leaving empty (default) then uses computed value
296 | # you most likely don't want this, unless you have an special disk situation
297 | #CONF_SWAPSIZE=100
298 | CONF_SWAPSIZE=2048
299 | .
300 | ```
301 |
302 | **_Reiniciamos el sistema_**
303 |
304 | - **`sudo reboot`**
305 |
306 | ## Installing dependencies
307 |
308 | Primero vamos a actualizar y actualizar los paquetes existentes:
309 |
310 | - **`sudo apt-get update`**
311 | - **`sudo apt-get upgrade`**
312 |
313 | Si está utilizando **Raspbian Buster**, ejecute el siguiente comando:
314 |
315 | - **`sudo apt update`**
316 | - **`sudo apt upgrade`**
317 |
318 | Instalar las herramientas de desarrollo
319 |
320 | - **`sudo apt-get install build-essential cmake pkg-config`**
321 |
322 | Instale los paquetes IO:
323 |
324 | - **`sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev`**
325 |
326 | Junto con algunos paquetes de E / S de video (aunque es poco probable que realice un gran procesamiento de video con Raspberry Pi Zero):
327 |
328 | - **`sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev`**
329 | - **`sudo apt-get install libxvidcore-dev libx264-dev`**
330 |
331 | Necesitaremos instalar la biblioteca de desarrollo GTK para la interfaz GUI de OpenCV:
332 |
333 | - **`sudo apt-get install libgtk2.0-dev`**
334 |
335 | Y paquetes de optimización de rutina apalancados por OpenCV:
336 |
337 | - **`sudo apt-get install libatlas-base-dev gfortran`**
338 |
339 | El único requisito para construir enlaces de Python + OpenCV es tener instalado NumPy, así que instale NumPy usando pip:
340 |
341 | - **`pip3 install numpy`**
342 |
343 | Finalmente todos los comandos son:
344 |
345 | ```
346 | 1. sudo apt-get update & sudo apt-get upgrade & sudo rpi-update
347 | 2. sudo nano /etc/dphys-swapfile
348 | CONF_SWAPSIZE=2048
349 | 3. sudo apt-get install build-essential cmake pkg-config
350 | 4. sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
351 | 5. sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
352 | 6. sudo apt-get install libxvidcore-dev libx264-dev
353 | 7. sudo apt-get install libgtk2.0-dev libgtk-3-dev
354 | 8. sudo apt-get install libatlas-base-dev gfortran
355 | - sudo apt install libqtgui4 (Por si lanza error en ImportError: libQtGui.so.4)
356 | ```
357 |
358 | **Prerrequisitos** :star: [`pip install opencv`](https://www.pyimagesearch.com/2018/09/19/pip-install-opencv/#download-the-code)
359 |
360 | ```
361 | $ sudo apt-get install libhdf5-dev libhdf5-serial-dev libhdf5-103
362 | $ sudo apt-get install libqtgui4 libqtwebkit4 libqt4-test python3-pyqt5
363 | $ sudo apt-get install libatlas-base-dev
364 | $ sudo apt-get install libjasper-dev
365 | ```
366 |
367 | :star: **REF** [Install OpenCV 4 on Raspberry Pi 4](https://www.pyimagesearch.com/2019/09/16/install-opencv-4-on-raspberry-pi-4-and-raspbian-buster/)
368 |
369 | Si tiene un módulo de cámara Raspberry Pi conectado a su RPi, también debe instalar la API PiCamera ahora:
370 |
371 | - **`pip3 install "picamera[array]"`**
372 |
373 | - **`pip3 install opencv-contrib-python==4.1.0.25`**
374 |
375 | **NOTA** No haga este paso si ha realizado el anterior
376 |
377 | Avancemos y descarguemos el código fuente de OpenCV para los repositorios opencv y opencv_contrib, seguido de desarchivarlos:
378 |
379 | ```
380 | - $ cd ~
381 | - $ wget -O opencv.zip https://github.com/opencv/opencv/archive/4.1.1.zip
382 | - $ wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.1.1.zip
383 | - $ unzip opencv.zip
384 | - $ unzip opencv_contrib.zip
385 | - $ mv opencv-4.1.1 opencv
386 | - $ mv opencv_contrib-4.1.1 opencv_contrib
387 | ```
388 |
389 | Y... eso es todo amigos :octocat:
390 |
--------------------------------------------------------------------------------
/ser_freelance.md:
--------------------------------------------------------------------------------
1 | # Trabajar como Freelance
2 |
3 | El término **freelancer**, como dato curioso, viene de las personas que se conocían como mercenarios, personas dueñas de su tiempo, de su agenda. Eran personas que eran contratadas para asesinar o secuestrar a otras personas.
4 |
5 | Un **freelancer** es un trabajador independiente que ofrece sus servicios específicos para empresas o personas. Trabaja de forma autónoma gestionando su tiempo y trabajo.
6 |
7 | No tiene horarios fijos, ni usa uniforme, tampoco sufre por el tráfico de la ciudad o el ajetreo del trasporte público.
8 |
9 | Ser **freelancer** es un estilo de vida, es una actitud ante la profesión. Una responsabilidad que debe tener, es ser responsable de si mismo.
10 |
11 | Tu carrera profesional dependerá solo de ti y por eso es importante tener un portafolio, estar actualizado sobre tecnologías, tener proyectos claves, clientes claves, puntos interesantes para trabajar.
12 |
13 | - Ser freelance
14 | - Estilo de vida
15 | - Actitud ante la profesión
16 |
17 |
18 | - **¿Cuál es el mejor momento para ser freelancer?**
19 |
20 | Cuando ya tienes experiencia trabajando en un ambiente laboral y en equipo, esto te va a servir de práctica para cuando estés en situaciones donde trabajes remotamente, sin dejar a un lado tu objetivo: lograr resultados.
21 |
22 | Cuando ya tienes **disciplina** en tu vida personal, y sabes **comunicarte** con las personas. Además de saber tratar a tus clientes como **clientes** y sepas vivir de manera **organizada** utilizando herramientas que te ayuden.
23 |
24 |
25 | ## Mi portafolio y mi marca personal
26 |
27 | Debes tener un perfil de **Linkedin** no importa tu carrera o profesión, esta es la red profesional para conseguir empleo.
28 | - Incluye tus mejores proyectos, es tu oportunidad para mostrar la calidad de tu trabajo.
29 | - Describe los skills que usaste para la construcción de tus proyectos. Colocándolas harás que más personas se interesen en tu perfil.
30 | - Si tienes certificaciones muéstralas también.
31 |
32 |
33 | - Usar **Linkedin** para
34 | - Mejores proyectos
35 | - Skills
36 | - Certificaciones
37 |
38 | - Desarrollo (Github & Twitter)
39 | - Diseñador (Behance, Instagram, Dribble)
40 | - Producción Audivisual (Youtube, Instagram, 500px.com)
41 |
42 |
43 | - **Dónde encontrar trabajo como Freelancer**
44 |
45 | Uno de los retos más grandes de ser Freelancer es conseguir los clientes suficientes para generar los proyectos más interesantes además de mantener un ingreso constante.
46 |
47 | - [Freelancer](https://m.freelancer.es/)
48 | - [Workana](https://www.workana.com/dashboard)
49 | - [Fiverr](https://www.fiverr.com/)
50 | - [Soy Freelancer](https://www.soyfreelancer.com/)
51 |
52 |
53 | ## Pagos
54 |
55 | ### Cómo cobrar como Freelancer
56 |
57 | **Aspectos a considerar para poner precio a tu trabajo**
58 |
59 | - Averigua cuánto cobrar por proyecto.
60 | - Compara lo que ganas con lo que deberías ganar. Debes repensar cuanto estás ganando y cuánto es el estimado del proyecto. En caso de que te estés vendiendo caro procura hacer notorio el valor agregado al proyecto.
61 | - Los freelancer no ganan poco, el pago debería ser una negociación con el cliente para concretar un acuerdo mutuo.
62 | - El cliente es una persona, una empresa, cliente eventual, cliente a largo plazo. No hagas tratos con la familia porque puede complicar la relación familiar.
63 | - Elabora un presupuesto mensual.
64 | - Estima cuántos proyectos podrías hacer al mes. No te atiborres con proyectos, se realista en cuántos proyectos puedes hacer al mismo tiempo.
65 | - Evalúa los costos relacionados
66 | - Estima el esfuerzo que requiere cada proyecto.
67 |
68 |
69 | Herramientas útiles
70 | - [Cuánto cobrar por su trabajo](https://www.soyfreelancer.com/cuanto-cobrar-por-tu-trabajo)
71 | - [Cómo funciona la cultura de Platzi](https://platzi.com/blog/como-funciona-cultura-platzi/)
72 |
73 |
74 | ## Contratos
75 |
76 | En este tema debemos ser serios y responsables. Debemos tener claro el pago y las condiciones que estamos solicitando. También debemos ser empáticos con el cliente que espera recibir garantías.
77 |
78 | - **Plan de trabajo**. El cliente se va a seguir más tranquilo si le muestras esta proyección de actividades y resultados.
79 | - **Cronogramas**. Puedes enseñarle que harás en los próximos días.
80 | - **Documentación**.
81 | - **Alcances**.
82 |
83 | > **Nunca ejecutes un proyecto sin un contrato**
84 |
85 | En **cobros** se suele pedir 50% del costo total para arrancar y 50% al finalizar.
86 |
87 | Una recomendación es solicitar 50% para iniciar el proyecto y el resto diferido en meses.
88 |
89 | **Contratos Digitales** Es una plataforma para contratos.
90 | - [HelloSign](https://www.hellosign.com/)
91 |
92 | > Como freelance se debe garatizar un flujo de dinero mensual.
93 |
94 |
95 | ### Recibir pagos trabajando como Freelance
96 |
97 | **Transferencia Electrónicas.**
98 |
99 | Debes tener una cuenta en el banco a tu nombre, en algunas empresas no te van a realizar el pago si la cuenta no está a tu nombre. Esto funciona muy bien cuando están en el mismo país, si manejas negocios con bancos nacionales.
100 |
101 | **Payoneer**
102 |
103 | Esto funciona muy bien cuando tu cliente se encuentra en otro país. Payoneer es la forma de manejar transferencias electrónicas de manera internacional y te proporciona una tarjeta de débito, puedes manejar tu moneda en dolares y euros.
104 |
105 | **Paypal**
106 |
107 | Es la opción amada por muchos. Es el método de pago más popular, por la facilidad para crear una cuenta. Es como una capa que te permite generar transferencias internacionales y que al final se depositará en tu cuenta bancaria nacional.
108 |
109 | Paypal tiene una comisión al momento de hacer esta transferencia a tu cuenta bancaria nacional.
110 |
111 | **Skrill**
112 |
113 | Es un método de pago que también tiene bastante tiempo en el mercado.
114 |
115 | **MercadoPago**
116 |
117 | Con esta opción puedes generar un código QR y enviárselo a tu cliente y a partir de eso puede generar una transferencia a tu cuenta. Puede que tenga alguna restricción dependiendo de tu país. Funciona muy bien en México, Colombia y Argentina.
118 |
119 |
120 |
121 | ### Facturas e impuestos
122 |
123 | Cuando ya tengas un método de pago y contrato. Lo que un cliente te solicitará para realizarte un pago es una factura. Debes estar al día con todo el sistema tributario y **nunca evadir impuestos**.
124 |
125 | - **Colombia**:
126 | - No todos los profesionales están obligados a pagar impuestos.
127 | - Si ganas menos de 4.000 UVT no deberías pagar impuestos.
128 | - Date de alta como **Persona natural**, podrás generar facturas pero pagar menos impuestos
129 | - Es regulado por **DIAN** (Dirección de Impuestos y Aduanas Nacionales). Vas a recibir un **RUT** (Registro único tributario). También te añaden el **NIT**.
130 | - Las facturas también son en formato digital.
131 |
132 |
133 | - **México:**
134 | - El tipo de régimen en el sistema tributario recomendado es **Persona física con actividad empresarial**. - Es importante que no te des de alta como una empresa porque las únicas que pueden generar facturas son las empresas.
135 | - **RFC**. Registro Federal de Contribuyentes.
136 | - Mensualmente debes declarar el **IVA, ISR**. La institución encargada de regular esto es el **SAT** (Sistema de Administración Tributaria).
137 | - Las facturas son digitales respaldadas por un Comprobante Fiscal Digital por Internet(**CFDI**)
138 |
139 |
140 | ## Organizar mi tiempo y espacio
141 |
142 | ### Organizar mi espacio
143 |
144 | Trabajar en pijamas todo el día puede resultar muy cómodo, pero la recomendación es que tengas mucho orden en el espacio de trabajo que estás definiendo. Si nosotros decidimos colocar nuestro espacio de trabajo en el comedor nos vamos a sentir invadidos por nuestra familia, nosotros también estamos invadiendo un espacio de la casa que es para otro propósito.
145 |
146 | No tener las condiciones adecuadas de trabajo puede afectar mucho la productividad y el resultado que vas a entregar. Muchos de los retrasos o fallos en nuestro proyectos es porque no tenemos el espacio adecuado de trabajo.
147 |
148 | - **Reserva un espacio de trabajo** donde sea. Cómprate una mesa, un escritorio y una silla de trabajo donde estés cómodo. Elige un espacio de trabajo iluminado que te guste, donde te sientas tranquilo, debe ser tu lugar favorito para trabajar.
149 | - Si sientes que en tu casa no hay lugar de cómodo donde puedas trabajar. Puedes usar los **Coworking**, te ofrecen escritorios propios, decoraciones interesantes, algunos ofrecen cervezas, fiestas. Todo esto debes incluir en tu presupuesto y plan de trabajo.
150 | - **Tu equipo de cómputo** debe ser lo bastante portátil para poder irte a una cafetería o en cualquier lugar del mundo.
151 | - Debes tener un **internet** aceptable para mantener conversaciones remotas, llamadas, reuniones, etc.
152 |
153 |
154 | > El equipo de cómputo debe ser **potente** y muy **portátil**. Es la herramienta que tendrás por el resto de tu vida.
155 |
156 | ### Organizar mi jornada laboral
157 |
158 | Si crees que ser **freelance** te dará más tiempo libre para hacer todas tus cosas, pues deberías tener un horario fijo en donde tus clientes puedan contactarte. Algunos clientes pueden malinterpretar el ser autónomo como el hecho de estar disponible las 24 horas del día.
159 |
160 | Tienes que ser **disciplinado**. El ser freelancer y tener la autonomía de tu tiempo puede ser un **arma de doble filo** porque te puede dar la libertad de no hacer nada o para que te apasiones tanto y todo el día estés trabajando. Todo esto debe **equilibrarse** porque hace parte de nuestra **calidad de vida**.
161 |
162 | - Tiempo:
163 | - **Definir horarios de trabajo**, date un mínimo de horas pueden ser ocho, siete o cuatro, las que tu quieras.
164 | - Decide si vas a trabajar de lunes a viernes, de lunes a domingo, etc.
165 | - **Comida**. Define horarios de comida, muchas veces se nos olvida comer.
166 | - **Pausas activas**. Te ayudan a cuando algo no sale bien, estas pueden durar unos 10 o 15 minutos, sal de tu casa, respira aire.
167 | - **Concentración**. Busca un momento de silencio, tu familia debe saber que estás trabajando y deben respetar tu espacio de trabajo.
168 |
169 |
170 | ### Soy Freelancer, soy productivo
171 |
172 | Genera un plan de ejecución del proyecto organizado por días. Así tus clientes pueden saber el avance del proyecto por días y asegurarse que estás avanzando acorde al plan.
173 |
174 | Después de generar un cronograma de trabajo, puede seguir con una lista de tareas o *To-Dos*. Puedes apoyarte de herramientas como **Trello** y sacar mucho provecho de sus tableros con listas de tareas **To Do, Doing y Done**. Así puedes saber en qué estás trabajando.
175 |
176 | La **técnica de Pomodoro** te ayuda a enfocarte en las tareas específicas que quieres lograr. Debes decidir la tarea que debes hacer, un mínimo de tiempo(25 minutos) después un break de cinco minutos, después sigue trabajando en los 25 minutos cuantas veces quieres. Lo recomendado es hacer 4 pomodoros y después tomarte un descanso largo de 15 a 30 minutos.
177 |
178 | Utiliza todo lo que esté a tu alcance para ser más productivo.
179 |
180 |
181 | **Herramientas**
182 | - Jira (Cronograma de trabajo)
183 | - Trello (To-Do's)
184 | - Google Tasks (Controlar Detalles)
185 | - Google Calendar (Definir jornadas de trabajo)
186 | - Monday (Combina varias herramientas)
187 | - Técnica Pomodoro (Centra en tareas específicas)
188 | - Be Focused
189 | - [Tómate tu tiempo - Android](https://play.google.com/store/apps/details?id=com.crexative.pomtask)
190 | - Slack (Comunicación con tu equipo)
191 | - Google Meets, Skype, Zoom
192 |
193 | > Utiliza todo lo que esté a tu alcance para ser más productivo. **¡Vete de vacaciones!**
194 |
195 |
196 | ### Cuidarme laboralmente
197 |
198 | **Cuidar mi trabajo, cuidar mis ingresos, cuidarme a mi**.
199 |
200 | Esto debería ser un mantra en nuestra vida diaria, debe ser un balance en nuestra vida que debemos tener y procurar
201 |
202 | - Contrata un seguro médico. Al ser freelancer no tendremos este beneficio que nos otorga una compañía al ser obligado por la ley. Depende del freelancer contratarlo.
203 | - Prepárate para el futuro. Contratar una Afore o un Fondo de pensiones también va a correr por tu cuenta al no estar trabajando en una compañía
204 | - También puedes ir ahorrando una cantidad de dinero para tu casa.
205 | - Busca más fuentes de ingresos que sean recurrentes, mensuales y puedas estar seguro algunos meses para no pasar momentos difíciles.
206 |
207 |
208 | **Cuidado de las finanzas**
209 |
210 | Una de las artes que desarrollas con la experiencia es la de ser administrado. Administrar nuestras finanzas es uno de los retos más grandes y es aún más grande cuando tus ingresos no son regulares, como cuando eres Freelancer.
211 |
--------------------------------------------------------------------------------
/software_development_style_guide.md:
--------------------------------------------------------------------------------
1 | # Guías de Estilo (Convenciones de Nombres)
2 |
3 | Uso de escritura en tipo CamelCase.
4 | * __UpperCamelCase__ Cuando la primera letra de cada una de las palabras es mayúscula. Ejemplo: `EjemploDeUpperCamelCase`.
5 | * __lowerCamelCase__ Igual que la anterior con la excepción de que la primera letra es minúscula. Ejemplo: `ejemploDeLowerCamelCase`.
6 | * __lowercase__ Todas las palabras en minúsculas. Ejemplo: `ejemplodelowercase`
7 | * __uppercase__ Toas las palabras en mayúsculas. Ejemplo: `EJEMPLODEUPPERCASE`
8 |
9 | Para los dos últimos casos, es importante separar cada palabra con guión bajo `_`, por ejemplo `ejemplo_de_lowercase` y `EJEMPLO_DE_UPPERCASE`, de esta forma se podrá leer mejor.
10 |
11 | ## Bases de Datos
12 |
13 | Algunos prefijos usados en bases de datos son:
14 | * __PK__: Primary key
15 | * __DF__: Default
16 | * __CK__: Check constraint
17 | * __FK__: Foreign Key
18 |
19 |
20 | Generalmente hay un debate en las convenciones de nombres. Cada uno de ellos son subjetivos dependiendo de la empresa o gustos personales.
21 |
22 | En este caso estableceremos algunas convenciones para las bases de datos.
23 |
24 | * **Reglas Generales**
25 | - Evitar espacios en blanco
26 | - No usar palabras clave reservadas por el motor de base de datos, en el nombre se las entidades o campos.
27 | - Evitar nombrar campos con valores de tipos de datos (text...)
28 | - Ser explícito en el nombrado de datos.
29 | - Usar inglés en el nombrado, por ser más compacto y no tener caracteres especiales.
30 |
31 | * **Tablas y Vistas**
32 | - Usar sustantivos (Nombres) en singular, y con la estructura UpperCamelCase
33 | _Person_, _User_, etc. Para las entidades.
34 | - Evitar el uso de prefijos y sufijos, porque son redundantes y resultan difíciles para determinar el objeto rápidamente.
35 |
36 | * **Claves y campos**
37 | - **Clave Primaria** Nombrar la columna de clave primaria con un simple `id`
38 | - **Clave foránea** Nombrar el campo con el nombre de la tabla referenciada y el id. Por ejemplo `person_id`
39 | - Para el nombrado de campos usar lowercase con uso de guines bajos, separando cada palabra. Por ejemplo `expiration_date`
40 |
41 | * **Restricciones (Relaciones)**
42 | - Usar una mezcla de prefijo, nombre de tabla y nombre de campo, usando UpperCamelCase, con guiones bajos. Por ejemplo: `FK_Order_CustomerId`
43 |
44 | De esta manera estamos indicando la relación a la llave foránea, indicando la tabla referenciada y el campo que almacena la clave foránea de la tabla.
45 |
46 | * **Procedimientos almacenados y funciones**
47 | - En estos casos, mezclar el nombre del objeto (Entidad o Tabla) en combinación con un verbo separado por guión bajo, usando UpperCamelCase.
48 | Por ejemplo: `Customer_GetAll` `Customer_Insert`
49 |
50 |
--------------------------------------------------------------------------------
/tips_for_developers.md:
--------------------------------------------------------------------------------
1 | # Tips for developers
2 |
3 | Este archivo contiene consejos para desarrolladores, donde se muestran herramientas y consejos útiles a la hora de realizar proyectos para clientes.
4 |
5 |
6 | ## ¿Cómo realizar una cotización?
7 |
8 | Es importante destacar que **todos los proyectos son diferentes** por eso los precios no van a ser iguales, así sean del mismo tipo (Web, móvil, etc)
9 |
10 | 1. **Anota los requerimientos de tu cliente**.
11 | NO puedes poner un precio sin saber de qué se trata. Con esto evitarás pérdidas y enojos si defines bien esta parte y la pones en el contrao en el **contrato**
12 |
13 | En el contrato debe estimarse
14 | * Plazo
15 | * Tiempo de soporte
16 |
17 |
18 | 2. **Calcula los costos humanos**
19 | ¿Cuántas personas necesitarás para este proyecto? ¿Cuántas horas/hombre se requieren?
20 |
21 |
22 | 3. **Calcula los costos NO humanos**
23 | ¿Qué herramientas necesitas y cuánto le cuestan? Por ejemplo conexión a internet, licencias de software, movilidad, energía eléctrica, etc.
24 |
25 | Por ejemplo, una computadora que cuestra `USD $1000` y se estima una vida útil de 2 años = 24 meses
26 |
27 | De acuero a esto, calculamos el costo de la computadora al mes
28 |
29 | Costo PC mes = $1000 / 24 = $41,667
30 |
31 | 4. **Agrega 20% de ganancias**
32 | Los costos anteriores se van a pagar en herramientas y equipo humano. Necesitas ganancias, sin ganancias habrás trabajado gratis. 20% es el **mínimo** razonable
33 |
34 |
35 | 5. **Agrega 10% de extra para negociación**
36 | Siempre el cliente quiere pedir rebaja. Necesitarás un margen para negociar con el cliente. Si el presupuesto es exacto y el cliente le pide rebaja, quedarás en pérdida.
37 |
38 |
39 | 6. **Agrega los impuestos**
40 | El gobierno siempre nos va a pedir su parte. Suma todo lo anterior y aumentale el porcentaje de impuestos de acuerdo a tu paías. El resultado de todo lo anterior es la cotización que le puedes ofrecer al cliente.
41 |
42 |
43 | 7. **BONUS**
44 | - SIEMPRE cobra un anticipo (Nunca cobres al final)
45 | - Firma un contrato especificando los requerimientos, el plazo de entrega, las condiciones del servicio y el cronograma de pagos. *¡Todo debe estar en el contrato!*, es el respaldo que se tiene.
46 |
47 |
48 |
49 | ## ¿Cuánto cobrar por un proyecto?
50 |
51 | Muchas veces no sabemos cuánto cobrar por un proyecto, la siguiente guía nos dará una noción sobre cuánto podemos cobrar por un desarrollo.
52 |
53 | 1. Saber el salario promedio de un programador en tu país
54 |
55 | Por ejemplo, en Colombia el salario promedio es de `USD $1000`, por colocar un ejemplo
56 |
57 | En base a esto calculamos el salario anual
58 |
59 | Salario al año = $1000 * 12 meses = $120000/año
60 |
61 | Si un año tiene 52 semanas, y de esas 2 las tomamos de vacaciones nos quedará 50 semanas de trabajo.
62 |
63 | Si se trabajan 40 horas por semana, tendremos una cantidad de **2000 horas** laborales en el año
64 |
65 | Entonces basado en eso, calculamos el precio por hora
66 |
67 | `Precio Hora = $12000 / 2000 = $6 / hora`
68 |
69 |
70 | Ya como tenemos eso, debemos incluir los **impuestos**
71 |
72 | Si se suma el 30% de impuestos, el precio de la hora quedaría
73 |
74 | `$6 * 1.3 = 7.8 = $8 / hora (Redondeado)`
75 |
76 | *Teniendo definido el precio por hora, ya es cuestión de estimar la duración que puede tener el proyecto en horas*
77 |
78 | Si es un proyecto entero, es mejor acolchonar el tiempo que se ha estimado, porque pueden resultar algunas condiciones que pueden hacer que el proyecto dure más de los esperado y, en consecuencia tener pérdidas. En cambio, si se llega a hacer en menos tiempo, vas a tener unas horas extras "pagas" que pueden ayudar bastante en los momentos donde no haya trabajo, haciendo que no esté sin nada de dinero en este tiempo. Pero es bueno saber administrar el dinero que le llega apartando una porción para cada necesidad.
79 |
80 | Finalmente, cuando ganes más experiencia es bueno considerar aumentar los honorarios.
--------------------------------------------------------------------------------
/tips_git.md:
--------------------------------------------------------------------------------
1 |
2 | # TIPS GIT
3 |
4 | _Son comandos generales usados en git, aquí están para recordarlos fácilmente y tenerlos a la mano._
5 |
6 | - **git config --global color.ui true** // Configuramos el color de git, parahacerlo más didáctico
7 |
8 | - **cd** -> Nos permite movernos dentro de carpetas.
9 | - **cd..** -> Salimos de la captea
10 | - **mkdir name-folder** -> Crea una carpeta
11 | - **ls** -> Muestra el listado de las carpetas
12 | - **clear** -> Limpia la terminal
13 | - **Ctrl + L** -> Limpia la terminal
14 | - **touch name-file** -> Permite crear archivos
15 | - **rm name-file** -> Elimina archivos
16 | - **rm -rf name-folder** -> Elimina la carpeta
17 |
18 | - **:wq** -> Guarda los cambios de los archivos cuando se trabaja con vim
19 |
20 | __*Nunca usar rm -rf / o se despiden de su pc*__
21 |
22 | ## VIM
23 | **i** = para poder editar
24 |
25 | **:wq** = para guardar y salir
26 |
27 | **:q!** = para salir sin guardar
28 |
29 | - **git init name_repositorio** -> Crea el repositorio con un nombre en específico
30 | - **git status** -> Vemos el estado de los archivos
31 |
32 | Untracked files -> Archivos en el working directory, no han sido agregados a git
33 |
34 | - **git add -A** -> Agrega todos los archivos del working directory al staging area
35 | - **git add name_file** -> Deja los archivos listos para agregarlos al repositotio (Staging area)
36 | - **git rm --cached [file]** -> Quita el archivo del area de preparacion
37 | git rm -f -> Elimina los archivos del area de trabajo y el area de preparacion
38 |
39 | - **git commit -m [message]** -> Confirmamos los cambios para agregar los archivos al repositorio
40 | - **start [filename]** -> Abrimos un archivo con el programa que tengamos predefinido en el SO
41 |
42 | - **git commit --amend** -> Concatena un commit anterior con el nuevo, dejando solo uno en caso de que te hayas olvidado agregar un archivo
43 |
44 | ## Etiquetas (git tag)
45 | Hay dos tipos de etiquetas
46 | * Ligeras
47 | * Anotadas
48 |
49 | - **git tag [version]** -> Etiqueta ligera
50 | - **git tag -a [version] -m [mensaje]** -> Etiqueta anotada
51 | - **git tag -l** -> Muestra el listado de las etiquetas
52 |
53 |
54 | ## Etiquetar un commit
55 | - **git tag [version] [SHA-1 Commit]**
56 | - **git tag -d [name tag]** -> Elimina la etiqueta
57 | - **git tag -f -a [name tag] -m [mensaje]** -> Renombra la etiqueta
58 |
59 | ## Historia de nuestro proyecto (git log)
60 | - **git log** -> Muestra los registros de los commits
61 | - **git log --oneline** -> Muestra solo el mensaje del commit
62 | - **git log --oneline --graph** -> Muestra los gradicos de la historia de los commits
63 | - **git log -[numero]** -> Muestra los ultimos registros de los commits
64 | - **git log --oneline --graph --decorate** -> Muestra los gráficos del historial y los nombres de las ramas
65 |
66 | ## Revisando Cambio entre versiones (git diff)
67 | Compara el estado inicial con el estado que queremos comparar
68 |
69 | - **git diff [SHA-1]**
70 | - **git diff [SHA-1] [SHA-1]**
71 |
72 | ## Quita un cambio (commits), y lo deja en el staging area (git reset --soft)
73 | * --soft
74 | * --mixed
75 | * --hard
76 |
77 | - **git reset --soft [SHA 1]**: elimina los cambios hasta el staging area
78 | - **git reset --mixed [SHA 1]**: elimina los cambios hasta el working area
79 | - **git reset --hard [SHA 1]**: regresa hasta el commit del [SHA 1]
80 |
81 | Es importante conocer los SHA-1, en el caso de borrar los registros con git reset--hard,
82 | también podemos recuperar los registros con este mismo comando, usando el SHA-1, mas reciente
83 |
84 | ## Configurar otro editor de texto en Git
85 | - **git config --global core.editor "subl --wait"** Configurar sublime como editor por defecto de git
86 |
87 | ## Ramas (Multiples variantes del repositorios) git branch
88 | - **git branch [name]** -> Crea una rama
89 | - **git branch -l** -> Muestra todas las ramas
90 | - **git branch -d [name]** -> Elimina una rama
91 | - **git branch -D [name]** -> Forza el borrado de una rama
92 | - **git branch -m [name] [new name]** -> Renombra las ramas
93 |
94 | ## Moviéndonos entre ramas y versiones (git checkout)
95 | - **git checkout [branch/tag/SHA-1]** -> Cambiamos de rama, commit, o etiqueta
96 | - **git checkout -b [name]** -> Crea y cambiamos a esa rama
97 |
98 |
99 | ## Mezclando ramas y resolviendo conflictos (git merge)
100 | Para mezclar los cambios deberíamos usar el comando git merge. Las instrucciones sería pararnos desde la rama que queremos mezclar y hacer un git merge con la rama que pretendemos usar.
101 |
102 | - **git merge [branch]**
103 |
104 | ## Reescribe la historia de tu proyecto (git rebase)
105 | - **git rebase [branch]** -> hace prácticamente lo mismo que merge, cambiamos la historia de nuestro proyecto sin crear bifurcaciones del proyecto. Es mejor usar merge
106 | - **git rebase -i [branch]** -> de manera interactiva, nos abrira el editor que tengamos definido en la configuración de git.
107 |
108 | ## Guardando cambios temporalmente (git stash)
109 | Stash es un estado que tenemos como intermedio. Para esto debemos ir a alguna de nuestras ramas y usando
110 | el comando git stash que nos permite hacer cambios, pero no confirmarlos.
111 |
112 | - **git stash** -> Es otro de los limbos, como el staging area. Para agregar los cambios estos deben estar en el staging area.
113 | - **git stash list** -> nos muestra la lista de stash que tengamos.
114 | - **git stash drop stash@{numero}** -> nos permite borrar un stash.
115 | - **git stash apply** -> aplicamos el último cambio
116 | - **git stash apply ** -> Aplica el cambio seleccionado
117 |
118 | ## Eligiendo commits selectivamente (Cherry pick)
119 | Si estás trabajando en una rama, pero de repente notas que hiciste un cambio en la rama que no debías,
120 | para esto podemos usar cherry pick. Este comando nos puede salvar la vida, ya que nos permite sacar
121 | cambios específicos de una rama y mezclarlos en otra.
122 |
123 | - **git cherry-pick [SHA1]** -> Cambia un commit a otra rama, lo copia
124 |
125 | ## Clonando Repositorios Remotos
126 |
127 | - **git clone [HTTPS/SSH]**
128 |
129 | ## Generar clave ssh
130 |
131 | - **ssh-keygen -t rsa -b 4096 -C "email@email.com"** -> Genera una clave SSH
132 | - **clip < ~/.ssh/id_rsa.pub** -> Copia la clave pública
133 |
134 | ## Repositorios Locales y remotos
135 |
136 | - **git remote add [origin] [SSH/HTTPS]** -> Conecta un repositorio con nuestro equipo local.
137 | - **git remote -v** -> Lista las conexiones existentes.
138 | - **git remote remove [origin]** -> Elimina una conexión con algún repositorio.
139 |
140 | ## Trayendo cambios desde el repositorio remoto
141 |
142 | - **git fetch [origin] [master]** -> Descarga los cambios a una rama generalmente llamada origin/master, seguido de esto tienes que fuisonar esa rama
143 | - **git pull [origin] [master]** Es como ejecutar los 2 pasos anteriores(fetch y merge) en uno solo
144 | - **git merge origin/master --allow-unrelated-histories** -> Mezcla la rama master del repositorio remoto con la de nuestro repositorio, esto se hace cuando usamos el comando git fetch
145 |
146 | ## Enviando cambios al repositorio remoto
147 |
148 | - **git push origin master** -> Enviamos los cambios que tengamos en nuestro repositorio local
149 | - **git push origin --tags** -> Enviamos las etiquetas que tengamos
150 | - **git push origin [branch]** -> Enviamos una rama
151 |
152 | ## Creando un template para Pull Request
153 |
154 | 1. Crear archivo llamado pull_request_template.md
155 | 2. Definir los lineamientos usando sintaxis markdown
156 | 3. Hacer commit
157 |
158 | ## Creando un template para issues
159 | Lo ideal es que siempre que creemos un proyecto tengamos un template para enviar pull requests o cuando tengamos issues.
160 |
161 | **issue_template.md**
162 |
163 |
164 | ## .gitignore (Ignorando archivos no deseados)
165 |
166 | Si tienes archivos que no pueden ser públicos, como archivos de configuración con contraseñas, lo ideal es que no los subas a tu repositorio, estos archivos los puedes poner en el archivo .gitignore.
167 | https://www.gitignore.io/
168 |
169 | ## Issues y Milestones (Reportando y monitoreando errores eficientemente)
170 | - **Issues:** Sirve para reportar un problema o sugerir algún cambio que para el repositorio.
171 | - **Milestones:** Forma para agrupar Issues o Pull Request.
172 |
173 | ## Github Pages y Dominios personalizados en Github
174 |
175 | Además de servirme como hosting de páginas estáticas con [Github Pages](https://pages.github.com/), GitHub me permite personalizar la URL de mi GitHub Pages. ¿Cómo hacemos eso?
176 |
177 | 1. Primero debo comprar el dominio, por ejemplo lo compro en namecheap.com.
178 |
179 | 2. En el dashboard de namecheap vamos a *Manage* de nuestro dominio, vamos a *Advanced DNS*.
180 |
181 | 3. Allí debemos colocar en `A Record` el valor de la ip del servidor de github. Y en `CNAME Record`, el dominio a enlazar (*midominio.com*)
182 |
183 | 4. En **GitHub** vamos a *Settings* y damos clic en agregar una URL personalizada.
184 | 5. En la raíz del proyecto, creamos el archivo `CNAME` y en él ponemos la URL del dominio que compramos, por ejemplo `midominio.com`.
185 |
186 | Sólo eso, y ya debemos esperar a que se enlacen los servicios y, el tiempo depende del la empresa que nos lo ofrece.
187 |
188 | Desde la consola de comandos de windows, podemos verificar la ip, que tenemos asignada.
189 | - **ping username.github.io** -> Para verificar la ip asignada
190 | - **nslookup username.github.io** -> Verifica las ip del servidor
191 |
192 | ### Dominios personalizados configurados con `A Records`
193 |
194 | Si se configura un dominio personalizado utilizando un A Record, el A Record debe apuntar a una de las siguientes direcciones IP
195 |
196 | * 185.199.108.153
197 | * 185.199.109.153
198 | * 185.199.110.153
199 | * 185.199.111.153
200 |
201 |
202 |
--------------------------------------------------------------------------------
/trabajo_programacion.md:
--------------------------------------------------------------------------------
1 | # Cómo conseguir trabajo en Programación
2 |
3 | ## ¿Qué necesitas para comenzar?
4 |
5 | Hoy la tecnología nos permite trabajar desde dónde estemos.
6 |
7 | - Trabajar desde tu lugar de origen
8 | - Trabajo de alto valor
9 | - Haz lo que te gusta
10 | - Haz tu propiia empresa o se parte de un gran proyecto
11 |
12 |
13 | **¿Cómo es la vida de desarrollo en el Silicon Valley?**
14 |
15 | - Optimiza el software que tiene todo el tiempo
16 | - Constante aprendizaje y actualización técnica
17 |
18 |
19 | **Qué hace diferente al programador del Silicon Valley?**
20 |
21 | - Su curiosidad
22 | - Su habilidad para resolver problemas
23 | - Enfoque de resultados
24 | - Explorar herramientas y formas de hacer las cosas
25 |
26 | > El sentido de experimentar, tener curiosidad e ir a hablar con clientes.
27 |
28 |
29 | **Información**
30 |
31 | - ¿Cómo puedo estar al día?
32 | - TechCrunch
33 | - Reddit
34 | - ProductHunt
35 | - Colaborar activamente y desarrollar nuevas ideas.
36 |
37 |
38 | ## Networking & Social Media
39 |
40 | - **¿Qué es un networking?**
41 |
42 | - Eventos, meetups, conferencias
43 | - Tendencias y líderes de opinión
44 | - Identifica y crea amigos con intereses comunes
45 |
46 |
47 | **¿Dónde puedo operar?**
48 | Tu trabajo, hoy en día lo puedes hacer donde quieras en el mundo
49 | - En mi localidad
50 | - Explorar un centro de emprendimiento local
51 | - Explorar el mundo y desarrollar una visión global.
52 |
53 |
54 | **Oportunidades para crear una carrera como Desarrollador de clase mundial**
55 | ¿Cómo crear valor?
56 | - Crear una experiencia de usuario UX interesante
57 | - Desarrolla para los temas de la actualidad
58 | - VR
59 | - AI
60 | - Big Data
61 | - Crear ambientes de operación en el back-end
62 |
63 |
64 |
65 | ## Minimum Viable Mindset
66 |
67 | Tu minimum viable mindset para ser un **gran desarrollar**
68 |
69 | > Pensar en hacer un gran producto requiere
70 | - Un buen diseño
71 | - Una operación confiable y eficiente que resuelva en forma simple un buen problema.
72 |
73 | - [The Minimum Viable Mindset](https://es.slideshare.net/zavala55/the-minimum-viable-mindset)
74 |
75 |
76 | - **Qué tan hambriento estás?**
77 | - ¿Conversas tus aspiraciones con expertos?
78 | - ¿Tienes un mentor?
79 | - ¿Cómo aprendes a hacer software?
80 | - ¿Valoras tus fracasos como fuentes de aprendizaje?
81 |
82 | **Tu estado de ánimo**
83 | Tu mindset determina tu éxito
84 |
85 | **Éxito = aprendizaje+práctica**
86 |
87 | ## Construyendo tu perfil
88 |
89 | - Tu portafolio
90 | - Un portafolio de proyectos
91 | - Github, LinkedIn
92 | - Lenguajes
93 | - Bases de datos
94 | - Métodos de trabajo
95 | - Herramientas
96 |
97 | > El mundo de la programación, no es el mundo de lo que sabes, es el mundo de la aplicación de tus conocimientos.
98 |
99 | Sólo tus proyectos te abren puertas y muestras quién eres como programador.
100 |
101 |
102 | ### Entrevista y caso de éxito
103 |
104 | Ser programador no es sólo poner líneas de código, es poder transformar la vida de las personas.
105 |
106 | - redglobalmxsf: https://www.facebook.com/redglobalmxsf/
107 | - tieeco: https://www.tieeco.org/
108 | - siliconvalleyforum: https://siliconvalleyforum.com/
109 | - ecorner: https://ecorner.stanford.edu/
110 |
111 |
112 | ### Tips para ser freelance en programación
113 |
114 | - Sitios para hacer Freelance
115 | - **workana**: https://www.workana.com/
116 | - **toptal**: https://www.toptal.com/
117 | - **freelancer**: https://www.freelancer.es/
118 | - **upwork**: https://www.upwork.com/
119 | - **freelancer**: https://www.freelancer.com/
120 |
121 |
122 | - Sitios para Resolver Retos
123 | - **kaggle**: https://www.kaggle.com/
124 | - **Codecombat**: https://codecombat.com/
125 | - **fightcodegame**: https://www.fightcodegame.com/
126 | - **battlecode**: http://www.battlecode.org/
127 | - **Hackerrank** https://www.hackerrank.com/
128 |
--------------------------------------------------------------------------------