www.migniot.com

Blog

Announcing JSVim 4

Feb. 10, 2016, 6:06 p.m.

JSVim 4 is now available

If you like it or are simply curious, Download the distribution and check the Roadmap .
/static/www_migniot_com/Zion/announcing_jsvim.png
  • I once wrote jsvim 1.0 in dark times of DHTML and crossbrowser.com(*)
  • Then studied hard and came to jsvim 2.0, which was mainly event messin'
  • Then came to jsvim 3.0, mimicing vim key-to-funcptr and sadly discovering impossibilites of [CTRL][V] columned selections in textareas
  • And finally produced JSVim 4.0

JSVim 4 is

Hoping to bring FSF value to your http client, S.

(*) very nice one though, more enlightening than jquery.

Plus …

Time for a ride, ARM Haskellers

Aug. 1, 2015, 10:02 a.m.

Post-edit: This piece of blog was written with Son kite - Focus playing out loud ^^

OK, After drooling down to the most humble status again while discovering (for a year now) Haskell, I decided to make Haskell my very own first-class prototyping (if not development) language.

Believe me this is quite a challenge.

  • Because you want it on every machine
  • On every machine
  • Including my phone - Chinese Android ARM
  • Including my laptop - Chromebook, ARM, debian remastered
  • Including elder GuruPlug, SheevaPlug, and younger RaspberryPis
  • And all other AMD, Intel or whatsoever based electronic-enabled turing machines - PS3, you're next :)

So for the impatient and for the help of a few, here is the main clue

  • You will face "cabal hell" (tm) - avoid it soon, and embrace cabal sandbox
  • You will face ghci inexistence on ARM - well no soluce for that one (neither for TH), but hugs is a friend
  • Meanwhile you will face the horrible "getNumberOfProcessors" issue. If you don't read japanese, those links won't help you get up fast - here are the links FTR
  • So take a deep breadth and follow Alice (and Bobby) down the rabbit hole :

Installing haskell on ARM is not a piece of cake. The right way (as of 20150801) is to (1) Have cabal and ghc in any distributed format (2) use cabal only to upgrade itself, cf $ cabal install cabal cabal-install (3) correct the package by

-- sneaky bootstrapping
cabal unpack cabal-install

-- on line 166 of ./cabal-install-1.22.6.0/cabal-install.cabal
cc-options:  -DCABAL_NO_THREADED -DHAS_GET_NUMBER_OF_PROCESSORS

End up with the usual

cabal install && ln -s ~/.cabal/bin/cabal ~/bin/cabal

And voila

Plus …

Be agile

March 27, 2015, 8:24 a.m.

Agile Manifesto:

> Our highest priority is to satisfy the customer
> through early and continuous delivery
> of valuable software.

Insufficient demonstration and daily stable usage prevents feedback

Preventing feedback prevents iteration

Agile Manifesto:

> Welcome changing requirements, even late in
> development. Agile processes harness change for
> the customer's competitive advantage.

No feature harnessing provides non sellable non-features

Agile Manifesto:

> Deliver working software frequently, from a
> couple of weeks to a couple of months, with a
> preference to the shorter timescale.

Working software is available, stable, accessible, feature-demonstrative

Agile Manifesto:

> Business people and developers must work
> together daily throughout the project.

This actually demonstrates its value give it a try

Agile Manifesto:

> Build projects around motivated individuals.
> Give them the environment and support they need,
> and trust them to get the job done.
  • Simple, fast and proven software brings motivation.
  • Demonstration of quality software brins pride.
  • Feedback gives next iteration.

Agile Manifesto:

> The most efficient and effective method of
> conveying information to and within a development
> team is face-to-face conversation.

Stop mail. Whatever of talking, calling or chatting you choose, speed is the key.

Don't break(litt.) communication by making it asynchronous

Quote[DEF]: Communication is the path [in 4 dimensions, space plus time] that a piece of information walks from its establishment to its target

Agile Manifesto:

> Working software is the primary measure of progress.

