Tar and gzip

Le format TAR

0

Le format TAR

Pourquoi je l’utilise? Car c’est un format libre, ce qui garantit l’interopérabilité. Cela est important car cela me permet d’avoir toujours un logiciel pour faire et lire l’archive, sans license ou redevance. Cela permet d’encoder un tar sous Windows, Linux, Mac. Le faire ma propre lib pour le lire (donc réduire la taille du code car je limite les fonctionnalités à ce que j’ai besoin).

Tar and gzip

Tar and gzip

Cela me permet de découplé le format de stockage et la compression en elle même. Utiliser le format Tar avec gzip, zlib ou autre.

Comment est fait un Tar?

Vous avez les données, le contenu des fichiers. Et les métadonnées, nom, chemin, chmod, utilisateur, groupe, date de creation… Le format Tar tar fonctionne par bloque, les trous entre les bloques sont remplit par des 0 binaires. Le format est orienté stockage sur bande, il date de 1979 (normalisation 1988) mais eu des revisions entre temps.

Le fait de ne pas faire une bête sérialisation peu être gênant pour les systèmes de compression car il y as un trou de X 0 binaire. Cela rajoute du bruit, ce qui est problématique pour optimiser la compression. Si en plus l’on rajoute le faite que les entier sont stocké en chaine, ce qui réduit encore le ratio de compression comparé au binaire (voir: Compression et Binary dans le wiki de CatchChallenger). Cela réduit aussi les performances de l’encodeur et décodeur Tar de travailler en chaine et non pas en binaire (sans parler des limitations de la longueur des nombres représentés).

Un format mieux étudié pourrai avoir une taille bien inférieur sans compression et un meilleur ratio de compression.

Supprimer des meta données serai une bonne idée. Par exemple dans mon décompresseur je ne prends en compte QUE le fichier et son nom et j’ignore une grande partie et méta données: chmod, utilisateur, groupe, date de creation…

Conclusion

Je vais continuer à utiliser Tar dans le cadre de mes logiciels pour faciliter la création de plugin pour Ultracopier/Supercopier et pour l’intégration facile coté serveur dédié (99% de unix) pour CatchChallenger via un mirroir http (car pour le self hosting il y as déjà un rsync simplifié qui rends toute utilisation de Tar inutile).

Faire mon propre format n’est pas un probléme, le probléme serai de faire/maintenir et distribuer l’encodeur et le décodeur pour ce format.

Révolution dans le cinema

Bonjour,

Je souhaite vous toucher 2 mots sur l’évolution du cinema dans les prochaines années.

Quel est le meilleur moyen de réaliser un film? Lire un script, vous imaginer le film, enregistrer votre représentation.

En intelligence artificiel les modèles génératifs sont là pour cela. Il permet de tout faire, sans moyen, juste avec de l’imagination. Ce qui coupe fortement les couts de production, et ce qui vas tout changer dans l’industrie du cinema. Mais particulièrement dans l’industrie des films pour adultes (tabou de société).

Je laisse juste cette note publique pour en rire ou dire que j’avais raison dans quelques années.

Les loies anti-piratage

Bonjour,

