LINUX & OPEN SOURCE

29 juillet 2022

Ciwiki 3.0.1 est "relaché" sur sourceforge.

Après une longue période de repos (6 ans), j'ai repris les mises à jour de Ciwiki. Ciwiki est un petit wiki à usage personnel et qui est dérivé de didiwiki.

Il est actuellement à la version 3.0.1 avec plusieurs nouvelles fonctionalités que j'ai ajouté, dont:

  • La création une zone texte chiffrée à l'aide du clé symétique pour y écrire des informations confidentielles.
  • La possibilité de modfier l'apparence du Wiki en éditant les fichier html de l'entête, des forulaires...
  • La liste des pages wiki classées soit par date de révision, soit par ordre alphabétique.
  • La recherche d'une expression soit dans toutes les pages du wiki, soit dans les noms des pages du wiki.

Le code source est ici : https://sourceforge.net/projects/ciwiki/

Ciwiki intègre un serveur web (donc pas besoin d'Apache, de nginx...). Il convertit directement en interne le langage Markdown en html (donc pas besoin de PHP, perl...). Il socke les pages du wiki au format texte (donc pas de MySQL... ).  Il est écrit en C pour qu'il soit à la fois compact, peu exigeant en mémoire vive et rapide. Ainsi il fonctionne parfaitement sur un Raspberry Pi B+ à 700MHz et 512Mo de RAM.

La contre-partie est un wiki au design plutôt minimaliste, mais bien adapté à un usage personnel.

 

Posté par InPhilly à 21:11 - Permalien [#]


26 juillet 2022

Toujours et encore de nouveaux langages de programmation.

Il y a régulièrement un nouveau langage de programmation qui apparaît. Si on s'en tient aux langages "majeurs", en voici la liste certainement incomplète :

  • ShortCode en 1949.
  • AutoCode en 1952.
  • Fortran en 1957.
  • Algol en 1958.
  • Lisp en 1958.
  • Cobol en 1959.
  • Basic en 1964.
  • Pascal en 1970.
  • SmallTalk en 1972.
  • C en 1972.
  • SQL en 1972.
  • ADA en 1980.
  • C++ en 1983.
  • Objective-C en 1983.
  • Perl en 1987.
  • Haskell en 1990.
  • Python 1991.
  • Visual Basic 1991.
  • Ruby en 1993.
  • Java en 1995.
  • PHP en 1995.
  • Javascript en 1995.
  • C# en 2000.
  • Scala 2003.
  • Groovy en 2003.
  • Go 2009.
  • Swift en 2014.

Sans oublier dans le désordre: L'assembleur qui est dépendant du processeur utilisé, le bash, Lua, le Rust, Ocalm, les macrolangages des tableurs, Wolfram language (de Mathematica), le R (spécifique au maths et stats), le Forth (langage oublié), Prolog, Erlang, Vala/Genie (pour les Gobjects), Delphie, Boo, D, Eiffel, Node.js, Scratch (dédié aux enfants) et j'en passe beaucoup d'autres! (Le html et le css ne sont pas des langages de programmation, mais il n'empêche qu'il faut apprendre les balises, les mots clés, la structure du code.).

Grosso modo, on peut dire que chaque langage est apparu pour compenser les défauts du précédents.

Personnellement, j'en ai appris quelques un en autodidacte en commançant par le langage très rudimentaire de ma Ti-57, le basic du ZX80, le Pascal, le C, C++, le python, le JavaScript. En école d'ingénieur, c'était le Fortan et le Cobol, sans oublier le Basic.

Après un fort enthousiasme pour Java et Python, je suis retourné au C. Ce vieux langage de 1972 créé par Dennis Ritchie et Kenneth Thompson.

Le C a trois défauts : Il ne gère pas la mémoire, l'allocation de la mémoire et la désallocation sont laissés au bon soin de développeur. Il utilise des pointeurs pour accéder à la mémoire. Il est exclusivement procédurale.

Les pointeurs, l'allocation/désallocation de la mémoire sont une imporantes sources d'erreurs. Sa caractèristique purement procédurale ne facilite pas le réemploi de routines vers d'autres programmes et le découpage de gros programme. Le C++ a permis de résoudre une partie du problème sans pour autant simplifier le probème de la gestion de la mémoire. Le Java a résolu l'ensemble des probèmes mais...

Le Java est bien, il est orienté objet et il gère la mémoire mais il nécessite un runtime (JRE) et il ne permet pas une optimisation aussi poussée que le C/C++.

Je me suis orienté vers la programmation des microcontrôleurs. La mémoire disponible est toujours limitée de quelques Ko jusqu'à une centaine de Ko, la puissance de l'unité de calcul est ausi très limitée de 8bits @ 1Mhz jusqu'à 32bits @ 480MHz. Sachant que les microcontrôleurs les moins coûteux procurent 32Ko de Flash, 2Ko de RAM et une horloge à 20MHz, voilà pourquoi je suis revenu au C.

J'ai aussi des programmes plus conséquences qui tournent sous Linux, et qui sont écrits en C comme Ciwiki qui est un wiki perso et ArtZyn qui fournit un interface graphique entre le clavier d'Arturia MiniLab MKII et le softsynth ZynAddSubFx, plus des fonctionnalités de séquenceurs et boîte à rythme.

https://sourceforge.net/projects/ciwiki/

et https://sourceforge.net/projects/artzyn/  .

La programmation en C ne présente pas de gros inconvénients même en reprenant le codage d'un logiciel qui je n'avais plus fait évoluer après plus de 6 ans (Ciwiki 2.05 libéré en février 2016 et modifé en juillet 2022 pour donner Ciwiki 2.06). Le code était suffisamment documenté pour me permettre de me replonger dedans après plusieurs années. Et j'en arrive à la conclusion qu'il est important de bien documenter (et même à l'excés) le code source. Les routines qui peuvent sembler triviales au moment du codage ne le seront plus après plusieurs années. Il faut utiliser des noms de variables et de fonctions qui sont explicites, ne pas oublier d'indiquer le domaine de validé des variables.

Le débogage d'un programme en C :

1°) La solution classique est de monitorer le contenu des variables interessantes (contenu modifié par le programme).

J'utilise beaucoup : if( debug ) fprintf(stderr, "Line:%i, var=%s\n", __LINE__, variable_à_observer ); Si la variable est utiliser dans plusieurs fichiers c différents, j'ajoute __FILE__ : if( debug ) fprintf(stderr, "File:%s Line:%i, var=%s\n", __FILE__, __LINE__, variable_à_observer );

Ici debug est une variable globale qui vaut 0 et qui est passée à 1 en mettant un argument (comme -d) dans la ligne de commande. La fonction getopt() est fort pratique pour récuper les arguments passés en ligne de commande:

while( ( option = getopt_long ( argc, argv, "...." ) ) != -1 ) { switch( option ) { case 'd' : debug=1; break; ... } }

2°) gdb est le débugger classique en ligne de commande (pas toujours facile à utiliser),
ddd et Nemiver sontt des versions graphiques plus intruitives et plus faciles à utiliser.

3°) valgrind est super pour détecter les fuites mémoires (un free() oublié par exemple).

