En el examen AP no hay un bloque exactamente igual a o ya que no tienen personajes o globos de conversación. En su lugar, la forma correcta de presentar texto al usuario es utilizar, en inglés,
DISPLAY(chisme())
, en el caso que esté escrito como texto, o de la forma si está representado como un bloque.
No sería necesario que sepas escribir código utilizando esta notación en el examen AP. Solo debes ser capaz de leerlo para que puedas responder a las preguntas relacionadas con dicha funcionalidad.
El procedimiento estará escrito de la siguiente forma
PROCEDURE doble(x){ RETURN(2 * x)}
o .
Varios lenguajes de programación (y la notación del AP CS Principles Exam) usan la palabra return (devolver) en lugar de report (reportar) para representar el comando para retornar un valor al final de la llamada de una función.
AAP-3.A.9
Se utiliza el término "valor de un procedimiento" para representar el valor de retorno cuando el mismo es llamado. Por ejemplo, "el valor de
no forman parte del lenguaje AP, por lo que están escrito en minúsculas, de la misma forma que otros procedimientos definidos por el programador.
Ten en cuenta que el bloque sombrero, , se escribiría como
PROCEDURE molinete(numeroDeRamas)
. La palabra
procedure
(procedimiento) te indica que la línea de código es como un bloque sombrero; el nombre de la variable entre paréntesis en esa línea es la entrada que toma el procedimiento.
La siguiente instrucción tendría la siguiente notación
molinete(6, 80, 20)
o .
Posiblemente has escuchado que algunas personas utilizan el término "pseudocódigo" para referirse a este pseudo-lenguaje usado en el examen de principios AP CS, pero esto no es pseudocódigo. El pseudocódigo no es un lenguaje de programación, se usa cómo un lenguaje humano natural para describir un algoritmo.
El lenguaje utilizado en el examen AP no permite espacios en los nombres de las entradas (como número de peces) o en los procedimientos definidos por el programador (como ratón y, que no está integrado en su idioma). Así que este ejemplo los traduce a
numPeces
y
ratónY()
.
El motivo de incluir
()
o un cuadro después de
ratónY
se debe a que
ratónY()
es una llamada de procedimiento a pesar de que no toma ninguna entrada.
El guion
se escribiría como
REPEAT UNTIL (ratónY() < 0){ DISPLAY(numPeces)}
o
Recuerda, no necesitas aprender a escribir el idioma inventado que se usa en el examen AP. Solo tienes que ser capaz de leer y responder preguntas al respecto.
\ No newline at end of file
diff --git a/cur/programming/1-introduction/unit-1-exam-reference.html b/cur/programming/1-introduction/unit-1-exam-reference.html
new file mode 100644
index 0000000000..328507002c
--- /dev/null
+++ b/cur/programming/1-introduction/unit-1-exam-reference.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+Unit 1 Exam Questions
+
+
+
+
+
Many languages (and the AP CS Principles Exam) use return instead of report as the name of the command to give a value back at the end of a function call.
AAP-3.A.9
The exam uses "value of a procedure" to mean the value the procedure returns when called. For example, "the value of
You may hear people use the term "pseudocode" to refer to this pseudo-language used on the AP CS Principles exam, but it's not pseudocode. Pseudocode isn't a programming language at all, it's the use of normal human language to describe an algorithm.
The language used on the AP Exam doesn't allow spaces in names of inputs (such as number of fish) or in programmer-defined procedures (such as mouse y, which isn't built into their language). So this example translates them to
numFish
and
MouseY()
.
The reason for the
()
or box after
MouseY
is that
MouseY()
is a procedure call even though it doesn't take any inputs.
The script
would be written as
REPEAT UNTIL(mouseY() < 0){ DISPLAY(numFish)}
or
Remember, you don't need to learn to write the made-up language used on the AP exam. You just have to be able to read and answer questions about it.
\ No newline at end of file
diff --git a/cur/programming/1-introduction/unit-1-self-check.es.html b/cur/programming/1-introduction/unit-1-self-check.es.html
new file mode 100644
index 0000000000..c3367ac3e8
--- /dev/null
+++ b/cur/programming/1-introduction/unit-1-self-check.es.html
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+Unidad 1 Preguntas de Autocomprobacion
+
+
+
+
+
¿Cuál o cuáles de las siguientes cadenas representa un posible resultado de ejecutar el código chisme?
Toma como referencia las siguientes definiciones:
Señora y Sra. C ayudaron.
Es correcto que existen dos personas (dos "quién") y únicamente una acción (un "qué hace"), pero no se encuentran en el orden correcto. Ten en cuenta también que la palabra "y" no aparece en ningún lugar en el programa.
Señora se alejó de mi gato.
¡Respuesta correcta! La respuesta sigue el patrón: "quién" "qué hace" "quién".
Hannah escuchó a Hannah.
¡Respuesta correcta! La respuesta sigue el patrón: "quién "qué hace" "quién".
Jake ayudó.
La cadena no contiene la segunda sub-cadena generada por "quién".
Aquí se presenta la secuencia de comandos dentro de más complicado quién. ¿Qué cambio a esta secuencia puede hacer que la frase más complicada aparezca más a menudo?
Cambiar el 4 a 5.
En este caso la tercera opción será elegida de forma aleatoria una de cada cinco veces en lugar de cuatro y la frase complicada aparecerá con menor frecuencia.
Cambiar el 4 a 3.
¡Correcto! En este caso la tercera opción se eligirá una de cada tres veces y la frase complicada aparecerá con mayor frecuencia.
Cambiar el 3 a 1.
1 es una opción tan aleatoria como 3, uno de cada cuatro veces y la frase complicada aparecerá con la misma frecuencia que antes.
Cambiar el 3 a 5.
El número elegido nunca podría ser 5, por lo que nunca aparecerá una frase complicada.
¿Cuál de las siguientes expresiones simula el resultado de lanzar dos dados?
RANDOM(1, 6) + RANDOM(1, 6)
¡Correcto!
RANDOM(1, 6)
devuelve un número entre 1, 2, 3, 4, 5 o 6 con una probabilidad similar, simulando el lanzamiento de un dado. La suma de las dos expresiones representa claramente el lanzamiento de dos dados.
RANDOM(1, 6) + RANDOM(1, 6)
devuelve 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 o 12 con la misma probabilidad de dos datos.
2 * RANDOM(1, 6)
Vas por el buen camino usando
RANDOM(1, 6)
tendremos el resultado equivalente al lanzamiento de un dado. Sin embargo, esta expresión no lanza dos dados, representa el equivalente a lanzar un dado y duplicar el resultado. Por lo tanto
2 * RANDOM(1, 6)
devuelve únicamente los valores 2, 4, 6, 8, 10 o 12.
RANDOM(2, 12)
RANDOM(2, 12)
devuelve 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, o 12 con la misma probabilidad por lo que no genera el resultado deseado.
RANDOM(1, 12)
¿Es posible obtener el resultado 1, lanzando dos dados?
\ No newline at end of file
diff --git a/cur/programming/1-introduction/unit-1-self-check.html b/cur/programming/1-introduction/unit-1-self-check.html
new file mode 100644
index 0000000000..af8d19207e
--- /dev/null
+++ b/cur/programming/1-introduction/unit-1-self-check.html
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Unit 1 Self-Check Questions
+
+
+
+
+
Which two of the following sentences could be reported by gossip?
For reference:
Señora and Ms. C helped.
It's true that there are two people (two "who"s) and one action (one "does what"), but they aren't in the right order. Also, the word "and" isn't anywhere in the program.
Señora ran away from my cat.
Correct! This follows the pattern: "who," "does what," "who."
Hannah listened to Hannah.
Correct! This follows the pattern: "who," "does what," "who."
El personaje de Alonzo lleva el nombre de Alonzo Church, uno de los principales contribuyentes a las primeras ciencias de la computación. En este proyecto, hay tres objetos relacionados con Alonzo:
Uno es un objeto (sprite), que es como un actor en el escenario que sabe cómo hacer muchas cosas diferentes, como caminar por el escenario y pronunciar las frases de la obra.
Los otros dos son disfraces (costumes), una imagen que puede 'usar' un objeto.
La transparencia (transparency)de una imagen es cuánto puedes ver lo que hay detrás de ella. Por ejemplo, aquí se muestra el objeto de Alonzo con tres transparencias diferentes (que se han configurado usando el bloque de efecto fantasma ).
No quiere decir que los elementos tienen que aparecer en orden alfabético o numérico. Solo significa que es una lista diferente a .
Una lista (list) es un conjunto ordenado de elementos. Ya has visto una en el siguiente ejemplo:
AAP-2.D.1, AAP-2.D.2
Los elementos en esta lista son cadenas. Una cadena (string) es una secuencia de caracteres (letras, dígitos, signos de puntuación, etc.). Una sub-cadena (substring) es sub-conjunto de una cadena existente. Por ejemplo: "Hanna," "anna", y "nnah" son cada una de ellas sub-cadenas de la cadena madre "Hannah." (Ten en cuenta que la cadena vacía, y la cadena original, son también sub-cadenas de la cadena madre.)
Concatenar (concatenate) cadenas significa hacer más grande una cadena mediante la conexión de dos o más cadenas. En Snap!, el bloque es utilizado para concatenar cadenas.
El proceso de probar, buscar problemas y arreglarlos se llama depuración (debugging). Utilizaremos también el término en inglés, debugging, que viene de la palabra "bug" o "error" y representa la acción de buscar errores en nuestro programa.
Un procedimiento (procedure) es una secuencia de instrucciones que puede aceptar valores o acciones de entrada y puede reportar un valor como resultado. Los procedimientos pueden recibir un nombre para distinguirlos. Algunos lenguajes de programación los pueden llamar también métodos o funciones. A continuación se presentan dos tipos de procedimientos que ya has visto en Snap!:
Los reporteros (reporters) tienen una forma ovalada. Este tipo de procedimientos reportan un valor.
Los comandos (commands) tienen forma de pieza de rompecabezas. Estos elementos ordenan a la computadora realizar alguna acción sin necesidad de reportar un valor.
Una expresión (expression) es un valor constante (por ejemplo "4" o "invierno") o bien una llamada a un bloque reportero con cualquier campo de entrada con datos ingresados (por ejemplo: , , o ).
Las expresiones son evaluadas para producir un valor (value) singular (un valor puede ser un número, una cadena, un objeto, un disfraz, un código, una lista—cualquier entidad). Por ejemplo, será evaluado para generar como resultado 17.
Un algoritmo (algorithm)es una secuencia de pasos que usualmente ejecuta una computadora. El algoritmo no requiere estar escrito en un lenguaje de programación en particular, ni siquiera en un lenguaje de programación. Puede ser escrito en nuestro lenguaje natural en la forma de una secuencia de oraciones que realiza una serie de actividades. Se conoce a un algoritmo escrito en lenguaje natural como pseudocódigo (pseudocode). Una vez que se tiene la idea clara de los pasos a ejecutar, el algoritmo puede escribirse en el lenguaje de programación de tu elección.
¿Cuál es el propósito del "pseudocódigo"? "Pseudo" significa, literalmente, "falso o irreal"; ¿Por qué escribir un algoritmo en nuestro lenguaje natural en lugar de uno tan preciso como Snap!? Si fueras a programar utilizando un lenguaje cargado de puntuación, diseñar tu programa en pseudocódigo te ayudaría a enfocarte en las ideas más importantes en lugar de los detalles como los signos de puntuación o un punto y coma. Sin embargo, el pseudocódigo no es tan necesario en un lenguaje como Snap!. Además, el pseudocódigo puede hacer que te hagas ilusiones acerca de lo que es capaz de hacer una computadora (como por ejemplo, "Selecciona los números ganadores para la lotería de mañana; anótalos y compra el billete de lotería" o "Aquí está la melodía; escribe la armonía").
1.3.3: ¿Qué es una entrada? Parámetro vs. Argumento
AAP-3.A.3
Un parámetro (parameter) (o parámetro formal) es el nombre, del campo de entrada, por ejemplo: número de ramas. El nombre del campo de entrada es grabado en la definición del bloque. Nunca cambia.
Un argumento (argument) (o argumento actual) es el valor ingresado en el campo de entrada, por ejemplo el número 6 para el ejemplo de un molinete hexagonal. El valor de entrada es ingresado cada vez que el bloque es ejecutado; por lo que puede ser diferente.
Usamos la palabra "entrada" tanto para parámetros (nombre del campo de entrada) y para los argumentos (valor del campo de entrada).
Los científicos de la computación definen una estructura de programa repetitivo como un ciclo, repetición, o iteración (iteration).
AAP-2.K.1
El código puede repetirse por siempre, un número específico de veces (al usar repetir) o bien hasta que una condición específica se cumpla (por ejemplo al usar repetir hasta que, como se presentará en el Laboratorio 5).
Información personal identificable (Personally identifiable information o PII, por sus siglas en inglés) es la información que puede ser usada por otras personas para generar una idea que quién eres y obtener, posiblemente, más información como tu número de seguridad social, edad, raza, número(s) de teléfono, información médica, información financiera o incluso datos biométricos (huella dactilar o escaneo de las facciones de la cara).
Un segmento de código (code segment) es una secuencia de instrucciones conectadas que llevan a cabo una acción determinada, como la que se muestra a la izquierda, que anima una conversación. Las instrucciones en el segmento de código se llevan a cabo en orden, de arriba a abajo.
\ No newline at end of file
diff --git a/cur/programming/1-introduction/unit-1-vocab.html b/cur/programming/1-introduction/unit-1-vocab.html
new file mode 100644
index 0000000000..79c8a1aaf7
--- /dev/null
+++ b/cur/programming/1-introduction/unit-1-vocab.html
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+Unit 1 Vocabulary
+
+
+
+
+
The Alonzo character is named after Alonzo Church, a major contributor to early computer science. In this project, there are three objects related to Alonzo:
One is a sprite, which is like an actor on the stage who knows how to do many different things, such as walk around the stage and speak the lines of the play.
The other two are costumes, picture that can be "worn" by a sprite.
The transparency of an image is how much you can see what's behind it. For example, here is the Alonzo sprite shown with three different transparencies (which have been set using the ghost effect block).
It doesn't mean that the items have to appear in alphabetical or numeric order. It just means that is a different list from .
A list is an ordered sequence of items. You've seen this example:
AAP-2.D.1, AAP-2.D.2
The items of this list are strings. A string is a sequence of characters (letters, digits, punctuation, etc.). A substring is just a piece of some existing string. For example, "Hanna," "anna", and "nnah" are each substrings of the string "Hannah." (The empty string as well as the original string are both also substrings.)
To concatenate strings means to make a bigger string by connecting two or more smaller strings. In Snap!, the block lets you concatenate strings.
A procedure is a named sequence of instructions that may take inputs and may report a value. Some languages call procedures methods or functions. Here are two types of procedures you have seen in Snap!:
Reporters have an oval shape. They report a value.
Commands have a jigsaw puzzle shape. They tell the computer to do something without reporting a value.
An expression is a either a constant value (such as "4" or "winter") or a call to a reporter block including its inputs (such as , , or ).
Expressions are evaluated to produce a singlevalue (a value can be a number, a string, a sprite, a costume, a script, a list—anything). For example, will be evaluated to 17.
An algorithm is a sequence of steps that are usually performed by a computer. The algorithm doesn't have to be written in any particular programming language or even in a programming language at all; you can write your algorithm in English or any other human language. Some people call an algorithm written in human language pseudocode. Once you know the steps that the computer will take, you can code your algorithm in the programming language of your choice.
What's the purpose of "pseudocode"? Why write an algorithm vaguely in English when you could write it precisely in Snap!? If you were programming in a punctuation-heavy language, designing your program in pseudocode would help you focus on the important ideas instead of on details like quotation marks and semicolons. But pseudocode isn't as necessary with a language like Snap!, and pseudocode can make it easy for you to fall into wishful thinking about what the computer is capable of (such as writing "Pick tomorrow's winning lottery numbers" or "Here's the melody; write the harmony").
A parameter (or formal parameter) is the input name, such as number of branches. The input name is set in the block definition. It never changes.
An argument (or actual argument) is the input value, such as 6 for a hexagonal pinwheel. The input value is given each time the block is run; it can be a different value each time.
We use the word "input" both for parameters (input names) and for arguments (input values).
Computer scientists describe a repeating program structure as looping, repetition, or iteration.
AAP-2.K.1
The code can be repeated forever, a specific number of times (such as when using repeat), or until something specific happens (such as when using repeat until as you'll see in Lab 5).
Personally identifiable information (PII) is information that can let others figure out who you are and possibly get more information like your Social Security number, age, race, phone number(s), medical information, financial information, or biometric data (such as your thumbprint or face scan).
A code segment is a sequence of connected instructions that carry out a purposeful action, such as the one pictured on the left, which animates a conversation. The instructions in the code segment are carried out in order, from top to bottom.
\ No newline at end of file
diff --git a/cur/programming/2-complexity/unit-2-exam-reference.es.html b/cur/programming/2-complexity/unit-2-exam-reference.es.html
new file mode 100644
index 0000000000..e59bbb5b91
--- /dev/null
+++ b/cur/programming/2-complexity/unit-2-exam-reference.es.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+Unidad 2 Examen AP
+
+
+
+
+
DISPLAY ("¿Por qué la gallina cruzó la calle?")respuestaUsuario ← INPUT()
o .
AAP-3.A.8, AAP-3.A.9
Observa que el procedimiento
INPUT()
(Entrada) acepta el valor del usuario y devuelve ese valor de entrada, que luego se asigna a la variable
respuestaUsuario
con la
←
sintaxis. En Snap!, así es cómo respuesta acepta un valor del usuario y lo reporta, y ese reporte es a lo que la computadora asigna la variable respuesta del usuario.
. Los elementos se colocan en la lista en el orden en que aparecen en el texto: "Señora" tiene el índice 1, "Sra. C" tiene el índice 2, y así sucesivamente.
o . (En esta aplicación, deseará que la lista de la compra comience vacía, y luego el usuario agregue o inserte más artículos comestibles de uno en uno.)
Cuando ejecutas este programa en Snap!, la segunda línea de código asigna a lista de la compra 2 el valor de lista de la compra (es decir, la misma lista, no una copia). Por eso, la tercera línea de código modifica ambas variables:
AAP-1.D.7 viñeta 3, AAP-2.N.2
Sin embargo, en el examen, el enunciado
listaDeCompras2 ← listaDeCompras
hace una copia de la lista. Así que al modificar uno de ellos no se modifica el otro.
Las reglas sobre cómo usar las listas y cómo se comportan difieren según el lenguaje de programación que estés usando.
, que significa "distinto a" y reporta falso si las dos entradas son iguales y, de lo contrario, reporta verdadero (si no son iguales). Cuando escribes el bloque de , funcionará así:
Estos seis operadores relacionales reportan un valor booleano (verdadero o falso).
Los distintos lenguajes de programación tienen diferentes formas de manejar entradas negativas a la función módulo. Por lo tanto, no verás ningún uso de módulo con un número negativo en el examen.
El operador módulo ("mod", en inglés): la expresion se escribiría en inglés como
17 MOD 5
en el examen. Si ves una expresión con variables como entrada para módulo, tal como
a MOD b
, puedes asumir que a es cero o positivo, y b es estrictamente positivo (porque no se puede dividir por 0).
En el examen, puede ver estos cuatro operadores aritméticos:
+
,
-
,
*
,
/
(más, menos, multiplicar, dividir) así como
MOD
. Los operadores aritméticos son parte de la mayoría de los lenguajes de programación. (La mayoría de los lenguajes de texto utilizan
*
en lugar de
×
para la multiplicación porque
×
no está en la mayoría de los teclados, y porque se parece demasiado a la letra x.)
AAP-2.L.2
Orden de operaciones: En un lenguaje de bloques, la anidación de bloques determina el orden de las operaciones. Por ejemplo, en puedes ver que el bloque + es una entrada al bloque ×, entonces la expresión significa 3×(5+4). De manera similar, significa (3×5)+4. En Snap!, es como si hubiera paréntesis alrededor de todas las operaciones. Pero en lenguajes de texto, puedes escribir
3 * 4 + 5
sin paréntesis, entonces ahí sí necesitas las reglas que aprendiste en la clase de matemáticas (multiplicación antes de la suma, etc.). El operador módulo es como la multiplicación y la división; ocurre antes de la suma y la resta. Así por ejemplo,
no están integrados en el lenguaje del AP y por eso que se escriben en letras minúsculas al igual que otros procedimientos definidos por un programador.
La expresión condicional se escribiría como
IF(tamaño > 15){ REPEAT 4 TIMES { mover(tamaño) girar_sentidoreloj(90) }}
o
Como en Snap!, si la condición (tamaño) > 15 es verdadero, se ejecuta el código dentro de la instrucción si; pero si la condición es falso, el código no se ejecuta.
La definición de un reportero se parece mucho a la definición de un comando excepto que incluye un
RETURN
(como reportar). Por ejemplo, esta definición
En muchos lenguajes (incluido Snap!) las variables deben ser declaradas de alguna manera (en Snap!, puedes hacer clic al botón "Crear una variable" o usar el bloque variable de programa). Pero el lenguaje de AP no incluye declaraciones de variables, por eso no los verás en el examen.
, el flujo de control vuelve al lugar del código donde se llamó el procedimiento, y el procedimiento devuelve el valor de la expresión dentro del comando
RETURN
o el bloque reportar.
También, el procedimiento
sqrt
(abreviatura de square root, raíz cuadrada en inglés) no está integrado en el lenguaje del AP, es por eso que está escrito en minúsculas como otros procedimientos definidos por un programador.
DISPLAY("Why did the chicken cross the road?")userResponse ← INPUT()
or .
AAP-3.A.8, AAP-3.A.9
Notice that the procedure
INPUT()
accepts the value from the user and returns that input value, which is then assigned to the variable
userResponse
with the
←
syntax. In Snap!, this is just like how answer accepts a value from the user and reports it, and that report is what the computer sets the variable user response to.
When you run this script in Snap!, the second line of code assigns to shopping list 2 the value of shopping list (that is, the same list, not a copy). So, the third line of code modifies both variables:
AAP-1.D.7 bullet 3, AAP-2.N.2
However on the exam, the statement
shoppingList2 ← shoppingList
makes a copy of the list. So modifying one of them does not modify the other.
The rules for how to use lists and how they behave differ depending on the programming language you are using.
, which means "not-equal" and reports false if the two inputs are equal and otherwise reports true (if they are not equal). When you write the block, it will work like this:
These six relational operators all report a Boolean value (true or false).
Different programming languages have different ways of handling negative inputs to the mod function. So you won't see any negative numbers used with mod on the exam.
The mod operator: The expression would be written as
17 MOD 5
on the exam. If you see an expression with variables as input to mod, such as
a MOD b
, you can assume that a is zero or positive, and b is strictly positive (because you can't divide by 0).
On the exam, you may see these four arithmetic operators:
+
,
-
,
*
,
/
(plus, minus, times, divide) as well as
MOD
. Arithmetic operators are part of most programming languages. (Most text languages use
*
rather than
×
for multiplication because
×
isn't on most keyboards, and because it looks too much like the letter x.)
AAP-2.L.2
Order of operations: In a block language, the nesting of blocks determines the order of operations. For example, in you can see that the + block is an input to the × block, so the expression means 3×(5+4). Similarly, means (3×5)+4. In Snap!, it's as if there are parentheses around every operation. But in text languages, you can write
3 * 4 + 5
without parentheses, so they need the rules you learn in math class (multiplication before addition, and so on). The mod operator is like multiplication and division; it happens before addition and subtraction. So for example,
The definition for a reporter looks much like the definition for a command except that it includes a
RETURN
(like report). For example, this definition
In many languages (including Snap!) variables must be declared in some way (in Snap!, you can click the "Make a variable" button or use the script variables block). But the AP's language doesn't include variable declarations, so you won't see them on the exam.
statement is executed, the flow of control returns to the place in your code where the procedure was called, and the procedure returns the value of the expression inside the
RETURN
command or report block.
Also, the procedure
sqrt
isn't built in to the AP's language so it is written in lower case like other programmer-defined procedures.
Ejemplos como este son útiles para probar tu comprensión de la asignación a variables, aunque no usarías una secuencia de asignaciones como esta en un programa real.
a ← 3 b ← a a ← 4 DISPLAY(b)
3
¡Correcto! A la variable b se le asigna el valor de la variable a (que es 3 cuando se hace
b ← a
).
4
La variable b se le da el valor de la variable a (que es 3 cuando
b ← a
está hecho); b no recuerda que el 3 vino de a es por eso que sigue igual cuando se cambia a.
a
La variable b se ha establecido en el valor de la variable a, no en la letra "a" en sí.
b
El guion mostrará el valor de la variable b, no la letra "b" en sí.
¿Qué entradas a función misteriosa reportarán "terminado"?
Cualquier número entero
¡Correcto! No importa cuál sea el número de entrada (siempre y cuando sea un número entero), el bloque de reporte finalmente se ejecutará. (Esto no sucede necesariamente en todos los procedimientos, pero aquí sucederá).
Solo números enteros mayores o iguales a 5
Escribe algunos ejemplos de lo que sucede cuando la entrada es menor que 5. Por ejemplo, si la entrada es 3, el personaje dirá 3, la entrada cambiará a 4, el personaje dirá 4, la entrada cambiará a 5, el bucle repetir hasta se detendrá y la función reportará "terminado".
Solo números enteros menores que 5
El comando reportar no está dentro de si.
Solo 5
El bloque repetir hasta comprueba el valor de entrada cada vez que pasa por el bucle, no solo su valor inicial.
¿Qué dirá el personaje si ejecutas la misma función con la entrada 1?
Dice 4 al final, pero dice otras cosas antes de eso.
¿Cómo funciona repetir hasta que?
¡Correcto! El bloque repetir hasta ejecuta el código en su ranura de programa hastaentrada = 5, luego la computadora salta al siguiente comando, reporte (terminado), sin que el personaje diga nunca 5.
El bloque repetir hasta prueba el valor de entradaantes de ejecutar el código en su ranura de programa.
La retroalimentación no ha terminado porque me di cuenta de que BH podría oponerse a cambiar el valor de una variable de entrada... --MF, 3/1/19
No hay un bloque ≤ incorporado en Snap!. Supongamos que quisiéramos construir uno. ¿Cuáles dos de las siguientes expresiones booleanas son equivalentes a la expresión ?
¿Puede num ser menor que 23 e igual a 23 al mismo tiempo?
¡Correcto! Esta imagen muestra una expresión que reportará verdadero si núm es menor o igual a 23.
¡Correcto! Si númno es mayor que 23, entonces es menor que 23 o igual a 23.
Imagina que el valor de núm es 22.5. ¿Esta expresión y la expresión dada en la pregunta reportarán la misma respuesta?
PROCEDURE mayorOIgual(a, b) IF(a > b) { RETURN(verdadero) } ELSE { RETURN(a = b) } DISPLAY"Error. Entrada no válida.")}
Cuando
a > b
es verdadero.
Piensa en lo que hace
RETURN
. Como reportar en Snap!,
RETURN
finaliza el procedimiento. Cuando se ejecuta, no se ejecuta ningún otro código en ese procedimiento y el flujo de control vuelve al lugar donde se llamó al procedimiento.
Cuando
a > b
es falso.
Piensa en lo que hace
RETURN
. Como reportar en Snap!,
RETURN
finaliza el procedimiento. Cuando se ejecuta, no se ejecuta ningún otro código en ese procedimiento y el flujo de control vuelve al lugar donde se llamó al procedimiento.
Siempre
Se ve así porque esa es la última línea del código de procedimiento, pero piensa en lo que hace
RETURN
. Como reportar en Snap!,
RETURN
finaliza el procedimiento. Cuando se ejecuta, no se ejecuta ningún otro código en ese procedimiento y el flujo de control vuelve al lugar donde se llamó al procedimiento.
Nunca
¡Correcto!
\ No newline at end of file
diff --git a/cur/programming/2-complexity/unit-2-self-check.html b/cur/programming/2-complexity/unit-2-self-check.html
new file mode 100644
index 0000000000..ace23b61b7
--- /dev/null
+++ b/cur/programming/2-complexity/unit-2-self-check.html
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+Unit 2 Self-Check Questions
+
+
+
+
+
Examples like this one are useful to test your understanding of assignment to variables, but you wouldn't use a sequence of assignments like this in an actual program.
What value will this code display?
a ← 3b ← aa ← 4DISPLAY(b)
3
Correct! The variable b is assigned the value of the variable a (which is 3 when
b ← a
is done).
4
The variable b is given the value of the variable a (which is 3 when
b ← a
is done); b doesn't remember that the 3 came from a so it doesn't change when a is changed.
a
The variable b has been set to the value of the variable a, not the letter "a" itself.
b
The script will display the value of the variable b, not the letter "b" itself.
We really shouldn't be encouraging students to mutate a block's inputs. There are really two issues here; one is with the x=x+1 style of programming altogether, and the second is that formal parameters specifically shouldn't generally be mutated; it's better to make a script variable that's initialized to the input value. (If we change this, we need to update the Guided Notes.) --MF, 6/26/21 with BH
Which inputs to mystery function will report "finished"?
Any integer
Correct! No matter what the input number is (as long as it's an integer), the report block will eventually run. (This doesn't necessarily happen in every procedure, but here it will.)
Only integers greater than or equal to 5
Write out some examples of what happens when the input is less than 5. For example, if the input is 3, the sprite will say 3, the input will be changed to 4, the sprite will say 4, the input will be changed to 5, the repeat until loop will stop, and the function will report "finished."
Only integers less than 5
The report command isn't inside the if.
Only 5
The repeat until block checks the value of input every time through the loop, not just its initial value.
What will the sprite say if you run the same function with the input 1?
It does say 4 at the end, but it says other things before that.
How does repeat until work?
Correct! The repeat until block runs the code in its script slot untilinput = 5, then the computer skips down to the next command, report (finished), without the sprite ever saying 5.
The repeat until block tests the value of inputbefore running the code in its script slot.
The feedback is not finished because I realized that BH might object to changing the value of an input variable... --MF, 3/1/19
There's no built in ≤ block in Snap!. Suppose we wanted to build one. Which two of the following Boolean expressions are equivalent to the expression ?
Can num be both less than 23 and equal to 23 at the same time?
Correct! This picture shows an expression that will report true if num is less than or equal to 23.
Correct! If num is not greater than 23, then it is either less than 23 or equal to 23.
Imagine that the value of num is 22.5. Will this expression and the expression given in the question report the same response?
PROCEDURE greaterThanOrEqualTo(a, b) IF(a > b) { RETURN(true) } ELSE { RETURN(a = b) } DISPLAY("Error. Invalid entry.")}
When
a > b
is true.
Think about what
RETURN
does. Like report in Snap!,
RETURN
ends the procedure. Once it is run, no other code in that procedure is run, and the flow of control returns to the place where the procedure was called.
When
a > b
is false.
Think about what
RETURN
does. Like report in Snap!,
RETURN
ends the procedure. Once it is run, no other code in that procedure is run, and the flow of control returns to the place where the procedure was called.
Always
It looks like that because that's the last line of procedure code, but think about what
RETURN
does. Like report in Snap!,
RETURN
ends the procedure. Once it is run, no other code in that procedure is run, and the flow of control returns to the place where the procedure was called.
Never
Correct!
\ No newline at end of file
diff --git a/cur/programming/2-complexity/unit-2-vocab.es.html b/cur/programming/2-complexity/unit-2-vocab.es.html
new file mode 100644
index 0000000000..fc8d12c8df
--- /dev/null
+++ b/cur/programming/2-complexity/unit-2-vocab.es.html
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+Unidad 2 Vocabulario
+
+
+
+
+
Una variable es como un cuadro que puede contener un valor a cada vez, como una palabra, un disfraz o una lista (que puede contener muchas cosas). Puedes mirar lo que hay dentro las veces que quieras.
En Unidad 1 Laboratorio 2 Página 2: Hacer que los programas hablen, aprendiste sobre abstracción de procedimientos: dar nombres a los programas colocándolos en nuevos bloques. Aquí, estamos comenzando a observar la abstracción de datos, dando nombres a números, texto, listas, etc. Cuando le das un nombre a algo, puedes referirte a él sin saber exactamente cuál es el valor.
Una variable local se puede configurar o usar solo en el entorno en el que se define. Este término incluye entradas a procedimientos y variables creadas por el bloque para o variables de programa.
La palabra booleano se origina en el nombre de una persona, George Boole, que inventó la rama de las matemáticas que se ocupa de las operaciones booleanas (como y, o, y no).
Un predicado es un reportero en forma de hexágono que hace una pregunta de verdadero/falso como estos ejemplos:
AAP-2.E.1
Los predicados reportan un valor booleano (ya sea o ).
El número de posición se denomina índice del elemento en la lista.
En esta lista, 1 es el índice del elemento "manzana", 2 es el índice del elemento "cantalupo", y así sucesivamente.
AAP-1.D.8
En Snap! y en el examen AP, el índice siempre es un número entero (1, 2, 3, 4, etc.). Es un error utilizar un índice inferior a 1 o superior a la longitud de la lista.
Un elemento es otro nombre para un artículo de una lista. (Si el mismo valor está en la lista dos veces, entonces contará como dos elementos diferentes). Cada elemento tiene un índice (posición) único en la lista.
Un tipo de datos es la variedad de dato a la que algo pertenece (número, cadena de texto, lista, etc.). Por ejemplo, número es el tipo de datos para la primera entrada a y lista es el tipo de dato para su segunda entrada.
AAP-1.A.3 segunda oración
Cada lenguaje de programación proporciona algunos tipos de datos primitivos (tipos de datos integrados). Por ejemplo, Snap! proporciona números, texto (palabras y oraciones), booleanos (verdadero o falso), listas y algunos que aún no has utilizado como datos (como objetos y disfraces). Este menú muestra todos los tipos primitivos de Snap!.
La palabra "abstracto" se usa, con frecuencia y de manera casual, para referirse a algo más difícil de entender o más complejo, pero en informática, su significado es casi el opuesto. Los ADT son cosas que tú, como programador, creas para que tu programa sea más fácil para que tanto tú como otros puedan leer, depurar y mejorar.
Un tipo de datos abstractos (ADT) es un tipo de datos personalizado que es significativo para tu programa. No está integrado en el lenguaje; lo desarrollas mientras codificas. Esta es una abstracción porque oculta los detalles dentro del constructor y los selectores para que el programador que usa un elemento de prueba tenga que pensar solo en preguntas y respuestas, no en índices de lista.
El bloque de es el constructor; construye un ejemplo de la estructura de datos. Al nombrar las piezas de la estructura, el constructor se asegura de que cada vez que lo use, construya la estructura en el orden correcto.
Los bloques y son los selectores; cada uno selecciona una parte de la estructura de datos.
El constructor y el selector juntos implementan el elemento de pruebatipo de datos abstracto.
DAT-1.A.5
Abstracción de datos es la creación y el uso de tipos de datos abstractos en un programa.
Recorriendo una lista significa mirar cada elemento de la lista. Para cada es iterativo. Es decir, es repetitivo, como para, que también puede atravesar una lista. Pero a diferencia de para, para cada recorre la lista sin usar números de índice.
Una cadena es una secuencia ordenada de caracteres.
AAP-1.C.3 (strings)
Ya aprendiste la palabra índice para la posición de un elemento en una lista. La misma palabra se utiliza para la posición de un carácter en una cadena (por ejemplo, una letra en una palabra). Entonces, la primera entrada de letra es el índice.
Una interfaz de programa de aplicación (API, por sus siglas en inglés) documenta lo que un programador necesita saber sobre el uso de la biblioteca: es una descripción del propósito, las entradas y las salidas de cada procedimiento (pero no sus algoritmos).
Un tipo común de API es una API web en la que la biblioteca existe en la computadora de otra persona. Por ejemplo, la API de los Mapas de Google describe cómo incrustar un mapa de Google en tu propio sitio web.
I'm actually inclined to cut all the rest of this yellow box. --MF, 1/15/20
Una API web es solo una llamada a un procedimiento en otra máquina. Por ejemplo, estas son tres notaciones diferentes para la misma llamada de procedimiento, que busca el número de búsquedas de "BJC" en EE. UU.:
Creative Commons es una familia específica de licencias de derechos de autor que permiten que otros usen y compartan tu trabajo o tal vez incluso lo vendan o lo revisen.
Se utilizan ideas similares a Creative Commons para diferentes tipos de material:
Software libre significa software que cualquier persona puede copiar, usar, modificar y redistribuir, incluso comercialmente, siempre que cualquier modificación se haga bajo la misma licencia.
El motivo de esa restricción es evitar que otras personas conviertan una versión modificada del software en software no libre con licencias restrictivas. Eso es lo único que no puedes hacer: hacerlo no libre.
Software de código abierto es un término más general que significa que haces disponible a todos el código de fuente (legible por humanos). Todavía puedes restringir cómo pueden usar el programa las personas.
Un motivo es la seguridad del software, para que las personas puedan comprobar que el software no proporciona su contraseña u otros datos y, por lo tanto, puedan confiar en el codigo. (Una razón por la que muchas personas no confían en las máquinas de votación computarizadas es que sus fabricantes mantienen su código en secreto). Otra razón para el código abierto es que quisieras que otras personas contribuyan con mejores ajustes para el software propietario (conocido en inglés como "propietary software").
Acceso abierto en informes de investigación académica, quiere decir que están disponibles para su descarga gratuita, en lugar de requerir el permiso del editor de una revista.
\ No newline at end of file
diff --git a/cur/programming/2-complexity/unit-2-vocab.html b/cur/programming/2-complexity/unit-2-vocab.html
new file mode 100644
index 0000000000..00e96b5d52
--- /dev/null
+++ b/cur/programming/2-complexity/unit-2-vocab.html
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+Unit 2 Vocabulary
+
+
+
+
+
A variable is like a labeled box that can hold one value at a time, such as one word, one costume, or one list (which can contain many things). You can look at what's inside as many times as you want.
On Unit 1 Lab 2 Page 2: Making Programs Talk, you learned about procedural abstraction: giving scripts names by putting them in new blocks. Here, we are starting to look at data abstraction, giving names to numbers, text, lists, etc. When you give something a name, you can refer to it without knowing exactly what the value is.
A local variable can be set or used only in the environment in which it is defined. This term includes inputs to procedures and variables created by the for or script variables block.
The word Boolean is capitalized because it's named after a person, George Boole, who invented the branch of mathematics dealing with Boolean operations (such as and, or, and not).
A predicate is a hexagon-shaped reporter that asks a true/false question such as these examples:
The position number is called the index of the item in the list.
In this list, 1 is the index of the item "apple," 2 is the index of the item "cantaloupe," and so on.
AAP-1.D.8
In Snap! and on the AP exam, the index is always a whole number (1, 2, 3, 4, etc.). It is an error to use an index less than 1 or greater than the length of the list.
An element is another name for an item in a list. (If the same value is in the list twice, that counts as two different elements.) Each element has a unique index (position) in the list.
A data type is what kind of data something is (number, text string, list, etc.). For example, number is the data type for the first input to and list is the the data type for its second input.
AAP-1.A.3 second sentence
Each programming language provides some primitive data types (data types that are built-in). For example, Snap! provides numbers, text (words and sentences), Booleans (true or false), lists, and some you haven't yet used as data (such as sprites and costumes). This menu shows all of Snap!'s primitive types.
The word "abstract" is often used casually to mean something harder to understand or more complex, but in computer science, its meaning is almost the opposite. ADTs are things that you, the programmer, create to make your program easier for you and others to read, debug, and improve.
An abstract data type (ADT) is a custom data type that's meaningful to your program. It's not built into the language; you develop it as you code. This is an abstraction because it hides the details inside the constructor and selectors so that the programmer who uses a quiz item has to think only about questions and answers, not about list indices.
The block is the constructor; it constructs one example of the data structure. By naming the pieces of the structure, the constructor makes it certain that every time you use it, you build the structure in the right order.
The and blocks are the selectors; they each select one piece of the data structure.
The constructor and selector together implement the quiz itemabstract data type.
DAT-1.A.5
Data abstraction is the creation and use of abstract data types in a program.
Traversing a list means looking at each item of the list. For each is iterative. That is, it's repetitive, like for, which can also traverse a list. But unlike for, for each traverses the list without using index numbers.
You've already learned the word index for the position of an element in a list. The same word is used for the position of a character in a string (for example, a letter in a word). So the first input to letter is the index.
An application program interface (API) documents what a programmer needs to know about using a library: it's a description of each procedure's purpose, inputs, and outputs (but not its algorithms).
A common kind of API is a web API in which the library exists on someone else's computer. For example, the Google Maps API describes how to embed a Google Map on your own website.
I'm actually inclined to cut all the rest of this yellow box. --MF, 1/15/20
A web API is just a call to a procedure on another machine. For example, these are three different notations for the same procedure call, which looks up the number of searches for "BJC" in the US:
Ideas similar to Creative Commons are used for particular kinds of material:
Free software means software that anyone can copy, use, modify, and redistribute, including commercially, provided that any modifications must be under the same license.
The reason for that restriction is to prevent other people from turning a modified version of the software into non-free software with restrictive licensing. That's the only thing you're not allowed to do: make it unfree.
Open source software is a more general term that means that you make the program's source (human-readable) code available to anyone. You may still restrict how people can use the program.
One reason is for security software, so that people can check that the software isn't leaking your password or other data, and will therefore trust you. (One reason many people don't trust computerized voting machines is that their manufacturers keep their code secret.) Another reason for open source is that you're hoping other people will contribute improvements to your proprietary software.
Open access scholarly research reports are available for free download, rather than requiring the permission of a journal publisher.
\ No newline at end of file
diff --git a/cur/programming/3-lists/unit-3-exam-reference.es.html b/cur/programming/3-lists/unit-3-exam-reference.es.html
new file mode 100644
index 0000000000..9ae8548cb1
--- /dev/null
+++ b/cur/programming/3-lists/unit-3-exam-reference.es.html
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+Unidad 3 Examen AP
+
+
+
+
+
There are problems about a robot in a grid with special procedures that don't exist in Snap!:
The
MOVE_FORWARD ()
moves the sprite forward one grid square. (You need to call it repeatedly to move more than one grid square.)
The
ROTATE_LEFT ()
or
ROTATE_RIGHT ()
blocks always turn exactly 90 degrees. (They are used only to move a robot in a grid.)
The
CAN_MOVE (direction)
block returns true or false depending on whether or not the robot can move in the input direction without running into a wall or walking off of the maze.
You can read more about these AP language procedures on the Snap! Cheat Sheet in the Robot section at the bottom.
\ No newline at end of file
diff --git a/cur/programming/3-lists/unit-3-self-check.es.html b/cur/programming/3-lists/unit-3-self-check.es.html
new file mode 100644
index 0000000000..97f1302045
--- /dev/null
+++ b/cur/programming/3-lists/unit-3-self-check.es.html
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+Unidad 3 Preguntas de Autocomprobacion
+
+
+
+
+
¿Cuáles de las siguientes afirmaciones son verdaderas acerca de esta lista?
reporta la lista {r, 5, b, i, 3, k, 2, 3, t, 6}.
Correcto.
reporta la lista {conejo}.
El espacio en blanco en elemento de espera una lista como entrada, pero mapear coloca un único elemento de palabras y números, en ese espacio.
Las dos anteriores.
La lista de entrada (palabras y números) contiene cadenas de texto (no listas), por lo que el espacio en blanco en la función de entrada debe esperar una cadena de texto (no una lista).
Ninguna de las anteriores.
Mapear realiza la función de entrada sobre cada elemento en la lista de entrada.
La lista dentro de una lista que se muestra arriba deja más claro ahora que responde a este elemento de autocomprobación cuál es la estructura, pero tienes razón, en un programa real sería mejor usar un tipo de dato abstracto:
reporta la lista {Augusta, Boise, Columbia, Des Moines}.
Correcto.
reporta la lista {Augusta, Maine}.
No. Mapear realiza la función de entrada en cada elemento de la lista, no en toda la lista. La expresión elemento (1) de (capitales) (sin usar mapear en absoluto) reportaría la lista {Augusta, Maine}.
reporta la lista {A, B, C, D}.
No. Puede encontrar la primera letra de una palabra, pero no la primera letra de una lista. La expresión mapear (letra (1) de (elemento (1) de ( ))) sobre (capitales) reportaría la lista {A, B, C, D}.
reporta la lista {Maine, Idaho, Carolina del Sur, Iowa}.
No. Esta es complicada. Lo que se reporta es en realidad una lista de listas de un elemento: {{Maine}, {Idaho}, {Carolina del Sur}, {Iowa}}. Es posible que desees probarlo en Snap!. La expresiónmapear (elemento (2) de ()) sobre (capitales) reportaría la lista {Maine, Idaho, Carolina del Sur, Iowa}.
reporta la lista {{Boise, Idaho}, {Columbia, Carolina del Sur}, {Des Moines, Iowa}}.
No. Mapear realiza la función de entrada en cada elemento de la lista, no en toda la lista. La expresión todas menos la primera de (capitales) (sin usar mapear en absoluto) reportaría la lista de listas {{Boise, Idaho}, {Columbia, South Carolina}, {Des Moines, Iowa}}.
Which of the following statements are true about this list?
reports the list {r, 5, b, i, 3, k, 2, 3, t, 6}.
Correct.
reports the list {rabbit}.
The blank space in item of expects a list as its input, but map puts a single item from words and numbers into that slot.
Both of the above.
The input list (words and numbers) contains text strings (not lists) so the blank space in the input function should expect a text string (not a list).
None of the above.
Map performs the input function over each item in the input list.
The list inside a list shown above makes it clearest to you now as you answer this self-check item what the structure is, but you're right, in an actual program it would be better to use an abstract data type:
reports the list {Augusta, Boise, Columbia, Des Moines}.
Correct.
reports the list {Augusta, Maine}.
No. Map performs the input function on each item of the list—not on the whole list. The expression item (1) of (capitals) (without using map at all) would report the list {Augusta, Maine}.
reports the list {A, B, C, D}.
No. You can find the first letter of a word, but not the first letter of a list. The expression map (letter (1) of (item (1) of ( ))) over (capitals) would report the list {A, B, C, D}.
reports the list {Maine, Idaho, South Carolina, Iowa}.
No. This is a tricky one. What gets reported is actually a list of one-item lists: {{Maine}, {Idaho}, {South Carolina}, {Iowa}}. You might want to try it in Snap!. The expression map (item (2) of ()) over (capitals) would report the list {Maine, Idaho, South Carolina, Iowa}.
reports the list {{Boise, Idaho}, {Columbia, South Carolina}, {Des Moines, Iowa}}.
No. Map performs the input function on each item of the list—not on the whole list. The expression all but first of (capitals) (without using map at all) would report the list of lists {{Boise, Idaho}, {Columbia, South Carolina}, {Des Moines, Iowa}}.
Crear un bloque dibujar ladrillo te permite pensar en términos de un procedimiento con un nombre relacionado con el problema que estás resolviendo. Esto hace que tu código sea más fácil de leer; una vez que hayas codificado y depurado el bloque, no necesitas pensar en cómo funciona cada vez que lo usas. Esa es la belleza de la abstracción procedimental.
Un clon es una copia de un objeto que comparte información con su objeto padre (el objeto original). Por ejemplo, los clones tienen copias de cualquier secuencia de comandos del padre, y si se cambia la secuencia de comandos del padre, entonces las secuencias de comandos de los clones también cambian. Sin embargo, los cambios que realiza en un clon no se comparten con el padre, por lo que puede hacer cosas como mover cada clon a una posición diferente.
Usamos "entrada" vagamente para referirnos a las casillas vacías en un bloque que se llenan con valores. Pero entrada también se refiere a la información que ingresa el usuario en un programa, como en el bloque preguntar y esperar. La entrada del programa también puede provenir de tablas de datos, sonidos, imágenes, videos u otros programas.
Del mismo modo, salida del programa significa cualquier dato enviado desde su programa al usuario o a cualquier dispositivo. Por lo general, la salida depende de la entrada.
Modularidad es el proceso de dividir un proyecto de programación en subproblemas separados. Por ejemplo, en la página 2 de este laboratorio, creaste un código para agregar un contacto a tu aplicación y, en esta página, creaste un código para encontrar contactos.
Una variable del objeto es como una variable global en el sentido de que no pertenece a un programa en particular, pero sí pertenece a un objeto en particular.
As you learned in Unit 1 Lab 2 Page 2: Making Programs Talk, procedural abstraction is the process of developing a program by breaking up a large problem into smaller sub-problems.
Creating a draw brick block lets you think in terms of a procedure with a name related to the problem you are solving. This makes your code easier to read, and once you've coded and debugged the block, you don't need to think about how it works each time you use it. That's the beauty of procedural abstraction.
A clone is a copy of a sprite that shares information with its parent sprite (the original sprite). For example, clones have copies of any scripts from the parent, and if the parent's script is changed, then the clones' scripts change too. However, changes you make to a clone are not shared with the parent, so you can do things like move each clone to a different position.
An abstract data type (ADT) is a custom data type that's meaningful to your program. You learned about data types and ADTs on Unit 2 Lab 2 Page 2: Planning a Quiz App.
We use "input" loosely to mean the empty boxes in a block that get filled with values. But input also means information entered into a program by the user, as in the ask and wait block. Program input can also come from data tables, sounds, pictures, video, or other programs.
Similarly, program output means any data sent from your program to the user or to any device. Typically, the output depends on the input.
Modularity is the process of breaking a programming project up into separate sub-problems. For example on page 2 of this lab, you built code to add a contact to your app, and on this page, you built code to find contacts.
En este modelo de red, ¿cuál es el número mínimo de nodos (puntos de conexión) que pueden dejar de funcionar antes de que el emisor y el receptor no puedan comunicarse? (Aparte del remitente o el receptor, por supuesto).
1
No hay nodos que sean vitales para el sistema. Elige cualquier nodo para que deje de funcionar, pero pueda encontrar otro camino.
2
¡Correcto! Si el nodo con seis conexiones cae y también cualquiera de los dos a su izquierda, el emisor y el receptor no pueden comunicarse.
3
Intenta encontrar una cantidad menor de nodos que al dejar de funcionar interrumpan la comunicación.
4
Intenta encontrar una cantidad menor de nodos que al dejar de funcionar interrumpan la comunicación.
5
Intenta encontrar una cantidad menor de nodos que al dejar de funcionar interrumpan la comunicación.
En el mismo modelo de red, ¿cuál es el número máximo de nodos que pueden fallar y aun así permitir que el remitente y el receptor se comuniquen?
10
Dibuja un camino del remitente al receptor que aún funcione.
9
Dibuja un camino del remitente al receptor que aún funcione.
8
¡Correcto! Si los cuatro nodos de la derecha y también los cuatro nodos de la izquierda fallan, los dos nodos restantes en el medio aún permitirán que el remitente y el receptor se comuniquen.
7
Intenta encontrar una mayor cantidad de nodos que puedan dejar de funcionar sin impedir la comunicación.
6
Intenta encontrar una mayor cantidad de nodos que puedan dejar de funcionar sin interrumpir la comunicación.
Una empresa minorista en línea en particular utiliza secuencias binarias de 9 bits para identificar cada producto único para la venta. Con la esperanza de aumentar el número de productos que vende, la compañía planea cambiar a secuencias binarias de 10 bits. ¿Cuál de las siguientes afirmaciones describe mejor la consecuencia de usar secuencias de 10 bits en lugar de secuencias de 9 bits?
Dos productos más se pueden identificar de forma única.
Calcula cuántos productos se pueden identificar antes y después del cambio.
Diez productos más se pueden identificar de forma única.
Calcula cuántos productos se pueden identificar antes y después del cambio.
El doble de productos se pueden identificar de forma única.
Correcto. Antes 29=512 productos se pudieron identificar y ahora 210=1024 los productos pueden ser identificados.
Diez veces más productos se pueden identificar de forma única.
Calcula cuántos productos se pueden identificar antes y después del cambio.
Un programa en particular utiliza 4 bits para representar números enteros. Cuando ese programa suma los números 9 y 7, el resultado se da como 0. Identifica la mejor explicación del resultado.
Los datos se corrompieron durante la operación debido a una falla técnica.
Si bien la corrupción de datos es posible, no es una explicación probable para la recurrencia del resultado, como se puede demostrar con repetidos intentos de agregar 9 y 7.
El resultado se debió a un error de redondeo
No hay redondeo hecho aquí.
El resultado se debió a un error de desbordamiento.
Correcto. 9 + 7 = 16, que está más allá de la capacidad de 4 bits para expresar. 0=(0000)2 es el primero y 15=(1111)2 es el último entero expresable en un sistema de 4 bits. 16=(10000)2 conduce a un desbordamiento.
Se utilizó una representación de punto flotante para aproximar el resultado.
Un estudiante de cine graba una película en su teléfono inteligente y luego guarda una copia en su computadora. Se da cuenta de que la copia guardada es de una calidad de imagen mucho menor que la original. ¿Cuál de los siguientes podría NO ser una posible explicación para la menor calidad de imagen?
La película se guardó usando menos bits por segundo (una velocidad de bits más baja) que la película original.
Esto es probablemente lo que sucedió. ¿Cuál NO podría ser una posible explicación?
La copia del archivo de película se corrompió de alguna manera en el proceso de guardado.
Esto es posible; sin embargo, si el archivo está dañado, es poco probable que tenga un impacto negativo constante en la calidad de la imagen.
La película se guardó utilizando una técnica de compresión con pérdida.
Esto es muy probable. ¿Cuál NO podría ser una posible explicación?
Cada vez que se guarda un archivo de una computadora a otra, siempre se pierde cierta información.
Correcto. Es posible hacer duplicados exactos de información digital sin ninguna pérdida.
Un artista visual está procesando una imagen digital. ¿Cuál de las siguientes opciones describe una transformación sin perdida de la que se puede recuperar la imagen original? Elige dos respuestas.
Crear el negativo de una imagen, donde los colores se invierten (las áreas oscuras aparecen claras).
Correcto. Esta transformación es reversible y es un ejemplo de una transformación sin pérdida.
Desenfocar los bordes de una imagen.
El desenfoque mezcla los colores en los bordes de la imagen y una vez que los colores se han mezclado, es imposible recuperar los valores RGB originales de los píxeles involucrados.
Crear una copia en escala de grises de una imagen.
La escala de grises de una imagen reemplaza cada valor RGB con su promedio y una vez que las cantidades de rojo, verde y azul se han promediado juntas, es imposible recuperar los valores RGB originales de los píxeles.
Creación de una copia de la imagen volteada verticalmente.
Correcto. Esta transformación es reversible y es un ejemplo de una transformación sin pérdida.
¿Para cuál de los siguientes tipos datos podría usarse la compresión de datos con pérdida? Marca todas las respuestas que apliquen.
El código HTML de esta página web.
¿Te alegrarías si algunas de las palabras de la página desaparecieran?
Imagen del escritorio del equipo.
Correcto. La imagen podría tener algunos píxeles incorrectos y aún se vería bien.
Una película de acción en vivo en Netflix.
Correcto. La película podría tener algunos fotogramas corruptos y aún se vería bien.
Una caricatura en Netflix.
En realidad, los marcos dañados son más notables en una caricatura, que tiene áreas sólidas separadas por bordes afilados. (Afortunadamente, utilizando técnicas como la codificación de longitud de ejecución, es relativamente fácil obtener una versión sin pérdidas y altamente comprimida de una caricatura).
Un libro digital, para ser leído en una computadora.
Los libros digitales no se almacenan como imágenes, sino como texto. Cualquier error será notable, como caracteres sin sentido en la página.
\ No newline at end of file
diff --git a/cur/programming/4-internet/unit-4-self-check.html b/cur/programming/4-internet/unit-4-self-check.html
new file mode 100644
index 0000000000..e51678ea3f
--- /dev/null
+++ b/cur/programming/4-internet/unit-4-self-check.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+Unit 4 Self-Check Questions
+
+
+
+
+
In this model of a network, what is the minimum number of nodes (connection points) that can stop working before the sender and the receiver can't communicate? (Other than the sender or the receiver themselves, of course.)
1
There are no nodes that are vital to the system. Pick any node to stop working, and you can still find another path.
2
Correct! If the node with six connections goes down and also either of the two to its left, the sender and receiver can't communicate.
3
Try to find a smaller number of nodes that can stop working and still break communication.
4
Try to find a smaller number of nodes that can stop working and still break communication.
5
Try to find a smaller number of nodes that can stop working and still break communication.
In the same model network, what is the maximum number of nodes that can fail and still let Sender and Receiver communicate?
10
Draw a path from sender to receiver that still works.
9
Draw a path from sender to receiver that still works.
8
Correct! If the four nodes on the right and also the four nodes on the left all fail, the remaining two nodes in the middle will still allow the sender and receiver to communicate.
7
Try to find a higher number of nodes that can stop working and still permit communication.
6
Try to find a higher number of nodes that can stop working and still permit communication.
A particular online retail company uses 9-bit binary sequences to identify each unique product for sale. Expecting to increase the number of products it sells, the company is planning to switch to 10-bit binary sequences. Which of the statements below best describes the consequence of using 10-bit sequences instead of 9-bit sequences?
Two more products can be identified uniquely.
Compute how many products can be identified before and after the change.
Ten more products can be identified uniquely.
Compute how many products can be identified before and after the change.
Twice as many products can be identified uniquely.
Correct. Before 29=512 products could identified and now 210=1024 products can be identified.
Ten times as many products can be identified uniquely.
Compute how many products can be identified before and after the change.
A particular program uses 4 bits to represent whole numbers. When that program adds the numbers 9 and 7, the result is given as 0. Identify the best explanation of the result.
Data was corrupted during the operation due to a technical glitch.
While data corruption is possible, it is not a likely explanation for the recurrence of the result as one can demonstrate with repeated attempts to add 9 and 7.
The result was due to a round-off error.
There is no rounding done here.
The result was due to an overflow error.
Correct. 9+7=16, which is beyond the capacity of 4 bits to express. 0=(0000)2 is the first and 15=(1111)2 is the last integer expressible in a 4-bit system. 16=(10000)2 leads to an overflow.
A floating-point representation was used to approximate the result.
A film student records a movie on his smartphone and then saves a copy on his computer. He notices that the saved copy is of much lower image quality than the original. Which of the following could NOT be a possible explanation for the lower image quality?
The movie was saved using fewer bits per second (a lower bit rate) than the original movie.
This is likely what happened. Which one could NOT be a possible explanation?
The copy of the movie file was somehow corrupted in the process of saving.
This is possible; however if the file is corrupted, it is unlikely to have a consistent negative impact on image quality.
The movie was saved using a lossy compression technique.
This is very likely. Which one could NOT be a possible explanation?
Whenever a file is saved from one computer to another, some information is always lost.
Correct. It is possible to make exact duplicates of digital information without any loss.
A visual artist is processing a digital image. Which of the following describe a lossless transformation from which the original image can be recovered? Choose two answers.
Creating the negative of an image, where colors are reversed (dark areas appear light).
Correct. This transformation is reversible and is an example of a lossless transformation.
Blurring the edges of an image.
The blurring blends colors at the edges of the image and once colors have blended it is impossible to retrieve the original RGB values of the pixels involved.
Creating a grayscale copy of an image.
The grayscale of an image replaces each RGB value with their average and once the amounts of red, green, and blue have been averaged together, it is impossible to retrieve the original RGB values of the pixels.
Creating a vertically flipped copy of the image.
Correct. This transformation is reversible and is an example of a lossless transformation.
For which of the following kinds of data would lossy compression be okay? Check as many as apply.
The HTML code for this web page.
Would you be happy if some of the words on the page disappeared?
Your computer's desktop picture.
Correct. The picture could have a few wrong pixels and would still look okay.
A live-action movie on Netflix.
Correct. The movie could have a few corrupted frames and would still look okay.
A cartoon on Netflix.
Actually, corrupted frames are more noticeable in a cartoon, which has solid areas separated by sharp edges. (Fortunately, using techniques such as run length encoding, it's relatively easy to get a lossless, highly compressed version of a cartoon.)
A digital book, to be read on a computer.
Digital books aren't stored as pictures, but as text. Any error will be noticeable, as gibberish characters on the page.
\ No newline at end of file
diff --git a/cur/programming/4-internet/unit-4-vocab.es.html b/cur/programming/4-internet/unit-4-vocab.es.html
new file mode 100644
index 0000000000..490f042dbd
--- /dev/null
+++ b/cur/programming/4-internet/unit-4-vocab.es.html
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+Unidad 4 Vocabulario
+
+
+
+
+
La Internet es una red informática que utiliza protocolos abiertos para estandarizar la comunicación. Se requiere un dispositivo informático conectado a un dispositivo conectado a Internet para acceder a Internet.
Una red informática es un sistema informático interconectado que es capaz de enviar o recibir datos.
Un sistema informático es un grupo de dispositivos informáticos y programas que trabajan juntos para un propósito común.
Un dispositivo informático es un objeto físico que puede ejecutar un programa, como computadoras, tabletas, teléfonos celulares y sensores inteligentes.
World Wide Web es un sistema de páginas, programas y archivos vinculados que utiliza Internet.
Un enrutador es una computadora que pasa información de una red a otra.
Tu computadora probablemente usa un enrutador que está en algún lugar de tu hogar para conectarse a tu proveedor de servicios de Internet (ISP, por sus siglas en inglés).
Los proveedores de servicios de Internet son empresas que venden acceso a Internet a hogares e instituciones.
Las computadoras conectadas a Internet y las conexiones entre ellas no pertenecen a ninguna organización. Diferentes proveedores proporcionan Internet a diferentes comunidades. Y, por lo general, dentro de una gran organización (como una universidad), las conexiones a Internet las proporciona la propia organización.
El ancho de banda es la cantidad máxima de datos que se pueden enviar en un tiempo fijo (para datos digitales, se mide en bits por segundo). Un ancho de banda más alto es mejor porque los datos viajarán más rápido.
Almacenar datos en la nube significa almacenarlos en algún lugar en Internet, pero no sabes dónde. El proveedor de servicios en la nube (Google, Dropbox, Amazon, Snap!, etc.) administra la ubicación donde realmente se almacenan los datos.
TCP/IP son un par de protocolos que proporcionan dos niveles de abstracción:
IP (Protocolo de Internet) permite que tu computadora finja que tiene una conexión directa a otra computadora. Los enrutadores en cada punto de conexión en Internet ejecutan una IP, que transmite paquetes de una dirección IP a otra.
TCP (Protocolo de control de transmisión) permite que tu computadora finja que tiene una conexión confiable con la otra computadora. Las computadoras (incluidos los servidores) en los dos puntos finales de una comunicación ejecutan el TCP, lo que garantiza que los datos lleguen con éxito.
Un protocolo es un conjunto de reglas que especifican el comportamiento de un sistema.
Una dirección IP es un número único asignado a cada dispositivo en una red informática.
Un paquete es una pequeña porción de cualquier tipo de datos (texto, números, listas, etc.) y metadatos (información sobre los datos) que se transmiten a través de Internet como un flujo de datos.
La conmutación de paquetes significa que Internet envía breves ráfagas de información, no largas cadenas continuas.
El cifrado de clave pública utiliza un par de claves: una clave pública para el cifrado y una clave privada para el descifrado. El remitente usa la clave pública para cifrar el mensaje y el receptor usa su clave privada para descifrarlo.
SSL/TLS (capa de conexión segura/seguridad de la capa de transporte) es el estándar utilizado para la transferencia de información criptográficamente segura en Internet.
Las autoridades de certificación son organizaciones que emiten certificados digitales para verificar quién es el propietario de las claves de cifrado utilizadas para las comunicaciones seguras.
En lugar de confiar en que el sitio web es quien dice ser, ahora debes confiar en que la Autoridad de certificación sea confiable.
Un ataque DDoS (Denegación de Servicio Distribuida) usa un virus para inundar un servidor con muchas solicitudes de muchas computadoras a la vez para que a los usuarios de ese servidor se les niegue el servicio.
La brecha digital se refiere al acceso desigual a las computadoras e Internet basado en la pobreza, el racismo, el sexismo, el aislamiento en el campo, la edad y otros factores. La brecha digital afecta tanto a las personas dentro de un país como a los propios países.
Ciencia ciudadana es la investigación científica realizada en su totalidad o en parte por individuos distribuidos, muchos de los cuales pueden no ser científicos, que contribuyen con datos relevantes a la investigación utilizando sus propios dispositivos informáticos.
Crowdsourcing es el término general para usar Internet para que muchas personas ayuden a resolver un problema. (La ciencia ciudadana es un tipo de crowdsourcing.)
Una innovación informática puede ser física (como un automóvil autónomo), no física (como el software de edición de imágenes) o conceptual (como la idea de comercio electrónico), pero independientemente de la forma, debe incluir un programa como parte integral de su función.
Laboratorio 4: Representación y compresión de datos
Un bit es una sola unidad de datos que solo puede tener uno de dos valores. Normalmente representamos los dos valores como 0 (apagado) y 1 (encendido).
La notación científica (como 2.350.000 = 2,35 × 106) utiliza potencias de diez para representar valores muy grandes o muy pequeños. El punto flotante (o coma flotante) es la misma idea pero con potencias de dos.
The Internet is a computer network that uses open protocols to standardize communication. A computing device connected to an Internet-connected device is required to access the Internet.
A router is a computer that passes information from one network to another.
Your computer probably uses a router that is somewhere in your home to connect to your ISP.
ISPs (Internet Service Providers) are the companies who sell Internet access to homes and institutions.
The computers connected to the Internet and the connections among them don't belong to any one organization. Different ISPs provide the Internet to different communities. And typically within a large organization (such as a university), the Internet connections are provided by the organization itself.
Bandwidth is the maximum amount of data that can be sent in a fixed amount of time (for digital data, it is measured in bits per second). Higher bandwidth is better because the data will travel more quickly.
Storing data in the cloud means storing it somewhere on the Internet, but you don't know where. The cloud service provider (Google, Dropbox, Amazon, Snap!, etc.) manages the actual storage location.
TCP/IP is a pair of protocols that provide two levels of abstraction:
IP (Internet Protocol) lets your computer pretend it has a direct connection to another computer. The routers at every connection point on the Internet run IP, which transmits packets from one IP address to another.
TCP (Transmission Control Protocol) lets your computer pretend it has a reliable connection to the other computer. The computers (including servers) at the two endpoints of a communication run TCP, which guarantees that packets arrive successfully.
A protocol is set of rules that specify the behavior of a system.
An IP address is a unique number assigned to each device on a computer network.
A packet is a small chunk of any kind of data (text, numbers, lists, etc.) and metadata (information about the data) that is passed through the Internet as a data stream.
Packet switching means that the Internet sends short bursts of information, not long continuous strings.
Public key encryption uses a pair of keys: a public key for encryption and a private key for decryption. The sender uses the public key to encrypt the message, and receiver uses their private key to decrypt it.
A DDoS (Distributed Denial of Service) attack uses a virus to flood a server with many requests from many computers at once so that users of that server are denied service.
The digital divide refers to unequal access to computers and the Internet based on poverty, racism, sexism, isolation in the countryside, age, and other factors. The digital divide affects both individuals within a country and countries themselves.
Citizen science is scientific research conducted in whole or part by distributed individuals, many of whom may not be scientists, who contribute relevant data to research using their own computing devices.
Crowdsourcing is the general term for using the Internet to get a lot of people to help solve a problem. (Citizen science is a type of crowdsourcing.)
A computing innovation can be physical (such as a self-driving car), non-physical software (such as picture editing software), or conceptual (such as the idea of e-commerce), but regardless of the form, they must include a program as an integral part of their function.
Scientific notation (such as 2,350,000 = 2.35 × 106) uses powers of ten to represent very large or very small values. Floating point is the same idea but with powers of two.
El término "tiempo razonable" describe cualquier algoritmo que se ejecuta en tiempo polinómico. Los algoritmos de tiempo exponencial no son considerados razonables.
\ No newline at end of file
diff --git a/cur/programming/5-algorithms/unit-5-exam-reference.html b/cur/programming/5-algorithms/unit-5-exam-reference.html
new file mode 100644
index 0000000000..b202895731
--- /dev/null
+++ b/cur/programming/5-algorithms/unit-5-exam-reference.html
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+Unit 5 Exam Questions
+
+
+
+
+
Para utilizar una búsqueda binaria, los datos deben ser...
binarios
Todos los datos de una computadora se representan mediante binarios (unos y ceros), pero eso no tiene nada que ver con las búsquedas binarias, que se comparan con el valor medio para elegir cuál de las dos mitades eliminar.
ordenados
¡Correcto! Si los datos están ordenados, la comparación con el valor medio te dará una buena información sobre qué mitad de los datos debes guardar.
desordenados
Si los datos no están ordenados, no puedes estar seguro de que se pueda eliminar todo lo que está antes o después del valor medio.
lineales
"Lineal" es el nombre de otro algoritmo de búsqueda, no una propiedad de los datos.
¿Cuál de las siguientes preguntas se puede responder con una búsqueda binaria, suponiendo que los datos estén ordenados? Marca todas las que apliquen:
¿Cuál es el número de teléfono de mi amigo Rasheed?
¡Correcto! Estás buscando por un número de teléfono en la lista.
Dame una lista de todas las canciones de Beyoncé.
Tenemos que contrar todas las canciones de Beyoncé, no solo una.
Dime si el pan está en la lista de compras.
¡Correcto! Estás buscando un artículo en la lista.
¿Quién de mi lista de contactos vive en la Gran Avenida?
La lista de tus contactos está probablemente ordenado por nombre, no por dirección. También, puede haber más de una persona que viva en la Gran Avenida.
La siguiente tabla muestra el tiempo que tarda la computadora en realizar varias tareas sobre los datos de ciudades de diferentes tamaños.
Tarea
Ciudad pequeña (población 1,000)
Ciudad mediana (población 10,000)
Ciudad grande (población 100,000)
Entrada de datos
2 horas
20 horas
200 horas
Copia de seguridad de los datos
0.5 hora
5 horas
50 horas
Búsqueda a través de los datos
5 horas
15 horas
25 horas
Clasificación de datos
0.01 hora
1 hora
100 hora
Basado en la información de la tabla, cuál de las siguientes tareas es probable que tome la mayor cantidad de tiempo cuando se amplía para una ciudad con una población de 1,000,000.
Entrar datos
Al multiplicar el tamaño de la población por 10, el tiempo necesario para introducir los datos también se multiplica por 10, de modo que para una población de 1.000.000, debería tomar alrededor de 10×200=2000 horas.
Realizar una copia de seguridad de los datos
Al multiplicar el tamaño de la población por 10, el tiempo necesario para hacer copias de seguridad de los datos se multiplica por 10, por lo que para una población de 1.000.000, debería tardar unas 10×50=500 horas.
Buscar entre los datos
La búsqueda de datos parece aumentar en unas 10 horas cada vez que la población se multiplica por 10, por lo que para una población de 1.000.000, debería llevar unas 35 horas..
Clasificar datos
¡Correcto! Al multiplicar el tamaño de la población por 10, el tiempo necesario para la clasificación de los datos se multiplica por 100. Por lo tanto, para una población de 1.000.000, debería tomar alrededor de 100×100=10.000 horas.
¿En cuál de los siguientes problemas es apropiada una solución heurística?
Encontrar el elemento más grande de una lista.
Podemos encontrar la solución a este problema en el tiempo polinómico.
Encontrar la mejor combinación de ingredientes para la salsa de espagueti.
No hay una solución perfecta (correcta) para este problema porque diferentes personas tienen diferentes gustos.
Jugar al ajedrez.
¡Correcto! Este es un buen ejemplo porque hay una solución (una forma de determinar el resultado de un juego perfectamente jugado), la solución no se puede encontrar en tiempo polinómico, y una solución aproximada sería útil.
Encontrar la combinación de una cerradura de n números.
No hay posibilidad de una heurística porque no es útil tener una combinación casi correcta (una solución aproximada).
Los científicos que estudian las aves a menudo colocan etiquetas de rastreo a las aves migratorias. Para cada ave, los siguientes datos son recolectados regularmente en intervalos frecuentes:
Fecha y hora
Latitud y longitud
Altitud
Temperatura
¿Cuál de las siguientes preguntas sobre un ave en particular no puede ser respondida utilizando solo los datos recogidos de las etiquetas de rastreo?
Aproximadamente, ¿cuánto tiempo pasa el pájaro en el aire y en el suelo?
Esto podría determinarse a partir de los datos de "Altitud".
¿El pájaro viaja en grupos con otras aves rastreadas?
Esto podría determinarse a partir de los datos de "Latitud y Longitud".
¿Se ve afectada la ruta migratoria del ave por los patrones de temperatura?
Esto podría determinarse a partir de los datos de "Temperatura".
¿Cuáles son los efectos de la contaminación industrial en la ruta de migración del ave?
Correcto, no hay datos recogidos sobre la contaminación en el entorno del ave.
Usando computadoras, los investigadores a menudo buscan grandes conjuntos de datos para encontrar patrones interesantes en los datos. ¿Cuál de los siguientes no es un ejemplo donde la búsqueda de patrones es necesaria para reunir la información deseada?
Una empresa de compras en línea que analiza el historial de compras de los clientes para recomendar nuevos productos.
Este es un ejemplo de búsqueda de patrones para reunir la información deseada.
Una escuela secundaria que analiza los registros de asistencia de los estudiantes para determinar qué estudiantes deben recibir una advertencia disciplinaria.
Correcto, aquí no hay necesidad de análisis de patrones, solo clasificar los datos para obtener una lista de los estudiantes con inasistencia.
Una compañía de evaluación de crédito que analiza el historial de compras de los clientes para identificar casos de robo de identidad.
Este es un ejemplo de búsqueda de patrones para reunir la información deseada.
Una universidad que analiza los resultados del GPA y el SAT de los estudiantes de secundaria para evaluar su potencial de éxito en la universidad.
Este es un ejemplo de búsqueda de patrones para reunir la información deseada.
Una empresa de alquiler de coches utiliza una aplicación para hacer un seguimiento de las tendencias de viaje de sus clientes. Los datos recolectados pueden ser filtrados y clasificados por localización geográfica, fecha y hora, millas recorridas, y tarifa cobrada por el viaje. ¿Cuál de los siguientes es menos probable de ser respondido solamente con la característica de tendencias?
Qué hora del día es la más ocupada para la compañía en una ciudad determinada.
El filtrado por ubicación geográfica y la clasificación a través de la información de tiempo proporcionaría esta información.
Desde qué ubicación geográfica se originan los paseos más largos.
Clasificando las millas recorridas y anotando la ubicación geográfica se obtendría esta información.
Cómo afecta la competencia con las compañías de taxis locales a los negocios en un distrito determinado.
Correcto, no hay información sobre la competencia disponible en los datos recogidos.
Cuánto dinero fue ganado por la compañía en un mes determinado.
El filtrado por fecha y la suma de las tarifas cobradas darían esta información.
Una compañía de descargas de música en línea almacena información sobre las compras de canciones realizadas por sus clientes. Cada día, la siguiente información se hace pública en la base de datos del sitio web de la empresa.
El día y la fecha de cada canción comprada.
El título de la canción.
Las ciudades donde los clientes compraron cada canción.
El número de veces que cada canción fue comprada en una ciudad determinada.
A continuación se muestra una porción de ejemplo de la base de datos. La base de datos está ordenada por fecha y título de la canción.
Día y fecha
Título de la canción
Ciudad
Número de veces que fue comprada
lunes 07/10/17
Despacito
Boston, MA
117
lunes 07/10/17
Malibu
Chicago, IL
53
lunes 07/10/17
Malibu
New York, NY
197
lunes 07/10/17
Bad Liar
Anchorage, AK
11
martes 07/11/17
Despacito
San Diego, CA
241
¿Cuál de los siguientes no puede ser determinado utilizando sola la información en la base de datos?
La canción que más se compra en una semana determinada.
Esta información se puede encontrar sumando todas las compras de cada canción en una semana determinada.
La ciudad con menos compras en un día concreto.
Esta información se puede encontrar sumando todas las compras de cada ciudad en un día determinado.
El número total de ciudades en las que se compró una determinada canción en un mes determinado.
Esta información puede ser encontrada listando las ciudades para todas las compras de una canción en un mes determinado.
El número total de canciones compradas por un cliente particular durante el curso de un año determinado.
Correcto, no hay datos mostrados públicamente sobre clientes individuales.
Una nueva compañía de telefonía móvil—sin que sus clientes lo sepan—graba periódicamente fragmentos aleatorios de sus conversaciones y considera las grabaciones como datos. Además, recoge los siguientes metadatos de las conversaciones:
La hora inicial y final de la conversación
Los números de teléfono de los usuarios en la conversación
Las ubicaciones GPS de los usuarios en la conversación
¿Para cuál de los siguientes objetivos sería más útil analizar los datos en lugar de los metadatos?
Para determinar si alguno de sus usuarios estuvo presente en el momento y lugar de un delito.
Para este propósito, el GPS y la información del tiempo (en los metadatos) sería más útil.
Para determinar la hora del día, la aplicación se utiliza con mayor frecuencia en una determinada ubicación geográfica.
Para este propósito, el GPS y la información del tiempo (en los metadatos) sería más útil.
Para determinar el lenguaje que se utiliza con mayor frecuencia en las conversaciones de los usuarios.
Correcto. Para este propósito, los datos de la conversación serían analizados.
Para determinar los usuarios más activos de la aplicación en un año determinado.
Para este propósito, los números de teléfono de los usuarios y la información de la hora (en los metadatos) serían más útiles.
¿Cuál de los siguientes no es un ejemplo de metadatos?
Los datos sobre una imagen digital describen el tamaño de la imagen, la resolución de la imagen, la profundidad del color, y cuando se creó la imagen.
Este es un ejemplo de datos sobre datos.
Los datos sobre un documento de texto que contienen información sobre la longitud del documento, su autor, la fecha en que se redactó el documento y un breve resumen del contenido.
Este es un ejemplo de datos sobre datos.
Datos sobre una manada de lobos describiendo su entorno, sus hábitos de caza, su dieta y sus ciclos de sueño.
Correcto. Los datos sobre los lobos no son datos sobre datos.
Datos sobre una página web que contenga una descripción del contenido de la página y una lista de palabras clave vinculadas al contenido.
Este es un ejemplo de datos sobre datos.
\ No newline at end of file
diff --git a/cur/programming/5-algorithms/unit-5-self-check.html b/cur/programming/5-algorithms/unit-5-self-check.html
new file mode 100644
index 0000000000..26a61ba63c
--- /dev/null
+++ b/cur/programming/5-algorithms/unit-5-self-check.html
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+Unit 5 Self-Check Questions
+
+
+
+
+
In order to use a binary search, the data must be...
binary
All data in a computer are represented using binary (ones and zeros), but that has nothing to do with binary searches, which compare against the middle value to choose which of two halves to eliminate.
sorted
Correct! If the data are sorted, then comparing to the middle value will give you good information about which half of the data to keep.
unsorted
If the data are unsorted, you can't be sure that everything before or everything after the middle value can be eliminated.
linear
"Linear" is the name of another search algorithm, not a property of the data.
The table below shows the computer time it takes to complete various tasks on the data of different sized towns.
Task
Small Town (population 1,000)
Mid-sized Town (population 10,000)
Large Town (population 100,000)
Entering Data
2 hours
20 hours
200 hours
Backing up Data
0.5 hours
5 hours
50 hours
Searching through Data
5 hours
15 hours
25 hours
Sorting Data
0.01 hour
1 hour
100 hours
Based on the information in the table, which of the following tasks is likely to take the longest amount of time when scaled up for a city of population 1,000,000.
Entering data
As the population size is multiplied by 10, the time needed for entering data is also multiplied by 10, so for a population of 1,000,000, it should take about 10×200=2000 hours.
Backing up data
As the population size is multiplied by 10, time needed for backing up data is multiplied by 10, so for a population of 1,000,000, it should take about 10×50=500 hours.
Searching through data
Searching through the data seems to go up by about 10 hours each time the population is multiplied by 10, so for a population of 1,000,000, it should take about 35 hours.
Sorting data
Correct! As the population size is multiplied by 10, the time needed for the sorting of data is multiplied by 100. So, for a population of 1,000,000, it should take about 100×100=10,000 hours.
In which of the following problems is a heuristic solution appropriate?
Find the biggest item in a list.
We can find the solution to this problem in polynomial time.
Find the best combination of ingredients for spaghetti sauce.
There is no perfect (correct) solution to this problem because different people have different tastes.
Playing chess.
Correct! This is a good example because there is a solution (a way to determine the outcome of a perfectly played game), the solution can't be found in polynomial time, and an approximate solution would be helpful.
Find the combination to a lock with n numbers.
There is no possibility of a heuristic because it's not helpful to have an almost correct combination (an approximate solution).
Scientists studying birds often attach tracking tags to migrating birds. For each bird, the following data is collected regularly at frequent intervals:
Date and time
Latitude and Longitude
Altitude
Temperature
Which of the following questions about a particular bird could not be answered using only the data gathered from the tracking tags.
Approximately how much time does the bird spend in the air and on the ground?
This could be determined from the “Altitude” data.
Does the bird travel in groups with other tracked birds?
This could be determined from the “Latitude and Longitude” data.
Is the migration path of the bird affected by temperature patterns?
This could be determined from the “Temperature” data.
What are the effects of industrial pollution on the migration path of the bird?
Correct, there is no data collected on pollution in the bird’s environment.
Using computers, researchers often search large data sets to find interesting patterns in the data. Which is of the following is not an example where searching for patterns is needed to gather desired information?
An online shopping company analyzing customers purchase history to recommend new products.
This is an example of searching for patterns to gather desired information.
A high school analyzing student attendance records to determine which students should receive a disciplinary warning.
Correct, there is no need here for pattern analysis, just sorting the data to get a list of students with poor attendance records.
A credit scoring company analyzing purchase history of clients to identify cases of identity theft.
This is an example of searching for patterns to gather desired information.
A college analyzing high school students’ GPA and SAT scores to assess their potential college success.
This is an example of searching for patterns to gather desired information.
A car hailing company uses an app to track the travel trends of its customers. The data collected can be filtered and sorted by geographic location, time and date, miles traveled, and fare charged for the trip. Which of the following is least likely to be answerable using only the trends feature?
What time of the day is the busiest for the company at a given city.
Filtering by geographic location and sorting through time information would yield this information.
From which geographical location do the longest rides originate.
Sorting through miles traveled and noting geographic location would yield this information.
How is competition with the local cab companies affecting business in a given district.
Correct, there is no information on the competition available in the data collected.
How much money was earned by the company in a given month.
Filtering by date and summing up fares charged would yield this information.
An online music download company stores information about song purchases made by its customers. Every day, the following information is made publicly available on a company website database.
The day and date of each song purchased.
The title of the song.
The cities where customers purchased each song.
The number of times each song was purchased in a given city.
An example portion of the database is shown below. The database is sorted by date and song title.
Day and Date
Song Title
City
Number of Times Purchased
Mon 07/10/17
Despacito
Boston, MA
117
Mon 07/10/17
Malibu
Chicago, IL
53
Mon 07/10/17
Malibu
New York, NY
197
Mon 07/10/17
Bad Liar
Anchorage, AK
11
Tue 07/11/17
Despacito
San Diego, CA
241
Which of the following cannot be determined using only the information in the database?
The song that is purchased the most in a given week.
This information can be found by summing all the purchases of every song in a given week.
The city with the fewest purchases on a particular day.
This information can be found by summing all the purchases of every city on a given day.
The total number of cities in which a certain song was purchased in a given month.
This information can be found by listing the cities for all the purchases of a given song in a given month.
The total number of songs purchased by a particular customer during the course of a given year.
Correct, there is no data publicly displayed on individual customers.
A new mobile phone company—unbeknownst to its customers—periodically records random snippets of their conversations and considers the recordings as data. In addition, it collects the following metadata on the conversations:
The start and end time of the conversation
The phone numbers of the users in the conversation
The GPS locations of the users in the conversation
For which of the following goals would it be more useful to analyze the data instead of the metadata?
To determine if any of its users was present at the time and place of a crime.
For this purpose, GPS and time information (in the metadata) would be more useful.
To determine the time of day the app is used most frequently in a certain geographic location.
For this purpose, GPS and time information (in the metadata) would be more useful.
To determine the language most commonly used in user conversations.
Correct. For this purpose, the conversation data itself would be analyzed.
To determine the most active users of the app for a given year.
For this purpose, user phone numbers and time information (in the metadata) would be more useful.
Which of the following is not an example of metadata?
Data about a digital image describing the size of the image, image resolution, color depth, and when the image was created.
This is an example of data about data.
Data about a text document containing information about the length of the document, its author, the date the document was written, and a short summary of the content.
This is an example of data about data.
Data about a pack of wolves describing their habitat, hunting habits, diet, and sleep cycles.
Correct. Data about wolves is not data about data.
Data about a web page containing a description of page content and a list of key words linked to the content.
This is an example of data about data.
\ No newline at end of file
diff --git a/cur/programming/5-algorithms/unit-5-vocab.es.html b/cur/programming/5-algorithms/unit-5-vocab.es.html
new file mode 100644
index 0000000000..77b95f3f46
--- /dev/null
+++ b/cur/programming/5-algorithms/unit-5-vocab.es.html
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+Unidad 5 Vocabulario
+
+
+
+
+
Unidad 5: Algoritmos y Simulaciones
+
Laboratorio 1: Algoritmos de búsqueda y eficiencia
Un algoritmo de búsqueda binaria comienza en medio de una lista ordenada y elimina repetidamente la mitad de la lista hasta que se encuentra el valor deseado o se han eliminado todos los elementos.
La relación entre el tamaño de la entrada y el número de pasos requeridos para resolver un problema es la eficiencia del algoritmo utilizado para resolver el problema.
Un algoritmo toma tiempo polinómico si el número de pasos es menor o igual a una potencia del tamaño de la entrada, como la constante (n0), sublineal, lineal (n1), cuadrático (n2), o cúbico (n3).
Un algoritmo toma tiempo exponencial si el número de pasos es menor o igual a una función como 2n, 10n, etc., que es mucho más lento que cualquier polinomio.
Un algoritmo toma tiempo lineal el número de pasos es proporcional al tamaño de la entrada; doblando el tamaño de la entrada se dobla el tiempo requerido.
Un algoritmo toma tiempo sublineal si el tiempo aumenta más lentamente que el tamaño.
Un algoritmo toma tiempo constante si toma la misma cantidad de tiempo sin importar el tamaño de la entrada.
Un algoritmo toma tiempo cuadrático si el número de pasos es proporcional al cuadrado del tamaño de la entrada.
Un problema de decisión es un problema con una respuesta verdadera/falsa (por ejemplo, "¿es 5,825,496,221 un número primo?").
Un problema de optimización es uno con el objetivo de encontrar la mejor solución entre muchos (por ejemplo, "¿cuál es el mejor horario de la escuela para colocar a cada estudiante en la mayor cantidad posible de sus clases solicitadas?").
Un problema resoluble es un problema de decisión para el cual es posible escribir un algoritmo que dará una salida correcta para todas las entradas.
Un problema indecidible es lo opuesto. No es posible escribir un algoritmo que dará una salida correcta para todas las entradas—aunque podría ser posible para algunos de ellos.
En computación secuencial, las operaciones se realizan en orden de una en una.
En computación en paralelo, el programa se divide en pasos más pequeños, algunos de los cuales se realizan al mismo tiempo. Las computadoras modernas tienen múltiples procesadores (2, 4, u 8) en una sola computadora, para que puedas hacer un procesamiento paralelo a pequeña escala en la máquina de tu escritorio.
Los programadores se refieren a la aceleración de la solución paralela para describir cuántas veces más rápido se compara la solución paralela con la solución secuencial: text{aceleración} = frac{text{tiempo secuencial}}{text{tiemo paralelo}}
Las simulaciones son representaciones por computadora de cosas o situaciones reales que varían con el tiempo. Una simulación es una abstracción diseñada para un propósito en particular.
Los datos son los valores que los ordenadores reciben de varias fuentes, incluyendo la actividad humana, los sensores, etc.
La información son los patrones humanamente útiles extraídos de los datos.
DAT-2.A.2
Los datos proporcionan oportunidades para identificar tendencias, establecer conexiones y abordar problemas. La información es el resultado del análisis de esos datos.
Una correlación es un tipo particular de información, es decir, una dependencia entre dos variables en una situación. Por ejemplo, en la primera imagen aquí, mientras una variable sube, la otra baja. También es una correlación cuando una variable sube o baja y la otra cambia de la misma manera.
Un registro es una fila de un conjunto de datos (distinta de la primera fila, que contiene los títulos de las columnas). Un registro único puede ser los datos de un estudiante de su escuela, los datos de un terremoto que ocurrió, los datos de un hospital en los EE. UU., o los datos de un contacto en tu lista de contactos. En otras palabras, un registro es un segmento horizontal del conjunto de datos.
Un campo es un elemento de un registro en un conjunto de datos. Puede ser el tutor o maestro de una persona, la magnitud de un terremoto en Los Ángeles la semana pasada, el propietario de un hospital en Chicago, o el número de teléfono de una persona en tu lista de contactos.
Una columna es una lista que contiene los datos de un campo para todos los registros de un conjunto de datos. Una columna podría ser el profesor de un salón de clases para cada estudiante en tu escuela, la magnitud de cada terremoto en el conjunto de datos, el propietario de cada hospital en los EE. UU. o el número de teléfono de cada persona de tu lista de contactos. En otras palabras, una columna es un segmento vertical del conjunto de datos.
Limpieza de datos es el proceso de hacer los datos uniformes sin cambiar su significado (como el reemplazo de abreviaturas, ortografía y mayúsculas por la palabra deseada o la conversión de millas a kilómetros). Los programadores pueden utilizar programas para filtrar y limpiar los datos digitales, obteniendo así una mayor visión y conocimiento.
Los metadatos son datos sobre datos. Por ejemplo, el dato puede ser una imagen, mientras que los metadatos pueden incluir la fecha de creación o el tamaño del archivo de la imagen.
Laboratorio 4: Problemas irresolubles e indecidibles
Un bucle infinito es una secuencia de instrucciones de computadora que se repite para siempre.
Un problema irresoluble es aquel para el que nunca se puede escribir un algoritmo para encontrar la solución.
Un problema indecidible es aquel para el que nunca se puede escribir un algoritmo que siempre dé una decisión verdadero/falso correcta para cada valor de entrada. Los problemas indecidibles son una subcategoría de problemas irresolubles que incluyen solo problemas que deberían tener una respuesta sí/no (como: ¿mi código tiene un error?).
\ No newline at end of file
diff --git a/cur/programming/5-algorithms/unit-5-vocab.html b/cur/programming/5-algorithms/unit-5-vocab.html
new file mode 100644
index 0000000000..38ffb5bb28
--- /dev/null
+++ b/cur/programming/5-algorithms/unit-5-vocab.html
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+Unit 5 Vocabulary
+
+
+
+
+
A binary search algorithm starts in the middle of a sorted list and repeatedly eliminates half the list until either the desired value is found or all elements have been eliminated.
The relationship between the input size and the number of steps required to solve a problem is the efficiency of the algorithm used to solve the problem.
An algorithm takes polynomial time if the number of steps is less than or equal to a power of the size of the input, such as constant (n0), sublinear, linear (n1), quadratic (n2), or cubic (n3).
An algorithm takes exponential time if the number of steps is proportional to an exponential function of the size of the input, such as 2n, 10n, etc., which is much slower than any polynomial.
A decision problem is a problem with a true/false answer (for example, "is 5,825,496,221 a prime number?").
An optimization problem is one with the goal of finding the best solution among many (for example, "what's the best school schedule to place every student into as many of their requested classes as possible?").
A decidable problem a decision problem for which it's possible to write an algorithm that will give a correct output for all inputs.
An undecidable problem is the opposite. It's not possible to write an algorithm that will give a correct output for all inputs—even though it might be possible for some of them.
In sequential computing, operations are performed in order one at a time.
In parallel computing, the program is broken into smaller steps, some of which are performed at the same time. Modern computers have multiple processors (2, 4, or 8) in a single computer, so you can do small-scale parallel processing on the machine on your desk.
Programmers refer to the speedup of parallel solution to describe how many times as fast the parallel solution is compared to the sequential solution: text{speedup} = frac{text{sequential time}}{text{parallel time}}
Simulations are computer representations of real things or situations that vary over time. A simulation is an abstraction designed for a particular purpose.
A correlation is a particular kind of information, namely a dependence between two variables. For example in the first picture here, as one variable goes up the other goes down. It's also a correlation when as one variable goes up or down the other changes in the same manner.
A record is one row in a dataset (other than the first row, which contains the column headings). A single record might be the data for one student in your school, the data for one earthquake that happened, the data for one hospital in the U.S, or the data for one contact in your contact list. In other words, a record is a horizontal slice of the dataset.
A field is one item of a record in a dataset. It might be one person's homeroom teacher, the magnitude of an earthquake in Los Angeles last week, the owner of one hospital in Chicago, or the phone number of one person in your contact list.
A column is a list containing the data from one field for all records in a dataset. A column might be the homeroom teacher for every student in your school, the magnitude of every earthquake in the dataset, the owner of every hospital in the U.S., or the phone number of every person in your contact list. In other words, a column is a vertical slice of the dataset.
Cleaning data is the process of making the data uniform without changing its meaning (such as replacing abbreviations, spellings, and capitalizations with the intended word or converting miles to kilometers). Programmers can use programs to filter and clean digital data, thereby gaining insight and knowledge.
Metadata are data about data. For example, the piece of data may be an image, while the metadata may include the date of creation or the file size of the image.
An infinite loop is a sequence of computer instructions that repeats forever.
An unsolvable problem is one for which no algorithm can ever be written to find the solution.
An undecidable problem is one for which no algorithm can ever be written that will always give a correct true/false decision for every input value. Undecidable problems are a subcategory of unsolvable problems that include only problems that should have a yes/no answer (such as: does my code have a bug?).
\ No newline at end of file
diff --git a/cur/programming/6-computers/unit-6-self-check.es.html b/cur/programming/6-computers/unit-6-self-check.es.html
new file mode 100644
index 0000000000..0e90cd05d3
--- /dev/null
+++ b/cur/programming/6-computers/unit-6-self-check.es.html
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+Unidad 6 Preguntas de Autocomprobacion
+
+
+
Unidad 6: ¿Cómo funcionan las computadoras?
+
Laboratorio 1: Jerarquía de abstracción computacional
¿El programa original reporta una lista de palabras o reporta cada palabra por separado? ¿Qué haría esto?
Mantener toma un predicado (una pregunta) como entrada y reporta una lista de los elementos que hacen que ese predicado sea verdadero.
¡Correcto!
Combinar toma un predicado con dos espacios en blanco (como () + () o unir () ()) como entrada y reporta del resultado de combinar todos los elementos de la lista usando esa función (por ejemplo, sumándolos todos juntos o uniéndolos todos en una cadena de texto).
¿Cuáles de las siguientes afirmaciones son correctas sobre un lenguaje de programación de bajo nivel en comparación con un lenguaje de programación de alto nivel?
Los programas de lenguaje de bajo nivel son generalmente más difíciles de entender para las personas, que los programas escritos en un lenguaje de alto nivel.
Un lenguaje de bajo nivel proporciona a los programadores más abstracciones que un lenguaje de alto nivel.
Los programas de lenguaje de bajo nivel son generalmente más difíciles de depurar que los programas escritos en un lenguaje de alto nivel.
I solamente.
I es verdadera, pero ¿es la única declaración verdadera?
I y III solamente.
Correcto. Ambas afirmaciones son correctas y lo contrario de II es cierto, ya que los lenguajes de alto nivel son más expresivos y capaces de crear abstracciones.
II y III solamente.
Lo contrario de II es verdadera, ya que los lenguajes de alto nivel son más expresivos y capaces de crear abstracciones.
I, II, y III.
Lo contrario de II es verdadera, ya que los lenguajes de alto nivel son más expresivos y capaces de crear abstracciones.
Un programa está escrito en un lenguaje de programación de alto nivel. Identifica la declaración correcta sobre el programa.
El programa también puede ser escrito en lenguaje de máquina usando código binario, pero entonces será menos fácil de entender por la personas.
Correcto. Para los humanos, es muy difícil leer el código binario.
El programa también puede ser escrito en lenguaje de máquina usando código binario, lo que disminuirá la posibilidad de errores.
Los errores probablemente aumentarán ya que es más difícil para los humanos darle sentido al código binario.
El programa no puede ser escrito en código binario, ya que solo los datos pueden ser representados utilizando la notación binaria.
Todo el programa puede ser convertido en código binario. Dicho código es en realidad el único código que una máquina puede entender.
Partes simples del programa pueden ser escritas en código binario, pero los elementos de control como los condicionales, los bucles deben ser expresados en un lenguaje de programación de alto nivel.
Todo el programa puede ser convertido en código binario. Dicho código es en realidad el único código que una máquina puede entender.
¿Cuál de las siguientes expresiones reporta verdadero?
I solamente
Primero evalúa cada parte por separado y luego determina qué reporta el bloque más externo de cada expresión. En la expresión I: ¿Qué reporta?(verdadero) y (falso). ¿Qué reporta? no((verdadero) y (falso)). En la expresión II: ¿Qué reporta? (verdadero) o (falso). ¿Qué reporta? no((verdadero) o (falso)).
II solamente
Correcto!
I y II
Echa otro vistazo a la expresión I. ¿Qué reporta no((verdadero) y (falso)) (a la derecha) al bloque y externo?
Ni I ni II
TEcha otro vistazo a la expresión II. ¿Qué reporta (verdadero) y (falso) (a la derecha) al bloque o externo?
Como Gordon Moore observó en 1965, los datos muestran que las velocidades de procesamiento por computadora se duplican aproximadamente cada dos años. Las empresas de tecnología utilizan esta observación, ahora conocida como "Ley de Moore", en su planificación. De lo siguiente, identifica cuál describe mejor cómo las empresas de tecnología pueden utilizar la Ley de Moore en la planificación.
Pueden esperar duplicar sus ganancias cada dos años.
No es posible predecir tal cosa usando la Ley de Moore.
Pueden anticipar las fechas precisas en que estarán disponibles los últimos avances informáticos y, por lo tanto, planificar con precisión sus productos con anticipación.
No es posible predecir tal cosa usando la Ley de Moore.
Pueden basar sus objetivos de Investigación y Desarrollo en las velocidades de procesamiento futuras esperadas.
Correcto.
Pueden esperar que sus costos se dupliquen con cada aumento en la velocidad del procesador.
No es posible predecir tal cosa usando la Ley de Moore.
\ No newline at end of file
diff --git a/cur/programming/6-computers/unit-6-self-check.html b/cur/programming/6-computers/unit-6-self-check.html
new file mode 100644
index 0000000000..ce4b740e64
--- /dev/null
+++ b/cur/programming/6-computers/unit-6-self-check.html
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+Unit 6 Self-Check Questions
+
+
+
Does the original script report a list of words or does it report each word separately? Which would this do?
Keep takes a predicate (a question) as input and reports a list of the items that make that predicate true.
Correct!
Combine takes a predicate with two blanks (like or ) as input and reports the result of combining all the list items using that function (for example, adding them all together or joining them all into one text string).
A program is written in a high-level programming language. Identify the correct statement about the program?
The program can also be written in machine language using binary code, but then it will be less easily understood by people.
Correct. Binary code is very hard to read for humans.
The program can also be written in machine language using binary code, which will decrease the possibility of mistakes.
Mistakes will likely increase as it is harder for humans to make sense of binary code.
The program cannot be written in binary code as only data can be represented by using binary notation.
Entire program can be converted to binary code. Such a code is actually the only code a machine can understand.
Simple parts of the program can be written in binary code, but control elements such as conditionals, loops must be expressed in a high-level programming language.
Entire program can be converted to binary code. Such a code is actually the only code a machine can understand.
Which of the following expressions will report true?
I only
Evaluate each part separately first, and then determine what the outermost block in each expression will report. In expression I: What does (true) and (false) report? What does not((true) and (false)) report? In expression II: What does (true) or (false) report? What does not((true) or (false)) report?
II only
Correct!
I and II
Take another look at expression I. What does not((true) and (false)) (on the right) report to the outermost and block?
Neither I nor II
Take another look at expression II. What does (true) and (false) (on the right) report to the outermost or block?
As Gordon Moore observed in 1965, data show that computer processing speeds roughly double every two years. Technology companies use this observation, now known as "Moore’s Law,’ in their planning. From the following, identify which one best describes how technology companies can use Moore’s Law in planning.
They can expect to double their profits every two years.
No such thing is possible to predict using Moore’s Law.
They can anticipate the precise dates when the latest computing advancements will be available and therefore accurately plan their products in advance.
No such thing is possible to predict using Moore’s Law.
They can base their R&D (Research and Development) targets on expected future processing speeds.
Correct.
They can expect their costs to double with each increase in processor speed.
No such thing is possible to predict using Moore’s Law.
\ No newline at end of file
diff --git a/cur/programming/6-computers/unit-6-vocab.es.html b/cur/programming/6-computers/unit-6-vocab.es.html
new file mode 100644
index 0000000000..b110a3cd29
--- /dev/null
+++ b/cur/programming/6-computers/unit-6-vocab.es.html
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+Unidad 6 Vocabulario
+
+
+
Unidad 6: ¿Cómo funcionan las computadoras?
+
Laboratorio 1: Jerarquía de abstracción computacional
Digital y análogo son conceptos opuestos. Digital significa información que es representada en unos y ceros. Análogo significa información que es representada por señales que varían constantemente (es decir, que incluyen los valores intermedios).
Una biblioteca de software es un paquete de procedimientos que puedes importar a tu programa. Una biblioteca es un tipo de abstracción: no es necesario que conozcas los detalles de cómo está codificada. Puedes construir bibliotecas por ti mismo, o puedes usar una que haya escrito otra persona.
Lenguaje de máquina es el lenguaje de programación de más bajo nivel; es entendido directamente por el hardware de la computadora.
Arquitectura es una abstracción, una especificación del lenguaje de máquina. También indica cómo se conecta el procesador a la memoria. No especifica la circuitería; la misma arquitectura se puede construir como circuitería de muchas maneras diferentes.
Un circuito integrado ("CI" or "chip") es un dispositivo físico individual que contiene millones o miles de millones de partes eléctricas básicas. Un procesador es un IC, pero no todos los procesadores son CI; También hay chips de proposito especial dentro de una computadora.
Laboratorio 2: Historia e impacto de las computadoras
Digital and analog are opposites. Digital means information that is represented as ones and zeros. Analog means information that is represented by signals that vary continuously (that is, including in-between values).
A software library is a package of procedures that you can import into your program. A library is a kind of abstraction: you don't have to know any of the details of how it's coded. You can build libraries yourself, or you can use one that someone else wrote.
Machine language is the lowest-level programming language; it is directly understood by the computer hardware.
Architecture is an abstraction, a specification of the machine language. It also tells how the processor connects to the memory. It doesn't specify the circuitry; the same architecture can be built as circuitry in many different ways.
An integrated circuit ("IC" or "chip") is a single physical device that contains millions or billions of basic electrical parts. A processor is an IC, but not all ICs are processors; there are also special-purpose chips inside a computer.
Transparencia del estado: volver a poner todo (objeto, lápiz, etc.) exactamente como estaba cuando comenzaste, es importante cuando los bloques dependen de otros bloques. Por lo general, esto significa devolver el objeto a la misma posición y dirección, y el lápiz al mismo color y tamaño que tenían.
Un fractal es un patrón repetido infinito formado por copias (o ligeras variaciones) de la misma forma. En esta imagen, la rama verde tiene (esencialmente) la misma forma que la imagen completa.
State transparency means putting everything back exactly as it was when you started. It is especially important when blocks depend on other blocks. Usually, this means returning the sprite to the same position and direction and returning the pen to the same color and size.
A fractal is an infinite repeating pattern made up of copies (or slight variations) of the same shape. In this picture, the green branch is (essentially) the same shape as the entire picture.
Jerry Lawson (1940-2011) fue un ingeniero electrónico estadounidense y el pionero de los videojuegos, conocido como el "padre del cartucho de videojuegos". Nacido en la ciudad de Nueva York, Jerry tomó clases tanto en el Queens College como en el City College of New York. Mientras trabajaba como ingeniero jefe de hardware en Fairchild Semiconductor, lideró el desarrollo de la consola Channel F y fue pionero en la tecnología del cartucho de videojuegos, que se popularizó con Atari 2600.
Grace Hopper (1906-1992) fue una contralmirante de la Marina de los Estados Unidos y pionera de la programación informática. Es mejor conocida por sus contribuciones pioneras a la programación de computadoras, el desarrollo de software y el diseño e implementación de lenguajes de programación.
Uno de los primeros casos de "depuración" fue cuando una polilla real quedó atrapada dentro de una computadora con la que Grace Hopper estaba trabajando en 1947. Aquí hay una página de su cuaderno con la polilla pegada.
Thomas (David) Petite (nacido en 1956) es miembro de la Tribu Fond du Lac de los Chippewa del Lago Superior. David es conocido por su trabajo en dispositivos habilitados para conexiones inalámbricas. Es uno de los primeros inventores de las redes inalámbricas ad hoc, un tipo de red inalámbrica temporal y descentralizada que permite que todos los teléfonos móviles funcionen hoy en día. Sus inventos también fueron una fuerza impulsora detrás del desarrollo de lo que ahora se conoce como la "Red Inteligente", la cual monitorea y aprovecha el poder de los dispositivos habilitados para conexiones inalámbricas en una ubicación específica.
Vint Cerf (nacido en 1943) es un pionero de Internet de EE. UU. y es reconocido como uno de "los padres de Internet". Vint Cerf, junto con Bob Kahn, co-desarrolló TCP/IP, un marco para organizar el conjunto de protocolos de comunicación utilizados en Internet y redes informáticas similares. Cerf también ha sido miembro de la Junta de Síndicos de la Gallaudet University, una universidad para la educación de personas sordas y con dificultades auditivas. Cerf mismo tiene dificultades auditivas y utiliza audífonos.
Luis von Ahn (nacido en 1978), uno de los pioneros del crowdsourcing, es un emprendedor guatemalteco con un doctorado en informática. Si alguna vez tuviste que hacer clic en un encasillado o identificar imágenes para confirmar que no eres un robot, has utilizado tecnología basada en el trabajo de la empresa de seguridad digital reCAPTCHA de Ahn. reCAPTCHA protege los sitios web del fraude y el abuso con una interrupción mínima de la experiencia del usuario. Después de vender reCAPTCHA a Google en 2009, cofundó la popular plataforma de aprendizaje de idiomas Duolingo, que en 2020 tenía más de 500 millones de estudiantes en 39 idiomas.
Imagen proporcionada para publicación con permiso de Nicola Whiting
Nicola Whiting es una diseñadora de joyas convertida en experta en ciberseguridad. Desde 2011, ha trabajado para Titania, líder a nivel mundial en ciberseguridad que se especializa en detectar problemas de seguridad y cumplimiento en redes. Whiting ha contribuido a liderar a Titania desde ser una ambiciosa startup hasta convertirse en la reconocida empresa que es hoy en día. Whiting también forma parte del consejo de NeuroCyber, una compañía que educa al público sobre cómo la neurodiversidad (por ejemplo, el trastorno del espectro autista, el TDAH y otras diferencias cerebrales) es beneficiosa para el progreso en ciberseguridad, y ayuda a desarrollar culturas de apoyo a través de políticas y prácticas para personas neurodivergentes.
Mary Golda Ross (1908-2008) fue una destacada ingeniera nativa americana y la primera mujer empleada por Lockheed, una corporación estadounidense de tecnología aeroespacial. A Ross le apasionaba la enseñanza a mujeres y nativos americanos, y pasó más de diez años enseñando mientras completaba su maestría en Matemáticas durante los veranos. Lockheed la contrató como matemática en 1942. Durante sus más de treinta años en dicha corporación, Ross contribuyó a la realización de diseños aeroespaciales de vanguardia, incluidos conceptos para viajes espaciales interplanetarios, vuelos tripulados y no tripulados en órbita terrestre, y satélites en órbita.
Grace Hopper (1906-1992) was an United States Navy rear admiral and pioneer of computer programming. She is best known for her trailblazing contributions to computer programming, software development, and the design and implementation of programming languages.
One early case of "debugging" was when an actual moth got stuck inside a computer Grace Hopper was working with in 1947. Here is a page from her notebook with the moth pasted in.
Thomas (David) Petite (born 1956) is a member of the Fond du Lac Band of the Lake Superior Chippewa tribe. David is best known for his work on wireless enabled devices. He is one of the early inventors of the wireless ad hoc networks, a temporary decentralized type of wireless network that enables all mobile phones to work today. His inventions were also a driving force behind the development of what is now known as the "Smart Grid" which monitors and harnesses the power of wireless-enabled devices at a specific location.
Vint Cerf (born 1943) is an American Internet pioneer and is recognized as one of "the fathers of the Internet." Vint Cerf, along with Bob Kahn, co-developed TCP/IP, a framework for organizing the set of communication protocols used in the Internet and similar computer networks. Cerf has also served on the Board of Trustees of Gallaudet University, a university for the education of the deaf and hard-of-hearing. Cerf himself is hard of hearing and wears hearing aids.
Luis von Ahn (born in 1978), one of the pioneers of crowdsourcing, is a Guatemalan computer scientist and entrepreneur. If you've ever had to click a box or identify images to confirm you are not a robot, you've used technology based on the work of Ahn's digital security company reCAPTCHA. reCAPTCHA protects websites from fraud and abuse with minimal disruption to user experience. After selling reCAPTCHA to Google in 2009, he co-founded the popular language learning platform Duolingo, which as of 2020 had over 500 million learners across 39 languages.
Image provided for publication with permission from Nicola Whiting
Nicola Whiting MBE, is an award winning jewelry designer and author, turned cybersecurity expert. She is co-owner of Titania group, which she helped lead from a 3 person start up, to a world-wide leader in cybersecurity, specializing in tools that detect network security and compliance issues. Whiting serves on multiple boards focused on increasing diversity in Cyber Security with the aim of reducing group-think and accelerating innovation & organizational resilience. e.g. She is a key spokesperson for NeuroCyber, an organization whose mission is ensuring neurodivergent people (those who process information differently due to brain differences such as Autism, ADHD, Dyslexia etc) can thrive - through building "inclusion by design" into workplace culture, policy and practice.
Mary Golda Ross (1908–2008) was a ground-breaking Native American engineer and the first female employed by Lockheed, an American aerospace technology corporation. Ross was passionate about educating women and Native Americans and spent over ten years teaching while earning her Master’s degree in mathematics during the summer. Lockheed hired her as a mathematician in 1942. During her thirty-plus years there, Ross contributed to cutting-edge aerospace designs including concepts for interplanetary space travel, crewed and uncrewed Earth-orbiting flights, and orbiting satellites.
Reporters: There are several kinds of blocks in Snap!. The say hello block is a reporter block. (You can tell because it is rounded on the ends.) Reporters do a computation and then "report" the result, such as the reporter block below that is reporting the text "olá Ana."
Inputs: Many blocks, like say hello, accept inputs that customize what they do. Inputs appear as spaces you can edit. The say hello block accepts two inputs: a name and a language. As you've seen, changing the inputs to a reporter can change the output it reports.
Will they be watching a video on abstraction here? Or does Dan mention it in welcome? It feels so..abstract..here that I wonder what students will take from it. If I wasn't bound to use the term abstraction, I'd probably emphasize the benefit of reuse "When we realize we've developed a useful piece of functionality that we might want to use in other places, we can turn it into its own block." Anyway just musings from your local "abstraction" skeptic, feel free to delete. -- PF 8/20/21
I added your text at the beginning and am open to a Dan video and/or more discussion about teaching abstraction. :) --MF, 8/20/21
When you realize you've developed a useful piece of script behavior that you might want to use in other places, you can turn it into its own block. This is a form of abstraction.
Abstraction is an important idea in computer science. One kind of abstraction is breaking up a large problem into smaller sub-problems.
For example, instead of putting into an input slot of super short story, you can create a block and put random animal in its input slot.
This makes your code easier to read, you can use this new block again in other places, and once the block is working, you don't need to think about how it works each time you use it. (For example, you might later improve plural to handle words such as "fly" and "box" that don't form their plural just by adding an "s.")
Revisit how to do this better for the middle school level. --MF, 7/23/23
Block inputs (such as job, action, number, and plural animal, in the super short story example) are called local variables because the value they report to join wordsvaries based on what is typed into the input slots of super short story, but they only can be used in this local context (you can't drag them out of the block editor and expect them to work in other parts of your code).
Should this mention that block/script local is different from sprite local? -bh 2/6/22
PLEASE don't interrupt experiments with huge vocabulary lessons. The language "reports a list" is sufficient context to make clear what a list is. And anyway, kids already know. They've seen the lists you show here and before that they've seen shopping lists. The fact that a list, in this context is "an ordered sequence" (unlike a shopping list) is true and important but can be taken for granted. Kids want to experiment and the last two items in this activity are potentially fun and interesting. Making vocabulary a priority just guarantees that it will become the focus of the course, will be tested, and will kill any semblance of B and J that is left. --PG
consider hinting this to shorten the page. --MF, 7/24/23
You've seen a list before when you selected random items from lists in the Super Short Story project:
The output of random job was a random item from the list of jobs.
The output of RGB pixel is a list of three values: the amount of red, green, and blue for one pixel.
A sprite is an object that has scripts and a costume and can even move around on the stage.
Mary, this image still needs an update. --MF, 9/13/21
This project has two sprites: the Image sprite (in the center of the stage), and the PixelGrid sprite (in the top left). The Image sprite has the code you'll be playing with, and the PixelGrid sprite has the code that makes the grid of pixels.
A costume is picture that can be "worn" by a sprite.
Each sprite has a current costume and perhaps other possible costumes. The use costume block switches the Image sprite's current costume to the costume selected in the dropdown menu.
A list is an ordered sequence of items, and a table is an ordered sequence of lists. So, a table is a list of lists. Each row in a table is another smaller list.
The output of the pixels of my costume block is a table with three columns. Each row is one pixel from the image (each with red, green, and blue values), so the three columns in the table are the amount of red, green, and blue in each pixel of the image.
Once day, a picture might be nice inside this hint. --MF, 9/13/21
Click the pixels of my costume block, and then right-click the table that appears and select "list view...". You will see the exact same data displayed as a list of lists. (You can right-click the over-arching list and select "table view..." to see the data as a table again.)
Hiding the details of howcolor from pixel selects the correct RGB value from a pixel (so you don't have to see the extra item of block) is a form of abstraction.
You can tell the difference between the second input slot to , which takes the output of a function (like most inputs do), and the first input slot, which takes a whole function itself (not its output), because the first input slot has a gray ring around it. The gray ring tells you that the map function is expecting a function (not the output of a function) as input.
Map takes a function as input so it can apply that function to each item in the list. The empty input slot in the function (in this case, the pixel) is where each item from the list (in this case, the list of pixels) goes every time the function is applied.
We can figure out the decimal equivalent by adding up the 2 two-hundred-fifty-sixes, the D (that is, 13) sixteens, and the 9 ones: (2 × 256) + (13 × 16) + (9 × 1) = 729. You could write it in Snap! like this:
A predicate is a special kind of reporter that asks a true/false question and reports either true or false. Predicates have a hexagon shape.
You'll use commands much more in Unit 2.
A command block tells the computer to do something without reporting a value. Commands have a puzzle shape and can be snapped together one after another.
Unlike reporters, a command block doesn't report anything, so you can't use its result as the input to another block—its result is an action, not a value!
A list is an ordered sequence of items. You've been using lists throughout this course: to store words for a story, to manipulate the letters of a secret message, and even to store lists such as each individual's responses to the question in a survey.
The stage is the big rectangle in the upper right of the Snap! window. (It's white when you first open Snap!.) The stage is what users of your project see, and it's where your sprites live.
A background is a picture that can be "worn" by the stage.
An event is something that happens, such as clicking on a sprite, pressing a key, or clicking the green flag button () that tells the computer to do something.
In computing, the input is the action that tells the computer to do something. The output is the resulting action that occurs after the input command is received.
The micro:bit has different types of inputs: light (bright or dark), button pressed, or certain movement. The output we're currently exploring is displaying a picture on the LED display.
An LED contains a light emitter inside of a plastic bulb. This light emitter can be made from different materials, and when electricity runs through it, it shines different colors. However, electricity can only flow in one direction, and the name for electronic parts with this quality is called a diode. Thus, an LED stands for "light-emitting diode."
Reporters: There are several kinds of blocks in Snap!. The say hello block is a reporter block. Reporters do a computation and then "report" the result. For example, the result of running the reporter block below is the text "olá Ana" shown in the bubble beside it.
Inputs: Many blocks, like say hello, accept inputs that customize what they do. Inputs appear as spaces you can edit. The say hello block accepts two inputs: a name and a language. As you've seen, changing the inputs to a reporter can change the output it reports.
Will they be watching a video on abstraction here? Or does Dan mention it in welcome? It feels so..abstract..here that I wonder what students will take from it. If I wasn't bound to use the term abstraction, I'd probably emphasize the benefit of reuse "When we realize we've developed a useful piece of functionality that we might want to use in other places, we can turn it into its own block." Anyway just musings from your local "abstraction" skeptic, feel free to delete. -- PF 8/20/21
I added your text at the beginning and am open to a Dan video and/or more discussion about teaching abstraction. :) --MF, 8/20/21
When you realize you've developed a useful piece of script behavior that you might want to use in other places, you can turn it into its own block. This is a form of abstraction.
Abstraction is an important idea in computer science. One kind of abstraction is breaking up a large problem into smaller sub-problems.
For example, instead of putting into an input slot of super short story, you can create a block and put random animal in its input slot.
This makes your code easier to read, you can use this new block again in other places, and once the block is working, you don't need to think about how it works each time you use it. (For example, you might later improve plural to handle words such as "fly" and "box" that don't form their plural just by adding an "s.")
Block inputs (such as feeling, job, action 1, place, action 2, etc., in the super short story example) are called local variables because the value they report to join wordsvaries based on what is typed into the input slots of super short story, but they only can be used in this local context (you can't drag them out of the block editor and expect them to work in other parts of your code).
Should this mention that block/script local is different from sprite local? -bh 2/6/22
PLEASE don't interrupt experiments with huge vocabulary lessons. The language "reports a list" is sufficient context to make clear what a list is. And anyway, kids already know. They've seen the lists you show here and before that they've seen shopping lists. The fact that a list, in this context is "an ordered sequence" (unlike a shopping list) is true and important but can be taken for granted. Kids want to experiment and the last two items in this activity are potentially fun and interesting. Making vocabulary a priority just guarantees that it will become the focus of the course, will be tested, and will kill any semblance of B and J that is left. --PG
You've seen a list before when you selected random items from lists in the Super Short Story project:
The output of random job was a random item from the list of jobs.
The output of RGB pixel is a list of three values: the amount of red, green, and blue for one pixel.
A sprite is an object that has scripts and a costume and can even move around on the stage.
Mary, this image still needs an update. --MF, 9/13/21
This project has two sprites: the Image sprite (in the center of the stage), and the PixelGrid sprite (in the top left). The Image sprite has the code you'll be playing with, and the PixelGrid sprite has the code that makes the grid of pixels.
A costume is picture that can be "worn" by a sprite.
Each sprite has a current costume and perhaps other possible costumes. The use costume block switches the Image sprite's current costume to the costume selected in the dropdown menu.
A list is an ordered sequence of items, and a table is an ordered sequence of lists. So, a table is a list of lists. Each row in a table is another smaller list.
The output of the pixels of my costume block is a table with three columns. Each row is one pixel from the image (each with red, green, and blue values), so the three columns in the table are the amount of red, green, and blue in each pixel of the image.
Once day, a picture might be nice inside this hint. --MF, 9/13/21
Click the pixels of my costume block, and then right-click the table that appears and select "list view...". You will see the exact same data displayed as a list of lists. (You can right-click the over-arching list and select "table view..." to see the data as a table again.)
Hiding the details of howcolor from pixel selects the correct RGB value from a pixel (so you don't have to see the extra item of block) is a form of abstraction.
You can tell the difference between the second input slot to , which takes the output of a function (like most inputs do), and the first input slot, which takes a whole function itself (not its output), because the first input slot has a gray ring around it. The gray ring tells you that the map function is expecting a function (not the output of a function) as input.
Map takes a function as input so it can apply that function to each item in the list. The empty input slot in the function (in this case, the pixel) is where each item from the list (in this case, the list of pixels) goes every time the function is applied.
We can figure out the decimal equivalent by adding up the 2 two-hundred-fifty-sixes, the D (that is, 13) sixteens, and the 9 ones: (2 × 256) + (13 × 16) + (9 × 1) = 729. You could write it in Snap! like this:
Reporters: There are several kinds of blocks in Snap!. The say hello block is a reporter block. Reporters do a computation and then "report" the result. For example, the result of running the reporter block below is the text "olá Ana" shown in the bubble beside it.
Inputs: Many blocks, like say hello, accept inputs that customize what they do. Inputs appear as spaces you can edit. The say hello block accepts two inputs: a name and a language. As you've seen, changing the inputs to a reporter can change the output it reports.
Will they be watching a video on abstraction here? Or does Dan mention it in welcome? It feels so..abstract..here that I wonder what students will take from it. If I wasn't bound to use the term abstraction, I'd probably emphasize the benefit of reuse "When we realize we've developed a useful piece of functionality that we might want to use in other places, we can turn it into its own block." Anyway just musings from your local "abstraction" skeptic, feel free to delete. -- PF 8/20/21
I added your text at the beginning and am open to a Dan video and/or more discussion about teaching abstraction. :) --MF, 8/20/21
When you realize you've developed a useful piece of script behavior that you might want to use in other places, you can turn it into its own block. This is a form of abstraction.
Abstraction is an important idea in computer science. One kind of abstraction is breaking up a large problem into smaller sub-problems.
For example, instead of putting into an input slot of super short story, you can create a block and put random animal in its input slot.
This makes your code easier to read, you can use this new block again in other places, and once the block is working, you don't need to think about how it works each time you use it. (For example, you might later improve plural to handle words such as "fly" and "box" that don't form their plural just by adding an "s.")
Block inputs (such as feeling, job, action 1, place, action 2, etc., in the super short story example) are called local variables because the value they report to join wordsvaries based on what is typed into the input slots of super short story, but they only can be used in this local context (you can't drag them out of the block editor and expect them to work in other parts of your code).
Should this mention that block/script local is different from sprite local? -bh 2/6/22
PLEASE don't interrupt experiments with huge vocabulary lessons. The language "reports a list" is sufficient context to make clear what a list is. And anyway, kids already know. They've seen the lists you show here and before that they've seen shopping lists. The fact that a list, in this context is "an ordered sequence" (unlike a shopping list) is true and important but can be taken for granted. Kids want to experiment and the last two items in this activity are potentially fun and interesting. Making vocabulary a priority just guarantees that it will become the focus of the course, will be tested, and will kill any semblance of B and J that is left. --PG
You've seen a list before when you selected random items from lists in the Super Short Story project:
The output of random job was a random item from the list of jobs.
The output of RGB pixel is a list of three values: the amount of red, green, and blue for one pixel.
A sprite is an object that has scripts and a costume and can even move around on the stage.
Mary, this image still needs an update. --MF, 9/13/21
This project has two sprites: the Image sprite (in the center of the stage), and the PixelGrid sprite (in the top left). The Image sprite has the code you'll be playing with, and the PixelGrid sprite has the code that makes the grid of pixels.
A costume is picture that can be "worn" by a sprite.
Each sprite has a current costume and perhaps other possible costumes. The use costume block switches the Image sprite's current costume to the costume selected in the dropdown menu.
A list is an ordered sequence of items, and a table is an ordered sequence of lists. So, a table is a list of lists. Each row in a table is another smaller list.
The output of the pixels of my costume block is a table with three columns. Each row is one pixel from the image (each with red, green, and blue values), so the three columns in the table are the amount of red, green, and blue in each pixel of the image.
Once day, a picture might be nice inside this hint. --MF, 9/13/21
Click the pixels of my costume block, and then right-click the table that appears and select "list view...". You will see the exact same data displayed as a list of lists. (You can right-click the over-arching list and select "table view..." to see the data as a table again.)
Hiding the details of howcolor from pixel selects the correct RGB value from a pixel (so you don't have to see the extra item of block) is a form of abstraction.
You can tell the difference between the second input slot to , which takes the output of a function (like most inputs do), and the first input slot, which takes a whole function itself (not its output), because the first input slot has a gray ring around it. The gray ring tells you that the map function is expecting a function (not the output of a function) as input.
Map takes a function as input so it can apply that function to each item in the list. The empty input slot in the function (in this case, the pixel) is where each item from the list (in this case, the list of pixels) goes every time the function is applied.
We can figure out the decimal equivalent by adding up the 2 two-hundred-fifty-sixes, the D (that is, 13) sixteens, and the 9 ones: (2 × 256) + (13 × 16) + (9 × 1) = 729. You could write it in Snap! like this:
A predicate is a special kind of reporter that asks a true/false question and reports either true or false. Predicates have a hexagon shape.
You'll use commands much more in Unit 2.
A command block tells the computer to do something without reporting a value. Commands have a puzzle shape and can be snapped together one after another.
Unlike reporters, a command block doesn't report anything, so you can't use its result as the input to another block—its result is an action, not a value!
A list is an ordered sequence of items. You've been using lists throughout this course: to store words for a story, to manipulate the letters of a secret message, and even to store lists such as each individual's responses to the question in a survey.
A predicate is a special kind of reporter that asks a true/false question and reports either true or false. Predicates have a hexagon shape.
You'll use commands much more in Unit 2.
A command block tells the computer to do something without reporting a value. Commands have a puzzle shape and can be snapped together one after another.
Unlike reporters, a command block doesn't report anything, so you can't use its result as the input to another block—its result is an action, not a value!
A list is an ordered sequence of items. You've been using lists throughout this course: to store words for a story, to manipulate the letters of a secret message, and even to store lists such as each individual's responses to the question in a survey.
The stage is the big rectangle in the upper right of the Snap! window. (It's white when you first open Snap!.) The stage is what users of your project see, and it's where your sprites live.
A background is a picture that can be "worn" by the stage.
An event is something that happens, such as clicking on a sprite, pressing a key, or clicking the green flag button () that tells the computer to do something.
A predicate is a special kind of reporter that asks a true/false question and reports either true or false. Predicates have a hexagon shape.
You'll use commands much more in Unit 2.
A command block tells the computer to do something without reporting a value. Commands have a puzzle shape and can be snapped together one after another.
Unlike reporters, a command block doesn't report anything, so you can't use its result as the input to another block—its result is an action, not a value!
A list is an ordered sequence of items. You've been using lists throughout this course: to store words for a story, to manipulate the letters of a secret message, and even to store lists such as each individual's responses to the question in a survey.
A predicate is a special kind of reporter that asks a true/false question and reports either true or false. Predicates have a hexagon shape.
You'll use commands much more in Unit 2.
A command block tells the computer to do something without reporting a value. Commands have a puzzle shape and can be snapped together one after another.
Unlike reporters, a command block doesn't report anything, so you can't use its result as the input to another block—its result is an action, not a value!
A list is an ordered sequence of items. You've been using lists throughout this course: to store words for a story, to manipulate the letters of a secret message, and even to store lists such as each individual's responses to the question in a survey.
The stage is the big rectangle in the upper right of the Snap! window. (It's white when you first open Snap!.) The stage is what users of your project see, and it's where your sprites live.
A background is a picture that can be "worn" by the stage.
An event is something that happens, such as clicking on a sprite, pressing a key, or clicking the green flag button () that tells the computer to do something.
In computing, the input is the action that tells the computer to do something. The output is the resulting action that occurs after the input command is received.
The micro:bit has different types of inputs: light (bright or dark), button pressed, or certain movement. The output we're currently exploring is displaying a picture on the LED display.
An LED contains a light emitter inside of a plastic bulb. This light emitter can be made from different materials, and when electricity runs through it, it shines different colors. However, electricity can only flow in one direction, and the name for electronic parts with this quality is called a diode. Thus, an LED stands for "light-emitting diode."
In computing, the input is the action that tells the computer to do something. The output is the resulting action that occurs after the input command is received.
The micro:bit has different types of inputs: light (bright or dark), button pressed, or certain movement. The output we're currently exploring is displaying a picture on the LED display.
An LED contains a light emitter inside of a plastic bulb. This light emitter can be made from different materials, and when electricity runs through it, it shines different colors. However, electricity can only flow in one direction, and the name for electronic parts with this quality is called a diode. Thus, an LED stands for "light-emitting diode."
-
-heading: Unit 5 Review
- resource: Vocabulary [/bjc-r/cur/programming/summaries/vocab5.html]
- resource: On the AP Exam [/bjc-r/cur/programming/summaries/exam5.html]
- resource: Self-Check Questions [/bjc-r/cur/programming/summaries/assessment-data5.html]
-}
+heading: (NEW) Unit 5 Review
+ resource: (NEW) Vocabulary [/bjc-r/cur/programming/5-algorithms/unit-5-vocab.html]
+ resource: (NEW) On the AP Exam [/bjc-r/cur/programming/5-algorithms/unit-5-exam-reference.html]
+ resource: (NEW) Self-Check Questions [/bjc-r/cur/programming/5-algorithms/unit-5-self-check.html]
+}
\ No newline at end of file
diff --git a/topic/nyc_bjc/6-how-computers-work.es.topic b/topic/nyc_bjc/6-how-computers-work.es.topic
index c76bf088a9..18b08cd798 100644
--- a/topic/nyc_bjc/6-how-computers-work.es.topic
+++ b/topic/nyc_bjc/6-how-computers-work.es.topic
@@ -22,3 +22,7 @@ heading: Laboratorio 2: Historia e impacto de las computadoras
quiz: Ley de Moore [/bjc-r/cur/programming/6-computers/2-history-impact/2-moore.es.html]
}
+heading: (NEW) Unidad 6 Revision
+ resource: (NEW) Vocabulario [/bjc-r/cur/programming/6-computers/unit-6-vocab.es.html]
+ resource: (NEW) Preguntas de autocomprobacion [/bjc-r/cur/programming/6-computers/unit-6-self-check.es.html]
+}
\ No newline at end of file
diff --git a/topic/nyc_bjc/6-how-computers-work.topic b/topic/nyc_bjc/6-how-computers-work.topic
index 1b5fb8cc24..cfd643e2b2 100644
--- a/topic/nyc_bjc/6-how-computers-work.topic
+++ b/topic/nyc_bjc/6-how-computers-work.topic
@@ -23,8 +23,7 @@ heading: Lab 2: History of Computers
quiz: Moore's Law [/bjc-r/cur/programming/6-computers/2-history-impact/2-moore.html]
raw-html:
See comment on bottom of 6.1.9 regarding OPs. --MF, 6/12/20
-
-heading: Unit 6 Review
- resource: Vocabulary [/bjc-r/cur/programming/summaries/vocab6.html]
- resource: Self-Check Questions [/bjc-r/cur/programming/summaries/assessment-data6.html]
-}
+heading: (NEW) Unit 6 Review
+ resource: (NEW) Vocabulary [/bjc-r/cur/programming/6-computers/unit-6-vocab.html]
+ resource: (NEW) Self-Check Questions [/bjc-r/cur/programming/6-computers/unit-6-self-check.html]
+}
\ No newline at end of file
diff --git a/topic/nyc_bjc/7-recursion-trees-fractals.es.topic b/topic/nyc_bjc/7-recursion-trees-fractals.es.topic
index 1267b7bcd2..966f95a477 100755
--- a/topic/nyc_bjc/7-recursion-trees-fractals.es.topic
+++ b/topic/nyc_bjc/7-recursion-trees-fractals.es.topic
@@ -20,3 +20,7 @@ heading: Laboratorio 2: Proyectos de recursividad
resource: Mondrian recursivo [/bjc-r/cur/programming/7-recursion/2-projects/4-mondrian.es.html]
}
+heading: (NEW) Unidad 7 Revision
+ resource: (NEW) Vocabulario [/bjc-r/cur/programming/7-recursion/unit-7-vocab.es.html]
+ resource: (NEW) Preguntas de autocomprobacion [/bjc-r/cur/programming/7-recursion/unit-7-self-check.es.html]
+}
\ No newline at end of file
diff --git a/topic/nyc_bjc/7-recursion-trees-fractals.topic b/topic/nyc_bjc/7-recursion-trees-fractals.topic
index d1318e103e..37549db8e7 100755
--- a/topic/nyc_bjc/7-recursion-trees-fractals.topic
+++ b/topic/nyc_bjc/7-recursion-trees-fractals.topic
@@ -17,8 +17,7 @@ heading: Lab 2: Recursion Projects
//raw-html:
resource: Lévy C-Curve Fractal [/bjc-r/cur/programming/7-recursion/2-projects/3-c-curve.html]
resource: Recursive Mondrian [/bjc-r/cur/programming/7-recursion/2-projects/4-mondrian.html]
-
-heading: Unit 7 Review
- resource: Vocabulary [/bjc-r/cur/programming/summaries/vocab7.html]
- resource: Self-Check Questions [/bjc-r/cur/programming/summaries/assessment-data7.html]
-}
+heading: (NEW) Unit 7 Review
+ resource: (NEW) Vocabulary [/bjc-r/cur/programming/7-recursion/unit-7-vocab.html]
+ resource: (NEW) Self-Check Questions [/bjc-r/cur/programming/7-recursion/unit-7-self-check.html]
+}
\ No newline at end of file
diff --git a/topic/nyc_bjc/8-recursive-reporters.topic b/topic/nyc_bjc/8-recursive-reporters.topic
index 8bfc734514..da1b1291f0 100755
--- a/topic/nyc_bjc/8-recursive-reporters.topic
+++ b/topic/nyc_bjc/8-recursive-reporters.topic
@@ -34,7 +34,6 @@ heading: Optional Project: Sorting
resource: Sorting a List [/bjc-r/cur/programming/8-recursive-reporters/optional-project-sorting/1-sorting-a-list.html]
resource: Selection Sort [/bjc-r/cur/programming/8-recursive-reporters/optional-project-sorting/2-selection-sort.html]
resource: Partition Sort [/bjc-r/cur/programming/8-recursive-reporters/optional-project-sorting/3-partition-sort.html]
-
-heading: Unit 8 Review
- resource: Vocabulary [/bjc-r/cur/programming/summaries/vocab8.html]
-}
+heading: (NEW) Unit 8 Review
+ resource: (NEW) Vocabulary [/bjc-r/cur/programming/8-recursive-reporters/unit-8-vocab.html]
+}
\ No newline at end of file
diff --git a/topic/sparks/1-functions-data.topic b/topic/sparks/1-functions-data.topic
index 74c88d8210..10099aa305 100755
--- a/topic/sparks/1-functions-data.topic
+++ b/topic/sparks/1-functions-data.topic
@@ -58,3 +58,6 @@ heading: Lab 7: Dealing with Data Dos
raw-html:
Unit 1 Project
Brian: Starter project has encrypt/decrypt functions. Student A chooses a password, uses the project to encrypt a text, then exports the encrypted text and sends that to student B, who imports it into their copy of the project (which doesn't include student A's key). Maybe have two cyphers in the project, one of which is simple substitution and therefore pretty easily breakable, and let kids break it, then use a more complicated cypher that's resistant to letter frequency attacks. I did a Playfair cypher in Computer Science Logo Style if anyone wants an example... Brian thinks it will be fun to break ciphers.
Implementing Vigen�re? (Maybe not exciting enough since everyone is doing the same thing?) Mary see https://www.geeksforgeeks.org/vigenere-cipher/ and https://www.khanacademy.org/computing/computers-and-internet/xcae6f4a7ff015e7d:online-data-security/xcae6f4a7ff015e7d:data-encryption-techniques/a/symmetric-encryption-techniques (from Pamela) --MF, 3/1/22
}
+heading: (NEW) Unit 1 Review
+ resource: (NEW) Vocabulary [/bjc-r/sparks/student-pages/U1/unit-1-vocab.html]
+}
\ No newline at end of file
diff --git a/topic/sparks/2-sequencing-iteration.topic b/topic/sparks/2-sequencing-iteration.topic
index 89ddf70270..09fe767578 100755
--- a/topic/sparks/2-sequencing-iteration.topic
+++ b/topic/sparks/2-sequencing-iteration.topic
@@ -79,3 +79,6 @@ heading: Lab 4: Transmitting Data
raw-html:
Unit 2 Project
User design as an end of unit project for U2 building on a project they’ve already built. Focus on "2-AP-15: Seek and incorporate feedback from team members and users to refine a solution that meets user needs." also some coverage of "2-CS-01: Recommend improvements to the design of computing devices, based on an analysis of how users interact with the devices." (also some documentation) --MF, 3/1/22
}
+heading: (NEW) Unit 2 Review
+ resource: (NEW) Vocabulary [/bjc-r/sparks/student-pages/U2/unit-2-vocab.html]
+}
\ No newline at end of file
diff --git a/topic/sparks/3-hardware.topic b/topic/sparks/3-hardware.topic
index 80a95cca45..72d8daebac 100644
--- a/topic/sparks/3-hardware.topic
+++ b/topic/sparks/3-hardware.topic
@@ -37,3 +37,6 @@ heading: Lab 7: Collaborative Chain Reaction
resource: Launch Day [/bjc-r/sparks/student-pages/U3/L7/04-launch-day.html]
}
+heading: (NEW) Unit 3 Review
+ resource: (NEW) Vocabulary [/bjc-r/sparks/student-pages/U3/unit-3-vocab.html]
+}
\ No newline at end of file
diff --git a/utilities/build-tools/main.rb b/utilities/build-tools/main.rb
index 3ce73f15de..3c36973d1a 100644
--- a/utilities/build-tools/main.rb
+++ b/utilities/build-tools/main.rb
@@ -44,10 +44,9 @@ def initialize(root: '', content: 'cur/programming', course: 'bjc4nyc', language
@self_check = SelfCheck.new(@parentDir, language, content, @course)
@atwork = AtWork.new(@parentDir, language, content)
@testingFolder = false
- @topic_folder = ""
+ @topic_folder = ''
end
-
def language_ext
@language_ext ||= @language == 'en' ? '' : ".#{@language}"
end
@@ -79,7 +78,7 @@ def Main
end
def topic_files_in_course
- @topic_files_in_course ||= course.list_topics.filter { |file| file.match(/\d+-\w+/)}
+ @topic_files_in_course ||= course.list_topics.filter { |file| file.match(/\d+-\w+/) }
end
def clear_review_folder
@@ -119,15 +118,13 @@ def deleteReviewFolder
# TODO: should filter en/es separately.
files = list_files("#{language_ext}.html")
files.each do |file|
- begin
- File.open(file, mode: 'r') do |f|
- f.close
- File.delete(f)
- end
- rescue Errno::EACCES
+ File.open(file, mode: 'r') do |f|
+ f.close
+ File.delete(f)
end
+ rescue Errno::EACCES
end
-
+
FileUtils.rm_rf(review_folder)
end
@@ -174,9 +171,8 @@ def is_topic_file?(file)
def delete_existing_summaries(topic_file)
all_lines = File.readlines(topic_file)
- new_lines = ""
+ new_lines = ''
all_lines.each do |line|
-
if line.match(/Unit \d+ Review/) || line.match(/Unidad \d+ Revision/)
return File.write(topic_file, new_lines.strip)
elsif line != '}' and line != '\n'
@@ -185,22 +181,21 @@ def delete_existing_summaries(topic_file)
end
end
-
# Adds the summary content and links to the topic.topic file
- def addSummariesToTopic(topic_file, curr_lab_folder)
- topic_folder(topic_file.split("/")[0])
+ def addSummariesToTopic(topic_file, _curr_lab_folder)
+ topic_folder(topic_file.split('/')[0])
topic_file_path = "#{@rootDir}/topic/#{topic_file}"
delete_existing_summaries(topic_file_path)
link_match = "/bjc-r/#{@content}"
unit = File.readlines(topic_file_path).find { |line| line.match?(link_match) }
link = extract_unit_path(unit, false, true)
- list = [@vocab.vocab_file_name,
- @self_check.exam_file_name,
- @self_check.self_check_file_name].map {|f_name| f_name.gsub!(/\d+/, @unitNum)}
+ list = [@vocab.vocab_file_name,
+ @self_check.exam_file_name,
+ @self_check.self_check_file_name].map { |f_name| f_name.gsub!(/\d+/, @unitNum) }
topic_resource = ["\tresource: (NEW) #{I18n.t('vocab')} [#{link}/#{list[0]}]",
- "\n\tresource: (NEW) #{I18n.t('on_ap_exam')} [#{link}/#{list[1]}]",
- "\n\tresource: (NEW) #{I18n.t('self_check')} [#{link}/#{list[2]}]"]
+ "\n\tresource: (NEW) #{I18n.t('on_ap_exam')} [#{link}/#{list[1]}]",
+ "\n\tresource: (NEW) #{I18n.t('self_check')} [#{link}/#{list[2]}]"]
topic_content = <<~TOPIC
heading: (NEW) #{I18n.t('unit_review', num: @unitNum)}
TOPIC
@@ -211,20 +206,19 @@ def addSummariesToTopic(topic_file, curr_lab_folder)
is_empty_review = false
end
end
- add_content_to_file(topic_file_path, "\n#{topic_content}\n}") if !is_empty_review
-
+ add_content_to_file(topic_file_path, "\n#{topic_content}\n}") unless is_empty_review
end
def isSummary(line)
!line.nil? && !@currUnit.nil? && line.match(@currUnit)
end
- #Writing new function to parse using the topic.rb file
- #def parse_topic_page(file)
+ # Writing new function to parse using the topic.rb file
+ # def parse_topic_page(file)
# path = "#{@rootDir}/topic/#{file}"
# topic_runner = BJCTopic.new(path)
# topic_json = topic_runner.parse
- #end
+ # end
# Parses through the data of the topic page and generates and adds content to a topics.txt
# file that will be parsed later on to generate summaries
@@ -298,9 +292,9 @@ def isTopic(arg)
'resource: Vocabulario',
'resource: En el examen AP',
'resource: Preguntas de Autocomprobacion',
- "#{I18n.t('self_check')}",
- "#{I18n.t('vocab')}",
- "#{I18n.t('on_ap_exam')}"]
+ "#{I18n.t('self_check')}",
+ "#{I18n.t('vocab')}",
+ "#{I18n.t('on_ap_exam')}"]
topicLine = /(\s+)?(\w+)+(\s+)?/
bool = true
kludges.each do |item|
@@ -311,9 +305,7 @@ def isTopic(arg)
end
def add_content_to_file(filename, data)
- File.exist?(filename) ? f = File.open(filename, 'a') : f = File.new(filename, 'w')
- f.write(data)
- f.close
+ File.open(filename, mode: 'a+') { |f| f.write(data) }
end
# TODO: - if we have a BJCTopic class, this probably belongs there.
@@ -393,7 +385,6 @@ def localPath
local.join.to_s
end
-
def extractTopicLink(line)
labNamePattern = /----- /
linkMatch = line.split(labNamePattern)
@@ -405,10 +396,9 @@ def extractTopicLink(line)
link.match(/(\w+-?)+\.html/)
end
lab.to_s
-
end
- def extractTopicLinkFolder(line, use_root=true)
+ def extractTopicLinkFolder(line, use_root = true)
labNamePattern = /----- /
linkMatch = line.split(labNamePattern)
link = if @language != 'en'
@@ -417,11 +407,9 @@ def extractTopicLinkFolder(line, use_root=true)
linkMatch[1].split(/(\w+-?)+\.html/)
end
use_root ? "#{localPath}#{link[0]}" : link[0]
-
end
-
- def extract_unit_path(line, use_root=true, is_topic=true)
+ def extract_unit_path(line, use_root = true, is_topic = true)
if is_topic
bracket_removed = line.split(/.+\[/)
match = bracket_removed[1].split(/\]/).join.to_s
@@ -429,17 +417,16 @@ def extract_unit_path(line, use_root=true, is_topic=true)
match = line
end
link_with_lab = if @language != 'en'
- match.split(/(\w+-?)+\.\w+\.html/)
- else
- match.split(/(\w+-?)+\.html/)
- end
- list = link_with_lab[0].split("/")
- link = list.map { |elem, output = ""| output += ("/#{elem}") if list.index(elem) < list.length - 1}.join
- link = link[1..link.length] if link[1] == "/" #get rid of extra slash, otherwise appears as //bjc-r
+ match.split(/(\w+-?)+\.\w+\.html/)
+ else
+ match.split(/(\w+-?)+\.html/)
+ end
+ list = link_with_lab[0].split('/')
+ link = list.map { |elem, output = ''| output += "/#{elem}" if list.index(elem) < list.length - 1 }.join
+ link = link[1..link.length] if link[1] == '/' # get rid of extra slash, otherwise appears as //bjc-r
use_root ? "#{localPath}#{link}" : link
end
-
def copyFiles
list = [@vocab.vocab_file_name, @self_check.self_check_file_name, @self_check.exam_file_name]
currentDir = Dir.pwd
@@ -451,7 +438,6 @@ def copyFiles
File.delete(dst) if File.exist?(dst)
# TODO: use nokogiri to refomat the file.
FileUtils.copy_file(src, dst) if File.exist?(src)
-
end
Dir.chdir(currentDir)
end
@@ -468,19 +454,19 @@ def parse_units(topicsFile)
labNamePattern = /-----/
unitNamePattern = /title: /
endUnitPattern = /END OF UNIT/
- current_lab_folder = ""
+ current_lab_folder = ''
i = 0
f.each do |line|
if line.match(endUnitPattern)
- current_unit_folder = current_lab_folder.split("/")[-2]
+ current_unit_folder = current_lab_folder.split('/')[-2]
addSummariesToTopic(topic_files_in_course[topics_index], current_unit_folder)
copyFiles
topics_index += 1
end
if !line.match(labNamePattern).nil?
labFile = extractTopicLink(line)
- root = @rootDir.split("/bjc-r")[0]
- lab_path = "#{root}#{line.split(labNamePattern)[-1].split(" ")[-1]}"
+ root = @rootDir.split('/bjc-r')[0]
+ lab_path = "#{root}#{line.split(labNamePattern)[-1].split(' ')[-1]}"
if labFile != ''
current_lab_folder = extractTopicLinkFolder(line)
if File.exist?(lab_path)
@@ -555,4 +541,4 @@ def currUnit(str)
def topic_folder(name)
@topic_folder = name
end
-end
\ No newline at end of file
+end
diff --git a/utilities/build-tools/rebuild-all.rb b/utilities/build-tools/rebuild-all.rb
index 8cda883d8c..cc916ecfce 100755
--- a/utilities/build-tools/rebuild-all.rb
+++ b/utilities/build-tools/rebuild-all.rb
@@ -8,7 +8,7 @@
require_relative 'main'
ROOT = '/bjc-r'
-path = Dir.pwd ##ENV('PWD')
+path = Dir.pwd # #ENV('PWD')
puts path
path = path.sub(%r{#{ROOT}/.*$}, ROOT)
puts "Rebuilding all index/summaries from: #{path}"