POPULARITY
Cet épisode discute du retour d'experience Java de Netflix, de jQuery, de gouvernance open source, d'Elon Musk, de Kubernetes, de Mistral (gagnant?), d'attaque des LLMs, de developpement de carrière et de Trouble du Déficit de l'Attention avec ou sans Hyperactivité. Enregistré le 15 mars 2024 Téléchargement de l'épisode LesCastCodeurs-Episode-308.mp3 News Les cast codeurs veulent essayer quelque chose de nouveau et le sondage montre que vous aussi. On lance donc une section Ask Me Anything, posez nous une question sur https://lescastcodeurs.com/ama et nous prendrons certaines questions pour donner notre réponse. Lancez-vous, on pense que cette section pourra être sympa :) Langages Retour d'experience de Netflix sur ZGC https://netflixtechblog.com/bending-pause-times-to-your-will-with-generational-zgc-256629c9386b moins de tail latency ce qui veut dire moins de charge sur le systeme (moins de retry) aussi plus facile de trouver les vrais probleme de latence (plus cachés dans les latences de GC) et sans consommation superieure de CPU pour les memes perfs malgré les barrieres differentes de ZGC pas de tuning explicit de leur part (enfin presque) meme si les pointeurs ne sont pas compresses, l'efficacite du GC compense Librairies Sortie de Spock 2.4-M2 https://spockframework.org/spock/docs/2.4-M2/release_notes.html Support de plusieurs librairies de mocking Meilleur support dans les IDEs Et plein d'autres petites améliorations jQuery 4 est sorti ! jQuery est de retour ! https://www.infoq.com/news/2024/03/jquery-4-beta-release-note/ On parle régulièrement du dernier framework JavaScript à la mode, mais jQuery est toujours là Première release majeure depuis 8 ans Suppression de plein de features qui étaient deprecated et maintenant fournie souvent par défaut par les moteurs JavaScript des navigateurs jQuery continue d'être téléchargé de plus en plus au fil du temps, mais peut-être parce qu'il bénéficie du succès des projets qui l'utilisent comme Cypress, WordPress ou Drupal) Quarkus sort sa deuxieme LTS https://quarkus.io/blog/quarkus-3-8-released/ explique les changements importants depuis la LTS 3.2 Infrastructure Linkerd ou plutôt la boîte derrière va faire payer pour accéder aux builds stable du projet. Cela crée des conversations au sein de la CNCF https://www.techtarget.com/searchitoperations/news/366571035/Linkerd-paywall-prompts-online-debate-CNCF-TOC-review deploy envoy, c'est plus dur Buyoant est le principal contributeur derriere Linkerd et ils ont edcider de mettre les distributions stables derriere un paywall pour les societes de plus de 50 employés ($2000 par cluster) les gens se trouve floués par aider au succces et ensuite de trouver piégé La license reste ASL mais la version stable est derriere un paywall, comme red hat enterprise linuix recemment un autre exemple de projet open source qui vire commercial questionne la gouvernance open source, la CNCF va inestiguer et peut etre durcir ces criteres de graduiation Weavework (FLux) a fermé ces dernieres semaines aussi Cloudflare a reecrit un proxy HTTP en rust https://blog.cloudflare.com/how-we-built-pingora-the-proxy-that-connects-cloudflare-to-the-internet/ ils ont utilise NGinx pendant longtemps mais le single worker modele ne permetait pas ceratins optims et ils ont des besolins specifiques bref ils ont reecrit en rust, multi threaded et avec work stealing et ils sont content Le guide du “hater” sur Kubernetes https://paulbutler.org/2024/the-haters-guide-to-kubernetes/ L'auteur se plaint régulièrement de Kubernetes pour sa grande complexité mais reconnait que c'est quand même un grand morceau de technologie A utiliser surtout quand on a besoin de : Exécuter plusieurs processus/serveurs/tâches planifiées. Les exécuter de manière redondante et répartir la charge entre eux. Les configurer, ainsi que les relations entre eux, sous forme de code. L'auteur liste ensuite les fonctionnalités qu'il utilise, qu'il fait attention quand il les utilise, et celles qu'il préfère éviter Utilise : deployments, services, cron jobs, config maps et secrets Attention : stateful set, persistent volume et RBAC Evite : le YAML à la main, les opérateurs et resources customs, Helm, tout ce qui est mesh, les resources ingress, essayer de répliquer la stack K8S complète localement sur sa machine Data et Intelligence Artificielle Mistral AI et Microsoft font un accord sur le modele le plus puissant de Mistral et certains ne sont pas content https://www.latribune.fr/technos-medias/informatique/l-alliance-entre-mistral-et-micr[…]usion-de-l-independance-technologique-europeenne-991558.html Mistral avancait son approche open source mais son modele le plus puissant ne l'est pas ils ont un partenariat exclusif avec Microsoft pour le distribuer Et MS rentre dans le capital Au revoir l'independance de l'IA européenne Au revoir les modeles open source larges cela va a l'encontre du loby et de son positinnement aupres de la commission europeenne ca fait grincer des dents a bruxelles qui avait alléger les contraintes sur les modeles fondamentaux a la demande de Mistral qui menacait de de voir s'allier avec MS si ce n'était pas le cas. Mistral était un fer de lance des modeles open sources pour eviter les biais ils en garderont masi pas les modeles specialisés ou optimisés cela reste une bonne decisione conomique pour Mistral Infinispan 15 est sorti https://infinispan.org/blog/2024/03/13/infinispan-15 JDK 17 Redis Hot Replacement donnant: multi thread, clustering, replication cross site, diff stores de persistence en disk, avoir des caches differentes en namespace différentes avec des règles appliquées à chaque cas d'usage Recherche Vectorielle et stockage des embeddings Integration avec Langchain (Python), Langchain4j, et Quarkus Langchain Améliorations du search, replication cross site, la console, tracing, l'Operateur Kubernetes … Support du Protobuf 3 avec la release de Protostream 5 et meilleur API Outillage Ne pas signer ses commits cryptographiquement ? https://blog.glyph.im/2024/01/unsigned-commits.html L'article cite comme seul avantage d'avoir le petit badge vert sur Github indiquant “vérifié” Responsabilité future inconnue et potentiellement illimitée pour les conséquences de l'exécution du code dans un commit que vous avez signé. Renforcement implicite de GitHub en tant qu'autorité de confiance centralisée dans le monde de l'open source. Introduction de problèmes de fiabilité inconnus dans l'infrastructure qui repose sur les signatures de commit. Une violation temporaire de vos identifiants GitHub entraîne désormais des conséquences potentiellement permanentes si quelqu'un parvient à y introduire une nouvelle clé de confiance. Nouveau type de surcharge de processus continu : les clés de signature de commit deviennent une nouvelle infrastructure permanente à gérer, avec de nouvelles questions comme « que faire des clés expirées », « à quelle fréquence dois-je les renouveler », etc. on peut empecher de pousser des commits non signés Sécurité Des modèles avec des backdoors uploadés sur hugging faces non détecté. https://arstechnica.com/security/2024/03/hugging-face-the-github-of-ai-hosted-code-that-backdoored-user-devices/ par les chercheurs de JFrog Une centaine détectés dont 10 malicieux Des tests de chercheurs mais un faisant un reverse ssh S'appuye sur le format de serialisation pickle en python. Populaire mais connu comme dangereux Une première side attack channel sur les LLMs https://arstechnica.com/security/2024/03/hackers-can-read-private-ai-assistant-chats-even-though-theyre-encrypted/ cela s'appuie sur la taille des packets chiffrés envoyés et leur timing pour détecter la longueur des tokens Ensuite un LLM spécialisé reconstruit la suite de mots la plus probable vu la longueur C'est du à l'UX qui envoie les tokens au fil de l'eau Ć'est facilement corrigeable en rendant les paquets de taille fixe et en ajoutant du hasard de délai d'envoie. Mais c'est rigolo comment les LLMs peuvent amplifier les side channel attacks Architecture Netflix et Java https://www.infoq.com/presentations/netflix-java/ Netflix est un java shop La “stack NEtflix” connue du public a beaucoup evolué Pleins de microservices Gen1: groovy en gateway front end for backend , RxJava et Histrix Gen2: GraphQL et GraphQL federé ; plus de reactif sand dans la gateway Java 17 : 2800 apps java utilisent Azul JDK avait du Java 8 sur du guice et app custom utilisent G1, Java 17 = -20% CPU et Shenandoah pour la gateway Zuul Plans pour Java 21 (ZGC, virtual threads) apres speculatif Ils ont standardisé sur Spring Boot il n'y a pas si longtemps Un long article sur les microservices https://mcorbin.fr/posts/2024-02-12-microservice/ encore un me direz vous oui amis si vous etre en pleine crise existentielle avec votre equipe c'est du mon materiel il va sur les points importants comme synchrone vs asynchrone, les patterns de communication, la copie de données, comment tester le “monotithe” ou plutot comment ne pas le faire etc c'est un peu long mais ca recadre bien Méthodologies Opinion: est-ce qu'on peut devenir dev à partir de 40 ans https://www.codemotion.com/magazine/dev-life/can-you-become-a-programmer-after-40/?utm_source=ActiveCampaign&utm_medium=email&utm_content=5+Frontend+Trends+we+Didn+t+See+Coming+in+2024&utm_campaign=NL_EN_240215+%28Copy%29&vgo_ee=sFCRn4bbw8NuvJwlxj4PgXiVS4eICnA1ZPdkH4DGKyhNNwh6NQ%3D%3D%3Au3g96%2Fz3Uf7kZHAF7tezy9Y0ZJ6paAsE programmeur de CSS a 40 ans, je sais pas :stuck_out_tongue_winking_eye: l'auteur regrette les pubs pour devenir ev a 40 ansd facilement developpeur c'est beaucoup de connaissance et de travail et doit etre un choix, pas un choix pas default ou facile ils decrit certains biais comme un 20 ans sans experience est plus pardonné qu'à 40, le temps a y consacré est différent etc compensé par des actes de motivation (GitHub, participation open source, meetups etc) mais le temps d'apprendre de ces erreurs n'as pas vraiment de court circuit bref une fonrmation c'est bien mais aps suffisant Navigate your own way https://www.infoq.com/presentations/lessons-opportunities-carrier/ IBMer for 21 years. I'm a Java champion Réfléchir à sa carrière en mode time box, chercher sa promotion ? Tu peux décider ton chemin Momentum pandémie ça lui a fait bcp réfléchir sur sa vie et où elle était. Moment où elle quittait IBM pour aller vers RH (cœur se brise) Essentiels pour prendre ton propre chemin Se connaître soit même, reconnaître les différences avec les autres connaître tes valeurs: c'est quoi important pour toi, c'est quoi qui te motive, ce qui te démotive. Écrire des mots Se fixer des objectifs avec l'aide des autres Repusher ses limites, sur des sujets dont tu penses que ce n'est pas possible pour toi Participe activement, entoure toi bien Un talk très personnel et inspirant Un article sur le trouble TDAH chez le développeur adulte https://rlemaitre.com/fr/posts/2023/11/hacker-le-tdah-strat%C3%A9gies-pour-le-d%C3%A9veloppeur-moderne/ Diagnostiqué à 44 ans Schéma d'inattention et d'hyperactivite/implusivite qui interfere avec le fonctionnement Affecte le fonctionnement social scolaire ou professionnel Non diagnistiqué: burn out anxiété ou depression Souvent non diagnostiqué jusqu'à ce que se propres enfants soient diagnostiqués Mais cela amène du positif: hyperfocus, resolution creative de problèmes, adaptation rapide aux changements qui sont du pain béni Le négatif c'est la gestion du temps, organisation, instabilité Discute ensuite les phénomènes dans le cerveau Et donne des techniques et des pièges à éviter Vous avez sûrement des collègues TDAH ou l'êtes-vous meme Conférences La liste des conférences provenant de Developers Conferences Agenda/List par Aurélie Vache et contributeurs : 14-15 mars 2024 : pgDayParis - Paris (France) 17-18 mars 2024 : Cloud Native Rejekts EU 2024 - Paris (France) 19 mars 2024 : AppDeveloperCon - Paris (France) 19 mars 2024 : ArgoCon - Paris (France) 19 mars 2024 : BackstageCon - Paris (France) 19 mars 2024 : Cilium + eBPF Day - Paris (France) 19 mars 2024 : Cloud Native AI Day Europe - Paris (France) 19 mars 2024 : Cloud Native StartupFest Europe - Paris (France) 19 mars 2024 : Cloud Native Wasm Day Europe - Paris (France) 19 mars 2024 : Data on Kubernetes Day - Paris (France) 19 mars 2024 : Istio Day Europe - Paris (France) 19 mars 2024 : Kubeflow Summit Europe - Paris (France) 19 mars 2024 : Kubernetes on Edge Day Europe - Paris (France) 19 mars 2024 : Multi-Tenancy Con - Paris (France) 19 mars 2024 : Observabiity Day Europe - Paris (France) 19 mars 2024 : OpenTofu Day Europe - Paris (France) 19 mars 2024 : Platform Engineering Day - Paris (France) 19 mars 2024 : ThanosCon Europe - Paris (France) 19 mars 2024 : PaaS Forward by OVHcloud | Rancher by SUSE - Paris (France) 19-21 mars 2024 : CloudNativeHacks - Paris (France) 19-21 mars 2024 : IT & Cybersecurity Meetings - Paris (France) 19-22 mars 2024 : KubeCon + CloudNativeCon Europe 2024 - Paris (France) 21 mars 2024 : IA & Data Day Strasbourg - Strasbourg (France) 22-23 mars 2024 : Agile Games France - Valence (France) 26-28 mars 2024 : Forum INCYBER Europe - Lille (France) 27 mars 2024 : La Conf Data | IA - Paris (France) 28-29 mars 2024 : SymfonyLive Paris 2024 - Paris (France) 28-30 mars 2024 : DrupalCamp Roazhon - Rennes (France) 4 avril 2024 : SoCraTes Rennes 2024 - Rennes (France) 4-6 avril 2024 : Toulouse Hacking Convention - Toulouse (France) 8 avril 2024 : Lyon Craft - Lyon (France) 9 avril 2024 : Unconf HackYourJob - Lyon (France) 11 avril 2024 : CI/CDay - Paris (France) 17-19 avril 2024 : Devoxx France - Paris (France) 18-20 avril 2024 : Devoxx Greece - Athens (Greece) 22 avril 2024 : React Connection 2024 - Paris (France) 23 avril 2024 : React Native Connection 2024 - Paris (France) 25-26 avril 2024 : MiXiT - Lyon (France) 25-26 avril 2024 : Android Makers - Paris (France) 3-4 mai 2024 : Faiseuses Du Web 3 - Dinan (France) 8-10 mai 2024 : Devoxx UK - London (UK) 16-17 mai 2024 : Newcrafts Paris - Paris (France) 22-25 mai 2024 : Viva Tech - Paris (France) 24 mai 2024 : AFUP Day Nancy - Nancy (France) 24 mai 2024 : AFUP Day Poitiers - Poitiers (France) 24 mai 2024 : AFUP Day Lille - Lille (France) 24 mai 2024 : AFUP Day Lyon - Lyon (France) 28-29 mai 2024 : Symfony Live Paris - Paris (France) 1 juin 2024 : PolyCloud - Montpellier (France) 6-7 juin 2024 : DevFest Lille - Lille (France) 6-7 juin 2024 : Alpes Craft - Grenoble (France) 7 juin 2024 : Fork it! Community - Rouen (France) 11-12 juin 2024 : OW2con - Paris (France) 12-14 juin 2024 : Rencontres R - Vannes (France) 13-14 juin 2024 : Agile Tour Toulouse - Toulouse (France) 14 juin 2024 : DevQuest - Niort (France) 18 juin 2024 : Tech & Wine 2024 - Lyon (France) 19-20 juin 2024 : AI_dev: Open Source GenAI & ML Summit Europe - Paris (France) 19-21 juin 2024 : Devoxx Poland - Krakow (Poland) 27 juin 2024 : DotJS - Paris (France) 27-28 juin 2024 : Agi Lille - Lille (France) 4-5 juillet 2024 : Sunny Tech - Montpellier (France) 8-10 juillet 2024 : Riviera DEV - Sophia Antipolis (France) 6 septembre 2024 : JUG Summer Camp - La Rochelle (France) 19-20 septembre 2024 : API Platform Conference - Lille (France) & Online 2-4 octobre 2024 : Devoxx Morocco - Marrakech (Morocco) 7-11 octobre 2024 : Devoxx Belgium - Antwerp (Belgium) 10 octobre 2024 : Cloud Nord - Lille (France) 10-11 octobre 2024 : Volcamp - Clermont-Ferrand (France) 10-11 octobre 2024 : Forum PHP - Marne-la-Vallée (France) 16 octobre 2024 : DotPy - Paris (France) 17-18 octobre 2024 : DevFest Nantes - Nantes (France) 17-18 octobre 2024 : DotAI - Paris (France) 6 novembre 2024 : Master Dev De France - Paris (France) 7 novembre 2024 : DevFest Toulouse - Toulouse (France) 8 novembre 2024 : BDX I/O - Bordeaux (France) Nous contacter Pour réagir à cet épisode, venez discuter sur le groupe Google https://groups.google.com/group/lescastcodeurs Contactez-nous via twitter https://twitter.com/lescastcodeurs Faire un crowdcast ou une crowdquestion Soutenez Les Cast Codeurs sur Patreon https://www.patreon.com/LesCastCodeurs Tous les épisodes et toutes les infos sur https://lescastcodeurs.com/
Nous sommes, William et moi-même, ravis aujourd'hui de recevoir dans le podcast Clément Escoffier et Julien Ponge, ce dernier pour la seconde fois. Tous deux émérites universitaires et Principal Software Engineer chez Red Hat, ils ne vont pas se contenter d'itérer les avantages de la programmation réactive mais aussi répondre à nos questions sur Quarkus et Mutiny.
Gravado dia: 12/03/2022. Eu falei sobre o FELIZ fim das máscaras, barbeiros carecas, a minha mente só MAQUINAR bobagens e analisei a grande guerra: RxJava vs Coroutines
00:00:00 - Быстрый recap предыдущего эпизода.00:01:01 - Design Pattern. Dependency Injection.00:21:40 - Детальней об Observer. Reactive streams. Flow, RxJava, LiveData. Ещё о Dependency Injection. Dagger, Koin, Kodein, Hilt.00:37:49 - Architecture. MVVM, MVP, MVI, Clean Architecture. 00:42:17 - Оффтоп о том, как на хабре писали о способах определить плохого программиста.00:52:02 - Network. Okio, OkHttp, Retrofit, Ktor, Apollo-Android.ASP-34: Design Pattern (GoF) это зло в современном мире? Шаблоны программирования. - https://androidstory.buzzsprout.com/1086191/7723159-asp-34-design-pattern-gofКомментарии и пожелания можно оставлять в нашем телеграмм чате.
Рассказываю о трендах Android разработки в 2022: Jetpack Compose, Android View, RxJava, Coroutines, архитектура приложений и пр.
Antonio, Guillaume et Emmanuel discutent 11, le 42 du rockeur, Quarkus, Java 17, limites de Kubernetes, #Y2k22, web3, Maven, Log4J, et et et cloud souverain. Enregistré le 14 janvier 2022 Téléchargement de l'épisode LesCastCodeurs-Episode–271.mp3 News Langages Quoi de neuf dans Java 18 de Loïc Mathieu Feature complete (mais encore des bugs) UTF–8 par défaut exemples de code dans la javadoc avec @snippet y compris des references a des fichiers extérieurs Simple Web Server pour des resources statiques (comme d'autres platformes comme Ruby ou Python je crois. En code ou via la commande jwebserver le mécanisme de finalisation proposé à la suppression --finalization=disabled pour tester. Celui-là il ne nous manquera pas ré-implementation de la réflection avec les MethodHandle Le calendrier de l'Avent Java 2021 a plein d'articles très intéressants pas tous révolutionnaires, mais c'est sympa RXJava vs Kotlin Coroutines Analyser votre repo Git en Java avec jgit Cinq choses que vous ne saviez pas sur la concurrence en Java l'ordre du programme et l'ordre d'exécution n'est pas le même, mais il est sémantiquement similaire le nombre de threads dans une JVM est limité (dépend de la machine) plus de threads ne veut pas dire plus de perfs Librairies Quarkus 2.5 et 2.6 sont sortis: API programmatique pour interagir avec le cache Kotlin 1.6 Java 17 par défaut pour les nouveaux projets générés des extensions ont bougé du core vers le quarkiverse hub, peut-être quelques impacts de migration images container plus petites en natif et compression UPX possible plus petit sur disque mais plus gros en memoire (pour la décompression) quarkus.native.compression.level de 1 à 10 dans le fichier de config dev service pour Oracvle DB Utiliser Neo4J pour analyser le chemin de code et pourquoi un bout de code est inclus en natif super utile pour les compilations natives quarkus.native.enable-reports pour avoir le rapport exploitable par neo4j SmallRye Stork service discovery et client side load balancing support pour Consul, Eureka, and Kubernetes extensible notamment pour le load balancing intégration avec Quarkus REST Client et gRPC dans la config stork://hello-service Infrastructure Pourquoi et comment de la taille des containers Kubernetes quand on ne partage pas, inefficient mais sécurisé Avec des VM, on peut overcommitter des resources sur l'hyperviseur mais risque sur mésentente Ne remplace pas le capacity planning Containers définissent des filtrages plus fins et tuent les process qui dépassent Discussion cpu_share (proportion en balance), cpu quota, cpu period pour définir les limites basses et hautes mais si ça reste statique par host c'est pas très pratique Orchestration de container via Kubernetes (request = min, limit = max) Kube donne au minimum request mais peut donner plus si le noeud n'est pas occupé à 100% Attention, la partie libre n'est pas distribuée équitablement mais en proportion du ratio de request demandé vs les autres. Donc les containers avec des grosses request sont privilégiés. Donc mettre limit est important Donc jouer le jeu request et monitored pour ajuster à la baisse si nécessaire. Tous les workloads doivent jouer le jeu. Kubernetes QoS (best effort , burstable et guaranteed) utilisé lorsque on tourne bas en mémoire (pas en cpu !) Discussion de la sélection du noeud (selector, affinity, taints and tolerations ou isolation/ restriction) pour isoler des qualités de service ou prédictabilité, pour la sécurité etc ) besoins mémoire : si utilisation max, pod killed. Besoins CPU : si utilisation max, on est throttled -> slow Mettre mémoire request = limit sauf si le process peut rendre de la mémoire (pas fait avant java 11) CPU request = limit si la prédictabilité de l'application est très important. Etudier conso CPU de l'appli en percentile et targeted par exemple une garantie à 99% ou 90 ou moins si pas sensible Article ne parle pas du scale out Exchange 2016 et 2019 souffrent du bug de l'an 2022 Y2K22 Après Matrix et son opus Resurection, Microsoft relance le bug de l'an 2000, 22 ans après, Y2k22 dans Exchange server 2016 et 2019 et d'autres systems non microsoft pour Exchange c'est du au systeme de scan d'antivirus qui ne reconnaissait pas les dates des signatures de virus 22010100001 parce que le software stocke les dates dans un entier signé 2^31-1=2147483647 et la date est stockée sur les deux premiers chiffres. le workaround initial est assez marrant, le software considère qu'on est le 33 décembre 2021 2112330001 Web Moxy de Signal (ex) discute web3 web1 était décentralisé, web2 est riche mais centralisé, web3 sera riche et décentralisé problème: les gens n'aiment pas faire tourner leurs propres serveurs et ne l'aimeront jamais même les entreprises ne font plus tourner leurs serveurs un protocole (standard) bouge beaucoup plus lentement qu'une plateforme exemple Spring, exemple Quarkus vs Microprofile ou Jakarka EE puis discute blockchain et NFT l'état et la logique / les permissions pour mettre a jour sont décentralisées mais pas l'interface avec l'utilisateur blockchain est une confiance entre serveurs plus qu'entre clients avec le mobile, les clients ne peuvent pas acter en tant que server (voir Bitcoin) donc des gens vendent des accès centralisés aux noeuds de la blockchain et les clients de ses APIs ont une confiance implicite (et pas par le système) et centralisation des accès et donc mining de ces informations NFTs stockent l'URL de l'objet (sans hash) donc pas sécurisé sans parler du rachat de domaine il a fait un NFT qui se change en émoji caca pour celui qui l'a acheté et il s'est fait virer son NFT ET sa preuve de possession mais c'est une blockchain ??? sauf que le wallet passe par des fournisseurs centralisés pour faire web3, les gens se concentrent autour de plateformes, un comportement tres web2 donc la blockchain et NFT ont du succès pas parce que c'est distribué mais parce que c'est un gold rush la dynamique rend les projets web3 successful mais fondamentalement les mêmes dynamiques vont les centraliser propositions accepter que les gens ne font pas tourner leur serveurs et utiliser la crypto pour distribuer la confiance Outillage Maven 3 à 5 une explication le POM est figé parce c'est ce que publie maven central, donc maven 3 ne fera que des améliorations mineures Maven 5 la proposition: avoir un POM de build (v5) et produire un POM de consommation en v4, comme les autres systèmes de builds font Maven 4 va faire la meme séparation mais en faisant un POM v4 build to PO)M v4 consumer conversion en étape intermédiaire maven 4 alpha 1 se rapproche, il attend juste des contributions de @aheritier blog de Hervé Boutemy Maven Wrapper (ex takari) est désormais un projet officiel apache maven : https://maven.apache.org/wrapper/maven-wrapper-plugin/ idem pour Maven Daemon https://github.com/apache/maven-mvnd Le maven Build Cache arrive : https://github.com/apache/maven-build-cache-extension Sécurité Comme prévu, la saga log4j continue avec Log4j 2.17 et 2.17.1 avec l'augmentation de la visibilité, plus de problèmes vont être trouvés Log4J 2.17 corrige un appel récursif infini exploitable en déni de service. Besoin d'avoir un pattern non standard dans la config (utilisant les context lookup) et un accès au Thread Context Map par l'attaquant (5.9) https://logging.apache.org/log4j/2.x/security.html#CVE-2021-45105 Log4J 2.17.1 fixe un abus du JDBCAppender qui peut référencer une URL JNDI et executer du code a distance mais l'attaquant doit pouvoir modifier la configuration de log4j (6.6) https://logging.apache.org/log4j/2.x/security.html#CVE-2021-44832 doit-on quitter le navire ? équilibre entre fonctionnalités et sécurité on fera un épisode spécial log4Shell bientôt H2 vulnérable à une attaque JNDI fondamentalement comme log4shell Mais exploitable pour ceux qui passent une url ou un login mot de passe via des infos utilisateur Par exemple h2 console Mais localhost par défaut Sauf dans jhipster Loi, société et organisation Tribune de Didier Girard sur le cloud souverain investissement de 1,8 milliards sur 4 ans dans le cloud français sur 4 ans. C'est moins que chaque grand cloud provider par an consortiums européens mais mauvaise histoire CloudWatt, Gaia-x et ses problèmes de gouvernance initiative Soutenu par la dépense publique Cloud de confiance est un moyen pour Didier du transfert technologique et de casser l'asymétrie de compétence et d'investissement Ça répond pas aux problèmes clés levés par Quentin dans l'interview La Maison Blanche demande à Oracle et Microsoft de réfléchir à la sécurisation des logiciels libres Outils de l'épisode Rambox en general je préfère les applis natives pour chaque service Mais avec les messageries instantanées c'est la chianlie Et il y a les apps qui sont des tabs dans le navigateur (Trello, Gmail, calendar etc) Là tout est centralisé dans une seule app (notifications etc) C'est comme un mini browser dédié avec des sites webs fixes Et contre toute attente j'aime bien Version gratuite et version pro. Encore des limitations (vue de deux apps en parallèle) mais ils travaillent à une nouvelle version Conférences Sunny Tech à Montpellier le 30 juin et 1er juillet — CfP ouvert jusqu'au 28 février Nous contacter Soutenez Les Cast Codeurs sur Patreon https://www.patreon.com/LesCastCodeurs Faire un crowdcast ou une crowdquestion Contactez-nous via twitter https://twitter.com/lescastcodeurs sur le groupe Google https://groups.google.com/group/lescastcodeurs ou sur le site web https://lescastcodeurs.com/
Julien Ponge joins us to discuss the performance of the three major reactive streams compliant libraries used in Java applications: RxJava, Project Reactor, and SmallRye Mutiny.
Deux A et un E discutent des nouvelles de l'été et de la rentrée. #JDK17 #scala #Kotlin #spring6 #dockerdesktop #fitdesk et encore d'autres sujets. Enregistré le 10 septembre 2022 Téléchargement de l'épisode LesCastCodeurs-Episode–263.mp3 News Langages Au revoir AdopOpenJDK, bonjour Adoptium Eclipse Temurin runtimes pour la partie JDK Grosse test suite License oracle (que Adopt OpenJDK avait perdu) Plus de OpenJ9 ni GraalVM (Oracle recule) mais IBM a Rapatrié OpenJ9 sous le nom IBM Semurin Nouvelles API (backward compatibles ?) Les anciens builds ne seront pas migrés Une interview des architectes Java Java longevity: stability (not removing things), readability, ecosystem' well defined stable interfaces (JVM etc) Nouvelles fonctionnalités : qu'est que qui ne peut être fait en dehors de la plateforme Rendre Java plus extensible (Valhalla) Bloque en Java 8 Perds argent (meilleure mémoire, performance, temps de démarrage, pauses 2ms G1 etc Sécurité Loom Réactive programming pour mieux utiliser le,hardware Mais opposé à certains designs de la JVM (error report, débug, flight recorder) Loom résout le même problème mais en harmonie avec la JVM Api familières Next Vallalah , panama Tail call recursion Etc Article en passant sur l'utilisation du foreign API avec libsodium juste une mention Quoi de neuf dans Scala 3 Scala 3.0.1 Syntaxe given simplifiée (pas de with) @experimental Scala 3.1 Experimental safer exception (checked exceptions mais sans les ennuis) Warnings de compilation plus configurable Multiversal equality (des classes différentes qui peuvent être égales) Kotlin a 10 ans annoncé en 2011, 1.0 en 2016, default Android en 2017 pas theorique, problemes pragmatiques multi plateforme encore experimental, on prend notre temps ajoutent features dans le core lib plus lentement que Java prochains 10 ans: multiplatforme, langage reste relevant, reactive programming et immuabilité du front vers le back Librairies Spring 6 / SpringBoot 3 annoncé à SpringOne Java 17 et plus Intègre Spring Native Tomcat 10 min Jakarta 9 avec cassage de packages Q4 2022 Spring 5.3 et SpringBoot 2.7 seront en maintenance open source entendue Autre lien Quarkus 2.2 et 2.1 2.2 Solidification (utilisabilite, doc, corriger problèmes) Mongodb service binding RESTEasy Réactive automatiquement choisi le thread bloquant ou non bloquant Plus facile quand on vient de RESTEasy Classic Détails ici 2.1 Dev services pour keycloak SQLServer réactive a son extension Kotlin 1.5 Blog post expliquant les nouvelles modularités de quarkus platform Micronaut 3 est sorti RxJava n'est plus un dépendance transitive (choix du moteur réactive streams) Utilisent Reactor en dessous Les annotations ne sont plus héritées par défaut Support Jakarta lifecycle annotations, Jakarta inject Injection qualifiée par le generic des arguments Filtres servers plus consistant (appelés une seule fois) @Introspected ne rajoute plus les metadonnes pour GraalVM, utiliser @ReflectiveAccess Ajout des resources passe du compile time au build time donc utilisez les plugins maven de Micronaut ou faite le vous même Quelques autres breaking changes OpenRewrite règles changent le code pour migrer pour vous Infrastructure Comment debugger son script Ansible --step In-line logging Ansible-lint Ansible-console Ansible debugger Cloud Apple nous protégeras des photos pedophiles mais en ouvrant une brèche sur la sécurité de ses téléphones Une analyse techniques Il y a deux choses distinctes Détecter les images d'une base de donnée pedophile avec du hash sur le téléphone et en alertant quand trop'sonr flaggues positive (avec check humain) Ça s'appuie sur iCloud photo car sur leur cloud mais pas un filtre serveur Base de donnée Baked dans chaque iOS NeuralHash Hash résiste au ré cadrage et autres ajustement de photos Threshold secret sharing Au bout de n rapports remontés, on a capacité à reconstituer la clef de chiffrement Et un troisième mécanisme pour éviter de montrer qu'elles photos intéressent Apple Quid d'une puissance étrangère qui veut rajouter des photos de discidents? Apple dit on n'acceptera pas Où attaque sur le neural hash Détection de nudité et demande si l'nfznt veut voir avec alerte aux parents Ils se donnent quelques mois de retravail au final AWS a 15 ans demarre avec une region, un seul type d'instance et tout ephemère (pas de block storage) peu de feature et peu de details initialement prix a l'heure initialement qui etait innovant Data La guerre de la recherche - Les clients Elastic Search ne seront pas compatible avec OpenSearch Elastic vs AWS - Clash numéro ? Dans ce dernier épisode, Elastic rajoute des controles dans ses APIs clientes pour ne se connecter qu'a ses propres clusters et empêcher de les utiliser avec opensearch. Risques d'incompatibilité Manque de chance ce changement bloque aussi l'utilisation de la version OSS d'elastic-search. De son coté AWS promet de faire son possible pour fournir des drivers qui resteront compatibles Elasticsearch 7.10.2 (la version à partir de laquelle ils ont forké) et OpenSearch Bref la guerre continue … Outillage AtomicJar release TestContainers 1.16 https://www.atomicjar.com/2021/07/testcontainers–1–16–0-release/ Test Containers 1.16.0 est la première release faite par AtomicJar, la société créée par les fondateurs du projet. Meilleure compatibilité Apple M1 Couche de transport utilise Apache HTTP Client 5 au lieu de OKHTTP pour éviter la malediction Kotlin Meilleure stabilité et compatibilité sur Windows pour process natifs Windows et WSL 2 docker.host peut etre configuré dans $HOME/.testcontainers.properties Aussi Support Podman amélioré récemment Docker introduit un nouveau système d'abonnement avec Docker Business et différents niveaux: perso, pro, entreprise etc donc pour les boites de plus de 250 personnes ou qui font 10 millions, tu dois payer pour Docker Desktop Des articles paraissent listant les alternatives à Docker Desktop Sur l'impact macOS How Docker broke in half Les différentes manières de déclarer les dépendances dans son projet Gradle En particulier, les différences entre api, implementation, runtimeOnly, compileOnly, compileOnlyApi Avec des exemples concrets pour bien illustre ces différents scopes. Gradle regroupe les dépendances dans des ensembles appelés des “configurations”. Ces configurations définissent le classpath lors de la compilation, ou le classpath pour le runtime lorsque votre code s'exécute. Gradle définit 3 types de configuration : api, implementation et runtimeOnly La configuration “api” est utilisée pour le classpath compilation et runtime et est exposé aux consommateurs de l'API aussi pour le classpath de compilation et runtime La configuration “implementation” est utilisée pour le classpath de compilation et runtime, mais est exposée pour le consommateur de l'API que pour le classpath au runtime La configuration “runtimeOnly” n'est utilisée que pour le classpath au runtime La configuration “compileOnly” est utilisée pour le classpath de compilation, mais n'est pas exposée pour les consommateurs Enfin la configuration “compileOnlyApi” est utilisée pour le classpath de compliation et est exposée au consommateurs à la compilation de leur code quand les metadata Gradle sont utilisées Méthodologies Opinion sur Googlespeak et les pratiques anti concurrentielles Certains dont l'auteur voient Google utiliser Google search pour placer hautement leur propres services alternatifs. Google flight etc Et les Googlers avec qui il interagissait trouvait ça « absurde » de penser ça. Chercher un hôtel Étude montre que Google offre 41% de sa première page à ses propres propriétés (inclus direct answers ) Direct answer est mis rapide pour l'utilisateur mais prend le contenu 3rd party ( Wikipedia, IMDb etc) et nous fait rester sur une page Google. Googlespeak d'après Orwell. Si le langage ne permet pas d'exprimer , on ne pense pas aux choses. Pas dominant mais succès. Pas barrière à l'entrée , marché, effet réseau qui sont taboo dans un contexte de tension antitrust Encourage à réfréner sa communication écrite. Comme beaucoup de sociétés américaines à cause du processus de discovery Market share -> user preference Apple et epic ont levés des doc similaires mais Apple n'était pas gardé dans sa comm interne. Autour de l'app store. Google dans ses formation mention non monopoly car beaucoup de compétiteurs. Et se defini en termes très large et donc avec de la compétition. (Dans la pub et dans la recuperation d'information. Ils ne font pas d'analyse de marchés (sur les marchés dominants) quand demandés par le congrès. 65% des recherches n'entraînent pas un clic sur un site externe - valeur réfutée par Google C'est une réaction à la judiciarusarion de la vie des entreprises. Loi, société et organisation Matt Asay quitte AWS et reflecte sur l'open source chez AWS pleins de petites equipes et pas de décisions top down en tous cas pas pour open source Un langage specifique a Amazon pour convaincre Les Leadership Principles tendent à ne pas investir dans les elements side de type open source et quand on a deux pizza team, peut on contribuer sans se sentir trop contraint en temps si c'est une équipe de 12 sur 200 equipes ca ne m'étonnes pas trop
Deux A et un E discutent des nouvelles de l'été et de la rentrée. #JDK17 #scala #Kotlin #spring6 #dockerdesktop #fitdesk et encore d'autres sujets. Enregistré le 10 septembre 2021 Téléchargement de l'épisode [LesCastCodeurs-Episode-263.mp3](https://traffic.libsyn.com/lescastcodeurs/LesCastCodeurs-Episode-263.mp3) ## News ### Langages [Au revoir AdopOpenJDK, bonjour Adoptium](https://blog.adoptopenjdk.net/2021/08/goodbye-adoptopenjdk-hello-adoptium/) * Eclipse Temurin runtimes pour la partie JDK * Grosse test suite * License oracle (que Adopt OpenJDK avait perdu) * Plus de OpenJ9 ni GraalVM (Oracle recule) mais IBM a [Rapatrié OpenJ9 sous le nom IBM Semurin](https://developer.ibm.com/languages/java/semeru-runtimes/) * Nouvelles API (backward compatibles ?) * Les anciens builds ne seront pas migrés [Une interview des architectes Java](https://blogs.oracle.com/javamagazine/java-architects-loom-panama-valhalla?source=:em:nw:mt::::RC_WWMK200429P00043C0036:NSL400176960) * Java longevity: stability (not removing things), readability, ecosystem' well defined stable interfaces (JVM etc) * Nouvelles fonctionnalités : qu'est que qui ne peut être fait en dehors de la plateforme * Rendre Java plus extensible (Valhalla) * Bloque en Java 8 * Perds argent (meilleure mémoire, performance, temps de démarrage, pauses 2ms G1 etc * Sécurité * Loom * Réactive programming pour mieux utiliser le,hardware * Mais opposé à certains designs de la JVM (error report, débug, flight recorder) * Loom résout le même problème mais en harmonie avec la JVM * Api familières * Next * Vallalah , panama * Tail call recursion * Etc [Article en passant sur l'utilisation du foreign API avec libsodium](https://blog.arkey.fr/2021/09/04/a-practical-look-at-jep-412-in-jdk17-with-libsodium/) * juste une mention [Quoi de neuf dans Scala 3](https://medium.com/scala-3/scala-3-whats-changed-since-scala-3-0-0-be0830c059f5) * Scala 3.0.1 * Syntaxe given simplifiée (pas de with) * `@experimental` * Scala 3.1 * Experimental safer exception (checked exceptions mais sans les ennuis) * Warnings de compilation plus configurable * Multiversal equality (des classes différentes qui peuvent être égales) [Kotlin a 10 ans](https://www.infoq.com/articles/kotlin-ten-years-qa/?utm_campaign=infoq_content&utm_source=twitter&utm_medium=feed&utm_term=mobile) * annoncé en 2011, 1.0 en 2016, default Android en 2017 * pas theorique, problemes pragmatiques * multi plateforme encore experimental, on prend notre temps * ajoutent features dans le core lib plus lentement que Java * prochains 10 ans: multiplatforme, langage reste relevant, reactive programming et immuabilité du front vers le back ### Librairies [Spring 6 / SpringBoot 3 annoncé à SpringOne](https://twitter.com/mraible/status/1433072410182357000?s=21) * Java 17 et plus * Intègre Spring Native * Tomcat 10 min * Jakarta 9 avec cassage de packages * Q4 2022 * Spring 5.3 et SpringBoot 2.7 seront en maintenance open source entendue * [Autre lien](https://spring.io/blog/2021/09/02/a-java-17-and-jakarta-ee-9-baseline-for-spring-framework-6) [Quarkus 2.2 et 2.1](http://quarkus.io/blog/quarkus-2-2-1-final-released/) * 2.2 Solidification (utilisabilite, doc, corriger problèmes) * Mongodb service binding * RESTEasy Réactive automatiquement choisi le thread bloquant ou non bloquant * Plus facile quand on vient de RESTEasy Classic * [Détails ici](https://quarkus.io/blog/resteasy-reactive-smart-dispatch/) * 2.1 * Dev services pour keycloak * SQLServer réactive a son extension * Kotlin 1.5 * [Blog post expliquant les nouvelles modularités de quarkus platform](http://quarkus.io/blog/quarkus-2x-platform-quarkiverse-registry/) [Micronaut 3 est sorti](https://micronaut.io/2021/08/18/micronaut-framework-3-released/) * RxJava n'est plus un dépendance transitive (choix du moteur réactive streams) * Utilisent Reactor en dessous * Les annotations ne sont plus héritées par défaut * Support Jakarta lifecycle annotations, Jakarta inject * Injection qualifiée par le generic des arguments * Filtres servers plus consistant (appelés une seule fois) * `@Introspected` ne rajoute plus les metadonnes pour GraalVM, utiliser `@ReflectiveAccess` * Ajout des resources passe du compile time au build time donc utilisez les plugins maven de Micronaut ou faite le vous même * Quelques autres breaking changes * OpenRewrite règles changent le code pour migrer pour vous ### Infrastructure [Comment debugger son script Ansible](https://zwischenzugs.com/2021/08/27/five-ansible-techniques-i-wish-id-known-earlier/) * `--step` * In-line logging * Ansible-lint * Ansible-console * Ansible debugger ### Cloud [Apple nous protégeras des photos pedophiles mais en ouvrant une brèche sur la sécurité de ses téléphones ](https://www.apple.com/child-safety/) * [Une analyse techniques](https://twitter.com/MathisHammel/status/1425523073806110720) * Il y a deux choses distinctes * Détecter les images d'une base de donnée pedophile avec du hash sur le téléphone et en alertant quand trop'sonr flaggues positive (avec check humain) * Ça s'appuie sur iCloud photo car sur leur cloud mais pas un filtre serveur * Base de donnée Baked dans chaque iOS * NeuralHash * Hash résiste au ré cadrage et autres ajustement de photos * Threshold secret sharing * Au bout de n rapports remontés, on a capacité à reconstituer la clef de chiffrement * Et un troisième mécanisme pour éviter de montrer qu'elles photos intéressent Apple * Quid d'une puissance étrangère qui veut rajouter des photos de discidents? * Apple dit on n'acceptera pas * Où attaque sur le neural hash * Détection de nudité et demande si l'nfznt veut voir avec alerte aux parents * Ils se donnent quelques mois de retravail au final [AWS a 15 ans](https://aws.amazon.com/fr/blogs/aws/happy-15th-birthday-amazon-ec2/) * demarre avec une region, un seul type d'instance et tout ephemère (pas de block storage) * peu de feature et peu de details initialement * prix a l'heure initialement qui etait innovant ### Data [La guerre de la recherche - Les clients Elastic Search ne seront pas compatible avec OpenSearch](https://thenewstack.io/this-week-in-programming-the-elasticsearch-saga-continues/) * Elastic vs AWS - Clash numéro ? Dans ce dernier épisode, Elastic rajoute des controles dans ses APIs clientes pour ne se connecter qu'a ses propres clusters et empêcher de les utiliser avec opensearch. * Risques d'incompatibilité * Manque de chance ce changement bloque aussi l'utilisation de la version OSS d'elastic-search. * De son coté AWS promet de faire son possible pour fournir des drivers qui resteront compatibles Elasticsearch 7.10.2 (la version à partir de laquelle ils ont forké) et OpenSearch * Bref la guerre continue ... ### Outillage [AtomicJar release TestContainers 1.16](https://www.atomicjar.com/2021/07/testcontainers-1-16-0-release/) * https://www.atomicjar.com/2021/07/testcontainers-1-16-0-release/ Test Containers 1.16.0 est la première release faite par AtomicJar, la société créée par les fondateurs du projet. * Meilleure compatibilité Apple M1 * Couche de transport utilise Apache HTTP Client 5 au lieu de OKHTTP pour éviter la malediction Kotlin * Meilleure stabilité et compatibilité sur Windows pour process natifs Windows et WSL 2 * docker.host peut etre configuré dans $HOME/.testcontainers.properties * Aussi Support Podman amélioré récemment [Docker introduit un nouveau système d'abonnement avec Docker Business et différents niveaux: perso, pro, entreprise etc](https://www.docker.com/blog/updating-product-subscriptions/) * donc pour les boites de plus de 250 personnes ou qui font 10 millions, tu dois payer pour Docker Desktop * [Des articles paraissent listant les alternatives à Docker Desktop](https://matt-rickard.com/docker-desktop-alternatives/) * [Sur l'impact macOS](https://twitter.com/idriss_neumann/status/1432943504485986305) * [How Docker broke in half](https://www.infoworld.com/article/3632142/how-docker-broke-in-half.html) [Les différentes manières de déclarer les dépendances dans son projet Gradle](https://medium.com/agorapulse-stories/gradle-configurations-explained-4b9608dd5e35) * En particulier, les différences entre api, implementation, runtimeOnly, compileOnly, compileOnlyApi Avec des exemples concrets pour bien illustre ces différents scopes. * Gradle regroupe les dépendances dans des ensembles appelés des “configurations”. Ces configurations définissent le classpath lors de la compilation, ou le classpath pour le runtime lorsque votre code s'exécute. * Gradle définit 3 types de configuration : api, implementation et runtimeOnly * La configuration “api” est utilisée pour le classpath compilation et runtime et est exposé aux consommateurs de l'API aussi pour le classpath de compilation et runtime * La configuration “implementation” est utilisée pour le classpath de compilation et runtime, mais est exposée pour le consommateur de l'API que pour le classpath au runtime * La configuration “runtimeOnly” n'est utilisée que pour le classpath au runtime * La configuration “compileOnly” est utilisée pour le classpath de compilation, mais n'est pas exposée pour les consommateurs * Enfin la configuration “compileOnlyApi” est utilisée pour le classpath de compliation et est exposée au consommateurs à la compilation de leur code quand les metadata Gradle sont utilisées ### Méthodologies [Opinion sur Googlespeak et les pratiques anti concurrentielles](https://zyppy.com/googlespeak/) * Certains dont l'auteur voient Google utiliser Google search pour placer hautement leur propres services alternatifs. Google flight etc * Et les Googlers avec qui il interagissait trouvait ça « absurde » de penser ça. * Chercher un hôtel * Étude montre que Google offre 41% de sa première page à ses propres propriétés (inclus direct answers ) * Direct answer est mis rapide pour l'utilisateur mais prend le contenu 3rd party ( Wikipedia, IMDb etc) et nous fait rester sur une page Google. * Googlespeak d'après Orwell. Si le langage ne permet pas d'exprimer , on ne pense pas aux choses. * Pas dominant mais succès. Pas barrière à l'entrée , marché, effet réseau qui sont taboo dans un contexte de tension antitrust * Encourage à réfréner sa communication écrite. * Comme beaucoup de sociétés américaines à cause du processus de discovery * Market share -> user preference * Apple et epic ont levés des doc similaires mais Apple n'était pas gardé dans sa comm interne. Autour de l'app store. * Google dans ses formation mention non monopoly car beaucoup de compétiteurs. Et se defini en termes très large et donc avec de la compétition. (Dans la pub et dans la recuperation d'information. * Ils ne font pas d'analyse de marchés (sur les marchés dominants) quand demandés par le congrès. * 65% des recherches n'entraînent pas un clic sur un site externe - valeur réfutée par Google * C'est une réaction à la judiciarusarion de la vie des entreprises. ### Loi, société et organisation [Matt Asay quitte AWS et reflecte sur l'open source chez AWS](https://www.infoworld.com/article/3631376/what-you-dont-know-about-working-with-aws.html) * pleins de petites equipes et pas de décisions top down * en tous cas pas pour open source * Un langage specifique a Amazon pour convaincre * Les Leadership Principles tendent à ne pas investir dans les elements side de type open source * et quand on a deux pizza team, peut on contribuer sans se sentir trop contraint en temps * si c'est une équipe de 12 sur 200 equipes ca ne m'étonnes pas trop ???? [L'Open Source au secours du développeur (et de l'architecte) ?](https://philippart-s.github.io/blog/articles/dev/oss-for-developer/), un retour d'expérience très personnel mais instructif pour ceux qui souhaiteraient se lancer ... * Pourquoi l'Open Source ? * Par où commencer ? * Le choix du premier projet pour sa première contribution? (Le syndrome de l'imposteur) * La première contribution * Rythme de travail ## Outils de l'épisode [Fit Desk](https://thefitdesk.com) * Antonio passe au [Fit Desk](https://thefitdesk.com) pour travailler en pédalant * Promis, il écrira un blog dans 4/6 mois avec du feedback ## Rubrique débutant [RISC vs CISC](https://medium.com/swlh/what-does-risc-and-cisc-mean-in-2020-7b4d42c9a9de) * CISC roi quand la mémoire est chère, on crée des instructions haut niveau plus complexes * RISC paye en mémoire mais simplifie la chaîne de travail (instructions de taille fixe) * RISC plus d'opérations et donc de CPU clock mais pipelining possible * RISC compensé par plus de registers et par la compression d'instructions set * register mémoire interne CPU de taille fixe * CISC fait du hardware hyper threading * RISC philosophiquement fait travailler les compilateurs beaucoup plus mais on ne code plus en assembleur ## Conférences Crowdcast sur devfest Lille et CloudNord par Emmanuel Demey [Pas de Devoxx Belgique en 2021](https://twitter.com/stephan007/status/1432254876436815874?s=21) ## Nous contacter Soutenez Les Cast Codeurs sur Patreon [Faire un crowdcast ou une crowdquestion](https://lescastcodeurs.com/crowdcasting/) Contactez-nous via twitter sur le groupe Google ou sur le site web
Arnaud, Antonio et Emmanuel discutent des actu du développeur en cette période pré estivale. Du Spring Boot, du Hibernate, du Vert.x, du web qui tombe, du Gradle 7, des mineurs et des méthodologies autour des pull requests. Enregistré le 11 juin 2021 Téléchargement de l'épisode LesCastCodeurs-Episode–258.mp3 News Langages GraalVM 21 sur InfoQ'France Un interpréter Java en Java Plus simple a debugger Avant ils utilisaient hotspot Reste projet Java en tant que container de javas Mélanger ahead of time et classique Java Librairies Spring Boot 2.5.0 est sorti Support for Java 16 Support for Gradle 7 Enhanced Docker image building New mechanism for Datasource initialisation pour préparer R2DBC Les dépendances mises à jour (Spring data, hateoas' spring Kafka et) En gros rien de révolutionnaire, beaucoup de mise à jour et du nettoyage Hibernate a 20 ans ! Première sortie Ça ne nous rajeuni pas Vert.x 4.1 est sorti Reactive Microsoft SQLServer driver Vert.x HTTP proxy plutôt que de l'écrire soit même RxJava 3 OpenTelemetry tracing Plus conforme à OAuth2 et OIDC Kotlin 1.5 Flexibilité dans la configuration de pools (plusieurs event loops par pool, waiter cancellation, lock free impl, etc Web session stocké dans Infinispan Et plus au niveau sécurité, openapi, service proxy Infrastructure Un problème chez Fastly et l'internet tousse Fastly est un CDN hoste beaucoup d'artefact de type NPM, Maven, JS resources etc consequence est sites defacé par manque de CSS ou JS, voir HTTP pages non accessibles bug declenché par une config client => fait tomber 85% du réseau Cloud Les services d'intelligence artificielle d'AWS ne respectaient pas le non déplacement des données hors de la région par défaut Et le défaut était très bien caché. Les experts AWS n'avaient pas fait gaffe C'était légal mais en tout petit dans les conventions Différence entre télémétrie et les données en propre en général. Pas pour les iA ;) Les services impacté AWS Terms 50.3 mention CodeGuru Profiler, Lex, Polly, Rekognition, Textract, Transcribe, and Translate. 60.4 also mentions this for SageMaker. 75.3 mentions this for Fraud Detector. 76.2 mentions this for Mechanical Turk and Augment AI. Web Vers un système unique et une API commune pour les extensions dans les navigateurs Des gens de Apple (Safari), Google (Chrome), Microsoft (Edge) et Mozilla (Firefox) vont collaborer ensemble, au sein du WECG Web extensions community group Base sur le travail de safari de supporter les extensions des autres navigateurs On a vu des défis et réduction de possibilités pour contrôler la sécurité et le tracking De toutes façons tout le monde est sur Chromium ahaha Outillage Gradle 7 est sorti et Cédric nous fait un crowdcast D'ailleurs, Cédric quitte Gradle Inc après des années de bons et loyaux services Prosus achète StasckOverflow pour 1,8 milliards Prosus avait déjà des parts dans des entreprises type Codeacademy, et Udemy, dans l'EDU/tech StackOverflow commence en 2008 Migration vers SaaS d StackOverflow intéresse Prosus Jobs 50% du revenu Team collaboration tool bonne croissance C'est stackoverflow pour les équipes internes docker hub autobuild, les crypto mineurs m'ont tué. En avril, nous avons vu le nombre d'heures de construction augmenter de 2 fois notre charge habituelle et à la fin du mois, nous avions déjà désactivé ~ 10 000 comptes en raison d'abus de minage. La semaine suivante, nous avons eu environ 2 200 mineurs supplémentaires. Il faut contacter Docker pour les projets OSS de bonne volonté qui ont besoin de ce service Méthodologies Le temps moyen de PR entre Stripe et Mozilla Des jours à attendre le feedback vs 10 minutes C'est un débat assez fondamental je trouve. Comment organiser les équipes pour que les PR soient vues comme la chose importante. Plus que « le code ». Différence Service vs product Loi, société et organisation Un article de rappel sur la copie privée Copie privée basse sur les cassettes et VHS. Ensuite le stockage numérique explose 270 millions d'euros en France en 2017 Une commission administrative fixe les règles. Composée. de 6 usagers, 6 vendeurs de stockage, 12 ayant droits et un président au droit de vote et pro ayant droit. Rapport de force clair Ils essaye de construire la vache à lait: prix basé sur la copie licite ou pas (cassé en 2008) ensuite argument de compression pour garder le barème haut En théorie que pour les particuliers et procédure de remboursement pour les pros. Mais difficile à appliquer donc quasi jamais fait. 25% des gains financent des festivals et manifestations culturelles : instrument d'influence des élus locaux et pas si locaux Efforts pour taper sur tous les disques durs nus, faire entrer dans le champ le stream ripping Et maintenant la copie privée sur la vente d'occasion. La grande classe. Risque pour l'économie solidaire qui sont sur des populations fragiles Le sénat veut favoriser l'écologie de la seconde main et serait pour l'exclusion de la taxe dans ce cas là. Les smartphones c'est 70% de leurs revenus Outils de l'épisode Google ZX pour écrire des scripts en JavaScript Conférences RivieraDev Nous contacter Soutenez Les Cast Codeurs sur Patreon https://www.patreon.com/LesCastCodeurs Faire un crowdcast ou une crowdquestion Contactez-nous via twitter https://twitter.com/lescastcodeurs sur le groupe Google https://groups.google.com/group/lescastcodeurs ou sur le site web https://lescastcodeurs.com/
Arnaud, Antonio et Emmanuel discutent des actu du développeur en cette période pré estivale. Du Spring Boot, du Hibernate, du Vert.x, du web qui tombe, du Gradle 7, des mineurs et des méthodologies autour des pull requests. Enregistré le 11 juin 2021 Téléchargement de l'épisode [LesCastCodeurs-Episode-258.mp3](https://traffic.libsyn.com/lescastcodeurs/LesCastCodeurs-Episode-258.mp3) ## News ### Langages [GraalVM 21 sur InfoQ'France](https://www.infoq.com/fr/news/2021/02/graalvm-21-jvm-java/?itm_source=infoq_en&itm_medium=link_on_en_item&itm_campaign=item_in_other_langs) * Un interpréter Java en Java * Plus simple a debugger * Avant ils utilisaient hotspot * Reste projet * Java en tant que container de javas * Mélanger ahead of time et classique Java ### Librairies [Spring Boot 2.5.0 est sorti](https://spring.io/blog/2021/05/20/spring-boot-2-5-is-now-ga) * Support for Java 16 * Support for Gradle 7 * Enhanced Docker image building * New mechanism for Datasource initialisation pour préparer R2DBC * Les dépendances mises à jour (Spring data, hateoas' spring Kafka et) * En gros rien de révolutionnaire, beaucoup de mise à jour et du nettoyage [Hibernate a 20 ans !](https://twitter.com/hibernate/status/1396425771040792577?s=21) * Première sortie * Ça ne nous rajeuni pas [Vert.x 4.1 est sorti](https://vertx.io/blog/eclipse-vert-x-4-1-0/) * Reactive Microsoft SQLServer driver * Vert.x HTTP proxy plutôt que de l'écrire soit même * RxJava 3 * OpenTelemetry tracing * Plus conforme à OAuth2 et OIDC * Kotlin 1.5 * Flexibilité dans la configuration de pools (plusieurs event loops par pool, waiter cancellation, lock free impl, etc * Web session stocké dans Infinispan * Et plus au niveau sécurité, openapi, service proxy ### Infrastructure [Un problème chez Fastly et l'internet tousse](https://www.fastly.com/blog/summary-of-june-8-outage) * Fastly est un CDN * hoste beaucoup d'artefact de type NPM, Maven, JS resources etc * consequence est sites defacé par manque de CSS ou JS, voir HTTP pages non accessibles * bug declenché par une config client => fait tomber 85% du réseau ### Cloud [Les services d'intelligence artificielle d'AWS ne respectaient pas le non déplacement des données hors de la région par défaut ](https://techmonitor.ai/techonology/cloud/aws-user-data) * Et le défaut était très bien caché. Les experts AWS n'avaient pas fait gaffe * C'était légal mais en tout petit dans les conventions * Différence entre télémétrie et les données en propre en général. Pas pour les iA ;) * Les services impacté AWS Terms 50.3 mention CodeGuru Profiler, Lex, Polly, Rekognition, Textract, Transcribe, and Translate. 60.4 also mentions this for SageMaker. 75.3 mentions this for Fraud Detector. 76.2 mentions this for Mechanical Turk and Augment AI. ### Web [Vers un système unique et une API commune pour les extensions dans les navigateurs](https://appleinsider.com/articles/21/06/04/apple-mozilla-google-microsoft-form-group-to-standardize-browser-plug-ins) * Des gens de Apple (Safari), Google (Chrome), Microsoft (Edge) et Mozilla (Firefox) vont collaborer ensemble, au sein du WECG * [Web extensions community group](https://www.w3.org/community/webextensions/) * Base sur le travail de safari de supporter les extensions des autres navigateurs * On a vu des défis et réduction de possibilités pour contrôler la sécurité et le tracking * De toutes façons tout le monde est sur Chromium ahaha ### Outillage [Gradle 7 est sorti et Cédric nous fait un crowdcast ](https://gradle.org/whats-new/gradle-7) * D'ailleurs, Cédric quitte Gradle Inc après des années de bons et loyaux services [Prosus achète StasckOverflow pour 1,8 milliards](https://stackoverflow.blog/2021/06/02/prosus-acquires-stack-overflow/) * Prosus avait déjà des parts dans des entreprises type Codeacademy, et Udemy, dans l'EDU/tech * StackOverflow commence en 2008 * [Migration vers SaaS d StackOverflow](https://siliconangle.com/2020/05/18/stack-overflow-ramps-up-saas-model-as-it-builds-relationships-with-microsoft-and-developers-cubeconversations/) intéresse Prosus * Jobs 50% du revenu * Team collaboration tool bonne croissance * C'est stackoverflow pour les équipes internes [docker hub autobuild, les crypto mineurs m'ont tué](https://www.docker.com/blog/changes-to-docker-hub-autobuilds/). > En avril, nous avons vu le nombre d'heures de construction augmenter de 2 fois notre charge habituelle et à la fin du mois, nous avions déjà désactivé ~ 10 000 comptes en raison d'abus de minage. La semaine suivante, nous avons eu environ 2 200 mineurs supplémentaires. * Il faut contacter Docker pour les projets OSS de bonne volonté qui ont besoin de ce service ### Méthodologies [Le temps moyen de PR entre Stripe et Mozilla](https://twitter.com/jlongster/status/1400511441556459523?s=21) * Des jours à attendre le feedback vs 10 minutes * C'est un débat assez fondamental je trouve. Comment organiser les équipes pour que les PR soient vues comme la chose importante. Plus que « le code ». * Différence Service vs product ### Loi, société et organisation [Un article de rappel sur la copie privée](https://www.nextinpact.com/article/30201/108870-la-redevance-copie-privee-vache-a-lait-industries-culturelles) * Copie privée basse sur les cassettes et VHS. Ensuite le stockage numérique explose * 270 millions d'euros en France en 2017 * Une commission administrative fixe les règles. Composée. de 6 usagers, 6 vendeurs de stockage, 12 ayant droits et un président au droit de vote et pro ayant droit. Rapport de force clair * Ils essaye de construire la vache à lait: prix basé sur la copie licite ou pas (cassé en 2008) ensuite argument de compression pour garder le barème haut * En théorie que pour les particuliers et procédure de remboursement pour les pros. Mais difficile à appliquer donc quasi jamais fait. * 25% des gains financent des festivals et manifestations culturelles : instrument d'influence des élus locaux et pas si locaux * Efforts pour taper sur tous les disques durs nus, faire entrer dans le champ le stream ripping * Et maintenant [la copie privée sur la vente d'occasion](https://actualitte.com/article/100640/politique-publique/copie-privee-les-appareils-reconditionnes-pomme-de-discorde). La grande classe. * Risque pour l'économie solidaire qui sont sur des populations fragiles * Le sénat veut favoriser l'écologie de la seconde main et serait pour l'exclusion de la taxe dans ce cas là. * Les smartphones c'est 70% de leurs revenus ## Outils de l'épisode [Google ZX pour écrire des scripts en JavaScript](https://t.co/kDnarh0A13) ## Conférences [RivieraDev](https://rivieradev.fr) ## Nous contacter Soutenez Les Cast Codeurs sur Patreon [Faire un crowdcast ou une crowdquestion](https://lescastcodeurs.com/crowdcasting/) Contactez-nous via twitter sur le groupe Google ou sur le site web
Мы начинаем серию эпизодов, где обсудим, как выглядит среднестатистический Junior, Middle и Senior разработчики. Этот выпуск полностью сфокусирован на Junior разработчиках и что мы от них ожидаем.01:05 - Язык программирования. Решение базовых задач.13:54 - Жизненные циклы activity/fragment/view.17:45 - Знание о сервисах, WorkManager, ContentProvider, Broadcasts.20:54 - Знания базовых View. XML.27:50 - ViewPager, RecyclerView, ConstraintLayout.34:43 - OkHttp, Retrofit. Сеть.40:36 - SQL. Room. Databases.45:14 - Patterns. SOLID. Кратко о книгах и ресурсах.52:12 - Dependency Injection. Dagger2. 53:20 - RxJava2, Coroutines.57:30 - MVVM, Architecture Components. Хороший код.Комментарии и пожелания можно оставлять в нашем телеграмм чате.
Каждый проект уникальный и имеет свои особенности. И мы посчитали, что особенности нашего проекта могут показаться вам интересными. Так что этот выпуск всецело посвящён рассказу о ключевых элементах нашего текущего проекта.00:00:50 - Мы решили рассказать о своём проекте.00:04:33 - Зачем писать что-то своё, когда уже существует опенсорсное. Наши реалии.00:06:55 - Наш ViewModel + идеи ViewComponent, GroupComponent и GroupStateComponent. 00:28:52 - Наш RxJava под названием RxLite.00:53:00 - Наша кодогенерация.01:03:01 - Как используем Detekt.01:06:32 - CI + Artifactory + Храним всё у нас01:18:41 - Чуть не забыли. Наш Dependency Injection.Комментарии и пожелания можно оставлять в нашем телеграмм чате.
Мы попытались пройтись по большинству исторических моментов, что привели нас к такой жизни в 2020 году, где приходиться выбирать между MVVM и MVP. Обсудили популярные библиотеки, которые помогают в улучшенном виде реализовать эти архитектуры presentation layer в контексте андроида и даже попытались провести сами небольшое сравнение этих подходов.01:15 - Немного истории о появлении MVP vs MVVM и даже MVC в мире программирование и отдельно история развития паттернов в Android.13:31 - MVP и библиотека Moxy (как она работает, стратегии, кодген).24:04 - Ещё немного истории о MVVM и разнице с PM (Presentation Model). 26:01 - MVVM в Android: ViewModel и LiveData и немного о RxJava. А также небольшой оффтоп, где нас бомбит с того, насколько ужасно написаны примеры кода с LiveData у Google.40:31 - Databinding и полноценный MVVM.44:44 - MVP vs MVVM - сравнение в контексте android.55:52 - Оффтоп о Playstation 5.Комментарии и пожелания можно оставлять в нашем телеграмм чате.
Реактивное программирование стало де-факто решением многих проблем, особенно архитектурных, во многих сферах программирования. В этом выпуске мы немного обсудили историю его начала, а также как должны работать множество из его основных компонентов. В качестве основного примера мы выбрали RxJava, как самую популярную библиотеку в Android мире для реализации реактивщины. В связи с этим также поговорили и об актуальности данной библиотеки в наше время.00:48 - Functional Reactive Programming, а также немного истории и биографии Rich Hickey.08:47 - Pub/Sub (Publisher - Subscriber отношения).10:29 - Что такое Stream и как его можно изменять операторами?13:42 - Начало обсуждения RxJava и проблем, которые она решает (и её заставляют решать), а также что такое Observable, Single, Completable и Flowable.31:18 - Subjects и Processors.33:05 - ReactiveX API и его плюсы.34:45 - Решение проблем с threading с помощью RxJava: Schedulers и как они работают.41:53 - Как тестировать RxJava.48:04 - Есть ли смысл RxJava в 2020м году и нужно ли переходить на корутины.49:20 - Небольшой оффтоп о влиянии 15 собеседований в день на психику.Комментарии и пожелания можно оставлять в нашем телеграмм чате.
Chet, Dustin, Chris, and Romain.(Tor not pictured. Because he wasn't there)Romain and Chet talked with Dustin Lam and Chris Craik from the Toolkit team about Paging3.Paging3 (currently in alpha) is a complete rewrite of (wait for it...) Paging2, using Kotlin, coroutines, and Flow for optimal implementation and APIs. (But note that there are also APIs for developers using the Java programming language and/or RxJava, so take your pick). We talk about Paging, the asynchronous work that made coroutines an obvious choice for the implementation, recent and future features, and API design in general.Subscribe to the podcast feed or download the audio file directly.Links:AndroidX Paging libraryBug bounty hotlist!Dustin: @itsdustinlamChris: @chris_craikChet: @chethaaseRomain: @romainguyTor: @tornorbyeThanks to continued tolerance and support by our audio engineer, Dustin Elm.
Te cuento cómo aprender todo sobre Kotlin en este training gratuito:
Просто интервью обо всем: работе, переезде и куда идти после IT Гость выпуска - Артем Зиннатуллин, Staff Software Engineer в Lyft. Работает над билд системами, дев тулингом, CI, библиотеками, инфраструктурой. До этого занимался мобильной разработкой, делал RxJava, Spek и другие. Ищет выход из IT Полезные ссылки:
Show notes See complete show notes here 01:30 Jetpack compose 01:45 RxJava, Coroutines 02:25 Android KTX 03:20 Coroutines Flow 03:30 Navigation component 04:30 MotionLayout 04:55 Android MVI with Jetpack Compose 07:20 Twitter Min SDK Account 09:00 Work Manager 14:32 View Binding, Data Binding 17:50 Dependency injection talk - Android Dev Summit, Guidelines by Google 20:50 Koin, Koin vs Dagger discussion on Reddit 24:18 Files and media access changes 26:30 MAC address issue 30:30 Firebase app distribution 32:35 - Invitation links can now be send on Firebase App Distribution. 34:20 AndroidX Testing 35:30 Room 36:52 Paging library 42:30 Leak canary 43:10 Chuck network library 44:26 Flipper 46:35 Developing Themes with style 48:00 Kotlin Multiplatform 1:02:10 Kotlin Conf Announcement 1:11:09 Kotlin for Android Developers, Advance Android with Kotlin, Android Codelabs 1:11:46 Associate Android Developer Exam, Study guide for Associate Android Developer Exam --- Send in a voice message: https://anchor.fm/techshaw/message
Introduction Yannick et Benjamin reçoivent à nouveau Louis CAD pour discuter de Flow la bibliothèque de JetBrains qui tire parti des coroutines. Show notes 0:46″ – Coroutines : https://androidleakspodcast.com/2019/03/17/episode-51-le-poireau-suspendu/ 1:41″ – Bibliothèque sur le BLE: https://github.com/Beepiz/BleGattCoroutines 2:30″ – RxJava : https://androidleakspodcast.com/2017/07/04/episode-25-le-poireau-reactif/3:21″ – RxJava.Flowable : http://reactivex.io/RxJava/2.x/javadoc/io/reactivex/Flowable.html 4:25″ – Sequences : https://kotlinlang.org/docs/reference/sequences.html 5:37″ – Delay : https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines/delay.html […]
We sit down to talk to Josh about coroutines, its usage in Android, the differences with RxJava and whether we can combine both technologies. For links to show notes, please visit talkingkotlin.com or download the App from the Android Store.
Kaushik is back in this weeks podcast.
This is our pilot episode of English speaking version of AndroidDevPodcast. Denis and Ash GDEs from SF and Berlin starting from one of the most important topics in Android Development. So many candidates nowadays are using live data on interview but less than half of them know how it works and what exact problems are with activity destroy during rotation and keeping activity in the backstack. We have GDE from Berlin Ash Davies to solve that puzzle and show clear picture how to deal with the state. We are talking about activity and fragment lifecycle, retained fragments, ActivityThread class and FragmentManager. Also how LiveData, Lifecycle from Android Architecture Components works, how to deal with lifecycle in RxJava and Coroutines. And what about state restoring in Flutter and React Native.
Первоначальной идеей выпуска было обсуждение асиннхронности, подходов и решений со всех, так сказать, четырех сторон. Сначала обсудить нативные темы, а потом обсудить кроссплатформенные решения. И начиналось все вроде бы хорошо, обсудили многопоточность, классические проблемы, языки, которые живут без этого, но потом Данис с Кириллом так увлеклись беседой о сходствах и различиях асинхронных подходов в Android и iOS, что на Flutter и React Native просто тупо не хватило времени! Так что придется делать два выпуска по цене одного! Асинхронность Flutter vs ReactNative ждите в следующем! А здесь: Queue vs Thread, Kotlin Coroutines vs RxJava, Completion/Progress Handlers и Java Concurrency, и даже немного про асинхронные возможности современных процессоров! Enjoy! Пишите нам: mobilepeopletalks@gmail.com
In this episode, Dave and Jamison answer these questions: Hey guys, I’ve graduated with a CS degree 8 years ago, but due to circumstances I accepted a QA job because I wasn’t getting any other offers. Well 8 years later, I’m still stuck in QA and would love to move into development. I tried transferring within companies and applying to developer jobs, but the QA brand is holding me back. Any advice on how I can become a developer when I’m pigeon-holed in QA? Hi folks! I need your wisdom! Please help. TLDR: Senior as a Programmer, Junior as a Mobile developer. When I first came to my job as an intern, my manager asked me what I wanted to do more - backend stuff, testing, or mobile development. I went randomly and chose the latter. It became my profile and I’ve grown to really like it. Over the years, life has thrown me back and forth, I’ve been on multiple different projects not related to mobile, so now I can do… everything? Or rather, nothing. I know a little bit about .NET, a little about web development, writing Visual Studio extensions, IoT, machine learning, Unity game dev.. This is good because I can now quickly learn new things, know a lot of tricky stuff, know how to communicate with customers. I have a decent salary and good feedback. But the huge downside to that is that I stayed exactly at the same level of mobile development as I was 3 years ago. I know basic stuff, a little bit of advanced stuff, but I have zero experience in all the ““hot”” things like RxJava, Dagger, Kotlin. All the job vacancies I’ve seen require a strong knowledge of something particular: be it Android or iOS development, backend or frontend. I’m suffering from a huge imposter syndrom - yes, I have all the ““good”” programmer qualities, I’m smart, but I have no advanced or even medium knowledge in anything. What can you advise me? Huge thanks and… love the show! ❤
In this episode I sit down and talk with David about reactive programming in particular about RxJava.
The Android community has come to use Rx pretty heavily but surprisingly there hasn't been any one convention that's won, when it comes to how we name our functions that return Observables. getUser(), user(), userUpdates() ? In this mini-episode dutifully does the yak-shaving for you and discusses what some options are and what the community has been gravitating towards. Enjoy.
In this short fragment episode, Donn explains how you can clean up your RxJava 2 streams and ensure no memory leaks are occurring by using the AutoDispose library from Uber.
Grab a bundle of Java and a cup of Joe and sit down for some learnin'. This new ebook bundle from Packt includes Mastering Java and Machine Learning, Learning Spring Boot 2.0, Learning Java by Building Android Games, and lots more. Cheers!https://humblebundle.com/books/java-by-packt-books?please=they&charity=1827413
Grab a bundle of Java and a cup of Joe and sit down for some learnin'. This new ebook bundle from Packt includes Mastering Java and Machine Learning, Learning Spring Boot 2.0, Learning Java by Building Android Games, and lots more. Cheers!https://humblebundle.com/books/java-by-packt-books?please=they&charity=1827413
W tym odcinku Łukasz Kobyliński rozmawia z Tomaszem Nurkiewiczem o programowaniu reaktywnym - czym jest to podejście do programowania i kiedy warto je zastosować. Dlaczego Tomasz zdecydował się na napisanie książki o RxJava - bibliotece realizującej podejście Reactive Programming w Javie oraz o tym dlaczego udziela się w społeczności IT pisząc bloga, będąc prelegentem na konferencjach i pisząc odpowiedzi na Stack Overflow. STRESZCZENIE ODCINKA Jakimi technologiami się zajmujesz? Jak to się stało, że zacząłeś się zajmować big data? Czy zagadnienia z obszaru big data są interesujące dla programistów? Czym jest programowanie reaktywne? Czym różni się programowanie reaktywne od stosowania wzorca obserwatora? Gdzie można zastosować programowanie reaktywne? Czy programowanie reaktywne wiąże się z narzutem wydajnościowym? Czy utrzymanie kodu napisanego w podejściu reaktywnym jest trudniejsze? Jak testować kod reaktywny? Czy są kryteria, którymi można się kierować przy decyzji czy wykorzystać podejście reaktywne w danym projekcie? Kiedy warto wykorzystać architekturę mikroserwisów? Co daje nam Apache Kafka? Dlaczego zdecydowałeś się na napisanie książki o RxJava? Dlaczego angażujesz się w pisanie bloga, wystąpienia konferencyjne, czy aktywność na StackOverflow? Kim jest Java Champion?
Make sure you're following us on Twitter!We're now on Spotify!Blog PostsA life without ifs by Maria NeumayerSimplifying DiffUtil with RxJava by Saket NarayanMake your custom view 60fps in Android by Dmitriy RabetckiyTools And LibrariesLong ShadowsSupport Library 27.1.0Android KTX 0.2Room 1.1.0-alpha3Emulator 27.1.12 CanaryKotlin 1.2.30Gradle 4.6Other StuffImproving Stability by Reducing Usage of non-SDK Interfaces#31DaysOfKotin115: Architecture Components with Akshay Chordiya by Fragmented PodcastAngella Derington: Teaching RxJava with a Little Game of Thrones by Android DialogsFind out about future Android conferences hereTheme music: "Fresh Kicks" by Sono SanctusHosted and edited by Mike Scamell
Первый из двух выпусков, где мы досконально разбираем автотесты. Говорим большой кампанией про unit-тестирование во всех деталях. Особенно ярко про Spock, Spek, тестирование RxJava, тестовое покрытие, мокирование и наше отношение к TDD. Слушайте до конца, если сомневаетесь, что правильно тестируете безопасность.
The O’Reilly Programming Podcast: Building reactive applications.In this episode of the O’Reilly Programming Podcast, I talk with Richard Warburton and Raoul-Gabriel Urma of Iteratr Learning. They are the presenters of a series of O’Reilly Learning Paths, including Getting Started with Reactive Programming and Build Reactive Applications in Java 8. Warburton is the author of Java 8 Lambdas, and Urma is the author of Java 8 in Action.Discussion points: The benefits to developers that came out of the introduction of lambdas and streams in Java 8 How Akka’s actor model helps in the creation of reactive and asynchronous applications Comparing the uses of RxJava versus the Java 8 streams API to develop reactive code Warburton’s and Urma’s ideas for preparing the next generation of developers for the requirements of industry, the focus of their forthcoming book Real World Software Development Other links: The Learning Path Build Reactive Applications with RxJava, presented by Warburton and Urma The Learning Path Build Reactive Applications with Akka, presented by Warburton and Urma The video Programming Actors with Akka, presented by Warburton and Urma Warburton has been involved as an organizer in the London Java Community Urma is co-founder of Cambridge Spark and the Cambridge Coding Academy The schedule for the O’Reilly Software Architecture Conference, February 25-28, 2018, in New York
The O’Reilly Programming Podcast: Building reactive applications.In this episode of the O’Reilly Programming Podcast, I talk with Richard Warburton and Raoul-Gabriel Urma of Iteratr Learning. They are the presenters of a series of O’Reilly Learning Paths, including Getting Started with Reactive Programming and Build Reactive Applications in Java 8. Warburton is the author of Java 8 Lambdas, and Urma is the author of Java 8 in Action.Discussion points: The benefits to developers that came out of the introduction of lambdas and streams in Java 8 How Akka’s actor model helps in the creation of reactive and asynchronous applications Comparing the uses of RxJava versus the Java 8 streams API to develop reactive code Warburton’s and Urma’s ideas for preparing the next generation of developers for the requirements of industry, the focus of their forthcoming book Real World Software Development Other links: The Learning Path Build Reactive Applications with RxJava, presented by Warburton and Urma The Learning Path Build Reactive Applications with Akka, presented by Warburton and Urma The video Programming Actors with Akka, presented by Warburton and Urma Warburton has been involved as an organizer in the London Java Community Urma is co-founder of Cambridge Spark and the Cambridge Coding Academy The schedule for the O’Reilly Software Architecture Conference, February 25-28, 2018, in New York
Make sure you're following us on Twitter!Blog PostsThe Art of Android DevOps by Ian RumacOur Top Nine Learnings from Migrating from RxJava 1 to RxJava 2 by Roman ZavarnitsynMoving Past GoogleApiClient by Sam SternKotlin: Contexts & SharedPreferences by Mark AllisonTalksBuilding Libraries for Kotlin by Eric MaxwellTools and LibrariesSpritzBlog PostFind out about future Android conferences hereTheme music: "Fresh Kicks" by http://www.sonosanctus.com/Hosted by Mike Scamell
Поговорили о RxJava 3, JUnit 5, FireStore, обновлении дизайн гайдлайнов и о других анонсах.
Jay Phelps: @_jayphelps | jayphelps.com Show Notes: 01:25 - RxJS 10:09 - Observers 17:49 - Back Pressure 22:11 - Async Iterators and Generators 31:30 - Mapping Resources: The Observer Pattern Hot vs Cold Observables IxJS redux-observable Transcript: CHARLES: Hello everybody and welcome to The Frontside Podcast, Episode #84. My name is Charles Lowell, a developer here at the Frontside and your podcast host-in-training. With me today is Elrick Ryan. Hello, Elrick. ELRICK: Howdy. CHARLES: You and I have actually been on a roll lately, podcasting the hell out of these podcast. ELRICK: Yeah, I know. That is very true. CHARLES: It's been you and me but it's feeling great. It's good to have you on the show again. ELRICK: Yes, wonderful, man. Let's keep it rolling. CHARLES: All right. We will keep it rolling. Today, we are going to be talking about redux-observable and to help us understand and plumb this topic, we have someone who's very qualified to talk about it. Mr Jay Phelps, who in addition to having been the co-creator of redux-observable, also is on the core team of RxJS, which is a fascinating library on which it's based for many years and is currently a senior software engineer at Netflix. Welcome to the podcast, Jay. JAY: Hey! Good morning, everyone. I guess it's not probably morning to the people listening but good morning to you all. Thanks for having me. CHARLES: I'm excited about it. I know that kind of starting with the fundamentals, RxJS is something that was on my radar for a few years and it definitely [inaudible] once we started using redux-observable but the whole concept, I often feel like the world kind of is turned upside down when I'm working with observables, when I'm working with RxJS and I'm curious, how did you come to be a part of that project and what are the things that you use it to solve? Why did the solutions that you generated shake out that way? JAY: Sure. I actually was not introduced to Rx until I started working at Netflix. Netflix does have a fairly solid reputation for their usage of Rx, not just in the JavaScript world but also in the server world. Netflix wrote the original implementation of RxJava and it's used heavily on our backend systems. CHARLES: For some reason, I had this impression and maybe I'm mistaken that Rx originally came out of Microsoft. JAY: Let me continue with the story. It's confusing and I can actually take a step back and clarify that point in particular. Rx itself was originally came from Rx.net, which was indeed created by Microsoft many, many, many, many years ago. I don't know the exact date. I think it was at least 10 years ago. They, at the same time created or about the same time, Matt Podwysocki who was working at Microsoft and still is working at Microsoft, created Rx.net and RxJS. Then many years had passed and originally, it wasn't as popular as it got in the coming years. After several years, some employees from Microsoft ended up coming to Netflix. Jafar Husain is one of those employees. He came from Microsoft to Netflix and he brought that Rx knowledge and that advocacy. Rx is very ingrained in the Netflix culture and is used a lot by various teams for various purposes. Then when I joined Netflix and I got really exposed to it. One of my coworkers at the time, Ben Lesh was asked by several people at Netflix to consider and look into rewriting RxJS. At the time, the version was RxJS 2.0 and while it was great, we had some specific requirements for our website and some of our other applications that we were hoping for a better performance, smaller bundle size and better debugability and -- CHARLES: Also, when I first evaluated it many years ago, it felt very much like a port from another language, in another culture as opposed to something that from the ground up, considered as a JavaScript library. Is that a fair statement? JAY: Yes, somewhat. Definitely, there were more considerations this time around when it was rewritten and originally, it was going to be Version 3 but the rewriting process took quite a while as these things usually do. By the time we got a version out, it was Version 5. We started when RxJS was at Version 2 but it already released Version 3 and Version 4 by the time it released for the new version like a rewrite had been able to get out. When I say a rewrite, I mean like from scratch rewrite. Matt Podwysocki who was the maintainer, almost the sole maintainer of the previous version, also is now on the core team of the new version of RxJS and has been instrumental in pushing back forward as well, he has far more experience with this than either Ben are I so he's been invaluable. Sometimes, we'll think to make those decisions. We'll be like, "Why was this decision made? Was it made because of .net?" and we'll just assume that and we'll want to change it but Matt has the history involved in that. He knows why things were changed the way they were. For example, we changed one of the operators, flatMap to mergeMap. We know somewhat we go at least, I don't want to speak for the entire team but I regret that decision. Depending on the day that I've been talking to Ben, I could convince him to regret that decision as well. But we thought that mergeMap would make more sense and that very few people in practice would have heard of the word flatMap before and had experience with that so -- CHARLES: I have to say both of the terms coming at it were pretty opaque. I think there was a bout of equivalence in opacity. JAY: Yeah, good to know. That's just an example. I don't want to stick too much on that topic. Maybe someday we'll go back to flatMap and the flatMap still exists. If you're a purist, you can use it. Ben was the primary person who was working on this. He wasn't working on it full time but pretty close to full time to get that initial version out. Even though I used it, my involvement with it was fairly low at that point and then my involvement after it was released got increased. I found more time and started to get more involved, particularly there wasn't a lot of code to write. I have some PRs and stuff like that but particularly on the planning and the issue triaging and PRs and stuff like that, which is a pain in the butt. It's just massive. Particularly, around the same time that the rewrite was getting finished that Angular decided, "You know what? We're going to bet on Rx. We're going to depend heavily on it," so you really can't write Angular without writing some Rx these days. You can get away with not knowing Rx very well. You could just call subscribe and then just do a bunch of imperative stuff but for the most part, the paved path is observables in so many fashions. Now, there's this ngrx. I don't know if you have any exposure to the Angular community. I have quite a bit. CHARLES: I haven't recently. Certainly, since that kind of heavy investment in Rx, I haven't been exposed to it. JAY: I think that was your question, right? CHARLES: Yeah. It sounds like there's a Java implementation that gave rise or a .net implementation or Java implementation gave rise to a JavaScript implementation and that's the one that you got involved with but it suggests very strongly that Rx is an idea and it's played out in a bunch of different languages but really, there is a shift or it's an idea about the way you think about your programs. It's clearly been compelling to you so what is that idea and what is that shift from the way we normally think about things? JAY: The idea was realized very early on -- CHARLES: Yeah, both 10 years ago, right. JAY: Yeah, exactly. They dubbed it their reactive extensions, which is what Rx stands for. Pretty much, name a language and it's been ported to that. There's RxSwift, which is super popular. There's even things like RxCpp and stuff which if you look at it, it's awkward. It seems like we got less language in the world for doing this sort of thing. I actually like C++ in a lot of ways but it was awkward stuffing that stuff in there. It's a really popular pattern and the idea is just basically going all in on the observer pattern, saying that like, "Most people are building things in which you want to be pushed information." You want to be pushed events and the data should stream to you. Modeling most problems in the world as a stream, once you get over the initial barrier of getting away from your normal historical way of looking at things and you look at everything as a stream, it comes very natural because you can actually model literally anything as a stream because it could be a stream of one, it could be a stream of nothing, it could be a stream of infinite number of events or it could be a stream of 10. You can model anything as a stream. Once you start thinking about that, it just becomes very natural and particularly on the UI side of things, I think there's been a lot of success in RxJava stuff at Netflix but RxJava is also used in Rx.net for client-side stuff as well, for mobile development. CHARLES: I remember when I first was introduced to it, I think there was a lot of confusion for me around an observer in the context of Rx and an observer in the context of classical MVC. One particular manifestation of the MVC architecture where you have these kind of mutable objects and you're observing their properties. Like key value observation, which factors heavily into certain UI frameworks. Backbone is one that comes to mind or if you're familiar with Java, basically the JavaBeans, like the property model listeners. I kind of had that conception of what an observer was versus Rx has a very, very different take on observable things. Do you think you could maybe show where they're different? JAY: You can get the normal classic observer pattern using Rx, using a subject basically. But there's a subject class, which you're not going to use super often but there are certain cases where it makes sense. Also, it depends on what libraries. It is used more often in the Angular world because you want to get a stream of clicks or something like that but -- CHARLES: So what would be the subject in that case? JAY: The subject in that case would be you're going to pipe, you're going to emit. Every time they click on something, you're going to 'next' something into that subject, like 'next the event' into the subject. Basically, a subject is a really great way to go from some imperative world to the observable world. Without having to write all sorts of custom glue, you can just basically say, "I've got subject. Any time I 'next' into it, just notify anyone who's listening to this." A subject is hot observable and that's the closest to the typical observer pattern because Rx, it's usually like observables and are usually lazy or cold. That's also what people call it. In the normal observer pattern, there is not necessarily any concept of laziness like you listen to something and that producer is already producing usually. CHARLES: Right. You hit on that and I think that was something that was surprising and kind of delightful when I first started using observables is to realize that they were lazy. Let me make sure I understand it. What was cool is like I was going through some of the demos and I had this observable and is part of, forgive my terminology but when you create a new observer, you pass the function that will get called every time something subscribes to it, right? JAY: When you create a new observer it passes a function -- CHARLES: When you create a new observable, you pass a function that gets called when an observer subscribes and the thing that you can pass is the thing that you can call next on, right? JAY: That's exactly right. When it's a lazy observable, that only get called... Actually, you know, continue. You had a point. CHARLES: I was going to say what was a surprising and cool for me was that every single thing that subscribe to that observable got its own history of that observable from the very beginning. It got its own function invocation so the first example I did, I wanted to iterate over an array and just send 10 items to the observer. Then when you subscribe, you're starting from one every single time: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10. It's not like I subscribe and one gets five of the elements, then I subscribe to another one and that one gets the next five or those two get the next five together. It's like they each get their own version of that observable. JAY: That's exactly right and then that's the main difference between -- CHARLES: -- The whole thing, yeah. JAY: Yeah. This is still observer pattern because the observer pattern, at least to my knowledge, I'm not an expert on this or anything but my understanding is that the observer pattern does not necessarily dictate hot versus cold, per se but traditionally I would say, people interpret it as typically the hot type of thing or also the multicast, if you want to be like these cool buzzwords. CHARLES: Right. What you're thinking of it is when you've got this mutable object, you just dive in wherever it is at that moment and you're now observing events from it. JAY: And that's traditionally because the observer pattern was mostly created for that model view controller type of pattern as well. You can think of like a stream of clicks: the users clicking on things where a stream of keyboard events. That is inherently a hot or multicast stream. You can't tell the user, "Start clicking," or, "Start typing. Don't type." You can tell them that but it's futile. The point being is that you can't control the stream. It pushes data to you and it's already pushing, whether you're subscribing or not, the data is flowing so the traditional observer pattern works really well for that. Then the observables, it's usually lazy, Now again, with subjects and with multicasting, you can get the same behavior. You can get that observable that is hot and shares its subscriptions so that when multiple people subscribe to it, they all get the exact same underlying subscription that is already producing data. CHARLES: I see. That makes sense with to call of multicast because fundamentally, there's really only one observer. There's only one stream and you just happened to be entering in at a certain point. JAY: Right. Then the other one is called unicast but not everyone calls it that but that's usually what it's called. CHARLES: There's a lot of terminology. With subjects, is that just a fancy way of saying a hot observable? JAY: Not necessarily but almost always. If you include them together, you're not wrong 99% of the time. But as a quick drive by definition, it's totally fine. If you're teaching someone really all the things and then they want to fundamentally understand it, it's good to have some distinctions. A subject is hot and multicast but just because something is hot and multicast does not mean that it necessarily has a subject backing it. Maybe from the pattern perspective, you could call it 'the subject' or 'a subject' but in the Rx world, it's not necessarily a subject. CHARLES: Then for cold observables, what are good things that they model, like the execution of an algorithm or something? there's an instance of that algorithm, I'm going to add two numbers or I'm going to reduce this tree of numbers into a product or a sum or something like that, where you start from the beginning, there's a clear beginning, there's a clear end --? JAY: Right. The observables are really good at modeling side effects, for example. Things you want to do like make an Ajax call or read a file or something like that. In fact, reading from a file is actually not a great use case for observables just because you want to be able to control the back pressure. We can talk about that next if you want but -- CHARLES: Yeah. Back pressure is a concept. It's crazy to me and when people use it, I'm like, "How do you even do that?" You can say it and sounds good in practice but it sounds really, really complex. JAY: I think I can summarize it for you. The back pressure stuff is basically you have a data producer and you want to be able to control the rate in which it is producing so that you do not overwhelm the consumer. You can consider two servers. You've got Server A and it's sending events to Server B. If Server B can only process 10 events per second but Server A sends 100 events per second, what's going to happen? There's a deficit. There's a huge 90 events per second deficit and that means that the Server B is going to get more and more behind. Eventually, it will just fall over and run out of memory, CPU or whatever happens. Back pressure is basically just being able to control that somehow. There's lots of ways, there's several policies of back pressure. There's buffering, there's dropping and then there's the pull model where it's like, "I'm going to tell you when to give me the next event," or, "I'm going to tell you to give me six more. I can handle six more, give me six more," or, "Here's the next one." Those were -- CHARLES: Then polling would have to be combined with buffering or dropping still, right? JAY: Possibly but it becomes one of those like you use it just as a rarity. Because the problem with buffering is that it becomes usually unbounded and that means you can -- CHARLES: It's blowing up the producer, right? JAY: Well, you risk money out of memory, mostly. It just becomes completely unbounded. You can bound that buffer and then it becomes dropping. Then if it's dropping, that means it's lossy. In a lot of scenarios, it's important not to drop information. CHARLES: They're useful stuff. JAY: Right. At the same time, there are a lot where you can drop it. Like at Netflix, we have this data pipeline thing for these logs and I got a good talk on this actually. This data pipeline is called Mantis job platform where all this data flows through. It uses RxJava almost exclusively and we have a lot of different back pressure mechanisms but the one of the most popular is dropping data. If the consumer is being overwhelmed with the number of logs and events that are matching to it, we just start dropping them because they're logs. We want to keep them but we make a best effort and it's perfectly fine to drop them. In the observable world, it's usually going to be either buffer or drop. You're not going to usually be able to control the producer's rate. In RxJava, there is something called the flowable, which lets you control the rate by basically saying, "Give me N number. I want N number more." It's become more important on the server-side end of things but a normal observables -- CHARLES: That makes sense. JAY: Yeah and there's even a library that's brand new that Matt Podwysocki came out with called IxJS. Instead of RxJS, it's IxJS and it's iterator. It's for async iterator and regular iterators, which is good for that other end of the spectrum for back pressure. If you want to be able to control the producer, you're saying, "Give me the next five." That's what an async iterator is incredibly perfectly suited for. CHARLES: The async iterators are kind of like the logical inverse of the observables? JAY: That's exactly right. It's the dual, if you want to use the computer science term, I assume you knew that already and it was that was just a plant. CHARLES: Actually, I didn't terminology, the dual but it's like through the looking glass world, right? JAY: Yeah, that's correct. CHARLES: One hand you got Alice in our world and she's looking in the looking glass world. I'm not saying which one is which but one is observables and one is the async generators. When you would want to use async generators is when you want to have the consumer driving the entire stream. JAY: That's right. A lot of people, when they discover async iterators, they'll ask me, "Jay, why wouldn't I just always use that? It seems like they're more flexible of the two." The reason why is because you can't always control the producer. The fundamental example that I was giving earlier like mouse events or keyboard events, you cannot control what the user does so an async iterator would be a very poor primitive to model that because what happens if you decide to give me one keyboard event at a time and one per second. You're like, "Give me the next keyboard event." If you did that one per second and someone is typing on their keyboard, what do you do with all the events while you're waiting? You could buffer them but that's a back pressure problem. You have to choose and it's a very poor primitive model to that. CHARLES: Yeah, that would be a terrible user experience. The users want the consequences of their actions to be realized at the soonest possible point. JAY: That's exactly right. The other benefit of observables is a slight increase in performance because when you subscribe to an observable, it sets up the chain and then now only data needs to flow through that chain. Whereas an async iterator, every time you call next, you're going to get a brand new promise. If you used it for something very high volume, you might be able to see how now you've got a lot of excess allocations: CPU cycles being used, garbage collecting for each one of those promises. In Netflix, we got a lot of streams, which are hundreds of thousands of events per second. If you do that, those allocations of those promises can certainly add up. It's just not the most efficient primitives for that as well. CHARLES: I thought that async iterators used essentially continuations under the covers and not promises. JAY: Under the covers, I'm not sure how you would describe what -- CHARLES: I'm not super familiar -- JAY: It's basically an -- CHARLES: You're talking about like yield, right? JAY: You're talking of generators maybe? CHARLES: Uh-uh. JAY: Iterators and generators are although related because a generator is basically a factory for creating iterators. Does that make sense? CHARLES: Yeah. JAY: Every time you call that factory, you get a brand new iterator out of it. But then when you have an async generator, it's basically the exact same thing except for the iterator returns a promise. You're basically saying, "Give me the next thing." You call next on the iterator and the next will return a promise and that promise will resolve with a value. Why is that useful to standardize? Because you can have syntactic sugar like the [inaudible]. I don't know if you've seen that yet but it's like a loop primitive, where you can basically loop over an async iterator without needing to deal with the whole thing and all that stuff. The same way normal async/await is helpful. This await is helpful at the same time. CHARLES: It's way above my pay grade but maybe you're using both. I'm trying to think with async the way that works with promises, right? JAY: That's correct. CHARLES: So you got both the continuation and a promise. That's even more overhead than the promise because you've got to stuff away that whole call stack and the promise and yield to it. But anyhow... ELRICK: This is very interesting. RxJS is a very deep subject. What I'm interested to know is you have RxJS, you have observables and you have redux. Where's the union? How did that come to play that you guys came up and said, "You know what? We need to create redux-observable library?" JAY: Yeah, great question. It came about fairly organically and over many month period of time, actually. We bring Rx people as I mentioned and we were using redux at the time and we're still using redux but my team that I was on was using redux and we were using redux thunk and the thunks were getting incredibly out of hand. It was very hard for us to do things that we were used to doing that were very simple like debouncing. We were like, "This is really hard. It's just to do something so simple that in Rx, it's so simple." We try to stuff Rx into redux thunk and try to make conventions around that. It just didn't work out well and then we initially made something we called thunk-observables -- CHARLES: We really wish you would have stuck with the name even you didn't -- JAY: Yeah, so thunk-observable is probably what you can expect. You dispatch a thunk which returns an observable and that observable will be subscribed to and that was it. Basically, that was the primitive so that let us have our debouncing but in practice, we found that the thunk stuff cause way more confusion and then also did not let us do composition as much as we wanted to. We then extended thunk-observable thing to get receive a stream of actions so that you could compose the different thunk-observable together and then receive new actions to cancel things and stuff like that. We eventually just figured out that having basically the idea of thunk-observables but having of them be like almost static factories that are like process managers, that's the pattern that we ended up on today. That we coined calling them epics. Basically, an epic is a function, which receives as an argument, a stream of all of the actions. It gets an observable of every action that's going to be dispatched and it was a hot observable so that means that if you happen to subscribe to it later, you're not going to get all the actions from before. It doesn't replay them. It's just all actions from the time you subscribe and continuing. Then what that function is expected to return is a new stream of actions and that stream that it returns of actions gets subscribed to by the middleware under the hood and basically, it just calls stored dispatch on anything you emit. You can imagine the simplest epic would be a function that gets streamed of all the actions, it applies a filter operation on all of those and looks for a particular action and then based on that action, it performs some side effect and then when that side effect comes back, it emits a different action. Basically, to notify redux like, "Here's the results. Here's the change. I'm done," or what have you. let you just make arbitrary side effects but isolate them in a way that fits very naturally with your UI layer that you're using and with redux itself with the purity of the reducers. CHARLES: Right. For example doing an Ajax request, I think that's a good example. You get some action in, you're getting every single action that's dispatched to the store, the first thing you want to do is you want to filter that stream to only the actions that are user click the save button so I want to save off this form. To some action, that's my save action so then my job is to now map that eventually. Out the end of that stream, I want to have like the save either succeeded or the save failed. There's two forks on an Ajax request. The fundamental mapping that's happening is either from the user click save, whatever you want to call that action, I want to map that to the user if the save was successful or I want to map that to the save failed or rejected. The hard part then is executing those side effects and then putting them back into the stream. How would you do that then with redux-observable? JAY: If I'm following correctly, the typical almost all epics, not all of them but almost all, they're going to have a filter at the top of the epic, they're going to filter out looking for the action they want and then they'll have some sort of merging strategy operator like mergeMap, aka flatMap or they have something like switchMap. CHARLES: I feel like that's one of the harder concepts for me and I want to actually going to be a little selfish here and try and bounce my understanding off of a bit so you can be like, "No, your mental model is incorrect," but we'll find out how it's incorrect. With the mergeMap, is that a way of saying, "I can take other observable streams and inline them inside this one stream." That's the way I've been thinking about it. I can go out to the rest of the world, I can have some other stream and I can inserted into the processing chain of this other stream. In this case, I do a mergeMap of the actual fetch or the actual post but it's not a straight chain of implication like do a filter then I do a map then I do this. I've got to take this other observable, this thing, this other asynchronous process, which really represents another stream and I want to merge it into this one stream. Then once that's done, I get the result. now, once that happens outside the mergeMap, now the Ajax results whether it's a success or failure, the result of the request, now it becomes the next item in the stream, which then I have to map down to another redux action. JAY: That's right. The mergeMap operator has an alias and it also used to just be called flatMap so you can envision that you are creating an observable of observables, a higher order of observable. With mergeMap, you want to flatten that. You're saying that every time I get an event, I'm going to call this projection function and it's going to return a new observable, an inner observable and I want to merge each one of those into each other so that it becomes one stream. That means you can have concurrency. That means you can have multiple and simultaneous concurrent Ajax calls that can finish it arbitrary times. I think it's important then to contrast that with some of the other merging strategies like switchMaps or concatMap. With switchMap, as the name implies, you switch between observables so at any point in time, you can only have one observable subscribes to at a time. If a new event comes along and you call the projection function, it returns a new observable. If the previous observable has not yet completed, it will get unsubscribed to and anything it was doing gets cancelled. In the example you're talking about, if you've got an epic that goes and fetches your user model every time they click this button, let's say that they can click that button multiple times and you don't want to make 50,000 requests. The quintessential example is actually the auto suggest stuff. As you're typing key strokes, if the request is in processing and they type another keystroke, you don't want to wait for them the previous request to come back and process it. It's not only wasteful because you'll process the JSON and all that stuff. It can introduce bugs because it may come back out of order. It may come back actually after your new one comes back and that can cause all sorts of crazy weird bugs. That's what switchMap is really great for. I call it implicit cancellation. Ben doesn't like that because he's saying that in a switchMap, you are being explicit about it but you're not calling unsubscribe on it yourself, which is why I call it implicit. It happens automatically. There will never a new event pipes through there. Then there's the third one which I don't -- CHARLES: So this switchMap ever make sense outside the context of hot observables? JAY: I would say that it makes more sense usually on hot observables but there are certainly cases like let's say that you've got a web socket observable and every time you get an event, based on that event, it make some other request and that other request may or may not take a really long time. But if you get another thing back from the web socket, you want to cancel the previous one. That's somewhat not a great example as well because sometimes people use multiplexing for the web socket so that it becomes multicast. But the point being is that there are definitely times where you will use merge, switch or concat. That concatMap being the third one where as you might imagine, you are concating the observables, you line them up. If I get a new event, I'm going to call my projection function, create that new observable but I'm not going to subscribe to it. I'm going to keep it but I'm not going to subscribe to it and tell the previous observable I was subscribing to has completed. In a way, you're buffering the observables and because you're offering them, you can get in trouble where you end up buffering infinite observables. Let's say the first one never completes for some reason because of a bug, you may infinitely buffer them. ConcatMap is not used that often. I'd say it's very rarely used. Its use mainly when you don't want lossy behavior. You want, at most wants semantics like you're only doing one per time. CHARLES: The difference between mergeMap and concatMap is what? JAY: It's you're not going to do concurrent. That's probably the best way to explain it. You're going to do that in sequence instead of concurrently. CHARLES: I see. Maybe an example would be like file uploads or something. You probably want to do your file uploads in parallel but let's say, you want to conserve bandwidth or you're working where you've got a browser that only supports 10 connections or five upload connections but when someone selects 30 files, you don't want to just drop those files. You want to be uploading 10 concurrently but as soon as one finishes off of that 10, you want to start up another one. JAY: That's absolutely right. Another example would be like you are going to hit some API and it could be used as one mechanism to kind of throttle yourself. If you want to guarantee that you're only connecting at most once to this particular end point at a time, no matter what the upstream tells you to do. CHARLES: Right. I could see that. That makes sense. JAY: I can tell that you're a little bit struggling to see the use cases, which is totally normal. ConcatMap is not used very often. It's for of those fundamental operations, which primarily why it's included is it's non-trivial to implement yourself. CHARLES: Are there any other mapping operators that we should know about? JAY: Those are the three primary ones. There's a couple of other like boutique variations but they're all variations on the exact same thing. CHARLES: Right. ELRICK: Do we have like mergeMap, switchMap and concatMap that are specific to management of observable and that's specific to redux-observable. There's people out there using something like redux-saga or they're trying to compare and contrast these two libraries. How do these things contrasts? Because I don't think you would use either of these mapping operations inside of a saga. Is that correct? JAY: I just want to make a minor clarification. The Rx stuff and these operators that we've been talking about: mergeMaps, switchMap and concatMap, they are not actually related to redux-observable really in any way. The only thing they're related is that you just might happen to use them. Redux-observable is actually a very tiny library and it defers pretty much everything to just normal idiomatic RxJS code and that's really the biggest pro in comparing it to say redux-saga. Redux-saga came significantly over a year before redux-observable and without a doubt, were influenced. The pattern is very, very, very similar but there are some just fundamental differences and one of those is that difference. The most obvious thing is if you already know RxJS very well, without a doubt you're going to want to use redux-observable. I could tell you that, it's not possible but it's very unlikely you'd choose redux-saga over redux-observable if you're already a really big Rx fan because you basically know how to do it. You just have to think that the items you're modeling, the events you're modeling are actions, which just happens to be a convention really. There are some other differences though between redux-observable and redux-saga and the biggest difference being that redux-saga takes this effects as data approach, which is like Haskell if you're familiar with that. In a lot of ways, it's identical with the IO monad but it basically just means that you're not actually performing the side effects yourself right then and there when you call their operators. There are special utility functions, instead there's like an engine or a middleware underneath that performs the side effects on your behalf. You create a generator and that generator is the pattern that is called a saga is what they call it. That generator yields these objects, these effects objects. One of the effects objects might be to call some particular API to make an Ajax request so you're going to yield that object that basically describes the side effect you want to perform but doesn't actually do it itself. It's just an object. In the middleware will form it for you so why would you put that indirection. The indirection helps when you want to do things like testing. If you want to test it, you don't actually need to perform any of the side effects. You can just call next on the iterator that you get back from the generator, you call next on it, you will get the side effect object, the effect as data that you want to perform and you can just assert based on that. You don't need to do mocking in all of that stuff. You just have to assert that the effects that were yielded were the ones that you expected. Now, I don't like that approach personally because I actually use redux-saga quite a bit, not lately. It was like a year ago. You end up implementing almost all, not all but a lot of your business logic in your actual tests themselves. Your test become less about testing the behavior or the outcome of a particular thing and more about testing how it gets to that outcome and what steps it takes to get there. Some people think that's fine. For me personally, it felt like any time I made a change in my saga, I had to make the exact same change in my test even though the behavior of the saga did not change. The actual observable outside side effects did not change in any way but I may be refactored or renamed something. It felt very redundant and to me, felt brittle because I started to wonder who tests the test then. If the tests are in a lot of ways are reimplementation of the saga, how did I really test that the behavior of what I was trying to accomplish really was accomplished. I'm not an expert on it so certainly, I'm sure there are people who have patterns around this that can mitigate some of my concerns. But for me, I'm used to testing Rx and I'm used to Rx in particular so the pattern for me of using observables just made a lot more sense to me. Also, with either of these libraries, the learning curve is really steep. If you don't know redux-observable, let's say you don't know Rx, learning Rx just to use redux-observable is a pretty huge undertaking. I would usually recommend people to not do that. A lot of times these days is spent me helping people who are frustrated because they dug themselves in a hole by using all these new technologies. They'll pull in TypeScript and [inaudible] with every all of the cool new hotness and I don't blame them because they've been told that this is all the cool stuff. CHARLES: We got some great advice on that that you can have one vanity technology on every project and live it yourself. Indulge in that coolness, in that hotness and do something exciting but make sure you have one vanity technology and one only. Everything else, be very comfortable with and one is just crazy experimental like this is the coolest new thing and we're going to just drop it in. But if the rest of your chassis is solid, then you can support that crazy experimental engine that requires you to stand up on the front of it and feed gas in with your mouth like they did in Mad Max. JAY: And there are exceptions obviously but for the most part, I subscribe to that. I answer a lot of questions on Stack Overflow and redux-observable. I actually get sad and frustrated when I see people that it's very clear that they shouldn't be using this. Their use case is not complex and they haven't learned Rx yet. It's one thing if you're like, "I'm learning this and I know that I'm going to have pain." That's totally acceptable. There's plenty of times where it's like, "It's totally okay that there is no concrete deadline and I can take my time," but a lot of times and I would say, a majority of the time, you're slipping on the deadline and that's not a good thing. The people who are coming to me are just frustrated. They're like, "Why is this so complicated?" You're right, it is really complicated but its complication helps with some of the more complicated use cases. That's the irony behind both redux-saga and redux-observable is that they're both really complex for the trivial use cases like all I want to do is make an Ajax call. That's it. I don't want to cancel it, debounce it, I won't do anything. I just want to make an Ajax call. They are the biggest hammer you could possibly think of. Don't use them for that. CHARLES: The thing is if you're not sure, whether you need redux-observable, then you actually don't need redux-observable. JAY: I would say that usually that is the case, yes. The same with redux-saga. They're in the exact same league. It's basically, "Do you need complex side effect management?" With the redux-saga, the complications, even though generators have been around for a little while, a majority of people still are not familiar with them because they're just not used all that often. They're kind of mystifying. I would say, they're not super hard to learn. They're just alien. Then to add on top of that, the effect is data and you've got multiple curveballs. Same thing with redux-observable, they could never use observables. It's pretty alien. The reactive programming idea and model is pretty alien. I would advise, if you're not using redux, don't even consider redux-saga and redux-observable personally. If you're already are using redux and you think that you might need something like this, experiment with the primitives, try and see how well your team can pick up RxJS just by itself. Just learn some of the regular RxJS tutorials, don't even look at the redux-observable docs because it's not useful in any way when it comes to this. Just try and learn a little bit Rx and see does it click. Because some people is like, "I don't understand why everyone thinks it's complicated. It's easy." But a majority of people, it takes a while before they get that like Neo in The Matrix, I-know-kung-fu moment. CHARLES: All right. We're almost at time but I hope that that moment comes to everybody. I think we've certainly enjoyed a lot of success with it already and I think once you do get your head around the basic use cases and you know how to do an Ajax request, you know how to do just simple saves and gets and what have you, doing the trivial things becomes easy because you know which pathways to travel. But before we head out, is there anything that you've got coming up in the near future, any talks, appearances, meet ups, anything whether you or otherwise that people should be aware of? JAY: I would say on this topic, there's a new beta for RxJS with this new way of using operators. It's being dubbed lettable operators, like the 'let' keyword but it's not related to that. It's basically just a way of finally being able to import operators and to use normal tree shaking that people have asked for forever. Because the problem with observables is that they're prototype-based methods and you can't reliably tree-shake methods or prototypes. We've been trying to experiment with ways to have [inaudible] and the lettable operator stuff is interesting to check out. It's a stopgap measure until JavaScript has something like the pipeline operator, which just actually moved to stage one. It's a brand new operator. If you're familiar with a lot of functional programming stuff like F# and a lot of the functional programming language is actually have the pipeline operator, it'll make it so that you can basically have syntactic sugar to apply a function, basically to pipe the result of a function into the first argument of the next function, etcetera. You can pipe the argument and return values through a series of functions. If you do that without this syntactic sugar, you've got this massive nested function invocation, which is incredibly hard to read and hard to maintain. That's why the pipeline operator is so great. I would encourage people, that's in beta right now. I think it's 5.5 but it's in beta right now. I encourage people to check it out, find bugs and get feedback. Maybe this is completely off base and it's not the right direction that the team should be going but it's based on a lot of collaboration, particularly with the Angular community. They've been, in particular asking for this because they're pretty big and they've got to use the Clojure compiler and all sorts of things for trying to make their bundles incredibly small. For me personally, I don't have any Rx talks coming up. I've been pretty obsessed with web assembly here lately. I'm an armchair compiler nerd. I don't do compilers for a living but I have done them personally for a number of years so I'm obsessive with web assembly. I have number of talks in web assembly coming up but just nothing related to Rx at this point. CHARLES: That's totally okay. I'm actually, also have been obsessed with web assembly. JAY: Have you guys done a podcast on that yet? CHARLES: I don't know. ELRICK: No, not yet. CHARLES: I actually started out to write my own list compiler in web assembly and they got totally derailed on the list compilers. Actually I ended up switching tracks on the whole web assembly thing but I was really, really excited about it. Probably, it was about three months ago or something like that but I'm still excited about it. I just haven't been working on it actively so I'm very curious to hear about those talks. Let's post them on the show notes and who knows? We do a lunch and learn every Friday here and usually, it's one of us getting up there but sometimes, we'll just watch a talk. One of us has been wanting to watch. ELRICK: And you're always welcome to come back to any time and geek out with some web assembly. CHARLES: I'd say, we haven't podcast web assembly, you know? All right, you guys, we've been at this for another hour. Let's go. Everybody listening, strap your headphones on, we're going down for another hour. Changing the subjects: web assembly. It starts right now. ELRICK: It's going down. CHARLES: No, but we will have to have you on for that. Thank you so much for coming on and talking with us about observables, Rx, redux-observable but if folks want to continue the conversation with you, they can get in contact with you how? On Twitter, email? JAY: The best way is going to be Twitter probably. I'm at @_JayPhelps. Thank you guys very much for having me on today. It was a blast. I love talking about this stuff. ELRICK: Thank you. CHARLES: Thank you and for anybody out there, we can also be reached at @TheFrontside on Twitter or just drop us a line and Contact@Frontside.io and have a great week and we'll see you next.
In this episode of Fragmented, our friend and RxJava paragon of the Android - Dan Lew, returns for a record 3 and 1/2 time. We've been using RxJava over the years now and have even talked to Dan about it in previous episodes. How has our understanding of Rx use in Android changed over the years? We know some of the super standard usecases for RxJava in AndroidDev. But the important question to be asking is: when are the times we "shouldn't" be using RxJava? Are we over-complicating our code by shoe-horning it in different places. Concepts like functional programming and reactive state management have picked up steam again, how has this influenced our RxJava use? Listen on to find out more!
Introduction Yannick et Benjamin reçoivent David Wursteisen de SOAT pour parler de RxJava. Téléchargement direct Show notes 2:08″ – Présentation de David à Android Makers sur RxJava : https://www.youtube.com/watch?v=fwbWAfBLcDI 2:46″ – Présentation de David à Android Makers sur les jeux vidéos : https://www.youtube.com/watch?v=mSa3BVO0tvc 3:28″ – Android Leaks en live à Android Makers : https://androidleakspodcast.com/2017/04/26/episode-18-le-poireau-en-live-androidmakers/ 3:38″ – Pierre […]
Il prossimo 21 giugno 2017 Consoft Sistemi ospiterà, presso i propri uffici della sede di Torino, una nuova edizione del meeting JUG: **Reactive, Twitter & OrientDB** Abstract: Avete mai sentito l'esigenza di lavorare con grandi moli di "asynchronous stream datas"? Roberto Franchini illustrerà, in questa sessione di live coding, come mettere in pratica i principi di reactive programmig utilizzando lo stream di Twittter come sorgente. Un file vuoto sarà riempito linea dopo linea, utilizzando RxJava ed OrientDB. Consoft Sistemi – Via Pio VII 127 – Torino ore 18:30 -21:00
RxJava is considered a functional reactive programming library. But the paradigms of functional programming have existed for a very long time. In this episode we talk to Android GDE Anup Cowkur, about his experience experimenting with "pure" functional languages. He breaks down some of the basic concepts, explaining the different terms along the way. Shownotes: http://fragmentedpodcast.com/episodes/83
Rossen Stoyanchev talks to Wesley Reisz about blocking and non-blocking architectures, upcoming changes in Spring including Spring WebFlux, the reactive web stack in Spring framework 5, due this summer. He also discusses the differences between rxJava and Reactor. Why listen to this podcast: - Spring Framework 5 is due to be released June 25 2017 - Spring Web Flux provides a web programming model designed for asynchronous APIs - Back-pressure is important in a server environment; less so within a UI environment - It’s possible to use a Spring Web Flux client within a Spring MVC applciation - Managing sets of thread pools is more complicated than having a scalable asynchronous system More on this: Quick scan our curated show notes on InfoQ http://bit.ly/2pPgq0G You can subscribe to the InfoQ newsletter to receive weekly updates on the hottest topics from professional software development. bit.ly/24x3IVq Subscribe: www.youtube.com/infoq Like InfoQ on Facebook: bit.ly/2jmlyG8 Follow on Twitter: twitter.com/InfoQ Follow on LinkedIn: www.linkedin.com/company/infoq Want to see extented shownotes? Check the landing page on InfoQ: http://bit.ly/2pPgq0G
We speak with Roman about coroutines and what Kotlin brings to the table when it comes to asynchronous programming, how it's implemented in Kotlin, the differences between coroutines and RxJava, Callbacks and other asynchronous programming models, and were it all this fits in when it comes to concurrent programming. For links to show notes, please visit talkingkotlin.com
Julien et Clément viennent discuter de programmation réactive, de systèmes réactifs et de vert.x. Enregistré le 25 novembre 2016 Téléchargement de l’épisode LesCastCodeurs-Episode–160.mp3 Interview Ta vie, ton œuvre @julienviet Son site @clementplop Le site de Clément Réactif ? Qu’est-ce que vert.x en 2 minutes. On entend beaucoup parler de réactif, ça veut dire quoi ? Pourquoi c’est important. Quelle est la compétition de vert.x ? vert.x RxJava RxJava 2 Reactor Le manifeste réactif Présentation Concurrency is not parallelism Loi de Amdahl Universal scalability law Cas d’utilisation Discussion sur les cas d’utilisation typique. Que faire si j’ai mon CRUD classique et un use cas réactif Netty Le cycle de développement Comment est-ce que je démarre une application vert.x Embedded vs serveur ? Est-ce que je réécris mon serveur HTTP ? Le langage que je veux ? Quelles sont les primitives avec lesquelles je bosse ? Bon les callback c’est bien mais comment je debugge. Comment on passe de l’info entre traitement d’événement non bloquant Et ma transaction elle peut traverser plusieurs événements ? Et on peut encore avoir des bugs avec vert.x ? Comment je teste un système vert.x ? La partie web Accéder à mes données SGBD L’intégration avec des systèmes de messages et autres integration AMQP, JMS, Stomp, Kafka C’est quoi le message bus dont on parle dans vert.x Partie Réactive et microservice A Devoxx France 2014, RxJava c’était de la bombe. C’est has-been maintenant ? Quel est le paysage réactif aujourd’hui. Pour les microservices il y a plein de patterns à connaître. Vous fournissez des choses? Le moteur vert.x Un seul thread ? Quid du blocant Pourquoi un seul thread c’est peux que ce qu’on fait depuis des années ? Mechanical sympathy ? Vous avez un cluster de vert.x Ils se parlent comment C’est quoi la taille classique Communauté et le futur de vert.x Alors la communauté Eclipse, ça pue ou pas ? Roadmap. vert.x awesome Nous contacter Faire un crowdcast ou une crowdquestion Contactez-nous via twitter https://twitter.com/lescastcodeurs sur le groupe Google https://groups.google.com/group/lescastcodeurs ou sur le site web https://lescastcodeurs.com/ Flattr-ez nous (dons) sur https://lescastcodeurs.com/ En savoir plus sur le sponsoring? sponsors@lescastcodeurs.com
Dans cet épisode, l’équipe canal historique est rejointe par Audrey Neveu pour discuter des nouvelles récentes. Java 9 et 10, reactive streams, les tensions entre Datastax et Apache, un peu de Docker bashing, le retour d’AWS sans oublier 2 crowdquestions. Enregistré le 12 décembre 2016 Téléchargement de l’épisode LesCastCodeurs-Episode–159.mp3 News Comment poser des crowdquestions Java et langages Java 9 peut-être à l’heure mais sans les tests ? La mailing liste JDK 10 est ouverte Java 9 peut-être à l’heure mais sans les tests ? Les JEP pour Java 10+: Lambda Enums et Generics Declaration et variance Ceylon 1.3.1 est sorti ainsi que le support pour Eclipse et IntelliJ IDEA Framework Interview sur RxJava 2 et reactive streams Grails arrive avec start.grails.io Nouveaux guides pratiques sur Grails Java EE: Management 2.0 et JMS 2.1 jetés, MVC cherche une nouvelle famille Donnée MongoDB Driver 3.4 Y a pas que le théorème CAP dans la vie Apache, Cassandra et Datastax: le ménage à trois Le driver JDBC de Microsoft SQLServer open source Saagie lève 4,2 millions Infrastructure Docker rachete Infinit Retour (naif) sur Docker Retour moins naif sur Docker La mémoire des process expliques aux enfants AWS a fait sa grand-messe (quelqu’un a suivi d’un peu plus pret que moi?) Snowball, Snowmobile, glue, Lambda edge, lightsail (VPS) Ce que Dropbox a fait depuis qu’ils sont partis de AWS StackOverflow: combien de serveurs OpenShift dédié sur Google Cloud Web et design L’expérience utilisateur de l’entourloupe Angular embrasse SemVer Outillage 2017 l’année du desktop Linux Grafana apporte l’alerting Prometeus 1.4 est sorti Support de Java dans Visual studio Code et support de Lombok Présentation Java 9 et Maven Générer des JARs pour Java 8 et Java 9 Méthodologie et politique Financer un projet open source Palantir et La DGSI le Trump’s Tech Summit de mercredi Divers Simulateur de startup l’ouverture du dépôt des candidatures pour Station F Outils de l’épisode Julien nous présente EvoSuite Crowdquestion Héritage OO et REST vs message. Conférences Snowcamp les 8–10 fevrier Devoxx France les 5–7 avril 2016 Mix-IT les 20–21 avril 2017 Breizhcamp les 19–21 avril 2017 RivieraDev les 11–12 mai 2017 Voxxed Days au CERN Nous contacter Faire un crowdcast ou une crowdquestion Contactez-nous via twitter https://twitter.com/lescastcodeurs sur le groupe Google https://groups.google.com/group/lescastcodeurs ou sur le site web https://lescastcodeurs.com/ Flattr-ez nous (dons) sur https://lescastcodeurs.com/ En savoir plus sur le sponsoring? sponsors@lescastcodeurs.com
We have Jake Wharton and RxJava in one episode
Серьезный разговор о реактивном программировании. Ответы на самые главные вопросы: Зачем? С чего начать? И как же прикрутить к жизненному циклу? Участники выпуска - матерые реактивщики, за плечами которых не только полное внедрение подхода в мобильные проекты, но и свои реактивные библиотеки.
02:25 - Daniel Jacobson Introduction Twitter Blog SlideShare LinkedIn Netflix @netflix Netflix Techblog Netflix GitHub 02:46 - How Netflix Looks at Programming and Development Team Context and Control Freedom and Responsibility Netflix: Freedom & Responsibility Culture (Version 1) Netflix Culture: Freedom & Responsibility (Version 2) Amazon AWS JVM (Java Virtual Machine) “Specialties” 05:03 - Maintaining a Consistent Culture Setting Context 06:37 - Onboarding Process 08:15 - Engineering spirals: 10 philosophies to facilitate innovation Introspection Transformations: Staffed Up Solving the Resiliency Problem hystrix 15:04 - Making Space for Innovation Building Expectations Incrementing Deliverables Building Trust and Confidence Maintenance Mode 23:12 - APIs Why REST Keeps Me Up At Night API Orchestration Layers (Separation of Concerns) Gather Format Deliver 29:32 - Solving Real Problems, The Groovy Layer The Groovy Programming Language 31:34 - hystrix and Patterns for Making Systems Resilient Chaos Monkey SimianArmy Event Isolation ReactiveX 39:14 - RxJava 41:17 - The Dynamic of Senior Engineers Screening Process 44:02 - Conway's Law 47:44 - Best and Most Challenging Parts About Working for Netflix Scaling and Maintaining Picks Fund Club (Coraline) The Codeless Code (Avdi) Trotro (Avdi) Serial Podcast (Chuck) Happy Father’s Day! (Chuck) RailsClips (Chuck) StartUp (Daniel) Reply All (Daniel) Mystery Show (Daniel) Chris Messina: Seeking Genius in Negative Space (Daniel) Chris Messina: Full Stack Employee (Daniel) Netflix Techblog (Daniel) Netflix GitHub (Daniel)
02:25 - Daniel Jacobson Introduction Twitter Blog SlideShare LinkedIn Netflix @netflix Netflix Techblog Netflix GitHub 02:46 - How Netflix Looks at Programming and Development Team Context and Control Freedom and Responsibility Netflix: Freedom & Responsibility Culture (Version 1) Netflix Culture: Freedom & Responsibility (Version 2) Amazon AWS JVM (Java Virtual Machine) “Specialties” 05:03 - Maintaining a Consistent Culture Setting Context 06:37 - Onboarding Process 08:15 - Engineering spirals: 10 philosophies to facilitate innovation Introspection Transformations: Staffed Up Solving the Resiliency Problem hystrix 15:04 - Making Space for Innovation Building Expectations Incrementing Deliverables Building Trust and Confidence Maintenance Mode 23:12 - APIs Why REST Keeps Me Up At Night API Orchestration Layers (Separation of Concerns) Gather Format Deliver 29:32 - Solving Real Problems, The Groovy Layer The Groovy Programming Language 31:34 - hystrix and Patterns for Making Systems Resilient Chaos Monkey SimianArmy Event Isolation ReactiveX 39:14 - RxJava 41:17 - The Dynamic of Senior Engineers Screening Process 44:02 - Conway's Law 47:44 - Best and Most Challenging Parts About Working for Netflix Scaling and Maintaining Picks Fund Club (Coraline) The Codeless Code (Avdi) Trotro (Avdi) Serial Podcast (Chuck) Happy Father’s Day! (Chuck) RailsClips (Chuck) StartUp (Daniel) Reply All (Daniel) Mystery Show (Daniel) Chris Messina: Seeking Genius in Negative Space (Daniel) Chris Messina: Full Stack Employee (Daniel) Netflix Techblog (Daniel) Netflix GitHub (Daniel)
02:25 - Daniel Jacobson Introduction Twitter Blog SlideShare LinkedIn Netflix @netflix Netflix Techblog Netflix GitHub 02:46 - How Netflix Looks at Programming and Development Team Context and Control Freedom and Responsibility Netflix: Freedom & Responsibility Culture (Version 1) Netflix Culture: Freedom & Responsibility (Version 2) Amazon AWS JVM (Java Virtual Machine) “Specialties” 05:03 - Maintaining a Consistent Culture Setting Context 06:37 - Onboarding Process 08:15 - Engineering spirals: 10 philosophies to facilitate innovation Introspection Transformations: Staffed Up Solving the Resiliency Problem hystrix 15:04 - Making Space for Innovation Building Expectations Incrementing Deliverables Building Trust and Confidence Maintenance Mode 23:12 - APIs Why REST Keeps Me Up At Night API Orchestration Layers (Separation of Concerns) Gather Format Deliver 29:32 - Solving Real Problems, The Groovy Layer The Groovy Programming Language 31:34 - hystrix and Patterns for Making Systems Resilient Chaos Monkey SimianArmy Event Isolation ReactiveX 39:14 - RxJava 41:17 - The Dynamic of Senior Engineers Screening Process 44:02 - Conway's Law 47:44 - Best and Most Challenging Parts About Working for Netflix Scaling and Maintaining Picks Fund Club (Coraline) The Codeless Code (Avdi) Trotro (Avdi) Serial Podcast (Chuck) Happy Father’s Day! (Chuck) RailsClips (Chuck) StartUp (Daniel) Reply All (Daniel) Mystery Show (Daniel) Chris Messina: Seeking Genius in Negative Space (Daniel) Chris Messina: Full Stack Employee (Daniel) Netflix Techblog (Daniel) Netflix GitHub (Daniel)
In the final part of this two-part segment, we continue our talk with Jake Wharton. We dive right into the topic of testing. Jake then talks about his approach to testing apps in Android and the different languages that he finds interesting. We then move on to RxJava, NotRxAndroid, SqlBrite and many other libraries and topics to round out this great second episode. Again, we'd love to thank Jake for joining us here on the Fragmented Podcast show; it has been an honor. We hope you enjoy it as much as we did.
In this episode of Fragmented, Donn and Kaushik continue their conversation with Dan Lew on RxJava. In the final part of this 2 part series, they talk about many useful RxJava operators and other intricacies of using RxJava in Android.
In this episode of Fragmented, Donn and Kaushik interview Dan Lew - druid of RxJava & RxAndroid! In part 1 of this 2 part series, we find out more about the one they call Dan Lew. We ask Dan how he started off as a developer, how he stays on top of development, where he draws inspiration from for amazing Android development and much more. We then begin disarming the glorious beast that is RxJava touching upon it’s benefits and begin discussion of some common operators.
Guillaume, Arnaud et Vincent se retrouvent et discutent de JavaOne 2014, des propositions autour de Java 9, de RxJava et autres collections alternatives. Côté entreprise, ils discutent du cloud et notamment du retrait de CloudBees du PaaS et des expériences du cloud à la Française. Le lot de failles de sécurité et d’outils pour développeurs est aussi discuté. Enregistré le 7 octobre 2014 Téléchargement de l’épisode LesCastCodeurs-Episode–110.mp3 News Crowdcasting: 0 message reçu ! Lancez-vous et proposer des petites sections http://lescastcodeurs.com/crowdcasting/ Vous voulez échanger sur les raisons pour ne pas contribuer une section? Discutons sur le Google Group des cast codeurs. JavaOne Jigsaw - modularisation pour Java Value types pour Java Langages Java Takipi lance un site ‘Java is Cool’ Proposition de REPL pour Java Pour un JSR pour Rich Desktop Applications Autres langages Rust s’approche de la 1.0 Stéphane Epardaud sur Ceylon à JavaZone Scala: je forke, tu forkes, nous forkons Golo 1.1 Algorithmique Big O pour les nuls Java Entreprise Les nouveautés de Spring 4.1 et Spring Boot Comment migrer une configuration XML spring en pur Java Grokking RxJava, Part 1: The Basics Grokking RxJava, Part 2: Operator, Operator Grokking RxJava, Part 3: Reactive with benefits Manifeste reactif GS Collections by Example – Part 1 Bintray Premium annoncé Middleware Apache Storm est maintenant projet top level Cloud CloudBees sort du PaaS runtime et se concentre sur Jenkins CloudFoundry Clever Cloud Le cloud français deux ans après Mobile et bureau Des News JavaFX JBoss tools pour les devs mobiles Les zones facile à toucher sur les phablets Outillage XWiki 6.2 Le Bash-gate (shellshock) Corriger bash sur Debian Squeeze Correctif d’Apple Touche pas à mon Markdown Fast classpath scanner Running GUI apps with Docker Detect use of legacy APIs which modern Java versions supersede Gatling 2 Log analyser / visualiser for Java HotSpot JIT compiler Humains Larry Elisson quitte le poste de CEO d’Oracle mais reste CTO et président du directoire Tous terroristes ? Circle of Code Sorceresses Divers Petit jeu sur les courbes de Bézier Pourquoi est-ce que Google se dépêche de tuer SHA–1 Les nouveaux mots français de l’informatique Actions ‘view pull request’ et ‘view issues’" vers GitHub dans GMail Faire tourner des applis Android sous Chrome Le Bend-gate de l’iPhone 6 Les mains dans le cambouis et autres débats Rien cette semaine :) Conférences Google Summer of Code 2015 Google Code-In 2014 Code Week Code Week France La participation des Duchess DevFest Devoxx Nous contacter Contactez-nous via twitter http://twitter.com/lescastcodeurs sur le groupe Google http://groups.google.com/group/lescastcodeurs ou sur le site web http://lescastcodeurs.com/ Flattr-ez nous (dons) sur http://lescastcodeurs.com/ En savoir plus sur le sponsoring? sponsors@lescastcodeurs.com
In der 30. Episode von DTR.fm geht es zu Beginn wieder um Podcasts und Podcast Apps für iOS. Anschließend erzählt André von der Programmierung einer neuen Android App und berichtet von Libraries die dafür verwendet wurden. Einer der Libraries ist unter anderem RxJava, Tom und André reden über Reactive Programming und den Ansatz den Netflix damit verfolgt. Zu guter Letzt berichtet Tom noch von seinem neuen Grails Projekt, den dort verwendeten Spock Tests, Grails 3.0 und der neuesten JavaMagazin Ausgabe zum Themenschwerpunkt "Docker". Diese Episode wurde gesponsert von Fournova und Git Tower 2. Vielen Dank dafür! Shownotes Podlove Podcast Publisher Script Notes Podcast (iTunes) "The one with the guys from Final Draft", Script Notes Podcast Git Tower 2 Tab Tags Mac Decals Apple: Mac Book Air Advertisement (YouTube) Apple: Mac Book Air Stickers Git Aliases (Gist) Must have Git aliases (Blog) Square Open Source Libraries (for Android) Maximum Awesome RxJava Ben Christensen (Netflix) on RxJava, Goto Conference (YouTube) Reactive Programming (WP) Coursera: Principles of Reactive Programming Coursera: Functional Programming Principles in Scala Android Statistics Dashboard Greach 2014: Road to Grails 3.0 (YouTube) Spock: Interaction-Based Testing JavaMagazin 09.14: Docker