4°) CppCheck analyse le code source pour détecter certaines erreurs comme les variables qui n'ont pas été initialisé, le dépassement d'une table... CppCheck effectue une vérification statique du code source, il vient en complément aux options -Wall -Wextra de gcc.

Posté par InPhilly à 10:02 - Permalien [#]

19 juillet 2015

Ciwiki 2.0.4 est disponible sur github

La version de ciwiki passe à 2.0.4.

De nouvelles fonctionnalitées ont été ajoutées:

  • Des modèles (jusqu'à 5 qu'il faut créer soit même).
  • Des images flottantes.
  • La possibilité de télécharger un fichier (image, html, txt, doc, xls, zip, pdf) sur le serveur.
  • La possibilité de técharger un fichier sur l'ordinateur client.

Le dépôt est sur github. D'habitude, j'utilise sourceforge; mais comme il est en rideau depuis 2 jours... Je suis passé à Github .

https://github.com/RhoneAlpes/ciwiki

Posté par InPhilly à 16:48 - Permalien [#]

05 juin 2015

Pompe pas cher = moteur chinois = bobinage aluminium = problème

On trouve des pompes de surface moins chères que les autres. C'est le cas d'une pompe que j'ai payé un peu moins de 40€ dans une enseigne de bricolage. La pompe a un peu plus de 2 ans, donc n'est plus garantie, et elle a peu fonctionné (une centaine d'heures). Elle est tombée en panne subitement, le moteur refusant de tourner en émettant un grognement.

Un moteur asynchrone monophasé (le moteur usuel des pompes de jardin) se met à grogner en refusant de tourner pour 3 raisons:

- Il est bloqué. Un corps étranger a été aspiré et bloque l'impulseur (la roue) de la pompe. Il suffit de faire tourner la pompe à la main pour la débloquer (après avoir débranché la prise!).

- Le condensateur de démarrage a claqué. Il suffit de vérifier l'état du condensateur visuellement, s'il a gonflé ou noirci, il est certainement mal en point. Il suffit de le remplacer.

- Un bobinage est coupé. Il faut débrancher l'alimentation, déconnecter le condensateur, et vérifier à l'ohmètre les deux bobinages.

 

Je m'attendais à ce que la pompe soit bloquée à cause de sable fin malgres la crépine, ou que le condensateur ait rendu l'âme, ce dernier problème étant assez fréquent.

Et bien non, la pompe bien que peu solicité avait perdu un de ses bobinages, le bobinage de démarrage!  J'ai trouvé surprenant que ce bobinage se coupe sans raison visible.

C'est au démontage que j'ai trouvé l'explication: Le bobinage est en aluminium au lieu d'être en cuivre. Le fil d'aluminium s'était corrodé exactement à la jonction du fil de cuivre qui l'alimente, et il s'était coupé.

Le moteur n'est pas absolument étanche, les deux flasques avant et arrière du moteur s'emboitent, elles sont bien ajustées, mais sans joint d'étanchéité. Le peu d'humidité qui a réussi à entrer dans le moteur en 2 ans a provoqué la corrosion du fil d'aluminium, là où il était dénudé, au contact du fil de cuivre. Le cuivre et l'aluminium formant une pile, la corrosion du fil d'aluminium a été rapide.

 

J'ai réussi à réparer le moteur en rétablissant la connection (une simple épissure entre le fil d'alu et le fil de cuivre car il n'est pas possible de les souder ensemble). J'ai isolé ma réparation et mis une bonne dose de vernis pour la protéger de l'humidité. Les flasques ont été enduits de graisse épaisse pour les étanchéifier.  La pompe fonctionne de nouveau... pour combien de temps?

 

Moteur chinois pas cher!

Un moteur chinois pas cher: un bobinage en fil d'aluminium + une construction pas assez étanche = un moteur qui ne va pas durer!

 

 

 

 

Posté par InPhilly à 23:18 - Permalien [#]

10 avril 2015

Le mode examen des calculatrices sera obligatoire pour les examens et concours à partir de 2018

Á partir du 1er janvier 2018, les calculatrices à mémoire alphanumérique devront disposer d'un mode examen (Voir Bulletin officiel http://www.education.gouv.fr/pid25535/bulletin_officiel.html?cid_bo=87354 ).
Le mode examen bloque temporairement l'accés à la mémoire de la calculatrice, ou l'efface. Le mode examen n'est pas réversible pendant la durée de l'épreuve (connection par câble à un ordinateur ou à une autre calculatrice pour pouvoir annuler le mode examen), et un signal lumineux clignotant indique au surveillant que la calculatrice est en mode examen.

Avec la montée en puissance des calculatrices, et en particulier de leurs capacités de stockage de l'information, il était prévisible que le gouvernement finirait par réagir en pondant quelque chose.

1 - Est-ce que cette nouvelle obligation va réduire les inégalités entre les élèves/étudiants qui peuvent se payer une calculatrice haut de gamme dernier modèle à XXX Mo mémoire flash, et ceux qui doivent se contenter d'une calculatrice plus limitée?

NON, ÉVIDEMMENT! La led et le verrouillage de la mémoire sont contrôlés par logiciel, donc il suffit de bidouiller l'OS de la calculatrice pour simuler le mode examen: La led clignote et la mémoire reste accessible. Á partir du moment où le constructeur prévoit la possiblilité de flasher un nouvel OS pour une mise à jour. Un hacker arrivera toujours à contourner les protections et à intégrer de nouvelles fonctionnalités à un OS. Internet se chargera de diffuser l'exploit en un rien de temps.

2 - Est-ce que stocker des Mo de cours au format pdf ou texte dans sa calculatrice peut aider le jour de l'examen ou du concours?

C'EST PEU PROBABLE! Chercher des informations dans une calculatrice est peu pratique et prend du temps. En plus, l'écran de petite taille ne facilite pas la recherche. Et surtout à quoi bon chercher des formules ou définitions si on ne les a pas assimilées? Les exercices des examens sont basés sur l'analyse et compréhension du problème, puis le choix et l'utilisation de la ou des bonnes formules. Et finalement, lire et comprendre un cours qui s'affiche sur un écran minuscule ne peut que faire perdre beaucoup de temps au candidat.

 

Pour conclure, en tant qu'enseignant, je doute que cette nouvelle directive soit d'un grand intérêt pour l'élève ou l'étudiant. Par contre, les calculatrices d'occasion (Ti 89t, Graph 100+ et autres) ne trouveront plus preneurs, voilà une bonne affaire pour les constructeurs.

 

 

 

 

 

 

 

 

 

Posté par InPhilly à 19:04 - - Permalien [#]


17 mars 2015

Gandi.net hors service pendant plus de 7h!!!!

23h environ , alors que j'avais besoin de mettre à jour la redirection de mon site. Impossible d'accéder à Gandi.net pour mettre à jour la redirection.   En passant par http://www.isitdownrightnow.com/gandi.net.html , j'ai découvert que le site était "DOWN for everyone" pendant 7h31!!!!  Il va être minuit dans une vintaine de minutes, et je ne vais pas passer ma nuit à attendre qu'ils réparent.

 

Gandi - 11_16_57 PM

 

Finalement, mercredi à 6h du mat, j'ai pu enfin mettre à jour mon DNS. D'après la page du status de Gandi, le service est revenu à la normal à 0h31. Un service qui est resté inaccessible plus de 8h!

 

Posté par InPhilly à 23:48 - Permalien [#]

07 mars 2015

Amélioration de Ciwiki

Ciwiki le serveur de pages wiki passe à la version 2.0.3. Il est maintenant en mesure de servir des pages web stockés au format html , en plus des pages wiki utilisant un langage de mise en forme simple (markdown) qui est sa fonction première.

La création des pages en html permet une mise en forme plus sophistiquée, donnant un visuel plus accrocheur. Par contre, la réalisation des pages en html est longue.

Le wiki utilise le markdown. Ce qui permet d'écrire simplement et rapidement les pages en texte simple, avec une mise en forme facile à utiliser. Le wiki se met à jour sans difficulté à l'aide d'un smartphone ou d'une tablette, en itinérant. Le wiki est idéalement collaboratif; mais si nécessaire, Ciwiki permet de restreindre la création et mise à jour des pages à des utilisateurs autorisés (restriction par login). Ciwiki permet même de restreinde la consultation de toute ou partie d'une page par la balise {{private}}.

Ciwiki 2.0.3 installé sur un Raspberry Pi B+ peut être testé ici:     wiki.jpredonnet.fr

ou par ce lien si le précédent ne marche pas: http://inphilly.dyn.dhs.org

 

 

 

Posté par InPhilly à 12:09 - Permalien [#]

24 février 2015

Un serveur de page Wiki perso à la maison.

Un mini-serveur basé sur un Raspberry Pi et le logiciel Ciwiki. Il est connecté sur ma Livebox.

Á essayer ici http://wiki.jpredonnet.fr.

Posté par InPhilly à 17:16 - Permalien [#]

24 octobre 2013

Je t'espionne, tu m'espionnes par la barbichette. Le premier qui dévoilera un secret aura une tapette!

Et les histoires d'espionnage continuent... Le téléphone portable d'Angela et de hauts dirigeants seraient espionnés? Á croire qu'elle et qu'ils utiliseraient un banal téléphone portable pour communiquer des informations sensibles? Et les téléphones sécurisés alors? Hum... tout cela semble invraisemblable.

Tu m'espionnes, je t'espionne par la barbichette. Le premier qui dévoilera un secret de polichinelle aura une tapette!

 

Posté par InPhilly à 23:52 - - Permalien [#]

Equilibrium un petit programme pour les étudiants en chimie?

J'ai mis sur sourceforge un programme que j'avais écrit il y a 6 ans pour équilibrer les réactions chimiques et calculer les bilans matières. Je l'ai retrouvé par hasard sur mon disque dur et après l'avoir testé de nouveau et corrigé une dizaine de bugs, je me suis dit qu'il pourrait intéresser un étudiant en chimie qui aime coder en python. J'ai même ajouté dans sa dernière mouture une base de donnée thermodynamique de 200 espèces chimiques, et la possibilité de calculer l'enthalpie de réaction.

Alors pour ceux que cela intéresse, voici le lien vers la code source et les fonctionnalité du programme:

Le lien vers la source

  • Vérifie la validité des molécules à partir de la règle de l'octet, du duet, de la valence des éléments.
  • Vérifie si l'équation est équilibrée et l'équilibre automatiquement.
  • Recherche les enthalpies de formations des reactifs et des produits dans sa base de donnée.
  • Calcule l'enthalpie de la réaction
  • Affiche la réaction équilibré avec les enthalpies, les masses molaires, les masses des réactifs et produits.
  • Permet de calculer la quantité des produits à partir des quantités de réactifs (détermine le réactif limitant).
  • Permet de calculer la quantité de réactif à partir de la quantité d'un produit.
  • Donne la formule semi-developpée du molécule organique à partir de son nom (suivant la nomenclature de l'IUPAC).

Le programme est loin d'être parfait:

- Il lui arrive de considérer comme non valide une molécule qui l'est. Il suffit alors de valider manuellement et le programme continue son déroulement.

- Il ne connait l'enthalpie de formation que d'environ 200 substances chimiques. Quand l'enthalpie d'un des réactifs ou produits n'est pas connue, il ne peut pas calculer l'enthalpie de réaction. (il est possible de compléter la base de données qui est inclue dans le code).

- Il est encore limité dans l'interprétation du nom d'une molécule en formule semi-développée.

 Á vous de jouer si cela vous intéresse...

Posté par InPhilly à 20:40 - - Permalien [#]