Je suis acteur dans le copyright comme dans le copyleft. Laisser moi vous faire imaginer quelques situations:

  • Les vendeurs de roses dans la rue porte plainte contre les sites de rencontre en ligne (car il ne vendent plus à cause d’eux). Il estime qu’il y a un vendeur de rose par rue, avec le nombre de rue, il estime que les sites de rencontre en ligne leur doivent 300 millions d’euro. Cela est ridicule, surtout que après les sites de rencontre peuvent demander des dommages (coupure des sites, images et réputation). Et cela sans chercher a travailler ensemble.
  • Si les intermédiaires techniques peuvent couper le contenu qu’il héberge, sans jugement, les sites de torrent peuvent/doivent demander la coupure des sites d’holywood. En cas de réponse négative il ne sont pas tenu de réagir. Pourquoi holywood ne prends pas la peine d’éduquer (sans criminalisé: si les prix sont trop haut pour vous, nous allons nous couler, mais nous décidons du prix) et de contacter directement les gens?
  • Si les intermédiaires techniques sont responsabilisé sans raison, alors ovh, amazon, google sont coupable
  • Je dit non au procès pour l’exemple (c’est le contraire du mot justice). Je dit oui comme intermédiaire technique à essayer de voir comme satisfaire tout le monde (button: reporter ce contenu illégale, à condition que ce soit pas abusif: comme youtube qui supprime une video pour quelque secondes de contenu sous copy right). Et donc non à la justice a deux vitesse (si une personne c’est fait pirater sont wifi elle vas en prison pour téléchargement illégale: bon moyen d’envoyer sont voisin en prison, si le ministre ou le président fait du téléchargement illégale cela ne s’applique pas: ca leur rapporterai beaucoup pourtant…).
  • J’ai 100 pain pour 100 personne, je vends mon pain 10 000€. La creation du 1er pain m’as couté 100€, les autres sont des copies qui ne me coûte rien. Personne ne peu l’acheter et je subit des vols (les besoins alimentaires ou culturelle sont les mêmes). Au lieux de faire un prix de 1€ je décide de poursuivre ces 100 personnes à hauteur de 10 000€ chaqu’une. Stupide.
  • Si on suit la logique des ayants droits, avec en moyenne 30 téléchargement par mois par personne, le budget des foyers devrai être au moins de 30€ (prix d’un DVD, film, documentaire, …) * 30, soit 900€ tout les mois pour avoir accès à la culture? Ca c’est de la redevance bien chére.
  • Si je compte les taxes sur la copie privée: téléphone, hdd, écran d’ordinateur, … je paye une redevance plus chére que la redevance TV, donc j’ai le droit comme la TV d’avoir du contenu culturel en échange? Ha non, j’ai juste le droit de la fermer. On aura bientôt la redevance sur l’aire qu’on respire car c’est bien connu, les pirates respires.

La bonne attitude face à cela est selon moi de ne pas faire de téléchargement illégale (du moi perdre le reflex de pas payer, payer quand vous trouver que le jeu film vaut le prix annoncé), payer des oeuvres sous licence libre. Mais ce qui est probable qu’il se passe avec cette méthode: Le piratage chute, les ventes aussi, à tel point que les ayant droits doivent mettre la clef sous la porte (le besoin de produit culturel compenser par les produits sous licences libres). Et les gens n’ayant pas l’habitude de payer, se retrouve avec des produits bas de gamme.

D’un coté l’industrie du divertissement envisagerai sérieusement un système de licence globale.

De l’autre les utilisateurs changerai leur habitude de consommation pour payer les bon produits, surtout sous licence libre qui leur garantisse respect, transparence et droit de copie. Et oui, vous pouvez pas demander un truc pro avec des moyens et des gens ayant des années de formations et d’expérience si vous les payer pas. Et venais dans ce cas pas vous plaindre de l’amateurisme. Je fait un peu de pub en passant pour flattr. Actuellement c’est dommage qu’il soit si dure de vivre du logiciel libre.

A bientôt, je vais continuer sur mes logiciels libres, n’hésitez pas à donner si je le mérite.

MongoDB vs CassandraDB vs Autre pour CatchChallenger

Bonjour,

Pour les besoins de CatchChallenger, j’ai exploré des base de données NoSQL.

CassandraDB

C’été mon 1er choix. La mise à l’échelle (scalabilité) est bonne. Il prends en compte le datacenter.

Mais le pannel de controle fort sympatique qu’est OpsCenter est réservé a RedHat et debian, pourquoi il ne peu pas juste demander les dépendances qu’il as besoin, voir les embarqués si elle ne sont pas trés commune?

J’ai été obligé de rajouter des clef primaire la ou ce n’est pas utile. Les index uniques sur du multi colonne ne sont pas natif et vu que j’ai rien compris sur comment faire ce CUSTOM INDEX et que cela affecte les performances, j’ai dit adieux.

MongoDB

Sur gentoo, je suis bloqué en 2.6 à cause d’un conflit de dépendances avec kleopatra (KDE). Même si c’est plus de la faute de kleopatra, c’est génant.

J’ai donc tenter sur un de mes ARM, et là on me dit que sur ARM, et particulièrement ARM 32Bits cela ne sera jamais supporté. Donc poubelle.

MariaDB

Bien, compatible car j’utilise des functions simples (ce qui me rends compatible avec 100% des SQL), je note cependant que certaines fonctionnalités ne sont pas dispo sur toute les architectures: TokuDB pas dispo sur ARM…

Petit coup de guele

Nous somme en 2016 les gas! Mềme Mingw supporte gcc 4.9, ce qui donne accès a une abstraction à la fois de l’architecture et de la plateforme.

Pour être indépendant de la plateforme il y as plein de libs connu, sans compter la compatibilité entre les unix, et grace à mingw avec windows.

