POPULARITY
Arnaud et Emmanuel discutent des versions Java, font un résumé de l'ecosystème WebAssembly, discutent du nouveau Model Context Protocol, parlent d'observabilité avec notamment les Wide Events et de pleins d'autres choses encore. Enregistré le 17 janvier 2025 Téléchargement de l'épisode LesCastCodeurs-Episode–321.mp3 ou en vidéo sur YouTube. News Langages java trend par InfoQ https://www.infoq.com/articles/java-trends-report–2024/ Java 17 finalement depasse 11 et 8 ~30/33% Java 21 est à 1.4% commonhaus apparait GraalVM en early majority Spring AI et langchain4j en innovateurs SB 3 voit son adoption augmenter Un bon résumé sur WebAssembly, les différentes specs comme WASM GC, WASI, WIT, etc https://2ality.com/2025/01/webassembly-language-ecosystem.html WebAssembly (Wasm) est un format d'instructions binaires pour une machine virtuelle basée sur une pile, permettant la portabilité et l'efficacité du code. Wasm a évolué à partir d'asm.js, un sous-ensemble de JavaScript qui pouvait fonctionner à des vitesses proches de celles natives. WASI (WebAssembly System Interface) permet à Wasm de fonctionner en dehors des navigateurs Web, fournissant des API pour le système de fichiers, CLI, HTTP, etc. Le modèle de composant WebAssembly permet l'interopérabilité entre les langages Wasm à l'aide de WIT (Wasm Interface Type) et d'ABI canonique. Les composants Wasm se composent d'un module central et d'interfaces WIT pour les importations/exportations, facilitant l'interaction indépendante du langage. Les interfaces WIT décrivent les types et les fonctions, tandis que les mondes WIT définissent les capacités et les besoins d'un composant (importations/exportations). La gestion des packages Wasm est assurée par Warg, un protocole pour les registres de packages Wasm. Une enquête a montré que Rust est le langage Wasm le plus utilisé, suivi de Kotlin et de C++; de nombreux autres langages sont également en train d'émerger. Un algorithme de comptage a taille limitée ne mémoire a été inventé https://www.quantamagazine.org/computer-scientists-invent-an-efficient-new-way-to-count–20240516/ élimine un mot de manière aléatoire mais avec une probabilité connue quand il y a besoin de récupérer de l'espace cela se fait par round et on augmente la probabilité de suppression à chaque round donc au final, ne nombre de mots / la probabilité d'avoir été éliminé donne une mesure approximative mais plutot précise Librairies Les contributions Spring passent du CLA au DCO https://spring.io/blog/2025/01/06/hello-dco-goodbye-cla-simplifying-contributions-to-spring d'abord manuel amis meme automatisé le CLA est une document legal complexe qui peut limiter les contribuitions le DCO vient le Linux je crois et est super simple accord que la licence de la conmtrib est celle du projet accord que le code est public et distribué en perpetuité s'appuie sur les -s de git pour le sign off Ecrire un serveur MCP en Quarkus https://quarkus.io/blog/mcp-server/ MCP est un protocol proposé paor Antropic pour integrer des outils orchestrables par les LLMs MCP est frais et va plus loin que les outils offre la notion de resource (file), de functions (tools), et de proimpts pre-built pour appeler l'outil de la meilleure façon On en reparlera a pres avec les agent dans un article suivant il y a une extension Quarkus pour simplifier le codage un article plus detaillé sur l'integration Quarkus https://quarkus.io/blog/quarkus-langchain4j-mcp/ GreenMail un mini mail server en java https://greenmail-mail-test.github.io/greenmail/#features-api Utile pour les tests d'integration Supporte SMTP, POP3 et IMAP avec TLS/SSL Propose des integrations JUnit, Spring Une mini UI et des APIs REST permettent d'interagir avec le serveur si par exemple vous le partagé dans un container (il n'y a pas d'integration TestContainer existante mais elle n'est pas compliquée à écrire) Infrastructure Docker Bake in a visual way https://dev.to/aurelievache/understanding-docker-part–47-docker-bake–4p05 docker back propose d'utiliser des fichiers de configuration (format HCL) pour lancer ses builds d'images et docker compose en gros voyez ce DSL comme un Makefile très simplifié pour les commandes docker qui souvent peuvent avoir un peu trop de paramètres Datadog continue de s'etendre avec l'acquisition de Quickwit https://www.datadoghq.com/blog/datadog-acquires-quickwit/ Solution open-source de recherche des logs qui peut être déployée on-premise et dans le cloud https://quickwit.io/ Les logs ne quittent plus votre environment ce qui permet de répondre à des besoins de sécurité, privacy et réglementaire Web 33 concepts en javascript https://github.com/leonardomso/33-js-concepts Call Stack, Primitive Types, Value Types and Reference Types, Implicit, Explicit, Nominal, Structuring and Duck Typing, == vs === vs typeof, Function Scope, Block Scope and Lexical Scope, Expression vs Statement, IIFE, Modules and Namespaces, Message Queue and Event Loop, setTimeout, setInterval and requestAnimationFrame, JavaScript Engines, Bitwise Operators, Type Arrays and Array Buffers, DOM and Layout Trees, Factories and Classes, this, call, apply and bind, new, Constructor, instanceof and Instances, Prototype Inheritance and Prototype Chain, Object.create and Object.assign, map, reduce, filter, Pure Functions, Side Effects, State Mutation and Event Propagation, Closures, High Order Functions, Recursion, Collections and Generators, Promises, async/await, Data Structures, Expensive Operation and Big O Notation, Algorithms, Inheritance, Polymorphism and Code Reuse, Design Patterns, Partial Applications, Currying, Compose and Pipe, Clean Code Data et Intelligence Artificielle Phi 4 et les small language models https://techcommunity.microsoft.com/blog/aiplatformblog/introducing-phi–4-microsoft%e2%80%99s-newest-small-language-model-specializing-in-comple/4357090 Phi 4 un SML pour les usages locaux notamment 14B de parametres belle progression de ~20 points sur un score aggregé et qui le rapproche de Llama 3.3 et ses 70B de parametres bon en math (data set synthétique) Comment utiliser Gemini 2.0 Flash Thinking (le modèle de Google qui fait du raisonnement à la sauce chain of thought) en Java avec LangChain4j https://glaforge.dev/posts/2024/12/20/lets-think-with-gemini–2-thinking-mode-and-langchain4j/ Google a sorti Gemini 2.0 Flash, un petit modèle de la famille Gemini the “thinking mode” simule les cheminements de pensée (Chain of thoughts etc) décompose beaucoup plus les taches coplexes en plusiewurs taches un exemple est montré sur le modele se battant avec le probleme Les recommendations d'Antropic sur les systèmes d'agents https://www.anthropic.com/research/building-effective-agents défini les agents et les workflow Ne recommence pas les frameworks (LangChain, Amazon Bedrock AI Agent etc) le fameux débat sur l'abstraction Beaucoup de patterns implementable avec quelques lignes sans frameworks Plusieurs blocks de complexité croissante Augmented LLM (RAG, memory etc): Anthropic dit que les LLMs savent coordonner cela via MCP apr exemple Second: workflow prompt chaining : avec des gates et appelle les LLMs savent coordonner successivement ; favorise la precision vs la latence vu que les taches sont décomposées en plusieurs calls LLMs Workflow routing: classifie une entree et choisie la route a meilleure: separation de responsabilité Workflow : parallelisation: LLM travaillent en paralllele sur une tache et un aggregateur fait la synthèse. Paralleisaiton avec saucissonage de la tache ou voter sur le meilleur réponse Workflow : orchestrator workers: quand les taches ne sont pas bounded ou connues (genre le nombre de fichiers de code à changer) - les sous taches ne sont pas prédéfinies Workflow: evaluator optimizer: nun LLM propose une réponse, un LLM l'évalue et demande une meilleure réponse au besoin Agents: commande ou interaction avec l;humain puis autonome meme si il peut revenir demander des precisions à l'humain. Agents sont souvent des LLM utilisât des outil pour modifier l'environnement et réagir a feedback en boucle Ideal pour les problèmes ouverts et ou le nombre d'étapes n'est pas connu Recommende d'y aller avec une complexité progressive L'IA c'est pas donné https://techcrunch.com/2025/01/05/openai-is-losing-money-on-its-pricey-chatgpt-pro-plan-ceo-sam-altman-says/ OpenAI annonce que même avec des licenses à 200$/mois ils ne couvrent pas leurs couts associés… A quand l'explosion de la bulle IA ? Outillage Ghostty, un nouveau terminal pour Linux et macOS : https://ghostty.org/ Initié par Mitchell Hashimoto (hashicorp) Ghostty est un émulateur de terminal natif pour macOS et Linux. Il est écrit en Swift et utilise AppKit et SwiftUI sur macOS, et en Zig et utilise l'API GTK4 C sur Linux. Il utilise des composants d'interface utilisateur native et des raccourcis clavier et souris standard. Il prend en charge Quick Look, Force Touch et d'autres fonctionnalités spécifiques à macOS. Ghostty essaie de fournir un ensemble riche de fonctionnalités utiles pour un usage quotidien. Comment Pinterest utilise Honeycomb pour améliorer sa CI https://medium.com/pinterest-engineering/how-pinterest-leverages-honeycomb-to-enhance-ci-observability-and-improve-ci-build-stability–15eede563d75 Pinterest utilise Honeycomb pour améliorer l'observabilité de l'intégration continue (CI). Honeycomb permet à Pinterest de visualiser les métriques de build, d'analyser les tendances et de prendre des décisions basées sur les données. Honeycomb aide également Pinterest à identifier les causes potentielles des échecs de build et à rationaliser les tâches d'astreinte. Honeycomb peut également être utilisé pour suivre les métriques de build locales iOS aux côtés des détails de la machine, ce qui aide Pinterest à prioriser les mises à niveau des ordinateurs portables pour les développeurs. Méthodologies Suite à notre épisode sur les différents types de documentation, cet article parle des bonnes pratiques à suivre pour les tutoriels https://refactoringenglish.com/chapters/rules-for-software-tutorials/ Écrivez des tutoriels pour les débutants, en évitant le jargon et la terminologie complexe. Promettez un résultat clair dans le titre et expliquez l'objectif dans l'introduction. Montrez le résultat final tôt pour réduire les ambiguïtés. Rendez les extraits de code copiables et collables, en évitant les invites de shell et les commandes interactives. Utilisez les versions longues des indicateurs de ligne de commande pour plus de clarté. Séparez les valeurs définies par l'utilisateur de la logique réutilisable à l'aide de variables d'environnement ou de constantes nommées. Épargnez au lecteur les tâches inutiles en utilisant des scripts. Laissez les ordinateurs évaluer la logique conditionnelle, pas le lecteur. Maintenez le code en état de fonctionnement tout au long du tutoriel. Enseignez une chose par tutoriel et minimisez les dépendances. Les Wide events, un “nouveau” concept en observabilité https://jeremymorrell.dev/blog/a-practitioners-guide-to-wide-events/ un autre article https://isburmistrov.substack.com/p/all-you-need-is-wide-events-not-metrics L'idée est de logger des evenements (genre JSON log) avec le plus d'infos possible de la machine, la ram, la versiond e l'appli, l'utilisateur, le numero de build qui a produit l'appli, la derniere PR etc etc ca permet de filtrer et grouper by et de voir des correlations visuelles tres rapidement et de zoomer tiens les ventes baisses de 20% tiens en fait ca vient de l'appli andriod tiens aps correle a la version de l'appli mais la version de l'os si! le deuxieme article est facile a lire le premier est un guide d'usage exhaustif du concept Entre argumenter et se donner 5 minutes https://signalvnoise.com/posts/3124-give-it-five-minutes on veut souvent argumenter aka poser des questions en ayant déjà la reponse en soi emotionnellement mais ca amene beaucoup de verbiage donner 5 minutes à l'idée le temps d'y penser avant d'argumenter Loi, société et organisation Des juges fédéraux arrêtent le principe de la neutralité du net https://www.lemonde.fr/pixels/article/2025/01/03/les-etats-unis-reviennent-en-arriere-sur-le-principe-de-la-neutralite-du-net_6479575_4408996.html?lmd_medium=al&lmd_campaign=envoye-par-appli&lmd_creation=ios&lmd_source=default la neutralité du net c'est l'interdiction de traiter un paquet différemment en fonction de son émetteur Par exemple un paquet Netflix qui serait ralenti vs un paquet Amazon Donald trump est contre cette neutralité. À voir les impacts concrets dans un marché moins régulé. Rubrique débutant Un petit article sur les float vs les double en Java https://www.baeldung.com/java-float-vs-double 4 vs 8 bytes precision max de 7 vs 15 echele 10^38 vs 10^308 (ordre de grandeur) perf a peu pret similaire sauf peut etre pour des modeles d'IA qui vont privilegier une taille plus petite parfois attention overflow et les accumulation d'erreurs d'approximation BigDecimal Conférences La liste des conférences provenant de Developers Conferences Agenda/List par Aurélie Vache et contributeurs : 20 janvier 2025 : Elastic{ON} - Paris (France) 22–25 janvier 2025 : SnowCamp 2025 - Grenoble (France) 24–25 janvier 2025 : Agile Games Île-de-France 2025 - Paris (France) 6–7 février 2025 : Touraine Tech - Tours (France) 21 février 2025 : LyonJS 100 - Lyon (France) 28 février 2025 : Paris TS La Conf - Paris (France) 6 mars 2025 : DevCon #24 : 100% IA - Paris (France) 13 mars 2025 : Oracle CloudWorld Tour Paris - Paris (France) 14 mars 2025 : Rust In Paris 2025 - Paris (France) 19–21 mars 2025 : React Paris - Paris (France) 20 mars 2025 : PGDay Paris - Paris (France) 20–21 mars 2025 : Agile Niort - Niort (France) 25 mars 2025 : ParisTestConf - Paris (France) 26–29 mars 2025 : JChateau Unconference 2025 - Cour-Cheverny (France) 27–28 mars 2025 : SymfonyLive Paris 2025 - Paris (France) 28 mars 2025 : DataDays - Lille (France) 28–29 mars 2025 : Agile Games France 2025 - Lille (France) 3 avril 2025 : DotJS - Paris (France) 3 avril 2025 : SoCraTes Rennes 2025 - Rennes (France) 4 avril 2025 : Flutter Connection 2025 - Paris (France) 10–11 avril 2025 : Android Makers - Montrouge (France) 10–12 avril 2025 : Devoxx Greece - Athens (Greece) 16–18 avril 2025 : Devoxx France - Paris (France) 23–25 avril 2025 : MODERN ENDPOINT MANAGEMENT EMEA SUMMIT 2025 - Paris (France) 24 avril 2025 : IA Data Day 2025 - Strasbourg (France) 29–30 avril 2025 : MixIT - Lyon (France) 7–9 mai 2025 : Devoxx UK - London (UK) 15 mai 2025 : Cloud Toulouse - Toulouse (France) 16 mai 2025 : AFUP Day 2025 Lille - Lille (France) 16 mai 2025 : AFUP Day 2025 Lyon - Lyon (France) 16 mai 2025 : AFUP Day 2025 Poitiers - Poitiers (France) 24 mai 2025 : Polycloud - Montpellier (France) 5–6 juin 2025 : AlpesCraft - Grenoble (France) 5–6 juin 2025 : Devquest 2025 - Niort (France) 11–13 juin 2025 : Devoxx Poland - Krakow (Poland) 12–13 juin 2025 : Agile Tour Toulouse - Toulouse (France) 12–13 juin 2025 : DevLille - Lille (France) 17 juin 2025 : Mobilis In Mobile - Nantes (France) 24 juin 2025 : WAX 2025 - Aix-en-Provence (France) 25–27 juin 2025 : BreizhCamp 2025 - Rennes (France) 26–27 juin 2025 : Sunny Tech - Montpellier (France) 1–4 juillet 2025 : Open edX Conference - 2025 - Palaiseau (France) 7–9 juillet 2025 : Riviera DEV 2025 - Sophia Antipolis (France) 18–19 septembre 2025 : API Platform Conference - Lille (France) & Online 2–3 octobre 2025 : Volcamp - Clermont-Ferrand (France) 6–10 octobre 2025 : Devoxx Belgium - Antwerp (Belgium) 9–10 octobre 2025 : Forum PHP 2025 - Marne-la-Vallée (France) 16–17 octobre 2025 : DevFest Nantes - Nantes (France) 4–7 novembre 2025 : NewCrafts 2025 - Paris (France) 6 novembre 2025 : dotAI 2025 - Paris (France) 7 novembre 2025 : BDX I/O - Bordeaux (France) 12–14 novembre 2025 : Devoxx Morocco - Marrakech (Morocco) 23–25 avril 2026 : Devoxx Greece - Athens (Greece) 17 juin 2026 : Devoxx Poland - Krakow (Poland) Nous contacter Pour réagir à cet épisode, venez discuter sur le groupe Google https://groups.google.com/group/lescastcodeurs Contactez-nous via X/twitter https://twitter.com/lescastcodeurs ou Bluesky https://bsky.app/profile/lescastcodeurs.com 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/
In dieser Folge von Female TechTalk plaudert Sara endlich aus dem Nähkästchen und verrät, worum es in ihrer Bachelorarbeit geht! Danach geht's direkt rein in die faszinierende Welt von Ruby, der Programmiersprache, die fast so elegant ist wie ein geschliffener Edelstein. Erfahrt, wie Yukihiro „Matz“ Matsumoto die Sprache entwickelt hat, um Programmieren menschenfreundlich und fast schon poetisch zu machen. Warum lieben Entwickler*innen Ruby so sehr, was ist ein Webscraper und was hat es mit „Duck Typing“ auf sich? Darauf haben wir jede Menge Antworten parat. Und natürlich gibt's noch Fun Facts und leckeres Obst oben drauf! Packt die Kopfhörer aus eurer Schatztruhe und freut euch auch funkelnde Aha-Momente… Shownotes: https://www.female-techtalk.com/techsisters/ https://railsgirls.com/
What are the advantages of determining the type of an object by how it behaves? What coding circumstances are not a good fit for duck typing? Christopher Trudeau is back on the show this week, bringing another batch of PyCoder's Weekly articles and projects.
Talk Python To Me - Python conversations for passionate developers
What advice would you give someone just getting into Python? What did you learn over time through hard work and a few tears that would have really helped you? It's a fun game to play and we have Jason McDonald on the podcast to give us his take. Enjoy! Links from the show Jason C. McDonald: @codemouse92@mastodon.online Dead Simple Python: nostarch.com Coroutines and Tasks: docs.python.org Duck Typing: wikipedia.org Static Duck Typing in Python with Protocols: daan.fyi PEP 709: peps.python.org PEP 289: peps.python.org Python Packaging Strategy Discussion - Part 1: discuss.python.org Branch-detective: github.com Hypothesis: readthedocs.io Pydantic v2 announcement: pydantic.dev Michael's venv alias: digitaloceanspaces.com Watch this episode on YouTube: youtube.com Episode transcripts: talkpython.fm --- Stay in touch with us --- Subscribe to us on YouTube: youtube.com Follow Talk Python on Mastodon: talkpython Follow Michael on Mastodon: mkennedy Sponsors Sentry Error Monitoring, Code TALKPYTHON Talk Python Training
Summary One of the reasons that data work is so challenging is because no single person or team owns the entire process. This introduces friction in the process of collecting, processing, and using data. In order to reduce the potential for broken pipelines some teams have started to adopt the idea of data contracts. In this episode Abe Gong brings his experiences with the Great Expectations project and community to discuss the technical and organizational considerations involved in implementing these constraints to your data workflows. Announcements Hello and welcome to the Data Engineering Podcast, the show about modern data management When you're ready to build your next pipeline, or want to test out the projects you hear about on the show, you'll need somewhere to deploy it, so check out our friends at Linode. With their new managed database service you can launch a production ready MySQL, Postgres, or MongoDB cluster in minutes, with automated backups, 40 Gbps connections from your application hosts, and high throughput SSDs. Go to dataengineeringpodcast.com/linode (https://www.dataengineeringpodcast.com/linode) today and get a $100 credit to launch a database, create a Kubernetes cluster, or take advantage of all of their other services. And don't forget to thank them for their continued support of this show! Atlan is the metadata hub for your data ecosystem. Instead of locking your metadata into a new silo, unleash its transformative potential with Atlan's active metadata capabilities. Push information about data freshness and quality to your business intelligence, automatically scale up and down your warehouse based on usage patterns, and let the bots answer those questions in Slack so that the humans can focus on delivering real value. Go to dataengineeringpodcast.com/atlan (https://www.dataengineeringpodcast.com/atlan) today to learn more about how Atlan's active metadata platform is helping pioneering data teams like Postman, Plaid, WeWork & Unilever achieve extraordinary things with metadata and escape the chaos. Struggling with broken pipelines? Stale dashboards? Missing data? If this resonates with you, you're not alone. Data engineers struggling with unreliable data need look no further than Monte Carlo, the leading end-to-end Data Observability Platform! Trusted by the data teams at Fox, JetBlue, and PagerDuty, Monte Carlo solves the costly problem of broken data pipelines. Monte Carlo monitors and alerts for data issues across your data warehouses, data lakes, dbt models, Airflow jobs, and business intelligence tools, reducing time to detection and resolution from weeks to just minutes. Monte Carlo also gives you a holistic picture of data health with automatic, end-to-end lineage from ingestion to the BI layer directly out of the box. Start trusting your data with Monte Carlo today! Visit dataengineeringpodcast.com/montecarlo (http://www.dataengineeringpodcast.com/montecarlo) to learn more. Your host is Tobias Macey and today I'm interviewing Abe Gong about the technical and organizational implementation of data contracts Interview Introduction How did you get involved in the area of data management? Can you describe what your conception of a data contract is? What are some of the ways that you have seen them implemented? How has your work on Great Expectations influenced your thinking on the strategic and tactical aspects of adopting/implementing data contracts in a given team/organization? What does the negotiation process look like for identifying what needs to be included in a contract? What are the interfaces/integration points where data contracts are most useful/necessary? What are the discussions that need to happen when deciding when/whether a contract "violation" is a blocking action vs. issuing a notification? At what level of detail/granularity are contracts most helpful? At the technical level, what does the implementation/integration/deployment of a contract look like? What are the most interesting, innovative, or unexpected ways that you have seen data contracts used? What are the most interesting, unexpected, or challenging lessons that you have learned while working on data contracts/great expectations? When are data contracts the wrong choice? What do you have planned for the future of data contracts in great expectations? Contact Info LinkedIn (https://www.linkedin.com/in/abe-gong-8a77034/) @AbeGong (https://twitter.com/AbeGong) on Twitter Website (https://www.abegong.com/) Parting Question From your perspective, what is the biggest gap in the tooling or technology for data management today? Closing Announcements Thank you for listening! Don't forget to check out our other shows. Podcast.__init__ () covers the Python language, its community, and the innovative ways it is being used. The Machine Learning Podcast (https://www.themachinelearningpodcast.com) helps you go from idea to production with machine learning. Visit the site (https://www.dataengineeringpodcast.com) to subscribe to the show, sign up for the mailing list, and read the show notes. If you've learned something or tried out a project from the show then tell us about it! Email hosts@dataengineeringpodcast.com (mailto:hosts@dataengineeringpodcast.com)) with your story. To help other people find the show please leave a review on Apple Podcasts (https://podcasts.apple.com/us/podcast/data-engineering-podcast/id1193040557) and tell your friends and co-workers Links Great Expectations (https://www.abegong.com/) Podcast Episode (https://www.dataengineeringpodcast.com/great-expectations-technical-debt-data-pipeline-episode-117/) Progressive Typing (https://en.wikipedia.org/wiki/Gradual_typing) Pioneers, Settlers, Town Planners (https://blog.gardeviance.org/2015/03/on-pioneers-settlers-town-planners-and.html) Pydantic (https://pydantic-docs.helpmanual.io/) Podcast.__init__ Episode (https://www.pythonpodcast.com/pydantic-data-validation-episode-263/) Typescript (https://www.typescriptlang.org/) Duck Typing (https://en.wikipedia.org/wiki/Duck_typing) Flyte (https://flyte.org/) Podcast Episode (https://www.dataengineeringpodcast.com/flyte-data-orchestration-machine-learning-episode-291/) Dagster (https://dagster.io/) Podcast Episode (https://www.dataengineeringpodcast.com/dagster-software-defined-assets-data-orchestration-episode-309) Trino (https://trino.io/) The intro and outro music is from The Hug (http://freemusicarchive.org/music/The_Freak_Fandango_Orchestra/Love_death_and_a_drunken_monkey/04_-_The_Hug) by The Freak Fandango Orchestra (http://freemusicarchive.org/music/The_Freak_Fandango_Orchestra/) / CC BY-SA (http://creativecommons.org/licenses/by-sa/3.0/)
Conhece "type parameter"? Utiliza no reuso de código? Em quais cenários? Neste episódio falamos sobre o básico de "Generics". Play no p de Podcast! Participantes Marcio Frayze David marcio@segunda.tech https://twitter.com/marciofrayze https://segunda.tech https://masto.donte.com.br/web/accounts/138458 https://linkedin.com/in/marcio-frayze Julianno Martins Silva juliannoms@gmail.com https://twitter.com/juliannoms https://linkedin.com/in/juliannoms Links: Generics no Java: https://docs.oracle.com/javase/tutorial/java/generics/why.html https://www.baeldung.com/java-generics Generics no .NET: https://docs.microsoft.com/en-us/dotnet/standard/generics https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/generics/ Generics no Type Script: https://www.typescriptlang.org/docs/handbook/2/generics.html Generics no Python: https://mypy.readthedocs.io/en/stable/generics.html Duck Typing: https://en.wikipedia.org/wiki/Duck_typing Livro Effective Java (possui um capítulo só sobre Generics): https://www.goodreads.com/book/show/34927404-effective-java Generics na linguagem Dart: https://dart.dev/guides/language/language-tour#generics Type Erasure (Java): https://docs.oracle.com/javase/tutorial/java/generics/genTypes.html
Добрый день уважаемые слушатели. Представляем новый выпуск подкаста RWpod. В этом выпуске: Ruby Ruby 2.4 implements Regexp#match? without polluting global variables, Ruby 2.4 implements Enumerable#sum и Duck typing vs type safety in Ruby Getting rid of before_filter from your ApplicationController with cells и Purposes & Properties of Value Objects Introduction to fragment caching in Rails и Rails API - Throttling with Rack::Attack JavaScript The JavaScript Wars: How did we get here?, What programming language should you learn first? ʇdıɹɔsɐʌɐɾ :ɹǝʍsuɐ и WebAssembly Browser Preview Viewports research, part umpteen, GraphQL: 3 reasons not to use it и Migrating to Webpack 2 Tesseract.js: How To OCR Remote Images from a URL in Node, Egjs - a jQuery-based JavaScript library consisting of UI interactions, effects, and utilities, Turbo.js - a small library that makes it easier to perform complex calculations that can be done in parallel и 8 simple rules for a robust, scalable CSS architecture
React Remote Conf and Angular Remote Conf 03:15 - Justin Searls Introduction Twitter GitHub Blog Test Double JavaScript Jabber Episode #038: Jasmine with Justin Searls 04:13 - Testing testdouble.js teenytest Sinon.JS 08:44 - Mocking Growing Object-Oriented Software, Guided by Tests by Steve Freeman and Nat Pryce Jim Weirich 14:45 - Starting These Concepts as a Junior Developer Test-driven Development 17:55 - testdouble.js vs. sinon.js NIH = Not Invented Here 26:39 - Duck Typing, Monkey Patching, Duck Punching 32:22 - Node.js Negativity Design, Resources Martin Fowler’s Refactoring and Patterns Books Domain-Driven Design: Tackling Complexity in the Heart of Software by Eric Evans 42:52 - Community 45:08 - The AAA Rule: Arrange, Act, Assert 51:19 - Error Messages Picks Unemployment (Jamison) React Rally (Jamison) Julia Evans' Tweet: how to be a wizard programmer (Jamison) See the good in people (Aimee) Sinon.JS (Joe) How to Stay Motivated: Developing the Qualities of Success by Zig Ziglar (Chuck) The Harry Potter Series (Chuck) RetroPie (Justin) How Elm can Make you a Better JavaScript Programer (Justin) NEJS Conf (Justin)
React Remote Conf and Angular Remote Conf 03:15 - Justin Searls Introduction Twitter GitHub Blog Test Double JavaScript Jabber Episode #038: Jasmine with Justin Searls 04:13 - Testing testdouble.js teenytest Sinon.JS 08:44 - Mocking Growing Object-Oriented Software, Guided by Tests by Steve Freeman and Nat Pryce Jim Weirich 14:45 - Starting These Concepts as a Junior Developer Test-driven Development 17:55 - testdouble.js vs. sinon.js NIH = Not Invented Here 26:39 - Duck Typing, Monkey Patching, Duck Punching 32:22 - Node.js Negativity Design, Resources Martin Fowler’s Refactoring and Patterns Books Domain-Driven Design: Tackling Complexity in the Heart of Software by Eric Evans 42:52 - Community 45:08 - The AAA Rule: Arrange, Act, Assert 51:19 - Error Messages Picks Unemployment (Jamison) React Rally (Jamison) Julia Evans' Tweet: how to be a wizard programmer (Jamison) See the good in people (Aimee) Sinon.JS (Joe) How to Stay Motivated: Developing the Qualities of Success by Zig Ziglar (Chuck) The Harry Potter Series (Chuck) RetroPie (Justin) How Elm can Make you a Better JavaScript Programer (Justin) NEJS Conf (Justin)
React Remote Conf and Angular Remote Conf 03:15 - Justin Searls Introduction Twitter GitHub Blog Test Double JavaScript Jabber Episode #038: Jasmine with Justin Searls 04:13 - Testing testdouble.js teenytest Sinon.JS 08:44 - Mocking Growing Object-Oriented Software, Guided by Tests by Steve Freeman and Nat Pryce Jim Weirich 14:45 - Starting These Concepts as a Junior Developer Test-driven Development 17:55 - testdouble.js vs. sinon.js NIH = Not Invented Here 26:39 - Duck Typing, Monkey Patching, Duck Punching 32:22 - Node.js Negativity Design, Resources Martin Fowler’s Refactoring and Patterns Books Domain-Driven Design: Tackling Complexity in the Heart of Software by Eric Evans 42:52 - Community 45:08 - The AAA Rule: Arrange, Act, Assert 51:19 - Error Messages Picks Unemployment (Jamison) React Rally (Jamison) Julia Evans' Tweet: how to be a wizard programmer (Jamison) See the good in people (Aimee) Sinon.JS (Joe) How to Stay Motivated: Developing the Qualities of Success by Zig Ziglar (Chuck) The Harry Potter Series (Chuck) RetroPie (Justin) How Elm can Make you a Better JavaScript Programer (Justin) NEJS Conf (Justin)
01:49 - Erik Michaels-Ober Introduction Twitter GitHub Ruby Rogues Episode #127: Erik Michaels-Ober 02:07 - The Crystal Programming Language and Statically Typed Programming Languages Erik Michaels-Ober: An Introduction to Crystal @ PolyConf 15 06:54 - Type Inference Union Types Duck Typing Monkey Patching Sandi Metz Blog Post on the Wrong Abstraction 15:06 - Crystal vs Rust or Go 20:10 - Linting Rubocop 20:44 - Type Annotations and Perimeters Keyword Arguments 22:53 - The History of Crystal and its Development as a Language Crystal Docs Crystal GitHub Repo The Future of Crystal (Christmastime Blog Post) 24:41 - Annotation and Return Value 25:35 - Type Inferencing (Cont’d) 28:24 - Crystal REPL (ICR) 32:15 - Getting Involved with Crystal and the Development of the Language Crystal to_proc 40:08 - Threading and Concurrency 44:28 - Crystalshards Crystal Weekly 49:30 - Use Cases and Benchmarks Crystal Standard Library wc.cr 01:03:15 - Compile Errors More on Crystal Erik Michaels-Ober: Crystal Programming Language @ RubyC 2015 Interview for RubyC-2015 with Erik Michaels-Ober Built-in formatting tool Issue Picks Easy Bash Prompt Generator (Jessica) Logitech Wireless Headset Dual H820e Double-Ear Stereo Business Headset (David) Ruby Rogues Episode #127: Erik Michaels-Ober (Erik) fish shell (Erik) Rails Girls Summer of Code (Erik) RescueTime (Avdi) The 7 Habits of Highly Effective People: Powerful Lessons in Personal Change by Stephen R. Covey (Avdi) Whiplash White IPA (Avdi)
01:49 - Erik Michaels-Ober Introduction Twitter GitHub Ruby Rogues Episode #127: Erik Michaels-Ober 02:07 - The Crystal Programming Language and Statically Typed Programming Languages Erik Michaels-Ober: An Introduction to Crystal @ PolyConf 15 06:54 - Type Inference Union Types Duck Typing Monkey Patching Sandi Metz Blog Post on the Wrong Abstraction 15:06 - Crystal vs Rust or Go 20:10 - Linting Rubocop 20:44 - Type Annotations and Perimeters Keyword Arguments 22:53 - The History of Crystal and its Development as a Language Crystal Docs Crystal GitHub Repo The Future of Crystal (Christmastime Blog Post) 24:41 - Annotation and Return Value 25:35 - Type Inferencing (Cont’d) 28:24 - Crystal REPL (ICR) 32:15 - Getting Involved with Crystal and the Development of the Language Crystal to_proc 40:08 - Threading and Concurrency 44:28 - Crystalshards Crystal Weekly 49:30 - Use Cases and Benchmarks Crystal Standard Library wc.cr 01:03:15 - Compile Errors More on Crystal Erik Michaels-Ober: Crystal Programming Language @ RubyC 2015 Interview for RubyC-2015 with Erik Michaels-Ober Built-in formatting tool Issue Picks Easy Bash Prompt Generator (Jessica) Logitech Wireless Headset Dual H820e Double-Ear Stereo Business Headset (David) Ruby Rogues Episode #127: Erik Michaels-Ober (Erik) fish shell (Erik) Rails Girls Summer of Code (Erik) RescueTime (Avdi) The 7 Habits of Highly Effective People: Powerful Lessons in Personal Change by Stephen R. Covey (Avdi) Whiplash White IPA (Avdi)
01:49 - Erik Michaels-Ober Introduction Twitter GitHub Ruby Rogues Episode #127: Erik Michaels-Ober 02:07 - The Crystal Programming Language and Statically Typed Programming Languages Erik Michaels-Ober: An Introduction to Crystal @ PolyConf 15 06:54 - Type Inference Union Types Duck Typing Monkey Patching Sandi Metz Blog Post on the Wrong Abstraction 15:06 - Crystal vs Rust or Go 20:10 - Linting Rubocop 20:44 - Type Annotations and Perimeters Keyword Arguments 22:53 - The History of Crystal and its Development as a Language Crystal Docs Crystal GitHub Repo The Future of Crystal (Christmastime Blog Post) 24:41 - Annotation and Return Value 25:35 - Type Inferencing (Cont’d) 28:24 - Crystal REPL (ICR) 32:15 - Getting Involved with Crystal and the Development of the Language Crystal to_proc 40:08 - Threading and Concurrency 44:28 - Crystalshards Crystal Weekly 49:30 - Use Cases and Benchmarks Crystal Standard Library wc.cr 01:03:15 - Compile Errors More on Crystal Erik Michaels-Ober: Crystal Programming Language @ RubyC 2015 Interview for RubyC-2015 with Erik Michaels-Ober Built-in formatting tool Issue Picks Easy Bash Prompt Generator (Jessica) Logitech Wireless Headset Dual H820e Double-Ear Stereo Business Headset (David) Ruby Rogues Episode #127: Erik Michaels-Ober (Erik) fish shell (Erik) Rails Girls Summer of Code (Erik) RescueTime (Avdi) The 7 Habits of Highly Effective People: Powerful Lessons in Personal Change by Stephen R. Covey (Avdi) Whiplash White IPA (Avdi)
02:27 - Alex Eagle Introduction Twitter GitHub Google 02:54 - Jonathan Turner Introduction Twitter GitHub Microsoft [Talk] Jonathan Turner: TypeScript and Angular 2 @ ng-conf 2015 [Talk] Jonathan Turner: TypeScript and Angular 2 @ Angular U 2015 03:30 - What is TypeScript? 04:40 - Google + Microsoft =
02:27 - Alex Eagle Introduction Twitter GitHub Google 02:54 - Jonathan Turner Introduction Twitter GitHub Microsoft [Talk] Jonathan Turner: TypeScript and Angular 2 @ ng-conf 2015 [Talk] Jonathan Turner: TypeScript and Angular 2 @ Angular U 2015 03:30 - What is TypeScript? 04:40 - Google + Microsoft =
02:27 - Alex Eagle Introduction Twitter GitHub Google 02:54 - Jonathan Turner Introduction Twitter GitHub Microsoft [Talk] Jonathan Turner: TypeScript and Angular 2 @ ng-conf 2015 [Talk] Jonathan Turner: TypeScript and Angular 2 @ Angular U 2015 03:30 - What is TypeScript? 04:40 - Google + Microsoft =
02:32 - Patrick Stapleton Introduction Twitter GitHub Blog Angular Class @AngularClass Keychain Logistics @Keychain Hack Reactor @HackReactor Reddit Insight 04:21 - Angular 2 and Where It’s Headed 05:04 - Enterprise/Small App Distinction 07:19 - Angular 2 Preparation and Migration TodoService in Angular 2 and Angular 1 both in TypeScript and ES5 Babel TypeScript 10:35 - Authoring Scenario in ES5 vs ES6 13:44 - Composition Over Inheritance The Class System Duck Typing 18:47 - Services and Directives Patrick Stapleton and Aysegul Yonet: Creating d3 components with Angular2 and TypeScript @ ng-vegas 2015 20:48 - Controller vs Link Function 22:21 - The Router 24:21 - Two-way Data Binding ngModel Template-Driven, Data-Driven Picks Amarda: A Novel by Ernest Cline (Aaron) (Chapter 1) Take A First Look At Ernest Cline's Armada (Aaron) Angular Summit (Aaron) Sign Language (Katya) Luther Ingram - If Loving You Is Wrong (Ward) AngularU (Ward) Thinking, Fast and Slow by Daniel Kahneman (Ward) Denmark (Joe) Angular 2 (Patrick) Babel (Patrick)
02:32 - Patrick Stapleton Introduction Twitter GitHub Blog Angular Class @AngularClass Keychain Logistics @Keychain Hack Reactor @HackReactor Reddit Insight 04:21 - Angular 2 and Where It’s Headed 05:04 - Enterprise/Small App Distinction 07:19 - Angular 2 Preparation and Migration TodoService in Angular 2 and Angular 1 both in TypeScript and ES5 Babel TypeScript 10:35 - Authoring Scenario in ES5 vs ES6 13:44 - Composition Over Inheritance The Class System Duck Typing 18:47 - Services and Directives Patrick Stapleton and Aysegul Yonet: Creating d3 components with Angular2 and TypeScript @ ng-vegas 2015 20:48 - Controller vs Link Function 22:21 - The Router 24:21 - Two-way Data Binding ngModel Template-Driven, Data-Driven Picks Amarda: A Novel by Ernest Cline (Aaron) (Chapter 1) Take A First Look At Ernest Cline's Armada (Aaron) Angular Summit (Aaron) Sign Language (Katya) Luther Ingram - If Loving You Is Wrong (Ward) AngularU (Ward) Thinking, Fast and Slow by Daniel Kahneman (Ward) Denmark (Joe) Angular 2 (Patrick) Babel (Patrick)
02:32 - Patrick Stapleton Introduction Twitter GitHub Blog Angular Class @AngularClass Keychain Logistics @Keychain Hack Reactor @HackReactor Reddit Insight 04:21 - Angular 2 and Where It’s Headed 05:04 - Enterprise/Small App Distinction 07:19 - Angular 2 Preparation and Migration TodoService in Angular 2 and Angular 1 both in TypeScript and ES5 Babel TypeScript 10:35 - Authoring Scenario in ES5 vs ES6 13:44 - Composition Over Inheritance The Class System Duck Typing 18:47 - Services and Directives Patrick Stapleton and Aysegul Yonet: Creating d3 components with Angular2 and TypeScript @ ng-vegas 2015 20:48 - Controller vs Link Function 22:21 - The Router 24:21 - Two-way Data Binding ngModel Template-Driven, Data-Driven Picks Amarda: A Novel by Ernest Cline (Aaron) (Chapter 1) Take A First Look At Ernest Cline's Armada (Aaron) Angular Summit (Aaron) Sign Language (Katya) Luther Ingram - If Loving You Is Wrong (Ward) AngularU (Ward) Thinking, Fast and Slow by Daniel Kahneman (Ward) Denmark (Joe) Angular 2 (Patrick) Babel (Patrick)
Monkey Patching, Duck Typing e Inyección de Dependencias. http://podcast.jcea.es/podcastz/2 Notas: 00:50: Se utiliza un caso real para explicar estas técnicas con más facilidad. 01:50: La librería estándar para el envío de correo electrónico en Python, la SMTPlib, se nos queda pequeña (para este proyecto en concreto). 02:01: ¡Sí!, ¡por supuesto que usamos Python!. 02:12: Pero estas técnicas son aplicables también a otros lenguajes dinámicos. 02:48: Los motivos por los que la SMTPlib se me quedaba pequeña: Quiero "timeouts" dinámicos, quiero limitar el número de conexiones simultaneas por servidor de correo, y quiero controlar la IP de origen de la conexión saliente. 05:52: ¿Por qué no modificamos el código directamente o utilizamos los mecanismos de herencia normales?. Por mantenimiento de código y porque lo que queremos modificar no es fácilmente accesible por herencia porque está muy "profundo" en la clase original. 09:04: Por fin entramos en materia. Empezamos con Monkey Patching. Modificación de código, clases y objetos en memoria. 12:44: ¿Cuándo es preferible utilizar Monkey Patching en vez de mecanismos más habituales?. 13:30: Otro ejemplo de Monkey Patching: Los "hot fixes" tradicionales de ZOPE. 16:29: Por supuesto, esta técnica es compleja y delicada, y tiene sus riesgos. 18:17: Pasamos a hablar de Duck Typing. Polimorfismo sin herencia. Frase del día: "Es un pato a efectos prácticos". O su corolario posterior: "Si parece un pato, es un pato. Aunque no lo sea" :-). 20:25: En lenguajes estáticos como Java, se utiliza el concepto de "interfaces abstractos", verificados en tiempo de compilación. Con Python no se realiza ninguna comprobación, y la compatibilidad de tipos se decide en tiempo de ejecución, cuando se invocan métodos concretos con parámetros concretos. 22:19: Los interfaces abstractos te permite definir dos objetos como compatibles, aunque no hereden de las mismas clases. 22:28: Un ejemplo de interfaces es la abstracción de ficheros en Python (o, por ejemplo, en la filosofía UNIX de que todo es un fichero). 22:54: El Duck Typing también tiene sus problemas. 25:09: Hay dos escuelas de pensamiento en casi todo, dicotomías por doquier. 26:00: Una forma de estar tranquilos es tener una buena batería de test. 26:45: Hablamos ahora de inyección de dependencias. Recapitulamos y, ahora, todo encaja. 28:41: Desvinculamos la dependencia implícita interna que tiene una librería, y la hacemos explícita y manipulable. 29:00: La inyección de dependencias te facilita mucho la vida a la hora de probar el código. 30:40: Bueno, en realidad el programa de ejemplo que he usado para ilustrar la descripción de estas técnicas no funciona como se ha descrito :-). Se emplea también Monkey Patching, pero de forma diferente y más estable ante actualizaciones python. Lo detallé en mi web en 2007. 31:40: Fé de erratas.