And should be considered the only achievement.

And should be backed by automatized validation of presumed features.

Agile Manifesto:

> Agile processes promote sustainable development.
> The sponsors, developers, and users should be able
> to maintain a constant pace indefinitely.

Computer science: Combinatorial Explosion, see CombinatorialExplosion states that

  • when to prove a code you need n test
  • by adding one param/config you need n * [count of possible values for the param]
  • so the number of needed tests to prove a program is exponential

As a consequence manual testing is not an option

As a consequence sustainable development comes at the price of automatic testing

"You DO want to produce software used DAILY by MORE people than your team"

Agile Manifesto:

> Continuous attention to technical excellence
> and good design enhances agility.

... Real men grew up with the MIT Coding Standards, see some MITCodingStandards.

From a coder point of view, respect is a synonym for knowledge, see EgoLessProgrammer

Agile Manifesto:

> Simplicity--the art of maximizing the amount
> of work not done--is essential.

You bet

Agile Manifesto:

> The best architectures, requirements, and designs
> emerge from self-organizing teams.

[fr] CLE = Capacite d'action Liberte d'action Economie de moyens [en] MarechalFoch principles of war

Agile Manifesto:

> At regular intervals, the team reflects on how
> to become more effective, then tunes and adjusts
> its behavior accordingly.

Empty the trashbin, YAGNI

This blog as been written in 20 mins on a cell phone, as an agile exercise/performance [while walking]

Plus …

The experiments of a geek

Jan. 31, 2015, 12:04 p.m.

The experiments of a drunken monkey

This post is about

For the impatient : [1] [2] [3]

At first I wanted to forge a legend, because the principles explained thereafter deserve a good exposure and a long annotated explanation. Let's just get to it :

After revieweing the works of Raymond Smullyan on self-replication, a long time ago I decided to implement a self replicating page.

Believe me, self-replication is this blog's important and central point.

Demonstration

Give me something to click on

Have a look at http://sling.migniot.com/Editor/Replicant_v4.html :

http://migniot.com/static/www_migniot_com/replicant_1_drag.png
  • Open it
  • Drag and drop files
  • Click save

The Replicant page is a zip-like file. Now that you opened it you both have

  • The source code of my Replicant project
  • A simple HTML document for holding zip entries
  • An HTML5 application capable of extension, notably storing and evaluating new javascript plugins
http://migniot.com/static/www_migniot_com/replicant_2_save.png

As a self-saveable file, this zip Replicant can be your everyday zip & mail tool.

Concepts

The "Replicant" has the following properties

  • It contains a static view of the (required) data
  • It is modifiable at runtime
  • It contains code to interact with the static view
  • It is serializable

Those properties allow such proof-of-concept demonstrations like the original Replicant

http://migniot.com/static/www_migniot_com/replicant_3_source.png

Generalization

Now that we have a "document application", we can imagine

http://migniot.com/static/www_migniot_com/replicant_5_editor.png
  • A self modifying diagraming application - see below

  • An excel-like sheet that produces graphs and filtering on the fly using the excellent http://d3js.org

    Which I let as an exercise for the reader [REF: ex1]

UML, a primer metapackage

Let's now move to http://sling.migniot.com/Uml/index.html

http://migniot.com/static/www_migniot_com/replicant_4_uml.png

As you may notice, this page contains UML diagrams, which is more visible in the source directly - custom tags may puzzle you if you're not familiar with the current specification.

http://migniot.com/static/www_migniot_com/replicant_7_source.png

This is the first version of http://sling.migniot.com/Uml/editor.html . This document-application "Replicant" fulfills the following needs :

  • always contain a static view of the data in the form of <uml-class /> and other tags
  • incorporate a polyfill for those custom tags for rendering
  • statically when possible, dynamically for links between classes
  • allow drag-and-drop and edition by simple text or from eclipse (see below)

So you have

  • A uml editing tool in one page
  • While still retaining the zip behaviour (remember ?)
  • Plus the source code