Coté architecture, il faut toujours avoir un failback en C/C++ pour les architectures moins optimisé mais pour avoir un support et du code lisible et vérifiable. Le double support 32Bits et 64Bits est super facile à faire si ont respecte la norme. Hors mit ca je vois pas la moindre raison que votre code C/C++ ne marcherai pas sur une autre architecture.

Le 32Bits ne vas jamais disparaître car c’est le moyen le plus effectif pour avoir des système embarqué avec peu de consommation. En plus cela permet de réduire lors d’utilisation forte de pointeur l’empreinte mémoire (jusqu’as 2x de réduction, BTree, hash table, …). Si vous utilisez moins de 4Go de mémoire, le 32Bits est fait pour vous. C’est pour cela qu’existe aussi x32, cela permet sur x86_64 de tiré partie du mode 64Bits mais en ayant un mode d’adressage en 32Bits (donc max 4Go) mais avec la réduction de l’empreinte mémoire du 32Bits. Cela ne me surprendrai pas de savoir que les GPU ont des cpu en 32Bits.

 

Bye.

graphic dependency preview

Les dépendances

Bonjour,

Je suis tomber sur cet article:

http://thebacklog.net/2011/04/04/a-nice-picture-of-dependency-hell/

Voila la visualisation des dépendances des logiciels et libs:

gentoo graphic dependency hell

Il y as des dépendances dans tout les sens, mais le pire c’est les dépendances circulaires, il vous faut A pour avoir B, mais B pour avoir A… et donc comment vous faite depuis 0? Vous mettez un A compilé trouvé sur internet, vous compilez B, puis compilez A et écrasez le A de internet.

En 5 ans le nombres de packets à augmenté, les dépendances se sont complexifié. Cela rends la maintenance d’un OS plus compliqué. Faire l’arbre de dépendances pour calculer les dépendances à installer avant le packet deviens de plus en plus complexe.

Un logiciel peu vouloir une lib en version 1.2 et pas moins ni plus, et un autre utilise cette libs en version 1.3 minimum.

Vous développeur, que pouvez vous faire?

A votre niveau, que pouvez vous faire? Voila une serie de conseille qui sont à appliquer avec intelligence, et non comme des régles strictes:

  • Minimiser le nombre de dépendances: Cela permet de rendre la compilation plus facile pour les contributeurs potentiels. D’avoir moins besoin d’adapter votre logiciel pour les changements d’API des libs que vous utilisez. Augmente les performances de votre logiciel (1 relocation en moins, peu être critique quand vous l’appelez comme un fou dans une boucle) et permet à votre compilateur le LTO et/ou d’inline la fonction qui vas bien et d’utiliser moins de mémoire. Permet de minimiser la taille en supprimant tout les codes compilé peu/pas utilisé. Cela permet de minimiser les failles en minimisant le code chargé et donc le nombre de faille potentiel. Comment? En analysant les choses que vous n’utilisez pas: Certain lie des libs sans même utiliser la moindre functions. Si vous utilisez très peu de function d’une libs, il est souvent plus intéressants de refaire ces functions dans votre programme (sauf si vous ne voulais pas avoir à charge leur maintenance: par exemple les functions de hash de openssl qui sont actualisé pour exploiter au mieux les instructions du cpu)
  • Etre tolérant sur les versions de libs supporté: Cela permet de ne pas rentré en conflit avec d’autre logiciel demandant une version supérieur ou inférieur d’une lib. Comment? En ne pas se jetant sur la dernière fonctionnalité de vos libs (mais utiliser la si c’est un avantage majeur: J’utilise dans Ultracopier Qt 4.4 pour la détection de l’espace libre, impossible de faire autrement sans rajouter une dépendance problématique)
  • Pour le packaging sous Windows, vous pouvez utiliser une copie privée de vos dll, et donc avoir des versions spécifique sans que cela rentre en conflit avec les autres logiciels. Cela n’est pas applicable au OS qui mettent en commun les lib et qui ont une gestion de packets.

Si vous faite une lib

Si vous faite une lib, voila les conseilles:

  • Dépendance: évitez de mettre en dépendance une libs qui directement ou non dépende de votre libs.
  • Versioning et API: Exploser une API stable, que vous aller changer un minimum de fois en cumulant les changements. Mettez un numéro de version, avec un nombre majeur caractérisant un changement d’API, et un nombre mineur pour les changements interne qui ne change pas l’API.

