Skip to content

Instantly share code, notes, and snippets.

View gabmontes's full-sized avatar

Gabriel Montes gabmontes

View GitHub Profile
@gabmontes
gabmontes / cbuvalidator.js
Last active October 27, 2022 15:01
Validator for "Clave Bancaria Uniforme", or CBU, as used in the Argentinean banking system
/**
* Validator and brute-force checksum generator for "Clave Bancaria Uniforme"
* fromat used in the Argentinan banking system.
*
* Legal stuff at http://www.infoleg.gob.ar/infolegInternet/anexos/45000-49999/47564/norma.htm
* Code based on https://gist.github.com/delucas/4526176
* Universal loader based on https://gist.github.com/jrburke/1262861
*/
/* global define, window */
@gabmontes
gabmontes / gmailCleanup.js
Last active October 2, 2024 06:32
Google Apps script to cleanup messages from GMail.
// Inspired in http://www.johneday.com/422/time-based-gmail-filters-with-google-apps-script
// Deletes old marked conversations
function cleanUp() {
var delayDays = 5; // # of days before messages are moved to trash
var label = "Delete me"; // label to identify the messages
var maxDate = new Date(Date.now() - delayDays * 24 * 60 * 60 * 1000);
var userLabel = GmailApp.getUserLabelByName(label);
if (!userLabel) {
return;

Repaso de JavaScript

Objetivos

  • Repasar conceptos de JavaScript que lo hacen diferente de otros lenguajes para dejar una base firme de conocimientos y evitar caer en problemas típicos que aparecen al llegar desde otros lenguajes estructurados o con un paradigma clásico de orientación a objetos.
  • Presentar y comprender patrones usados muy frecuentemente en JavaScript para poder resolver problemas típicos sin rápidamente y de una manera óptima y elegante.

Características

JavaScript es un lenguaje de programación que tiene las siguientes características principales:

Introducción a Node.js

Objetivos

  • Conocer la motivación que llevó a la creación de Node.js y su arquitectura interna básica para tener suficiente información y poder tomar decisiones informadas acerca de si Node.js es la herramienta adecuada para resolver un problema específico.
  • Conocer y comprender objetos y clases base que provee la plataforma. Entender el sistema de módulos que usa Node.js y algunos módulos base muy importantes.

Introducción y arquitectura

Node.js es un ambiente de ejecución de aplicaciones JavaScript basado en el motor V8, uno de los componentes principales del navegador Google Chrome. Utiliza un modelo de programación basado en eventos, con I/O no bloqueante y se complementa con NPM y módulos que siguen la arquitectura CommonJS para extender su funcionalidad. Fue creado en 2009 por Ryan Dahl en Joyent y actualmente administrado por la Linux Foundation.

AngularJS + RequireJS done right

Since AngularJS 2.x is not here yet, many applications are still being written using Angular 1.x. When the application that is more complex than the trivial examples you may found out there, it may end up having many modules, services, controllers, view templates and so on. In those real world cases, the main entry point of the application index.html may become a mess like this:

<!DOCTYPE html>
<html ng-app="myApp">
	<head>
        <!-- Angular and modules -->
		<script src="path-to/angular.js"></script>
@gabmontes
gabmontes / IntroExpress.md
Created September 29, 2015 01:39
Introducción a Express

Introducción a Express

Objetivos

  • Crear un web server con Express
  • Servir contenido estático

Qué es Express

Express es uno de los frameworks más utilizados para el desarrollo de servicos web con Node.js. Permite crear servicios que de manera modular y su funcionalidad puede ser extendida mediante el uso de middlewares.

@gabmontes
gabmontes / require-async.js
Created September 29, 2015 18:14
Promisify require() calls
(function (global, Promise) {
"use strict";
if (!require || !Promise) {
throw new Error("Could not promisify require");
}
global.requireAsync = function (dependencies) {
return new Promise(function (complete, error) {
require(dependencies, function () {
@gabmontes
gabmontes / winjs-patch.js
Last active September 29, 2015 18:16
Adapt WinJS 2.1 in Windows Phone 8.1 to work with latest angular-winjs bridge
(function (global) {
"use strict";
if (WinJS) {
// https://github.com/winjs/angular-winjs/issues/56
WinJS.UI.Command = WinJS.UI.Command || WinJS.UI.AppBarCommand;
// https://github.com/winjs/angular-winjs/issues/62
WinJS.Utilities._setImmediate = WinJS.Utilities._setImmediate || setImmediate.bind(global);
@gabmontes
gabmontes / ExpressABM.md
Last active February 7, 2023 15:23
Creación de un ABM (CRUD) básico con Express

ABM con Express

Objetivos

  • Crear servicios web para dar soporte a una aplicación de ABM

Estructura

Una aplicación web que permita administrar un tipo de recurso, como por ejemplo una lista de libros, tendrá los siguientes componentes:

CORS, Express y AngularJS

Cuando una página web realiza un pedido a un recurso en otro dominio (diferente protocolo, subdiminio, dominio o puerto), realiza lo que se llama un "pedido HTTP cross-origin". Por razones de seguridad, los navegadores restringen los pedidos HTTP cross-origin que se inician desde un script (JavaScript), como pueden ser los realizados utilizando el objeto XMLHttpRequest. Para realizar pedidos legítimos a diferentes dominios, hay que implementar el mecanismo CORS o Cross Origin Resource Sharing.

El estándar CORS consiste en agregar headers específicos en los pedidos HTTP y en las respuestas correspondientes para que el servidor informe al navegador qué recursos están disponibles. Solo aquellos recursos disponibles serán accesibles desde dicho navegador.

Adicionalmente, ciertos pedidos como PUT o DELETE deben ser precedidos de un pedido del tipo OPTIONS, llamado preflight, que debe ser aprobado por el servidor antes del envío del pedido original.

Pedido simple