[Js] Vendre des apps JS : Solutions théoriques de vente.

  • sell

Introduction


Tour d ‘horizon rapide et théorique  de que l’on désormais  faire en 2018 avec le langage js-logo.png, et des solutions de vente .
.

Lire la suite

Publicités

[Recherche Opérationnelle] excel-easy.com , enfin un super site pour aborder le solveur Excel

excel.jpg

Introduction :


Je viens de trouver ce super site pour faire de la RO avec le solveur et être efficace sur les problèmes standard, c’est vraiment trop bien fait .

C’est en Anglais . Ils utilisent la technique de renommage par groupe, ce qui aide fortement à comprendre …

Alors, le but annexe: Résoudre un problème de ro avec Excel, puis reprogrammer le même dans un autre solveur comme Xpress ou Choco … Vérifier que l’on aboutit à la même solution optimale .

Note : ce qui est top; si on utilise une librairies de solveur dans une application WEB, c’est que la solution optimale s’actualise en temps réel à l’aide des données de la base de données, donc, sans rien faire .

Des cas  standard de RO Excel Traités, et qui fonctionnent…


 

1 SEUL objet à dispatcher aux clients en fonction du cout de transport:

https://www.excel-easy.com/examples/transportation-problem.html

Tâche des employés :

https://www.excel-easy.com/examples/assignment-problem.html

Il y a même du plus court chemin … COOL:

https://www.excel-easy.com/examples/shortest-path-problem.html

Un peu de finances , WAOU:
https://www.excel-easy.com/examples/capital-investment.html

Ouah c’est une mine d’or, trop TOP !!

Conclusion


Il y a plusieurs niveaux dans la recherche opérationnelle  :

1. ‘Etre efficace’ sur les problèmes génériques standard à l’aide des solveurs, avec des tableaux et des modèles génériques prêts et triés, que l’on dérivera légèrement, en fonction des besoins. Cela malgré un niveau théorique très faible.
2. Comprendre dans les moindres détails toute la logique mathématique sous jaçente, et savoir construire des modèles mathématiques complexes.
3. Connaitre l’optimisation non linéaire, ‘convexe’ (Quadratique, Moindres carrés…), multi-fonctions objectives, ‘non convexe’ et des notions difficiles, savoir adapter le traitement à des problèmes combinatoires complexes.

Qu’entends -t-on par ‘ être efficace ‘ ?

Utiliser une théorie, une technique reconnue ou une science, afin de générer une plus value ou un intérêt réel dans un projet concret, menant à un succès, et non à une défaite. La plupart du temps, dans le monde des entreprises privées, l’intérêt correspond à une plus value financière, ou à un gain avantageux face aux concurrents, grâce à l’agilité de l’action sur les phénomènes combinatoires, laissant les concurrents dans le flou ou dans l’erreur.

Autres liens de RO sous Excel :

51026632-horaire-vecteur-icône-le-style-est-bicolor-plat-symbole-cerclé-les-couleurs-bleu-et-gris-angles-de-fond-b.jpg

Optimisation horaires de personnel (Scheduler):
https://support.office.com/en-gb/article/using-solver-to-schedule-your-workforce-7ae8dd69-7582-4f41-83f1-ea3543398b46
https://it.toolbox.com/blogs/maryannrichardson/excel-quick-tip-how-to-use-excels-solver-tool-to-schedule-employees-113014

Hand With Money Coin Investment Project Business Icon

Optimisation de portefeuille et investissement:
Des fichiers Excels avec des exemples :
https://www.solver.com/optimization-solutions-investment-and-portfolio-management-examples

passenger-with-baggage-filled.png

Le problème du voyageur de commerce
https://www.researchgate.net/publication/306358450_Solving_the_Traveling_Salesman_Problem_with_the_Alldifferent_Constraint_in_MS_Excel
http://blog.excelmasterseries.com/2014/05/solving-traveling-salesman-problem-with.html

[www.openode.io] Enfin, un bon hébergeur pour publier ULTRA facilement des applications NODE.JS

nodeeeeee

Introduction


Avant 2018, on pouvait créer nos applications NODE.JS assez facilement en LOCAL .

Mais lorsque venait le moment de publier notre application en ligne, c’était assez la galère,il fallait soit acheter un serveur dédié assez cher, soit effectuer des méthodes complexes avec cloudant ou autres Aws pour arriver à placer son app en ligne .

Openode.io : Une seule commande, cela fonctionne de suite !


