Easy Miner
0Easy Miner is simplied client to generate bitcoin with your prefered pool.
For now just for bitminter. But on query for other pool. You can give for your client pool to mine one on pool on 2 step (download and put the login/worker info).
If you like that’s or you will use it for your pool, donate: 1AthBNQdw3Lva92EJCGYD7C8fiac9c4CLw
You have the code un GPL3: https://github.com/alphaonex86/EasyMiner
Geek pride 2013 a santa cruz
Hola los geek de santa cruz!
Me gustaría saber si usted quieres encontrar se a santa cruz para la geek pride 2013? Yo vivo a l’avenida grigota (ramada).
Cordialemente,
Bitcoin
Bonjour,
C’est bien dommage que j’avais pas eu le temps de regarder cette crypto-monaie quand elle est sortie. J’aurai gagner pas mal.
J’ai adapter mes shops pour pouvoir payer avec.
Qu’apporte t’elle:
- Des charges ridiculement petite, car tout le monde peu gérer cette monaie, la concurrence joue, … ce n’est pas des banques centrales qui controle tout et qui impose leur charge. Ici les charges ne couvre que les fraits techniques (pour la puissance pour la crypto graphie).
- Pas limité par un état/une banque, donc monnaie mondiale?
- Pas traçable (pas top, car ça participe au marché noir).
- Ont peu gagner de l’argent (en minant les données -> les traitants, grace au commissions et à une petite génération de monnaie pour l’instant).
- Autorégulation du système
- Transfert d’argent sans passé par un tier (mais seul les tiers fournisses les services pour faire de l’e-commerce alors il se prenne une com, mais dans le future, ont pourra juste avoir la com pour la partie technique)
- Client officiel qui télécharge tout les transactions, donc taille exponentiel dans le temps
- Pas de contrôle sur la monnaie car peu paraître bien, mais ont peu perdre tout investissement et perde confiance en la monnaie imaginer que c’est déjà le cas pour la monnaie alors qu’on as au moins le prix du métal pour les piéces
- Monnaie jeune, trés fluctuante, trés fortement soumise à la spéculation (pire que la bourse)
- 50% est requit pour considéré la transaction valide, hors suffit d’une faille sur tout les linux, ou assez généralisé pour toucher plus de 50% du réseau bitcoin, et le pirate peu faire ce qu’il veux avec le réseau (changer le destination de certaines transaction). Hors les failles ça vas vite, si (comme actuellement , un pool (groupe de mineur) à 40%, suffit de le pirater et un autre pool à 10%, et ont as la main mise sur les bitcoin.
- Si quelqu’un as accès au fichier sur votre pc (trojan), alors il pourra prendre l’argent, et vu que l’argent n’est pas retournable, vous l’aurai perdu et ne pourrai pas le réclamer (comme des espéces oublié dans le metro)
- Si vous avez un client local et que vous perdez vos fichiers, vous perdez tout votre argent… Backuper multiplie les risques de piratage (sur clef? Internet?).
- La masse d’argent est fixe, ça veux dire qu’as partir d’un moments, le nombre de bitcoins ne vas plus changer
- Ca veux dire qu’avec le temps, un bitcoin vas prendre de la valeur, et que les petites transaction vont aller de plus en plus dans les petites valeurs (0.0000001 pour acheter une pomme dans 10ans?). C’est un système à virgule flottante, les systèmes de paiement ne sont pas du tout prévu pour ça (à cause des arrondis).
Supercopier sous linux et Mac
Bonjour,
Et voila Supercopier 3 pour linux et mac:
En faite c’est une nouvelle interface pour le prochain Ultracopier…
Les autres interface ont été amélioré, dons Teracopy avec la multiple progression.
Cordialement,
Déboires divers
Salut,
Voila les déboires divers que je rencontre avec les utilisateurs d’Ultracopier: Un gas me reporte un problème au niveau de la limitation de la vitesse. Il se connecte juste en disant: « ça marche pas ». Pas moyen qu’il réponde à mes questions, ni d’avoir un rapport de bug.
Alors j’essaye de fixer, j’externalise la régulation pour la faire plus fiable, … résultat: taille de block et limitation de la vitesse totalement pété.
Coté Supercopier (c’est ma faute), je me suis rendu compte que l’Unicode été pété. Je suis donc en train de refaire un gros travail de réécriture pour corrigé la copie avec des caractères spéciaux.
Bye.
Echec du siteduzero
Bonjour,
Comme beaucoup d’autre pour moi le siteduzero v4 est un échec.
Pourquoi?
- Lecture difficile sur pc, car pas de respondive design (ça ne prends pas toutes la page, et interface pensé pour tablette)
- Chargement pourri: Chargement en escalier, pas de mise en cache navigateur (demande si le contenu à changer, donc le navigateur attends une réponse 304 pour continuer le chargement, et le fait pour chaque éléments), page très lourde.
- Problème de performance: tant pour la monté en charge, la protection contre les attaques DDOS, la réactivité du site, que les frais d’exploitation, il y as de gros efforts à faire.
- Problème de fonctionnalités: Une bonne partie des fonctions sont soit bugger, soit manquante. Il n’y as toujours rien après autant de temps après le lancement de la v4. Il ont fait les conneries (les badge), mais pas les truc importants (notification par mail, signature, …)
- Problème de maturité: ce qui est visible dans la partie utilisateur est vraiment pauvre, et fessable en 1 semaine de travail en php. Je considère le travail actuel comme une alpha.
Profiling et optimisation générale
Bonjour,
Je vais traiter du profiling de vos programmes, de l’analyse de la vitesse, de la loi de wirth: le logiciel ralentit plus vite que le matériel n’accélère. Mes propos sont trés généraux, les articles suivant parleront plus de micro-optimisation dans des cas précis.
Les ordinateurs peuvent traiter facilement des milliards d’instructions par secondes (177 millards pour un Intel Core i7 Extreme Edition 3960X).
Comment profiler?
A première vue cela semble facile: on lance le profiler comme valgrind sous linux, et boom, c’est fini. Même si c’est déjà un début que peu de développeurs font, si c’est mal fait cela ne sert à rien.
Il faut avant tout isoler les cas de test, c’est à dire les cas plus ou moins probable d’utilisation. Un cas souvent oublié: le démarrage. Et oui, tout le monde démarre le programme avant de l’utiliser, or peu de développeurs profilent cette partie où intervient souvent le disque dur et le FS (car pas mal de fichier sont chargé).
Sous ultracopier j’ai isolé ces cas de test:
- Copie/déplacement de gros fichiers
- Copie d’une liste raisonnable de petits fichiers (<10000 fichiers)
- Cas que j’ai rajouté car Ultracopier est des fois utilisé comme ça, et que nos hdd devienne de plus en plus gros: 2 000 000 fichiers, tailles mixtes, destination/sources mixte
Optimiser l’algorithmique
Vous devez évaluer le coût de chaque opération. Votre profiler peut vous y aider.
Essayer de mettre un minimum de chose dans vos boucles. Par exemple, pour 2 boucles imbriqués, mettez l’instanciation en dehors des 2 boucles, cela permet de ne pas désallouer et réallouer vos variables à l’infini.
Evitez de trop presser la mémoire: évitez les allocations inutiles, évitez d’utiliser trop de mémoire. Lorsque vous utilisez beaucoup de donnée, pensez à la cohérence des données dans le cache (accéder à une donnée située à l’adresse X, puis accéder à une donnée située à l’adresse X + 1024 provoque une erreur de cache (cache miss), forçant le cache à être rechargé).
Faites la différence entre le temps d’appel d’une fonction, et le temps total passé dans cette fonction (temps d’appel multiplié par le nombre d’appel).
Bien coder
Ne pas coder un crapware qui fait tout et n’importe quoi, fait partie de la conception générale. Si le logiciel est trop fourni d’options, l’utilisateur vas s’y perdre. Un mode détaillé peu aider.
Les fonctionalités peu utilisées doivent être mises à part (sous forme de patch ou de plugins).
Un code clair est très important.
Le fait de faire tout ça peut vous aider à vous protéger du software bloat, cause de ralentissement logiciel.
Les sections lentes
Soit une section est lente car elle est mal codé.
Évitez qu’une fonction fasse intervenir le hdd puis le cpu, puis de nouveau le hdd. Car à chaque fois l’un des éléments attends l’autre (valable pour d’autre éléments).
Quand ont recherche un éléments dans une longue liste, il faut souvent parcourir toutes la liste, cela prend du cpu et demande beaucoup d’accès à des zones mémoire fragmentées. Lorsque c’est possible, utilisé une table de hashage: celà vous évitera de nombreux parcours de liste.
Soit c’est du à sa nature et cela ne peuT être changé (une compression xz mettra toujours plus de temps qu’une compression gzip; parsING d’un fichier xml).
Dans ce cas essayer de la mettre dans un thread à coté, ou/et d’utilisé les events.
Il ce peu que ce soit la lib que vous utilisez qui ralentisse votre programme. Hormis signaler les ralentissements excessifs au mainteneur ou aider à l’optimisation de la lib, ont ne peut pas y faire grands chose.
Une partie des compilateurs supporte la compilation de fonction optimisé pour un certain cpu, cela peu être utile pour utiliser toutes les instructions du votre cpu (et gagner en performance). Dans certain cas, compilé votre programme pour votre cpu peu être intéressant (ce qui souvent ne le rends plus distribuable à d’autre). Un serveur applicatif qui est sur un serveur dédié spécifique (et qui ne vas pas en bouger), dans ce cas, le compiler sur le serveur même pour le cpu précis du serveur dédié peu être avantageux.
Les caches
On ne parle pas ici du cache processeur, mais des caches en général.
Les caches ne sont pas toujours une bonne idée. Je m’explique : si pour faire un calcul il me faut 10ms et que l’accès au cache demande 15ms (swap?), alors l’utilisation du cache ralenti les performances.
Comment déterminer si un cache est utile? Il faut pour cela mesure le temps d’accès au cache dans un scénario d’utilisation courant. Un cache utilisé souvent et qui est de petite taille a de bonne chance d’être préchargé par le processeur, ce qui va rendre son accès quasiment gratuit.
Attention : un cache de plusieurs centaines de Mo prendra plusieurs centaines de millisecondes pour être parcouru. L’algorithme qui fait le lien entre les données d’entrée et la position dans le cache doit être bien pensé et bien codé. Cela veux dire: ne pas parcourir chaque entrée du cache si le cache contiens des millions d’entrée ; utiliser plusieurs niveaux d’indirection (des sous dossier) au lieu de tout mettre dans une liste (dans un même dossier ; dans le cas réel de dossiers sur un FS, les performances sont fortement amoindries pour les dossiers de plus de 10000 entrée – surtout si les noms sont des hashs).
Il faut analyser le temps de traitement des données : plus il sera grands face au temps d’accès du cache, mieux cela sera. Quand le cache ne fait gagner que 10% alors passer votre chemin, ça fait plus de code, plus difficile à lire.
Régénération du cache, c’est quoi? Le cache peu/doit être mit à jour. Par exemple à chaque écriture de la données entrantes, la donnée sortant doit changer. Si cette donnée est aléatoire et change souvent, un cache risque de coûter plus cher qu’il ne rapporte. Le ratio mise à jour du cache/temps d’accès du cache/temps de génération de la donnée est important.
Voila quel exemple pour mieux comprendre:
- Si mon image est une image de caméra, elle change par définition à chaque frame. Mettre en cache une frame avec l’effet « noir et blanc » ne servira à rien, vu que l’image ne se répétera pas – et le cache ne sera jamais utilisé en lecture.
- Si le traitement de mon image se fait en 100ms, que je fait 2 lectures du résultat final avec l’effet « noir et blanc », et que le cache met 50ms, cela veux dire: 1er accéss 100ms, 2eme accéss: 50ms. Le gain apporté par le cache est trop faible.
- Si maintenant, j’upload mon image, et que je veux l’afficher des milliers de fois sur mon site web avec l’effet « noir et blanc », et que le cache met 5ms, cela veux dire: 1er accès 100ms chaque 1000 lecture, autre accéss: 5ms pour les autres accès. Le cache nous est très utile dans ce cas.
Les threads
Nous nous dirigeons vers des machines massivement multi-processeur (cpu, gpu…).
Il faut voir l’aspect synchronisation entre les threads. En effet, si vous avez 2000 thread qui se synchronisent (ça peu être juste pour attendre le résultat d’un calcul), et que chaque thread fait le traitement en 1s, cela serait dramatique de mettre aussi 1s par thread pour se synchroniser. Car 2000 thread en fonction de la taille des données transmise, du bus, … ça peu rapidement faire un goulot d’étranglement. Une structure de thread en arbre (1 maître pour 50 esclave) peu aider. La complexité peu être facilement quarré (temps de synchronisation d’un éléments = nombre de threads car il faut parcourir la liste des thread * nombre d’éléments qui doivent le faire = nombre de threads)
Ensuite il y a la localité des données. Si le thread à ses info pour travailler dans le cache de son processeur, il vas travailler sans attendre d’avoir la donnée. Mais si vous faite une grosse zone avec un mutex/vérou dessus, et que tout les threads y accèdent alors il vont plus attendre leur tour que travailler (idem pour la concurrence des autres ressources comme le hdd).
Il faut éviter de partager les données entre plusieurs threads. Un thread qui écrit une donnée accédé en lecture par un autre thread (ça peut être un mutex aussi : à la base, un mutex c’est une donnée à laquelle le processeur accède de manière atomique), alors le coeur gérant le thread en lecture va devoir remettre à jour son cache de données. Si les interactions de ce type sont trop fréquente, les performances vont s’en ressentir.
Si un thread accède à une variable protégé par un mutex, et que le thread qui à besoin de puissance accède à cette même variable via ce même mutex, mais 1000x plus. Alors c’est qu’il y as un problème car le mutex ralenti fortement le thread qui à besoin de puissance, juste pour que l’autre thread y accède 1/1000.
Mais bien optimiser son programme est plus important que d’utiliser des threads ou les possibilités du matériel. Un programme mal conçu sera lent avec ou sans multi-thread, et ce, quel que soit le CPU.
Les approximations et erreurs
A certains endroits, ont peut tolérer des erreurs, des incertitudes. On peut dire: c’est suffisamment correct.
Il faut utiliser cette logique quand c’est possible. Par exemple, le moteur de copie sur ultracopier remonte la vitesse de lecture. Cette vitesse peut être approximative. De plus, je lit depuis un autre thread la variable sans mutex, ça veux dire que ce que je lit peu être faux une fois sur 1 millions. Pas grave, ça ne sert qu’à l’affichage, et le fait de ne pas poser de mutex me permet de gagner en performance.
L’OS vous fournit des timers précis, ou un peu moins précis. Même chose pour les nombres aléatoires. Utilisez les correctement pour ne pas ralentir votre programme.
Ne pas dire non
J’ai rapporter des problèmes de performance à des développeurs (openTTD). Il m’ont dit: Nous ne voulons pas bosser sur ton problème spécifique qui demande 1 heures, car la gestions d’un autre problèmes (gestion des trains) est un vrai goulot d’étranglement depuis plusieurs années. Voila un bon contre exemple: il vaut mieux corriger un problème qui n’affecte qu’une partie des utilisateurs en 1h plutôt que se limiter à travailler sur un problème qui affecte tous les utilisateurs, mais qui est présent depuis plusieurs années et qui nécessitera encore de long moins de développement.
D’autre diront: non, un éditeur texte n’as pas besoin de performance. Alors qu’il pourrai gagner facilement en performance, consommer moins de cpu (et économisé de la batterie). Cela permet aussi de passer sur des ordinations un peu vieux. Pourquoi faire un programme lent, quand on peu le faire rapide?
Chaque optimisation peut faire que le cpu diminue ses cache miss, que tel ou tel cache de données est mieux exploité, que l’OS swap moins. Il ne faut pas le faire à l’extrême, ni contre le bon sens, mais faire toutes les optimisations facile peu aider un programme à être plus efficace. Cela permet aussi d’apprendre les bons réflexes pour directement bien coder la prochaine fois.
Ne pas considérer les optimisations comme une tache annexe. Cela rends l’optimisation difficile quand elle n’est pas fait en amont (comme la sécurité).
Cas particulier: les cms subissant des attaques DDOS vont résister bien plus facilement si il sont optimisés, car il faudra un botnet et une bande passante plus importante pour saturer le serveur. Alors que s’il ne faut que quelques requêtes par secondes pour saturer le serveur, faut juste 1000 bot chargeant des pages sur le site à quelque page toutes les 10s (navigation normale), et le serveur est saturé. Et vu que les vrai visiteurs naviguent à cette vitesse, comme voulez vous faire la différence? (aucune protection ne marchera). Sans parler du fait que le confort de navigation est meilleur sur un site rapide.
Ne pas répéter comme un perroquet : « Google/Microsoft/Apple/Linux/Untel à dit… » Il peuvent se tromper, vous pouvez avoir mal compris leurs arguments, ou leur cas d’utilisation peut ne pas s’appliquer à la personne que vous conseillez. Ne répéter que si vous comprenez bien les implications de ce que vous dites.
Les erreurs à éviter
La perte de performance est inévitable dans l’absolu (même si vous codez en assembleur : vous voudrez alors écrire du code un peu lisible, or un code lisible n’est pas la meilleure manière d’écrire du code assembleur). Par contre faire un CMS en PHP avec framework qui est 1000x plus lent que du PHP pur, cela n’est pas acceptable.
Une astuces pour les performances peut être vrai en générale, mais pas forcément dans votre cas. Et elle peut tout simplement être mal implémentée. Il vaut mieux ne pas utiliser les variables globales, ni les goto. Mais si une série de goto permet de faire en 100 lignes ce qu’un code sans fait en 5000 lignes, alors foncez! C’est l’un des cas particulier où son usage est conseillé. C’est surement que l’algorithme veux ça (ou la prise en main utilisateurs, …).
Tout à un coût. Analyser bien le coût de ce qu’on vous dit avant de vous lancer. Par exemple grouper les CSS pour avoir moins de taille au final et moins de requête HTTP semble avantageux, mais ce n’est pas toujours vrai: car si 1 CSS sur 10 change, vous re-téléchargez tout les CSS de la page. Alors qu’avec des CSS séparé, juste celui qui n’est pas en cache est téléchargé. Sur un groupement, il faut donc recalculer le groupement des CSS et leur compression à chaque fois en PHP + framework (qui est donc super long).
La compression avec upx peut vous faire gagner un peu de temps dans certains cas sur le chargement du programme en mémoire. Ce ne sera probablement pas le cas pour une petite application (<100Ko) car l’overhead associé au temps de décompression est alors plus fort (le point important ici est le ration temps de lecture sur disque / temps de décompression ; au delà d’une certaine taille, il est toujours plus lent de lire sur disque, mais la différence peut être négligeable voire s’inverser si on traite un petit fichier).
Ne dites pas: les utilisateurs veulent voir les temps rééls et veulent qu’on exploite tous les CPU. Par exemple une fois que vous avez écrit un gros fichier et avant le flush() et close(), masquer la fenêtre, ça évitera de rester sur 100% de progression pendant plusieurs secondes. Vos utilisateurs vont surement vous dire: utilisez tout les cores de nos CPU ! Mais vont râler si votre application est plus lente que celle du voisin (juste car l’utilisation du multi coeur ralenti l’application).
Statique vs dynamique
Utilisé une bibliothèque en statique permet de minimiser les dépendances. Cela permet donc d’avoir moins de symboles à résoudre lors du chargement de la dll/so/… (qui rajoutent des symboles particuliers utilisés par le linker dynamique), ce qui permet d’avoir un meilleur temps de démarrage.
Cela permet aussi au compilateur de faire des optimisation inter-procédurale, particulièrement quand les optimisation sont fait au link (LTO).
En échange, cela ce traduit par moins de souplesse (pour mettre à jour la lib ont doit recompiler l’application). Cela fait une application plus grosses (mais plus facilement compressible avec upx).
Large liste de copie sous Ultracopier
Je viens de tester Ultracopier avec 2 millions de fichiers et 2To.
Ca m’as permit de trouver d’autre petit bug qui n’ont rien à voir. Mais la copie marche bien, attention, il faut Ultracopier 64Bits et 8Go de mémoire mini pour boucler cette copie.
Je vais essayer d’améliorer encore la réactivité pour ce cas de figure, qui est vraiment très bonne.
En passant, mon site pro: herman infogerance
Supercopier 3 pour 2013
Bonjour,
J’ai bien repris le code de Supercopier maintenant. Je vous annonce que Supercopier 3 est presque fini.
Remake/COMPATIBILITÉ
C’est un remake total en lazarus. Histoire d’avoir un compilateur libre ET gratuit pour pour compiler ce projet open source. Les versions officiel qui vont être distribuer sont: Version 32Bits, version 64Bits, version portable. (Et peu être wine). Le code utilise des choses spécifique à windows, donc le port pour linux/mac natif n’est pas pour l’instant.
Supercopier pour windows 7 est maintenant prêt, même avec l’UAC.
J’ai viré les effets peu connu et gadget inutile (comme dans l’aide). J’ai essayer de minimiser la taille, mais lazarus étant + moderne, la taille est plus grosse pour un meilleur support des autres OS.
Beaucoup d’amélioration, peu de chose visible du coté de l’utilisateur. Mais il me reste encore des choses à faire.
Stabilité
Contrairement à Ultracopier, il manque énormément de contrôle. Par exemple, si le resize de la destination quand la copie est fini ne marche pas, aucune erreur n’est détecté. Il y as des fuites mémoire à certain endroits.
Dans Supercopier, les clef registre sont lu et écrite à l’arrache sans même contrôler si elle sont bonne, si elle sont bien été écrite, …
Bref vieux programme, j’aurai pas trop confiance pour l’utilisation vu la code, et pourtant, plein de gens s’en servent.
Prévoir quelque bug à cause du remake. J’ai fait certaine partie comme j’ai pu.
L’application se charge directement de charger les dlls, et utilise normalement l’UAC en cas de besoin. Donc c’est plus stable de ce coté.
Mot de la fin
J’ai besoin de beta testeur, et de dons pour continuer le logiciel. Ultracopier continue à être développé en parallèle, et je continue à le considérer comme plus moderne.
J’ai tester partage de fichiers samba vers même partage de fichiers samba depuis une machine virtuelle. Supercopier: 1Mo/s avec buffer de 64Ko config, Ultracopier à 15Mo/s moyen à 4Ko.
Merci de supporté financièrement le développement.
EDIT: application dispo sur le site officiel: Supercopier 3/2013
Autre project ou j’essaye de contacter l’autre, peu être une aliance possible: Supercopier3
Passage sur NSIS et Qt5
Bonjour,
J’utiliser Inno setup 5, mais j’ai découvert qu’il avais des problèmes de multi-thread et de variable non initialisé. Wine m’as permit de mettre en évidence le probléme, windows ne gérant pas les thread de la même façon, je problème est plus difficile à faire apparaître. Ont m’as dit que c’été pas leur probléme car wine n’est pas une platforme supporté (il ont pas envie de faire du code propre, solide, qui passe partout quelque soit la manière de géré les threads. Il vont être bloquer si un jour windows change ce code).
Donc me voila avec NSIS pour ultracopier, qui marche parfaitement sous wine en console pur. En passant, Inno setup 5 ne marche pas en console pur, il crée des fenêtres caché qui font planté certain partie du programme quand je le lance en console pur.
J’ai fait le tour d’ultracopier avec Qt5. Voila rapidement ce que je me suis noter:
- Mac: Le menu quand ont click droit sur l’icone dans le systray n’apparaît pas totalement. Certain signals/slots sont bugger/manquant. Le dialogue pour obtenir un fichier ne marche pas (ont peu pas le fermer, ni click sur open/close)
- Linux: RAS, tout semble marché
- Windows: Grosse lenteur pour le dialogue pour sélectionner les fichiers, Mingw64 en 32Bits à un bug à cause de gcc 4.7.2 (suppression de -02 obligatoire pour mettre -m32), et un plugins (le moteur de copie) ne marche pas en 32Bits, il ne ce charge pas, et Qt5 ne me remonte pas l’erreur
Je continue à avancé sur pokecraft, il commence à étre jouable (crafting, farming, pas encore de combat, ni d’histoire, ni de map)
Bye