Notice the LGPL behaviour introduced by only such things as maths - guru meditation

Eclipse and uml diagrams on the fly

  1. Open the one-liner shortcut http://sling.migniot.com/Uml/editor.html
  2. Now click on the text icon (3rd one) and enter the name of the class on top, followed by ENTER
  3. Go in eclipse, select some attributes and functions in the outline view. Press CTRL-C
  4. Go to the browser and in the textarea, Press CTRL-V
  5. Finish by a newline with a single DOT at the end (ENTER [.])
  6. Watch the class appear
http://migniot.com/static/www_migniot_com/replicant_6_umldesign.png
  1. When attributes are of already entered type, the link is materialized
  2. Now press on the 4th icon to generate

8.1 a zip file

8.2 containing a pom.xml file

8.3 able to start a CRUD server for your model using

8.3.1 mvn clean install tomee:run

8.4 which you unzip in eclipse, run and then go to

  1. Go to http://localhost:8080/admin/ to begin entering data
http://sling.migniot.com/Uml/replicant_8_run.png
  1. And now write an export template for [REF: ex1]

Such an implementation now exist, see This article

Final point

This blog was started

Then exported to a Replicant editor document

  • Published as is to the blog address you're reading now
  • And sent to a mailing list of involved users.

For reading till the end, thank you:

We are Penguins. Resistance is futile. You will be assimilated.
 omedeto. ^^
Plus …

Haskell strikes again

Sept. 29, 2014, 7:31 a.m.

My first non-trivial code for solving efficiently project euler problem #67

  • Please note that half of the code is only IO boilerplate

  • The solution is only the maxsum function, applied to the triangle, bottom to top

    maxsum (r1:r2:rows) = maxsum ((zipWith (max) (zipWith (+) r2 r1) (zipWith (+) r2 $ tail r1)):rows)
    

Here is the full code

-- Main function
main = do
       text <- readFile "p067_triangle.txt"
       putStrLn ("Solution is "++(show $ maxsum $ reverse $ triangle text))

-- Parse a triangle to integers
triangle :: String -> [[Integer]]
triangle text = map splitints $ lines text
splitints line = map read $ words line

-- Solution
maxsum :: [[Integer]] -> Integer
maxsum [[n]] = n
maxsum (r1:r2:rows) = maxsum ((
                     zipWith (max)
                    (zipWith (+) r2 r1)
                    (zipWith (+) r2 $ tail r1)
                     ):rows)
Plus …

Haskell

April 29, 2014, 11:12 a.m.

Un langage intéressant.

Mes premiers pas en Haskell - je doute qu'un autre langage permette cette approche :

-- is the number n a prime one
isprime 1 = False
isprime n = null [i | i<-primes(floor(sqrt(fromIntegral n))), n `mod` i == 0]

-- iterate primes numbers below n
primes 1 = []
primes n = [i | i<-2:[3,5..n], isprime i]

-- main
main = putStrLn(show(primes(100)))

Le programme ci dessus produit les nombres premiers de 2 à 97, tout en semblant ne contenir aucun code impératif. A méditer.

Suite de la découverte: Une version purement fonctionnelle de factorielle.

-- Wow effect
factorial = foldl1 (*) . (`take` [1..])
main = print $ factorial 100
Plus …

Django migration

Jan. 3, 2014, 9:32 p.m.

Des années que je cherchais un bon Framework Web. Notamment après avoir testé :

  • Zope / Bluebream / Pyjamas
  • JSF / Sling / Nuxeo
  • Drupal / Joomla / Alfresco / your cms here
  • PlayFramework / Akka / GroovyOnRails

Et bien je suis heureux d'annoncer que ma quête est achevée .. J'ai migré toutes mes applications web sous Django - Succès le 04/01/2014 à 16h52 :)

Plus …

Migration story

March 5, 2013, 9:43 p.m.

Mars 2013 a eu lieu la migration des serveurs de migniot.com.

Serveurs

  • ipv6 ready
  • redondés pour la maintenance
  • derrière un frontal apache