Depuis 2018, openode.io est arrivé, et enfin, ça marche et c’est facile !! Depuis le temps qu’on attendait ça !!

On s’inscrit sur openode.io, on a de suite un environnement prêt, suffit juste de lui donner un nom, c’est vraiment TROP SIMPLE ! Cette société serait basée au Texas.

En local, dans notre pc, on se rends dans le répertoire de notre site node.js .

Ensuite, on télécharge avec GIT leur programme de gestion hyper simple qui nous donne quelques commandes supplémentaires dans CMD(La ligne de commande Windows).

Une fois qu’on a installé leur programme, il suffit de taper dans notre répertoire :

openode deploy

pour envoyer l’intégralité de notre site en ligne, ça marche de suite !

Voici un exemple de moi, qui envoie mon application node.js en ligne :

deploy.jpg

Le programme deploy surveille que notre fichier package.json contient de bonnes versions de librairies :

Exemple :

{
"name": "socket-chat-example",
"version": "0.0.1",
"description": "my first socket.io app",
"dependencies": {
"express": "^4.15.2",
"mysql": "^2.16.0",
"mongoose": "^5.2.6",
"morgan": "^1.1.1"

},
"scripts": {
"start": "node index.js"
}
}

Ici , je charge la lib mongoose pour pouvoir me connecter à un base de données MONGODB et la lib mysql pour pouvoir aussi me connecter à une base de données MYSQL, tout cela en JS (le langage le plus coool et flexiiible!).

Et oui, cela veut dire qu’on peut désormais coder tout en JS, aborder des bdd relationnelles quand même, et déployer de façon ultra simple, c’est carrément TROP COOL !

Voici les 2 autres fichiers de mon app, just pour info (On voit que j’exécute des requêtes SQL dans le Javascript …)  :

index.js :


 var app = require('express')();
 var http = require('http').Server(app);
 var port = process.env.PORT || 3000;
 var mongoose = require('mongoose');
 var mysql = require('mysql');
 var morgan = require('morgan'); // log requests to the console (express4)</code>

 var connection = mysql.createConnection({
     host: 'sql.free.fr',
     user: 'nicolas.huleux',
     password: 'xxxxxxx',
     database: 'nicolas_huleux'
 });

 connection.connect(function(err) {
     // connected! (unless `err` is set)

 });

 connection.query('SELECT * from acteurs', function(err, rows, fields) {
     if (!err)
         console.log('The solution is: ', rows);
     else
         console.log('Error while performing Query.');
 });

 app.get('/', function(req, res) {
     res.sendFile(__dirname + '/index.html');
 });

 http.listen(port, function() {
     console.log('listening on *:' + port);
 });

Et là, index.html, un formulaire bateau, pas encore fonctionnel

<!doctype html>
<html>
  <head>
    <title>form</title>

  </head>
  <body>
    <ul id="messages"></ul>
    <form action="">
      <input id="m" autocomplete="off" /><button>Send</button>
    </form>
    <script src="https://cdn.socket.io/socket.io-1.2.0.js"></script>
    <script src="https://code.jquery.com/jquery-1.11.1.js"></script>
	
	 <form action="action_page.php">
		  <div class="imgcontainer">
			<img src="img_avatar2.png" alt="Avatar" class="avatar">
		  </div>

		  <div class="container">
			<label for="uname"><b>Username</b></label>
			<input type="text" placeholder="Enter Username" name="uname" required>

			<label for="psw"><b>Password</b></label>
			<input type="password" placeholder="Enter Password" name="psw" required>

			<button type="submit">Login</button>
			<label>
			  <input type="checkbox" checked="checked" name="remember"> Remember me
			</label>
		  </div>

		  <div class="container" style="background-color:#f1f1f1">
			<button type="button" class="cancelbtn">Cancel</button>
			<span class="psw">Forgot <a href="#">password?</a></span>
		  </div>
		</form> 

  </body>
</html>

