background preloader

Functional Javascript

Functional Javascript
var Functional; Functional is the namespace for higher-order functions. Functional.install = function(except) This function copies all the public functions in Functional except itself into the global namespace. Higher-order functions Functional.compose = function(fn...) Type: (a2 → a1) (a3 -> a2)… (a… -> an) -> a… -> a1 Returns a function that applies the last argument of this function to its input, and the penultimate argument to the result of the application, and so on. (1, 2, 3…, )() =def 1(2(3(…((…))))) compose('1+', '2*')(2)→ 5 Functional.sequence = function(fn...) Type: (a… → a1) (a1 -> a2) (a2 -> a3)… (an-1 -> an) -> a… -> an Same as compose, except applies the functions in argument-list order. (1, 2, 3…, )(…) =def (…(3(2(1(…))))) sequence('1+', '2*')(2)→ 6 Functional.map = function(fn, sequence, object) Type: (a ix → boolean) [a] -> [a] Applies fn to each element of sequence. map('1+', [1,2,3])→ [2, 3, 4] If object is supplied, it is the object of the call. The fusion rule: A synonym for select. Related:  Java Script

Yeoman : que tous ceux qui sont dans la vibe disent “Yo” 01 décembre 2014 La Tendance à la standardisation des développements issue du back-end se diffuse de plus en plus dans l’univers front-end. De nouveaux outils font leur apparition pour accompagner cette mutation. C’est de l’un d’eux, Yeoman, que je souhaite vous entretenir aujourd’hui. Yeoman, c’est un peu l’assistant qui va accompagner le développeur front-end dès le début du processus de développement. Qu’est ce que Yeoman Le projet Yeoman Yeoman est un projet open-source distribué sous licence BSD et soutenu par Google. Node.js Avant d’aller plus loin, une précision quant à NodejJs qui sera plusieurs fois évoqué dans cet article. Toutes les fois qu’on souhaitera développer en Javascript un outil destiné à tourner hors du navigateur, on va s’orienter naturellement vers Node.js. Node.js mériterait toute une série d’articles à lui seul, aussi si vous n’êtes pas familier avec ce framework, je vous conseille cet excellent tutoriel. Périmètre fonctionnel Génération du squelette de l’application

Azkaban | LinkedIn Data Team A batch job scheduler can be seen as a combination of the cron and make Unix utilities combined with a friendly UI. Batch jobs need to be scheduled to run periodically. They also typically have intricate dependency chains—for example, dependencies on various data extraction processes or previous steps. A good batch workflow system allows a program to be built out of small reusable pieces that need not know about one another. Why was it made? Schedulers are readily available (both open source and commercial), but tend to be extremely unfriendly to work with—they are basically bad graphical user interfaces grafted onto 20-year old command-line clients. State of the project We have been using Azkaban internally at LinkedIn for since early 2009, and have several hundred jobs running in it, mostly Hadoop jobs or ETL of some type. Any patches, bug reports, or feature ideas are quite welcome.

Scope isolé dans les directives AngularJS Second sujet que j'ai traité au Meetup chez Google, il s'agit des scopes isolés dans les directives. Les slides se trouvent ici, et une vidéo a été mise en ligne là ; mon intervention commence par un sujet sur l'usage des services, et celui-ci est à la suite. Le scope isolé est un outil bien pratique mis à notre disposition par AngularJS pour faciliter la création de widgets. L'arbre des scopes Les scopes d'AngularJS sont des objets qui servent de contexte d'évaluation des expressions contenues dans les templates. Ils forment un arbre, dont la racine est le seul scope de l'application qui est aussi publié comme un service, sous le nom $rootScope. La structure arborescente des scopes est calquée sur celle des éléments de la page HTML. Quand une directive crée un scope sur un élément HTML, ce scope aura pour parent le premier scope rencontré en remontant les éléments HTML. Scope d'un élément Quand et pourquoi un scope isolé ? Bindings des propriétés du scope isolé @ : attribut texte et attrs.