Domaines

  • www.migniot.com le site
  • wiki.migniot.com le wiki
  • tock.migniot.com le jeu

Technologies

  • Python : les sites et la persistence objet
  • C : le frontal et sa distribution custom
  • NodeJS : le jeu de tock en ligne
  • Scala : le jeu de tarot en cours

Proudly hosted on a Sheevaplug - low power consumption.

Plus …

ℕ n'est pas à vendre

Sept. 13, 2012, 1:55 p.m.

Les nombres sont 0,1,2,3 .. 1024 .. 314157 .. et leur ensemble est infini. Que ce soit clair une fois pour toutes :

Les nombres ne sont pas à vendre

Definition

Leur definition est une pure vue de l'esprit : http://fr.wikipedia.org/wiki/Axiomes_de_Peano . Heureusement, les vues de l'esprit de ce type ne sont pas encore soumises a propriete.

Inviolabilite

Personne ne peut empecher un etre humain de penser au nombre 10 ou de compter jusqu'a 2971. A ce titre toute propriete sur ces nombres serait inapplicable. Il est a noter que cette inapplicabilite n'est pas triviale et que le cerveau est capable de memoriser un grand nombre de chiffres par coeur, http://fr.wikipedia.org/wiki/Pi#M.C3.A9morisation_de_.CF.80 . A titre d'exemple l'auteur de ce blog connait une quarantaine de decimales de E, i.e. plus qu'une calculatrice scientifique ne peut en afficher.

Precisions

Le droit - francais au moins - contient le droit d'auteur, qui definit la propriete d'une oeuvre. Une oeuvre est definie par sa reconnaissance et comme concept éthéré, potentiellement en dehors de toute manifestation physique. De bons exemples en sont :

L'oeuvre a donc avant tout une existence abstraite (cet article sous toutes ses formes corrigees constitue la meme oeuvre). Cette existence est souvent plus riche que sa forme concrete : Il est considere que le noyau Linux a de multiples formes, implementations, versions diffusees de par le monde - c'est certainement l'Oeuvre gratuite la plus repandue au monde apres les textes religieux.

Developpement

On ne peux donc pas filtrer/legiferer/arbitrer sur la representation binaire d'une oeuvre :

  • Car le droit francais interdit notamment reproduction de "tout ou partie" - sans consentement du possesseur du droit cessible de reproduction.
  • Donc la phrase "ℕ n'est pas à vendre" etant indeniablement le titre de mon oeuvre - sous cette forme, avec le symbole ensembliste ℕ - serait ma propriete
  • Donc sa representation binaire e284 9520 6e27 6573 7420 7061 7320 c3a0 2076 656e 6472 650a serait ma propriete
  • Et personne ne pourrait plus utiliser ce nombre : 5554202758898571990936119783043843276605761959547561469194

Cela devient critique lorsque le nombre est plus court. La suite d'octets representative de Apple(tm) est presente un nombre incalculable de fois sur votre disque dur sans avoir un rapport quelconque avec une certaine Firme de Cupertino.

Encore une fois Les nombres ne sont pas à vendre

Consequences

En vrac :

  1. Toute tentative de protection de la propriete intellectuelle par filtrage fort ou DPI serait une erreur de reflexion http://fr.wikipedia.org/wiki/Deep_packet_inspection#Par_les_fournisseurs_d.27acc.C3.A8s_.C3.A0_Internet
  2. Toute forme binaire d'une oeuvre n'est qu'une projection/un echantillonage de cet oeuvre dans une topologie donnee et ne peut etre consideree comme soumise a propriete sauf acceptation explicite du recepteur de la forme binaire de reconnaitre l'oeuvre - ce qui est le cas sur la plupart des services de type streaming ou le contractant reconnait qu'il s'agit de reproductions ou presentations des oeuvres originales pour lui.
  3. Toute oeuvre admet une infinite de formes binaires et leur protection est impossible
  4. Avec un echantillonage suffisamment degrade et un extrait suffisamment court, toute forme binaire est l'aggregation d'extraits de ce blog/de la traviata/<votre oeuvre protegee ou libre preferee ici>

