PageSourceSearch

https://www.sololattices.com/coding-for-engineers/curso-videos.js?v=17

js sololattices.com collected 2026-10-07 22:07:34 UTC 27,621 bytes, 474 lines download raw bytes

1/* ================================================================
2   curso-videos.js — Catálogo central de vídeos del curso.
3
4   ÚNICA fuente de verdad de los vídeos. Los archivos de datos
5   (curso-datos.js / curso-datos-en.js) solo guardan la referencia:
6       { t:"video", ref:"cpu-ciclo" }
7
8   Estructura de cada entrada:
9     "<ref>": {
10        es: <variante en castellano>  |  null si no hay,
11        en: <variante en inglés>      |  null si no hay
12     }
13
14   Una variante es un vídeo HABLADO en ese idioma:
15     yt    · id de YouTube
16     start · segundo de inicio (opcional)
17     canal · nombre del canal
18     min   · duración, en el idioma de la interfaz { es, en }
19     tit   · título mostrado, en el idioma de la interfaz { es, en }
20     nota  · texto bajo el vídeo, en el idioma de la interfaz { es, en }
21
22   OJO: tit/min/nota van por idioma de INTERFAZ, no del vídeo. Un vídeo
23   inglés visto desde el curso español muestra su ficha en castellano.
24
25   Reglas de resolución (curso-app.js · renderVideo):
26     · Curso ES → pestaña ES por defecto; EN como segunda pestaña.
27     · Curso EN → pestaña EN por defecto; ES como segunda pestaña.
28     · Si falta la variante del idioma activo, se usa la otra en
29       silencio y no se muestra conmutador.
30   ================================================================ */
31"use strict";
32
33window.VIDEOS = {
34  "tedx-kayser": {
35    es: null,
36    en: {
37      yt:"69OAhVh6POY",
38      canal:"TEDxTUM · Lin Kayser",
39      min:{ es:"~13 min", en:"~13 min" },
40      tit:{ es:"Construyamos máquinas tan complejas como la naturaleza",
41            en:"Let's build machines as complex as nature" },
42      nota:{ es:"La charla TED del propio autor del libro. Explica, con ejemplos visuales impresionantes, qué es la Ingeniería Computacional y por qué va a transformar la ingeniería. Está en inglés: activa los subtítulos en español desde el icono de ajustes del reproductor de YouTube.",
43             en:"The TED talk by the very author of the book. With impressive visual examples, it explains what Computational Engineering is and why it is going to transform engineering." }
44    }
45  },
46
47  "cpu-ciclo": {
48    es: {
49      yt:"-URf73z9tKY",
50      canal:"Aprende conmigo Informática",
51      min:{ es:"~10 min", en:"~10 min" },
52      tit:{ es:"La CPU: cómo ejecuta una instrucción (captar, descodificar, ejecutar)",
53            en:"The CPU: how it executes an instruction (fetch, decode, execute)" },
54      nota:{ es:"Para ver «por dentro» lo que cuenta esta lección: cómo la CPU capta instrucciones y datos y los procesa paso a paso. Va algo más a fondo de lo necesario; quédate con la idea del ciclo captar → descodificar → ejecutar.",
55             en:"To see \"inside\" what this lesson describes: how the CPU fetches instructions and data and processes them step by step. It goes a bit deeper than necessary; keep the idea of the fetch → decode → execute cycle." }
56    },
57    en: {
58      yt:"jFDMZpkUWCw",
59      canal:"Computer Science Lessons",
60      tit:{ es:"El ciclo de la CPU, paso a paso: captar, descodificar, ejecutar",
61            en:"The CPU cycle step by step: fetch, decode, execute" },
62      nota:{ es:"Animación de lo que cuenta esta lección: cómo la CPU capta cada instrucción, la descodifica y la ejecuta. Entra en detalle de registros; quédate con la idea del ciclo completo.",
63             en:"An animation of what this lesson describes: how the CPU fetches each instruction, decodes it and executes it. It goes into register-level detail; keep the idea of the whole cycle." }
64    }
65  },
66
67  "variables-tipos": {
68    es: {
69      yt:"QOExkIgWKHM",
70      canal:"Tec Gurus",
71      min:{ es:"~12 min", en:"~12 min" },
72      tit:{ es:"Variables y tipos de datos en programación",
73            en:"Variables and data types in programming" },
74      nota:{ es:"Refuerza la idea de variable como «caja con nombre y tipo». Los ejemplos no son de C#, pero el concepto es idéntico en todos los lenguajes.",
75             en:"It reinforces the idea of a variable as a \"box with a name and type\". The examples are not in C#, but the concept is identical in all languages." }
76    },
77    en: {
78      yt:"Fc9htmvVZ9U",
79      canal:"CS50",
80      tit:{ es:"Tipos de datos: qué cabe en una variable y cuánto ocupa",
81            en:"Data types: what fits in a variable and how much space it takes" },
82      nota:{ es:"De la serie de vídeos cortos de CS50 (Harvard). Explica por qué cada variable tiene un tipo y qué impl
82ica eso en memoria. C# funciona exactamente así: tipado estático.",
83             en:"From CS50's (Harvard) short-video series. It explains why every variable has a type and what that means in memory. C# works exactly this way: static typing." }
84    }
85  },
86
87  "poo-intro": {
88    es: {
89      yt:"uNlB7141umY",
90      canal:"Soy Dalto",
91      min:{ es:"~10 min", en:"~10 min" },
92      tit:{ es:"Programación orientada a objetos explicada en 10 minutos",
93            en:"Object-oriented programming explained in 10 minutes" },
94      nota:{ es:"Un repaso visual y rápido del paradigma que estás leyendo: clases, objetos y los pilares de la orientación a objetos. Ideal para fijar las ideas antes de hacer los ejercicios.",
95             en:"A quick visual review of the paradigm you are reading about: classes, objects and the pillars of object orientation. Ideal for fixing the ideas in place before doing the exercises." }
96    },
97    en: {
98      yt:"pTB0EiLXUC8",
99      canal:"Programming with Mosh",
100      tit:{ es:"La programación orientada a objetos, explicada sin rodeos",
101            en:"Object-oriented programming, simplified" },
102      nota:{ es:"Repaso visual y rápido del paradigma que estás leyendo: clases, objetos y por qué existe la orientación a objetos. Ideal para fijar las ideas antes de los ejercicios.",
103             en:"A quick visual review of the paradigm you are reading about: classes, objects and why object orientation exists. Ideal for fixing the ideas in place before the exercises." }
104    }
105  },
106
107  "compilador-interprete": {
108    es: {
109      yt:"yco1-Xd3Ew4",
110      canal:"Minor Hernández Navarro",
111      min:{ es:"~8 min", en:"~8 min" },
112      tit:{ es:"Compilador vs. intérprete: diferencias clave",
113            en:"Compiler vs. interpreter: key differences" },
114      nota:{ es:"Visualiza la diferencia entre compilar (traducir todo de golpe, como hace C#) e interpretar (traducir sobre la marcha, como hace Python).",
115             en:"It visualises the difference between compiling (translating everything at once, as C# does) and interpreting (translating on the fly, as Python does)." }
116    },
117    en: {
118      yt:"I1f45REi3k4",
119      canal:"Coding Mentors",
120      tit:{ es:"Compilador frente a intérprete: la diferencia clave",
121            en:"Compiler vs interpreter: the key difference" },
122      nota:{ es:"Visualiza la diferencia entre compilar (traducir todo de golpe, como hace C#) e interpretar (traducir sobre la marcha, como hace Python).",
123             en:"It visualises the difference between compiling (translating everything at once, as C# does) and interpreting (translating on the fly, as Python does)." }
124    }
125  },
126
127  "csharp-primeros-pasos": {
128    es: {
129      yt:"L-f8u0hwi4Y",
130      start:365,
131      canal:"MoureDev · Brais Moure",
132      min:{ es:"~1 h · ve el tramo del entorno", en:"~1 h · watch the environment section" },
133      tit:{ es:"Curso de C# desde cero: primeros pasos",
134            en:"C# course from scratch: first steps" },
135      nota:{ es:"Tutorial práctico de uno de los mejores divulgadores de programación en español. El vídeo arranca en el punto en que se prepara el entorno y se escribe el primer programa en C#, con la pantalla a la vista para que lo hagas en paralelo. Tenlo a mano durante todo el Módulo 1.",
136             en:"A hands-on tutorial by one of the best programming educators in Spanish. The video starts at the point where the environment is set up and the first C# program is written, with the screen in view so you can do it in parallel. Keep it handy throughout Module 1." }
137    },
138    en: {
139      yt:"ZVGutgqBMUM",
140      canal:"Visual Studio Code",
141      tit:{ es:"Preparar el entorno: C# y .NET en VS Code, paso a paso",
142            en:"Setting up: C# and .NET in VS Code, step by step" },
143      nota:{ es:"Guía oficial del equipo de VS Code: instalar el SDK de .NET, añadir la extensión de C# y ejecutar tu primer programa. Es justo lo que necesitas para el Ejercicio 0.",
144             en:"The official guide from the VS Code team: install the .NET SDK, add the C# extension and run your first program. Exactly what you need for Exercise 0." }
145    }
146  },
147
148  "poo-pilares": {
149    es: {
150      yt:"SI7O81GMG2A",
151      canal:"BitBoss",
152      min:{ es:"~15 min", en:"~15 min" },
153      tit:{ es:"POO: abstracción, encapsulamiento, herencia y polimorfismo",
154            en:"OOP: abstraction, encapsulation, inheritance and polymorphism" },
155      nota:{ es:"Una panorámica de los cuatro pilares de la programación orientada a objetos. Te da el mapa completo de lo que vas a aprender en todo este módulo.",
156             en:"An overview of the four pillars of object-oriented programming. It gives you the complete map of what you are going to learn throughout this module." }
157    },
158    en: {
159      yt:"1ONhXmQuWP8",
160      canal:"Keep On Coding",
161      tit:{ es:"Los cuatro pilares de la POO: abstracción, encapsulamiento, herencia y polimorfismo",
162            en:"The four pillars of OOP: abstraction, encapsulation, inheritance and polymorphism" },
163      nota:{ es:"Recorre los cuatro pilares con ejemplos de código en pantalla. Son los cuatro conceptos que sostienen todo lo que viene a partir de aquí.",
164             en:"It walks through the four pillars with code examples on screen. These are the four concepts that underpin everything from here on." }
165    }
166  },
167
168  "csharp-herencia": {
169    es: {
170      yt:"jvfUsKQgj88",
171      canal:"Píldoras Informáticas",
172      min:{ es:"~14 min", en:"~14 min" },
173      tit:{ es:"Curso C#: herencia — concepto y explicación teórica",
174            en:"C# course: inheritance — concept and theoretical explanation" },
175      nota:{ es:"Una explicación pausada de la herencia en C#, de uno de los canales de formación más veteranos en español. Refuerza la idea de clase base y clase derivada.",
176             en:"A measured explanation of inheritance in C#, from one of the most veteran training channels in Spanish. It reinforces the idea of base class and derived class." }
177    },
178    en: {
179      yt:"EvSyka9vJho",
180      canal:"Bro Code",
181      tit:{ es:"Herencia en C#: clase base y clases derivadas",
182            en:"Inheritance in C#: base class and derived classes" },
183      nota:{ es:"Herencia con un ejemplo mínimo y directo en C#. Fíjate en cómo la clase derivada reutiliza lo de la base sin repetir una línea de código.",
184             en:"Inheritance with a minimal, direct example in C#. Notice how the derived class reuses the base without repeating a single line of code." }
185    }
186  },
187
188  "polimorfismo": {
189    es: {
190      yt:"tjjecfz9Cvk",
191      canal:"Fredy Geek",
192      min:{ es:"~9 min", en:"~9 min" },
193      tit:{ es:"¿Qué es el polimorfismo?",
194            en:"What is polymorphism?" },
195      nota:{ es:"El polimorfismo explicado de forma visual y breve: cómo una misma función se comporta distinto según el tipo real del objeto.",
196             en:"Polymorphism explained in a visual and brief way: how the same function behaves differently depending on the real type of the object." }
197    },
198    en: {
199      yt:"nYCMW3kfTvs",
200      canal:"Bro Code",
201      tit:{ es:"Polimorfismo en C#: un mismo método, comportamientos distintos",
202            en:"Polymorphism in C#: one method, different behaviours" },
203      nota:{ es:"El polimorfismo directamente en C#, así que ves la sintaxis exacta que vas a escribir tú. Es el pilar que más cuesta al principio: míralo dos veces si hace falta.",
204             en:"Polymorphism directly in C#, so you see the exact syntax you will write yourself. It is the pillar that takes longest to click: watch it twice if you need to." }
205    }
206  },
207
208  "csharp-interfaces": {
209    es: {
210      yt:"Yd5TBVTvfF4",
211      canal:"Felipe Gavilán",
212      min:{ es:"~13 min", en:"~13 min" },
213      tit:{ es:"Entendiendo las interfaces en C#",
214            en:"Understanding interfaces in C#" },
215      nota:{ es:"Las interfaces en C# explicadas con ejemplos en código, por uno de los formadores de C# en español más reconocidos. Ideal para ver en pantalla lo que acabas de leer.",
216             en:"Interfaces in C# explained with code examples, by one of the most recognized C# trainers in Spanish. Ideal for seeing on screen what you have just read." }
217    },
218    en: {
219      yt:"RuhGv81tpoU",
220      canal:"Bro Code",
221      tit:{ es:"Interfaces en C#: el contrato que una clase se compromete a cumplir",
222            en:"Interfaces in C#: the contract a class commits to" },
223      nota:{ es:"Qué es una interfaz y para qué sirve, con varias clases implementando el mismo contrato. En Ingeniería Computacional son la forma de tratar geometrías distintas con el mismo código.",
224             en:"What an interface is and what it is for, with several classes implementing the same contract. In Computational Engineering they are how you handle different geometries with the same code." }
225    }
226  },
227
228  "agil-vs-cascada": {
229    es: {
230      yt:"fPPPJWViewA",
231      canal:"Alberto Vázquez · Openinnova",
232      min:{ es:"~9 min", en:"~9 min" },
233      tit:{ es:"Metodología ágil frente a cascada",
234            en:"Agile methodology versus waterfall" },
235      nota:{ es:"El contraste entre el modelo en cascada (planificarlo todo antes de empezar) y el enfoque iterativo. Es justo la diferencia de mentalidad que explica esta lección.",
236             en:"The contrast between the waterfall model (planning everything before starting) and the iterative approach. It is exactly the mindset difference that this lesson explains." }
237    },
238    en: {
239      yt:"XGOxLyWFfl0",
240      canal:"Hussein Nasser",
241      tit:{ es:"Ágil frente a cascada: dos formas de organizar un proyecto",
242            en:"Agile vs waterfall: two ways to organise a project" },
243      nota:{ es:"Un ingeniero de software contando ambas metodologías con ventajas, inconvenientes y ejemplos reales de proyecto. Explica por qué el desarrollo iterativo acabó imponiéndose.",
244             en:"A software engineer walking through both methodologies with pros, cons and real project examples. It explains why iterative development ended up winning." }
245    }
246  },
247
248  "csharp-enum": {
249    es: {
250      yt:"gj1AA7ZkuSc",
251      canal:"Píldoras Informáticas",
252      min:{ es:"~12 min", en:"~12 min" },
253      tit:{ es:"Curso C#: el tipo enum",
254            en:"C# course: the enum type" },
255      nota:{ es:"El tipo enum en C#, paso a paso: cómo se declara, cómo se usa y por qué conviene cuando un valor solo puede tomar unas pocas opciones concretas.",
256             en:"The enum type in C#, step by step: how it is declared, how it is used and why it is useful when a value can only take a few specific options." }
257    },
258    en: {
259      yt:"3p0OJErAbEI",
260      canal:"Bro Code",
261      tit:{ es:"El tipo enum en C#: nombres en lugar de números sueltos",
262            en:"The enum type in C#: names instead of loose numbers" },
263      nota:{ es:"Declaración de un enum, sus valores subyacentes y su uso dentro de un switch. Sirve para que el código se lea como lo que significa, no como una lista de números.",
264             en:"Declaring an enum, its underlying values and using it inside a switch. It makes your code read as what it means, not as a list of numbers." }
265    }
266  },
267
268  "voxeles": {
269    es: {
270      yt:"nUc6iPox0js",
271      canal:"lucasmelor",
272      min:{ es:"~8 min", en:"~8 min" },
273      tit:{ es:"Vóxeles: una tecnología que imita la realidad",
274            en:"Voxels: a technology that mimics reality" },
275      nota:{ es:"Para visualizar bien la idea de vóxel —el «píxel en 3D»— antes de empezar a crear geometría con PicoGK.",
276             en:"To properly picture the idea of a voxel —the \"pixel in 3D\"— before starting to create geometry with PicoGK." }
277    },
278    en: {
279      yt:"M3iI2l0ltbE",
280      canal:"Sebastian Lague",
281      tit:{ es:"De la rejilla de vóxeles a la malla: marching cubes",
282            en:"From voxel grid to mesh: marching cubes" },
283      nota:{ es:"Enseña visualmente cómo se guarda un volumen en una rejilla 3D de valores y cómo se extrae de ahí una superficie. Es exactamente el paso que da PicoGK al convertir tus vóxeles en geometría exportable.",
284             en:"It shows visually how a volume is stored in a 3D grid of values and how a surface is extracted from it. This is exactly the step PicoGK takes when turning your voxels into exportable geometry." }
285    }
286  },
287
288  "csharp-bucle-for": {
289    es: {
290      yt:"XZozP-IHl38",
291      canal:"PrograLabs",
292      min:{ es:"~7 min", en:"~7 min" },
293      tit:{ es:"¿Cómo funciona un bucle for en C#?",
294            en:"How does a for loop work in C#?" },
295      nota:{ es:"El bucle for explicado paso a paso: las tres partes del paréntesis y cómo se repite el bloque de código. Es la estructura que usas para generar mucha geometría sin repetirte.",
296             en:"The for loop explained step by step: the three parts of the parentheses and how the code block repeats. It is the structure you use to generate lots of geometry without repeating yourself." }
297    },
298    en: {
299      yt:"yuRdCZMuak0",
300      canal:"dotnet",
301      tit:{ es:"El bucle for en C#: inicialización, condición e incremento",
302            en:"The for loop in C#: initialisation, condition and increment" },
303      nota:{ es:"Del canal oficial de .NET. Las tres partes de un bucle for y cuándo conviene usarlo. Lo vas a usar constantemente para recorrer geometría punto a punto.",
304             en:"From the official .NET channel. The three parts of a for loop and when to use it. You will use it constantly to walk through geometry point by point." }
305    }
306  },
307
308  "archivo-stl": {
309    es: {
310      yt:"wXUPUaSuQCM",
311      canal:"SHARE HORIZONS",
312      min:{ es:"~6 min", en:"~6 min" },
313      tit:{ es:"Qué es un archivo STL",
314            en:"What an STL file is" },
315      nota:{ es:"Para entender el formato STL —la malla de triángulos— que vas a cargar en el Fixture Maker. Es el formato estándar para intercambiar geometría 3D.",
316             en:"To understand the STL format — the triangle mesh — that you will load into the Fixture Maker. It is the standard format for exch
316anging 3D geometry." }
317    },
318    en: {
319      yt:"Gkjyi-6bl6Q",
320      canal:"Joko Engineeringhelp",
321      tit:{ es:"Formatos 3D: qué es un STL y en qué se diferencia de STEP, IGES u OBJ",
322            en:"3D file formats: what an STL is and how it differs from STEP, IGES and OBJ" },
323      nota:{ es:"Sitúa el STL entre los formatos de ingeniería: malla de triángulos frente a sólido paramétrico. Entender esa diferencia es clave antes de exportar tus piezas.",
324             en:"It places STL among the engineering formats: triangle mesh versus parametric solid. Understanding that difference matters before you export your parts." }
325    }
326  },
327
328  "matrices-transformacion": {
329    es: {
330      yt:"bCf4N53Uw2k",
331      canal:"Señales y Sistemas",
332      min:{ es:"~10 min", en:"~10 min" },
333      tit:{ es:"Matrices de transformación",
334            en:"Transformation matrices" },
335      nota:{ es:"Para ver de dónde sale la magia: cómo una matriz codifica una traslación, una rotación o un escalado. En C# no tendrás que hacer estas cuentas a mano, pero entenderlas ayuda.",
336             en:"To see where the magic comes from: how a matrix encodes a translation, a rotation or a scaling. In C# you will not have to do these calculations by hand, but understanding them helps." }
337    },
338    en: {
339      yt:"kYB8IZa5AuE",
340      canal:"3Blue1Brown",
341      tit:{ es:"Transformaciones lineales y matrices",
342            en:"Linear transformations and matrices" },
343      nota:{ es:"Del canal 3Blue1Brown, la referencia visual del álgebra lineal. Muestra que una matriz no es una tabla de números: es un movimiento del espacio. Con esa idea, rotar y escalar geometría deja de ser magia.",
344             en:"From 3Blue1Brown, the visual reference for linear algebra. It shows that a matrix is not a table of numbers: it is a movement of space. With that idea, rotating and scaling geometry stops being magic." }
345    }
346  },
347
348  /* ---------- Itinerario Python (asignatura Programación · UPV) ---------- */
349
350  "py-primeros-pasos": {
351    es: {
352      yt:"5K5fx44pKZg",
353      canal:"Python Hacks",
354      min:{ es:"~10 min", en:"~10 min" },
355      tit:{ es:"Instalar VS Code para Python y ejecutar tu primer «Hola mundo»",
356            en:"Install VS Code for Python and run your first \"Hello world\"" },
357      nota:{ es:"Los mismos pasos que has dado en «Prepara tu ordenador», pero viéndolos hacer. Útil si algo no te ha salido a la primera: fíjate sobre todo en la casilla «Add python.exe to PATH» del instalador.",
358             en:"The same steps you followed in \"Set up your computer\", but watching someone do them. Useful if something did not work first time: pay attention to the installer's \"Add python.exe to PATH\" checkbox." }
359    },
360    en: null
361  },
362
363  "py-venv": {
364    es: {
365      yt:"qD8j5J6wFuw",
366      canal:"Nico Dev",
367      min:{ es:"~12 min", en:"~12 min" },
368      tit:{ es:"Entornos virtuales en Python, explicados con calma",
369            en:"Python virtual environments, explained calmly" },
370      nota:{ es:"Por qué cada proyecto necesita su propio entorno y qué ocurre exactamente al crearlo y activarlo. Si el «(.venv)» del principio de la línea te suena a magia, este vídeo lo desmonta.",
371             en:"Why each project needs its own environment and what exactly happens when you create and activate it. If the \"(.venv)\" at the start of the prompt feels like magic, this video takes it apart." }
372    },
373    en: {
374      yt:"N5vscPTWKOk",
375      canal:"Corey Schafer",
376      tit:{ es:"Por qué deberías usar entornos virtuales",
377            en:"Why you should use virtual environments" },
378      nota:{ es:"El clásico de Corey Schafer. Usa la herramienta antigua (virtualenv) en vez de venv, pero el razonamiento de por qué hacen falta es el mejor explicado que hay.",
379             en:"The Corey Schafer classic. It uses the older tool (virtualenv) rather than venv, but the reasoning about why environments are needed is the best explanation around." }
380    }
381  },
382
383  "py-funciones": {
384    es: {
385      yt:"g78juF9pB_w",
386      canal:"Code Hive",
387      min:{ es:"~15 min", en:"~15 min" },
388      tit:{ es:"Funciones en Python: parámetros y return, con ejemplos",
389            en:"Functions in Python: parameters and return, with examples" },
390      nota:{ es:"Repasa con ejemplos lo que cuenta la lección: definir, llamar, pasar parámetros y devolver. Fíjate en la diferencia entre imprimir dentro de la función y devolver el resultado: es lo que se evalúa.",
391             en:"Goes over the lesson's content with examples: defining, calling, passing parameters and returning. Watch the difference between printing inside the function and returning the result: that is what gets assessed." }
392    },
393    en: null
394  },
395
396  "py-pytest": {
397    es: {
398      yt:"JZ0TMkwMgp8",
399      canal:"UskoKruM2010",
400      min:{ es:"~20 min", en:"~20 min" },
401      tit:{ es:"pytest: pruebas unitarias en Python, de cero",
402            en:"pytest: unit testing in Python from scratch" },
403      nota:{ es:"Instalación, primer archivo de pruebas y ejecución, en el mismo orden que la lección. Verlo hacer una vez ayuda a que el «pytest» de la terminal deje de dar respeto.",
404             en:"Installation, first test file and running the suite, in the same order as the lesson. Watching it done once helps make the terminal's \"pytest\" less intimidating." }
405    },
406    en: {
407      yt:"IpeyumlDVkE",
408      canal:"Execute Automation",
409      tit:{ es:"Introducción a pytest",
410            en:"Introduction and getting started with pytest" },
411      nota:{ es:"Primer capítulo de una serie sobre pytest. Va algo más allá de lo que necesitas ahora; con los primeros minutos tienes cubierto lo de la lección.",
412             en:"First episode of a pytest series. It goes somewhat beyond what you need right now; the first few minutes cover the lesson's material." }
413    }
414  },
415
416  "py-colecciones": {
417    es: {
418      yt:"T9cHfVOdu1Y",
419      canal:"ITMadrid TV",
420      min:{ es:"~25 min", en:"~25 min" },
421      tit:{ es:"Listas, diccionarios y tuplas en Python",
422            en:"Lists, dictionaries and tuples in Python" },
423      nota:{ es:"Las tres estructuras del módulo, una detrás de otra y con ejemplos. Buen repaso antes del cuestionario; presta atención a cuándo conviene cada una.",
424             en:"The module's three structures, one after another and with examples. A good review before the quiz; pay attention to when each one is the right choice." }
425    },
426    en: null
427  },
428
429  "py-ficheros": {
430    es: {
431      yt:"LfSGeCt50Z0",
432      canal:"Dimas",
433      min:{ es:"~20 min", en:"~20 min" },
434      tit:{ es:"Leer y escribir ficheros de texto en Python, con ejercicio",
435            en:"Reading and writing text files in Python, with an exercise" },
436      nota:{ es:"Los modos de apertura y el bloque <code>with</code> en acción, con un ejercicio resuelto al final. Comprueba que en el vídeo también se acuerdan del salto de línea al escribir.",
437             en:"Opening modes and the <code>with</code> block in action, with a worked exercise at the end. Check that the video also remembers the newline when writing." }
438    },
439    en: null
440  },
441
442  "py-tkinter": {
443    es: {
444      yt:"Nn0AVbGVMhk",
445      canal:"Academia Coder",
446      min:{ es:"~20 min", en:"~20 min" },
447      tit:{ es:"Interfaces gráficas con tkinter: la primera ventana",
448            en:"Graphical interfaces with tkinter: the first window" },
449      nota:{ es:"La primera ventana, los widgets básicos y el bucle de eventos. Fíjate en el orden: crear el widget y colocarlo son dos pasos distintos, y olvidar el segundo no da ningún error.",
450             en:"The first window, the basic widgets and the event loop. Watch the order: creating a widget and placing it are two separate steps, and forgetting the second raises no error." }
451    },
452    en: {
453      yt:"TuLxsvK4svQ",
454      canal:"Bro Code",
455      tit:{ es:"Curso completo de tkinter",
456            en:"Python Tkinter full course" },
457      nota:{ es:"Curso entero de tkinter en un solo vídeo. No hace falta verlo seguido: úsalo como referencia y salta al widget que necesites en cada momento.",
458             en:"A whole tkinter course in one video. No need to watch it in one sitting: use it as a reference and jump to the widget you need." }
459    }
460  },
461
462  "git-intro": {
463    es: {
464      yt:"FIHex32iB-c",
465      canal:"Cirilo Bidó · Programación Android",
466      min:{ es:"~15 min", en:"~15 min" },
467      tit:{ es:"Git y GitHub en 15 minutos",
468            en:"Git and GitHub in 15 minutes" },
469      nota:{ es:"Lo esencial para trabajar en grupo: repositorio, add, commit, push y pull. Con esto y la lección tienes de sobra para los proyectos de la asignatura.",
470             en:"The essentials for group work: repository, add, commit, push and pull. With this and the lesson you have plenty for the subject's projects." }
471    },
472    en: null
473  }
474};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.