Introducción
Repaso de MarkDown
¿Como se escribe en MarkDown un link de tipo referencia?
This is [an example][id] reference-style link. Then, anywhere in the document, you define your link label like this, on a line by itself:
[id]: http://example.com/ "Optional Title Here"
¿Cómo se pone una imagen?
![Screenshot of the toolbar](http://so.mrozekma.com/editor-bar-help-button.png)
¿Cómo se anidan listas?
To put other Markdown blocks in a list; just indent four spaces for each nesting level For example 1. Dog 1. German Shepherd 2. Belgian Shepherd 1. Malinois 2. Groenendael 3. Tervuren 2. Cat 1. Siberian 2. Siamese
¿Cómo se inserta una línea horizontal?
Preguntas de Repaso de GitBook
¿Cómo se escribe en GitBook esta fórmula?
- ¿Como se escribe un código JavaScript de manera que se muestre con syntax highlingting?
- ¿Como se escribe un bloque de cita blokquote?
- ¿Que pasos debo dar para insertar un vídeo de YouTube en mi libro GitBook?
- Escriba el código MD para producir una tabla como esta:
First Header | Second Header |
---|---|
Content Cell | Content Cell |
Content Cell | Content Cell |
- ¿Donde puedo encontrar la URL del repositorio en GitBook del libro?
- Explique los pasos para publicar un libro GitBook en GitHub usando las gh-pages de GitHub manualmente
- ¿Que atributo debo de poner en
book.json
para alojar los Markdown del libro en un directorio distinto del raiz? - Explique como instalar y usar Gitbook
- Como se despliega un libro en GitHub
- Como se despliega un libro en
gitbook.com
- Como se despliega un libro en Heroku
Como se despliega un libro en una máquina virtual de
iaas.ull.es
Preguntas de Repaso de JSON
¿Como se llama el método que permite obtener una representación como cadena de un objeto? ¿Que parámetros espera? ¿Como afectan dichos parámetros?
Plataformas de Despliegue
Preguntas de SSH
- Explique como se generan las claves privada y pública
- Como se publica una clave?
- Indique como se puede configurar el cliente SSH para simplificar la conexión
¿Cómo puedo ejecutar un script en una máquina accesible via SSH?
Preguntas de Repaso de Heroku
Una vez instalado el Heroku cli nos debemos autenticar en heroku con el cliente. ¿Cual es el comando para autenticarnos?
¿Cual es el comando para crear nuestra aplicación en Heroku (suponemos que ya esta bajo el control de
git
? ¿Qué remoto tendremos definido después de crear nuestra aplicación en Heroku?¿Cual es el comando para desplegar nuestra aplicación en Heroku?
Si la versión que queremos publicar en heroku no está en la rama
master
sino que está en la ramatutu
¿Como debemos modificar el comando anterior?¿Con que comando puedo abrir una ventana en el navegador que visite la aplicación desplegada? ¿Que formato tiene la URL para nuestra aplicación?
¿Con que comando puedo ver los logs de la aplicación desplegada?
¿Como se debe llamar el fichero en el que explicito que comando debe usarse para arrancar nuestra aplicación en Heroku?
Heroku se percata que nuestra aplicación es una aplicación desarrollada con
Node.js
por la presencia de un cierto fichero. ¿De que fichero estamos hablando?¿Cual es la mejor forma de ejecutar en local una aplicación express.js que va a ser desplegada en Heroku?
- Explique los pasos para desplegar una aplicación en Heroku
- Explique como resolver los problemas que pueden surgir cuando la aplicación desplegada en Heroku no funciona correctamente
- ¿Como consulto el token para hacer uso de la API de Heroku?
- ¿Cómo creo una app en Heroku usando la API de Heroku?
- Véase
- With a source tarball, which contains an app.json, call the https://api.heroku.com/app-setups endpoint to setup the app.json enabled application on Heroku. The request body must contain a source URL that points to the tarball of your application’s source code.
- Let’s use cURL to call the app-setups endpoint:
$ curl -n -X POST https://api.heroku.com/app-setups \ -H "Content-Type:application/json" \ -H "Accept:application/vnd.heroku+json; version=3" \ -d '{"source_blob": { "url":"https://github.com/heroku/ruby-rails-sample/tarball/master/"} }'
Explique los pasos para publicar un libro GitBook en Heroku
Preguntas sobre iaas.ull.es
¿A que se refiere el término SAAS?
- ¿A que se refiere el término PAAS?
- ¿A que se refiere el término IAAS?
- Explique los pasos para desplegar una aplicación web en la máquina virtual de
iaas.ull.es
Buenas Prácticas
Preguntas de Programación Orientada a Objetos
Escriba un código JavaScript que defina una clase
Persona
con atributosnombre
yapellidos
y que disponga de un métodosaluda
.Escriba una clase
Programador
que hereda dePersona
Escriba un código ECMA6 que defina una clase
Persona
con atributosnombre
yapellidos
y que disponga de un métodosaluda
.Usando ECMA6 escriba una clase
Programador
que hereda dePersona
Explique las diferencias en la salida entre este código
function Person() {
this.age = 0;
function growUp() {
this.age += 10;
}
growUp();
console.log(this.age);
}
var p = new Person();
y este otro:
function Person() {
this.age = 0;
var growUp = () => {
this.age += 10;
}
growUp();
console.log(this.age);
}
var p = new Person();
Justifique su respuesta.
- Explique que hacen los métodos
bind
,apply
ycall
y cuales son sus similitudes y diferencias - ¿Cual es el significado del primer argumento del método
Object.cretate
? ¿Y el segundo? - Todo objeto JavaScript tiene una propiedad
"prototype"
¿verdadero o falso? - La propiedad
prototype
de una función es un objeto de tipoFunction
¿verdadero o falso? - El
prototype
de una función es un objeto de tipoFunction
¿verdadero o falso? - ¿Cual es el problema con este código? ¿Como se arregla el problema?
Object.prototype.nonsense = "hi"; for (var name in map) console.log(name);
- ¿Que significa que una propiedad es no-enumerable?
- ¿Como puedo crear un objeto que carezca de prototipo?
10 El argumento descriptor
del método
Object.defineProperty(obj, prop, descriptor)
puede ser de uno de dos tipos: data descriptors o accessor descriptors.
- Un
data descriptor
es una propiedad que tiene unvalue
, que puede o no serwritable
. - Un
accessor descriptor
es una propiedad que describe un par de funciones getter-setter.
Un descriptor puede ser de uno de estos tipos pero no puede ser ambos.
Explique cuales de estas propiedades pertenecen a que tipo, cual es su valor por defecto y que describen:
configurable
enumerable
value
writable
get
set
Preguntas de Repaso de Code Smelling
Defina el término code smelling
¿Que diferencia hay entre un code smell y un bug?
Explique el code smell Duplicated Code
Explique el Switch smell
Preguntas de Strategy Pattern
Describa que se entiende por Code Smell
¿En que consisten cada uno de estos smells?
- Duplicated code
- Contrived complexity
- Large class
- Feature envy
- Inappropriate intimacy
- Refused bequest (herencia negada)
- Lazy class / Freeloader
- Excessive use of literals
- Large Cyclomatic complexity
Downcasting
In a Java-like language, when learning about polymorphism you commonly see something like this
class Base { ... } class Derived extends Base { ... }
Is
(Derived*)base_object;
an upcast or downcast?
- Too many parameters
- Long method
- Excessively long identifiers
- Excessively short identifiers
- Excessive return of data
- Switch Smell
- Enuncie el OCP: Open/Closed Principle
- ¿Que se entiende por Design Pattern?
Explique como se resuelve el Switch Smell usando el Strategy Pattern
Preguntas de Repaso de ECMA6
Observemos este ejemplo:
class Contact {
constructor(name, email, button) {
this.name = name;
this.email = email;
button.onclick = function(event) {
sendEmail(this.email);
}
}
}
¿Cuanto vale
this
en la línea 6?¿Como podemos reescribir este código en ECMA6 para que
this
refiera al objetoContact
?
- ¿Que se entiende por Hoisting en JS? ¿Que efectos indeseables
conlleva? ¿Como se soluciona en ECMA6?
Web
Preguntas de Repaso de jQuery
jQuery uses CSS selectors to select elements? True or false?
Which sign does jQuery use as a shortcut for jQuery?
With jQuery, look at the following selector:
$("div")
. What does it select?The jQuery
html()
method works for both HTML and XML documents. True or false?What is the correct jQuery code to set the background color of all p elements to red?
With jQuery, look at the following selector:
$("div.intro")
. What does it select?Which jQuery method is used to hide selected elements?
Which jQuery method is used to set one or more style properties for selected elements?
Which jQuery method is used to perform an asynchronous HTTP request?
What is the correct jQuery code for making all div elements 100 pixels high?
Which jQuery function is used to prevent code from running, before the document is finished loading?
Which jQuery method should be used to deal with name conflicts?
Which jQuery method is used to switch between adding/removing one or more classes (for CSS) from selected elements?
Look at the following jQuery selector:
$("div#intro .head")
. What does it select?Is jQuery a W3C standard?
Preguntas de Repaso de Underscore
¿Que argumentos espera el método
template
de Underscore? ¿Cual es la función de cada uno de ellos?¿Que diferencia hay entre
<% ... %>
,<%= ... %>
y<%- ... %>
?
- El atributo
templateSettings
de Underscore puede ser usado para configurar los templates. Rellene las expresiones regulares que faltan para que se usen delimitadores con llaves como{{ ... }}
para evaluar,{{= ... }}
para interpolar y{{- ... }}
para interpolar y escapar el HTML:
_.templateSettings = {
interpolate: /____________________/gim,
evaluate: /____________________/gim
escape: /____________________/gim
}
- Queremos mostrar una lista de
items
en una tabla con dos columnas. En la primera columna va el número de orden y en la segunda el nombre del item. El template Underscore se carga desde el elemento#usageList
del DOM y el resultado del template se vuelca en el elemento#target
como sigue:
var items = [ {name:"Alejandro"}, {name:"......."}, {name:"Zacarias"} ];
var template = usageList.innerHTML;
target.innerHTML = _.template(template,{items:items});
Complete el identificador del <script>
, el identificador del
<div>
usado para la salida y la parte que falta entre las
etiquetas <tbody>
:
<script type="text/html" id='_________'>
<table>
<thead>
<tr>
<th> Id </th> <th>Name</th>
</tr>
</thead>
<tbody>
</tbody >
</table>
</script>
<!-- Create your target -->
<div id="______"></div>
Preguntas de Repaso de localStorage
¿Que diferencias y que similitudes hay entre los cookies y localStorage?
¿Que diferencias hay entre localStorage y sessionStorage?
¿En que consiste las reglas de segregación conocidas como same origin policy? ¿Como se relacionan con localStorage?
¿Como guardo en localStorage el contenido de una variable
chuchu
? ¿Como leo el contenido almacenado en localStorage con clavechuchu
?¿Como borro una clave almacenada en localStorage?
¿Que es LocalStorage? ¿Que hace la siguiente línea?
if (window.localStorage) localStorage.original = temp;
¿Cuando se ejecutará esta callback? ¿Que hace?
window.onload = function() {
// If the browser supports localStorage and we have some stored data
if (window.localStorage && localStorage.original) {
document.getElementById("original").value = localStorage.original;
}
};
Preguntas de Repaso de EJS
Véase Getting Started with EJS
Mejore este template
<li>
<a href='supplies/<%= supplies[i] %>'>
<%= supplies[i] %>
</a>
</li>
usando un helper proveído por EJS
% <li>
% <%= link_to(supplies[i], 'supplies/'+supplies[i]) %>
% </li>
Preguntas de Repaso de Jade
Traduzca a Jade el siguiente código HTML:
<div id="content">
<div class="block">
<input id="bar" class="foo1 foo2"/>
</div>
</div>
¿Que hace el punto después de un elemento? como en:
p. foo bar hello world
Supongamos que el objeto interpolado es:
{"name": "Hello <em>World</em>"}
¿Que diferencia hay entre estas dos interpolaciones?
1. `li= name`
2. `li!= name`
¿Que diferencia hay entre estas dos interpolaciones?
li Say #{name}
li Say !{name}
Traduzca a Jade el siguiente fragmento HTML:
<input type="text" placeholder="your name"/>
Preguntas de Repaso de SASS
¿Como se inicializa una constante en SASS?
Reescriba este fragmento CSS en SASS:
nav ul {
margin: 0;
padding: 0;
list-style: none;
}
nav li {
display: inline-block;
}
nav a {
display: block;
padding: 6px 12px;
text-decoration: none;
}
Preguntas de Repaso de HTML
¿Cual debe ser el valor del atributo
rel
para usar la imagen como favicon?<link rel="_____________" href="etsiiull.png" type="image/x-icon">
Preguntas de Repaso de CSS
¿Que hacen las siguientes pseudo-clases estructurales CSS3?
tr:nth-child(odd) { background-color:#eee; } tr:nth-child(even) { background-color:#00FF66; }
¿Que contiene el objeto
window
en un programa JavaScript que se ejecuta en un navegador?Enumere tres elementos HTML que sean de la categoría
inline
Enumere tres elementos HTML que sean de la categoría
block
¿Cómo se hace para que elementos de la página web permanezcan ocultos para posteriormente mostrarlos? ¿Que hay que hacer en el HTML, en la hoja de estilo y en el JavaScript?
Rellene los estilos para los elementos de las clases para que su visibilidad case con la que su nombre indica:
.hidden { display: ____; } .unhidden { display: _____; }
Preguntas de Repaso de Ajax
What method of the
req
object returns a boolean value that istrue
if the request’sX-Requested-With
header field isXMLHttpRequest
, indicating the intent to retrieve data from the URL without having to do a full page refresh?.Fill the gap:
app.get('/chuchu', function (req, res) {
var isAjaxRequest = req.______________;
...
}
- La siguiente vista incluye el código JavaScript de un request Ajax:
<!doctype html>
<html>
<head>
<title><%- title %></title>
</head>
<body>
<h1><%- title %></h1>
<ul>
<li><a href="http://jquery.com/" id="jq">jQuery</a>
<li><a href="/chuchu">Visit chuchu!</a>
</ul>
<div class="result"></div>
<script src="https://code.jquery.com/jquery-2.1.3.js"></script>
<script>
$( document ).ready(function() {
$( "#jq" ).click(function( event ) {
event.preventDefault();
$.get( "/chuchu", {nombres: ["juan", "pedro"]}, function( data ) {
$( ".result" ).html( data["answer"]);
console.log(data);
}, 'json');
});
});
</script>
</body>
</html>
Supongamos que el servidor express.js responde al request con:
res.send('{"answer": "Server responds: hello world!"}')
1. ¿Como podemos acceder en el servidor express.js al objeto
`{nombres: ["juan", "pedro"]` enviado desde el cliente como
segundo argumento de `$.get`?
2. ¿Cuando se ejecuta la callback asociada con la llamada a
`$.get`?
3. ¿Que contendrá el parámetro `data` pasado a la callback?
4. ¿Que hace el cuarto parámetro de `$.get`?
- En el código de la práctica de Ajax CSV cuando se hacía click en uno
de los botones con los nombres de los ficheros de ejemplo se
ejecutaba en el cliente la función
dump
:
const dump = (fileName) => {
$.get(fileName,function (data){
$("#original").val(data);
});
};
¿En que ruta/middleware del servidor express son servidos estos
requests?. Explique el funcionamiento de este código.
Preguntas de Repaso de Cookies
- Defina y explique el concepto de Cookie
- Defina y explique el concepto de Cookie para la Gestión de una Sesión
- Defina y explique el concepto de Cookie para la Autenticación en un Website
- ¿Que es un secure cookie? (cookie seguro)
- ¿Como se llama el middleware express que me facilita el manejo de los cookies? ¿Cual es el código para poner en funcionamiento dicho middleware?
- Dentro de un middleware express ¿Cómo se llama el método
del objeto
res
que me permite establecer un cookie? ¿Que argumentos recibe? - ¿Que método del objeto
request
me permite ver los cookies establecidos? - ¿Como borro un cookie en el servidor express?
- ¿Que es la Query String? Ponga un ejemplo de Query String
If a form is embedded in an HTML page as follows:
<form action="/hello" method="get"> <input type="text" name="first" /> <input type="text" name="second" /> <input type="submit" /> </form>
and the user inserts the strings
this is a field
andwas it clear already
in the two text fields and presses thesubmit
button, the handler of the route/hello
(the route specified by theaction
attribute of the form element in the above example) will receive a query string. Write down the query string it receivesPreguntas de REST y Servicios Web
Defina que es un servicio web
Explique que es REST
Preguntas sobre la API de GitHub
¿En que URL funciona el servicio web de GitHub?
- Usando
curl
, muestre un ejemplo de peticiónGET
al servicio de GitHub solicitando información sobre un cierto usuario. ¿Con que opción puedo ver los headers? - Explique las diversas formas de autenticarse para usar el servicio de GitHub
Explique que es
octonode
y ponga un ejemplo de usoPreguntas de HTTPS
¿Cuales son las dos funcionalidades principales proveídas por la capa SSL?
- Verifying that you are talking directly to the server that you think you are talking to
- Ensuring that only the server can read what you send it and only you can read what it sends back
- ¿Es posible que alguien intercepte un mensaje utilizando HTTPS?
- The really, really clever part is that anyone can intercept every single one of the messages you exchange with a server, including the ones where you are agreeing on the key and encryption strategy to use, and still not be able to read any of the actual data you send.
- ¿Cuales son los tres objetivos de la fase de handshake entre un cliente y un servidor utilizando TLS?
- To satisfy the client that it is talking to the right server (and optionally visa versa)
- For the parties to have agreed on a cipher suite, which includes which encryption algorithm they will use to exchange data
- For the parties to have agreed on any necessary keys for this algorithm
- ¿Como se llaman las tres fases en las que se puede descomponer la etapa de handshake?
- Hello, Certificate Exchange and Key Exchange*
- Describa la primera fase del handshake
- The handshake begins with the client sending a
ClientHello
message. - This contains all the information the server needs in order to connect to the client via SSL, including
- the various cipher suites
- and maximum SSL version that it supports.
- The server responds with a
ServerHello
, which contains similar information required by the client, including- a decision based on the client’s preferences about which cipher suite and version of SSL will be used.
- The handshake begins with the client sending a
- Describa la segunda fase del handshake
- Now that contact has been established, the server has to prove its identity to the client.
- This is achieved using its SSL certificate, which is a very tiny bit like its passport.
- An SSL certificate contains various pieces of data, including the
- name of the owner,
- the property (eg. domain) it is attached to,
- the certificate’s public key,
- the digital signature and
- information about the certificate’s validity dates.
- The client checks that it either
- implicitly trusts the certificate,
- or that it is verified and trusted by one of several Certificate Authorities (CAs) that it also implicitly trusts.
- Note that the server is also allowed to require a certificate to prove the client’s identity, but this typically only happens in very sensitive applications.
- Describa la tercera fase del handshake
- The encryption of the actual message data exchanged by the client and server will be done using a symmetric algorithm, the exact nature of which was already agreed during the Hello phase.
- A symmetric algorithm uses a single key for both encryption and decryption, in contrast to asymmetric algorithms that require a public/private key pair.
- Both parties need to agree on this single, symmetric key, a process that is accomplished securely using asymmetric encryption and the server’s public/private keys.
- The client generates a random key to be used for the main, symmetric algorithm.
- It encrypts it using an algorithm also agreed upon during the Hello phase, and the server’s public key (found on its SSL certificate).
- It sends this encrypted key to the server, where it is decrypted using the server’s private key, and the interesting parts of the handshake are complete.
- ¿Que tipo de cifrado se utiliza una vez que a finalizado con éxito la fase de handshake?
- The parties are sufficiently happy that they are talking to the right person, and have secretly agreed on a key to symmetrically encrypt the data that they are about to send each other.
- ¿Cuales son las dos razones por las que podríamos confiar en un certificado SSL?
- There are 2 sensible reasons why you might trust a certificate:
- If it’s on a list of certificates that you trust implicitly
- If it’s able to prove that it is trusted by the controller of one of the certificates on the above list
- The first criteria is easy to check. Your browser has a pre-installed list of trusted SSL certificates from Certificate Authorities (CAs) that you can view, add and remove from.
- These certificates are controlled by a centralised group of (in theory, and generally in practice) extremely secure, reliable and trustworthy organisations like
- Let's Encrypt (Let’s Encrypt is a free, automated, and open Certificate Authority),
- CAcert.org es una autoridad certificadora dirigida por la comunidad que emite certificados gratuitos al público
- Symantec,
- Comodo and
- GoDaddy.
- There are 2 sensible reasons why you might trust a certificate:
Describa como funciona una firma digital
- As already noted, SSL certificates have an associated public/private key pair
- The public key is distributed as part of the certificate, and the private key is kept incredibly safely guarded
- This pair of asymmetric keys is used in the SSL handshake to exchange a further key for both parties to symmetrically encrypt and decrypt data
- The client uses the server’s public key to encrypt the symmetric key and send it securely to the server, and the server uses its private key to decrypt it
- Anyone can encrypt using the public key, but only the server can decrypt using the private key
The opposite is true for a digital signature.
A certificate can be "signed" by another authority, whereby the authority effectively goes on record as saying
"We have verified that the controller of this certificate also controls the property (domain) listed on the certificate".
- In this case the authority uses their private key to (broadly speaking) encrypt the contents of the certificate, and this cipher text is attached to the certificate as its digital signature.
- Anyone can decrypt this signature using the authority’s public key, and verify that it results in the expected decrypted value.
- But only the authority can encrypt content using the private key, and so only the authority can actually create a valid signature in the first place.
- So if a server comes along claiming to have a certificate for Microsoft.com that is signed by Symantec (or some other CA), your browser doesn’t have to take its word for it.
- If it is legit, Symantec will have used their (ultra-secret) private key to generate the server’s SSL certificate’s digital signature, and so your browser use can use their (ultra-public) public key to check that this signature is valid.
- Symantec will have taken steps to ensure the organisation they are signing for really does own Microsoft.com, and so given that your client trusts Symantec, it can be sure that it really is talking to Microsoft Inc.
- As already noted, SSL certificates have an associated public/private key pair
- Pueden en un coffee shop conocer los contenidos de mi tráfico HTTPS desde mi portátil sobre su red?
- Nope.
- The magic of public-key cryptography means that an attacker can watch every single byte of data exchanged between your client and the server and still have no idea what you are saying to each other beyond roughly how much data you are exchanging.
- However, your normal HTTP traffic is still very vulnerable on an insecure wi-fi network, and a flimsy website can fall victim to any number of workarounds that somehow trick you into sending HTTPS traffic either over plain HTTP or just to the wrong place completely.
- For example, even if a login form submits a username/password combo over HTTPS, if the form itself is loaded insecurely over HTTP then an attacker could intercept the form’s HTML on its way to your machine and modify it to send the login details to their own endpoint.
- Nope.
Puede mi empresa conocer los contenidos de mi tráfico HTTPS sobre la red cuando uso la máquina que me proveen?
- If you are also using a machine controlled by your company, then yes.
- Remember that at the root of every chain of trust lies an implicitly trusted CA, and that a list of these authorities is stored in your browser.
- Your company could use their access to your machine to add their own self-signed certificate to this list of CAs.
- They could then intercept all of your HTTPS requests, presenting certificates claiming to represent the appropriate website, signed by their fake-CA and therefore unquestioningly trusted by your browser.
- Since you would be encrypting all of your HTTPS requests using their dodgy certificate’s public key, they could use the corresponding private key to decrypt and inspect (even modify) your request, and then send it onto it’s intended location.
- They probably don’t. But they could.
- Incidentally, this is also how you use a proxy to inspect and modify the otherwise inaccessible HTTPS requests made by an iPhone app.
Preguntas de Passport
- If you are also using a machine controlled by your company, then yes.
¿Que es OAuth?
- OAuth provides a method for users to grant third-party limited access (in scope, duration, etc.) access to their resources without sharing their passwords
- ¿Quienes son los cuatro roles que aparecen en una autenticación con OAuth?
- resource owner: An entity capable of granting access to a protected resource. When the resource owner is a person, it is referred to as an end-user. (El usuario)
- resource server: The server hosting the protected resources, capable of accepting and responding to protected resource requests using access tokens. (El servidor de Pinterest)
- client: An application making protected resource requests on behalf of the resource owner and with its authorization (por ejemplo, un cliente de pinterest en el teléfono). The term " client" does not imply any particular implementation characteristics (e.g., whether the application executes on a server, a desktop, or other devices).
- authorization server: The server issuing access tokens to the client after successfully authenticating the resource owner and obtaining authorization (por ejemplo, Facebook, cuando nos autenticamos con Facebook)
- ¿Qué tres elementos de información suelen ser necesarios a la hora de registrar nuestra aplicación ante un proveedor de OAuth?
- Before using OAuth with your application, you must register your application with the service.
- This is done through a registration form in the developer or API portion of the service's website, where you will provide the following information (and probably details about your application):
- Application Name
- Application Website
- Redirect URI or Callback URL
- ¿Que se debe poner en Redirect URI or Callback URL cuando se está registrando nuestra aplicación?
- The redirect URI is where the service will redirect the user after they authorize (or deny) your application, and therefore the part of your application that will handle authorization codes or access tokens.
- Una vez que registramos la aplicación, el servicio provee las credenciales del cliente. ¿En que consisten esas credenciales?
- Once your application is registered, the service will issue client credentials in the form of a client identifier and a client secret.
- The Client ID is a publicly exposed string that is used by the service API to identify the application, and is also used to build authorization URLs that are presented to users.
- The Client Secret is used to authenticate the identity of the application to the service API when the application requests to access a user's account, and must be kept private between the application and the API.
- ¿Que es passport, que funcionalidades provee y como funciona?
- Passport is authentication middleware for Node.js. Extremely flexible and modular, Passport can be unobtrusively dropped in to any Express-based web application. A comprehensive set of strategies support authentication using a username and password, Facebook, Twitter, and more.
Rellene las partes que faltan:
var passport = require('passport'); var Strategy = require('_______________').Strategy; var github = require('octonode'); .... var datos_config = JSON.parse(JSON.stringify(config)); passport.use(new Strategy({ clientID: datos_config.clientID, clientSecret: datos_config.clientSecret, callbackURL: callbackURL_ }, function(accessToken, refreshToken, profile, cb) { var token = datos_config.token; var client = github.client(_____); var ghorg = client.___('ULL-ESIT-SYTW-1617'); ghorg.______(profile.username, (err,result) => { if(err) console.log(err); console.log("Result:"+result); if(result == true) return cb(null, profile); else { return cb(null,null); } }); }));
- Respuesta:
var passport = require('passport'); var Strategy = require('passport-github').Strategy; var github = require('octonode'); .... var datos_config = JSON.parse(JSON.stringify(config)); passport.use(new Strategy({ clientID: datos_config.clientID, clientSecret: datos_config.clientSecret, callbackURL: callbackURL_ }, function(accessToken, refreshToken, profile, cb) { var token = datos_config.token; var client = github.client(token); var ghorg = client.org('ULL-ESIT-SYTW-1617'); ghorg.member(profile.username, (err,result) => { if(err) console.log(err); console.log("Result:"+result); if(result == true) return cb(null, profile); else { return cb(null,null); } }); // return cb(null, profile); }));
Preguntas de Rutas en ExpressJS
Escriba un servidor que sirva ficheros estáticos desde el directorio
/public
- El servidor deberá responder a requests
GET
en las rutas/user/nombredeusuario
(dondenombredeusuario
varía) con una página que digaHola nombredeusuario
usando el métodorender
del objetoresponse
- La página se elaborara con una vista que debe estar en el directorio
views/
usando el motor de vistasejs
- La página elaborada en la respuesta tendrá un tag
img
referenciando a una imagen que está enpublic/
- La página se elaborara con una vista que debe estar en el directorio
- Escriba un middleware que intercepte en las rutas
/user/nombredeusuario
y que vuelque en la consola información sobre el request: (por ejemplo los atributosmethod
,path
, etc.) - Explique como se puede aislar el código anterior en un fichero
routes/user.js
que sea cargado desde el programa principal - Explique que hay que hacer para desplegar la aplicación en Heroku
- Explique que hay que hacer para desplegar la aplicación en la máquina virtual del iaas
Pruebas
Preguntas de Repaso de Pruebas con Mocha, Chai y Should
- ¿Como creamos el directorio con el esqueleto inicial para las pruebas con mocha?
- En este ejemplo se usa Chai assert. Rellene lo que falta en estas pruebas del código del conversor de temperatura:
var assert = chai.______;
suite('temperature', function() {
test('[1,{a: 2}] == [1,{a: 2}]', function() {
assert._________([1, {a:2}], [1, {a:2}]);
});
test('5X = error', function() {
original.value = "5X";
calculate();
assert._____(converted.innerHTML, /ERROR/);
});
});
- Este es un fichero
test/index.html
apto para ejecutar las pruebas con Mocha y Chai en la práctica de la Temperatura en un navegador. Rellene las partes que faltan- Sugerencias: El id es el usado por mocha para producir su salida de las pruebas, es necesario cargar
chai
ymocha
y establecer el estilo de pruebas (tdd
,bdd
, etc.) y por útlimo ejecutarmocha
- Sugerencias: El id es el usado por mocha para producir su salida de las pruebas, es necesario cargar
[~/srcPLgrado/temperature(karma)]$ cat tests/index.html
<!DOCTYPE html>
<html>
<head>
<title>Mocha</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="mocha.css" />
</head>
<body>
<div id="_____"></div> <!-- para la salida de las pruebas -->
<input id="original" placeholder="32F" size="50">
<span class="output" id="converted"></span>
<script src="________"></script>
<script src="________"></script>
<script src="../temperature.js"></script>
<script>mocha._____('___')</script>
<script src="tests.js"></script>
<script>
mocha.___();
</script>
</body>
</html>
- Rellene las partes que faltan del fichero con las pruebas TDD en Mocha y Chai para la práctica de la temperatura:
[~/srcPLgrado/temperature(karma)]$ cat tests/tests.js
var assert = ____.assert;
_____('temperature', function() {
____('32F = 0C', function() {
original.value = "32F";
calculate();
assert._________(converted.innerHTML, "0.0 Celsius");
});
});
- ¿Como puedo ejecutar las pruebas escritas usando Mocha y Chai usando
el comando
npm test
?. (no se asume el uso de Karma en esta pregunta) Explique como hacerlo.
- El siguiente ejemplo corresponde al ejemplo de pruebas que vimos para
la renderización de una tabla correspondiente al capítulo The Secret Life Of Objects
que usa
mocha
yshould
. Rellena las partes que faltan:
________("drawTable", function() {
__("must draw the checkerboard correctly", function() {
/* There are 5 columns and 5 rows and a white space between columns*/
drawTable(checkerboard()).should._____(/^(([# ]{2}(\s|$)){5}){5}$/);
})
});
Preguntas de Repaso de Gulp
- Complete las partes que faltan del siguiente
gulpfile.js
en el que se lleva a cabo una tarea para la optimización (uglify/minify) de la aplicación de la práctica de la temperatura:
/tmp/pl-grado-temperature-converter(karma)]$ cat gulpfile.js
var gulp = require('gulp'),
gutil = require('gulp-util'),
uglify = require('gulp-uglify'),
concat = require('gulp-concat');
var minifyHTML = require('gulp-minify-html');
var minifyCSS = require('gulp-minify-css');
gulp.____('minify', function () {
gulp.___('temperature.js')
.____(uglify())
.___(gulp.____('minified'));
gulp.__('./index.html')
.___(minifyHTML())
.___(gulp.___('./minified/'))
gulp.__('./*.css')
.___(minifyCSS({keepBreaks:true}))
.___(gulp.___('./minified/'))
});
- Explique los pasos para publicar un libro GitBook en GitHub usando
gulp
Explique los pasos para actualizar automáticamente los HTML del libro GitBook en su máquina virtual del iaas usando
gulp
Preguntas de Repaso de Karma
Explique como funciona Karma
¿Con que comando puedo crear el fichero de configuración de Karma?
¿Que debemos poner en la entrada
frameworks
de karma para el ejemplo de la temperatura?frameworks: ['_____'],
La librería/plugin
karma-mocha
provee el adapter de Karma para Mocha. ¿Como le pasamos opciones para configurar Mocha desde Karma? Rellene las partes que faltan:
client: {
args: ['--grep', 'pattern'], // solo pruebas que casan con pattern
mocha: {
__: '___'
}
},
Explique que debe ponerse (y que no) en la sección
files
del fichero de configuración de Karma ¿Donde son cargados dichos ficheros?:files: [ ... ],
Los preprocesadores en Karma nos permiten procesar los ficheros en
files
antes de que sean cargados en el navegador.
preprocessors = {
'**/*.coffee': 'coffee',
'**/*.html': 'html2js'
};
¿Que hace el preprocesador `html2js`? ¿Que hace el preprocesador
`coffee`?
- Complete la función
setup
de las pruebas de la práctica de la temperatura con Mocha, Chai y Karma:
setup(function(){
if (typeof ________ !== 'undefined') {
document.body.innerHTML = ________['tests/test.html'];
original = document.______________('original');
converted = document.______________('converted');
}
});
¿Como se llama la variable en la que se guardan los HTML de los ficheros cargados en los navegadores?
- ¿Que es PhantomJS? ¿Como funciona?
Módulos
Preguntas de Repaso de npm
¿Con que comando creo el fichero
package.json
?Explique en consiste el versionado semántico/semantic versioning. ¿Cual es el nombre en inglés de los tres números de version? ¿Como cambian?
¿Que se guarda en el campo
"dependencies": {}
depackage.json
?¿Que opción debo añadir al comando
npm install
para que la librería instalada se añada como dependencia en el ficheropackage.json
?¿Que se guarda en el campo
"devDependencies": {}
depackage.json
?¿Que opción debo añadir al comando
npm install
para que la librería instalada se añada como"devDependencies"
en el ficheropackage.json
?Explique que significan en los objetos que describen las dependencias dentro
package.json
las siguientes notaciones:*
latest
¿Cual es la salida? ¿Como actúa el operador
~
?> var semver = require('semver') undefined > semver.toComparators('~1.2.3') [ [ '_______', '______' ] ]
¿Cual es la salida? ¿Como actúa el operador
^
?
> var semver = require('semver')
undefined
> semver.toComparators('^1.2.3')
[ [ '_______', '______' ] ]
!INCLUDE "pubnpm.md"
Preguntas de Como crear y publicar un paquete npm
- ¿Cuales son los pasos para escribir y publicar un paquete
npm
? - ¿Cómo instalo una versión anterior de un package npm?
npm install <package>@<version>
- ¿Cómo encuentro la versión de un paquete NodeJs instalado?
¿Que se entiende por
scope
de un paquete npm?- ¿Cual es la notación para referenciar un paquete
somepackage
que se aloja en el ámbitosomescope
? - ¿Como se hace un
require
de un paquetesomepackage
que se aloja en el ámbitosomescope
? - Cualquier usario npm puede publicar sus módulos en cualquier ámbito: ¿Verdadero o falso?
- ¿Cómo puedes hacer para tener varios ámbitos npm?
- ¿Cual es el tipo de acceso por defecto de mi paquete con ámbito: público o privado?
- ¿Cómo indico a la hora de publicar mi paquete con ámbito que quiero que sea de acceso público?
¿Que hace este comando?
npm login --registry=http://reg.example.com --scope=@myco
¿Que hace este comando?
npm init --scope=username
¿Que hace este comando?
npm config set scope username
- ¿Cual es la notación para referenciar un paquete
¿Que hace este comando?
npm version patch -m "Upgrade to %s for reasons"
- Cuando el comando anterior se ejecuta en un git repo, ¿Crea un commit? ¿Crea un tag?
If
preversion
,version
, orpostversion
are in the scripts property of the package.json, they will be executed as part of running npmversion
. Take the following example:"scripts": { "preversion": "npm test", "version": "npm run build && git add -A dist", "postversion": "git push && git push --tags && rm -rf build/temp" }
Describe the set of actions that will happen when running
npm version
JsDoc
- ¿Cual es la sintáxis de los comentarios de documentación en JSDoc? ¿Como empiezan?
- ¿Donde debo ubicar un comentario de documentación JSDoc para documentar un cierto código?
Special JSDoc tags can be used to give more information. For example,
- If the function is a constructor for a class, you can indicate this by adding a __ tag (fill the gap)
- ¿Cómo se documenta un parámetro de una función?
¿Que hace esta documentación JSDoc?
/** * See {@tutorial gettingstarted} */ function myFunction() {}
¿Que hace esta documentación JSDoc?
/** * See {@link MyClass} and [MyClass's foo property]{@link MyClass#foo}. * Also, check out {@link http://www.google.com|Google} and * {@link https://github.com GitHub}. */ function myFunction() {}
Procesadores de Lenguajes
Preguntas de Repaso de Expresiones Regulares
Escriba expresiones regulares que casen con las siguientes especificaciones:
- car and cat
- pop and prop
- ferret, ferry, and ferrari
- Any word ending in ious
- A whitespace character followed by a dot, comma, colon, or semicolon
- A word longer than six letters
- A word without the letter e
- Escriba una expresión regular que reconozca las cadenas de doble comillas. Debe permitir la presencia de comillas y caracteres escapados.
- Escriba una expresión regular que reconozca los números en punto flotante (por ejemplo
-2.3e-1
,-3e2
,23
,3.2
). numbers = /^ ... $/, matching exacto - Escriba una expresión regular que case con los números no primos expresados en unario. Pruebe con
1111
,111
,111111
,1111111
, ... - Escriba una expresión regular que case con los comentarios JavaScript.
Escriba una expresión JavaScript que permita reemplazar todas las
Rellene las partes que faltan:
> re = /d(b+)(d)/ig
/d(b+)(d)/gi
> z = "dBdxdbbdzdbd"
'dBdxdbbdzdbd'
> result = re.exec(z)
[ ______, _____, ______, index: __, input: 'dBdxdbbdzdbd' ]
> re.lastIndex
______
> result = re.exec(z)
[ ______, _____, ______, index: __, input: 'dBdxdbbdzdbd' ]
> re.lastIndex
______
> result = re.exec(z)
[ ______, _____, ______, index: __, input: 'dBdxdbbdzdbd' ]
> re.lastIndex
______
> result = re.exec(z)
_____
- Escriba la expresión regular
r
para que produzca el resultado final:
> x = "hello"
> r = /l(___)/
> z = r.exec(x)
[ 'l', index: 3, input: 'hello' ]
- Rellene el valor que falta:
> z = "dBdDBBD"
> re = /d(b+)(d)/ig
> re.lastIndex = ________
> result = re.exec(z)
[ 'DBBD',
'BB',
'D',
index: 3,
input: 'dBdDBBD' ]
Conteste:
Explique que hace el siguiente fragmento de código:
> RegExp.prototype.bexec = function(str) { ... var i = this.lastIndex; ... var m = this.exec(str); ... if (m && m.index == i) return m; ... return null; ... } [Function]
Rellene las salidas que faltan:
> re = /d(b+)(d)/ig
/d(b+)(d)/gi
> z = "dBdXXXXDBBD"
'dBdXXXXDBBD'
> re.lastIndex = 3
> re.bexec(z)
_____________________________________________________
> re.lastIndex = 7
> re.bexec(z)
_____________________________________________________
Escriba una expresión JavaScript que permita reemplazar todas las apariciones de palabras consecutivas repetidas (como
hello hello
) por una sóla aparición de la misma¿Cual es la salida?
> "bb".match(/b|bb/) > "bb".match(/bb|b/)
Justifique su respuesta.
El siguiente fragmento de código tiene por objetivo escapar las entidades HTML para que no sean intérpretadas como código HTML. Rellene las partes que faltan.
var entityMap = {
"&": "&___;",
"<": "&__;",
">": "&__;",
'"': '"',
"'": ''',
"/": '/'
};
function escapeHtml(string) {
return String(string).replace(/_________/g, function (s) {
return ____________;
});
Se quiere poner un espacio en blanco después de la aparición de cada coma:
> x = "a,b,c,1,2,d, e,f" 'a,b,c,1,2,d, e,f' > x.replace(/,/g,", ") 'a, b, c, 1, 2, d, e, f'
Se pide que si hay ya un espacio después de la coma, no se duplique.
Se pide una expresión regular que case con expresiones del tipo
identifier = number
y retorne con cada paréntesis el identificador y el número. Pruebe conh = 4
,temp = 5.6
,x23= -2.3e1
yz += 3
Imagine you have written a story and used single quotation marks throughout to mark pieces of dialogue. Now you want to replace all the dialogue quotes with double quotes, while keeping the single quotes used in contractions like aren’t. Think of a pattern that distinguishes these two kinds of quote usage and craft a call to the replace method that does the proper replacement.
var text = "'I'm the cook,' he said, 'it's my job.'"; // Change this call. var result = text.replace(/.../g, '...'); console.log(result); var expected = `"I'm the cook," he said, "it's my job."`; if (expected === result) console.log("OK") else console.log("ERROR!");
Preguntas de Repaso de Análisis Léxico
Escriba un método
bexec
para los objetosRegExp
que funcione comoexec
pero sólo case en la posiciónlastIndex
:
RegExp.prototype.bexec = function(str) {
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
__________________________
};
- Basándose en el método
bexec
del ejercicio anterior escriba las partes que faltan del métodotokens
que implementa un analizador léxico para un lenguaje de tipo JavaScript en el queif
ythen
son palabras reservadas:
String.prototype.tokens = function() {
var RESERVED_WORD, from, getTok, i, key, m, make, n, result, rw, tokens, value;
from = 0;
i = 0;
n = 0;
m = 0;
result = [];
tokens = {
WHITES: ____________________________________________,
ID: ____________________________________________,
NUM: ____________________________________________,
STRING: ____________________________________________,
ONELINECOMMENT: ____________________________________________,
MULTIPLELINECOMMENT: ____________________________________________,
COMPARISONOPERATOR: ____________________________________________,
ONECHAROPERATORS: /([=()&|;:,{}[\]])/g,
ADDOP: /[+-]/g,
MULTOP: /[*\/]/g
};
RESERVED_WORD = {
"if": "IF",
then: "THEN"
};
Explique como se usa en el análisis el objeto RESERVED_WORD
y para que sirve.
Observe su uso en el bucle
make = function(type, value) {
return {
type: type,
value: value,
from: from,
to: i
};
};
getTok = function() {
var str;
str = m[0];
i += _____________________;
return str;
};
if (!this) {
return;
}
while (i < this.length) {
for (key in tokens) {
value = tokens[key];
________________________
}
from = __________;
if (m = tokens.WHITES.bexec(this) ||
(m = tokens.ONELINECOMMENT.bexec(this)) ||
(m = tokens.MULTIPLELINECOMMENT.bexec(this))) {
_________________________________;
} else if (m = tokens.ID.bexec(this)) {
rw = RESERVED_WORD[m[0]];
if (rw) {
result.push(make(rw, getTok()));
} else {
result.push(_____________________________________);
}
} else if (m = tokens.NUM.bexec(this)) {
n = +getTok();
if (isFinite(n)) {
result.push(____________________________________);
} else {
make("NUM", m[0]).error("Bad number");
}
} else if (m = tokens.STRING.bexec(this)) {
result.push(make("STRING", getTok().replace(_______________________/g, "")));
} else if (m = tokens.COMPARISONOPERATOR.bexec(this)) {
result.push(make("COMPARISON", getTok()));
} else if (m = tokens.ADDOP.bexec(this)) {
result.push(make("ADDOP", getTok()));
} else if (m = tokens.MULTOP.bexec(this)) {
result.push(make("MULTOP", getTok()));
} else if (m = tokens.ONECHAROPERATORS.bexec(this)) {
result.push(make(m[0], getTok()));
} else {
throw "Syntax error near '" + (this.substr(i)) + "'";
}
}
return result;
};
Bases de Datos
Preguntas de Repaso de Mongo y Mongoose
¿Que diferencia hay entre una tabla de una base de datos relacional y una collection de MongoDB?
¿Como se llama la primary key de un documento MongoDB?
Escriba el código Mongoose para conectarse a la MongoDB database
chuchu
Escriba el código Mongoose para crear un esquema para modelar una colección de
usuarios
Escriba el código Mongoose para crear un modelo a partir del esquema anterior
Escriba el código Mongoose para crear un documento usuario y guardarlo en la base de datos
Escriba el código Mongoose para buscar por un documento usuario con nombre
'Pepe'