La forme binaire est bien dissociee de l'oeuvre : La Venus de Milo est une oeuvre hors de prix dont la majorite des representations photographiques ou 3D sont (1) libres et (2) ne sont pas la Venus de Milo. Ses reproductions en materiau concret ne sont pas non plus l'oeuvre de depart. Enfin si l'original venait a disparaitre, l'oeuvre serait indeniablement vivante et ce pour des siecles.

Conclusion

La notion de propriete intellectuelle http://fr.wikipedia.org/wiki/Propri%C3%A9t%C3%A9_intellectuelle n'est pas projetable dans l'ensemble des entiers naturels. Certains diraient qu'elle deborde de l'espace des nombres entiers, voire que son coefficient de Lyapunov ne l'est pas.
Plus …

Zope Vs J2EE

April 5, 2011, 7:23 a.m.

Pourquoi Zope 3 ?

  • Zope 3 est rapide à développer et facile à maintenir
  • Zope 3 est persistant, transactionnel et clusterisable
  • Zope 3 contient une base de données objet
  • Zope 3 est leader dans les CMS

L'historique

Architecte J2EE depuis 10 ans, j'ai vu de nombreux projets risquer l'échec et exploser les budgets au titre d'une idéologie bien pensante qui s'exprime souvent comme suit :

  • La solution applicative est clusterisable et tiendra la volumétrie de votre infrastructure
  • L'architecture multi-couches sur un middle-tiers sécurisé du marché va booster votre solution applicative
  • Le leader du marché ne peut pas faillir, reposez-vous sur une solution éprouvée

Bien que d'accord avec ces arguments j'ai vu ces projets achopper sur cet écueil trop souvent oublié, l'explosion combinatoire : Au delà d'une certaine volumétrie et complexité un projet informatique n'est plus maintenable. Les meilleures intentions citées ci-dessus deviennent alors de l'over-engineering - ou un échec de gouvernance.

Zope 3

Je ne recommanderais pas autre chose que J2EE en entreprise pourtant tous les sites associatifs que j'ai recommandé en Zope 3 se portent bien et sont souvent ergonomiquement plus satisfaisants que J2EE.

Les volumétries d'utilisateurs - des milliers - supportées par Zope 3 ne valent pas le coût de dépenser plus pour déployer une architecture J2EE - dont les promesses montent au million et plus -.

De nombreuses fonctionnalités sont apportées par Zope 3 qui ne le seraient qu'au prix d'un effort exorbitant en J2EE, par exemple l'exposition du site en tant que Disque Réseau automatique.

Du concret

Le produit de blogging dont vous lisez un article a pris 2h de développement en Zope 3. Pour obtenir le même niveau de fonctionnalité en J2EE il faut :

  • Ecrire ses classes en EJB3 annotés pour aller vite
  • Configurer spring en mode transactionnel par requête
  • Se documenter sur une librairie de StructuredText et l'installer
  • Ecrire des JSP d'administrations, des JSP de consultation
  • Configurer Tomcat en WebDAV pour l'édition à distance
  • Installer un MySQL/PostgreSQL

Le temps de réalisation est d'approximativement 3 jours, sans compter la compilation et le déploiement.

Finalement

A chaque besoin sa technologie, le fail-over étant le meilleur atout de J2EE indubitablement. Par exemple voyages-sncf est en J2EE et ne supporterait probablement pas Zope 3. Pourtant le site de l'OTAN est en Zope 3 et le supporte parfaitement.

Pourtant en dessous des classes de besoins énoncées par les entreprises - des millions d'utilisateurs externes et des milliers d'utilisateurs en intranet avec de multiples connexions à des systèmes tiers, je reste impressionné et grandement promoteur de Zope 3.

Je suis Architecte J2EE et mon site est en Zope 3 :p .

Plus …