Voila, en espérant vous avoir éclairé.

Load balancing et scalabilité avec CatchChallenger

Bonjour,

Je rentre dans une phase de testing, benchmarking et stabilisation dans CatchChallenger. Je n’est pas encore fait l’optimisation, juste respecter les régles de codage.

Les temps noyau, et gestion de matériel dans le cas du raspberry pi sont bien supérieur aux temps en espace utilisateur. Donc un load balancer prendrais autant de charge CPU que l’application en elle même. Le seul cas réel d’un load balancer serai un gros load balancer et de toute petite nodes. Mais dans tout les cas le load balancer ne pourra jamais gérer plus de client que les nodes elle même.

Pourquoi un load balancer?

Pour la haute disponibilité: Il suffit de faire soit un/des haproxy en mode tcp, ou faire cela via DNS (ce qui permet de faire des personnalisation par pays pour optimiser le trafic, et cela est parfaitement scalable)

Répartition de charge: impossible via un logiciel si les serveurs sont symétrique, car il passerai plus de temps cpu a répartir la charge que à travailler (induirai des latences et sous chargerai les serveurs). Pour les serveurs logins, la gestion par pays des DNS permet cela.

 

Et pour les games serveurs? Pour la haute disponibilité: Pas besoin, le serveur est down, les joueurs peuvent aller jouer sur un autre serveur similaire. Répartition de charge: Les limites par serveur force les joueurs a se répartir sur les différents serveurs, sans compter avec le faire qu’il vont sur les serveurs les plus proches de chez eux.

 

Un raspberry pi 1, ARMv6 à 700Mhz tiens une charge de 60000 joueurs. Ceux sans optimisation. Pour que une attaque DDOS soit intéressante il faut que le prix de l’attaque soit bien inférieur au prix du préjudice. Comme ici le botnet pour attaquer CatchChallenger doit être vraiment três grands face aux peu de serveur pour surporter un tel charge, la possibilité d’une attaque DDOS est relativement faible.

Attention: Les options du serveurs ont une forte influence sur la monté en charge et le confort des utilisateurs.

Map infini

Les maps infini sont théoriquement supporté (infini à la minecraft: trop grande humainement pour être explorer). La gestion et mise a l’échelle as été fortement amélioré. Il deviens donc envisageable de faire les maps par génération procédurale.

Raspberry pi 3

Je ne vous conseille pas le raspberry pi 3 car pour le même prix vous avez the le Odroid C2 qui vous offres: une bien meilleure carte graphique, une mémoire bien plus rapide, plus grande, un meilleur bus de communication entre les composants, une carte réseau meilleure et mieux interfacé (pas via l’usb), l’eMMC, …

 

N’hésité pas a acheter les logiciels qui vous ont plus ou apporté quelque chose (CatchChallenger).

Bye,

Cpu buffer vs cache

Bonjour,

Sur une section de code sensible je me suis demander, ce qui est mieux (teste fait en C++):

int a;
while(10000000x)
a=10;

Ou:

int a;
while(10000000x)
if(a!=10)
a=10;

Avec la 1ère partie, une vague d’information qui viens du coeur du cpu viens remplir les différents buffer (L1, L2, L3) jusqu’as la mémoire centrale de manière non bloquante. Ce qui provoque une grosse consommation sur tout le chemin de l’information. Cela est plus performant sur ARMv6 in-order surchargé car cela est non bloquant (2x), mais plus lent de 30% sur un x86 vide.

La 2ème partie est plus lente sur un système surchargé car le CPU passe sont temps a remettre en cache l’information à cause des changements de contexte qui purge les différents cache. Bien sur cette solution est préférable si cela permet d’évité un traitement lourd, mais la première solution est mieux pour la gestion simple de flags.

Bye,

Multicoeur ou pas Multicoeur?

Salut,

La question du jour: il vaut mieux un hardware Multicœur ou pas?

Pour optimiser le multi-threading et plus précisément les mutex/valeur atomique il vaut mieux un gestion hardware bonne. Cela permet d’avoir de bonne performances lorsque un entier ou un bout de code ne doit être accédé que dans un thread à la fois. Cela veut dire garder des valeurs dans la mémoire commune, cela peu être le L3, la mémoire principale, bref quelque chose de plus lent que le L1 du cpu.

Cela n’as pas d’influence si cette partie du code est peu utilisé face au reste du code (peu de synchronisation des threads et peu de passage de donnée d’un thread à l’autre).