Functional programming with JavaScript | Minko Gechev's blog This article is about the functional concepts of JavaScript. Some of them are built-in the languages, others extra implemented but all of them are very common for purely functional languages like Haskell. First I want to tell what I mean with the term purely functional language. Concurrency. I hope these arguments are enough for you to look at the next sections. Anonymous functions It seems that the functional programming becomes more and more popular. $(document).ready(function () { //do some stuff }); The function passed to $(document).ready is exactly an anonymous function. More about passing functions in the next section… High-order functions High-order functions are functions which accepts functions as arguments or returns functions. function animate(property, duration, endCallback) { //Animation here... if (typeof endCallback === 'function') { endCallback.apply(null); } } animate('background-color', 5000, function () { console.log('Animation finished'); }); Imagine we have this case:

Scopes Loading... Scope is an object that refers to the application model. It is an execution context for expressions. Scopes are arranged in hierarchical structure which mimic the DOM structure of the application. Scopes can watch expressions and propagate events. Scope characteristics Scopes provide APIs ($watch) to observe model mutations.Scopes provide APIs ($apply) to propagate any model changes through the system into the view from outside of the "Angular realm" (controllers, services, Angular event handlers).Scopes can be nested to limit access to the properties of application components while providing access to shared model properties. Scope as Data-Model Scope is the glue between application controller and the view. Both controllers and directives have reference to the scope, but not to each other. Edit in Plunker <div ng-controller="MyController"> Your name: <input type="text" ng-model="username"><button ng-click='sayHello()'>greet</button><hr> {{greeting}} </div> Scope Hierarchies

seanhess/fjs Introduction aux modules AngularJS - opentuto Un module permet d’encapsuler l’ensemble des éléments d’une application AngularJS. Pour créer un module, on utlise la méthode module de l’objet angular. Cette méthode prend en paramètre le nom de module suivi d’un tableau, correspondant aux dépendances du module. /* Création d'un module nommé MyApplication */ var module = angular.module("MyApplication", []); L’objet correspondant au module expose plusieurs méthodes, notamment Controller permettant de déclarer un contrôleur en respectant la syntaxe suivante : Le code précédent crée un module nommé MyApplication et y déclare un contrôleur nommé MyControleur et basé sur la fonction MyControleur. L’attribut ng-app, utilisé dans la vue, permet de définir quel module doit être chargé. <html ng-app="MyApplication"> ... L’attribut ng-app est utilisé ici pour charger le module MonApplication.

ramda-examples.md Ramda Examples Lift const madd3 = R.lift(R.curry(function (a, b, c) { // [1, 1, 1] // [1, 2, 1] // [1, 3, 1] // [2, 1, 1] // [2, 2, 1] // [2, 3, 1] // [3, 1, 1] // [3, 2, 1] // [3, 3, 1] console.log(arguments); return a + b + c; })); madd3([1, 2, 3], [1, 2, 3], [1]); //=> [3, 4, 5, 4, 5, 6, 5, 6, 7] composeK R.composeK(h, g, f) == R.compose(R.chain(h), R.chain(g), R.chain(f)) List Comprehension /* * Example: * Find any integer x, y, z that match the following conditions * 1. 0 < x < y < z < 10 * 2. x * x + y * y = z * z * In Python: * [(x,y,z) for x in range(1,10) for y in range(1,10) for z in range(1,10) if x < y and y < z and x * x + y * y == z * z] * >>> [(3, 4, 5)] * In Javascript with Ramda: */ var R = require('ramda'); R.pipe( R.sequence(R.of), R.filter(R.apply(function(x, y, z) { return x < y && y < z && (x * x + y * y == z * z); })) )([R.range(1, 10), R.range(1, 10), R.range(1, 10)]) // [[3, 4, 5]] Chain

Related: