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 this episode, they dive deep into the essential practices and principles for successful Node.js development. AJ and Dan are joined by special guests Michael Dawson, James Snell, and Matteo Collina. They bring a wealth of expertise and experience to the table, discussing key topics like experimental tech with existing web standards, managing updates with LTS releases, and the fundamental pillars of Node.js, including the critical concept of "not blocking the event loop."They explore the consequences of blocking the event loop, real-world insights into performance issues, and the importance of efficient task handling. They also share their wisdom on utilizing multi-threading, scaling applications, best practices for dependency management, and the significance of regular updates to maintain security and performance.Additionally, they touch on some fascinating side discussions, such as AI's role in coding, the evolution of package management, and the importance of intentional coding practices. There's even a bit of personal insight with recommendations for exciting Netflix series and real-world anecdotes about Node.js conferences and testing frameworks.Join them as they unravel these topics and more, guiding you through advanced Node.js SocialsLinkedIn: James SnellLinkedIn: Michael DawsonLinkedIn: Matteo CollinaLinksThe Nine Node Pillars: 9 Principles for Doing Node.js Right in Enterprise EnvironmentsThe Nine Node Pillars | 9 principles for doing Node.js right in enterprise environments - YouTubePicksDan - Monsters: The Lyle and Erik Menendez StoryDan - The WordPress drama explainedMichael - bee-agent-frameworkJames - NodeConf EUBecome a supporter of this podcast: https://www.spreaker.com/podcast/javascript-jabber--6102064/support.
Today we are talking about the revolt event Loop, what it is, and why it matters with guest Alexander Varwijk (farvag). We'll also cover IEF Complex Widget Dialog as our module of the week. For show notes visit: https://www.talkingDrupal.com/474 Topics What is an event loop Why does Drupal need an event loop What will change in core to implement this What problem does this solve Does this make Cron cleaner and long running processes faster What impact will this have on contrib How would contrib use this loop What does this mean for database compatibility What inspired this change Test instability Why Revolt Will this help with Drupal AI Resources Adopt the Revolt event loop for async task orchestration revoltphp/event-loop was added as a dependency to Drupal Core Add "EventLoop::run" to Drupal Core Migrate BigPipe and the Renderer code that's currently built with fibers Revolt Playground that shows converting some Fiber implementations from Drupal to the Event Loop DrupalCon Barcelona Talk about "Why Async Drupal a Big Deal Is" Async PHP libraries https://reactphp.org/ https://amphp.org/ Guests Alexander Varwijk - alexandervarwijk.com Kingdutch Hosts Nic Laflin - nLighteneddevelopment.com nicxvan John Picozzi - epam.com johnpicozzi Joshua "Josh" Mitchell - joshuami.com joshuami MOTW Correspondent Martin Anderson-Clutz - mandclu.com mandclu Brief description: Have you ever wanted to use Inline Entity Forms but have the dependent form open in a dialog? There's a module for that. Module name/project name: IEF Complex Widget Dialog Brief history How old: created in Mar 2020 by dataweb, though recent releases are by Chris Lai (chrisck), a fellow Canadian Versions available: 2.1.1 and 2.2.2, the latter or which is compatible Drupal 8.8 or newer, all the way up to Drupal 11 Maintainership Actively maintained, latest release in the past month Number of open issues: 4 open issues, none of which are bugs against the current version Usage stats: 273 sites Module features and usage When you install the module, your Inline Entity Form widget configuration will have a new checkbox, to “Enable Popup for IEF” Includes specialized handling for different kinds of entities, like nodes, users, taxonomy terms, and users Will handle not just the creation forms, but editing entities, and also duplicating or deleting entities Not something you would always need, but can be very useful if the form you want to use for entity or even parent forms that are complex I should also add that IEF supports form modes, so often I'll create an “embedded” form mode that exposes fewer elements, for example hiding the fields for URL alias, sticky, and so on. So I would start there, but if the content creation experience still feels complex, then IEF Complex Widget Dialog might be a nice way to help
В 67 выпуске подкаста Javaswag поговорили с Сергеем Петрелевичем о WebFlux, блокирующем коде в реактивном приложении и Micronaut 00:00 Начало 02:52 Путь к Java от BASIC 05:59 Опыт работы с автоматизированными системами управления 08:56 Переход к Java и работа в банковском софте 12:07 Технологические риски и управление проектами 14:49 Платежные системы: архитектура и взаимодействие 18:00 Виртуальные машины и их роль в разработке 21:11 Заключение и выводы о будущем Java 26:05 Технологические достижения и их влияние на банковский сектор 29:14 Архитектурные особенности платежных систем 33:26 Опыт работы в Deutsche Bank и Райффайзен 36:39 Качества успешного разработчика в финансовых технологиях 40:24 Понимание Disruptor и его применение в высокопроизводительных системах 45:01 Event Loop и его роль в современных приложениях 52:07 Webflux и реактивное программирование в Java 53:07 Обработка запросов и потоков в реактивных системах 56:18 Проблемы блокирующего кода в реактивных приложениях 01:00:01 Идентификация и управление блокирующими вызовами 01:02:42 Преимущества и недостатки реактивного программирования 01:07:35 Сравнение фреймворков: Micronaut, Quarkus и Spring 01:18:05 Использование GraalVM для нативных образов 01:19:39 Сравнение фреймворков: Armeria и Vert.X 01:27:12 Виртуальные потоки в Java: необходимость и применение 01:39:39 Современный Java стек: выбор технологий и библиотек 01:46:48 Обновление зависимостей и предвидение проблем 01:49:36 Баланс между курсами и реальной практикой 01:50:51 Фундаментальные знания и их важность для разработчиков 01:53:14 Критика современных курсов и их подходов 01:57:10 Непопулярное мнение о Spring Data и Hibernate 02:10:07 Широкий кругозор разработчика и важность изучения других языков Гость - https://www.linkedin.com/in/sergey-petrelevich-72ab893a/ Ссылки: либа для поиска блокировок: https://github.com/reactor/BlockHound рассказ про Disruptor: https://youtu.be/IsGBA9KEtTM?si=fSdka2PDiOgNViYJ мой канал: https://www.youtube.com/@petrelevich рассказ про Armeria: https://youtu.be/6SInub_v_bI?si=wT525f0lWXlRcCMf Кип сейф! 🖖
Ivan Akulov, Senior Performance Engineer at Framer, discusses optimizing React performance and major advancements in React, including hooks, concurrency, and the crucial invisible performance enhancements that make modern web applications smoother and faster. Links https://iamakulov.com https://x.com/iamakulov https://github.com/iamakulov https://www.linkedin.com/in/iamakulov https://3perf.com We want to hear from you! How did you find us? Did you see us on Twitter? In a newsletter? Or maybe we were recommended by a friend? Let us know by sending an email to our producer, Emily, at emily.kochanekketner@logrocket.com (mailto:emily.kochanekketner@logrocket.com), or tweet at us at PodRocketPod (https://twitter.com/PodRocketpod). Follow us. Get free stickers. Follow us on Apple Podcasts, fill out this form (https://podrocket.logrocket.com/get-podrocket-stickers), and we'll send you free PodRocket stickers! What does LogRocket do? LogRocket provides AI-first session replay and analytics that surfaces the UX and technical issues impacting user experiences. Start understand where your users are struggling by trying it for free at [LogRocket.com]. Try LogRocket for free today.(https://logrocket.com/signup/?pdr) Special Guest: Ivan Akulov.
This interview was recorded for GOTO Unscripted.https://gotopia.techRead the full transcription of this interview hereJulian Wood - Serverless Developer Advocate at AWSMarcia Villalba - Serverless Developer Advocate at AWSRESOURCESMarciahttps://twitter.com/mavi888uyhttps://www.linkedin.com/in/marciavillalbahttps://marcia.devhttps://github.com/mavi888Julianhttps://twitter.com/julian_woodhttp://www.wooditwork.comhttps://www.linkedin.com/in/julianrwoodLinkshttps://serverlessland.comhttps://aws.amazon.com/blogs/compute/optimizing-lambda-functions-packaged-as-container-imageshttps://serverlessland.com/patterns/s3-lambda-container-samhttps://aws.amazon.com/blogs/compute/building-php-lambda-functions-with-docker-container-imagesJulian & James: https://youtu.be/KDtsC7SjsdAMarcia: https://youtu.be/bC51iRtXlRwLiz: https://youtu.be/8fi7uSYlOdcJulian: https://youtu.be/4YeZf3HupQADESCRIPTIONExplore the seamless integration of container images with AWS Lambda! Marcia Villalba and Julian Wood unravel the intricacies of development, deployment, and optimization. Discover how containers revolutionize serverless computing, offering speed, efficiency, and scalability in the cloud. From demystifying cold starts to harnessing caching technologies, this is your chance to learn from the experts. [...]RECOMMENDED BOOKSAdam Bellemare • Building Event-Driven MicroservicesPeter Sbarski • Serverless Architectures on AWSMichael Stack • Event-Driven Architecture in GolangFord, Richards, Sadalage & Dehghani • Software Architecture: The Hard PartsGerardus Blokdyk • Event-Driven Architecture EDAJames Urquhart • Flow ArchitecturesTwitterInstagramLinkedInFacebookLooking for a unique learning experience?Attend the next GOTO conference near you! Get your ticket: gotopia.techSUBSCRIBE TO OUR YOUTUBE CHANNEL - new videos posted daily!
Scott and Wes serve up a gameshow-style quiz with STUMP'd, challenging each other on web development trivia. From the differences between useMemo and useCallback to the intricacies of the JavaScript event loop, join them for a fun and informative session packed with web dev insights! Show Notes 00:00 Welcome to Syntax! 01:17 Brought to you by Sentry.io. 02:03 The longest game of Rock, Paper, Scissors. Round 1 03:22 In React, what is the difference between useMemo and useCallback hooks, and in what scenarios would you choose one over the other? 05:56 Explain the concept of “tree shaking” in modern JavaScript build tools. How does it work, and what are its benefits? Round 2 09:11 In the context of CSS Grid, explain the difference between grid-template-areas and grid-area. 11:34 What is the “Temporal Dead Zone” in JavaScript, and how does it relate to variables declared with let and const Round 3 13:29 Describe the inner workings of the JavaScript event loop, including the roles of the call stack, callback queue, and microtask queue. 17:10 What is the “Shadow DOM” in web components, and how does it differ from the regular DOM? Round 4 20:05 Explain the process of Critical Rendering Path optimization in modern web browsers 26:14 Describe the purpose and functionality of the Intl.Segmenter API in JavaScript. Round 5 30:03 Explain the concept of Web Assembly (WASM) and its role in modern web development. 32:11 Explain the concept of Svelte stores, particularly focusing on the differences between writable, readable, and derived stores. Round 6 35:26 Explain the concept of “code splitting” in modern JavaScript applications. 37:00 Describe advanced techniques for maintaining an accessible focus order in web accessibility. Round 7 45:15 Explain the concept of “Server-Sent Events” (SSE) in web development. 47:37 What's the difference between contain layout and contain paint? 49:30 Sick Picks & Shameless Plugs. Sick Picks Scott: diskprices. Wes: Slime Tire Sealant. Shameless Plugs Scott: Syntax on YouTube. Hit us up on Socials! Syntax: X Instagram Tiktok LinkedIn Threads Wes: X Instagram Tiktok LinkedIn Threads Scott: X Instagram Tiktok LinkedIn Threads Randy: X Instagram YouTube Threads
This interview was recorded for GOTO Unscripted.https://gotopia.techRead the full transcription of this interview hereJulian Wood - Developer Advocate at AWSJames Beswick - Senior Manager, AWS Serverless Developer AdvocacyRESOURCESJulianhttps://twitter.com/julian_woodhttp://www.wooditwork.comhttps://www.linkedin.com/in/julianrwoodJameshttps://twitter.com/jbeswhttps://linkedin.com/in/jamesbeswickLinkshttps://serverlessland.comhttps://www.comicrelief.com/rednosedayhttps://www.nationwidechildrens.orgJulian: https://youtu.be/4YeZf3HupQAJames: https://youtu.be/dUXDuxqTxmoNicki: https://youtu.be/4N2ywun-wTEJohn: https://youtu.be/_76uaHtthYsSarah: https://youtu.be/6_Yzybhmj-8Veda: https://youtu.be/-X-YHHU7p20Uma & Dhiraj: https://youtu.be/dzW3-Mol1yoRicardo: https://youtu.be/YPQ65budGnIRosemary: https://youtu.be/7j3h2IqkmIARebekah: https://youtu.be/_ugRNuE9xmADESCRIPTIONJames Beswick and Julian Wood analyze the evolving landscape of serverless computing, from its current state to its future trajectory. They discuss the fusion of containers and serverless, highlighting the flexibility and efficiency gained from running Lambda functions from container images.Moreover, they emphasize the importance of asynchronous development and the role it plays in scaling applications, with Julian Wood noting its under-appreciated potential for high performance.Throughout the dialogue, they touch on cost management, architectural decisions and the collaborative relationship between AWS and its customers in shaping the future of serverless technologies. As they envision the next five years, they anticipate a continued integration of best practices, platform evolution, and groundbreaking innovations influenced by customer feedback and industry trends. [...]RECOMMENDED BOOKSAdam Bellemare • Building Event-Driven MicroservicesPeter Sbarski • Serverless Architectures on AWSMichael Stack • Event-Driven Architecture in GolangFord, Richards, Sadalage & Dehghani • Software Architecture: The Hard PartsGerardus Blokdyk • Event-Driven Architecture EDAJames UrquhTwitterInstagramLinkedInFacebookLooking for a unique learning experience?Attend the next GOTO conference near you! Get your ticket: gotopia.techSUBSCRIBE TO OUR YOUTUBE CHANNEL - new videos posted daily!
Topics covered in this episode: PostgresREST How Python Asyncio Works: Recreating it from Scratch Bend The Smartest Way to Learn Python Regular Expressions Extras Joke Watch on YouTube About the show Sponsored by Mailtrap: pythonbytes.fm/mailtrap Connect with the hosts Michael: @mkennedy@fosstodon.org Brian: @brianokken@fosstodon.org Show: @pythonbytes@fosstodon.org Join us on YouTube at pythonbytes.fm/live to be part of the audience. Usually Tuesdays at 10am PT. Older video versions available there too. Finally, if you want an artisanal, hand-crafted digest of every week of the show notes in email form? Add your name and email to our friends of the show list, we'll never share it. Michael #1: PostgresREST PostgREST serves a fully RESTful API from any existing PostgreSQL database. It provides a cleaner, more standards-compliant, faster API than you are likely to write from scratch. Speedy First the server is written in Haskell using the Warp HTTP server (aka a compiled language with lightweight threads). Next it delegates as much calculation as possible to the database. Finally it uses the database efficiently with the Hasql library PostgREST handles authentication (via JSON Web Tokens) and delegates authorization to the role information defined in the database. This ensures there is a single declarative source of truth for security. Brian #2: How Python Asyncio Works: Recreating it from Scratch Jacob Padilla Cool tutorial walking through how async works, including Generators Review The Event Loop Sleeping Yield to Await Await with AsyncIO Another great async resource is: Build your Own Async David Beasley talk from 2019 Michael #3: Bend A massively parallel, high-level programming language. With Bend you can write parallel code for multi-core CPUs/GPUs without being a C/CUDA expert with 10 years of experience. It feels just like Python! No need to deal with the complexity of concurrent programming: locks, mutexes, atomics... any work that can be done in parallel will be done in parallel. Brian #4: The Smartest Way to Learn Python Regular Expressions Christian Mayer, Zohaib Riaz, and Lukas Rieger Self published ebook on Python Regex that utilizes book form readings, links to video course sections puzzle challenges to complete online It's a paid resource, but the min is free. Extras Brian: Replay - A graphic memoir by Prince of Persia creator Jordan Mechner, recounting his own family story of war, exile and new beginnings. Michael: PyCon 2026 Joke: Shells Scripts
Remote-Work, asynchrone und parallele Arbeit und die eigene Work-Life-Balance.Durch Corona haben wir alle einen Geschmack von der Remote-Arbeit und Home Office bekommen. Einige hassen es, andere lieben es und haben sogar dem Büro für immer den Rücken gekehrt. Aber worauf kommt es denn wirklich an?Wolfgang und Andy gehen dieser Frage mal auf den Grund: async und await, Event-Loop, Fokus-Zeiten, Eule und Lerche als Menschentypen, Vertrauen im Team, messbare Ergebnisse, Pro-Aktivität und Schreib-Skills. Was das alles miteinander zu tun hat, hört ihr in dieser Episode.Bonus: Warum man in Amsterdam anders meditiert als anderswo, wieso Andys Liebe zu Redis einen Knick bekommen hat und ob Wolfgang wirklich Holländer ist.Feedback an stehtisch@engineeringkiosk.dev oder via Twitter an https://twitter.com/EngKioskLinksPieter Levels https://levels.io/async/ http://nightowlsbook.com/ Slack: https://slack.com/Design Documents at Google: https://www.industrialempathy.com/posts/design-docs-at-google/Mantis BugTracking: https://www.mantisbt.org/Redmine: https://www.redmine.org/Sprungmarken(00:00) Intro und Rückmeldung zur Episode #13 über Produktivität(01:22) Async + Asynchronität (async, await, event loop)(02:00) Vorteil von asynchroner Verarbeitung(04:13) Asynchronität vs. Parallelisierung(07:08) NodeJS, Callback-Hölle und async/await in Ruby(08:27) Warum verwenden wir nicht die asynchrone Herangehensweise um unsere eigene Zeit besser auszunutzen? - Asynchrones Arbeiten(11:23) Asynchrones Arbeiten, Schlafrhythmus (Eule vs. Lerche) und lange Fokus-Zeiten(14:48) Was verstehen wir unser asynchroner Arbeit?(18:34) Wie kommt man denn zu dem asynchronen Arbeiten (zB als kleine Firma)? (Vertrauen, Pro-Aktivität, Über-Kommunikation)(21:29) … was noch? (Kollaboratives Tooling, Energie für Vorschläge und Objektivität, Diagramme, Transparenz)(29:12) Die Funktion und Wahrnehmung von Slack in der asynchronen Arbeitswelt(34:05) Die Schriftform als Skill und warum dies trainiert werden sollte(35:22) Anwendungen von deinen Schreib-Skills im Ticket-System(38:50) Technical Writing, Dokumentation und Meeting Protokolle(39:26) Design Dokumente als Basis für die asynchrone Arbeit(53:32) Tiefere Gedanken während des schreibens(54:05) Wrap Up zum Thema asynchrones Arbeiten und OutroHostsWolfgang Gassler (https://twitter.com/schafele)Andy Grunwald (https://twitter.com/andygrunwald)Engineering Kiosk Podcast: Anfragen an stehtisch@engineeringkiosk.dev oder via Twitter an https://twitter.com/EngKiosk
This episode is sponsored by Clouflare Pages! (https://enjoythevue.io/cloudflare-pages) This week, The Enjoy the Vue panel digs into the topic of asynchronous event loops: how it can save you time, but also how it can trip you up. Asynchronous update queues are an efficient way for platforms like Vue to save time and energy by recognizing a group of similar commands and doing a batch run at the same point in time. We get into event loops, how the term ‘next tick' came about, and how synchronous stacking can cause a Stack Overflow Error. You'll also hear some of our favorite terminal commands, including a special tidbit on how to say ‘please' to your computer! Lastly, we share our picks of the week that will add joy, intrigue, and deliciousness to your life, so make sure you tune in to hear it all! Key Points From This Episode: Introducing today's topic: asynchronous event loop in JavaScript. An asynchronous update queue and why Vue uses one. Why an asynchronous update queue is so efficient. How an asynchronous update queue can also sometimes cause problems. Where the term ‘next tick' originated and how it is applied today. A breakdown of event loops and stack heaps. Tessa shares her understanding of blocking. Why a blocking operation is synchronous. Alex explains what the heap is and how items transition to the stack. Recursive functions and the stack overflow error message. The team shares their favorite terminal commands. Hear our picks for the week, which include gourmet sour gummies, intriguing portraits, and a fascinating new board game! Tweetables: “When you make a change to your data in Vue, it doesn't happen right away because that would potentially be inefficient. What it does is it groups all the changes together and then batch runs through them at a set point in time. That's the queue that they all get added to.” — @EnjoyTheVueCast (https://twitter.com/EnjoyTheVueCast) [0:02:04] “Basically, it's like doing your math without showing the work. That's what Vue does. Teachers love it.” — @EnjoytheVueCast (https://twitter.com/EnjoyTheVueCast) [0:03:20?] “My understanding is that blocking doesn't mean it never happens. It's just like I'm going to save all of these user interactions until the next time that the queue is free. Then, I'm going to jam all of them in there. You're going to get all 500 clicks in one second.” — @EnjoytheVueCast (https://twitter.com/EnjoyTheVueCast) [0:18:25] “There is this nebulous event that may or may not happen. When it happens, that click, that event doesn't necessarily fire immediately. It gets put on the end of the event queue, the event loop queue.” — @EnjoytheVueCast (https://twitter.com/EnjoyTheVueCast) [0:19:16] Links Mentioned in Today's Episode: repl.it (http://repl.it) Back to the Vueture: Stuck in the Event Loop (https://www.vuemastery.com/conferences/vueconf-us-2019/back-to-the-vueture-stuck-in-the-event-loop), tessa (VueConf US 2019) * What the heck is the event loop anyway? (https://www.youtube.com/watch?v=8aGhZQkoFbQ), Philip Roberts (JSConf EU) Olivia Beaumont (https://oliviabeaumont.com/) Obscurio (https://boardgamegeek.com/boardgame/273477/obscurio) (Boardgame) The Legend of Zelda™: Skyward Sword HD (https://www.nintendo.com/games/detail/the-legend-of-zelda-skyward-sword-hd-switch/), Nintendo Switch Candy Kittens (https://candykittens.co.uk) Web Exclusive Gourmies Bundle (https://candykittens.co.uk/collections/gourmies/products/limited-edition-gourmies-bundle), Candy Kittens
[קישור לקובץ mp3] שלום רב וברוכים הבאים לפרק מספר 416 של רברסים עם פלטפורמה - התאריך היום הוא ה-27 ביולי 2021, ואנחנו נפגשנו ביוקנעם באולפן הבייתי יחד עם יונתן ואסף - היי חבר'ה, מה נשמע? - יונתן, מה שלומך? מתאושש מהג'ט לג הקטן? - (יונתן) כן, הבאתי לך טובלרונים לאחרי . . . (רן) איזה כיף זה הטופי הזה שנתקע בין השיניים . . . - אז אסף - ברוך הבא! (אסף) תודה רבה(רן) היום אנחנו נדבר על נושא Frontend-י - אנחנו לא מדברים הרבה על נושאים Frontend-ים, אבל היום אנחנו נקדיש את כל הערב הזה ל-Frontend - ובעיקר, באופן ספציפי - ל-State Management ב-Frontend.אז עם זה אסף מגיע אלינו - אז אסף, בוא נכיר אותך: מאיפה אתה בא? מה אתה עושה? ספר לנו קצת עליך וקצת על החברה שלך.(אסף) אז אסף קרינצה, אני בא מתל אביב עד לפה ליוקנעם . . .אני מתכנת - התחלתי לתכנת מקצועית בערך לפני עשר שניםהתחלתי את הקריירה ב-CheckPoint, הייתי שם בהתחלה בתחום שהוא יותר Security, אחרי זה עברתי להיות מתכנת ואז ראש צוותאחרי זה עבדתי ב-Microsoft וב-Soluto [עדיין טרי - 413 GitOps with Yaron from Soluto]לאורך השנים עבדתי גם ב-Backend וגם ב-Frontend - וב-Frontend יצא לי להתעסק בהרבה State Management Solutions: לחוות אותם ב-Production, לעבוד איתם בצוות - וגם בפרוייקטים בבית התנסיתי בכל מיני.אחרי Soluto - בעצם בספטמבר האחרון - עזבתי את העבודה, אני ועוד שני חברים טובים שהם גם שותפים, אחד מהם עבד איתי ב-Soluto ואת השני פגשתי עוד ב-CheckPoint - והקמנו חברה בשם livecycle.כש-livecycle זו חברה שעוסקת במוצר עבור צוותי פיתוח - אנחנו מרימים סביבות - Preview Environments - מתוך ה-Source Code של הלקוחות שלנובעצם, הרעיון הוא שעבור כל Change, כל Commit - אנחנו עושים תהליך שהוא דומה לתהליך CI, של לבנות - לעשות Build - למוצר, ואנחנו גם עושים לו Running, בענן.בעצם, יש “סביבה חיה ובועטת” של כל גרסא של המוצר - בענן - שאפשר לשתף אותה.מעבר לזה, On top that - אנחנו שמים כלי קולברציה (Collaboration Tools)לדוגמא, אפשר לדמיין שיש מעצבת בצוות, ומתכנתתהמתכנתת עשתה שינוי בקוד - ושולחת למעצבת, שאולי עיצבה את הפיצ'ר הזה - לינק.המעצבת תוכל להיכנס ללינק, לראות גרסא חיה שלו - ממש גרסא של המוצר, לא איזה Mock - וגם תוכל להגיב שם, עם הכלי קולבורציה שלנוהיא תוכל לשנות CSS - נגיד “ה-Margin לא מספיק טוב”היא תוכל לעשות Screenshot ישירות, בלי Tooling חיצונילהקליט וידאוכל הדברים האלה באים “בחינם” - בלחיצה של לינק . . . וכל זה רץ לו על הדפדפן.(רן) אז אתה אומר - יצרת Pull Request או Merge Request, תלוי באיזו פלטפורמה אתה משתמש - ואז באופן אוטומטי נוצר לך איזשהו Preview link שאותו אתה יכול לשלוח, עוד לפני שעשית Merge, זאת אומרת - אתה לא צריך ללכת ועשות Deploy כדי שהסיפור הזה יעבוד, ופה חוסך זמן ומייעל את ה-Cycle . . .(אסף) נכון . . .(רן) בסדר . . . אצלכם, דרך אגב, יונתן - יש פתרונות בסגנון הזה?(יונתן) Preview כזה אין לנו . . . יש לנו סביבות Pre-Production, שלשם אנחנו מעלים גרסאבאמת בדרך כלל אחרי Merge, כמו שאתה תיארת.(רן) כן, אוקייאנחנו בעצם נפגשנו פה כדי לדבר על State Management ב-Frontend.עכשיו, אני מניח שכל מי שמפתח Frontend בעשור האחרון מבין על מה מדובר, אבל בוא נחבר גם את מי שהוא לא מפתח Frontend, זאת אומרת - למה צריך State Management?יש לי CSS, יש JavaScript, יש HTML . . . על איזה State בדיוק אנחנו מדברים פה? למה צריך State Management?(אסף) אחלה . . . אז אפשר באמת להתחיל מלהגיד מה זה State, ומה זה בעצם עושה באופן כללי, וספציפית באפליקצית Web.אז אפשר להגיד ש-State זו איזושהי “פיסת אינפורמציה”, שמגדירה איך נראית האפליקציה בכל רגע נתוןאיך היא נראית ואיך היא מתנהגתלדוגמא - זו הדוגמא הקלאסית, כשמדברים על State Management, יש כזה את ה-”Hello World” שזה ה-To-Do Applications - כשיש לך רשימת To-Do's כזאת, ה-State יכול להיות האינפורמציה, Array של To-Do's, כשכל אחד מה-Item-ים ברשימה יכול להיות אובייקט - שיהיה לו Title ויהיה לו “?Is Completed”, האם המשימה בוצעה או לא.זה ה-State.עכשיו, יש לנו את האפלקיציה - היא לוקחת את ה-State הזה, ומרנדרת (Rendering) איזשהו View.אפשר להסתכל על זה כמו איזושהי Pure Function, שעבור כל State תייצר אפליקציה אחרת, ועבור אותו ה-State תייצר בדיוק את אותה אפליקציה.הרעיון של ה-State Management זה איזה-שהם כלים וקונספטים שעוזרים לנו לנהל את הדבר הזה.(רן) הזכרת מקודם View - אז יש את המודל הקלאסי, ואולי קצת ישן ומאוס, של Model-View-Controller - אז באלגוריה הזאת, ה-State הוא למעשה ה-Model?(אסף) נכון - ה-ה-State הוא למעשה ה-Model, ה-View זה יכול להיות . . . אם זה נגיד, MVC שמתרדנר (Rendered) בשרת, כמו Ruby-on-Rails או PHP או Laravel או כאלה דברים, ה-View הוא HTML, שהשרת מחזיר ללקוח - והדפדפן “מצייר” מזה אתר.(יונתן) אני חושב שפעם, בעצם . . . יש מעיין Shift כזה ל-Frontend . . . פעם, ה-Database באמת היה ה-Database, ה-Server היה עושה את הלוגיקה, מרנדר אפילו JSP וכל מיני כאלה - וה-Browser היה רק מציג.עכשיו, יש Shift כזה שמאלה ל-Frontend, ששם כבר הלוגיקה - ולכן חסר שם איזה משהו . . .(רן) כן, אני מסכים - ככל שיותר לוגיקה עברה ל-Frontend, ככה נדרש יותר תחכום, ולכן גם נדרש איזשהו State Management - וכנראה שעוד הרבה דברים אחרים. לא רק זה, אבל זה לגמרי אחד מהם.עכשיו - State Management גם מגיע עם רכיבי View בדרך כלל, נכון? יש איזשהו קשר הדוק - אני מניח, למשל, שכל מי שכתב אי-פעם ב-React, כנראה גם מכיר את Redux ואולי גם עוד כמה חבילות.למה . . . נשאל את השאלה הזאת ככה: האם באמת “הצימוד” הזה הכרחי? מה המוטיבציה לצימוד הזה? מה אנחנו מרוויחים מהצימוד הזה? או לחילופין - האם אפשר להפריד ביניהם, לצורך העניין - להשתמש ב-Redux עם Angular או Whatever, והאם אפשר להרוויח מזה משהו פה?(אסף) אחלה - אז כמו שאמרתי, יש פה שני דברים שונים: אחד - זה האם כשאתה משתמש ב-React, צריך להוסיף לזה, On top of that, גם Redux?; והשני זה “האם Redux עובד גם עם דברים אחרים?”.אז אם אני אענה על השאלה השנייה קודם - Redux הוא לא Coupled ל-React: זו ספרייה שיכולה לעבוד עם כל מיני ספריות, והיא יותר High-Level.יש Binding מ-Redux ל-React - זה נקרא React Redux, שזה מצמד את React ל-Redux, אבל באופן די גורף - לרוב ישתמשו ב-Redux עם React, וזו גם הספרייה פופולארית ביותר.אני הסתכלתי לא מזמן ב-npm, ב-Weekly Downloads, ו-Redux הוא 90% בערך מהנפח של הספריות שהסתכלתי עליהן.אני לא יודע כמה קורלציה יש לזה לשימוש אמיתי, אבל אם זה אומר משהו, אז Redux היא סופר-סופר פופולארית.(רן) כן - ואני חושב, דרך אגב, ש . . . מי שמפתח Frontend בודאי מכיר, אני אתרגם רק למי שאינו מפתח Frontend כנראה - אחד הדברים שהכי קוסמים ב-Redux זה הפשטות שלהזו ספרייה שהיא (א) מאוד מאוד קטנה ו-(ב) יש המון המון Tutorials על איך לכתוב Redux בשביל עצמך - מתוך מטרה שהמפתחים יבינו באיזה כלי הם משתמשים.אז לא כל ספריות ה-JavaScript פשוטות, אבל Redux זו שפה פשוטה - אבל אלגנטית, וזה היופי שלה.אבל Redux זה חדשות של לפני . . . כמה? 6-7 שנים?(אסף) 2014 זה היה, אם אני לא טועה [2013?] . . . זה היה ההרצאה של Dan Abramov, שבה הוא הכריז על הספרייה.(רן) כן, אז 7 שנים, אולי יותר - ומאז הרבה מאוד דברים קרו - אז בוא נדבר על מה קורה היום . . .ביום-יום - מה אתה עושה? אתה הולך ופותח פרויקט ו . . . ? דבר ראשון אתה מביא Redux? איך זה נראה?(אסף) אז זו שאלה מצויינת, ובאמת זה תלוי מאוד בצרכים שלך, של האפליקציה עצמהצריך לשאול מה עושה האפלקיציה? מה המורכבות שלה? האם בכלל צריך State Management?אפשר אפילו לקחת קודם צעד אחורה - ולשאול האם בכלל יש State? לא לכל אפליקציה יש State, כמו שיונתן ציין.פעם, אם אנחנו הולכים ממש אחורה, ל”תחילת האינטרנט” - אז אתרים זה היה משהו מאוד פשוט: זה היה הטקסט, התמונות, מדי פעם היה איזה Form . . . אבל זה מה שקרה.וככל שעבר הזמן, הדפדפן ניהיה דבר מאוד מורכב, מעיין “מפלצת” - זה היום חזק כמו מערכת הפעלה שלמה כמעט, אפילו דפדפנים יכולים היום להריץ Server-ים . . . אני ראיתי ש-StackBlitz מריצים את Node בתוך הדפדפן - אתה יכול להריץ Node Server שמרים לך Web Server, וחושף IP שאתה יכול, דרך הדפדפן שלך, להיכנס ל-IP שהדפדפן מרים . . . זה די Mind-blowing.(רן) רקורסיה . . . זו הכותרת.(אסף) בדיוק . . . אז דפדפן זה משהו מאוד חזק, ואפשר לעשות איתו דברים מטורפים.אבל קודם כל, השאלה שצריך לשאול, בכלל לפני ששואלים איזו בספרייה משתמשים, זה האם צריך ספרייה כזאת?אם החלטנו שאנחנו משתמשים ב-React, כספרייה - כי גם את זה אנחנו לא חייבים - אז גם React, לכשלעצמה, יש לה פתרונות לניהול State.כי React באה עם כמה APIs נוחים לניהול State - אני מדבר ספציפית על . . . אפשר לעשות את זה בכמה דרכיםאו בצורה הישנה, שזה דרך ה-Classאו דרך Hooks, שזה משהו קצת יותר חדש.אני אדבר על ה-Hooks, כי זה קצת יותר נוח, אבל אותם עקרונות בדיוק אפשר לעשות גם ב-Classes . . .(רן) נעשה פה רגע איזו עצירה - יונתן, דיברנו קודם זה שלפחות היסטורית, רוב ה-State היה נשאר בצד של השרת והיה מוחזק ב-Database-ים, והייתה איזושהי שכבת Rendering - שגם היא הייתה נמצאת הרבה פעם בצד של השרת.ואז הזכרת - אסף - שהדפדפנים היום הם דווקא די חזקים, ושאפשר לעשות בהם כמעט הכל - ובין השאר, יש בהם גם Database-ים.ועכשיו, נשאלת השאלה - האם יש קשר בין ה-State, שעליו אנחנו מדברים, לבין ה-Database-ים שקיימים היום בדפדפנים? לצורך העניין - האם הם שומרים ב-Database-ים המקומיים שלהם את ה-State, או שזה State שהוא מתדנדר (Rendered)? זאת אומרת - ברגע שאתה עושה Refresh לדף, הכל נעלם ומתחילים מחדש?(אסף) ה-State שאני אוהב וה-State-ים שאני מדבר עליהם - הם לרוב נשמרים ב-RAM, בזכרון, וזה אומר שזה יתנדף ברגע שירפרשו (Refresh) את העמוד.כמובן שאפשר את כל ה-State הזה להעביר אל ה-Local Storage או עם פתרונות Database-יים מקומיים שיעשו את זה Persistent over time.זה במיוחד יהיה יותר קל ויותר נעים עם ספריות כמו Redux, ששומרים הכל במקום אחד - אתה עושה לו פשוט Dump וטוען אותו בחזרה.בדרכים אחרות, אם אתה שומר את ה-State שלך בצורה קצת יותר מבולגנת ב-RAM זה אולי יהיה קצת יותר קשה, אבל אם אנחנו הולכים, נגיד, על משהו כמו Redux, או Recoil, שגם לו יש Snapshot ו-Store שמסדר הכל במקום אחד - או MobX-State-Tree, שזה גם פתרון כזה - יהיה מאוד קל לעשות Dump של הזיכרון הזה אל ה-Local Storage, לדוגמא, שזה Persistent Storage, כמו Database - ולטעון את זה בחזרה כשטוענים את האפליקציה.(רן) “מאוד קל” במובן הזה שזה פשוט String JSON, ואתה יכול לכתוב ולקרוא אותו לעשות Serialization או De-Serialization?(אסף) כן - בגלל שכל ה-State נמצא בעצם באובייקט אחד, אני יכול לעשות לה סריאליזציה (Serialization) ל-JSON, לשמור אותו כ-String ב-Local Storage, לטעון אותו, לעשות לו דה-סריאלזיציה (De-Serialization) - ולהשתמש בו שוב.(יונתן) אם אני, נניח, מתחיל לכתוב אפליקציה חדשה, ואני עוד לא יודע כמה היא תסתבך, כמה גדול זה יהיה . . . - האם היית ממליץ לי, מההתחלה, להשתמש ב-State Management, או לחכות שזה ממש “יצעק”?(רן) זה לא כמו השאלה על Unit Testing? . . . “אני מתחיל משהו קטן, איזשהו פרויקט-צד קטן, לא נראה לי שזה הולך להיות מסובך, אני לא כותב טסטים” . . . מפה לשם - אחרי שנה אתה לא מוצא את הידיים ואת הרגליים . . . (אסף) כן, לגמרי . . . אז זה עניין של גישה.אני, כשאני מתחיל משהו חדש, אני אוהב להתחיל את זה עם כמה שפחות Boilerplate וכמה שפחות דברים, הכי נקי שיש, וכשאני צריך עוד ועוד דברים - אני עושהאני אבין בעתיד, כנראה, גם מה הצרכים שלי, ואני אדע לבחור איזה מהפתרונות State Management . . . כי שוב - זה לא סטנדרט . . . אין סטנדרטיזציה בנושא, אז יש כל כך הרבה ספריות וכל כך הרבה דעות, וזה מסוג הדברים שמתכנתים אוהבים להיות מאוד דעתניים כלפיו.(יונתן) אז המיגרציה (Migration) הזאת, מלהיות בלי State Management לעם - למשהו ש . . . זה מסובך לעשות את זה? זה re-factor ש”ישכיב” את הצוות או שזה “מכה קלה בכנף”?(אסף) אז אני חושב שזה תלוי מאוד ב- State Management solution שאתה בוחר בולדוגמא, MobX זו אחת הספריות הפופולאריות - כנראה השנייה-הכי-פופולארית אחרי Redux - זה מאפשר לך לעשות את ה-Transition הזה בצורה די נוחה, כי זה משתמש באיזשהו “קסם” שמאפשר לך לעטוף אובייקטים רגילים של JavaScript ולהפוך אותם ל-”React-ביים”.מה זאת אומרת -”React-ביים” [חוץ ממשהו שממש קשה להעביר לטקסט ככה?] - זאת אומרת שאם ה-State הזה מעודכן, אז ה-View שלנו גם יתעדכןזאת אומרת ששינינו . . . נגיד בדוגמא של ה-To-Do List, שינינו את ה-Data, את ה-Array הזה של ה-To-Dos? - והקומפוננטות (Components), ה--ים האלה, שמציירות את זה על המסך, תתעדכנה גם כן.ובגלל שזה משתמש באיזשהו “קסם”, שנקרא Proxy Object של JavaScript או Getter ו-Setter של ES5 - אלו שתי דרכים לעשות את זהזה בעצם “דורס התנהגות” של מה שאנחנו עושים, De-reference לאובייקט, כשאנחנו ניגשים אליו.אז מאחורי הקלעים, אתה משתמש בזה כמו אובייקט רגיל, אתה עושה State.ToDos[7].Title - ועורך את זה.ומאחורי הקלעים, MobX עשתה לך Subscription כשהשתמשת בזה עבור הקומפוננטה (Component) שמשתמשת בזה, והיא תדע לעדכן את הקומפוננטה בכל פעם שעדכנת את ה-State.אז זה יהיה מאוד מאוד נוח . . . יכול להיות שכתבת את הדבר הזה כאובייקט JavaScript רגיל, ואתה רק מוסיף MobX ועוטף את זה בכמה פונקציות שהספרייה מביאה לך - ואתה די מסודר, יש לך State Manager . . . בספריות אחרות, נגיד Redux, זה משהו שהוא הרבה יותר opinionated, והוא קצת יותר מורכב.אתה צריך לנסות הרבה יותר דבריםוזו גם אחת הביקורות הכי גדולות שיש על הספרייה הזאת - זה שצריך ללמוד הרבה, ושאתה צריך לכתוב הרבה קוד בשביל להשתמש בזה.(רן) בוא נחזור רגע ל”קסם” - כי קסם זה כיף: אז יש Attribute - אתה אומר נגיד, ToDos[1].Value = “לאסוף כביסה”, ואז, בעצם, אתה אומר שיש איזשהו רכיב שעשה איזשהו Subscription ל-Setter הזה, והוא עושה “Hijacking” לקריאה הזאת או עם Proxy או טכנולוגיה אחרת שהזכרת את שמה, והוא בעצם “תופס” את הקריאה הזו, ואולי הוא עושה Set ל-Value - אבל הוא גם מפעיל איזושהי שרשרת של קריאות, שבסופו של דבר מפעילה את ה-UI.עכשיו, זה נחמד ברמת השימושיות . . . השאלה, אם אתה מכיר את הקונספט הזה, מה שנקרא The Fallacies of distributed systems - שבעצם זה בא ואומר שכאילו אתה מפעיל איזושהי קריאה, ואתה לא יודע שהקריאה הזאת רצה על איזשהו שרת מרוחק, ולכן אתה גם לא יודע מה כל הדברים הרעים שיכולים לקרות בדרך . . . אז אתה לא מטפל נכון בשגיאות, אתה לא יודע כמה זמן זה יקח, אתה . . . זאת אומרת - זה נראה קל, אבל אתה בעצם “מחביא” מאחורי זה הרבה מאוד דברים שגם יכולים להשתבש, ואם אתה לא מבין שזה מה שיקרה, אתה יכול לטעות, זאת אומרת - יהיה לך UI שהוא Sluggish ועוד כל מיני כאלה תופעות . . . אולי לא תטפל נכון בשגיאות וכו'.אז איך . . . יש פה איזשהו Trade-off בין פשטות השימוש לבין היכולת שלך לשלוט בהתנהגות בצורה שהיא Fine-grained . . . (אסף) נכון מאוד . . . MobX, כספרייה, זה משהו שהוא יותר Tool, שהוא נורא לא Opinionated.הוא מאפשר לך איזושהי יכולת, שנותנת לך לעשות Subscription ו-Reactiveness ל-State, בלי לעשות הרבה Boilerplate - אבל זה לא אומר שאתה חייב להשתמש בזה בצורה הכי פשוטה.אתה יכול לעטוף את זה בדברים שיעזרו לך לפתור את הבעיות שציינת - של Observability ושל Debugging יותר נוח.האמת שהיוצר של MobX כתב עוד ספרייה, שקוראים לה MobX-State-Tree, שהיא כן Opinionated, ומשתמשת ב-MobX בתור כלי, מאחורי הקלעים, לעשות את הפעולות היותר . . . של ה-Reactivness.אבל היא מאוד Opinionated - יש שם Store, ל-Store יש Type-ים שאתה רושם אותם, איזשהו מודל . . . אתה רואה בכל פעם לאן כל דבר הולך ואתה יכול ליצור, מתוך זה, Snapshots - בדומה ל-Reduxזאת אומרת - זה משלב, באיזשהו מקום, את הכיפיות והקסם של MobX, אבל את ה-Rigidness וה”נוקשות” הזאת של -Redux, שגורמת לך גם לדבג (Debug) קוד בצורה יותר נוחה וגם להבין מה קורה כשדברים משתבשים.(רן) כשדיברנו בטלפון, בשיחה המקדימה, דיברנו על ספרייה שנקראית Recoil, שהזכרת את שמה מקודם - מה מעניין בה? מה מיוחד בה? מתי אני ארצה להשתמש בה ולא באחרות?(אסף) אחלה, אז Recoil . . . אולי לפני שנדבר על Recoil, נדבר טיפה על קונטקסט, כי הרבה מהדברים שם הם סוג של פותרים דברים שהיה בעייתי עם קונטקסט, עם New State.אז אם מסתכלים רגע על ה-API ש-Redux מביא איתו Built-in, בלי להתקין שום ספרייה חיצונית, אז יש לנו שני דברים עיקרייםיש לנו useState, או useReducer, שזה תחליף ל-useStateויש לנו את Context.עכשיו - useState ו-Context עושים שני דברים קצת שונים - useState מאפשר לכל קומפוננטה (Component) לשמור State לוקאלי עבורה, שהוא Persistent בין Render Callsזאת אומרת שאם אני אקרא ל-Render עוד פעם, יהיה לי את אותו State.ובנוסף, זה נותן לי את ה-Reactiveness הזה, כמו שדיברנו - זה מרכיב חשוב בכל State Management.ברגע שעדכנתי את ה-State, עם פונקציה שה-Hook הזה מחזיר לי - ה-setState - אז React ידע לקרוא לי ל-Rendering - אם ה-State המחודשזאת אומרת שברגע שאני מעדכן את ה-State - אני יודע שה-View יהיה “טרי”, הוא יצייר לי את מה שאני רוצה עם ה-State “הטרי” והחדש.(רן) זאת אומרת - כאילו יש את המצב הראשוני, ואחר כך, על כל שינוי, יקראו לך ותעשה Rendering מחדש.(אסף) בדיוק - אני יכול . . . React מבטיח לי את זה, שזה אחלה, זה מעולה.הבעיה עם useState זה שדברים . . . שאפליקציה, כשהעץ-קומפוננטות של React מתחיל לגדול ולגדול, אני רוצה לפעמים להתחיל לשתף State בקומפוננטות שלפעמים הן גם במיקום רחוק בעץ . . . שני עלים שיש להם אב-קדמון משותף, נמוך ביותר, שהוא כמה רמות מעל.ואז זה אומר . . . .(רן) אוקיי - אז אני מסתכל על רשימת ה-To-Do - אז אתה רוצה, נגיד, להציג איזשהו View אחד גדול עם ה-To-Dos, ואולי מימין-מלמעלה גם איזשהו תקציר של הרשימה, נגיד כמה אייטמים נשארו un-checked . . . (אסף) בדיוק - כמה אייטמים נשארו un-checked, ואולי עוד סטטיסטיקות . . . מעיין כזה Dashboard, זו דוגמא מעולה.ובאמת, כדי ששתי הקומפוננטות הללו תכירנה את אותו State - כי אנחנו לא רוצים לשכפל את ה-State, אנחנו יכולים, תיאורטית, לשכפל את ה-State, אבל אז נוצר מצב שבו אני צריך לטפל בעדכון של שני State-ים שונים, וזה יכול ליצור באגים וזה קשה להבין . . . (רן) מה הבעיה? תיקח ספרייה, בטח יש אחת כזאת שעושה את זה, לא? . . .(אסף) יש ספרייה . . . ב-JavaScript יש ספרייה לכל דבר, לכל שורה של קוד יש ספרייה . . . (רן) ראיתי לא מזמן איזשהו API שנקרא is-odd - שמחזיר לך אם המספר זוגי או אי-זוגי . . .(אסף) יש את הסיפור המפורסם של left-pad, שזו ספרייה שהקריסה את כל npm, הקריסה מלא עבודה של מלא אנשים בכל העולם, בגלל שהשתלטו עליה ועשו שם כל מיני דברים . . [היה לא מזמן ב-398 with Danny Grander from Snyk](רן) בסדר - אז אתה לא רוצה לשכפל את ה-State וזה, אני חושב, ברור - אבל אתה אומר שיש פה בעיה עם ה-Set . . .(אסף) כן, ומה הבעיה? יש פה שתי בעיות - אחת זה שאם אני רוצה ששתי קומפוננטות, שנמצאות במיקום מרוחק בעץ, ישתפו את אותו State, אני צריך להתחיל להעביר את ה-State הזה ממקום למקום - זה נקרא Props Drilling, “קדיחת Properties” . . . זה לא נוח, זה אומר שבכל פעם שאני רוצה להוסיף State אני צריך להוסיף את זה בעוד “מיליון מקומות”, קשה לעקוב אחרי זה, מאיפה זה בא . . .(רן) כן, אתה צריך לקודד . . . למעשה, אתה צריך . . .עכשיו כשאתה אומר, אני נזכר שעשיתי את זה, וזה היה מה-זה מעצבן . . . בכל מקום אתה צריך ללכת ולעשות . . . “לפעפע” את ה-Attribute הזה למטה ולמטה ולמטה . . . .ממש עבודה ידנית מעצבנת . . . (יונתן) וזו בעיה גם לפעמים בקוד של ה-Server, נכון? כשאתה מאתחל איזשהו Bin, או איזשהו אובייקט, ורק למטה למטה אתה צריך להעביר אותו . . .(אסף) נכון, Dependency Injection כזה . . .(יונתן) ואם אתה “מתפתה”, אז אתה שם איזשהו משתנה גלובאלי או Database או משהו כזה, ואז אתה . . (רן) זה כשאתה מתכנן להתפטר . . . וכשאתה מתפטר אז אתה לא מגלה . . .(יונתן) אז מה האלטרטיבה ל-Props Drilling הזה? . . . (אסף) אז רק אני אגיד שבנוסף להעברה הזאת, זה גם עניין של Performance, זה בעייתי - כי איך ש-React עובד, ברגע ש-Props משתנה, הוא קורא ל-Render מחדש . . .הוא קורא ל-Render כש-Props משתנה וכ-State משתנה.וכשכל תת-העץ הזה, שבכלל לא משתמש ב-State - כל מה שהוא עושה זה להעביר את זה מפה לשם כשמתרדנר (Renders) - זה פשוט בזבוז של חישוביות . . .אבל באמת כדי לפתור את זה יש איזשהו API שנקרא Context - ו-Context מאפשר להגדיר איזשהו State . . .(רן) הנה המשתנה הגלובאלי שחיפשת, יונתן . . . (אסף) בדיוק . . . אז זה משתנה גלובאלי, שבעצם פותר את העניין של ה-Drilling, כי אני יכול להגדיר את זה ב”אב הקדמון” המשותף הזה, אני יכול להגדיר שם את ה-Context, וזה אומר שכל חלק בתת-עץ, שהוא צאצא של האב הקדמון המשותף הזה, יכול להשתמש ב-Value של ה-Context.וזה מאפשר לי לפתור את ה-Props Drilling - וגם עם זה יש קצת בעיות . . . אחת - גם פה יש קצת עניין של Performance, כי אם אני, נגיד . . . לרוב, מה שעושים זה שעושים Provider כזה, ובתוך ה-Provider הזה זו קומפוננטת React רגילה - שהיא בעצמה משתמשת ב-useState שדיברנו עליואז כדי לעדכן את ה-Value, אני מעדכן את ה-Value איפה שאני שם את ה-Provider, והוא ירדנדר (Render) את כל תת העץ.הוא עדיין ירנדר אותו - כי ככה זה עובד: כי ברגע שהתרנדר אב-קדמון, הוא מרנדר את כל התת-עץ.אפשר לפתור את זה בדרכים שונות, כמו נגיד עם React.memo שהופך קומפוננטות, שמשווה באופן Shallow את ה-Properties, ומרנדר את זה רק אם הם שווים - אבל זה מעצבן, כי אני עכשיו חייב לעשות את זה, גם יש בזה Overhead . . . יכול להיות שזה לא כזה מעניין, ברוב המקרים, תכל'ס, זה לא מעניין - כי זה לא שווה את ההתעסקות, כי זה לא משנה באמת את חוויית המשתמש, האופטימיזציות האלה.אבל כשיש אפליקציות ענקיות, ש-Rendering הוא מאוד יקר, והדברים האלה מתחילים להציק - אז זה מתחיל להיות בעיה, ואז מתחילים לחשוב מה לעשות.(רן) אבל זה כן משנה את חוויית המפתח, זאת אומרת - או שתצטרך לעשות Props Drilling, או שתצטרך להשתמש ב-Context, שזה - בוא, בינינו - זה משתנה גלובאלי, עם כל המעמסה שבאה עליו.אז כן - למפתח זה אומר איזשהו נטל תחזוקתי(אסף) כן, לגמרי . . . (רן) אז זו הבעיה . . . הבנו - האקדח מהמערכה הראשונה . . . . בסדר.אז Recoil היא זו שתיקנה את הבעיה הזו?(אסף) Recoil תיקנה חלק מהבעיות האלה, כן . . . ב-Recoil, זה התחיל מהרצאה שהייתה ב-ReactEurope, שזו אותו כנס ש-Dan Abramov עשה בו את ההרצאה המפורסמת על Reduxאז זה בחור מ-Facebook, שסיפר שיש להם כלי ב-Facebook, שהם עושים כל מיני סטטיסטיקות על user-ים.הוא סיפר שם על כל מיני דרישות שהיו להם מהמוצר הזה - והוא רצה להשתמש ב-State וב-Context אבל נתקל בכל מיני בעיות - אחת מהבעיות הייתה . . . עוד בעיה שלא הזכרנו בנוגע ל-Context זה שאם אנחנו רוצים שה-User ייצור באופן דינאמי State - בוא נדמיין לדוגמא שזו הדוגמא שהוא מביא - אז לדוגמא, יש לי אפליקציה שאני יכול לצייר בה צורות - אני יכול לצייר בה עיגול, אני יכול לצייר בה מרובע, וה-User יכול פשוט להכניס עוד צורההוא יכול גם לעשות לזה Drag, או לשנות לזה את ה-Size . . . אפשר לדמיין מעיין Photoshop כזה . . . עכשיו - לכל אחד כזה הוא רצה ליצור State משלו - והסיבה שהוא לא רצה את זה ב-State משותף זה בשביל Performance, דיברנו על זהכי אם יש State משותף אז זה ירדנדר את כולם, וכשאתה מתחיל לעשות דברים כמו Dragging, וזה קורה 60 פעמים בשנייה, אז זה כבר מתחיל לכאוב . . . אתה כבר לא יכול, אתה צריך להתחיל לשחק פה עם Performance Optimizations.אבל הוא אמר “אולי נשתמש ב-Context, ועדיין העניין ב-Context הוא שזה סטאטי, ואתה חייב לדעת מראש כמה Context-ים את צריך ליצור . . . אתה לא יכול ליצור Context באופן דינאמי מתוך קוד.וזו בעיה ל-Use Case שכזה . . . זו אחת הבעיות . . . וכמובן יש את כל הבעיות שדיברנו עליהן מקודם.אז מה שהם עשו ב-Recoil . . . הם עשו כמה דברים מאוד מעניינים - אחד - בניגוד לספריות אחרות, ברוב הספריות - זו ספרייה שהיא מאוד Coupled עם React - אתה לא יכול להשתמש ב-Recoil ללא Reactבניגוד, נגיד ל-Redux או ל-MobXויש לזה כמה יתרונות נחמדים, כי ה-API של זה מאוד מאוד פשוט, והוא מאוד דומה ל-API של React, אז במקום useState, אתה תשתמש ב-useRecoilState, וזה יחזיר לך את אותו הדבר - יחזיר לך State ו-setState - וזה מאוד Familiar למי שמכיר את React, אתה לא צריך ללמוד הרבה, בניגוד ל-Redux וגם ל-MobX, שצריך ללמוד דברים.והקונספטים מאוד פשוטים - יש בעצם את ה-State הכי פשוט, שנתנו לזה שם די טוב - קוראים לזה- Atom, כי זה משהו אטומי . . . ובו אתה מגדיר State.עכשיו, אתה מגדיר את זה באופן נפרד, במודול אחר, שהוא לא יושב בתוך הקומפוננטה שלך, ולכן אתה יכול לשתף אותו עם קומפוננטות אחרותפשוט עושים לו Import . . . אתה לא צריך לעשות איזשהו Provider שיושב בעץ-למעלה.כל אחד מהם יכול לעשות לזה Import בנפרד, מבלי שיש את התלות הזאת בעץ.(רן) אוקיי . . . אבל זה דווקא . . . זה לא משהו שיכול לקרות ב-Run-time - ה-Import קורה בזמן הפיתוח, נכון? אתה לא יכול להחליט Ad-hoc ש . . . אתה יודע, בזמן ריצה, לעשות Import למשהו, נכון? זה קצת מזכיר את הבעיה שהייתה עם ה-Context . . . (אסף) נכון - בגלל זה יש משהו אחר שקיים ב-Recoil ונקרא atomFamily - זו “משפחה של אטומים” . . .אתה מגדיר atomFamily, והוא מייצר לך Atom-ים באופן דינאמי . . . אתה נותן לו ID, והוא יביא לך את ה-Atom המתאים ל-ID, וככה אתה יכול, ב-Run-time, בלי לדעת מראש, אתה יכול ליצור עוד ועוד Atom-ים ולשתף אותם.(רן) אז למעשה, הוא נותן ל-JavaScript לפתור את הבעיה . . . הוא אומר “תעשה Import, אני לא רוצה לנהל לך את המצב” - תעשה Import, ואם יש לך State משותף, תעשה לו Import משני קבצים שונים או משני רכיבים שונים - ובכלל שעשית Import לאותו רכיב, אז ה-State ישמר . . . זה הקונספט.אוקיי, JavaScript . . . אני שואל את עצמי האם יש פה סכנה ל-Race Conditions למיניהם . . . אם שני אובייקטים מחזיקים . . . טוב, זה כנראה לא קורה ב-JavaScript כי זה רץ בסביבה נפרדת, אז יש לנו פה Event Loop וזה לא יכול לקרות.(אסף) כן . . . גם בנוסף, בדומה ל-Redux, האובייקטים האלה הם Immutable - הם לא יכולים להשתנות לעולם, מרגע שהם נוצרו.(רן) אז איך אתה מעדכן State, אם זה Immutable?(אסף) אתה יוצר חדש . . . בכל פעם שאתה מעדכן State אתה לא משנה אותו - אתה יוצר אובייקט חדש, למעשה.(יונתן) תזכור ש-State is Evil . . . אז . . .(רן) כן, אבל דיברנו על . . . . אז בוא רגע נחזור לדוגמא שבה יש לנו רשימת To-Dos . . . יש לנו בחלק המרכזי של הדף את הרשימה המלאה עם ה-Check-box-ים לידה, ולמעלה מצד ימין אני רוצה להחזיק רק את מספר האייטמים שעדיין לא סיימתי, אוקיי? אז אני כן רוצה לעדכן פה איזשהו State, נכון? אני רוצה שלשניהם יהיה single source of truth - אבל אתה אומר שזה Immutable, אז מה אני עושה? איך אני מעדכן?(אסף) מעולה, אז בוא נלך על הדוגמא שאמרת - אם אנחנו משתמשים בפתרון שהוא mutable, כמו נגיד -Redux או Recoil, אז יש פה שני דברים - א - יש פה את ה-Counter הזה, של כמה אובייקטים הם Completed - זה מה שנקרא Derived Data: זה Data שאמרנו שאנחנו לא רוצים להחזיק אותו פעמיים, אז אנחנו רוצים לחשב אותו, אנחנו רוצים לחשב אותו מתוך ה-Data האמיתי, שזה ה-Array הזה של ה-To-Do List.גם פה יש עניין של “אנחנו לא רוצים לחשב את זה יותר מדי פעמים, אנחנו רוצים לחשב את זה רק כשדברים ישתנו”, כי זה יקר לחשב דברים, אבל אם נחזור לשאלה הזו, רגע, של “איך אנחנו מעדכנים את זה?”, אז בעצם כדי לעדכן את . . . כדי להוסיף To-Do חדש, אני צריך להוסיף Array חדש, כי אחרת ה-State לא השתנה . . . עכשיו, למה זה חשוב ב-Redux? כי ב-Redux, הוא משתמש בעניין הזה של mutability בשביל ליצור Reactiveness . . . דיברנו על Reactiveness, שזה מתי . . . איך אני יודע שכשה-State משתנה, אני צריך להודיע על הקומפוננטות שמשתמשות בו.אז -Redux משתמש ב-mutability כדי לעשות Shallow comparison - הוא לוקח את ה-Reference של האובייקט, ומשווה את זה - כי זו השוואה מאוד מאוד זולה, זה להשוות שני מספרים - הוא לא צריך לעשות Deep Comparison, ולעבור אובייקט-אובייקט ולראות שזה בדיוק אותו Value, הוא רק משווה את ה-Reference.ולכן, אם אתה עושה את זה Immutable, זה מאוד פשוט ליצור את ה-Reactiveness הזה.כשאתה רוצה לשנות את ה-State, אתה צריך ליצור אובייקט חדש.עכשיו, הדבר הזה הוא נושא ב-Redux, שהוא קצת שנוי במחלוקת . . .כי שוב, דיברנו על Boilerplate - בכל פעם ליצור אובייקט חדש זה יכול להיות מאוד מעצבן, וזה גם יכול ליצור באגים, כי יכול להיות שבטעות שינית את ה-State, כי JavaScript היא שפה שהיא Stateful, אתה יכול לשנות State, הוא נותן לך את זה ואתה יכול לעשות את זה בטעות - ואז זה ייצור באגים, כי בטעות עדכנת את ה-State במקום לעשות State חדש . . . ואז ה-Comparison לא יעבוד, ואז תקבל View שהוא לא Fresh, הוא Stale, וזה לא יעבוד לך ואתה לא תבין למה, ואז אתה תחפש בקוד ועד שתמצא את זה . . . זה נורא מעצבן.(יונתן) זאת אומרת שהייתי יכול לקחת את המערך של ה-To-Dos, ולהוסיף עוד איבר ברשימה - וזה לא היה מרנדר את הקומפוננטות כי React לא היה מודע לזה . . .(אסף) בדיוק, לא היית רואה את זה - והיית שובר את הראש “למה זה קרה לי?”.(רן) דרך אגב, בניגוד למה שאמרת קודם על MobX, שבו אם היית משנה משהו, אז בסופו של דבר כן ה-UI היה עושה לזה רפלקציה (Reflection).(אסף) נכון - ב-MobX, הוא משתמש ב-mutability, והוא בעצם משתמש בהתנהגות הזאת כדי ליצור את ה-Reactiveness.(רן) וב-Redux או ב-Recoil זה למעשה Anti-Pattern - אם אתה מפתח שעובר מ-MobX לאחד מאלה, הולכים להיות לך כמה חודשים קשים בהתחלה . . . (אסף) נכון . . . אבל יש חדשות טובות! אותו בחור שעשה את MobX ואת MobX-State-Tree - הוא עשה גם ספרייה שנקראית Immer, שהיום היא באה בתוך Redux -בגלל ש-Redux . . . אחת מהביקורות הכי גדולות זה כל ה-Boilerplate וכל העבודה שצריך לעשות, Redux עבדו קשה בשביל להוסיף לתוך הספרייה כל מיני כלי-עזר שיעזרו לך עם זה.אחד מהם זה Immer - שמשתמש באותו “קסם” שמשתמשים ב-MobXזה גם אותו בנאדם שהשתמש בקסם הזה ב-MobX . . . כדי לעשות Immutable state - אבל בצורה שנוח יותר לאנשים לעשות את בצורה של mutable . . . מה זה אומר? זה אומר שאתה יכול להשתמש ב-API המוכר של JavaScript, של לעשות State.משהו.משהו = . . . לשנות את האובייקט הקייםבדוגמא שנתנו מקודם - להוסיף איבר למערךאבל מאחורי הקלעים, באמצעות אותם קסמים שדורסים את ההתנהגות של האובייקט, הוא ייצור לך אובייקט חדש, עם רפרנס חדש, וה-Shallow Reference Comparison יעבוד והכל יהיה כיף!אתה לא צריך ליצור Spread . . . מה שקורה הרבה פעמים זה שאתה יוצר Spread-Operator כדי לעשות Spread לאובייקט הקודם מתוך אובייקט חדש - וזה גם, פעם לא היה את זה, זה חדש, קיים רק כמה שנים, פעם היה צריך לעבוד עוד יותר קשה . . . אז זה עושה API ממש ממש כייפיהיום, Redux זו חווייה הרבה יותר כייפית ממה שהיה כשאני השתמשתי בזה . . . כשהתכוננתי לפודקאסט, ראיתי שהם עשו שם המון המון עבודה כדי לטפל בבעיות האלה.(רן) אני כבר מצליח לדמיין את הפרסומות - “להרגיש Stateful ולהיות Stateless!”, אבל טוב . . . [יש מצב . . . פרסומות הרבה פחות מוצלחות מזה כבר רצות היום על איילון]מעולה, מגניב - אז בוא נעשה רגע סיכום: בגדול, דיברנו על מה זה State Management, ולמה בכלל צריך את זה בצד של ה-Clientדיברנו על זה שלוגיקה עברה לצד של ה-Client, ולכן זה . . . הדברים מתחילים להיות מסובכים וצריך איזושהי דרך, ככה “לסדר את הקוד”, זה לא יכול להיות הכל ספגטי - jQuery Spaghetti, למי שיצא התענוג . . .אז קשה מאוד לנהל קוד כזה, ולכן נולדו ספריות של State Managementדיברנו קצת על React, דיברנו על MobX, שיש להן גישות שונות ובסופו של דבר על Recoilאז תודה רבה! כמה מילות סיכום?(אסף) היה לי ממש כיף, אפשר להמשיך לדבר על הנושא הזה עוד המון-המון-המון - זה נושא מאוד Debatable . . . יש המון פתרונות, כל הזמן קמות ספריות חדשות, זהו . . . תודה רבה!תודה לך אסף, ושהיה בהצלחה ב-livecycle. להתראות! האזנה נעימה ותודה רבה לעופר פורר על התמלול!
Node JS Is single-threaded asynchronous non-blocking javascript runtime, but it's not always single-threaded there are occasions where nodejs uses multi-threading, so the questions we will try to answer in this video, when is nodejs single-threaded and when does it use multi-threading and how will that affect my app? Event Loop single thread, that really just loops for callbacks 0:00 Threading in Node jS (libuv) 4:00 used for IO/intensive DNS queries file system reads CPU intensive crypto compression process.env.UV_THREADPOOL_SIZE=1 Examples 8:00 Cluster Nodejs 16:00 Example 1 Http server return 1 Http server while 1 Http server with file system read async Http server with file system read sync Http server with fetch call to server (dns) --- Send in a voice message: https://anchor.fm/hnasr/message
Multiple threads or only one thread, and why should it matter? Blocking or non-blocking IO, and what benefits do each of them offer? What’s the problem of using callbacks? Hold on to your hats, folks – in this episode, Esko, Andy and Otto plow through some of the most fundamental questions regarding runtime environments. GuestsAndy Davies is a software developer who likes making other developers’ lives easier, usually by providing libraries, tooling, infrastructure, build systems, and ways of working. He likes keeping things simple. He doesn't like Kubernetes.Otto Paaso also likes simple things (and static types). For the past 12 years he has been working on embedded, desktop and web products, as well as the necessary backend and infrastructure technologies to make things rock. HostEsko Lahti is an engineer who wants to know how things work under the hood, no matter how many threads are involved. He has no horse in the Node.js vs JVM race.Episode linksV8 JavaScript Engine: https://v8.dev/The Node.js Event Loop: https://nodejs.dev/learn/the-nodejs-event-loopA Guide to CompletableFutures in Java: https://www.baeldung.com/java-completablefutureOverview of blocking and non-blocking IO: https://nodejs.org/en/docs/guides/blocking-vs-non-blocking/Asynchronous programming in C#: https://docs.microsoft.com/en-us/dotnet/csharp/asyncAbout ReaktorFork Pull Merge Push is a podcast by Reaktor, a strategy, design and technology company changing how the world works. Reaktor has offices in New York, Amsterdam, Stockholm, Tokyo, Helsinki, Turku and Tampere.Reaktor is always on the lookout for bright software developers to work in health, security, emerging technologies, and much more. See www.reaktor.com/careers.@ReaktorNow#FPMPod
Wer sein Studium abbricht, um ins Denoland zu gehen, hat sicher eine interessante Geschichte zu erzählen. Aus diesem Grund haben wir in dieser Folge Luca Casonato zu Gast, der uns von Deno erzählt, einer Laufzeitumgebung für JavaScript und TypeScript. Deno wurde 2018 von Ryan Dahl, dem Schöpfer von Node.js, auf der JSConf EU vorgestellt (hier geht's zur Aufzeichnung des Talks). Er beschreibt darin fundamentale Schwächen von Node, die er bereut und nun mit Deno lösen möchte. Unser Gast Luca arbeitet als eine der wenigen Personen hauptsächlich am Projekt und spricht mit uns über die größten Unterschiede zwischen den beiden Varianten. In dieser Folge streifen wir das Dependency-Management von Deno, seine Eigenschaften als opinionated Runtime und seine hohe Sicherheit gegenüber Node. Hier kommt ihr zu Lucas Webseite und seinem Twitter-Profil. Auf der Webseite von Deno könnt ihr euch noch mehr Infos einholen. Picks of the Day Luca: Die Deno-Extension für Visual Studio Code mit cooler Autocompletion. Fabi: JSConf Vortrag von Philip Roberts: What the Heck is the Event Loop anyway. Ein Must-Watch für alle Javascript-EntwicklerInnen. Ihr habt euch schon immer gefragt, was die Event Loop ist bzw. wie sie funktioniert? Dann ist das Video genau richtig. Ansonsten ist es aber auch nochmal die perfekte, unterhaltsame Auffrischung, um die Event Loop komprimiert in 25 Minuten erklärt zu bekommen. Schreibt uns! Schickt uns eure Themenwünsche und euer Feedback. podcast@programmier.bar Folgt uns! Bleibt auf dem Laufenden über zukünftige Folgen und virtuelle Meetups und beteiligt euch an Community-Diskussionen. Twitter Instagram Facebook Meetup YouTube Musik: Hanimo
How does Javascript handle concurrency? When you execute asynchronous code in Javascript, it goes through something called an Event Loop. It…
Sponsored By: Show Notes [00:01:11] Ari tells us what nextTick is and Tessa tells us about the differences between local and global versions. [00:03:43] Ari and Tessa tell us scenarios they’ve run into as far as needing nextTick. [00:08:26] Ben is curious about “chaining” in nextTick. Tessa explains this and she also mentions her talk she did at VueConf US 2019, where she broke down a bunch of different ways to nest nextTick. [00:13:06] As far as nextTick goes, Ben wants to know if this is something that Ari and Tessa would recommend people only reach out to when things start to be inconsistent or when should someone use this? [00:18:55] Ben wants to know if nextTick is used improperly can it cause performance issues or not quite? [00:23:54] Tessa wonders if Vue3 comes out, if she follows the style where her JS is at the top of her single file component and open it, she will see at the top what props it accepts and also what events that she has decided this component will emit? [00:26:20] Ari and Tessa give some final tips about nextTick stuff. Sponsor: Linode (https://promo.linode.com/vue/) Picks of the week: [00:28:53] Tessa has two picks: Douglas by Hannah Gadsby on Netflix and Managing Up by Mary Abbajay. [00:30:55] Ari has two picks: Queer Eye-Season 5 on Netflix and Queer Eye-We’re in Japan! on Netflix. [00:33:26] Ben’s has three picks: An OXO Good Grips Silicone Pastry Mat, Tessa, who has provided some really great picks and finds for him this week which is Hey.com and Working in Public: The Making and Maintenance of Open Source Software by Nadia Eghbal. Resources mentioned: VueConf US 2019-Back to the Vueture: Stuck in the Event Loop by Tessa (https://www.vuemastery.com/conferences/vueconf-us-2019/back-to-the-vueture-stuck-in-the-event-loop) nextTick (https://vuejs.org/v2/api/#Vue-nextTick) Douglas-Hannah Gadsby (https://www.netflix.com/title/81054700) Managing Up: How to Move Up, Win at Work, and Succeed with Any Type of Boss by Mary Abbajay (https://bookshop.org/books/managing-up-how-to-move-up-win-at-work-and-succeed-with-any-type-of-boss/9781119436683) Queer Eye-Netflix (https://www.netflix.com/title/80160037) Queer Eye: We’re in Japan!-Netflix (https://www.netflix.com/title/81075744) OXO Good Grips Silicone Pastry Mat (https://www.oxo.com/silicone-pastry-mat.html) Hey.com (https://hey.com/) Working in Public: The Making and Maintenance of Open Source Software by Nadia Eghbal (https://nayafia.substack.com/p/22-working-in-public)
JavaScript Remote Conf 2020 May 13th to 15th - register now! Vladimir Novick is a work from home veteran. He talks through the situation with COVID-19, having kids at home, and working from home. The rest of the panel chimes in and discusses their experience—some short and some long—working from home. Panel Charles Max Wood Paige Niedringhaus TJ VanToll Guest Vladimir Novick Sponsors G2i | Enjoy the luxuries of freelancing "The MaxCoders Guide to Finding Your Dream Developer Job" by Charles Max Wood is now available on Amazon. Get Your Copy Today! Links Enabling breakout rooms – Zoom Help Center Picks Vladimir Novick: Follow Vladimir on Twitter > @VladimirNovick, Twitch, Website Event Loop Krisp | Noise Cancelling App Keyboard Maestro Stream Deck Notion Charles Max Wood: ASUS 15.6" Full HD 1920x1080 IPS USB Portable Monitor The Chronicles of Narnia Adult Box Set Audiobookm Paige Niedringhaus: ShiftIt for Mac Tiger King on Netflix TJ VanToll: Twitch Follow React Round Up on Twitter > @reactroundup
JavaScript Remote Conf 2020 May 13th to 15th - register now! Vladimir Novick is a work from home veteran. He talks through the situation with COVID-19, having kids at home, and working from home. The rest of the panel chimes in and discusses their experience—some short and some long—working from home. Panel Charles Max Wood Paige Niedringhaus TJ VanToll Guest Vladimir Novick Sponsors G2i | Enjoy the luxuries of freelancing "The MaxCoders Guide to Finding Your Dream Developer Job" by Charles Max Wood is now available on Amazon. Get Your Copy Today! Links Enabling breakout rooms – Zoom Help Center Picks Vladimir Novick: Follow Vladimir on Twitter > @VladimirNovick, Twitch, Website Event Loop Krisp | Noise Cancelling App Keyboard Maestro Stream Deck Notion Charles Max Wood: ASUS 15.6" Full HD 1920x1080 IPS USB Portable Monitor The Chronicles of Narnia Adult Box Set Audiobookm Paige Niedringhaus: ShiftIt for Mac Tiger King on Netflix TJ VanToll: Twitch Follow React Round Up on Twitter > @reactroundup
Сидеть дома и работать, сидеть дома и готовить себе ужин, сидеть дома и пылесосить - за последние недели мы научились многое делать в асинхронном режиме. Точно также как и герои нашего нового выпуска - авторы библиотек worker_manager и Computer. Вместе мы обсудим последние новости, а также окунёмся в мир изолятов. Осторожно, в выпуске вы найдёте, кажется, самое понятное в мире объяснение, каким же чудом сетевые запросы не блокируют UI даже если исполняются в главном изоляте. У микрофона: Евгений Сатуров (Surf), Даниил Сурнин (Ozon), Лавинов Сергей (91). Забытая рубрика "Новости про Фуксию": https://ww.9to5google.com/2020/03/06/fuchsia-friday-nelson-luis-hint-made-by-google/ Приложение для борьбы с COVID-19 на Flutter для ВОЗ: https://www.freelancer.com/articles/global-response-to-coronavirus/help-the-world-health-organization Ждём null-safety в Dart - уже почти готово! https://github.com/dart-lang/language/issues/110 Computer: https://pub.dev/packages/computer worker_manager: https://pub.dev/packages/worker_manager Старая, но хорошая статья The Event Loop and Dart: https://webdev-angular3-dartlang-org.firebaseapp.com/articles/performance/event-loop Прекрасный материал от Didier Boelens "Futures - Isolates - Event Loop": https://www.didierboelens.com/2019/01/futures-isolates-event-loop/ Официальный обзор "The Engine architecture": https://github.com/flutter/flutter/wiki/The-Engine-architecture Доклад Pascal Welsch, отвечающий на многие вопросы "Heavy lift work in Flutter get started with Isolates": https://youtu.be/M8jGSkACneE Официальный канал подкаста: t.me/flutterdevpodcast_news Официальный чат подкаста: t.me/flutterdevpodcast
Sponsored by DigitalOcean: pythonbytes.fm/digitalocean Michael #1: Final type PEP 591 -- Adding a final qualifier to typing This PEP proposes a "final" qualifier to be added to the typing module---in the form of a final decorator and a Final type annotation---to serve three related purposes: Declaring that a method should not be overridden Declaring that a class should not be subclassed Declaring that a variable or attribute should not be reassigned Some situations where a final class or method may be useful include: A class wasn’t designed to be subclassed or a method wasn't designed to be overridden. Perhaps it would not work as expected, or be error-prone. Subclassing or overriding would make code harder to understand or maintain. For example, you may want to prevent unnecessarily tight coupling between base classes and subclasses. You want to retain the freedom to arbitrarily change the class implementation in the future, and these changes might break subclasses. # Example for a class: from typing import final @final class Base: ... class Derived(Base): # Error: Cannot inherit from final class "Base" ... And for a method: class Base: @final def foo(self) -> None: ... class Derived(Base): def foo(self) -> None: # Error: Cannot override final attribute "foo" # (previously declared in base class "Base") ... It seems to also mean const RATE: Final = 3000 class Base: DEFAULT_ID: Final = 0 RATE = 300 # Error: can't assign to final attribute Base.DEFAULT_ID = 1 # Error: can't override a final attribute Brian #2: flit 2 Michael #3: Pint via Andrew Simon Physical units and builtin unit conversion to everyday python numbers like floats. Receive inputs in different unit systems it can make life difficult to account for that in software. Pint handles the unit conversion automatically in a wide array of contexts – Can add 2 meters and 5 inches and get the correct result without any additional work. The integration with numpy and pandas are seamless, and it’s made my life so much simpler overall. Units and types of measurements Think you need this? How about the Mars Climate Orbiter The MCO MIB has determined that the root cause for the loss of the MCO spacecraft was the failure to use metric units in the coding of a ground software file, “Small Forces,” used in trajectory models. Specifically, thruster performance data in English units instead of metric units was used in the software application code titled SM_FORCES (small forces). Brian #4: 8 great pytest plugins Jeff Triplett Michael #5: 11 new web frameworks via LuisCarlos Contreras Sanic [flask like] - a web server and web framework that’s written to go fast. It allows the usage of the async / await syntax added in Python 3.5 Starlette [flask like] - A lightweight ASGI framework which is ideal for building high performance asyncio services, designed to be used either as a complete framework, or as an ASGI toolkit. Masonite - A developer centric Python web framework that strives for an actual batteries included developer tool with a lot of out of the box functionality. Craft CLI is the edge here. FastAPI - A modern, high-performance, web framework for building APIs with Python 3.6+ based on standard Python type hints. Responder - Based on Starlette, Responder’s primary concept is to bring the niceties that are brought forth from both Flask and Falcon and unify them into a single framework. Molten - A minimal, extensible, fast and productive framework for building HTTP APIs with Python. Molten can automatically validate requests according to predefined schemas. Japronto - A screaming-fast, scalable, asynchronous Python 3.5+ HTTP toolkit integrated with pipelining HTTP server based on uvloop and picohttpparser. Klein [flask like] - A micro-framework for developing production-ready web services with Python. It is ‘micro’ in that it has an incredibly small API similar to Bottle and Flask. Quart [flask like]- A Python ASGI web microframework. It is intended to provide the easiest way to use asyncio functionality in a web context, especially with existing Flask apps. BlackSheep - An asynchronous web framework to build event based, non-blocking Python web applications. It is inspired by Flask and ASP.NET Core. BlackSheep supports automatic binding of values for request handlers, by type annotation or by conventions. Cyclone - A web server framework that implements the Tornado API as a Twisted protocol. The idea is to bridge Tornado’s elegant and straightforward API to Twisted’s Event-Loop, enabling a vast number of supported protocols. Brian #6: Raise Better Exceptions in Python Extras Michael: Naming venvs --prompt Another new course coming soon: Python for decision makers and business leaders Some random interview over at Real Python: Python Community Interview With Brian Okken Joke via Daniel Pope What's a tractor's least favorite programming language? Rust.
Samuel Williams explains the difference between concurrency and parallelism, the dangers of writing multi-threaded code, how languages like Node, Go, and Erlang safely handle parallelism, and how to build scalable systems safely.
Sponsors Adventures in DevOps Sentry– use the code “devchat” for two months free on Sentry’s small plan The Freelancers Show CacheFly Panel Chris Fritz Ben Hong Ari Clark Summary In this episode, the panel has a fun time as they discuss what makes a good talk and how to get started as a speaker. The panel lists attributes they love in a talk that makes them want to jump onto their computers and code: having an easy call to action with resources, start the talk with why the audience should listen and what they stand to gain from the talk, and authentic humor are only a few. Amazing example talks and speakers are given as resources to study these attributes. The panel also discusses cringe-worthy mistakes made by speakers that can kill an interesting talk: too many words on your slides or reading from your slides, rambling personal anecdotes, tangents, and jokes, or being overly professional and talking down to your audience and many more. Advice is given on how to correct these problems The panel discusses how to get started speaking at conferences and gives advice for submitting conference proposals (CFP). The benefits of starting small by speaking at local meetups are considered. Local meetup organizers are always looking for willing speakers and by giving talks here first speakers can receive friendly and honest feedback. Chris Fritz gives instructions on how to get useful feedback instead of polite compliments from the audience. The panel gives advice on writing talks, most importantly to have an objective for your talk. Ben Hong explains why it is important to submit more than one CFP and more than one type of talk. The panel discusses the different types of talks and reminds listeners not to undervalue case studies because each experience is unique and valuable. Chris and Ben share what organizers look for in CFP’s and why they may be rejected. The panel ends the discussion with an explanation of speaker accommodation packages and how to ask for them. Links Agile Design Systems in Vue - Miriam Suzanne at VueConf.US Callum Macrae - Accessibility with Vue Advanced Animations with Vue.js Vue in Motion - Rachel Nabors - VueConf US 2018 https://slides.com/ Back to the Vueture: Stuck in the Event Loop http://www.sarahmei.com/blog/2014/04/07/what-your-conference-proposal-is-missing/ https://www.facebook.com/ViewsonVue https://twitter.com/viewsonvue Picks Ben Hong: Paris, France Ari Clark: After Life Derek Chris Fritz: Nanette TIS100
Sponsors Adventures in DevOps Sentry– use the code “devchat” for two months free on Sentry’s small plan The Freelancers Show CacheFly Panel Chris Fritz Ben Hong Ari Clark Summary In this episode, the panel has a fun time as they discuss what makes a good talk and how to get started as a speaker. The panel lists attributes they love in a talk that makes them want to jump onto their computers and code: having an easy call to action with resources, start the talk with why the audience should listen and what they stand to gain from the talk, and authentic humor are only a few. Amazing example talks and speakers are given as resources to study these attributes. The panel also discusses cringe-worthy mistakes made by speakers that can kill an interesting talk: too many words on your slides or reading from your slides, rambling personal anecdotes, tangents, and jokes, or being overly professional and talking down to your audience and many more. Advice is given on how to correct these problems The panel discusses how to get started speaking at conferences and gives advice for submitting conference proposals (CFP). The benefits of starting small by speaking at local meetups are considered. Local meetup organizers are always looking for willing speakers and by giving talks here first speakers can receive friendly and honest feedback. Chris Fritz gives instructions on how to get useful feedback instead of polite compliments from the audience. The panel gives advice on writing talks, most importantly to have an objective for your talk. Ben Hong explains why it is important to submit more than one CFP and more than one type of talk. The panel discusses the different types of talks and reminds listeners not to undervalue case studies because each experience is unique and valuable. Chris and Ben share what organizers look for in CFP’s and why they may be rejected. The panel ends the discussion with an explanation of speaker accommodation packages and how to ask for them. Links Agile Design Systems in Vue - Miriam Suzanne at VueConf.US Callum Macrae - Accessibility with Vue Advanced Animations with Vue.js Vue in Motion - Rachel Nabors - VueConf US 2018 https://slides.com/ Back to the Vueture: Stuck in the Event Loop http://www.sarahmei.com/blog/2014/04/07/what-your-conference-proposal-is-missing/ https://www.facebook.com/ViewsonVue https://twitter.com/viewsonvue Picks Ben Hong: Paris, France Ari Clark: After Life Derek Chris Fritz: Nanette TIS100
Recording date: 2019-05-23 John Papa @John_Papa Ward Bell @WardBell Dan Wahlin @DanWahlin Matteo Collina @matteocollina Resources: NearForm http/2 Node.js can http/2 push Interview with Matteo in which he talks about evolution of streams in node and watch out IPV6 Browser connection limitations BEFE Node Clinic tool ClinicJS TensorFlow Clinic + TensorFlow Autocannon HDR Histogram ClinicJS Doctor ClinicJS Flame RFDC Deep vs Shallow Cloning JSON.parse Don't block the event loop What is the event loop anyway The Node Event Loop async iterators Event loop timers and next tick libuv AWS Lambda Azure Functions Worker threads in Node.js Fastify Restify hapi Node Conf EU koaJS NodeJS Security NodeJS Best Security Practices DNS Attacks Someone to follow Natanel Basal / NGX Auto Unsubscribe Benedict Meurer Matt Hernadez Timejumps 01:40 Guest introduction 03:26 What's HTTP 2? 05:01 When can we take advantage of HTTP/2? 07:44 What is HTTP/3? 12:01 Sponsor: IdeaBlade 13:12 What is Node Clinic? 17:17 What is autocannon? 27:39 What about a large amount of JSON? 29:59 What is event loop? 38:33 Any advice with streams? 47:48 Sponsor: Nrwl 48:29 How secure is node? 51:48 Someone to follow
Sponsor Netlify Sentry use the code “devchat” for 2 months free on Sentry small Triplebyte offers a $1000 signing bonus CacheFly Panel Chris Fritz Divya Sasidharan Ben Hong Natalia Tepluhina Erik Hanchett Joined by Special Guest: Krystal Campioni Summary Krystal Campioni starts by introducing herself and her background. She shares how she got into Vue and her design education. She shares resources for developers looking to learn more about design. She shares free online animation resources. The panel shares their favorite animation tips and discusses what makes vue a great framework for animations. The panel considers the value of animation; what are the benefits for both the user and the team. Links http://cubic-bezier.com/ https://easings.net/en https://twitter.com/sarah_edo Visualizations using SVG, Canvas, and WebGL in Vue https://vuejs.org/v2/guide/transitions.html https://vuejs.org/v2/guide/computed.html https://www.udemy.com/vuejs-2-the-complete-guide/ https://vuejs.org/v2/guide/transitioning-state.html https://refactoringui.com/book/ Don't Make Me Think: A Common Sense Approach to Web Usability Vue in Motion https://twitter.com/kenny_io/status/1114206038801014784 http://krystalcampioni.com/#/ https://twitter.com/krystalcampioni https://medium.com/@krystalcampioni https://github.com/krystalcampioni/vue-animations https://twitter.com/viewsonvue https://www.facebook.com/ViewsonVue Picks Chris Fritz: https://store.steampowered.com/app/736260/Baba_Is_You/ Agile Design Systems in Vue Agile Design Systems in Vue by Miriam Suzanne A React Point of Vue A React Point of Vue by Divya Sasidharan Building Desktop Applications with Vue Building Desktop Applications with Vue by Natalia Tepluhina Divya Sasidharan: https://www.customink.com/designs/dsdrasnerd https://www.vuemastery.com/conferences/vueconf-us-2018 Advanced Animations with Vue.js Advanced Animations with Vue.js by Krystal Campioni Back to the Vueture: Stuck in the Event Loop Back to the Vueture: Stuck in the Event Loop by Tessa Ben Hong: Bad Blood: Secrets and Lies in a Silicon Valley Startup Natalia Tepluhina: Game of Thrones Krystal Campioni: Programmed Inequality: How Britain Discarded Women Technologists and Lost Its Edge in Computing (History of Computing) https://github.com/krystalcampioni/vue-hotel-datepicker
Sponsor Netlify Sentry use the code “devchat” for 2 months free on Sentry small Triplebyte offers a $1000 signing bonus CacheFly Panel Chris Fritz Divya Sasidharan Ben Hong Natalia Tepluhina Erik Hanchett Joined by Special Guest: Krystal Campioni Summary Krystal Campioni starts by introducing herself and her background. She shares how she got into Vue and her design education. She shares resources for developers looking to learn more about design. She shares free online animation resources. The panel shares their favorite animation tips and discusses what makes vue a great framework for animations. The panel considers the value of animation; what are the benefits for both the user and the team. Links http://cubic-bezier.com/ https://easings.net/en https://twitter.com/sarah_edo Visualizations using SVG, Canvas, and WebGL in Vue https://vuejs.org/v2/guide/transitions.html https://vuejs.org/v2/guide/computed.html https://www.udemy.com/vuejs-2-the-complete-guide/ https://vuejs.org/v2/guide/transitioning-state.html https://refactoringui.com/book/ Don't Make Me Think: A Common Sense Approach to Web Usability Vue in Motion https://twitter.com/kenny_io/status/1114206038801014784 http://krystalcampioni.com/#/ https://twitter.com/krystalcampioni https://medium.com/@krystalcampioni https://github.com/krystalcampioni/vue-animations https://twitter.com/viewsonvue https://www.facebook.com/ViewsonVue Picks Chris Fritz: https://store.steampowered.com/app/736260/Baba_Is_You/ Agile Design Systems in Vue Agile Design Systems in Vue by Miriam Suzanne A React Point of Vue A React Point of Vue by Divya Sasidharan Building Desktop Applications with Vue Building Desktop Applications with Vue by Natalia Tepluhina Divya Sasidharan: https://www.customink.com/designs/dsdrasnerd https://www.vuemastery.com/conferences/vueconf-us-2018 Advanced Animations with Vue.js Advanced Animations with Vue.js by Krystal Campioni Back to the Vueture: Stuck in the Event Loop Back to the Vueture: Stuck in the Event Loop by Tessa Ben Hong: Bad Blood: Secrets and Lies in a Silicon Valley Startup Natalia Tepluhina: Game of Thrones Krystal Campioni: Programmed Inequality: How Britain Discarded Women Technologists and Lost Its Edge in Computing (History of Computing) https://github.com/krystalcampioni/vue-hotel-datepicker
We turn our eye to web server best practices, from the basics of CDNs to the importance of choosing the right multi-processing module. Plus the right way to setup PHP, the trouble with benchmarking, and when to choose NGiNX.
In this podcast, Saugat talks with two open source enthusiasts: Kabir and Robus about Open Source software and how it is changing everyone's lives. They dive into the basics of open source and talk about how anyone can contribute to open source. Furthermore, they talk about their journey in open source and share their thoughts on the future of open source. How to Contribute to Open Source: https://opensource.guide/how-to-contribute/ Show Notes: Kabir Baidhya (Guest 1): https://github.com/kabirbaidhya Robus Gauli (Guest 2): https://github.com/robusgauli Saugat Acharya (Host): https://github.com/mesaugat Chill Monitoring Tool: https://github.com/leapfrogtechnology/chill Cloud Native Computing Foundation: https://www.cncf.io/ The Event Loop: https://en.wikipedia.org/wiki/Event_loop Deno: https://github.com/denoland/deno Tokio: https://github.com/tokio-rs/tokio AWS Fargate: https://aws.amazon.com/fargate/ Serverless Computing: https://en.wikipedia.org/wiki/Serverless_computing Svelte: https://github.com/sveltejs/svelte Rethinking Reactivity (Svelte 3 Introduction): https://www.youtube.com/watch?v=AdNJ3fydeao Music by Peyruis: https://soundcloud.com/peyruis Send us your feedback at podcast@lftechnology.com
This week, we talk with James Urquhart who joined Pivotal recently in the CTO group. We talk about some architectural ideas for converting the enterprise over to an event-driven flow, discuss the reasons for doing multi-cloud, and also what kinds of conversations "executives" find helpful. Coté does a great job mangling Pivotal product names. Also, hot takes on "on-premises" vs. "on-premise."
This week, we talk with James Urquhart who joined Pivotal recently in the CTO group. We talk about some architectural ideas for converting the enterprise over to an event-driven flow, discuss the reasons for doing multi-cloud, and also what kinds of conversations "executives" find helpful. Coté does a great job mangling Pivotal product names. Also, hot takes on "on-premises" vs. "on-premise."
This week, we talk with James Urquhart who joined Pivotal recently in the CTO group. We talk about some architectural ideas for converting the enterprise over to an event-driven flow, discuss the reasons for doing multi-cloud, and also what kinds of conversations "executives" find helpful. Coté does a great job mangling Pivotal product names. Also, hot takes on "on-premises" vs. "on-premise."
This week, we talk with James Urquhart who joined Pivotal recently in the CTO group. We talk about some architectural ideas for converting the enterprise over to an event-driven flow, discuss the reasons for doing multi-cloud, and also what kinds of conversations "executives" find helpful. Coté does a great job mangling Pivotal product names. Also, hot takes on "on-premises" vs. "on-premise."
This week, we talk with James Urquhart who joined Pivotal recently in the CTO group. We talk about some architectural ideas for converting the enterprise over to an event-driven flow, discuss the reasons for doing multi-cloud, and also what kinds of conversations "executives" find helpful. Coté does a great job mangling Pivotal product names. Also, hot takes on "on-premises" vs. "on-premise."
This week, we introduce Eve and Martin, and talk about APIs and JSON, while going off-topic quite frequently. Recorded on 2nd August 2018. The Founders & Coders (FAC) podcast is aimed at anyone interested in hearing about what it's like to be on the course, web development in general, and/or the backgrounds and interests of the people taking it. As the episodes progress, we'll try to make it more polished, and get the chance to include people otherwise associated with FAC (the people taking the FAC course in Nazareth and Gaza, FAC alumni, and some of the external speakers that we get in). Resources: APIs: https://zapier.com/learn/apis/ https://www.codenewbie.org/blogs/an-intro-to-apis https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Client-side_web_APIs/Introduction APIs on Wikipedia (standard vs simple English): https://en.wikipedia.org/wiki/Application_programming_interface https://simple.wikipedia.org/wiki/Application_programming_interface Objects: https://www.w3schools.com/js/js_objects.asp JSON: https://stackoverflow.com/questions/383692/what-is-json-and-why-would-i-use-it https://www.w3schools.com/js/js_json_intro.asp ES6: https://codeburst.io/es6-tutorial-for-beginners-5f3c4e7960be Video on the Event Loop (not quite beginner friendly): https://www.youtube.com/watch?v=8aGhZQkoFbQ Recommendations: Jessie: That Classical Podcast: https://www.thatclassicalpodcast.com/ Eve: Reply-All Podcast: https://www.gimletmedia.com/reply-all Dom: Composer of the Week Podcast: https://www.bbc.co.uk/programmes/b006tnxf CodeNewbie Podcast: https://www.codenewbie.org/podcast Martin: Learning How to Learn Coursera course: https://www.coursera.org/learn/learning-how-to-learn
Let's escape the world where the Big Brother constantly interrupts us. Free ourselves from the oppression of consumerism. Let's leave behind preemptive multitasking and enter the world of collaboration! Host: Andrey Salomatin https://twitter.com/flpvsk Dark side: Michael Beschastnov Please send us stories about your awkward tech talks! https://twitter.com/podcastcode andrey@codepodcast.com michael@codepodcast.com ### Guests ### - **A. Jesse Jiryu Davis** * https://emptysqua.re/blog/ * https://github.com/ajdavis - **Saúl Ibarra Corretgé** * https://about.me/saghul * https://github.com/saghul A much smarter way to spend your money The Architecture of Open Source Applications aosabook.org/ ### Sources ### * **Event loop** * What the heck is the event loop anyway? by Philip Roberts https://www.youtube.com/watch?v=8aGhZQkoFbQ * An Introduction to libuv by Nikhil Marathe https://nikhilm.github.io/uvbook/ * Taming the asynchronous beast with ES7 by Nolan Lawson https://pouchdb.com/2015/03/05/taming-the-async-beast-with-es7.html * How the heck does async/await work in Python 3.5? by Brett Cannon http://www.snarky.ca/how-the-heck-does-async-await-work-in-python-3-5 * **Coroutines** * Coroutines Live-Coding Demonstration, at SCALE14x by A. Jesse Jiryu Davis https://emptysqua.re/blog/scale14x-coroutines-talk/ * A Web Crawler With asyncio Coroutines from The Architecture Of Open Source Applications by A. Jesse Jiryu Davis and Guido van Rossum http://aosabook.org/en/500L/a-web-crawler-with-asyncio-coroutines.html * Unyielding by Glyph Lefkowitz https://glyph.twistedmatrix.com/2014/02/unyielding.html * A Curious Course on Coroutines and Concurrency by David Beazley http://www.dabeaz.com/coroutines/ * Generator Tricks for Systems Programmers by David Beazley http://www.dabeaz.com/generators/ ### Projects to check out ### * **Python** * Pyuv https://github.com/saghul/pyuv * Pymongo https://api.mongodb.org/python/current/index.html * Python Async IO Resources http://asyncio.org/ * curio - concurrent I/O https://github.com/dabeaz/curio * Tornado Web Server https://github.com/tornadoweb/tornado * **Node.js** * libuv http://docs.libuv.org/en/v1.x/ ### Music ### Mid-Air! https://soundcloud.com/mid_air