Si vous avez que un cpu (forcer cela dans votre noyau linux), un certain nombre d’optimisation peuvent être faite (garder les lock en L1 par exemple), peu de changement de contexte avec l’utilisation des threads, …

Bien souvent, essayer d’exploiter le multi-cpu demande plus d’effort ou le code résultant est plus lent. En mono cpu vous êtes plus optimisé, et en mono-thread plus optimisé mais vous n’exploitez pas tout les coeurs (pour un serveur cela n’est pas grave vu que les autres application tournant sur votre serveur se répartisse les coeurs restant).

Donc je vais préférer un bon monocoeur performant avec le noyau qui vas avec, ou un quad coeur, mais pas un dual coeur, même si la mode est a cela.

Bye

CN8890 et ARMv8 48 coeur

Bonjour,

 

Pour moi les CPU haute densité type Cavium ThunderX CN8890 ARMv8 sont l’avenir dans le monde des serveurs, AMD a beau sortir ces Opteron A1100, ont est loin des 4$ par cpu de pine64 ou 8$ par cpu des raspberry pi.

Point que je prends en compte:

  • $ par cpu
  • Consommation électrique
  • Architecture: gros PC comme les AMD Opteron A1100 < Cavium ThunderX CN8890, car:
  • Trop de hdd et pas assez de cpu ne servent a rien, faire une grosse grappe raid pour plusieurs cœur et donc vm ne me convaincs pas, JBOD -> risque de crash, RAID5 -> une machine consomme trop de hdd et tout les hdd seek. Un hdd par cpu ou par groupe de cpu a un sens, car ont peu allouer un hdd par vm, et donc éviter qu’une vm lente ne ralentisse les autres. Le H270-T70 A fait le choix de un disque par groupe de CPU ce qui a un sens dans l’augmentation de densité.
  • Avec 48 cpu ont peu gérer du 10Gbps voir plus (sous charge mixte: petit et grands packets + temps système), avec 8, même si ce sont des Cortex A57 je vois mal comment faire cela. Grace à la DDR4, les gros packets pourront être géré grâce à la bande passante mémoire. Citation de Erratasec:

    A standard Linux system that struggles at forwarding 500,000 packets-per-second

    , si les meilleurs x86 ont du mal, les ARM qui ont moins de instruction par secondes aux MHz…

Donc pour moi la carte H270-T70 de gigabyte est une bonne direction.

Bye,

IA, virus, sécurité, Cyberguerre

Salut,

J’ai vu un documentaire qui m’as fait bien rire: L’intelligence artificielle – Le régne des robots

Voila mes notes:

  • Oui une IA peu être plus intelligente, mais pas forcément, elle peu aussi bénéficier de la compression temporelle, avoir plusieurs entités qui transmette leur savoir de manière instantané (ne pas avoir de période d’apprentissage), ne plus être obligé de passé par la parole
  • Une AI n’est pas une programme dans le sens traditionnel. Si sont fonctionnement est multi ordinateur, tuer un groupe d’ordinateur reviens a tuer un groupe de neurone? C’est un peu comme faire dérailler notre cerveau, ça veux pas dire que le reste ne marchera pas.
  • La sécurité en informatique à évolué et continuera d’évoluer, il se peu qu’on tendra vers soit des systèmes parfait (vérification mathématique de la sécurité, compilation et/ou runtime), au même titre que les illusions d’optique cela peu affecté une zone temporairement.
  • Le cerveaux est capable de s’adapter, pourquoi pas les IA? S’auto programmer et boucher les failles. Si il sont pas trop bête elle vont essayé de s’auto pirater pour se sécuriser.
  • Pourquoi cela serai une IA et pas un être humain connecté cérébralement?
  • Tout les êtres ont en commun l’instinct de survie, le besoin de se reproduire, l’évolution et la divergence, et un certain nombre de facteur dépendant du monde physique. Le monde virtuel est différent, mais il as des limites aussi (nombre d’entité limité par le nombre d’instruction cpu par secondes). Si la reproduction se produit, allons nous voir des groupes social d’IA, des guerres, des défenses de territoires? Oublie totale des armes de cyber guerre.
  • Si une espèce est plus avancé au niveau de l’évolution, on sais très bien ce qui ce passe sur notre plante, faut arrêté de croire que l’homme est beau, grand, puissant et au centre de tout.

En ésperant vous avoir fait réfléchir. Bye

Go to Top