Conclusion :
On peut désormais coder tout en NODE.JS et publier des démos sur son blog super facilement, sans acheter une serveur dédié, c’est TROP BIEN . Si on veut, plus besoin d’utiliser PHP en back end il existe des tas de libs qui permette à node de se connecter aux bases relationnelles, y compris sans faire de SQL avec par exemple KNEX.JS (https://stackoverflow.com/questions/5818312/mysql-with-node-js) :

KNEX.JS

KnexJs can be used as an SQL query builder in both Node.JS and the browser. I find it easy to use. Let try it – Knex.js

$ npm install knex--save# Then add one of the following(adding a--save) flag:
  $ npm install pg
$ npm install sqlite3
$ npm install mysql
$ npm install mysql2
$ npm install mariasql
$ npm install strong - oracle
$ npm install oracle
$ npm install mssql


var knex = require('knex')({
    client: 'mysql',
    connection: {
        host: '127.0.0.1',
        user: 'your_database_user',
        password: 'your_database_password',
        database: 'myapp_test'
    }
});

You can use it like this

knex.select('*').from('users')

or

knex('users').where({
    first_name: 'Test',
    last_name: 'User'
}).select('id')

[Js] Librairies de Maths en Js

images.jpg

Introduction


Des librairies de maths en Js pour calculer des intégrales, des quartiles de séries, des stats diverses etc ..

Super pour des applications WEB , après, il reste à déterminer si il vaut mieux une lib node.js pour des calculs sur d’imposantes quantités de données , ou plutôt une lib front-end, rapide et agile… Si on calcule dans le Back end, il faut utiliser souvent les ‘web workers’ non bloquants.

On le sait en fonction fonction de la nature de notre application.

Notions Actuelles


En ces temps modernes, parfois cruels et génériques avec l’avènement des CMS et des shopify qui rendent inutile ces types de développement de ‘magasins’ , la valeur ajoutée d’une application WEB provient donc désormais, entre autre, de la maitrise de librairies de MATHEMATIQUES , ainsi que de celles de recherche opérationnelle (C++, Java, et donc la JS…).

On peut qualifier cela de « Data Scientisme », lorsque le niveau devient appréciable, et que l’on traite aussi bien des datas provenant de db relationnelles, que du big data clusterisé, ou de fichiers concrets, avec hadoop par exemple.

Mais on peut déjà se faire plaisir avec de simples maths de collège, qui recellent ,selon ,moi déjà pas mal d’infos décisionnelles ( médianes, moyennes, pourcentages, moyennes pondérées, effectifs cumulés…).

Les indicateurs fixés sur des processus métiers sont également généralement des formules TRES SIMPLES de niveau collège, pourtant, ils sont d’une importance critique, et ils doivent être actualisés en temps réel.

Ensuite, on peut embrayer sur le Lycée avec, par exemple, les probabilités, épreuve de Bernoulli, la loi Binomiale,la loi de probabilité … Qui permettent de tirer de bonnes conclusions lorsqu’elles sont appliquées à des Data, voir même à modifier automatiquement le comportement d’une application, en conséquence ( Et bien oui… Du Machine Learning ).

Pour ensuite arriver aux solveurs de recherche opérationnelle (Maths du supérieur ) .

L’intérêt de programmer un calcul de recherche opérationnel en DUR pourrait être d’éviter les erreurs du solveur Excel … A méditer … Et surtout vérifier le fonctionnement de cette lib en JS !
EDIT Aout 2018: L’intérêt est surtout la mise à jour en TEMPS REEL du PL à partir de données de base de donnée, et donc des résultats de la fonction objectif , c’est carrément un avantage par rapport à Excel !!

Sans oublier le portage en Js de Coq :
https://github.com/ejgallego/jscoq , qui permettrait de faire des prédicats en JS ( à regarder…urgent … évidemment), les prédicats servant à déterminer formellement si une supposition est vraie ou pas, à l’aide de formules pré-déterminées, on peut par exemple déterminer formellement le coupable entre 3 suspects en convertissant les informations données sous formes de formules génériques « restreintes aux booléens », puis en leur appliquant les règles fixes et établies de logique propositionnelle .. Bien sur, dans le monde de l’industrie, on ne parle pas de suspects, mais de résistance prédictionnelle à l’usure … etc …

Conclusion


Conclusion : La valeur ajoutée des applications modernes réside souvent dans l’utilisation efficace de librairies de mathématiques, et de connaissance peu abordables au commun des mortels, ou qui n’intéressent tout simplement pas le monde, comme par exemple la recherche opérationnelle ou la logique propositionnelle.

Cependant, cela n’exclut pas les idées originales existant encore dans un univers qui se restreint, et le fait qu’il faut peut être encore des gens pour installer des CMS ou des SHOPIFY. de plus, une bonne maitrise des styles CSS peut encore jouer.

On en déduit également que le pur travail de développeur est amené à se complexifier, et les postes à se raréfier ( Réflexion banale, car réelle depuis l’avènement des cms depuis 2006). Les développeurs sont donc condamnés à emmagasiner plus de compétences variées comme la comptabilité ou la RO par exemple, et à opter pour un profil bien plus générique ( Ce qui est bien sur le cas des formations Ingénieur). Il y a également des choses à faire avec Hadoop dans l’analyse de fichiers.

Quand on voit la recherche opérationnelle, avec Xpress ou Choco ( les solveurs), ce sont vraiment des outils fantastiques qu’il faut exploiter dans des applications.

Liens :


Une liste :

https://github.com/bebraw/jswiki/wiki/Math-libraries

 

Des fonctions pas mal pour donner min, max, variance de tableaux de valeurs :

http://pseudosavant.com/blog/2010/12/22/javascript-statistics-and-math-library/

 

Pour les probabilités, Loi Binomiale …

https://www.javascriptbank.com/vitaliy-math-javascript-library-demo.html

 

 Une lib avec du Bernoulli et du Poisson , du min et du max pour des arrays, elle a l’air cool, je vais commencer avec celle là ! :
https://simplestatistics.org/docs/

Même pas besoin de l’installer, avec le CDN , on l’appelle :

Puis ensuite, on l’utilise de SUITE dans une balise script , dans index.html :
console.log(ss.min([-3, 0, 3]));
console.log(ss.sum([-3, 0, 3]));
C’est le tooop , y’a plein de fonction différentes de STATS ça déchiiiiire (De la moyenne, de la dispersion, de la regression linéaire ! …)!! Exemple : le Quantile

 

Une librairie pour faire de la regression linéaire :

https://github.com/Tom-Alexander/regression-js

 

Une grosse lib connue :
https://jstat.github.io/all.html

 

Une lib qui convertit des nombres en fractions
http://mathjs.org/docs/datatypes/fractions.html

 

Une lib qui permettrait d’écrire des formules directement :

https://www.mathjax.org/#docs

[PouchDb][Cloudant] Gérer les droits utilisateurs (Post évolutif.).

monetablissement

cloudantpouch

Introduction


Les PME, de nos jours, sont intéressées par des applications multi utilisateurs .

Bien sur, il ne s’agit pas que de la présence du fameux ‘log in – password’ comme disent les anglophones, mais il faut aussi pouvoir gérer avec une granularité très fine les droits dans les petits recoins de l’application .

Ce post est évolutif, puisque je découvre en temps réel les fonctionnalités liés au login.

Pour l’instant, je n’active pas SSL (note : Les mots de passe des utilisateurs sont automatiquement haschés par cloudant, comme couchDb le fait aussi.).

Il faut ajouter le plug in pouchDb Authentication


Lire la suite

[Chart.js][Cloudant][Pouchdb] MonEtablissement : générer un graphe en barre en 15 min avec pour source le Map Reduce

monetablissement

charts

Introduction


Suite au post précédent, j’ai donc récupéré le nombre d’établissements français par régions, à l’aide d’un traitement MAP REDUCE.

Maintenant, ben, j’ai envie de visualiser cela dans un graphique en barre, très basique.

Comment faire ?


D’abord, j’ajoute la lib chart.js à mon fichier index.html  :

	<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.4.0/Chart.min.js"></script>

On la récupère directement en ligne, c’est très rapide et toujours un bon plan pour faire des maquettes d’applications rapides !

Ensuite, je suis la doc en ligne de chart.js,

J’ajoute une DIV dans mon application ou va se générer le chart  :

Lire la suite

[Pouchdb][Cloudant][Big data] MonEtablissement : Faire un premier Map Reduce en 10 minutes dans l’app

monetablissement.jpg

pouch                    cloudant

Introduction


On fait un premier map reduce qui a pour but simple d’afficher le nombre d’établissements par régions.

Tester l’application updatée ici :


http://nicolas.huleux.free.fr/pouchdb3/

Comment faire ?


Deux solutions, soit on crée la requête de création de Map Reduce avec JS, qui ensuite la crée dans Cloudant , soit on crée directement la requête sur cloudant .

Dans les deux cas, on va ensuite quérir la requête map reduce dans notre front end JS, avec l’api pouchDb.

Il faut également utiliser la lib suivante : pouchdb.find.js

Je choisis de créer ma requête Map Reduce directement dans l’interface Cloudant à cet endroit (Design Document/ Create view ) :

etab.jpg

Lire la suite

#liste