Analysing a string of symbols, according to the rules of a formal grammar
POPULARITY
Open Source: Die schöne heile Welt - Oder doch nicht?Die meisten sprechen über Open Source mit einem positiven Mindset. Die Kultur ist einzigartig. Leute, die sich noch nie gesehen haben, arbeiten zusammen an etwas Großem. Als Anwender ist man oft beeindruckt, was für eine großartige Software allein durch freiwillige Arbeit erschaffen und auch bereitgestellt wird.Doch in der Realität sieht es oft ganz anders aus. Wenn mal wieder einer der Open Source Incidents in die Tagesschau geschafft hat, wird das ganze Set an Problemen, die es in der Maintainership von Open Source Projekten gibt, sichtbar. Und genau darüber geht es in dieser Episode.Wir klären, welche Probleme es beim Maintainen von Open Source gibt, warum diese nur auf wenige Schultern verteilt sind, aber Milliarden Menschen vom positiven Open Source Output profitieren und welche Lösungen es dafür gibt. Viel Spaß.Bonus: Viel Negativität auf wenigen Schultern verteilt.**** Diese Episode wird von We Manage gesponsert.Für Agenturen und kleinere Unternehmen ist es oft eine Herausforderung, ein vollständiges DevOps-Team aufzubauen. We Manage bietet DevOps und SRE as a Service an – passend für alle Projektgrößen. Ob als Unterstützung für bestehende Mitarbeiter⋅innen, damit diese in den Urlaub fahren können, oder als vollumfängliches Infrastruktur-Team mit optionaler 24/7-Bereitschaft. We Manage ist der ideale Partner für Digitalunternehmen, Startups und Agenturen, die auf der Suche nach finanziell vernünftiger und robuster Infrastruktur sind. Mehr Infos findest du unter https://engineeringkiosk.dev/wemanage ****Das schnelle Feedback zur Episode:
A new track by DJ Habett from the album "PsychoKnots" (2024-07-16). Tags: Techno, Kicks, Tanz, Minimal, Bang, Cbd, Static, Energy, Psychosis, Title, Attic CC(by). Production notes: Cloudy summer, head banging kicks, different synthesizers. The sample is huge but seams hard to decipher. Cheers!
June Marcuse
This week Anna & Paul are joined by Ryan Slattery of Slatt Studio to discuss the pros and cons of text parser and the pros and cons of point and click, but like, comparatively. I guess it's parser vs point and click but idk, the "vs" gives it like a grudge match kinda vibe and we didn't really frame it like one of them has to win and the other lose. Here, let's start over with an overtly intellectual vibe: This week your hosts are joined by one R. J. Slattery to discuss - Exegesis on Interactive Paradigms: The Dialectical Tension Between Point-and-Click Interfaces and Text-Parser Mechanisms in Digital Ludology. Ah very good. That was most better. Mangia! Download Betrayed Alliance: Book 1 here! Support SlattStudio on Patreon! Vote for The Phantom Fellows to be released on GOG! Wishlist our adventure game! The Phantom Fellows Let's hang out at the Adventure Game Fan Fair! Shek out our friends in the Adventure Game Hotspot Network: Space Quest Historian's This tech could have revolutionized the voice-over industry (feat. Al Lowe) Adventure Game Geek's Talisman (PC DOS 1995) – Just Another Day In Thurania! (feat. Paul!) OneShortEye's The Insanity of King's Quest Speedruns Conversations with Curtis' Paul & Daniel play Thimbleweed Park! Tech Talk with Daniel Albu's A Conversation with Khris Brown (Full Throttle / The Dig / The Curse of Monkey Island / Psychonauts) Adventure Game Hotspot's 11 "OH HELL NO" moments in adventure games (feat. Paul!) Laura Cressup's Twitch & YouTube Channels AGHN Content Creators Podcast Episode 3: AGHN Content Creators Podcast - Episode 3: Audio and Why It's Important to Your Ears (feat Anna & Paul!) AGHN Content Creators Podcast Episode 5: AGHN Content Creators Podcast - Episode 5: Stress and Expectations (feat Anna & Paul!) Say hi I guess! Twitter (Anna) - @CGGpodcast Twitter (Paul) - @PhantomFellows ThePhantomFellows.com Send us your words! E-mail: mail@classicgamersguild.com Become a Patreon to support the show? www.patreon.com/ClassicGamersGuild Join the group and talk about neat stuff! Facebook Page Facebook Group We're also on Instagram & YouTube "CGG Theme" and "A Minor Concussion" by The Volume Remote Intro greeting (usually) by (and thank you to) Hope Kodman VonStarnes Games In the Episode: Indiana Jones and the Fate of Atlantis Betrayed Alliance Book 1 Quest For Glory Series King's Quest IV Police Quest 2 Laura Bow - he Colonials Bequest Gabriel Knight Sins of the Fathers Gold Rush! Leisure Suit Larry 3 Space Quest 3 & 4 Monkey Island Series Conquests of the Longbow And finally, I'm gonna have to go ahead and ask you- I am once again asking you, to wishlist my game. I'm workin real hard on it, full time, and I think you're gonna love it. BUT, I'm gonna need you to tap on this and then tap several more times, until it's wish listedOMG THANK YOU SO MUCH ThePhantomFellows.com The Phantom Fellows on Steam
The suspense was killing us! OK, the old parser was then... but what about NOW? We're finally answering this question... in more detail than you dared to ask for. PEG, memoization, funky secrets, and how a certain auto-formatter self-inflicted an existential crisis on itself. It's all there, told in barely 100 minutes! Can you believe it? # Timestamps (00:00:00) INTRO (00:00:54) PART 1: What even is PEG? (00:04:02) You can't prove anything! (00:05:03) What's a "parsing expression"? (00:08:23) Our old LL1 parser wasn't doing its job (00:09:37) "Soft keywords" in LL1: A Horror Story (00:13:16) PART 2: How PEG was adopted by Python (00:17:10) Why not LALR? (00:22:11) The PEG paper wasn't enough either, if we're honest (00:26:26) Less obvious advantages of the new parser (00:31:28) Black is stuck with LL1, can it cope? (00:36:24) Hedging against Łukasz, the bringer of doom (00:41:14) PART 3: How does the PEG parser of CPython work? (00:44:30) Pedantic Pablo on "exponential" (00:45:14) Fresh news from literally yesterday last week (00:46:39) Pedantic Pablo on "infinite" (00:47:32) Memoization in the PEG parser (00:50:41) Parse once, and if it fails, try again! (00:52:14) How to model a grammar of programming mistakes? (00:56:36) Why is there C code in my grammar file? (00:59:57) Bro, do you even lift? (01:01:45) How soft keywords work today: it's not free lunch (01:04:29) Funky grammar secrets (01:09:07) PART 4: PR OF THE WEEK (01:09:15) audioop.c license shenanigans (01:14:56) The secret profiler inside CPython (tests) (01:22:45) PART 5: WHAT'S GOING ON IN CPYTHON? (01:23:30) Free-threading changes (01:28:15) Faster Python changes (01:35:39) End of an era: docs get rid of Python 2 migration info (01:36:45) Python --help output is now nicer (01:38:43) SQLite as a dbm backend (01:41:08) OUTRO
Robby has a conversation with Jemma Issroff, a Senior Software Engineer, speaker and the author of the book, “Ruby Garbage Collection in Under Two Hours” They delve into the intricacies of well-maintained software, and Jemma brings her wealth of experience, particularly from her involvement in Prism, a notable rewrite of the Ruby parser. The duo explores the contrasting dynamics of maintaining software in C versus Ruby, shedding light on the nuanced challenges and advantages each presents. As the conversation unfolds, they draw intriguing parallels between their approaches to utilizing advanced tools like ChatGPT and CoPilot in their respective workflows. Jemma also offers a sneak peek into her upcoming transition into the realm of artificial intelligence, adding a fascinating layer to the dialogue. Beyond the tech talk, the episode takes an unexpected turn as the two bond over their shared affection for running in the rain and Jemma recounts her enriching experience at Recurse, a unique software programmers retreat. This episode is a captivating blend of technical expertise and personal anecdotes where rain-soaked runs and programming retreats add unexpected flavors to the conversation. Tune in for a unique exploration of the tech landscape that will definitely leave you inspired and informed.Book Recommendations:Thinking Fast and Slow by Daniel KahnemanHelpful Links:Prism, a Ruby parserShopifyAnthropcJemma.devRecurse CenterThanks to Our Sponsor!Turn hours of debugging into just minutes! AppSignal is a performance monitoring and error tracking tool designed for Ruby, Elixir, Python, Node.js, Javascript, and soon, other frameworks. It offers six powerful features with one simple interface, providing developers with real-time insights into the performance and health of web applications. Keep your coding cool and error-free, one line at a time! Check them out! Subscribe to Maintainable on:Apple PodcastsOvercastSpotifyOr search "Maintainable" wherever you stream your podcasts.Keep up to date with the Maintainable Podcast by joining the newsletter.
Context-free grammars, non-deterministic finite automatons, left-to-right leftmost derivations... what even is all that?! Today we're talking about how Python parses your source code. We start gently with how this worked in the past. Come listen to Łukasz's high-level explanations and Pedantic Pablo's "well actuallys". # Timestamps (00:00:00) INTRO (00:01:35) You can still download Python 1.0! (00:02:19) The original tokenizer (00:03:10) What even is a tokenizer? (00:04:08) FUN FACTS ABOUT THE TOKENIZER (00:04:34) Circumflex (00:05:16) Python's invisible braces (00:08:29) Backticks in the syntax (00:11:00) Where are the comments stored? (00:12:27) GRAMMAR (00:13:37) What is a grammar? (00:16:25) The long-forgotten 'access' keyword (00:20:25) Making LL1 do things it wasn't meant to do (00:23:24) SURPRISE QUESTION 1: soft keywords (00:24:46) What's a context-free grammar? (00:26:51) A note about backslashes (00:29:33) The Dragon Book(s) (00:31:27) PARSING: What is it? (00:35:23) How to generate a parser? (00:39:00) LL Cool Parser (00:41:15) What if we used LR? (00:44:01) Let's have three tokenizers! (00:47:50) 2to3 and its legacy (00:52:38) Black and its blib2to3 (00:54:04) The pesky 'with' statement and the death of LL1 (01:00:05) PR OF THE WEEK: GH-113745 (01:05:41) SURPRISE QUESTION 2: Subclasses of SyntaxError (01:07:02) WHAT'S GOING ON IN CPYTHON? (01:09:16) Sam Gross nominated as a core dev (01:10:13) Free-threading progress (01:13:11) Faster CPython changes (01:17:29) ntpath.isreserved() (01:20:11) Pablo and the DWARF (01:22:02) OUTRO
This week Anna & Paul bring you the next installment in the Sierra Remake Series, this week they are comparing both versions of Leisure Suit Larry In The Land of the Lounge Lizards! It's EGA vs VGA, AGI vs SCI, Parser vs Point and Click! Join them as they take you through both versions of Larry's origin story, examining the differences in gameplay, story and experience and even bringing in a dash of Leisure Suit Larry Reloaded for good measure. They really went HARD on this one. Ya know. Really ah, really did it to completion. Really um... got intimate with the details. Explored every nook and cranny. Really bounced off each other. Had a, had a stimulating conversation. Really, they really come out on top of this one. Penis. Okay okay, enjoy, Mangia! Vote for The Phantom Fellows to be released on GOG! Wishlist our adventure game! The Phantom Fellows Come meet us at the upcoming Adventure Game Fan Fair 2024 Shek out our friends in the Adventure Game Hotspot Network ! Space Quest Historian's Why you should go to AdventureX if you're an adventure game fan Adventure Game Geek's Colossal Cave 2.0: The Enchanted Edition – Adventure Game Geek – Episode 103 OneShortEye's The WORST Robin Hood in Gaming (is also the best) (Feat. Anna as Marian & Paul as Will) Conversations with Curtis' A Conversation with Arin Hanson from Game Grumps! Tech Talk with Daniel Albu's A Conversation with Al Lowe (Leisure Suit Larry / Freddy Pharkas: Frontier Pharmacist / Sierra) Adventure Game Hotspot's The Best Point-and-Click Adventure Games of 2023 AGHN Content Creators Podcast Episode 3: AGHN Content Creators Podcast - Episode 3: Audio and Why It's Important to Your Ears (feat Anna & Paul!) AGHN Content Creators Podcast Episode 5: AGHN Content Creators Podcast - Episode 5: Stress and Expectations (feat Anna & Paul!) Say hi I guess! Twitter (Anna) - @CGGpodcast Twitter (Paul) - @PhantomFellows ThePhantomFellows.com Send us your words! E-mail: mail@classicgamersguild.com Become a Patreon to support the show? www.patreon.com/ClassicGamersGuild Join the group and talk about neat stuff! Facebook Page Facebook Group We're also on Instagram & YouTube "CGG Theme" and "A Minor Concussion" by The Volume Remote Intro greeting (usually) by (and thank you to) Hope Kodman VonStarnes And finally, I'm gonna have to go ahead and ask you- I am once again asking you, to wishlist my game. I'm workin real hard on it, full time, and I think you're gonna love it. BUT, I'm gonna need you to tap on this and then tap several more times, until it's wish listedOMG THANK YOU SO MUCH ThePhantomFellows.com The Phantom Fellows on Steam
I break down why Dockerfile frontends exist and how Docker's build engine "BuildKit" is giving us updated Dockerfile features.The TL;DR of this podcast is to add this to your Dockerfiles as the first line, always and forever.# syntax=docker/dockerfile:1It'll ensure your Dockerfile will have access to the latest v1.x features of the "Dockerfile frontend" feature of BuildKit.★Topics★My newsletter on Dockerfile frontends (including links and references)Creators & Guests Beth Fisher - Producer Bret Fisher - Host (00:00) - (00:36) - Understanding Docker Files (00:47) - The Evolution of Docker Files (01:05) - The Importance of Docker File Versions (02:20) - The Impact of Dockerfile Standards (03:41) - The Benefits of Using the Latest Dockerf ile Parser (04:16) - The Challenges of Docker Engine Versions (05:18) - The Advantages of Docker Front Ends (07:56) - The Role of OCI in Dockerfiles (10:18) - Exploring New Features in Docker File Front Ends (15:27) - Conclusion: The Future of Docker Files You can also support my free material by subscribing to my YouTube channel and my weekly newsletter at bret.news!Grab the best coupons for my Docker and Kubernetes courses.Join my cloud native DevOps community on Discord.Grab some merch at Bret's Loot BoxHomepage bretfisher.com
Have you thought of a way to improve the Python language? How do you share your idea with core developers and start a discussion in the Python community? Christopher Trudeau is back on the show this week, bringing another batch of PyCoder's Weekly articles and projects.
What makes Python an interpreter? Today we're talking about ceval.c, the wonders of frame evaluation, and how it changed over the years. # Timestamps (00:00:00) INTRO (00:00:59) BACK TO PYTHON 2.6 (00:02:53) Stack virtual machine (00:04:41) First encounter with opcodes (00:08:06) What even is frame evaluation? (00:12:51) Stack! Which stack? (00:15:46) PRESENT DAY (00:16:41) Computed gotos (00:21:22) PEP 523: JIT me, maybe (00:26:53) Let's generate the interpreter (00:29:08) The JIT is coming (00:33:13) Python function call inlining (00:37:23) Instrumentation: DTrace, PEP 669 (00:41:50) lltrace and pystats (00:44:02) Eval breaker (00:47:54) Signal handling (00:50:47) Recursion limits (00:54:27) String concatenation special case (00:58:24) WHAT'S GOING ON IN CPYTHON? (00:58:42) 3.12.0a2 (00:59:12) Critical section API adoption (00:59:34) PyOnceFlag (01:00:28) PyDict_GetItemRef() (01:03:36) PyList_Extend() and PyDict_Pop() (01:04:18) Parser: better error messages for non-matching elif/else (01:05:39) glob.translate() (01:07:22) TLS-PSK in the ssl module (01:08:35) IDLE debugger improvements (01:10:50) First micro-op in the Tier 2 interpreter (01:11:18) OUTRO
Questo episodio e' sponsorizzato da fiscozen, clicca qui per saperne di piu: https://www.fiscozen.it/invitoGITBAR50 Oggi siamo entusiasti di avere con noi Paolo Insogna, uno staff DX Engineer di NearForm, che ci guiderà attraverso un argomento affascinante: "Milo - La Riscrittura del Parser HTTP di Node.js". Node.js è uno dei framework JavaScript più utilizzati per lo sviluppo back-end, e il suo parser HTTP svolge un ruolo cruciale nell'elaborazione delle richieste e delle risposte HTTP. Paolo ci spiegherà come il progetto Milo, sviluppato da NearForm possa rendere piu' manibile parte dello stack http di nodejs.Siamo anche su youtube: https://www.youtube.com/watch?v=g6q2h8gvSVw## Il nuovo store di gitbar- https://www.spreadshirt.it/shop/design/videoterminalista+metalmeccanico+maglietta+uomo-D60dd75d8a30ff14b5e9bfbe1?sellable=5aaY1v4we3SeYEOlVXmx-6-7## Supportaci suhttps://www.gitbar.it/support## Dobbiamo ringraziare - Luca montagnoli
En esta entrevista hablamos de gastronomía y tenemos en Pecados Veniales a Christian Parser, encargado y mano derecha de Roger Chen, el artífice y propietario del Grupo Zen, que acaba de reinaugurar en Pozuelo su primer restaurante Zen Pozuelo. Un pedacito de China en la capital que nos deleita con esos exóticos aromas, sabores y matices de sudeste asiático. Ubicado en la localidad madrileña de Pozuelo de Alarcón, en Zen Pozuelo el tiempo parece fluir a otro ritmo, mientras nos embriagamos con la genuina esencia de la alta gastronómica china. Pecados Veniales con Ramón Biosca, Alfonso Escámez, Edson Elguer, Ricardo Ceratto, Ana Mateu, Agustín García, Gus Fernández, Ana Sastre y Lucía Serrano.
Parser is a software development and digital transformation business, founded by Ricardo and Hernan in 2017 and with clients and offices around the world. Parser offer their clients expertise in Digital Strategy & Transformation, Digital Portfolio Management and Product Development, which is primarily achieved by placing Parser teams within their client's organisation.As CEO, Ricardo sets and drives Parser's organisational vision. Before Parser, Ricardo was responsible for building large technology teams, and developed products for the likes of Google, Santander, Ford & SonyAs Chief Growth Officer, Hernán is responsible for Parser's evolution and expansion. He has spent his career helping organisations such as JP Morgan, Disney and Deloitte to design, lead and launch their digital portfolios.In this episode we hear about how Parser approach the challenge of delivering teams into other teams, how even in a technology company the challenges are usually related to people, and how stable teams aren't always the best way to deliver innovation.Linkedin: https://www.linkedin.com/in/moral/Linkedin: https://www.linkedin.com/in/hernan-griboff-9857411b/Website: https://parserdigital.com/Thanks for listening!Music by Tom Farrington
Rahul Kulhari, Head - of Data Science at EDGE, talks about EDGE's data science capabilities & how we use them to solve the talent needs of our marquee clients. Here he talks about EDGE Resume Parser, which has helped organizations hire the best talent in the market by extracting relevant information about a candidate, their skills, experience etc. The parser utilises & takes the benefit of a detailed resume to better quantify and categorize the skills into the primaries and secondary skills, which helps understand a candidate better. EDGE Resume Parser has outperformed the competition by 15% in accuracy & effectiveness, making it one of the industry's best HR tools. Reach out to us at info@getedge.ai to explore how you could augment your Talent Supply Chain outcomes. Subscribe, Share and Like https://www.youtube.com/channel/UCrceycnUns21KLXYubEZuTA Like our Facebook page: https://www.facebook.com/edgenetworkspvtltd Follow us on LinkedIn https://www.linkedin.com/company/getedge Follow us on Twitter https://twitter.com/getedge_ai
so the first hour of this is mostly DJz being old and struggling to make google drive work. Sorry it's a painful listen, but the little bits about the battle log parser and what it can do and what it shows you is awesome. Then the second segment STARTED okay, but DJ got in his headspace... This was not his finest work, but here it is anyway. Plz hold the tomatoes for the end. Visit us online at www.UltimatDJzPlayz.com for more info!!
1 Jahr Engineering Kiosk: Ein Wrap-up mit Learnings, Statistiken und Pläne für 2023Dieser Podcast hat ein ganzes Jahr voll gemacht. Dies ist für uns ein Grund mal etwas zurück zu schauen und in dieser etwas anderen Episode ein paar Hintergrundinformationen mit euch zu teilen. Was waren eigentlich die Ziele und Motivation hinter dem Podcast? Wie sehen die Statistiken aus? Wie viele Leute hören uns? Was für Learnings haben Andy und Wolfgang gemacht? Wie viel Aufwand steckt im Podcast? Und viel wichtiger: Was steht für das kommende Jahr, 2023, auf dem Plan?All das in dieser Episode sowie ein mögliches Community-Treffen in Belgien -> https://engineeringkiosk.dev/fosdem2023Bonus: 3 Flachwitze und wo die größte Orgel Europas stehtFeedback (gerne auch als Voice Message)Email: stehtisch@engineeringkiosk.devMastodon: https://podcasts.social/@engkioskTwitter: https://twitter.com/EngKioskWhatsApp +49 15678 136776Gerne behandeln wir auch euer Audio Feedback in einer der nächsten Episoden, einfach Audiodatei per Email oder WhatsApp Voice Message an +49 15678 136776LinksÖsterreich für die Deutschen das sympathischste Nachbarland: https://www.derstandard.at/story/2000142254262/oesterreich-fuer-die-deutschen-das-sympathischste-nachbarland Wien ist die lebenswerteste Stadt der Welt: https://www.tagesschau.de/ausland/europa/wien-lebenswerteste-stadt-101.html Wien ist die unfreundlichste Stadt der Welt: https://www.derstandard.at/story/2000141285183/expat-city-ranking-2022-wien-unfreundlichste-stadt-weltweit Engineering Kiosk Episode #01 Side Projects - Fluch oder Segen für die Karriere?: https://engineeringkiosk.dev/podcast/episode/01-side-projects-fluch-oder-segen-f%C3%BCr-die-karriere/Deutschsprachige Tech Podcasts: https://engineeringkiosk.dev/deutsche-tech-podcasts/Web Engineering Meetup Düsseldorf: https://www.meetup.com/de-DE/Web-Engineering-Duesseldorf/Engineering Kiosk #46 Welches Problem löst Docker?: https://engineeringkiosk.dev/podcast/episode/46-welches-problem-l%C3%B6st-docker/Podcast "Einschlafen mit Wikipedia": https://einschlafen.podigee.io/Engineering Kiosk #47 Wer Visionen hat, soll zum Arzt!?: https://engineeringkiosk.dev/podcast/episode/47-wer-visionen-hat-soll-zum-arzt/Engineering Kiosk #42 Lexer, Parser und Open Source in Counterstrike: https://engineeringkiosk.dev/podcast/episode/42-lexer-parser-und-open-source-in-counterstrike/Engineering Kiosk #28 O(1), O(log n), O(n^2) - Ist die Komplexität von Algorithmen im Entwickler-Alltag relevant?: https://engineeringkiosk.dev/podcast/episode/28-o1-olog-n-on2-ist-die-komplexit%C3%A4t-von-algorithmen-im-entwickler-alltag-relevant/Engineering Kiosk #41 SQL Injections - Ein unterschätztes Risiko: https://engineeringkiosk.dev/podcast/episode/41-sql-injections-ein-untersch%C3%A4tztes-risiko/Open Podcast - An open platform for podcast analytics: https://openpodcast.dev/FFmpeg - A complete, cross-platform solution to record, convert and stream audio and video: https://ffmpeg.org/FOSDEM 2023: https://fosdem.org/2023/Engineering Kiosk Community Treffen bei der Fosdem 2023: https://engineeringkiosk.dev/fosdem2023Sprungmarken(00:00:00) Intro(00:00:37) 2022er Engineering Kiosk Wrap-Up und Flachwitze(00:03:41) Was waren die Ziele und Motivation hinter dem Engineering Kiosk?(00:10:32) Statistiken vom Engineering Kiosk-Podcast(00:15:28) Learnings und Lieblings-Episoden(00:23:42) Was haben wir für 2023 geplant?(00:27:15) Community + FOSDEM 2023(00:30:02) Ein dickes DankeHostsWolfgang Gassler (https://mastodon.social/@woolf)Andy Grunwald (https://twitter.com/andygrunwald)Feedback (gerne auch als Voice Message)Email: stehtisch@engineeringkiosk.devMastodon: https://podcasts.social/@engkioskTwitter: https://twitter.com/EngKioskWhatsApp +49 15678 136776
Watch on YouTube About the show Sponsored by Microsoft for Startups Founders Hub. Connect with the hosts Michael: @mkennedy@fosstodon.org Brian: @brianokken@fosstodon.org Michael #1: Jupyter Server 2.0 is released! Jupyter Server provides the core web server that powers JupyterLab and Jupyter Notebook. New Identity API: As Jupyter continues to innovate its real-time collaboration experience, identity is an important component. New Authorization API: Enabling collaboration on a notebook shouldn't mean “allow everyone with access to my Jupyter Server to edit my notebooks”. What if I want to share my notebook with e.g. a subset of my teammates? New Event System API: jupyter_events—a package that provides a JSON-schema-based event-driven system to Jupyter Server and server extensions. Terminals Service is now a Server Extension: Jupyter Server now ships the “Terminals Service” as an extension (installed and enabled by default) rather than a core Jupyter Service. pytest-jupyter: A pytest plugin for Jupyter Brian #2: Converting to pyproject.toml Last week, episode 314, we talked about “Tools for rewriting Python code” and I mentioned a desire to convert setup.py/setup.cfg to pyproject.toml Several of you, including Christian Clauss and Brian Skinn, let me know about a few tools to help in that area. Thank you. ini2toml - Automatically translates .ini/.cfg files into TOML “… can also be used to convert any compatible .ini/.cfg file to TOML.” “ini2toml comes in two flavours: “lite” and “full”. The “lite” flavour will create a TOML document that does not contain any of the comments from the original .ini/.cfg file. On the other hand, the “full” flavour will make an extra effort to translate these comments into a TOML-equivalent (please notice sometimes this translation is not perfect, so it is always good to check the TOML document afterwards).” pyproject-fmt - Apply a consistent format to pyproject.toml files Having a consistent ordering and such is actually quite nice. I agreed with most changes when I tried it, except one change. The faulty change: it modified the name of my project. Not cool. pytest plugins are traditionally named pytest-something. the tool replaced the - with _. Wrong. So, be careful with adding this to your tool chain if you have intentional dashes in the name. Otherwise, and still, cool project. validate-pyproject - Automated checks on pyproject.toml powered by JSON Schema definitions It's a bit terse with errors, but still useful. $ validate-pyproject pyproject.toml Invalid file: pyproject.toml [ERROR] `project.authors[{data__authors_x}]` must be object $ validate-pyproject pyproject.toml Invalid file: pyproject.toml [ERROR] Invalid value (at line 3, column 12) I'd probably add tox Don't forget to build and test your project after making changes to pyproject.toml You'll catch things like missing dependencies that the other tools will miss. Michael #3: aws-lambda-powertools-python Via Mark Pender A suite of utilities for AWS Lambda Functions that makes distributed tracing, structured logging, custom metrics, idempotency, and many leading practices easier Looks kinda cool if you prefer to work almost entirely in python and avoid using any 3rd party tools like Terraform etc to manage the support functions of deploying, monitoring, debugging lambda functions - Tracing: Decorators and utilities to trace Lambda function handlers, and both synchronous and asynchronous functions Logging - Structured logging made easier, and decorator to enrich structured logging with key Lambda context details Metrics - Custom Metrics created asynchronously via CloudWatch Embedded Metric Format (EMF) Event handler: AppSync - AWS AppSync event handler for Lambda Direct Resolver and Amplify GraphQL Transformer function Event handler: API Gateway and ALB - Amazon API Gateway REST/HTTP API and ALB event handler for Lambda functions invoked using Proxy integration Bring your own middleware - Decorator factory to create your own middleware to run logic before, and after each Lambda invocation Parameters utility - Retrieve and cache parameter values from Parameter Store, Secrets Manager, or DynamoDB Batch processing - Handle partial failures for AWS SQS batch processing Typing - Static typing classes to speedup development in your IDE Validation - JSON Schema validator for inbound events and responses Event source data classes - Data classes describing the schema of common Lambda event triggers Parser - Data parsing and deep validation using Pydantic Idempotency - Convert your Lambda functions into idempotent operations which are safe to retry Feature Flags - A simple rule engine to evaluate when one or multiple features should be enabled depending on the input Streaming - Streams datasets larger than the available memory as streaming data. Brian #4: How to create a self updating GitHub Readme Bob Belderbos Bob's GitHub profile is nice Includes latest Pybites articles, latest Python tips, and even latest Fosstodon toots And he includes a link to an article on how he did this. A Python script that pulls together all of the content, build-readme.py and fills in a TEMPLATE.md markdown file. It gets called through a GitHub action workflow, update.yml and automatically commits changes, currently daily at 8:45 This happens every day, and it looks like there are only commits if Note: We covered Simon Willison's notes on self updating README on episode 192 in 2020 Extras Brian: GitHub can check your repos for leaked secrets. Julia Evans has released a new zine, The Pocket Guide to Debugging Python Easter Eggs Includes this fun one from 2009 from Barry Warsaw and Brett Cannon >>> from __future__ import barry_as_FLUFL >>> 1 2 True >>> 1 != 2 File "[HTML_REMOVED]", line 1 1 != 2 ^ SyntaxError: invalid syntax Crontab Guru Michael: Canary Email AI 3.11 delivers First chance to try “iPad as the sole travel device.” Here's a report. Follow up from 306 and 309 discussions. Maps be free New laptop design Joke: What are clouds made of?
Kevin Newton works at Shopify. He is specifically assigned to the Ruby and Rails Infrastructure Team. He returns to the show to talk about building Parsers in Ruby since he is working full-time on a new Ruby parser called "Prettier Ruby Plugin”. Prettier works with the majority of editors and support different languages. He shares his journey on how he was able to create it. He also talks about "exreg", which is a Ruby regular expression engine that he created. About this Episode All about Parser How Parser applies to Ruby Advantages of using Parser Ways to write Parsers All about exreg Sponsors AppSignal Developer Book Club starting with Clean Architecture by Robert C. Martin Become a Top 1% Dev with a Top End Devs Membership Links prettier/plugin-ruby GitHub - ruby-syntax-tree/syntax_tree: A fast Ruby parser and formatter GitHub - kddnewton/exreg: A Ruby regular expression engine Twitter: @kddnewton GitHub: kddnewton Kevin Newton Picks Dave - Blackmagic Design Dave - LEGO® Bonsai Tree | Official LEGO® Shop US Dave - WebAssembly Kevin - Just for Fun. No, Really. Luke - Order Starlink Luke - The Grug Brained Developer Luke - Emmet — the essential toolkit for web-developers Luke - AArch64 Bitmask Immediates Valentino - Design Kit
Kevin Newton works at Shopify. He is specifically assigned to the Ruby and Rails Infrastructure Team. He returns to the show to talk about building Parsers in Ruby since he is working full-time on a new Ruby parser called "Prettier Ruby Plugin”. Prettier works with the majority of editors and support different languages. He shares his journey on how he was able to create it. He also talks about "exreg", which is a Ruby regular expression engine that he created. About this Episode All about Parser How Parser applies to Ruby Advantages of using Parser Ways to write Parsers All about exreg Sponsors AppSignal Developer Book Club starting with Clean Architecture by Robert C. Martin Become a Top 1% Dev with a Top End Devs Membership Links prettier/plugin-ruby GitHub - ruby-syntax-tree/syntax_tree: A fast Ruby parser and formatter GitHub - kddnewton/exreg: A Ruby regular expression engine Twitter: @kddnewton GitHub: kddnewton Kevin Newton Picks Dave - Blackmagic Design Dave - LEGO® Bonsai Tree | Official LEGO® Shop US Dave - WebAssembly Kevin - Just for Fun. No, Really. Luke - Order Starlink Luke - The Grug Brained Developer Luke - Emmet — the essential toolkit for web-developers Luke - AArch64 Bitmask Immediates Valentino - Design Kit
[00:01:52] Jason and Andrew catch up on what they've been working on. Apparently, they've both been working on making Dynamic Open Graph Images. Andrew used Vercel and Jason took a different route.[00:05:11] Kevin details the recent news about rewriting Ruby Parser.[00:07:50] If you're new to Ruby or not familiar with Parser, Kevin explains what a Parser is how it's used in Ruby. [00:09:54] We find out how SyntaxTree works with what Kevin's doing now on Ruby Parser.[00:13:00] If you haven't heard of mruby, PicoRuby, Natalie, Rutie, Artichoke, and Sorbet, Kevin explains them.[00:13:42] With each of the implementations, Jason wonders if they have to bring CRuby with it or if they're having to write their own Parsers each time, and Kevin explains there's different projects that have taken different approaches and what JRuby did.[00:15:38] Kevin tells us the three goals he's got going forward with a new Ruby Parser he's working on. [00:19:28] Jason wonders if the JRuby team or other people that have been implementing their own flavors of Ruby, hinted that they would use this new Parser.[00:22:42] Kevin explains what SyntaxTree does right now and the most valuable thing it provides. [00:25:51] With the new Parser, we find out if Kevin has to make any changes to SyntaxTree to support reading the results.[00:29:33] We learn if Meta programming make this type of work difficult and Kevin explains how his tooling will make it much easier to deal with syntax errors. [00:34:00] Jason opens up and tells us he's never felt like a real programmer, and Kevin brings it all out in the open telling Jason that he is a real programmer and explains how everyone is just in a different domain.[00:36:40] Kevin announces he's working with Prettier Ruby, Prettier 3 is almost ready, and he explains why there's not a lot of reasons to use Prettier Ruby anymore.[00:42:51] Kevin announces that Stripe, GitHub, and Shopify are putting a lot of money into Ruby, and he explains how huge his team is at Shopify working on so many parts of the Ruby ecosystem and working on what the future of Rails could look like. Also, someone on his team created a reimagined version of unicorn, called pitchfork.[00:48:58] Kevin explains thinking about programming as a skill and not a job.[00:49:39] Find out where you can follow Kevin on the web. Panelists:Jason CharnesAndrew MasonGuest:Kevin NewtonSponsor:HoneybadgerLinks:Jason Charnes TwitterChris Oliver TwitterAndrew Mason TwitterKevin Newton TwitterKevin Newton GitHubKevin Newton WebsiteSyntaxTree GitHubVercelYacc: Yet Another Compiler-CompilermrubyPicoRubyNatalie RutieArtichokeSorbetJRubyTruffleRubySyntaxTree-node.rbpitchforkRuby For All PodcastRuby Radar NewsletterRuby Radar Twitter
Was haben Lexer, Parser und Counter-Strike gemeinsam? Richtig! Eine schöne Open Source Story.Computerspiele sind für viele Software-Entwicklerinnen und -Entwickler der Einstieg. Andere wiederum steigen über den klassischen Bildungsweg eines Informatik-Studiums in die Softwareentwicklung ein. Dabei wird oft viel Theorie wie Lexer, Parser und Compilerbau durchgenommen. Doch was haben Computerspiele mit Lexer und Parser gemeinsam?Andy erzählt eine Story, wie er vor Jahren sich mit Lexer und Parser anhand einer Counter-Strike-Konfigurationsdatei vertraut gemacht hat. Eigentlich nur, um eine datengetriebene Spielanalyse zu betreiben. Raus kam ein Lexer und Parser für das Valve Data Format (VDF).Eine Geschichte voller Over-Engineering, Open Source, Spaß und einem Job-Angebot.Bonus: Wie Wolfgang nur ans cheaten denkt, was autoexec mit Maustreibern zu tun hat und was Landmaschinen auf YouTube mit Rabbitholes zu tun haben.Feedback (gerne auch als Voice Message)Email: stehtisch@engineeringkiosk.devTwitter: https://twitter.com/EngKioskWhatsApp +49 15678 136776Gerne behandeln wir auch euer Audio Feedback in einer der nächsten Episoden, einfach Audiodatei per Email oder WhatsApp Voice Message an +49 15678 136776LinksReturn to Monkey Island: https://returntomonkeyisland.com/Crash Bandicoot: https://www.crashbandicoot.com/deDreamHack LAN-Party: https://de.wikipedia.org/wiki/DreamHackCounter-Strike: Global Offensive: https://store.steampowered.com/app/730/CounterStrike_Global_Offensive/LANSuite auf GitHub: https://github.com/lansuite/lansuiteEpisode #41 SQL-Injections https://engineeringkiosk.dev/episodes/41Tactical Ops: Assault on Terror: https://de.wikipedia.org/wiki/Tactical_Ops:_Assault_on_TerrorESL: https://esl.com/Source (Spiel-Engine): https://de.wikipedia.org/wiki/Source_(Spiel-Engine)Philips HUE: https://www.philips-hue.com/de-deValve Data Format (VDF) - Format: https://developer.valvesoftware.com/wiki/KeyValuesValve Data Format (VDF) - Sample Configuration File: https://developer.valvesoftware.com/wiki/Counter-Strike:_Global_Offensive_Game_State_Integration#Sample_Configuration_FileCounter-Strike: Global Offensive Game State Integration: https://developer.valvesoftware.com/wiki/Counter-Strike:_Global_Offensive_Game_State_IntegrationA Lexer and Parser for Valves Data Format (known as vdf) written in Go: https://github.com/andygrunwald/vdfEngineering Kiosk #38 Monitoring, Metriken, Tracing, Alerting, Observability: https://engineeringkiosk.dev/podcast/episode/38-monitoring-metriken-tracing-alerting-observability/Drachenbuch (Compiler Bau): https://de.wikipedia.org/wiki/DrachenbuchHandwritten Parsers & Lexers in Go: https://blog.gopheracademy.com/advent-2014/parsers-lexers/InfluxDB: https://www.influxdata.com/Influx Query Language: https://docs.influxdata.com/influxdb/v1.8/query_language/Flow-Status: https://de.wikipedia.org/wiki/Flow_(Psychologie)ANTLR (ANother Tool for Language Recognition): https://www.antlr.org/Erweiterte Backus-Naur-Form: https://de.wikipedia.org/wiki/Erweiterte_Backus-Naur-FormFOSDEM 2023 - Konferenz: https://fosdem.org/Faceit: https://www.faceit.com/deEngineering Kiosk #03 Over-Engineering, das Werkzeug des Teufels?: https://engineeringkiosk.dev/podcast/episode/03-over-engineering-das-werkzeug-des-teufels/Engineering Kiosk #23 Schaltest du noch oder automatisiert du schon: Home Automation: https://engineeringkiosk.dev/podcast/episode/23-schaltest-du-noch-oder-automatisiert-du-schon-home-automation/Open Broadcaster Software (OBS): https://obsproject.com/deAnwendungsfall "Home Assistant CS:GO game state integration": https://www.youtube.com/watch?v=kEM54QmAMlwAnwendungsfall "CS:GO C4 Hue Lights (Game State Integration)": https://www.youtube.com/watch?v=QBdI54MHB-kAnwendungsfall "CS:GO Game State Integration Broadcast HUD": https://www.youtube.com/watch?v=TQPU03yLSoAMonkey Island Sound am Ende https://www.youtube.com/watch?v=qUMKy2Jk3Oo Sprungmarken(00:00:00) Intro(00:00:42) Wolfgang und Computer-Spielen, LAN-Parties, 10 Mbit-Netzwerke und End-Terminator(00:08:57) Der Hintergrund: Wie Andy zu Counter Strike kam und was das mit programmieren zu tun hat(00:14:25) Counter Strike Game State Integration: Webhooks vom Spiel(00:19:52) Valve Data Format (VDF), die Source Game Engine(00:21:29) Daten-getriebene Spiel-Strategien und ein automatischer Installer für eine Webhook-Adresse(00:25:28) Ein Lexer und Parser für das Valve Data Format (VDF)(00:30:03) Was ist ein Lexer? Was ist ein Token?(00:35:14) Was ist ein Parser?(00:39:18) War es notwendig, einen Lexer und Parser zu schreiben? Und die Testphase des Installers(00:41:47) Wird die Lexer- und Parser Library von jemandem verwendet? Und ein Job-Angebot(00:46:31) Anwendungsfälle: Spiele-Analysen, Zimmerlicht auf Basis der Bombe ändern, Streaming-Overlays(00:49:43) Eine schöne Open Source Story(00:51:46) OutroHostsWolfgang Gassler (https://twitter.com/schafele)Andy Grunwald (https://twitter.com/andygrunwald)Feedback (gerne auch als Voice Message)Email: stehtisch@engineeringkiosk.devTwitter: https://twitter.com/EngKioskWhatsApp +49 15678 136776
1982 schickte sich das australische Entwicklerstudio Beam Software an "das beste Adventure aller Zeiten" zu erschaffen. Die beiden jungen Studenten Veronika Megler und Philip Mitchell werkelten 18 Monate an einem Textadventure zu J.R.R. Tolkien's "The Hobbit". Herauskam ein Megaerfolg, der das Genre um einige brandneue und spannende Features erweiterte: Einen fortschrittlichen Parser namens "Inglish" und NPCs mit Eigenleben, was für zahlreiche Überraschungen, aber auch Frustmomente sorgen konnte. Daniel und Hardy haben sich ein Lembas Brot in den Rucksack eingepackt und nehmen euch mit auf eine Reise in die Geschichte...hin und wieder zurück ;) Oh! Falls ihr einen entsprechenden Podcatcher verwendet: Ab dieser Folge verwenden wir KAPITELMARKEN. Sprecher: Hardy Heßdörfer & Daniel Cloutier Lust direkt über diese Folge zu diskutieren? Schau doch mal im Nerdwelten Discord Kanal oder auf unserer Facebook Seite vorbei! Auf Twitter sind wir ebenfalls zu finden und freuen uns über dein Feedback! Auch für Unterstützung sind wir sehr dankbar, mehr Infos gibt es HIER Nerdwelten Musik: Ben Dibbert (Nordischssound) Introstimme: Claudia Urbschat-Mingues Schnitt: Hardy Heßdörfer Produktion: Hardy Heßdörfer
Michael Davis explains Slipstream, a Phoenix channels websocket client library that enables Elixir applications to become a client of a Phoenix channel on another server. Out of this work, an underlying websocket library was created built on mint, which has now officially become part of the mint project. We talk about other libraries in the same space and why Slipstream was created. Michael was also involved in the recent Tree-Sitter Elixir work that Github celebrated and he shares some insight into that work as well! Show Notes online - http://podcast.thinkingelixir.com/99 (http://podcast.thinkingelixir.com/99) Elixir Community News - https://twitter.com/remote_ruby/status/1522546728922226691 (https://twitter.com/remote_ruby/status/1522546728922226691) – José Valim was a guest on the Remote Ruby podcast talking about his history as a Rails core contributor and the creation of Elixir. - https://share.transistor.fm/s/7dc8e2e3 (https://share.transistor.fm/s/7dc8e2e3) – Remote Ruby podcast - https://github.com/kipcole9/image (https://github.com/kipcole9/image) – New image-processing library called Image that leverages libvips though NIF bindings. - https://github.com/libvips/libvips (https://github.com/libvips/libvips) - https://github.com/lucasvegi/Elixir-Code-Smells (https://github.com/lucasvegi/Elixir-Code-Smells) – Elixir Code Smells project - https://github.com/lucasvegi/Elixir-Code-Smells/blob/main/code_smells.livemd (https://github.com/lucasvegi/Elixir-Code-Smells/blob/main/code_smells.livemd) – Elixir Code Smells Livebook notebook - https://litestream.io/ (https://litestream.io/) – Litestream project for SQLite replication - https://fly.io/blog/all-in-on-sqlite-litestream/ (https://fly.io/blog/all-in-on-sqlite-litestream/) – Ben Johnson joined Fly.io and will continue work on Litestream - David's wife had a baby girl! Congrats! Now has 2 kids. - Next episode is 100 and will be the final visit José Valim in our series. Also covers future development. Do you have some Elixir news to share? Tell us at @ThinkingElixir (https://twitter.com/ThinkingElixir) or email at show@thinkingelixir.com (mailto:show@thinkingelixir.com) Discussion Resources - https://github.com/NFIBrokerage/slipstream (https://github.com/NFIBrokerage/slipstream) – Slipstream Phoenix channels websocket client library - https://github.com/NFIBrokerage/mintwebsocket (https://github.com/NFIBrokerage/mint_web_socket) – Separate library that uses Mint and supports websockets. - https://github.com/NFIBrokerage/slipstream/blob/main/guides/implementation.md (https://github.com/NFIBrokerage/slipstream/blob/main/guides/implementation.md) - https://github.com/Azolo/websockex (https://github.com/Azolo/websockex) – Pure Elixir websockets implemented as a special OTP process - https://github.com/ninenines/gun (https://github.com/ninenines/gun) – Popular Erlang HTTP/WebSocket client library from the same group of dependencies as cowboy, the underlying HTTP/WebSocket server for Phoenix - https://github.com/jeremyong/websocket_client (https://github.com/jeremyong/websocket_client) – WebSocket client that underlies phoneixclient and phoenixgensocketclient. Appears to be inactive and it no longer compiles on OTP25. - https://hex.pm/packages/phoenixchannelclient (https://hex.pm/packages/phoenix_channel_client) – Retired library by Justin Schneck - https://hex.pm/packages/phoenix_client (https://hex.pm/packages/phoenix_client) – by Justin Schneck “Elixir Phoenix Client for Channels” - https://github.com/J0/phoenixgensocket_client (https://github.com/J0/phoenix_gen_socket_client) – Another Phoenix Channel client - https://elixirforum.com/t/slipstream-a-slick-elixir-websocket-client-for-phoenix-channels/37456 (https://elixirforum.com/t/slipstream-a-slick-elixir-websocket-client-for-phoenix-channels/37456) – ElixirForum post on Slipstream - https://github.com/nerves-hub/nerveshublink (https://github.com/nerves-hub/nerves_hub_link) – A more prominent dependent of Slipstream. Slipstream is used as the default communication system for embedded devices to talk to the nerves hub (which provides firmware updates) - https://twitter.com/whatyouhide/status/1521381183229210624 (https://twitter.com/whatyouhide/status/1521381183229210624) – mintwebsocket was just moved under the elixir-mint organization - https://twitter.com/josevalim/status/1521390714025758720 (https://twitter.com/josevalim/status/1521390714025758720) – Jose Valim recently credited NFIBrokerage for bringing even more contributions to the Elixir community - https://helix-editor.com/ (https://helix-editor.com/) - https://clojure.org/ (https://clojure.org/) - https://github.com/NFIBrokerage (https://github.com/NFIBrokerage) - https://www.eventstore.com/eventstoredb (https://www.eventstore.com/eventstoredb) - https://github.com/elixir-mint/mint (https://github.com/elixir-mint/mint) - https://github.com/elixir-lang/gen_stage (https://github.com/elixir-lang/gen_stage) - https://grpc.io/ (https://grpc.io/) - https://github.com/tree-sitter/tree-sitter (https://github.com/tree-sitter/tree-sitter) - https://github.com/elixir-lang/tree-sitter-elixir (https://github.com/elixir-lang/tree-sitter-elixir) - https://elixir-lang.org/tree-sitter-elixir/ (https://elixir-lang.org/tree-sitter-elixir/) - https://github.com/jonatanklosko (https://github.com/jonatanklosko) – Jonatan Kłosko did the majority of the work on the Elixir Tree-Sitter library - https://github.com/gleam-lang/tree-sitter-gleam/ (https://github.com/gleam-lang/tree-sitter-gleam/) - https://github.com/ninenines/gun (https://github.com/ninenines/gun) - https://github.com/Azolo/websockex (https://github.com/Azolo/websockex) - https://hex.pm/packages/phoenix_client (https://hex.pm/packages/phoenix_client) - https://github.com/nerves-hub/nerveshublink (https://github.com/nerves-hub/nerves_hub_link) - https://en.wikipedia.org/wiki/HTTP/2 (https://en.wikipedia.org/wiki/HTTP/2) - https://github.com/NFIBrokerage/spear (https://github.com/NFIBrokerage/spear) Guest Information - https://github.com/the-mikedavis (https://github.com/the-mikedavis) – on Github - https://github.com/NFIBrokerage (https://github.com/NFIBrokerage) – Work Github organization Find us online - Message the show - @ThinkingElixir (https://twitter.com/ThinkingElixir) - Email the show - show@thinkingelixir.com (mailto:show@thinkingelixir.com) - Mark Ericksen - @brainlid (https://twitter.com/brainlid) - David Bernheisel - @bernheisel (https://twitter.com/bernheisel) - Cade Ward - @cadebward (https://twitter.com/cadebward)
Every once in awhile we release a new episode free for all to see, and today is that day! Please enjoy this episode, and if you find this interesting you may want to consider a subscription https://www.pointfree.co/pricing. --- We conclude our tour of swift-parsing with a look at how URL routers defined as parser-printers can be automatically transformed into fully-fledged API clients, which we will drop into an iOS application and immediately use.
當想要拍家庭或婚禮攝影時,你會考慮什麼?來自台灣旅居英國19年的Jenni是個風格顯明的攝影師,搜尋「英國生活幸福的瞬間's 全球旅拍」,映入眼簾的是一張張富有情感與電影氣氛的素人照片,緣分起於在倫敦攝政街上那份悸動,憑藉著希望記錄下那感動瞬間的執著,Jenni自學人物攝影,在全球為客戶捕捉人生精彩片刻,在英國曾擔任英國皇室慈善晚宴攝影師、倫敦Lonchamp x Vogue晚會攝影、英國美妝奧斯卡頒獎典禮攝影等。 從3/19到6/19,如果身在台灣的你想觀賞他最新的公開作品,立刻導航台南安平樹屋! 《拾光安平》- 簡汝羚(Jenni)安平樹屋攝影特展: https://culture.tainan.gov.tw/active/Details?Parser=99,3,31,,,,14480 --------------------------------------------- 搜尋Facebook / Instagram:Excuse英國腔! 大英風情古董傢俱:https://englishantiques2012.com
Every once in awhile we release a new episode free for all to see, and today is that day! Please enjoy this episode, and if you find this interesting you may want to consider a subscription https://www.pointfree.co/pricing. --- Now that we're familiar with swift-parsing's URL router, let's take a look at Swift's most popular web framework, Vapor. We will rebuild our site router using Vapor's built-in router, and then we'll use our own companion library to power our Vapor application with a parser-printer, instead.
In this episode Marie shares information on how Google's Hummingbird algorithm dramatically changed search to rely less on PageRank as their algorithms learned how to make use of entities. Understanding Google's use of entities in their algorithms can help us improve E-A-T. More importantly, understanding how Google uses AI to extract entities from content can help us write and optimize content. Marie also discusses the third release of the product reviews update, sharing which types of sites saw changes and how Google could be algorithmically evaluating product review sites. Links mentioned in this episode: Product reviews update https://blog.google/products/search/more-helpful-product-reviews/ Interview with Jason Barnard re entity use and John Lennon's confidence score in the knowledge graph https://fajela.com/seobox/orm/ https://appft1.uspto.gov/netacgi/nph-Parser?Sect1=PTO2&Sect2=HITOFF&u=%2Fnetahtml%2FPTO%2Fsearch-adv.html&r=1&f=G&l=50&d=PG01&p=1&S1=20050055341&OS=20050055341&RS=20050055341 FAQ:All About the New Hummingbird Algorithm: https://searchengineland.com/google-hummingbird-172816 Google's Hummingbird Takes Flight: SEOs Give Insight On Google's New Algorithm: https://searchengineland.com/hummingbird-has-the-industry-flapping-its-wings-in-excitement-reactions-from-seo-experts-on-googles-new-algorithm-173030 This episode corresponds with newsletter episode 228: https://mariehaynes.com/newsletter/episode-228-light-version/ Past episodes https://Mariehaynes.com/seo-newsletter/seo-podcast Contact MHC https://Mariehaynes.com/contact Book on Unnatural Links and Manual Action Removal https://Mariehaynes.com/product/unnatural-links-book Quality Raters Book https://Mariehaynes.com/product/quality-raters-guidelines Submit a question for the next Q&A https://Mariehaynes.com/qa-with-mhc Subscribe to the newsletter https://Mariehaynes.com/newsletter
Diego Garaycochea, Chief Operating Officer at Parser, discusses how CX trends are evolving in financial services, moving from digital adoption to social commerce – and looking ahead to the rise of the metaverse. Diego also talks about the evolution of digital payments and lending models.
This week we continue our deep dive into cannabis - discussing how our bodies respond to the chemicals within. Learn about cannabis receptors and the different methods for administering cannabis. Sources: https://www.sciencedirect.com/science/article/abs/pii/S0014299904007423 https://pubmed.ncbi.nlm.nih.gov/35007072/ https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5075023/ https://www.frontiersin.org/articles/10.3389/fncel.2016.00294/full https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7324885/ https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2812702/ https://patft.uspto.gov/netacgi/nph-Parser?Sect1=PTO1&Sect2=HITOFF&d=PALL&p=1&u=%2Fnetahtml%2FPTO%2Fsrchnum.htm&r=1&f=G&l=50&s1=6630507.PN.&OS=PN/6630507&RS=PN/6630507 https://www.dea.gov/drug-information/drug-scheduling#:~:text=Schedule%20I%20drugs%2C%20substances%2C%20or **Disclaimer** While I make every effort to broadcast correct information, I am still learning. I welcome any comments, suggestions, or correction of errors. I take no money from drug or device companies. By listening to this podcast, you agree not to use this podcast as medical advice to treat any medical condition in either yourself or others. Consult your own physician for any medical issues that you may be having. This entire disclaimer also applies to any guests or contributors to the podcast or blog. Under no circumstances shall Chase Thornock, What Magnificence, any guests or contributors to the podcast or blog, or any employees, associates, or affiliates be responsible for damages arising from use of the podcast.
Rob and Jason are joined by Piotr Winter. They first talk about include guards vs pragma once, testing for constexpr and the preview of Catch v3. Then they talk to Piotr Winter about CTPG, the C++ Compile Time Parser Generator. News Include guards or #pragma once Test an expression for constexpr friendliness Catch v3 Preview 4 Links C++ Compile Time Parser Generator Peter Winter's Blog Sponsors Indicate the #cppcast hashtag and request your PVS-Studio one-month trial license here https://pvs-studio.com/try_free C++ tools evolution: static code analyzers: https://pvs-studio.com/0873
Добрый день уважаемые слушатели. Представляем новый выпуск подкаста RWpod. В этом выпуске: Ruby Ruby 3.0.3 Released Rails 7 supports tracking of belongs_to association Ruby 3.1 adds MatchData#match and MatchData#match_length Audit Logging in Rails Understanding Ruby Proc objects Reading the uncompressed GZIP file size in Ruby without decompression Kredis (Keyed Redis) - higher-level data structures built on Redis Cel::Ruby - pure Ruby implementation of Google Common Expression Language Lib-ruby-parser - a Ruby parser written in Rust Web Remix is a framework for building better websites using modern web standards and best practices Using WebAssembly (created in Rust) for Fast React Components Proposals.es - a website for keeping up to date with ECMAScript proposals Electron Fiddle - the easiest way to get started with Electron Elementary Grid - a tonegrid synth made with Elementary Audio and React Doom Nukem CSS - CSS 3D Shooter The Joy of Cryptography (book) RWpod Cafe 27 (04.12.2021) Сбор и голосование за темы новостей
Diesmal auch etwas ausführlicher auf meinem Blog: www.herrmann-hurtzig.de/057 Was ist CV Parsing? Welche Bedeutung hat CV Parsing? Wie kann ich meine Bewerbung für CV Parsing optimieren?
Desde EL AÑO 2003 AL 2018 se REGISTRA EL CORONACUENTO EN ESTADOS UNIDOS CONFIRMANDO EL BIOTERRORISMO LA CORRUPCION DE LA OMS Y CDC Y ORGANISMOS OFICIALES JUNTO A LOS GOBIERNOS Y AUTORIDADES MUNDIALES. INVESTIGA estas patentes que se pueden encontrar en el sitio oficial de la Oficina Estadounidense de Patentes. https://www.uspto.gov/Vaya a esta sección de su sitio web e ingrese los siguientes números de patente: https://patft.uspto.gov/netahtml/PTO/srchnum.htm Número de patente: 7279327 https: // patft.uspto.gov/netacgi/nph-Parser?Sect1=PTO1&Sect2=HITOFF&d=PALL&p=1&u=%2Fnetahtml%2FPTO%2Fsrchnum.htm&r=1&f=G&l=50&s1=7279327.PN279&327=PN732 Número de patente: 7220852 ; p = 1 & u =% 2Fnetahtml% 2FPTO% 2Fsrchnum.htm & r = 1 & f = G & l = 50 & s1 = 7220852.PN. & OS = PN / 7220852 & RS = PN / 7220852 ″> https://patft.uspto.gov/netacgi/nph-Parser ? Sect1 = PTO1 & Sect2 = HITOFF & d = PALL & p = 1 & u =% 2Fnetahtml% 2FPTO% 2Fsrchnum.htm & r = 1 & f = G & l = 50 & s1 = 7220852.PN. & OS = PN / 7220852 & RS = PN / 7220852 Número de patente: 7151163 https://patft.uspto.gov/netacgi/nph-Parser?Sect1=PTO1&Sect2=HITOFF&d=PALL&p=1& Número de patente: 9193780 https://patft.uspto.gov/netacgi/nph-Parser?Sect1=PTO1&Sect2=HITOFF&d=PALL&p=1&u=%2Fnetahtml%2FPTO%2Fsrchnum.htm&r=1&f=G&l=50&s1=919&OS = PN / 9193780 & RS = PN / 9193780
PHP Internals News: Episode 88: Pure Intersection Types London, UK Thursday, June 10th 2021, 09:16 BST In this episode of "PHP Internals News" I talk with George Peter Banyard (Website, Twitter, GitHub, GitLab) about the "Pure Intersection Types" RFC that he has proposed. The RSS feed for this podcast is https://derickrethans.nl/feed-phpinternalsnews.xml, you can download this episode's MP3 file, and it's available on Spotify and iTunes. There is a dedicated website: https://phpinternals.news Transcript Derick Rethans 0:14 Welcome to PHP internals news, a podcast dedicated to explaining the latest developments in the PHP language. This is Episode 88. Today I'm talking with George Peter Banyard about pure intersection types. George, could you please introduce yourself? George Peter Banyard 0:30 Hello, my name is George Peter Banyard. I work on PHP code development in my free time. And on the PHP Docs. Derick Rethans 0:36 This RFC is about intersection types. What are intersection types? George Peter Banyard 0:40 I think the easiest way to explain intersection types is to use something which we already have, which are union types. So union types tells you I want X or Y, whereas intersection types tell you that I want X and Y to be true at the same time. The easiest example I can come up with is a traversable that you want to be countable as well. So traversable and countable. Currently, you can do intersection types in very hacky ways. So you can either create a new interface which extends both traversable and countable, but then all the classes that you want to be using this fashion, you need to make them implement the interface, which might not be possible if you using a library or other things like that. The other very hacky way of doing it is using reference and typed properties. You assign two typed properties by reference, one being traversable, one being countable, and then your actual property, you type alias reference it, with both of these properties. And then my PHP will check: does the property respect type A those reference? If yes, move to the next one. It doesn't respect type B, which basically gives you intersection types. Derick Rethans 1:44 Yeah, I saw that in the RFC. And I was wondering like, well, people actually do that? George Peter Banyard 1:49 The only reason I know that is because of Nikita's slide. Derick Rethans 1:51 The thing is, if it is possible, people will do it, right. And that's how that works. George Peter Banyard 1:56 Yeah, most of the times. Derick Rethans 1:57 The RFC isn't actually called intersection types. It's called pure intersection types. What does the word pure do here? George Peter Banyard 2:05 So the word pure here is not very semantic. But it's more that you cannot mix union types and intersection types together. The reasons for it are mostly technical. One reason is how do you mix and match intersection types and union types? One way is to have like union types take precedence over intersection types, but some people don't like that and want to explicit it grouping all the time. So you need to do parentheses, A intersection B, close parentheses, pipe for the union, and then the other type. But I think the main reason is mostly the variance, like the variance checks for inheritance are already kind of complicated and kind of mind boggling. Derick Rethans 2:44 I'm sure we'll get into the variance rules in a moment. What is it actually what you're proposing to add here. What is the syntax, for example? George Peter Banyard 2:52 So the syntax is any class type with an ampersand, and any other class type gives you an intersection type, which is the usual way of doing and. Derick Rethans 3:01 When you say class types, do you also mean interfaces? George Peter Banyard 3:04 Yes, PHP has a concept of class types, which are mostly any class in any interface. There's also a weird exception where parent and self are considered class types, but those are not allowed. Derick Rethans 3:20 Okay, so it's just the classes that you've defined and the class that are part of the language but not a special keywords, self and parent and static, I suppose? George Peter Banyard 3:28 Yes, the reason for that is standard types are not allowed to be part of an intersection, because nothing can be an integer and a string at the same time. Now, there are some of the built in types, which can be kind of true. You could have a callable, which is a string, because callables can be arrays, or can be a closure. But that's like very weird and not very great. The other one is iterable. If when you expand that out, you get redundant types, which we can talk about later. And the final thing is parent, self, and static, just makes for some very weird design questions, in my opinion, like, if you ask for something to be an intersection with itself, you basically can only enforce conditions on subclasses. You have a class and you say: Oh, I want it to return self, but also be countable for some reason, but I'm not countable. So if you extend me, then you need to be countable, but I'm not. So it's very weird. parent has kind of the very same weird semantics where you can ask a parent, but it's like, if the base class doesn't support it, and you ask for a parent to be an intersection, then you basically need the child to implement the interface and then a child to return the first child. If you do that main question. Why? Because I don't see any good reasons to do it. And it just makes everything harder. Derick Rethans 4:40 You've only added for the sake of completeness instead of it being useful. Let's move on birds. You've mentioned which types are supported, which is class names and interface names. You already hinted a little bit at redundant types. What are redundant types? George Peter Banyard 4:56 Currently, PHP already does that with union types. If you repeat the type twice in a union, you'll get a compile error. This only affects compiled time known aliases. If you use a use statement, then PHP knows that you basically using the same type. However you use a runtime alias, then it can't detect that. Derick Rethans 5:13 A runtime alias, what's that? George Peter Banyard 5:15 So if you use the function class_alias. Derick Rethans 5:16 It's new to me! George Peter Banyard 5:18 it technically exists. It also doesn't guarantee basically that the type is minimal, because it can only see those was in its own file. For example, if you say I want A and B, but B is a child class of A, then the intersection basically resolves to only B. But you can only know that at runtime if classes are defined in different files. So the type isn't minimal. But if you do redundant types, basically, it's a easy way to check if you might be typing a bug. Derick Rethans 5:46 You try to do your best to warn people about that. But you never know for certain. George Peter Banyard 5:51 You never know for certain because PHP doesn't compile everything into like one big program like in check. Static analyser can help for that. Derick Rethans 5:59 Let's talk a little bit about technical aspects, because I recommend that implementing intersection types are quite different from implementing union types. What kind of hacks that you have to make in a parser and compiler for this? George Peter Banyard 6:11 Our parser has being very weird. The parsing syntax should be the same as union types. So I just copy pasted what Nikita did. I tried it. It worked for return types without an issue. It didn't work with argument types, because bison, which is the tool which generates our parser, was giving a shift reduce conflict, which basically tells: Oh, I got two possible states I can go in, and I don't know which branch I need to go, because the PHP parser only does one look ahead. Because it was conflicting, the ampersand, either for the intersection type or for to mark a reference. Normally, if the paster is more developed, or does more look ahead, it is not a conflict. And it shouldn't be. Ilia managed to came up with this ingenious idea, which is just redefine the ampersand token twice and have very complicated names, and just use them in different contexts. And bison just: now I have no issue. It is the same token, it is the same character. Now that you have two different tokens it manages to disambiguate, like it's shift produce. So that's a very weird. Derick Rethans 7:17 I'll have a look at what that actually does, because I'm curious now myself. Beyond the parser, I think the biggest and most complicated part of this is implementing the variance rules for these intersection types. Can you give a short summary of what a variance rules are, and potentially how you've actually implemented them? George Peter Banyard 7:38 Since PHP seven point four, return types and up covariant, and parameter types are contravariant. Covariant means you can like restrict, we can be more specific. And contravariance means you can be broader or like more generic. Union types already gives some interesting covariance implications. Usually, you would think, well, a union is always broader than a single type, you say: Oh, I want either a traversable or accountable, it seems that you're expanding the type sphere. However, a single type can have as a subtype, a union type. For example, you say,:Oh, my base type is a Class A, and I have two child classes, which are B and C. I can type covariantly that I want either B or C, because B or C is more specific than just A. That's what union types over there allows you to do. And the way how it's implemented. And how to check for that is you traverse the list of child types, and check that the child type is an instance of at least one of the parents types. An intersection by virtue of you adding constraints on the type itself will always be more specific than just a single type. If you say: Oh, I want a class A, then more specifically, so I want something of class A and I want it to be countable. So you're already restrict this, which gives some very interesting implications, meaning that a child type can have more types attached to itself than a parent type. That's mostly due how PHP implements its type system, to make the distinctions, basically, I've added the flag, which is either this is a union, meaning that you need to check it is part of one, or it's an intersection. The thing with intersection types is that you need to reverse the order in how you check the types. So you basically need to check that the parent is at least an instance of one of the child types, but not that none of the child types is a super type of the parent type. Let's say you have class C, which extends Class B and Class B extends Class A. If I say let's say my base type is B to any function, and I give something which is a intersection T, any interface, this would not be a valid subtyping relation to underneath B. Because if you looked it was a Venn diagram in some sense, you've got A which is this massive sphere, you've got B which is inside it, and C which is inside it. A intersection something intersects the whole of A with something else, which might also intersect with B in a subset, but it is wider than just B, which means like the whole variance is very complicated in how you check it because you can't really reuse the same loop. Derick Rethans 10:13 I can't imagine how much more complicated this gets when you have both intersection and union types in the same return type or parameter argument type. George Peter Banyard 10:22 One of the primary reasons why it's currently not in the RFC, because it is already mind boggling. And although I think it shouldn't be that hard to like, add support for it down the line, because I've already split it mostly up so it should be easy to check: Oh, is this an intersection? Is this a union? And then you need to branch. Derick Rethans 10:42 Luckily because standard types aren't included here, you also don't really have to think about coercive mode and strict mode for these types. Because that's simply not a thing. George Peter Banyard 10:50 That's very convenient. Derick Rethans 10:52 Is the future scope to this RFC? George Peter Banyard 10:54 The obvious future scope is what I call composite types, is you have unions and intersections available in the same type. The main issue is mostly variance, because it's already complicated, adding more scope to it, it's going to make the variance go even harder. I think with most programming languages, the variance code is always complicated to read. While I was researching some of it, I managed to hit a couple of failures, which where with I think was Julia and the research paper I was it was just like focusing on a specific subset. And like, basically proving that it is correct. It's not a very big field. Professors at Imperial, which I've talked to, have been kind of helpful with giving some pointers. They mostly work with basically proper languages or compiled languages, which have this whole other set of implications. Apparently, they have like a bunch of issues about how you normalize the types like in an economical form, to make it easier to check. Which is probably one of the problems that will need to be addressed, when you get like such a intersection and union type. First, you normalize it to some canonical form, and then you work with it. But then the second issue is like how do you want the composite types to actually be? Is it oh, you have got parentheses when you want to mix and match? Or can you use like union precedence? I've heard both opinions. Basically, some people are very dead against using Union as a precedent. Derick Rethans 12:14 My question is going to be, is this actually something people would use a lot? George Peter Banyard 12:21 I don't think it would be used a ton. The moment you want to use it, it is very useful. One example is with the PSRs, the HTTP interfaces. Or if you want the link interface. Combining these multiple things gets it convenient. One of the reasons why I personally wanted as well, it's for streams. So currently, streams don't have any interface, don't have any classes. PHP basically internally checks when you call like certain string methods. For example, if you try to seek and you provide a user stream, it basically checks if you implement a seek method, which should be an interface. But you can't currently do that. Ideally, you would want to stream maybe like a base class, instead of having like a seekable stream, and rewindabe stream, or things like that. You basically just have interfaces. And then like if somebody wants a specific type of stream, just like a stream, which is seekable, which is rewindable. And other things. We already have that in SPL because there's an iterator. And we have a seekable iterator interface, which basically just ask: Oh, this is there's a seek method. I think it depends how you program. So if you separate the many things into interfaces, then you'll probably use intersections types a lot. If you use a maybe a more traditional PHP code base, which uses union types a lot. Union types are like going to be easier. And you want to reduce that. Derick Rethans 13:32 Would you think that lots of people already use union types because it's pretty new as well. Isn't it? George Peter Banyard 13:38 Union types are being implemented in various different libraries. PSRs are updating the interfaces to use union types. One use case, I also have a special method, which was taken the date, it takes a union of like a DateTime interface, a string or an integer. Although intersections types are really new, you hear people when union types were being introduced, you heard people saying, I would promote bad cleaning habits, you shouldn't have one specific type. And if you're using a union, you have a design issue. And I had many people complaining to me why and intersection types of see? Why they haven't intersection types being introduced first, because intersection types are more useful. But then you see other people telling us like, I don't see the point in intersection types. Why would you use an intersection type, just use your concrete class, because that's what you're going to type anyway. Derick Rethans 14:21 I can give you a reason why union types have implemented first, over intersection types, I think, which is that it's easier to implement. George Peter Banyard 14:28 It's easier to implement. And it's more useful for PHP as a whole, because PHP functions accepts a union or return a union. Functions return false for error states instead of null. It makes sense why union types were introduced first, because they are mostly more useful within the scope of what PHP does. Derick Rethans 14:46 Do you think you have anything else to add about intersection types? At the moment, it's already up for voting, when is that supposed to end? George Peter Banyard 14:54 So the vote is meant to end on the 17th of June. Derick Rethans 14:57 At the moment I see there's 15 votes for and two against so it's looking good. What's been your most pushback on this? If there was any at all? George Peter Banyard 15:05 Mostly: I don't see the point in it. However, I do think proper reasons why you don't want it, compared to like some other features where it's more like have thoughts on what you think design wise. But it is undeniable that you you add complexity to the variance. And to the variance check. It is already kind of complicated. I have like a hard time reading it initially. There's the whole parser hackery thing, which is kind of not great. It's probably just because we use like a restricted parser because it's faster and more efficient. Derick Rethans 15:36 I think I spoke with Nikita about parsers some time ago and what the difference between them were. If I remember which episode it was all the to the show notes. George Peter Banyard 15:44 And I think the last reason against it is that it only accepts pure intersections. You could argue that, well, if you're adding intersections, you should add the whole feature set. It might impact the implementation of type aliases, because if you type alias T to be a union of A and B, and then you use type T in an intersection, you basically get a mixture of unions and intersections, that you need to be able to work with. The crux of this whole feature is the variance implementation. And being able to rationalize the variance implementation and been to extend it, I think it's the hardest bit. Derick Rethans 16:18 I guess the next thing still missing would be type aliases, right? Like names for types, which you can't define just yet, which I think you also mentioned in the RFC is future scope. George Peter Banyard 16:29 Yeah. Derick Rethans 16:30 Thank you, George, for taking the time today to talk to me about pure intersection types. George Peter Banyard 16:36 Thanks for having me on the show. Derick Rethans 16:41 Thank you for listening to this installment of PHP internals news, the podcast dedicated to demystifying the development of the PHP language. I maintain a Patreon account for supporters of this podcast as well as the Xdebug debugging tool. You can sign up for Patreon at https://drck.me/patreon. If you have comments or suggestions, feel free to email them to derick@phpinternals.news. Thank you for listening and I'll see you next time. Show Notes RFC: Pure Intersectio Types Episode #66: Namespace Token, and Parsing PHP GLR Parser LALR(1) Parser Iter Library Credits Music: Chipper Doodle v2 — Kevin MacLeod (incompetech.com) — Creative Commons: By Attribution 3.0
Joël Quenneville (Twitter)Joël's blog post Elm's Universal Patternmap2Maybe.map2MetaphorsSome common metaphors for Elm's Universal Pattern (Applicative Pattern).MappingCombiningLiftingWrapping and unwrapping boxesBlog post on Two ways of looking at map functionsExamplesRandom generatorsApply mapping functions to vanilla value functions to keep things cleanTipsSeparate branching code from doing code (discussed in-depth in Joël's blog post Problem Solving with Maybe)Stay at one level of abstractionJson decoders as combining functionsScott Wlaschin Railway Oriented ProgrammingDillon's blog post Combinators - Inverting Top-Down TransformsThe JSON structure and Elm type don't have to mirror each other - start with your ideal type and work backwardsApplicative patternApplicative needs 1) way to construct, 2) map2 or andMapJson.Decode.Pipeline.required functionRecord constructorsPractice writing it with an anonymous function to convince yourself it's equivalentRecord constructors are just a plain old elm functionmap2 doesn't take a type, it takes a function -NoRedInk/elm-json-decode-pipeline is a useful reference for implementing this kind of api on your ownApplicative Laws in HaskellMonomorphic vs polymorphicParser Combinatorselm/parser episodeJoël's blog posts on the ThoughtBot blogJoël's Random generators talkJoël's Maybe talkSome more blog posts by Joël that related to Elm's Universal Pattern:Running out of mapsPipeline Decoders in ElmJoël's journey to building a parser combinator:Nested cases - https://ellie-app.com/b9nGmZVp9Vca1Extracted Result functions - https://ellie-app.com/b9qtqTf8zYda1Introducing a Parser alias and map2 - https://ellie-app.com/b9MwZ3y4t8ra1Re-implementing with elm/parser - https://ellie-app.com/b9NZhkTGdfya1Getting Unstuck with Elm JSON Decoders - because mapping is universal, you can solve equivalent problems with the same pattern (described in this post)
שלום וברוכים הבאים לפרק מספר 410 של רברס עם פלטפורמה - זהו פרק מספר 73 של באמפרס.אם בעבר יצא לכם לשמוע שוב את פרק 68 [לא זה . . . זה, לפחות אם האזנתם ולא קראתם], אז זו כנראה הייתה טעות, כי זה היה פרק 62 [72 . . . הסתבכנו עוד יותר]. בכל מקרה, הפעם לא טעינו, ככה אני מקווה [אז זהו, ש…].אנחנו מקליטים את באמפרס אחרי הרבה הרבה זמן שלא נפגשנו - באולפן נמצאים אלון, אני [רן] ודותן - אהלן חברים! מה נשמע?האולפן הוא כמובן וירטואלי - אנחנו עובדים מהבתים, ברובנו - והתאריך היום, למען ההיסטוריה, הוא ה-27 באפריל 2021, ואנחנו מתחילים לחזור לנורמל [אז זהו, ש…. לא משנה].באמפרס, למי שלא יצא לו להקשיב בשבע או שמונה השנים האחרונות, זו בעצם סדרה של קצרצרים, שבה אנחנו סוקרים חדשות טכנולוגיות מעניינות שיצא לנו לפגוש בחודש האחרון - אבל כיוון שהרבה זמן לא נפגשנו, אז זה יוצא, ככה, קצת יותר מחודש - זהו, סדרה של קצרצרים, חווים את דעתינו וממליצים על קריאה או ספריות או דברים מעניינים שמצאנו ברחבי האינטרנט[ים]. אז קדימה - בואו נתחיל.רן - אני דווקא אתחיל הפעם במשהו קצת שולי - בזמן האחרון החלטתי להקדיש את עצמי למדע[!]: יוצא לי הרבה פחות לקרוא בלוגים וכאלה, והחלטתי שאני רוצה להתרכז בלקחת קורסים, אז אני יכול לבוא עם המלצות על קורסים, ודברים שיצא לי ללמוד ומאוד אהבתי . . . בעבר גם המלצתי על ספרים [בבאמפרס 68 המקורי . . . מקרי? עוד נחזור לזה], ובזמן האחרון אני עוסק בתחום של Data Science, ורציתי להשלים הרבה דברים, שחלקם הם Basic וחלקם קצת יותר מתקדמים, והחלטתי לבדוק כל מיני קורסים Online, ולראות מה הם שווים והאם אני מתחבר לחווייה הזאת.עשיתי לא מעט קורסים ב-Coursera וב-edX וב-Udemy, ורציתי להמליץ על כמה.אז קודם כל - יש הרבה שאני לא ממליץ עליהם - והם לא ברשימה . . . לקחתי לא מעט קורסים, שבסופו של דבר אמרתי לעצמי “אוקיי, זה לא היה שווה את זה”אבל יש כמה שכן - אם זה מבחינת התוכן עצמו, כשתוכן כמובן זה משהו אינדיבידואלי, זאת אומרת שאם זה רלוונטי לכם תלכו על זה ואם לא אז לאאבל גם בעיקר מבחינת אופן ההגשה של הקורס: קורסים שהם פשוט מאוד מושקעים - חלקם צולמו במיוחד לפלטפורמה, זאת אומרת שלא “סתם” שמו מצלמה בכיתה ואחר כך שידרו את זה אלא צולמו ממש לפלטפורמה ואפשר לראות - משתמשים שם באמצעי המחשה שהם הרבה יותר נוחים ונגישים.וחלקם לא . . . לא צולמו במיוחד, אבל עדיין הם טובים.אז כמה קורסים שרציתי להמליץ עליהם . . .אז קודם כל - יש כמה קורסים של ה- Imperial College London, שחלקם הם מאוד Basics, כמו היזכרות באלגברה לינארית או היזכרות באינפי (באנגלית קוראים לזה Multivariate Calculus), ונושאים כמו סטטיסטיקה - Principal Component Analysis (PCA) . . . יכול להיות שאת חלק מהדברים יצא לכם ללמוד בתואר הראשון, אם עשיתםאני למדתי את חלקם, ובחלקם פשוט רציתי להיזכר [ד”ש לאביב צנזור ולעליזה מלק]והם מוגשים בצורה מאוד יפה - בעצם, כל הקורסים שראיתי עד היום מ-Imperial College London מוגשים בצורה מאוד מאוד יפה, גם מבחינת העריכה של התוכן וגם מבחינת הפרזנטציה, והייתי מאוד ממליץ עליהם.קורסים אחרים שלקחתי, והייתי רוצה להמליץ - קורס בסיסי בהסתברות וסטטיסטיקה מהרווארד, שנקרא Harvard STAT110xבקורס עצמו אין הרבה קטעים מצולמים - הוא ברובו קריאה - אבל לדעתי הוא מוגש בצורה מאוד יפההרבה מאוד דברים מוגשים בצורה… גם מתימטית טובה אבל גם סיפורית טובה, עם לא מעט אנימציות ואמצעי המחשה אחרים שאני מאוד אהבתי, ואני חושב שזה קורס מאוד מושקע.ועכשיו אני עושה קורס שגם הייתי רוצה מאוד להמליץ עליו, של מרצה בשם Professor Daphne Koller, שנקרא Probabilistic Graphical Models 1: Representationהקורס מכסה דברים כמו רשתות בייסיאניות ומודלים מרקוביים ודברים בסגנון הזה, ויש כמה דברים מעניינים על הקורס הזה -(1) הקורס כנראה לא צולם במיוחד ל-Coursera, אבל למעשה Daphne Koller, שכמו שאתם בטח מבינים מהשם שלה היא ישראלית לשעבר שהיום מלמדת בסטנפורד - אז זה קורס שבעצם נלקח מסטנפורד.אתם יכולים הרבה פעמים לבחור קורסים מאוניברסיטאות שביום-יום לא הייתה לכם גישה אליהן, וזה נחמד.חוץ מזה [2] גם קצת קראתי והבנתי שהיא ה-Co-Founder של Coursera, יחד עם Andrew Ng - פרט טריווייה שלא ידעתי ומעניין להגיד.היא בעצם הייתה באיזשהו שלב גם ה-CEO של Coursera, תוך כדי העבודה שלה בסטנפורד.[ויש שיחות סופר מעניינות של Lex Fridman עם שניהם - כאן Daphne Koller: Biomedicine and Machine Learning וכאן Andrew Ng: Deep Learning, Education, and Real-World AI]זהו, אז אלו ככה כמה קורסים שאספתי וחשבתי שאמליץ עליהם . . .(דותן) לכולם יש וידאו? או שרק לסטטיסטיקה אין וידאו, זה מה שאתה אומר?(רן) לכל אלה שרשמתי פה, כל החמישה, שכמובן יהיו ב-Show notes [כמובן . . .], יש בהם וידאובזה עם הסטטיסטיקה יש הרבה פחות וידאו, זאת אומרת - רובו בכתב.כל השאר הם בעיקר וידאו.אבל מה שכן - אחד מהדברים שעוזרים לי ללמוד זה שבסוף כל פרק יש תרגיל, ובהרבה מקרים גם מקבלים את הפידבק - זה תלוי אם אתם משלמים או לא משלמים על המנוי.אני בחרתי שלא לשלם, כי אני לא באמת צריך את ה-Certificate - זה סתם ככה לידע כללי:אם אתם הולכים לעשות קורס באחת מהפלטפורמות האלה, אפשר ללכת בשני מסלולים - מסלול “משולם” ומסלול “לא משולם”.אם אתם משלמים, אז אתם גם מקבלים את כל החבילה - שזה בדרך כלל אומר מבחנים וציוניםאבל אם אתם לא משלמים אז אתם עדיין מקבלים את כל התוכן - ומה שאתם לא מקבלים זה את אותו Certificate, משהו שאתם יכולים להציג ב-LinkedInבטח יצא לכם לראות, יש אנשים שמציגים את זה.אני בחרתי שלא כי אני לא צריך את זה, אני לומד את זה בעיקר בשביל העניין והסקרנות שליברוב המקרים גם התרגילים זמינים למי שלא משלם.בקיצור - בסוף כל פרק יש איזשהו תרגיל, כשחלק מהתרגילים הם בתכנות, זאת אומרת ב-Python, ב-R, ב-Octave . . . יצא לי לכתוב בכל מיני שפות כאלה בזמן האחרון.חלק מהתרגילים הם תיאורטיים לגמרי, זאת אומרת - מתימטיקה וכאלה -אבל זה נחמד ועוזר, ככה, לשים אותך בפוקוס ולהבין מה חסר לך, אם אתה צריך קצת לחזור על החומר.(דותן) תגיד - כמה זמן אתה משקיע בזה? אתה יכול להעריך כמה זה דורש, בשעות?[זה בקורס על effort estimations, לא היה ברשימה . . .](רן) אני בדרך כלל משקיע כמה שעות בשבוע, תלוי בשבוע - לפעמים אני לומד בלילה, לפעמים אני קם מוקדם בבוקר, לפעמים בסופ”ש כשיש זמן . . .זה נורא אישי, זאת אומרת - החל משעתיים בשבוע ועוד 10 שעות בשבוע, תלוי בשבועאבל אני חייב להגיד שיש פה המון סיפוק - עצם זה שזה מובנה, ואתה ככה עובר שלבים ויש מבחנים ואתה מצליח בהם וכל זה . . .זה כאילו קצת נחמד לחזור להיות סטודנט, ובעיקר לקבל את הפידבק של . . . “סיימת שלב!”זה מגניב להחזיק Spreadsheet ולסמן V על הדברים שעברת.זהו, אני יכול גם להגיד שהחווייה היא, מה שנקרא “Mixed” - לא כל הקורסים כל כך טובים, יצא לי לעשות קורסים של מרצים עם מבטא שקשה מאוד להביןזאת אומרת - לא כל האוניברסיטאות הן אמריקאיות או בריטיות, חלק מהאוניברסיטאות מגיעות ממקומות שונים באירופה או במזרח, אז לא תמיד אתה מצליח ממש להבין מה המרצה אומר.וגם מבחינה מבחינה מתודולוגית זה לא תמיד מועבר בצורה הכי מדהימה.פה הוספתי את אלו שכן אהבתי . . .(אלון) !Back to School . . .(דותן) אחד האתגרים זה כל “המבניות" של זה, כי נגיד שמישהו אומר לי “יש לך 6 שעות, וכשאתה מסיים להשקיע אותן אז סיימת רענון של אלגברה לינארית” אז אני מוכן למצוא את הזמן ולהשקיע אותן.אבל אם אני מתחיל איזשהו קורס, ואז עובר שעתיים וזה גרוע, אז אני מחפש את הקורס הבא, ואז אני מנסה עוד שעתיים, וזה גם גרוע . . .ואז בסוף זה די . . .(רן) נכון, אז היו . . . אני חושב שצריך פה חוויות טובות, אז רציתי להמליץ על כמה שהיו לי חוויות טובות איתם.אני כן . . . היו לא מעט קורסים שהתחלתי וזה לא שבסופו של דבר החלטתי שהחומר לא מעניין אותי, אלא שהחלטתי שפשוט המרצה לא מעביר את זה טוב או שהקורס לא מעודכן וכאלה, אז חיפשתי אלטרנטיבה.בחלק מהמקרים מצאתי אלטרנטיבה ובחלק מהמקרים לא, אבל יש מספיק ידע בעולם, ככה שלא חסר מה ללמוד, ולדעתי זה מאוד מספק.זה כיף, זאת אורמת, כשאתה מצליח ללמוד משהו בלי הלחץ הזה של המבחנים ואתה יודע - של סמסטר רגיל והכלאתה פשוט עושה את זה בשביל הכיף, ואני מאוד נהנה מזה.[1+](אלון) בדיוק חשבתי על זה שהם צריכים להפוך את המודל העסקי - מי שלא משלם אז שיהיו לו מבחנים וכל הלחץ, ומי שמשלם יכול לעשות את זה ב-Easy, בכיף[קוראים לזה “לקנות תואר”, זה מודל עסקי ותיק ומוכח . . . ](רן) כן, לגמריאז זהו - ותוך כדי גם התחלתי לפתח אינסטיקטים של איך לזהות מה זה “קורס טוב”, כדי שאם אני ארצה “ליפול מהקורס” [תרגום יפה של Drop . . .] מוקדם אז אני לא אבזבז יותר מדי זמן עליו.אז פיתחתי ככה כל מיני אינטואיציות, אבל זה בהחלט משהו ש . . . זאת אומרת - יש איזשהו ניקוד ופידבק על הקורסים, אבל אני חייב להגיד שזה לא תמיד כל כך עקבי, אני חושב שיש לא . . . יצא לי לבחור לא מעט קורסים עם ניקוד גבוה, שבסופו של דבר, לפחות לטעמי, התוצאה לא הייתה מדהימהאבל מצד שני - זה לא שנרשמת לאוניברסיטה ועכשיו אתה חייב לעשות את המבחן בסוף - מקסימום אתה נושר וזהו, ממשיך לדבר הבא.אז ככה שאין לי המון המון אייטמים כאלה פזורים, כמו שבדרך כלל יש לי, כי את רוב הזמן אני משקיע בדברים האלה - אבל כן יצא לי להיתקל במשהו אחר, בנושא אחר שדי, ככה, קצת שעשע אותו וקצת עשה גלים ויכול להיות שגם לכם יצא לקרוא על זה - סוג של “מיני מלחמה” [ביטוי מעניין במועד שחרור הפרק…] בין חברת Signal לבין חברת Cellebrite שהיא, דרך אגב, חברה ישראלית שמספקת תוכנה שבעיקר משמשת גופים ממשלתיים ובטחוניים, שבאמצעותה אפשר לקרוא נתונים מתוך הטלפון.אם, לצורך העניין, שוטר מקבל צו מבית משפט כדי לקרוא את הנתונים על הטלפון שלך [וכמובן שאך ורק במקרה זה] - אז הם יכולים להשתמש בתוכנה של Cellebrite כדי באמת לקרוא, בלי שיתוף הפעולה שלך.לצורך העניין - לפתוח את הנעילות או מה שצריך . . .באיזשהו שלב הם באו והכריזו שיש להם עכשיו גם תמיכה ב-Signal - הם בכל פעם מוסיפים תמיכה בעוד ועוד אפליקציות, ו-Signal, למי שלא מכיר, זו תוכנה, אפליקציה ל-Instant Messaging, כמו WhatsApp ו-Telegram ואחרים . . .(אלון) רק עם באגים . . . (רן) קודם כל, זו תוכנה יחסית צעירה - אבל הפוקוס שלהם הוא Privacy ו-Security, אוקיי?הם כנראה לא מדהימים בפיצ’רים, לא up to par עם WhatsApp או עם Telegram, אבל הם . . . לפחות ה-Claim-to-fame שלהם, זה Privacy ו-Security.אז כש-Cellebrite באו והכריזו שעכשיו יש להם גם תמיכה ב-Signal, כלומר - אם שוטר תפס את הטלפון שלך ויש לך הודעות ב-Signal שלא היית רוצה שהוא יראה, ועכשיו פתאום הוא כן יכול לראות, אז זה כמובן מדאיג את החברה.אז מה שעשה מנכ”ל החברה - למעשה, הוא פירט בבלוג-פוסט מאוד משעשע, שכולל גם איזשהו סרטון וידאו, קצת היתולי אני חייב להגיד - הרבה מאוד רגישויות או באגים, שקיימים ב-Cellebrite עצמה, בתוכנה של Cellebrite.התוכנה של Cellebrite מתוקנת על Windows, והוא בא וסקר את ה-Vulnerabilities, את הפגיעויות . . . ככה אומרים בעברית? ה-Vulnerabilities השונים של התוכנה, ובגדול - די קטל אותם . . .וכאילו בא ואומר - “חבר’ה, אם אתם מתעסקים ב-Security, בואו קודם כל תאבטחו את עצמכם”.אני לא יודע עד כמה הדברים שהוא אמר מדוייקים או לא, אבל אני חייב שהגישה הזאת . . . אותי לפחות זה קצת הצחיק, אבל אני חושב שזה . . . זה לא עניין מצחיק לכשלעצמו, אבל הבלוג-פוסט הזה נכתב בצורה די משעשעת לדעתי.בכל אופן, אחד הדברים המצחיקים הנוספים שהיו שם זה שהוא בא ואמר “במקרה נפלה ממשאית ערכה של Cellebrite” . . . הוא הראה תצלום של ערכה של Cellebrite והוא אמר ש“במקרה הלכתי ברחוב לתומי ונפלה ממשאית והרמתי” . . . אשכרה ככה, כאילו הוא לא מכיר את הביטוי הזה בעברית.וצילם את הערכה הזו של Cellebrite, ערכת חומרה, שבאמצעותה מתחברים לטלפונים מהסוגים השונים.זהו, אני חשבתי שכל הסיפור הזה הוא קצת משעשע - כמובן שאני מניח שלא Signal ולא Cellebrite באמת לוקחים את זה בקטע הומוריסטי - מבחינתם זה ביזנס אמיתי - אבל אני חייב להגיד שלי, כקורא מהצד, אני מאוד השתעשעתי לקרוא את כל הסיפור הזה.(אלון) מה שמצחיק זה הקטע הזה ש”נפל ממשאית” זה כאילו . . . . כמה הוא שילם למישהו שיפיל את זה מהמשאית, זה הקטע המעניין . . . איך עושים את זה, זה הקטע המעניין, כי לא רגיל שציוד ייפול ממשאית . . . (רן) אני שואל את עצמי האם הוא כתב בתמימות שבמקרה זה נפל ממשאית, או שגם פה יש איזושהי אירוניה . . . אני לא יודע, אבל בכל אופו, כן . . .אני לא יודע האם הביטוי הזה נכון גם באנגלית, “נפל ממשאית” [כן, זה ביטוי מתורגם לעברית], אבל זה אשכרה מה שהוא כתב.(אלון) זה משעשע . . . מה שכן, כדי לשים קצת דברים בפרופורציה, חוץ מזה שזה משעשע וזה, ויש להם חולשות בתוכנה - התוכנה שלהם, למיטב הבנתי, זה רק המכשיר . . . גם אם פרצת, אין נזק אמיתי, אז אין פה כל כך אפקט.(רן) לא, הוא כן מסביר . . . אתה מתכוון האם הוא פרץ ל-Cellebrite? לא - מה שהוא אומר זה שאם אתה יכול, לצורך העניין, אתה יכול לשים קובץ בתוך Signal, או בתוך אחת מהאפליקציות האחרות ש-Cellebrite תומכת בהן, והקובץ הזה למעשה יוכל לשנות את הדאטה ש-Cellebrite קוראתאתה תוכל, לצורך העניין, להסתיר ככה דברים, או אפילו לשנות דאטה ש-Cellebrite קוראת מטלפונים אחרים, ככה שכן יש פה איזשהו נזק.זאת אומרת שזה פוגע באמינות - לטענתו, שוב, אני לא יודע אם זה נכון או לא, אבל הוא טוען, לכאורה כפי שאומרים - הוא טוען שאם אתה יודע מה שאתה עושה, אז אתה יכול למעשה לנטרל את Cellebrite, או לגרום לה לדווח על דברים שהם לא נכונים, למחוק דאטה, לגרום לזה שהיא לא תראה דאטה וכו’.(אלון) כן, אבל להבנתי את צריך קודם כל לעשות את זה על Cellebrite, זאת אומרת שאתה לא יכול להיות מנותק . . . אתה לא יכול להגן על הטלפון שלך בלי המכשיר, להבנתי.(רן) אתה צריך לשתול קובץ על הטלפון שלך, ואז לתת לשוטר לקרוא את הטלפון שלך - ואז השתלטת לו על התוכנה . . . זה ה-Scenario שהוא מתאר.שזה לא . . בוא נגיד שזה אולי לא Attack surface מאוד רחב, זה לא שאתה יכול להתחבר מהאינטרנט ולהתחיל לסרוק והלפגיז את כולם.זה דורש גישה פיזית והכל.אבל - בכל אופן, אני חושב שזה לא כל כך נעים מבחינת PR ל-Cellebrite.אוקיי, נמשיך הלאה . . . אלון?(אלון) זהו? היית קצר היום, אבל לקחת את האייטם הכי מגניב . . .אבל בסדר.[עוד נחזור להערה הזו . . .]אלון - אז משהו שנתקלתי בו, קצר מאוד האמת - Back to basic - how tail call optimization worksקודם כל, Tail Call Optimization זה כשה-Complier הופך רקורסיות ללולאות For, מאחורי הקלעים - יכולים לעשות אופטימיזציה אם זה התנאי האחרון, מדעי המחשב 101 כזה . . .אבל יש פה ממש, למי שרוצה, את הפירוט אסמבלי (Assembly) - איך זה מתקמפל לזה.ממש קצר וממש Back to Basic - למי שאוהב את הדברים האלה אז זה חמוד ונחמד קצת להתרענן.(רן) זה ספציפית לשפה מסויימת או . . . ?(אלון) זה ספציפי ל . . .לא, נראה לי שפה זה ++C בדוגמא, אבל . . .באופן כללי זה אותו הקונספט בהכל, אז זה לא כזה עקרוני, נראה לי, אבל בטח יבוא מישהו ויגיד לי שזה לא בכל השפות ככה . . .בטח גם נכון . . . שפות עם Interpreter למשל, אני לא יודע אם הן יודעות לעשות את זה, או לפחות חלקן.נושא הבא - Go cheat-sheet . . . אז מה שנחמד זה שיש פה דף, עמוד, עם איזה-300 . . . - 261, למען האמת - דברים ש”איך עושים ב-Go”.איך עושים לולאת For? איך עושים Trim? איך בודקים אורך של String? לחשב דברים וכל מיני דברים . . . כמעט כל מה שאתה צריך לעשות בשפת תכנות, שהוא מעבר לדברים מתוחכמים.ממש - שתי שורות על איך עושים את הפונקציה, או בשורה אחת - ממש Stack overflow בעמוד אחד, כנראה ל-99% מהדברים שאנשים מחפשים.ממש נחמד - גם ,ככה, למי שרוצה לחזק את עצמו בשפה או לחזור לשפה אחרי הרבה זמן - פשוט לעבור על זה זה לדעתי לוקח כמה דקות . . .(דותן) אבל אני חושב שבכל שפה זה נחמד . . . כאילו, אני יכול להכניס שפה . . . אני תוהה אם הכיסוי של כל ה-Idioms הוא רחב כמו . . .(רן) כן - אז הURL הוא Programming-Idioms.org, ואז יש לך מתחת כזה [סרגל] לבחור שפות - כמו את Go שאלון הראה, אבל יש גם שפות אחרות.(דותן) יש כאן גם קטע של השוואה שהוא נחמד - אם אני כותב משהו, ואני רואה את כל השפות, ואז . . .(אלון) כן - אפשר להשוות, ולראות כמה זה נורא בשפה מסויימת . . . בקיצור - זה ממש חמוד, אם אתה “בא שנייה” לשפה או נכנס לאיזשהו קטע קוד בשפה אחרת, אתה יכול שנייה להסתכל.ויש פה את Ruby, אהובת ליבי, שמה שנחמד שם ב-Cheat-sheet זה שזה הכל בשורה אחת בערך, אבל. . . זהו, אני חושב שבכל השפות יש את כל הדוגמאות - אלו אותן דוגמאות בכל השפות, אז ממש נחמד.(דותן) הייתי מוסיף לזה קצת סטטיסטיקה - הייתי כותב, נגיד, “כמה חסכונית השפה”, לפי מה שאמרת, ואז . . .(רן) חסכונית במה?(דותן) בכתיבה . . . נגיד, כתבתי פה, סתם - Http, file, הגעתי ל-Load . . . נגיד שמישהו ירצה Http Get, וקורא קובץ . . . עכשיו, אם אני מדפדף בין השפות, זה הופך להיות נחמד, כי אני יכול להסתכל כמה זה רע . . .(רן) אבל פה אני חייב להעיר - זאת אומרת: שפה שהיא over-verbose אז נכון, יש פה טעם לפגםמצד שני - שפה שהיא קצרנית מדי יכולה לפגוע לפעמים בקריאות - ע”ע Perl או אחרים.המדד שאותי באמת יעניין, שהוא אמנם מדד סובייקטיבי, אבל אותי הוא מעניין - זה מדד הקריאות, ה-Readability, של השפה.שוב, זה משהו שהוא סובייקטיבי, אבל אני חושב שזה המדד הנכון, זאת אומרת - מספר ה-Characters, או מספר השורות . . . לדעתי זה קצת פחות חשוב מהיכולת שלך לתקשר את הכוונה שלך למפתח הבא.(דותן) כן, זה באמת מביא אותך לאיזור במפה, ואז אתה צריך להחליט עד כמה זה קריא.(אלון) תראה, יש על זה הרבה דברים, אתה יודע : קוד קצר, באופן כללי - אנשים זוכרים אותו והוא יותר מובן.אם תכתוב קוד בעשר שורות במקום בשורה אחת, אז יש ויכוח על עד כמה השורה הזאת מסובכת, אבל ככלל אצבע, קצר יותר קל לנו לפענח ולהבין בראש, ולא צריך להתחיל לזכור גם מה היה לפני שתי שורות ודברים כאלה.אז בגדול - קצר זה טוב [?]ואז הגיעו Perl, כמקרה קצה של “בסדר, בואו נוסיף תווים” . . . (רן) כן, תראה יש עוד דוגמאות - Perl זו דוגמא אחת ,אבל אתה יכול למצוא את זה ב-Python וב-Clojure ובעוד שפות אחרות.שפות נותנות לך לעשות כל מיני דברים מתחכמים - יש לזה לפעמים איזושהי אלגנטיות, אבל לפעמים זה גם יכול לפגוע בקריאות.אני חושב שזו איזושהי עקומה, שיש לה מקסימום באמצע - זאת אומרת שאם אתה שם על ציר X את מספר השורות ועל ציר Y את רמת הקריאות, אז המקסימום הוא לא בקצה הימיני ולא בקצה השמאלי - לא בהמון שורות ולא במעט שורות, אלא כנראה איפשהו באמצע.יכול להיות שקצת נוטה ימינה, אבל הוא בטח לא בקצה הימיני.ובסופו של דבר - כן, זאת אומרת, אני חושב שהאתגר המשמעותי ביותר בכל זה הוא איך למדוד את זה.אגב, אחת מהמטרות, כשמישהו תכנן את Go, לאנשים שתכננו את Go, הייתה לייצר שפה קריאה ולא בהכרח קצרה.היו כל מיני הצעות לשינויים בשפה, שהיו עושים . . . לצורך העניין For-loops יותר קצרים וקומפקטיים, שזה משהו שבכלל לא קשה לעשות, אבל מתוך בחירה מודעת באו ואמרו “אוקיי, אנחנו רוצים שתיהיה רק דרך אחת לעשות For Loop, אנחנו לא רוצים לייצר עוד דרך, אפילו שהדרך הזאת קצת ארוכה ולא קומפקטית, כי אנחנו חושבים שזה תורם יותר לקריאות של השפה”, ולכן הם נשארו איתה.יש כאלו שטוענים ש-Go היא קצת “וורבוזית” (verbose), ואני מסכים - אבל זה מתוך בחירה.(אלון) ברור שיש כל מיני דעות, אני חושב ש-Scala זה הקיצון השני של איך אפשר לעשות . . . לתת לשלושה מפתחים לכתוב לולאה ויהיו לך שלושים בערך, אז זה הקיצון השני.אבל כן, יש איזשהו מנעד.(רן) אוקי . . . יאללה, Next?(אלון) כן, אז Reverse Engineering, אבל הפעם התחום של ה-Covid [היה פעם כזה דבר] . . . מישהו כתב מאמר על Reverse Engineering the source code of Pfizer SARS-CoV-2 Vaccineבקיצור - מדובר כאן על 4,284 Characters, לכל הקידוד של ה-RNA, וזה מתחיל קצת להיכנס למה שעשו בכל קטע [מקטע], עם קצת נסיון לפענח מה הדברים עושים.לא יותר מדי ארוך, וזה ממש חמוד שהכל ניהיה בעצם תוכנה . . . כל דבר.(דותן) אני מה-זה-לא-מצליח להבין את זה . . . (רן) לא, תקשיבו - יש בלוג-פוסט מדהים בעברית, על אותו נושא בדיוק - בעצם, לקח את הפוסט הזה באנגלית, שהוא סופר-סופר-טכני וגם קצת על ביולוגיה, וכתב אותו בעברית.זה לא מה שמקושר פה, יש פה כל מיני תרגומים - זה לא התרגום הזה לעברית אלא בלוג-פוסט אחר, תיכף אני אחפש אותו, של רועי צזנה [מלך!], אם אני לא טועה.רועי בא ומסביר בדיוק מה הוא עשה פה, בצורה מאוד מובנת ויפה, אז אני ממלית לקרוא אותו - באמת, קריאה טובה.הבלוג-פוסט הזה פה שקישרת, אלון - הוא מעולה אבל הוא סופר-סופר טכני, ודורש גם לא מעט הבנה בביולוגיה.אבל אני מסכים איתך גמרי שזה לתכנת את גוף האדם, וזה קטע מגניב לאללה.(אלון) תראה, אני שמתי פה משהו טכני, כי באת לי עם קורסים אקדמאיים שעשית בהתחלה, ורציתי לראות אם אתה מדבר ויודע או סתם מדבר . . . (רן) קראתי, קראתי, כן . . . קריאה טובה.(אלון) זה קשוח, כן(רן) מתי המבחן? [רגע, שילמת?](אלון) הקיצר, המאמר הזה קשוח, אני מסכים איתך - אבל הוא מגניב, לא צריך להבין הכל בשביל להבין כמה שהוא מגניב, אבל אם יש אחד יותר פשוט להמונים אז זה יהיה . . .(רן) אני ארפרר (Reference) אליו, כן - אני אחפש ואפנה אליו[הנה - שפת התכנות של החיים: מה נכלל בחיסון הרנ"א שמיליון ישראלים כבר קיבלו, ואם כבר ז אולי גם זה, על הכותב - עושים היסטוריה מארחת: מדוע עתידנים כושלים בניבוי העתיד? עם ד"ר רועי צזנה](אלון) דבר הבא - יש איזה קטע כזה שלמי שכותב VS Code ב-Go יש בעיה לעשות evaluation ל-Expressions, ומסתבר שיש לזה תמיכהפשוט צריך לעשות Call לפני ה-Debug . . .חסכתי טיפ של אלופים -שמתי לינק ל-Stack Overflow, סתם . . . נתקלתי בזה והרבה לא הכירו, אז אמרתי “בוא, נשים”.מישהו כתב בלוג-פוסט חמוד - How I cut GTA Online loading times by 70%יש GTA Online, שרץ ב-Browser, ובקיצור - לקח לזה המון-המון דקות להיטען, והבחור הזה התחיל לנסות להבין מה הולך שם.יש לזה את ה-Source Code פתוחבקיצור, הכל התחיל ונגמר באיזה Parser, והוא מסביר פה איך הוא מצא הכל, אבל בסוף זה להחליף איזה json Parser באיזו ספריה אחרת - וחסך איזה 7 דקות, אם אני זוכר נכון . . . משהו כזה.6 דקות לדעתיבקיצור - חמוד לאללה כל מה שהוא עשה פה, וזה מטורף כמה זמן אפשר לחסוך עם Parser.(דותן) GTA Online זה אילו GTA Open Source כזה? או שהוא עשה . . .(אלון) זה רץ ב-Browser, והוא Open Source למיטב זכרוני . . . לא זוכר בעצם.(דותן) אז כאילו כשהוא החליף את הספריה, אז זה פשוט להחליף ספריה . . . (אלון) הם אחרי המאמר הזה לקחו את השינוי שלו ובאמת מימשו את זה גם . . . הם החליפו את זה, וזה חסך לכולם כמה דקות ארוכות של טעינה.לא איזה כמה שניות - אני מדבר פה על משבע לדקות לפחות משתי דקות . . . . משהו כזה.(דותן) אני אהבתי את כל הפירוק לגורמים - זה מאוד ויזואלי וגם הוא נותן הערות על גבי העורך, שנדע למצוא את הקטע הזה.(אלון) ולאייטם הבא - וזה האייטם האחרון שלי בהחלט, כי אחריו אי אפשר לעלות יותר גבוה: אני עושה פהDrop-Mic וזהו - זה הפרק האחרון, לא תראו אותי יותר, זה פרק אחרון - GitHub to VS Code:כל מה שצריך לעשות, זה מטורף - קחו Repoתוסיפו, בסוף הקוד של ה-GitHub, תוסיפו “1s” -שמתי פה לינק לאייטם של דותן - ותלחצו וזה פשוט פסיכי . . . פשוט עובדים על הקוד ב-VS Code וזה מאוד נוח לדפדף, לכתוב קוד, כל מה שאתם רוצים - זה VS Code online לכל Repo, אם Private או Public, של GitHub1. Go to any repo you are interested in on GitHub.2. Replace "github" with "github1s" (one + s) in the browser address bar.3. Enjoy browsing code like you would in VS Code.For exmaple: https://github1s.com/gofiber/fiberזהו, סיימתי, אין מפה יותר לאן לעלות . . .(דותן) תחברו קוד פרטי, תערכו . . . (אלון) לא נסיתי, לא יודע, כי צריך את האותנטיקציה (Authentication) של ה . . . (דותן) יש פה, כן(אלון) אז קוד פרטי זה . . . כל אחד והמלצתו.(דותן) לקח לי הרבה זמן לראות מי מאחורי זה בכלל . . . אתה יודע מי מאחורי זה? איזו יישות?זה Open source, של conwnet/github1s . . . (אלון) בקיצור - זה אחד הדברים הכי מגניבים שיש . . . (רן) אני לא רואה פה תמיכה ב-VI . . . איפה פותחים לו Issues?(דותן) אין פה . . . (אלון) כן, כי זה נורא נוח - יש את ה-Tree בצד וה-Syntax Highlighting וזה כותב ואפשר לעשות עם זה הכל.אפשר להוסיף לזה Extensions אפילו, כי זה ממש VS Code, זה VS Code online . . .(דותן) מה אתה אומר? גם Extensions? זה משוגע . . . עם Extensions זה משוגע(אלון) הם לקחו את כל ה-VS Code online . . . אפילו אפשר להריץ את זה ולדבג (Debug) את זה, תוך כדי . . .(דותן) אז נגיד Extensions הוא מתקין איפה? בשטח של Chrome הוא מתקין את ה-Extensions? לא ברור כי בסוף ה-Extension צריך איזשהו Disk Space כלשהו . . . (אלון) שמע, זה נראה לי Open source, אז אפשר לפתוח את זה עם . . . (רן) כן , התקנתי תמיכה ב-VI . . . סבבה, יש Extensions . . .(דותן) באמת?! וואו . . . (אלון) טוב, חברים - אני חושב שאפשר לסיים את העונה אחרי האייטם הזה [או לכל הפחות להעביר לאילת . . . ] - תודה רבה לכם, אנחנו נחזור בעונה הבאה עם דותן . . . (רן) וזה גם נשמר בין רילואדים (Reload) . . . אם אתה עושה Reload לדף זה נשמר.אני באמת לא יודע איפה הוא מתקין את זה, אבל זה מתקין.(אלון) יכול להיות שהוא רק מסמן שהוא מתקין לך? ואז הוא מביא לך כאילו גרסא עם זה? יוצרים כאילו ב-Cloud מלא גרסאות ואתה רק מקבל . . . לא יודע.בקיצור - זה ממש ממש ממש ממש מגניב, אם לא אמרתי את זה עדיין.(דותן) טוב . . . נשמע כמו מתכון טוב לכל דבר, הדבר הזה . . .(רן) כן . . . דרך אגב, אות’נטיקציה (Authentication) - יש לך בצד שמאל למטה איזשהו אייקון, שאתה יכול ללחוץ עליו, אז אתה יכול לעשות אות’נטיקציה באמת ל-GitHubאם אתה ממש רוצה להשתמש בזה כ-Editor, כ-Frontend ל-GitHub, וגם לשלוח Pull-requests וכו’, אז אתה יכול לעשות את זה.אתה צריך לעשות Log-in, ואז אתה יכול ממש להשתמש בזה.(אלון) כן, ואתה יכול, כאילו, להפוך את זה ל-One-stop-shop שלך להכל כאילו, זה מטורף . . . אני משתמש בזה כדי לראות קוד ב-GitHub, כל פעם שיש איזה Repo, יותר נוח לפתוח אותו ככה.עושה את החיים הרבה יותר טובים, כשאתה רוצה ל-Browse קוד, ולא להוריד אותו ולהתחיל לחפור(רן) בכל ה . . . נגיד Go-to definitions ו-Find וכל זה - עובד?(אלון) כן, הכל עובד - אתה יכול . . . Command B . . . פשוט . . . הקיצר - VS Code, בתוך ה-Browserוזה עובד מהר! זה די, כאילו . . . (דותן) אני עדיין בין “מטריד” לבין “מדהים” . . . .(אלון) למה מטריד? זה רק מדהים . . . למה מטריד?(דותן) ?How it works . . . יש כזה מסמך . . .(אלון) לא ברור, אבל זה עובד.בקיצור - חברים, זה הדבר הכי טוב שנתקלתם בו, באמת, מאז החיסון קורונה . . . . בבקשה.(דותן) ממש . . . להתחסן ולהתקין, אתה אומר? אתה ממליץ?(אלון) כן, זה עובד יותר טוב מה-5G, יש לזה קישוריות . . . (דותן) הסר והתקן . . . (אלון) זהו . . דותן! במעבר חד, נעבור אליך . . .(דותן) קשה להתעלות על זה . . . (אלון) אני אגיד לך - אפשר להחליט שמעכשיו זה פשוט פרק 73 וחצי . . . [כן, כי לא הסתבכנו מספיק עם המספור להפעם . . . ] - ונמשיך, כי אז כאילו תיהיה לך התחלה חלקה.(דותן) נכון, טוב . . . בנעימה עלובה זו אני אמשיך באייטמים הפחות מרגשים . . . .דותן - יש פה ספריה שכתובה ב-Rust ועושה UIקודם הראית (אלון) משהו שעושה UI ועושה הכל, אז אני לא יודע עד כמה זה משתווה . . .בכל אופן - למי שרוצה לשחק ב-UI וגם לקודד ב-Rust, מבלי להתחייב, יכול לעבוד עם ספרייה וה-Framework - זה נקרא icedהחלק הכייפי פה זה שזה מבוסס על ה-Elm Architecture של בניית UI - שזה אומר שאם עבדת עם Redux פעם, או דומיו - אז זה ירגיש לך מוכר.בעצם, ה-Elm זה סבא-רבא של של Redux, וזו גם - באופן שאולי נתון לויכוח - הדרך הנכונה לעשות הכל, כש-Redux הוא “פרשנות” של Elm.למי שרוצה לחוות UI בדרך אחרת, ארכיטקטורה של UI בדרך אחרת, וגם לשחק קצת עם שפה ולראות UI כתוצאה מהמשחקים - מוזמן.בהמשך ישיר לזה - יש ל-Rust כל מיני אתרי “?Are we ______ yet” . . . אז נגיד: לעולם ה-Gaming ב-Rust יש את ?Are We Gaming Yet, לעולם ה-UI יש את ?Are we GUI Yet, ל-Machine Learning אותו הדבר וכו’ . . . בעצם, זה מציג באופן ממש נחמד את “המצב הקהילתי” של השפה.אז הוספתי פה את ?Are we GUI Yet, למי שרוצה לנסות עוד כל מיני חבילות UI ולבנות אפליקציות.אני חושב שרוב, אם לא כל הספריות - רוב הספריות, לא כולן - יתנו לכם לבנות UI שאפשר להריץ אותו בכל מערכת הפעלה בצורה נחמדה.אייטם הבא - זה נקרא Starship[בוא - זה Starship . . .]למי שעובד בטרמינל, אז יש לו כל מיני “קישוטים” על ה-Command Line שלו בטרמינל, כמו האם אתה עובד על Git/Repo ויש לך דברים שלא דחפת, אז . . . אני, למשל, אוהב שמסומן לי כמה דברים, ואם יש משהו ב-Remote אז אני אוהב שמסומן שיש לי משהו ב-Remote.מה שהיינו עושים לרוב זה איזשהו Shell-Script, שמריץ איזשהו “Git-Whatever” וכמה שילובים של דברים, ואני חושב שהיינו “מחליפים ידיים” של הסקריפטים האלה . . . כל הזמן החלפת ידיים עם הסקריפטים האלה.מה שקורה זה שכשאתה פותח טרמינל, או כשאתה רוצה לעבוד הטרמינל, ואתה, נגיד, לוחץ Enter - אז הדבר הזה מריץ את עצמו שוב פעם - וזה איטי . . .אז אני תמיד הייתי במרדף אחרי ה”למצוא את המשהו הזה שעושה את זה מהר”.אז הייתה חבילה ב-Node שמישהו כתב, כבר לא זוכר איך זה נקראואז היה Port של זה ב-Rust, שעד היום עבדתי איתו.ועכשיו יש עוד איזושהי חבילה ב-Rust שנקראית Starship, שהיא ה-Holy Grail של זה . . . עברתי לזה וזה מדהים.סופר מהיר, כמעט קסם - וזה מאוד מודולרי, אפשר להוסיף לזה דברים כמו סטטוס של Git, גרסאות של דברים שאתם עובדים איתן, נגיד Python-ים למינהם, סביבות למינהן וכו’.(רן) אז אתה משתמש, נגיד, ב-Oh-My-Zsh, ואתה פשוט מחבר את Starship? או שאתה . . .(דותן) כן, לא חשוב איזה Shell - מה שנחמד פה זה שגם נותנים לכם סוג-של שורת אינטגרציה, אז . . .נגיד ב-Z Shell, אז בסך הכל “eval "$(starship init zsh)ב-Fish, למי שאוהבים [דייגים?] אז זה starship init fish | source . . . לי זה היה Plug & Play, ונקרא לזה “בול פגיעה”, כי בדרך כלל אני מחבר משהו כזה ואז דברים מוזרים קורים לילפעמים זה עובד - פותח טאב חדש - פתאום זה לא עובד . . .כנראה שזה האופי של לחבר Shell למלא Script-ים, משהו מודרני יותר - זה כמעט אף פעם לא עובד חלק ביחד.(אלון) זה ממש חמוד - אני רק לא מצליח להבין ממה שאמרת עד כמה זה איטי? לא יודע . . . אף פעם לא הרגיש לי שזה איטי . . . מה זה - 100ms? לא יודע . . . Windows ישן?(דותן) Windows?! אני לא קורא לזה Windows, אני קורא לזה Win98, לא יודע מה איתך . . (אלון) סבבה, הבנתי, אני במילניום . . . הבנתי . . . את האיטיות - אני לא הרגשתי אותה באופן שהפריע לי אף פעם, אולי אני מקליד יותר לאט . . .(רן) או חושב יותר . . . (אלון) . . . אבל זה מגניב, כי אפשר להוסיף.(דותן) לי זה ממש מפריע . . . כאילו - אני אוהב שהטרמינל מרגיש לך ריק, בלי כלום - מהיר, זריז ו . . לא יודע. אני רגיש לזה, זה מעצבן אותי.(רן) כל יומיים כשאתה פותח את ה Terminal Z Shell אז הוא רוצה שתעדכן אותו?(דותן) אני לוחץ על זה Cancel יותר מהר ממהירות האור . . .אבל כן - אני תמיד במרדף אחרי טרמינל שהוא מרגיש לך כזה הכי מהיר . . VIM, למשל, מרגיש לך הכי מהיר, אז עשיתי VIM ו-NeoVIM ובלה-בלה-בלה . . עד שבסוף עברתי ל-VS Code בכלל, וקיסטמתי (Custom) אותו להראות כמו VIM, והוא עובד לי הכי מהר שיש, יותר מהיר מה-VIM בטרמינל שלי - וזה בגלל שה Terminal Item עצמו הוא איטי, באופן לא ביזאריאם חושבים על זה, זה אפילו הגיוני - האייטם מתעסק בלצייר . . . הוא לוקח מסך, ומתעסק בלצייר מחדש Characters על המסך - יש לך חישובים כאלה ואופטימיזציות מה אני רוצה להחליף בתוך סט . . . מסך, כשאתה מרחיב אותו על 27 אינץ’ או Whatever, אז זה מלא Characters, אלפי Characters - ועכשיו הוא צריך לתמרן אותם, ובזה הוא עסוק.והדרך לתמרן אותם זו דרך די פרימיטיבית - פשוט תמרון טקסט כמו של טרמינל.אם אתה עובד ל - VS Code, זה בכלל UI, אז אתה מקבל UI שמתמרן את עצמו כמו ש-Browser עושה, ואז זה יכולות של מערכת הפעלה, מה שאתה רוצה . . . הכל הופך להיות יותר מהיר. זהו.(רן) אתה עדיין משתמש ב-iTerm2? בתור טרמינל?(דותן) כן, לגמרי - אני לא עובד עם . . .(אלון) לא יוצאת גרסא 3? אני עם iTerm2 כבר עשר שנים לדעתי . . .(דותן) אני חושב שזה iTerm2, אבל זה 3, בתכל’ס . . . אם אתב עושה ב-”About” . . .(אלון) באמת? . . .(דותן) זהו, וקצת שלא שמתי לב, אבל זה ממש Plug-in לאייטם הבא, יצא טוב . . .יש את VIM וכל העולם של זה . . .VIM, ה-Editor, אכזב את הקהילה באיזשהו שלב . . . מה זה אכזב? היה בו מלא קוד, וקוד מגעיל, וקוד רקוב, והוא לא היה אינטגרטיבי, ו-Plug-ins - כל אחד היה צריך לעשות שמיניות באוויר בשביל לעשות Plug-ins, והוא גם לא היה a-Synced, אז נגיד שהיה לי עכשיו Code Linting, אז לא היית יכול להריץ אותו הצורה Sync-ית ולהקליד ולקבל את ה-Decorators . . . “הצ’ופצ’יקים” האדומים ו-Whatever, תוך כדי העבודה שלך ... לא יכולת, היית מקבל Freeze, ואז הקוד שלך היה Highlighted, כי הוא לא היה Synced - וכל הקהילה זעמה [!] - והולידו את NeoVIMבעצם זה היה VIM, “שכיסחו לו את הצורה”, העיפו מלא קוד “מת”, בהתחלה - ואז התחילו להוסיף לזה מנגנונים מאוד מאוד מתוחכמים, של a-syncחיברו בפנים Lua בתור Scripting Engine, שזו בחירה הרבה יותר טובה ממה שהיה, היסטוריתו-NeoVIM פשוט פרח, ממש.ואז בא Bram, ה-Owner של VIM, ואמר “בסדר, אני אעשה את זה” - הוציא את VIM 8 ודי השווה . . . ואנשים, האמת, חזרו ל-VIM - אבל קהילת ה-NeoVIM המשיכה להתפתח לכל מיני כיוונים.אחד הכיוונים זה היכולת לקחת את VIM כ-Engine, להדביק עליו UI מכל מיני סוגים משוגעים, טיפה כמו שראינו על VS Code.אז יש פה פרויקט שנקרא neovide - כאילו Neo-V-IDE . . .זה מישהו שבנה UI, השתמש ב-NeoVIM, וה-UI בנוי ב-Rust - וה-UI משוגע . . .הוא דומה מאוד במבנה לטכניקות של Gaming Engine, ויש אנימציות משוגעותה-Curser זז לך באנימציות כמו של משחק, החלונות זזים באנימציה . . . ממש ממש מגניב.(רן) מה זה אומר שזה UI? יש מנוע של NeoVIM שרץ ברקע, והוא מחבר אליו, ורק מציג את ה-Frontend?(דותן) כן, מתחבר אליו ב-RPC, מתקשר איתו, אומר “שמע - זה הקובץ, הבנאדם הזיז את ה-Character, תגיד לי מה הייצוג החדש של הקובץ”.נגיד, אם לחצתי על האות T, כי אני מקליד, אז הוא שולח לו “הבנאדם לחץ על האות T”, ואז NeoVIM עונה “הבנתי, הטקסט החדש הוא . . . “ - ומחזיר לו את הטקסט, זה ה-RPC שקורה, בערך, בין השניים.נשמע איטי - אבל זה סופר מהיר, ועובד . . סוג של ארכיטקטורה . . .(רן) אבל אם אתה עושה את זה בתוך iTerm, אז עדיין יש את האיטיות של iTerm . . . או שזה רץ עצמאית, בחלון משלו?(דותן) לא, הוא רץ עצמאית - זו אפליקצית UI מבוססת Vulcan, שזה מנוע גרפי, נקרא לזה “דור חדש” כזה.וכן - כללי המשחק, איך שהבחור הזה פיתח את זה, הם ש”אני הולך להשתמש במנוע שהוא מאוד דומה למנוע של משחקים כדי לבנות IDE”, שזה מגניב . . .(רן) יש לך פה כל מיני אנימציות מצחיקות, למשל - אם אתה מזיז את ה-Curser אז הוא מציג לך כזה שובל, כמו שביל כזה, וכל מיני אנימציות אחרות.(דותן) קוראים לזה Railgun animation . . . (רן) Railgun זה התותח של הנאצים . . . (דותן) נאצים?!(רן) כן, זה תותח שפיתחו ובסוף לא השתמשו בו, שנע על פסי רכבת, בגלל זה קוראים לזה Rail-Gun . . . זה היה איזשהו תותח-קונספט כזה שפיתחו אבל אני לא יוודע האם הוא ירה אי פעם, כי זה היה איזשהו פרוייקט מאוד מאוד שאפתני.הוא היה אמור לירות ל[מרחק של] כמה עשרות או אולי אפילו כמה מאות קילומטרים פגזים . . .(דותן) וואלה . . . אני מכיר את הרפרנס מ-Doom, חשבתי . . . אבל בסדר, אני מבין איך זה יכול בסוף למצוא את עצמו בגרמניה הנאצית . . . מבחינת טכנולוגיה, מלא דברים הם המציאו . . .אז לאייטמים הבאים - אחד נקרא RustScan - וזה Port Scanner שכתוב ב-Rustו-Port Scanner זה כלי שרץ על כל ה-Port-ים שיש - יש מגבלה, למי שמכיר, של 65K פורטים - והוא רץ על כולם.אחד הדברים שתמיד אנשים חיפשו זה Port Scanner שיהיה הרבה יותר מהיר - זה כזה מרדף אינסופי, ופה פיתחו אחד כזה.זה ב-Rust והוא סופר-מהיר, ברמות שמסחררות ראשים, הוא הפך להיות מאוד פופולארי בגלל זה.אז למי שרוצה לסרוק Port-ים, או סתם להעיר את ה-CISO שלו משינה . . . מוזמן לקחת את זה ולהריץ על הרשת הארגונית, זה דבר אחד . . .(רן) לא שמעתם את זה פה . . . דותן מתבדח, כמובן [יש ייעוץ משפטי לתוכנית? טל”ח וכו’.](דותן) מי שרוצה לעשות . . .(אלון) זה תלוי בעד כמה שאתה אוהב את ה-CISO שלך, כאילו . . . (דותן) נכון, זה מאוד תלוי אז זהו . . . הדבר הבא נקרא bettercapאם אתם רוצים לקחת כמה שעות [בממ”ד?] מהשינה של אותו CISO שאתם אוהבים - אז פה יש כלי, את האמת ממש מגניב, ממש ממש מגניב אפילו, שנקרא bettercap, והוא אורז כל מיני סורקים למינהם בכלי אחדוהוא גם כולל UI, שהוא “עני” יחסיתאתם יכולים לסרוק . . . בוא נגיד מי קהל היעד: זה אנשים שסתם רוצים לשחק, אנשים שהם Red-Teamers, שזה גוף תקיפה בתוך הארגון שהמטרה שלו זה לשים כובע של תוקף והתיאוריה היא שאם אותו צוות יתקוף את הארגון כל הזמן, אז אם יבוא תוקף אמיתי אז הארגון יהיה מוגן . . . (אלון) או שארגון יחשוב שהוא יכול לכתוב ב-Slack “טוב, תפסיקו, זה עושה בעיות, תורידו את זה” ולחזור לישון . . . (דותן) בדיוק, כן . . .אני יכול להגיד שגם מצאתי את עצמי משתמש בכלים כאלה כדי לדבג (Debug) דברים - לפעמים הרשת במשרד הייתה לא יציבה, לא טובה, וזה גם כלים טובים כדי לנסות להבין מי נמצא שם בחוץ, מי מנסה להתחבר ומה הוא מנסה לעשות.[אבל להטריל את ה-CISO זה יותר מצחיק, בהחלט]אז זה כלי אחד, שאורז כל מיני תקנים של WiFi, כל מיני תקנים של Bluetooth, וגם TCP/IP רגילגם Reconnaissance, שזה להבין מה קורה בחוץ, וגם כדי לסמלץ (Simulate) התקפות מכל מיני סוגים.אין פה, דרך אגב, בכלים האלה, שוב דבר חדש תחת השמש - זה מיחזור של תקיפות קיימות וידע שכבר קיים, רק שפה ארזו את זה בצורה מאוד נוחה, שכיף להתקין ולהשתמש.אייטם הבא - זה נקרא hyperfine, וזה בעצם כלי ל - Command-line benchmarkingהגעתי אליו דרך Rust, שמשתמשים בו בעצמם כדי לבדוק שהכלי הוא סופר-מהיר.זה כלי גנרי - אם יש לכם איזשהו CLI Tool, אתם יכולים להשתמש בו כדי לעשות benchmarking ל-Command-line ולוודא שאתם תמיד “תחרותיים” מול ה-Performance ,מול איך שה-Command-line שלכם עובד.(אלון) או, חמוד! (רן) זאת אומרת - אתה בודק את הביצועים של ה-CLI שלך . . .נכון, זה CLI Performance?(דותן) כן, זה benchmarking שרמת האבסטרצקיה (Abstraction), ה-Contact שלך מול ה-Command-line הוא ה-Command-line . . . . זו לא ספריה שאתה עכשיו צריך להשתמש ל-Unit Testing שלך או כאלה(רן) כמו Time ,כמו פקודת Time ב-Linux . . . (דותן) האמת שזו אחלה דוגמא - אם היית רוצה להשתמש בפקודת Time בשביל לעשות דבר כזה, מה היית צריך לעשות?היית צריך כנראה להריץ Time כמה פעמים, להגיע לאיזשהו מספר הרצות שנותנות לך Significance סטטיסטי [מובהקות], לעבור על כל הנתונים, להריץ כמה כלים של סטטיסטיקה - ממוצע, Mean וכל מיני שטויות כאלה - ולהציג לך איזשהו כזה Progress Bar וכל מיני דברים כאלה.וזה בסופו של דבר הכלי . . .ואני מניח שמה שהיית רוצה זה שתוציא לי את זה ב-json, כי יש לי CI ואני רוצה להשוות בין Build ל-Build, לעשותכל מיני Diff-ים וכאלה, אני חושב שככה זה עושה את זה יותר מוחשי.(אלון) אפשר להריץ את הכלי על זה על עצמו? זה עובד? להריץ אותו על עצמו ולבדוק כמה מהיר הוא על עצמו? . . . (דותן) האמת שזו אחלה שאלה . . . אני לא יודע אם הם עושים את זה לעצמם . . . . אני חייב להניח שכן, לא בדקתי.(רן) אין סיבה שלא . . .אתה יכול להריץ אותו על עצמו - על עצמו - על עצמו - על עצמו . . . .על הכלי שלך.(דותן) נכון . . .(רן) נשמע כמו רעיון מאוד שימושי, שימוש מאוד טוב לזמן שלך . . . (דותן) פרודוקטיבי, כן . . . (רן) בוא, תנסה . . . (אלון) חבר’ה, אני בעד התחממות כדור הארץ - פשוט אם כולם יעשו, זה יתחמם יותר מהר.(דותן) אפשר גם לשלב - יש את הכלי של ה-Port Scanning:אם אתה מריץ אותו פעם אחת - זה מעיר CISOאם אתה מריץ אותו בתוך ה-hyperfine, שזה מריץ אותו כנראה אלפי פעמים - אז אולי אתה מעיר את כל הצוות . . . [ואת מערך הסייבר](רן) ואז, ברגע שהגעת ל-Port, אתה מתחבר ל-Bitcoin - וכורה . . . [בעסה שכבר אי אפשר לקנות ככה טסלה](דותן) בדיוק(אלון) הפודקאסט עבר נושא, נראה לי . . . [מה אמרנו על טל”ח וייעוץ משפטי?](דותן) אחרי הפרק הזה, כל מיני צוותי Security יתקשרו אלינו ויגידו שהם לא ישנים בלילה[סביר מאוד, רק שזה הוקלט לפני הסבב הנוכחי אז הסיבה כנראה תיהיה שונה מהצפוי . . .]אז האייטם הבא - זה נקרא terraformer וזה נמצא תחת Google Cloud Platform ב-GitHubכלי שעושה “Reverse Terraform”, כלומר - תכוון אותו ל-Infrastructure והוא ייצר קוד.(אלון) *עכשיו* אתה בא עם זה? איפה היית עד היום?!(דותן) זה לא אני, זה הצוות SRE ב-Waze, מסתבר . . . [Created by: Waze SRE](אלון) איזה מגניב!(דותן) ברכות וד”ש . . .(רן) לדעתי ל-AWS יש כזה כבר הרבה זמן . . . אני חושב ש . . . [יש את AWS CloudFormation](דותן) זהו, שגם ל-Terraform . . . לא בטוח של-Terraform…(רן) לדעתי אפילו Terraform הם אלו שייצרו את זה, אבל אני זוכר שראיתי Plug-in כזה ל-AWS גם . . . (דותן) אז פה יש רשימה מטורפת של Providers, אני לא יודע כמה - מן הסתם לא ניסיתי את כל ה-Providers, אז אני לא יודע מה רמת ה . . . אבל מבחינת Cloud-ים אז GCP ו-AWS ו-Azure ו-Alibaba ו-IBM ו-DigitalOcean ועוד ועוד ועוד . . .קצת משוגע אפילו, הייתי אומר, בקטע טוב(רן) מה אתם עושים אצלכם, אלון?אני מבין שאתם משתמשים ב-Terraform, אז איך אתם עושים את זה? מעל GCP, ומה אז?(אלון) יש לנו Terraform, לצערינו עדיין לא על הכלאבל כתבו, כאילו - מאפס, אתה יודע . . . מה זאת אומרת מה עשינו?(רן) כאילו יש לכם, תיאורטית - אתם רוצים להגיע למצב שבו יש לכם את כל סביבת ה-Production, שאפשר להריץ אותה בסקריפט אחד, ומעל זה לפרוש את כל ה-Services והכל - וזה מונע ע”י Terraform, זה הקונספט?(אלון) כן, זה הקונספט - ה-Terraform ב-Infrastructure והכלי CI לאפליקציות, CI/CD, איך שלא . . . (רן) אוקיי . . . (דותן) אני חייב להגיד שיש פה מלא השקעה, מלא . . . בכלי הזה.אם תטיילו ב-Providers, תפתחו Provider אחד לדוגמא - קודם כל להתחבר ל-API, וממש להבין את כל האובייקטים בפנים, ולתרגם אותם ל-Terraformבקיצור - מגניב(אלון) זה אחלה . . . אני אחזור אליך עם כמה זה שימושי - מעניין אם אני אתן לו פרויקט - סביבה - אם הוא יצליח לבנות אותה, כי לא הכל אצלנו ב-Terraform עדיין(דותן) זהו, אז נמשיך לאייטם הבא - יש פה שפה שנקראית GoPlusאני כבר אגיד שאני לא הייתי משתמש בה . . .אבל זו שפה שנכתבה, דומה ל-Go, עבור Data Science.למי שרוצה לשחק, להתנסות - זה תמיד כיף, אבל אני לא יודע אם הייתי משתמש בה באמת בפועללא יודע אם זה בכלל . . . אם יש לזה מטרה ואם זה מייצר משהו פרודוקטיבי.(רן) אני גם לא, דרך אגב . . .(אלון) יש משהו . .. איזה וריאנט על Go, שכבר היה . . . GoPlusPlus אני חושב? . . . [צודק, היה כבר אייטם של רן על goplus, שבצירוף מקרים סטייל ה-Hitchhikers’ Guide הוזכרה בבאמפרס 68 - המקורי, לא זה שהתבלבל בספירה עם הבאמפרס הקודם, שהוזכר בתחילת הפרק הזה . . . Glitch במטריקס?](דותן) כן, יש מלא, האמת . . . יש מלא - אחת הבעיות עם כל השפות ב-Go זה שהן איטיות, באופן מפתיע.יש כאלה שמהירות יותר, נגיד אם מימשו, לא זוכר איזו שפה זו, אבל הייתה שפה שמימשו ב-Go העניין הוא ששפת המטרה הייתה כל כך איטית, שגם אחרי שמימשו את השפה הזו on top of Go, היא הייתה יותר מהירה . . . לא זוכר בדיוק איזו שפה זו.בקיצור - תמיד זה איכזב אותי, זה היה דווקא יכול להיות נחמד, כי למשל - אם אתה לוקח שפה שהיא באופן טיפוסי באה עם חברים, נגיד Clojure שבאה עם כל ה-JVM, ומה שבא לך זה איזשהו Lisp ככה, Light-weight, כייפי, מגניב, שאתה יכול נגיד לארוז כשפת קונפיגורציה או כל מיני שימושים כאלה מעניינים אז אתה יודע שאם זה בנוי ב-Go, אז אתה תקבל Single Binary, ששוקל איזה 9Mb, וסיימת.יש מלא אימפלמנטציות (Implementations) Lisp-like Languages, אבל כולן סופר-איטיות וכאלה . . מגושמות, לצערי.(רן) כן . . . אני גם, דרך אגב, לא חושב שהייתי משתמש בהזאת אומרת - אני אוהב את Go, ואני עושה Data Science - אבל זה לא מתחבר לי, goplus נראית כמו אנקדוטה נחמדה.בסדר - אז אתה יכול להריץ סקריפטים, אבל זה לא באמת . . . לפחות בינתיים, זה לא באמת פרקטיאין לזה את ה-Ecosystem העשיר שיש ל-Python או ב-R או בשפות אחרות, כך שזה באמת יותר צעצוע, לא ממש משהו שימושי, לדעתי.(דותן) כן, זה משהו שטוב להמליץ למתחרים בתור שפה שממש טוב להתעסק איתה . . .(אלון) כן - “תבדוק, ספר לי איך היה” . . .יש את השפה ל-Data Science - ה-Linda? (רן) Julia . . . אחותה . . .(אלון) כן, אחותה, זהו . . . היא אמורה להיות מעניינת, אבל זה . . .(רן) כן, היא מעניינת - אבל יש לה Ecosystem מאוד קטן, אז השפה היא עם Performance גבוה ובאמת מיועדת לחישובים מדעיים, אבל מבחינת ה-Ecosystem זה לא מתקרב למה שיש ב-Ecosystems האחרים של R ושל Python או MATLAB, ככה שרק אם אתה צריך משהו נורא ספציפי שלא מצאתי בשום מקום אחר, ואתה צריך High Performance, אז אתה צריך להחליט האם אתה הולך על Julia או משהו אחר - ++C או Rust או אחריםככה שגם אז - Julia זו לא האופציה היחידה שיש לך שם.(אלון) אגב - גם Fortran . . . לא לשכוח. אישית, אצלנו יש קצת Fortran . . .(דותן) Fortnite . . . (אלון) כן, כמעט . . . (דותן) בינתיים שיניתי קצת את הסדר - יש כאן עוד שפה שנקראית Starlark - בטח רן מכיר . . .זאת שפת קונפיגורציה, שנמצאית מאחורי Bazel, ואפשר להשתמש בה באופן עצמאיאיך נראית השפה הזאת? טיפה Python-י, וטיפה, נקרא לזה פרוגרמבילי (Programmable) - אפשר להריץ שם כל מיני לופים (Loops) ושטויות כאלה, אבל ב-end-state של הדבר הזה זה אמור להיות Configuration Language.עוד פעם - לא יודע . . . אם מישהו צריך Configuration Language אז . . . האמת, יש מצבים כאלה, שאתה רוצה להיות מאוד Express-י, אתה בונה כלי ואתה רוצה להיות מאוד Express-י בקונפיגורציה שלו.נגיד - קונפיגורציה שמרגישה כמו Terraform מבחינת איך שזה מרגיש, או NGINXזה לא ממש Yaml וזה לא ממש תכנות - אז אני תמיד מחפש את אלה.(רן) אז כן, אני יודע את השפה - קודם כל, כשמסתכלים על זה זה נראה כמו Python, בגדולאבל הפרוייקט הזה הוא למעשה ממש ב-Go, אז כנראה Go-interpreter ל-Python, או למשהו שדומה ל-Python.עכשיו, זה לא Python Per se - זו כן שפת קונפיגורציה, אבל זה קצת מזכיר לי קונספט של שפה אחרת שנקראית Jsonnet, אם אני זוכר
Node.js has been using a derivative of nginx's parser with a lot of customization/rewrite since its inception. Despite being fast enough, the project architecture made it very hard to maintain in a long run. To mitigate that, the author has created a tool to generate the new HTTP parser called “llhttp” from the TypeScript code in understandable, verifiable, and maintainable way. Incidentally, the performance of “llhttp” is two times better than of the old parser. In this talk we'll walk through the basics of generating such parsers and how “llhttp” works.
This week Dave tackles parsing performance for FMPerception Next and Joe provides a midway update on his Month of Babylon JS project. Dave's Babylon JS Scene ([Dynamic Texture Example | Babylon.js Playground](https://playground.babylonjs.com/#5ZCGRM#1300)) A Month of Babylon JS blog posts (https://radicalappdev.com/a-month-of-babylon-js/) Week One Project: Breathe (https://webxr.radicalappdev.com/demo/breathe.php) Week Two Project: Terrarium (https://webxr.radicalappdev.com/demo/terrarium.php) @quaternius on Twitter (https://twitter.com/quaternius) Contact us Joe on Twitter (https://twitter.com/radicalappdev) Dave on Twitter (https://twitter.com/designdb) Follow up (https://project-update.com/contact)
Are you curious about how Parsec is implemented behind the scenes? Cameron Gera and Taylor Fausak follow Antoine Leblanc’s walkthrough. https://hasura.io/blog/parser-combinators-walkthrough/ http://dev.stephendiehl.com/fun/002_parsers.html
Добрый день уважаемые слушатели. Представляем новый выпуск подкаста RWpod. В этом выпуске: Ruby Rails 6.1 adds values_at attribute method for Active Record Static Typing for Ruby How Fast are Ractors? 1.5 is the midpoint between 0 and infinity in Ruby Moving my serverless project to Ruby on Rails A Trip Down Memory Lane With Derailed Benchmarks Lib-ruby-parser - a Ruby parser written in Rust Continuous Deployment with Rails & GitHub Actions (video) Web Flash Animations Live Forever at the Internet Archive Back/forward cache Deep Dive into Page Lifecycle API Chrome DevTools: Record tests with the puppeteer recorder Etebase - an open source and end-to-end encrypted Firebase alternative Zettlr - a Markdown Editor for the 21st century ODIFF - the fastest in the world pixel-by-pixel image difference tool Reading-time - medium’s like reading time estimation
Even with seeming opposites Animals understand that there is a greater equalizer than whohas stripes of one kind or another. That is the dictum of balance between all beings on Earth. The illusion of one being more powerful is only in the human experience as Animals always know better.https://www.bbc.com/future/article/20191031-the-truth-behind-why-zebras-have-stripeshttps://www.livescience.com/6305-study-reveals-creatures-spots-stripes.htmlhttp://patft.uspto.gov/netacgi/nph-Parser?Sect1=PTO1&Sect2=HITOFF&d=PALL&p=1&u=%2Fnetahtml%2FPTO%2Fsrchnum.htm&r=1&f=G&l=50&s1=10,820,976.PN.&OS=PN/10,820,976&RS=PN/10,820,976
The release of Python 3.9 introduced a new parser that paves the way for brand new features. Every programming language has its own specific syntax for representing the logic that you are trying to express. The way that the rules of the language are defined and validated is with a grammar definition, which in turn is processed by a parser. The parser that the Python language has relied on for the past 25 years has begun to show its age through mounting technical debt and a lack of flexibility in defining new syntax. In this episode Pablo Galindo and Lysandros Nikolaou explain how, together with Python's creator Guido van Rossum, they replaced the original parser implementation with one that is more flexible and maintainable, why now was the time to make the change, and how it will influence the future evolution of the language.
İşinizde sürekli aynı şeyleri tekrar ettiğiniz oluyor mu? Sürekli bildiğiniz şeyleri yaparak kendinizi hiç geliştiremediğinizi düşündüğünüz anlar peki? Monotonluk ve sürekli tekrarlarla geçen zamandan bıktınız, acaba kalmalı mı, gitmeli mi? Hiç düşündünüz mü, belki de bu dönem sizin kariyerinizdeki o beklediğiniz büyük sıçrayış için elinize geçen en büyük fırsat olabilir.
Subscriber-Only: Today's episode is available only to subscribers. If you are a Point-Free subscriber you can access your private podcast feed by visiting https://www.pointfree.co/account. --- We round out our parsing recap by reintroducing that functional trio of operators: map, zip, and flat-map. We'll use them to build up some complex parsers and make a few more ergonomic improvements to our library along the way.
Subscriber-Only: Today's episode is available only to subscribers. If you are a Point-Free subscriber you can access your private podcast feed by visiting https://www.pointfree.co/account. --- It's time to revisit one of our favorite topics: parsing! We want to discuss lots of new parsing topics, such as generalized parsing, performance, reversible parsing and more, but before all of that we will start with a recap of what we have covered previously, and make a few improvements along the way.
Mamut Apto 2.0 GIVEAWAY https://gleam.io/competitions/GSV2y-mamut-apto-20-gunstock-giveaway-rendered-reality On todays strong episode of COFFEE & VR, we attack the Facebook login debate, unveil some new Geforce RTX 30 series leaks, and how Apple is working on VR boundaries. Frostpoint Beta Sign Up https://frostpointvrbeta.com/ Apple Filed Patent http://appft.uspto.gov/netacgi/nph-Parser?Sect1=PTO2&Sect2=HITOFF&u=%2Fnetahtml%2FPTO%2Fsearch-adv.html&r=22&p=1&f=G&l=50&d=PG01&S1=(apple.AANM.+AND+20200813.PD.)&OS=aanm/apple+and+pd/8/13/2020&RS=(AANM/apple+AND+PD/20200813) GlockulusVR G17 Pistol for Oculus Touch https://www.etsy.com/listing/815285414/g17-vr-pistol-grip-for-oculus-touch?ref=shop_home_active_2&crt=1 VR Cover Face Mask: https://vrcover.com/product/vr-cover-cloth-mask/?itm=492 Facial Interface & Foam Replacement Set V2 for Oculus Quest: https://vrcover.com/product/facial-interface-foam-replacement-set-v2-for-oculus-quest/?itm=492
PHP Internals News: Episode 66: Namespace Token, and Parsing PHP London, UK Thursday, August 13th 2020, 09:29 BST In this episode of "PHP Internals News" I chat with Nikita Popov (Twitter, GitHub, Website) about his Namespaced Names as a Single Token, and Parsing PHP. The RSS feed for this podcast is https://derickrethans.nl/feed-phpinternalsnews.xml, you can download this episode's MP3 file, and it's available on Spotify and iTunes. There is a dedicated website: https://phpinternals.news Transcript Derick Rethans 0:16 Hi, I'm Derick, and this is PHP internals news, a weekly podcast dedicated to demystifying the development of the PHP language. This is Episode 66. Today I'm talking with Nikita Popov about an RFC that he's made, called namespace names as token. Hello Nikita, how are you this morning? Nikita 0:35 I'm fine Derick, how are you? Derick Rethans 0:38 I'm good as well, it's really warm here two moments and only getting hotter and so. Nikita 0:44 Same here. Same here. Derick Rethans 0:46 Yeah, all over Europe, I suppose. Anyway, let's get chatting about the RFC otherwise we end up chatting about the weather for the whole 20 minutes. What is the problem that is RFC is trying to solve? Nikita 0:58 So this RFC tries to solve two problems. One is the original one, and the other one turned up a bit later. So I'll start with the original one. The problem is that PHP has a fairly large number of different reserved keyword, things like class, like function, like const, and these reserved keywords, cannot be used as identifiers, so you cannot have a class that has the name list. Because list is also a keyword that's used for array destructuring. We have some relaxed rules in some places, which were introduced in PHP 7.0 I think. For example, you can have a method name, that's a reserved keyword, so you can have a method called list. Because we can always disambiguate, this versus the like real list keyword. But there are places where you cannot use keywords and one of those is inside namespace names. So to give a specific example of code that broke, and that was my, my own code. So, I think with PHP 7.4, we introduced the arrow functions with the fn keyword to work around various parsing issues. And I have a library called Iter, which provides various generator based iteration functions. And this library has a namespace Iterfn. So Iter backslash fn. Because it has this fn keyword as part of the name, this library breaks in PHP 7.4. But the thing is that this is not truly unnecessary breakage. Because if we just write Iter backslash fn, there is no real ambiguity there. The only thing this can be is a namespace name, and similarly if you import this namespace then the way you actually call the functions is using something like fn backslash operator. Now once again you have fn directly before a backslash so there is once again no real ambiguity. Where the actual ambiguity comes from is that we don't treat namespace names as a single unit. Instead, we really do treat them as the separate parts. First one identifier than the backslash, then other identifier, then the backslash, and so on. And this means that our reserved keyword restrictions apply to each individual part. So the whole thing. The original idea behind this proposal was actually to go quite a bit further. The proposal is that instead of treating all of these segments of the name separately, we treat it as a single unit, as a single token. And that also means that it's okay to use reserved keywords inside it. As long as like the whole name, taken together is not a reserved keyword. The idea of the RFC was to, like, reduce the impact of additional reserved keywords, introduced in the future so in PHP eight we added the match keyword, which can cause similar issues, and in PHP 8.1 maybe we're going to add an enum keyword, and so on. Each time we add a keyword we're breaking code. The idea of this RFC was to reduce the breakage, and the original proposal, not just allowed these reserved keywords inside namespace names, but also removed the restrictions we have on class names and function names and so on. So you would actually be able to do something like class Match. Then, if you wanted to use the class, you would have to properly disambiguate it. For example, by using a fully qualified name, starting with a backslash or by well or using any other kind of qualified name. So you wouldn't be able to use an isolated match, but you could use backslash match, or some kind of things they just named backslash match. However, in the end, I dropped support for this part of the RFC, because there were some concerns that would be confusing. For example if you write something like isset x, that would call the isset on built in language construct. And if you wrote backslash isset x, that would call a user defined, isset function, because we no longer have this reserved keyword restriction. While this is like an ambiguous from a language perspective, the programmer might get somewhat confused. So if we want to go in this direction we probably want to add more validation about which reserved keywords are allowed in certain positions and I didn't want to deal with that at this point. Derick Rethans 5:33 Also by removing it, you make the RFC smaller which gives usually a better chance for getting them accepted anyway. Nikita 5:40 Yes. Derick Rethans 5:41 You mentioned in the introduction that originally you tried to solve the problem of not being able to use reserved keywords in namespace names. It ended up solving another problem that at the moment you wrote this, you wasn't quite aware of. What is this other problem? Nikita 5:57 The other problem is the famous or infamous issue of the attributes syntax, which we are having a hard time solving. The backstory there is that originally the attributes introduced the PHP eight use double angle brackets, or shift operators as delimiters. Derick Rethans 6:18 I've been calling it the pointy one. Nikita 6:20 Okay, the pointy one. And then there was a proposal accepted to instead change this to double at operator at the start, because that's kind of more similar to what other languages do; they use one @, we will use two @s on to avoid the ambiguity with the error suppression operator. Unfortunately, it turned out that as initially proposed the syntax is ambiguous. All because of quite an edge case, I would say. So attributes in PHP are going to be allowed on parameters, and then parameters can have a type. You can have a sequence where you have @@, then the attribute name, then the type name, then the parameter name. And the problem is that because we treat each part of the name separately, between the backslashes, there can also be whitespace in between. So you can have something like a, whitespace, backslash, whitespace, b. Now the question is, in this case does the ab belong to the attribute so is it an attribute name, or is only the a an attribute name, and b is the type name of the parameter. Yeah that's ambiguous and we can't really resolve it unless we have some kind of arbitrary rule, and while the original proposal did introduce an arbitrary rule that the attribute name cannot contain whitespace, it will be interpreted in a particular way. And what this proposal, effectively does is to instead say that names, generally cannot contain whitespace. Derick Rethans 8:01 Your namespace names as token RFC basically disallows spaces for namespace names which you currently can have? Nikita 8:10 Right. So I don't think anyone intentionally uses whitespace inside namespace names. Or actually, you could even have comments inside them. But it is currently technically allowed, and one might introduce it as a typo. That means that this change is a backwards compatibility break. Because you can have currently whitespace in names, but based on static analysis of open source projects, we found that this is pretty rare. So I think we found something like five occurrences inside the top thousand packages. There is one other backwards compatibility break that is in practice I think much more serious. And that's the fact that it changes our token representation. So instead of representing just names as a string separates a string. We now have three different tokens, which is the one for qualified names, one for fully qualified names. So with everything backslash and one for namespace relative names, which is if you have namespace backslash at the start, and namespace I mean, here literally. So this is a very rarely used on PHP feature. Derick Rethans 9:26 I did not know it existed. Nikita 9:28 I also actually did some analysis for that I found very few uses in the wild. I think mostly people writing the static analysis tools know about that, no one else. But the other problem is that this breaks static analysis tools because they now have to deal with a new token representation. Derick Rethans 9:47 We have been talking about these tokens. What are tokens on like the smallest level. Nikita 9:51 PHP has, what's a three phase compilation process where first we convert the raw source code, which is just a sequence of characters into tokens, which are slightly larger semantic units. So instead of having only characters we recognize reserved keywords and recognize identifiers and operators, and so on. Then on the second phase, we have the parser which converts these individual tokens into larger semantic structures like addition expression, or an assignment expression or class expression and so on. Finally we convert the result of that which is a parse tree or an abstract syntax tree into our actual virtual machine instructions, our bytecode representation. Derick Rethans 10:41 And then PHP eight down to machine code, if the JIT kicks in. I remember from a long time ago when I was in uni, is that there are different kinds of parsers and from what I understand PHP's parser is a context free parser. What is is a context free parser? Nikita 10:57 Well a context free in particular is a term from the CompSci theory, where we separate parsers into four languages, into four levels, though I think this is not a super useful distinction, when it comes to language parsing. Because general context free parser has complexity of O(n^3). Like if you have a very large file, it will take very long to parse it could be with the general context free parser. So what we'll be do in practice are more like deterministic context free languages, which is a smaller set. The formal definition there are a set that can be parsed by deterministic push down automaton but I don't think you want to go there. Derick Rethans 11:41 No, not today. Nikita 11:44 Because in practice actually what we do in PHP is even more limited than that. So the parser we use in PHP is called LA/LR1 parser. So that's a look ahead, left to right, right most derivation parser Derick Rethans 11:59 Also mouthful, but it's simpler to explain. Nikita 12:02 I think really the most relevant parts of this algorithm to us is the "1". What the one means is that we can only use a single look ahead token. When we recognize some kind of structure, we have to be able to recognize it by looking at the current token, and that the next token. At each parsing step, those two things have to be sufficient to recognize and to disambiguate syntax. Actually even more restrictive than that but I think that's a good mental model. This is really, I think the core problem we often have when introducing new syntax, so this is the problem we had with the short arrow syntax, short closure syntax. There we would need not one token of look ahead but an infinite potentially in finite number of look ahead. Derick Rethans 12:55 In case the function keyword is still being used. Nikita 12:59 Yes, that's why we added the fn keyword to what the problem because with the fn keyword we can immediately say at the start of the start of the arrow function that this is an arrow function. And we will have similar problems if we introduce generics in the future, at which point we might actually just give up and switch to a more powerful parser. The parser generator we use, which is bison, has two modes. One is the LA/LR mode. And the other one is the GLR mode. They both use the same base parsing algorithm at first, but the GLR mode allows forking it. So if it encounters an ambiguity, it will actually like try to pursue both possibilities, which is of course a lot less efficient, but it allows us to parse more ambiguous structures. Derick Rethans 13:50 Wouldn't that not cause a problem that has some cases because every token will be ambiguous, it will explode in like an exponential way? Nikita 13:57 Yes, I mean it's worst case exponential. But if you like have a careful choice of where you are ambiguous, then you can see that okay with this particular ambiguity, you can actually get worse still linear for valid code. Derick Rethans 14:14 That makes a decision between two possibilities pretty much at that stage. Nikita 14:18 But I think the danger there is that one might not notice when one introduces ambiguities, or maybe not real syntax ambiguities, you do tend to notice those. But ambiguities on the parser level where the parser cannot distinguish possibilities based on the single token for get. Derick Rethans 14:41 Was there in the past being ambiguities introducing a PHP language, that we fail to see? Nikita 14:46 I don't think so. I mean, because we use this parser generator. It tells us if we have ambiguities, so either in the form of shift/reduce or reduce/reduce conflicts. So we cannot really introduce ambiguities. We can it's possible to suppress them, and we actually did have a couple of suppressed conflicts in the past, this was for one particular very well known ambiguity, which is the dangling elseif/else. Basically that the else part of an ifelse. So if you have a nested if without braces. Then there is an else afterwards, the else could ever belong to the inner if or to the outer if, but this is like a standard ambiguity in all C like languages that allow omitting two braces. Derick Rethans 15:35 That's why coding standard say: Always use braces. The patch belonging to this RFC has been merged. So it means that in PHP eight we'll have the longer or the new token names. Do you think that in the future we'll have to make similar choices or similar adjustments to be able to add more syntax? Nikita 15:56 Yes. As I was already saying before, I think these syntax conflicts, they crop up pretty often. This is like very much not an isolated occurrence. If it's really fundamental. If there are any fundamental problems in the PHP syntax where we made bad choices. I think it's pretty normal that you do run into conflicts at some point. So, especially when it comes to generics using angle brackets, in pretty much all languages I deal with my major parsing issues when it comes to that. For example Rust has the famous turbo fish operator, where you have to like write something like colon colon angle brackets to disambiguate things in this specific situation. Derick Rethans 16:49 I just listened to a podcast on the Go language where they're also talking about adding generics, and they had the exact same issue with parsing it. I think they ended up going for the square bracket syntax instead of the angle brackets, or the pointies, as I mentioned. Nikita 17:04 Everyone uses the pointy brackets syntax, despite all those parsing issues because everyone else use it. For PHP for example, we wouldn't be able to use square brackets, because those are used for array access, and that would be completely ambiguous, but we could use curly braces. Well, people have told me that they would not appreciate that. Let's say it like this. Derick Rethans 17:31 Is it's finally time to start using the Unicode characters for syntax? No! Nikita 17:38 Although I did see that, apparently, some people use non breaking spaces inside their test names, because it looks nice and is pretty crazy. Derick Rethans 17:49 I like using it in my class names as well instead of using study caps. Nikita 17:52 I hope that's a joke, you can ever tell. Derick Rethans 17:54 I like using emojis instead. That's also a joke, but I do use it in my presentations and my slides just to jazz them up a little bit. Nikita 18:01 This is an advantage of PHP, because our Unicode support in identifiers works because the files are in UTF-8. That means that all the non ASCII characters have the top bit set, and we just allow all characters with a top bit set as identifiers. And that means that there is no validation at all that identifiers used contain only like identifier or letter characters, so you can use all of the emojis and whitespace characters and so on, you won't have any restrictions. Derick Rethans 18:36 And that was possible for as long as PHP 3 as far as I know. It's a curious thing because this is something that popped up quite a lot when we're discussing, or arguing, about Unicode. You shouldn't allow Unicode because then you can have funny characters in your function names like accented characters and stuff like that, and then also always fun to point out that yeah you could have done that since 1997. Anyhow, would you have anything else to add? Nikita 19:01 I don't think so. Derick Rethans 19:02 Well thank you very much for having a chat with me this morning. And I'm sure we'll see each other at some other point in the future. Nikita 19:09 Thanks for having me once again Derick. Derick Rethans 19:12 Thanks for listening to this instalment of PHP internals news, the weekly podcast dedicated to demystifying the development of the PHP language. I maintain a Patreon account for supporters of this podcast, as well as the Xdebug debugging tool, you can sign up for Patreon at https://drck.me/patreon. If you have comments or suggestions, feel free to email them to derick@phpinternals.news. Thank you for listening, and I'll see you next week. Show Notes RFC: Treat namespaced names as single token GLR Parser LALR(1) Parser Iter Library RFC: Match expression Credits Music: Chipper Doodle v2 — Kevin MacLeod (incompetech.com) — Creative Commons: By Attribution 3.0
This episode is an initial introduction to lexers and parsers. We'll talk about creating a parser using Antlr with the Kotlin grammar spec.
Das Software-Auge: Was der Parser mit deiner Bewerbung macht Die Personalabteilung: interner Dienstleister in der Personalauswahl Die Fachabteilung: hier fällt die Entscheidung über deine Bewerbung
What is a parser?yacc/lexAST (Abstract Syntax Tree) vs. CST (Concrete Syntax Tree)JSON decoding vs. parsingJSON decoding is validating a data structure that has already been parsed. Assumes a valid structure.elm/parserHaskell parsec library - initially used for the Elm compiler, now uses custom parserWhat is a parser?One character at a timeTakes input string, turns it into structued data (or error)ComittingBacktrackable parserschompIf and chompWhileParser.oneOfBenchmarkingelm-explorations/benchmarkBenchmark before making assumptions about where performance bottlenecks areWrite unit tests for your parserGFM table parsing live streamParser.succeedElm regex vs elm parserIndications that you might be better off with parserLots of regex capture groupsWant very precise error messagesGetting source code locationsParser.getRow and getColParser.getSourceParser.loopLoop docs in elm/parserLooping allows you to track state and parse groups of expressionsLoop over repeated expression type, tell it termination condition with Step type (Loop and Done)Error MessagesYou can fail with Parser.problemParser.Advanced module is designed to give you more precise context and error messages on failureParser.Advanced.inContextGetting Started with a Parser ProjectWrite lots of unit tests with elm-test!There's likely a specification doc if you're parsing a language or formal syntaxCommonMark SpecGitHub-Flavored Markdown Specdillonkearns/elm-markdown test results directory from executing spec examplesLook at examples of parser projectsdillonkearns/elm-markdownelm-in-elm parserelm-in-elm conference talkmdgriffith/elm-markup - good reference for parsing, fault-tolerant parsing, and giving nice error messagesTereza's YAML parserTereza's elm conf talk "Demystifying Parsers"Jeroen's elm/parser Ellie"It's not hacking if you have tests."Look at elm/parser docs and resourceselm/parser project's semantics document describes backtrackable behavior in detail
I begin the episode with some background patent and trademark law, then discuss the recent Order entered in the Chanel v. The RealReal case Here are the patent links I discuss in the episode : 1. Chanel Patent : Jar with Dispensing Pump http://patft.uspto.gov/netacgi/nph-Parser?Sect1=PTO2&Sect2=HITOFF&u=%2Fnetahtml%2FPTO%2Fsearch-adv.htm&r=3&p=1&f=G&l=50&d=PTXT&S1=chanel.ASNM.&OS=an/chanel&RS=AN/chanel 2. Chanel Patent : Handbag http://patft.uspto.gov/netacgi/nph-Parser?Sect1=PTO2&Sect2=HITOFF&u=%2Fnetahtml%2FPTO%2Fsearch-adv.htm&r=77&p=2&f=G&l=50&d=PTXT&S1=chanel.ASNM.&OS=an/chanel&RS=AN/chanel 3. The case is Chanel, Inc., v. The RealReal, Inc., 1:18-cv-10626 (SDNY).
Sponsored by Datadog: pythonbytes.fm/datadog Michael #1: PSF / JetBrains Survey via Jose Nario Let’s talk results: 84% of people who use Python do so as their primary language [unchanged] Other languages: JavaScript (down), Bash (down), HTML (down), C++ (down) Web vs Data Science languages: More C++ / Java / R / C# on Data Science side More SQL / JavaScript / HTML Why do you mainly use Python? 58% work and personal What do you use Python for? Average answers was 3.9 Data analysis [59% / 59% — now vs. last year] Web Development [51% / 55%] ML [40% / 39%] DevOps [39% / 43%] What do you use Python for the most? Web [28% / 29%] Data analysis [18% / 17%] Machine Learning [13% / 11%] Python 3 vs Python 2: 90% Python 3, 10% Python 2 Widest disparity of versions (pro 3) is in data science. Web Frameworks: Flask [48%] Django [44%] Data Science NumPy 63% Pandas 55% Matplotlib 46% Testing pytest 49% unittest 30% none 34% Cloud AWS 55% Google 33% DigitalOcean 22% Heroku 20% Azure 19% How do you run code in the cloud (in the production environment) Containers 47% VMs 46% PAAS 25% Editors PyCharm 33% VS Code 24% Vim 9% tool use version control 90% write tests 80% code linting 80% use type hints 65% code coverage 52% Brian #2: Hypermodern Python Claudio Jolowicz, @cjolowicz An opinionated and fun tour of Python development practices. Chapter 1: Setup Setup a project with pyenv and Poetry, src layout, virtual environments, dependency management, click for CLI, using requests for a REST API. Chapter 2: Testing Unit testing with pytest, using coverage.py, nox for automation, pytest-mock. Plus refactoring, handling exceptions, fakes, end-to-end testing opinions. Chapter 3: Linting Flake8, Black, import-order, bugbear, bandit, Safety. Plus more on managing dependencies, and using pre-commit for git hooks. Chapter 4: Typing mypy and pytype, adding annotations, data validation with Desert & Marshmallow, Typeguard, flake8-annotations, adding checks to test suite Chapter 5: Documentation docstrings, linting docstrings, docstrings in nox sessions and test suites, darglint, xdoctest, Sphinx, reStructuredText, and autodoc Chapter 6: CI/CD CI with GithHub Actions, reporting coverage with Codecov, uploading to PyPI, Release Drafter for release documentation, single-sourcing the package version, using TestPyPI, docs on RTD The series is worth it even for just the artwork. Lots of fun tools to try, lots to learn. Michael #3: Open AI Jukebox via Dan Bader Listen to the songs under “Curated samples.” A neural net that generates music, including rudimentary singing, as raw audio in a variety of genres and artist styles. Code is available on github. Dataset: To train this model, we crawled the web to curate a new dataset of 1.2 million songs (600,000 of which are in English), paired with the corresponding lyrics and metadata from LyricWiki. The top-level transformer is trained on the task of predicting compressed audio tokens. We can provide additional information, such as the artist and genre for each song. Two advantages: first, it reduces the entropy of the audio prediction, so the model is able to achieve better quality in any particular style; second, at generation time, we are able to steer the model to generate in a style of our choosing. Brian #4: The Curious Case of Python's Context Manager Redowan Delowar, @rednafi A quick tour of context managers that goes deeper than most introducitons. Writing custom context managers with __init__, __enter__, __exit__. Using the decorator contextlib.contextmanager Then it gets even more fun Context managers as decorators Nesting contexts within one with statement. Combining context managers into new ones Examples Context managers for SQLAlchemy sessions Context managers for exception handling Persistent parameters across http requests Michael #5: nbstripout via Clément Robert In the latest episode, you praised NBDev for having a git hook that strips out notebook outputs. strip output from Jupyter and IPython notebooks Opens a notebook, strips its output, and writes the outputless version to the original file. Useful mainly as a git filter or pre-commit hook for users who don’t want to track output in VCS. This does mostly the same thing as the Clear All Output command in the notebook UI. Has a nice youtube tutorial right in the pypi listing Just do nbstripout --``install in a git repo! Brian #6: Write ups for The 2020 Python Language Summit Guido talked about this in episode 179 But these write-ups are excellent and really interesting. Should All Strings Become f-strings?, Eric V. Smith Replacing CPython’s Parser with a PEG-based parser, Pablo Galindo, Lysandros Nikolaou, Guido van Rossum A Formal Specification for the (C)Python Virtual Machine, Mark Shannon HPy: a Future-Proof Way of Extending Python?, Antonio Cuni CPython Documentation: The Next 5 Years, Carol Willing, Ned Batchelder Lightning talks (pre-selected) What do you need from pip, PyPI, and packaging?, Sumana Harihareswara A Retrospective on My "Multi-Core Python" Project, Eric Snow The Path Forward for Typing, Guido van Rossum Property-Based Testing for Python Builtins and the Standard Library, Zac Hatfield-Dodds Core Workflow Updates, Mariatta Wijaya CPython on Mobile Platforms, Russell Keith-Magee Wanted to bring this up because Python is a living language and it’s important to pay attention and get involved, or at least pay attention to where Python might be going. Also, another way to get involved is to become a member of the PSF board of directors What’s a PSF board of directors member do? video There are some open seats, Nominations are open until May 31 Extras: Michael: Updated search engine for better result ranking Windel Bouwman wrote a nice little script for speedscope https://github.com/windelbouwman/pyspeedscope (follow up from Austin profiler) Jokes: “Due to social distancing, I wonder how many projects are migrating to UDP and away from TLS to avoid all the handshakes?” - From Sviatoslav Sydorenko “A chef and a vagrant walk into a bar. Within a few seconds, it was identical to the last bar they went to.” - From Benjamin Jones, crediting @lufcraft Understanding both of these jokes is left as an exercise for the reader.
The US patents and trademark office today published a patent by Visa [1], the card payments network, for a digital currency issued on a blockchain [2-4]. This is not their first patent in this area [5]. 1. http://appft1.uspto.gov/netacgi/nph-Parser?Sect1=PTO1&Sect2=HITOFF&d=PG01&p=1&u=/netahtml/PTO/srchnum.html&r=1&f=G&l=50&s1=20200151682.PGNR. 2. https://www.forbes.com/sites/jasonbrett/2020/05/14/visa-submits-patent-application-for-digital-dollar-using-blockchain/ 3. https://www.coindesk.com/visa-digital-fiat-currency 4. https://news.bitcoin.com/visa-cryptocurrency-system/ 5. http://patft.uspto.gov/netacgi/nph-Parser?Sect1=PTO2&Sect2=HITOFF&p=1&u=%2Fnetahtml%2FPTO%2Fsearch-bool.html&r=1&f=G&l=50&co1=AND&d=PTXT&s1=%22Visa+International+Service+Association%22&OS=%22Visa+International+Service+Association%22&RS=%22Visa+International+Service+Association%22
In this episode Jim Carlson and I discuss how he brought Latex to the browser and made a better writing experience for Markdown and LaTex on the web.
Part 4, the final episode. It has been an honor to showcase Soheyl's life journey. I deeply feel that the world needs to know that humanity walks among us in the quietest ways. Simple acts, grand acts, opening and door to supplying power. We can all do our part, but are we? Websites African and Laotian technology innovations www.smartinnova.com Fresh Canadian Spirulina www.spiruvive.com Capturing and converting greenhouse gases www.algabloom.com My collection of Tribal Art http://champagallery.com/index.php?p=khatribal My leaf collector system sold at Canadian Tire hardware stores http://www.powerbagsystems.com/index.php?p=video Mitigating Climate change http://www.equicarbon.com/index.php?p=who-SoheylMottahedeh Videos Rural Electrification by barefoot Africans (click on mpeg) Turbine manufacturing: wmv or mpeg format Power of Algae https://www.youtube.com/watch?v=T001d4ypwvU&t=7s Low-cost Algae biofarming solution https://www.youtube.com/watch?v=NFiIhf4tK7k Interview of Soheyl , CEO of SpiruVive - Fresh Canadian Spirulina https://www.youtube.com/watch?v=G7034kGWckw&t=8s Newspapers & Media Release Richmond News : Pondering the future with a Superfood https://www.richmond-news.com/business/pondering-the-future-with-a-superfood-1.2161428 Australian Qponics selectects AlgaBloom https://www.google.com/search?q=qponics+algabloom&rlz=1C1AVSX_enUS436CN458&oq=qponics+alagabloom&aqs=chrome.1.69i57j33.8837j0j8&sourceid=chrome&ie=UTF-8 Participant representing Zaire at UNIDO Together for a Sustainable Future - 50 Year https://open.unido.org/api/documents/4789823/download/REPORT.%20(CONGRESS%20ON%20'TECHNOLOGY%20FOR%20THE%20PEOPLE')%20(10262.en) Patents: The first 17 Canadian Patents in this list are mine http://www.ic.gc.ca/opic-cipo/cpd/eng/search/results.html?query=mottahedeh&start=1&num=10&type=basic_search&newSearch=0 These 4 US Patents are mine http://appft.uspto.gov/netacgi/nph-Parser?Sect1=PTO2&Sect2=HITOFF&p=1&u=%2Fnetahtml%2FPTO%2Fsearch-bool.html&r=0&f=S&l=50&TERM1=mottahedeh&FIELD1=&co1=AND&TERM2=soheyl&FIELD2=&d=PG01
Who is ready for Part 3? I personally, do not feel, like this episode needs an introduction. Get ready! Websites African and Laotian technology innovations www.smartinnova.com Fresh Canadian Spirulina www.spiruvive.com Capturing and converting greenhouse gases www.algabloom.com My collection of Tribal Art http://champagallery.com/index.php?p=khatribal My leaf collector system sold at Canadian Tire hardware stores http://www.powerbagsystems.com/index.php?p=video Mitigating Climate change http://www.equicarbon.com/index.php?p=who-SoheylMottahedeh Videos Rural Electrification by barefoot Africans (click on mpeg) Turbine manufacturing: wmv or mpeg format Power of Algae https://www.youtube.com/watch?v=T001d4ypwvU&t=7s Low-cost Algae biofarming solution https://www.youtube.com/watch?v=NFiIhf4tK7k Interview of Soheyl , CEO of SpiruVive - Fresh Canadian Spirulina https://www.youtube.com/watch?v=G7034kGWckw&t=8s Newspapers & Media Release Richmond News : Pondering the future with a Superfood https://www.richmond-news.com/business/pondering-the-future-with-a-superfood-1.2161428 Australian Qponics selectects AlgaBloom https://www.google.com/search?q=qponics+algabloom&rlz=1C1AVSX_enUS436CN458&oq=qponics+alagabloom&aqs=chrome.1.69i57j33.8837j0j8&sourceid=chrome&ie=UTF-8 Participant representing Zaire at UNIDO Together for a Sustainable Future - 50 Year https://open.unido.org/api/documents/4789823/download/REPORT.%20(CONGRESS%20ON%20'TECHNOLOGY%20FOR%20THE%20PEOPLE')%20(10262.en) Patents: The first 17 Canadian Patents in this list are mine http://www.ic.gc.ca/opic-cipo/cpd/eng/search/results.html?query=mottahedeh&start=1&num=10&type=basic_search&newSearch=0 These 4 US Patents are mine http://appft.uspto.gov/netacgi/nph-Parser?Sect1=PTO2&Sect2=HITOFF&p=1&u=%2Fnetahtml%2FPTO%2Fsearch-bool.html&r=0&f=S&l=50&TERM1=mottahedeh&FIELD1=&co1=AND&TERM2=soheyl&FIELD2=&d=PG01
Are you all ready? I hope you have been waiting all week for this launch! It is my honor to air part two of this series for all of you. Grab a coffee, sit back, relax and get ready...part two will not disappoint. Here is some more information to get to know Soheyl even better. Websites African and Laotian technology innovations www.smartinnova.com Fresh Canadian Spirulina www.spiruvive.com Capturing and converting greenhouse gases www.algabloom.com My collection of Tribal Art http://champagallery.com/index.php?p=khatribal My leaf collector system sold at Canadian Tire hardware stores http://www.powerbagsystems.com/index.php?p=video Mitigating Climate change http://www.equicarbon.com/index.php?p=who-SoheylMottahedeh Videos Rural Electrification by barefoot Africans (click on mpeg) Turbine manufacturing: wmv or mpeg format Power of Algae https://www.youtube.com/watch?v=T001d4ypwvU&t=7s Low-cost Algae biofarming solution https://www.youtube.com/watch?v=NFiIhf4tK7k Interview of Soheyl , CEO of SpiruVive - Fresh Canadian Spirulina https://www.youtube.com/watch?v=G7034kGWckw&t=8s Newspapers & Media Release Richmond News : Pondering the future with a Superfood https://www.richmond-news.com/business/pondering-the-future-with-a-superfood-1.2161428 Australian Qponics selectects AlgaBloom https://www.google.com/search?q=qponics+algabloom&rlz=1C1AVSX_enUS436CN458&oq=qponics+alagabloom&aqs=chrome.1.69i57j33.8837j0j8&sourceid=chrome&ie=UTF-8 Participant representing Zaire at UNIDO Together for a Sustainable Future - 50 Year https://open.unido.org/api/documents/4789823/download/REPORT.%20(CONGRESS%20ON%20'TECHNOLOGY%20FOR%20THE%20PEOPLE')%20(10262.en) Patents: The first 17 Canadian Patents in this list are mine http://www.ic.gc.ca/opic-cipo/cpd/eng/search/results.html?query=mottahedeh&start=1&num=10&type=basic_search&newSearch=0 These 4 US Patents are mine http://appft.uspto.gov/netacgi/nph-Parser?Sect1=PTO2&Sect2=HITOFF&p=1&u=%2Fnetahtml%2FPTO%2Fsearch-bool.html&r=0&f=S&l=50&TERM1=mottahedeh&FIELD1=&co1=AND&TERM2=soheyl&FIELD2=&d=PG01
This podcast series has changed my life, I hope it inspires all of you as well. This is part one of a four part series, it will not disappoint. Join me on the wild ride of Soheyl's childhood, sit back, enjoy the conversation and get ready to be inspired! Here is some more information to get to know Soheyl even better. Websites African and Laotian technology innovations www.smartinnova.com Fresh Canadian Spirulina www.spiruvive.com Capturing and converting greenhouse gases www.algabloom.com My collection of Tribal Art http://champagallery.com/index.php?p=khatribal My leaf collector system sold at Canadian Tire hardware stores http://www.powerbagsystems.com/index.php?p=video Mitigating Climate change http://www.equicarbon.com/index.php?p=who-SoheylMottahedeh Videos Rural Electrification by barefoot Africans (click on mpeg) Turbine manufacturing: wmv or mpeg format Power of Algae https://www.youtube.com/watch?v=T001d4ypwvU&t=7s Low-cost Algae biofarming solution https://www.youtube.com/watch?v=NFiIhf4tK7k Interview of Soheyl , CEO of SpiruVive - Fresh Canadian Spirulina https://www.youtube.com/watch?v=G7034kGWckw&t=8s Newspapers & Media Release Richmond News : Pondering the future with a Superfood https://www.richmond-news.com/business/pondering-the-future-with-a-superfood-1.2161428 Australian Qponics selectects AlgaBloom https://www.google.com/search?q=qponics+algabloom&rlz=1C1AVSX_enUS436CN458&oq=qponics+alagabloom&aqs=chrome.1.69i57j33.8837j0j8&sourceid=chrome&ie=UTF-8 Participant representing Zaire at UNIDO Together for a Sustainable Future - 50 Year https://open.unido.org/api/documents/4789823/download/REPORT.%20(CONGRESS%20ON%20'TECHNOLOGY%20FOR%20THE%20PEOPLE')%20(10262.en) Patents: The first 17 Canadian Patents in this list are mine http://www.ic.gc.ca/opic-cipo/cpd/eng/search/results.html?query=mottahedeh&start=1&num=10&type=basic_search&newSearch=0 These 4 US Patents are mine http://appft.uspto.gov/netacgi/nph-Parser?Sect1=PTO2&Sect2=HITOFF&p=1&u=%2Fnetahtml%2FPTO%2Fsearch-bool.html&r=0&f=S&l=50&TERM1=mottahedeh&FIELD1=&co1=AND&TERM2=soheyl&FIELD2=&d=PG01
Subscriber-Only: Today's episode is available only to subscribers. If you are a Point-Free subscriber you can access your private podcast feed by visiting https://www.pointfree.co/account. --- Now that we've looked at how to parse multiple values given a single parser, let's try to parse a single value using multiple parsers! And after defining a bunch of these parser combinators we'll finally be able to ask: "what's the point!?"
Subscriber-Only: Today's episode is available only to subscribers. If you are a Point-Free subscriber you can access your private podcast feed by visiting https://www.pointfree.co/account. --- Let's solve another common parsing problem using parser combinators! It's common to want to parse multiple values off a string, and while `zip` gets us part of the way there, it doesn't let us parse _any_ number of values! Luckily there's a parser combinator that can help, and it really packs a punch.
Subscriber-Only: Today's episode is available only to subscribers. If you are a Point-Free subscriber you can access your private podcast feed by visiting https://www.pointfree.co/account. --- Even though `map`, `flatMap` and `zip` pack a punch, there are still many parsing operations that can't be done using them alone. This is where "parser combinators" come into play. Let's look at a few common parsing problems and solve them using parser combinators!
Subscriber-Only: Today's episode is available only to subscribers. If you are a Point-Free subscriber you can access your private podcast feed by visiting https://www.pointfree.co/account. --- It's time to ask the all important question: what's the point? We now have a properly defined parser type, one that can parse efficiently and incrementally, but does it give us anything new over existing tools?
Show Notes and Links Rechenschaftsablage seit 10.4. 268 Runner in den Gruppe 3 Schweinehunde Dominic: 14 Läufe - 100.41 km Stefan: 20 Läufe - 193.3 km Steve: 27 Läufe - 383 km TJ: 1 Lauf - 4 km Themen Dominic Laufbänder sind LANGWEILIG Neue Uhr Garmin 645M Meine Probleme mit dem Trainingsplan und dem Leben Stefan Antwort Feedback: Die Bluetooth Kopfhörer halten etwa 5-6 Stunden, allerdings kommt nach “Battery low”-Durchsage das Aus innerhalb 10 min. Fit-Parser hat 9170 Zeilen Code bisher :-) Und das ist alles nur die Spezifikation dies Datenformat - noch nicht mal der Parser. Meine Füße hulkifizieren und ich hätte gerne neue große Zehen (Haut reicht). Aerobes Ungleichgewicht (hoffentlich) überwunden! The balance game Buch The Big Book of Endurance Training and Racing Publikation World-Class Long-Distance Running Performances Are Best Predicted by Volume of Easy Runs and Deliberate Practice of Short-Interval and Tempo Runs Rohkost ftw! Steve Vorbereitung auf Regensburg HM abgeschlossen, now Taperings Alle Metriken deuten auf bessere Form hin: FTP, PWR/HR, Speed/HR etc. Aber etwas müde die letzten 2 Wochen … EMBL, trotzdem voll trainiert… Stark ins WKO4 Graph-Building eingestiegen und Ausbildung zum Lauftrainer angefangen. Bald also noch professionelleres Coaching möglich :) Seth James DeMoor - Youtube Termine 25.Mai 2019: T-Shirts - Interessensbekundungen an feedback@3-schweinehun.de. Wer sich bisher schon gemeldet hat, ist schon auf unserer Liste und wird am 26. von uns kontaktiert. 5.Juli 2019: NCT-Lauf Heidelberg 13.Oktober 2019: Halbmarathon München - Anmeldung mit Verein: 3 Schweinehunde - bisher schon 10 Anmeldungen!
Subscriber-Only: Today's episode is available only to subscribers. If you are a Point-Free subscriber you can access your private podcast feed by visiting https://www.pointfree.co/account. --- Now that we've looked at a bunch of parsers that are at our disposal, let's ask ourselves what a parser really is from the perspective of functional programming and functions. We'll take a multi-step journey and optimize using Swift language features.
Subscriber-Only: Today's episode is available only to subscribers. If you are a Point-Free subscriber you can access your private podcast feed by visiting https://www.pointfree.co/account. --- Parsing is a difficult, but surprisingly ubiquitous programming problem, and functional programming has a lot to say about it. Let's take a moment to understand the problem space of parsing, and see what tools Swift and Apple gives us to parse complex text formats.
Cameron Gera and Taylor Fausak talk about how regular expressions compare to parser combinators in Haskell.
Clover Station 2018 is significantly different from older clover station. Apps that worked on old station had to be upgraded to work on new station. In case with Variable price barcode parser we had to re publish the app as a different app all together. Since then the old app has been unpublished and new app is compatible with old devices as well as new devices but migration for merchants is not always smooth. Here are a few user cases that you might encounter with your merchants.
Variable Price Barcode Parser app enables merchants to read price embedded barcodes on clover. This app is tightly integrated into native clover environment. It works with register app inventory apps it also works with barcode scanners the built-in ones and the two models provided by clover. Before the app can be used merchants need to complete a quick setup. Here is what happens for merchants if they begin using the app before completing the setup steps.
Jake and Michael discuss all the latest Laravel releases, tutorials, and happenings in the community.
Hold på hat og briller! Vi er på vej gennem junglen til tykhud! Gennem det tykke løv spotter vores 4 helte, Fille, Passe, Sir Francemand plus Parser et begravelsesoptog med en ung, smuk kvinde som levende offergave - damsel in distress! Redningsaktion bliver straks iværksat.
In full swing building our compiler interpreter. We’ve got our lexer working nicely. Now for the meaty part of it. The process of taking all the source code that is now tokenized, and outputting into a data structure is the job of the parser. This output structure is called a ‘syntax tree’ or ‘abstract syntax tree’, did you checkout last week’s pick?
Anselm und Hans haben dieses mal Joschi Kuphal (seine Firma, Twitter) zu Gast. Keine News Schaunotizen [00:00:53] Microinformationen Joschi Kuphal beschäftigt sich seit vielen Jahren mit Microinformationen – Informationen, die gerade Suchmaschinen helfen, Inhalte besser zu erkennen (sein Parser). Aufgrund seiner Expertise, hilft er uns als unwissende das Thema zu verstehen. Er erklärt uns die […]
Today on the SQL Trail I talk with Richie Rump, the podcaster, blogger, and now new hire at Brent Ozar. He and I discuss measuring query performance, using SET STATISTICS, and the story behind his Statistics Parser application. He also talks about navigating the space between developer and DBA. The show notes for today's episode are at http://sqldatapartners.com/2016/04/02/statisticsparser/
John Grubers Markdown ist so einfach und kann doch so viel. Der Ubercast ergründet die Vielfalt an Sorten die es mittlerweile gibt. Lieber Fluggast, wenn dir das Gehörte gefällt oder dir Sorgenfalten auf die edle Stirn fabriziert, dann haben wir etwas für dich: iTunes Bewertungen. Überbleibsel Browser Setup Es gibt ein paar Nachträge zur letzten Episode Vimium, eine Mischung aus LaunchBar und Shortcat - Keyboard productivity app for Mac OS X… aber halt NUR für den Browser. An wahnsinnige mit über 30 offenen Tabs: How to Enable Tab Discarding in Chrome for Improved Memory Use. Trotzdem ist es natürlich besser es erst gar nicht soweit kommen zu lassen, z.B. mit OneTap. Markdown Browser Helium Firefox iOS AppleTV Hands-On In der letzten Sendung konnten wir nur spekulieren und die Erfahrungen teilen, die andere mit dem neuen AppleTV gemacht haben. Jetzt haben Patrick und Sven aber selbst einen in der Hand und an der Klotze. Sven kann die Aufregung um den fehlenden Keyboard-Support nicht verstehen, die Eingabe der iTunes und iCloud Kontodetails ist mit der Fernbedienung kein ausgesprochenes Vergnügen, aber auch nicht so katastrophal. Einmal eingegeben sollte man dringend unter Einstellungen > Konten > iTunes und App Store > Passwort Einstellungen in jedem Fall die Notwendigkeit für Passworteingaben bei kostenpflichtigen und kostenfreien Downloads abstellen. Beim iDownloadBlog gibt es eine kurze Anleitung dazu. Patrick hingegen verzweifelt an der Fernbedienung und bangt, dass die Remote App nun gar nicht upgedatet wird, wie es Jason Snell gehört haben will. Neben den hauseigenen Passwörtern von Apple, gesellen sich zur Eingabefolter täglich neue Apps dazu. Hier rächt sich definitiv jedes obskure 50-Zeichen-Passwort. Was bei Sven nicht geklappt hat ist die “magische” Übernahme von Netzwerkeinstellungen und -password vom iPhone, obwohl dieses mit eingeschaltetem Bluetooth nahe am AppleTV lag. Whatever… wenigstens Patrick hatte da keine Probleme. Da neue Interface ist super und extra slick. Schön auch das Sven’s Logitech Universalfernbedienung, die bereits auf die ältere AppleTV Version geeicht war, direkt funktioniert. Natürlich nicht für Spiele — und von denen gibt es einige coole im AppleTV AppStore — da muss die Touch-Remote ran. Bei manchen Spielen ist die allerdings sehr gewöhnungsbedürftig. Durchaus nachvollziehbar, dass viele den Kauf eines extra Controllers in Betracht ziehen. Beide Piloten haben als erstes Spiel übrigens Does Not Commute gekauft. Lobenswert ist, dass das Preisniveau für Apps und Spiele auf dem AppleTV gefühlt höher ist als beim iOS Pendant — hoch lebe die glorreiche Zukunft der Indie-Entwickler-Szene. Sonstiges Hidden Beer Cooler GIF A personal podcast feed for your audiobooks DuckDuckGo – How to compete with Google Überschallneuigkeiten Rekonect Notebook: The Magnetic Lifestyle by CJ Good-Man Amazon.de: Prime Music iPad Pro in den Reviews Nun ist es draußen, das Mega-iPad. In Sachen Leistungsfähigkeit liegt es locker über dem MacBook und den MacBook Airs. Es scheint also langsam Wirklichkeit zu werden, dass man sein Laptop gegen ein hybrides Tablet eintauschen kann. Würde vielleicht der eine oder andere aus der Pilotenkanzel durchaus in Erwägung ziehen. Die ersten Reviews sind allerdings sehr gemischt. Walt Mossberg ist mit dem iPad Pro nicht warm geworden während Federico Vittici erwartungsgemäß aus dem Häuschen ist (Achtung, plant 30 Minuten ein um sein Review zu lesen – alternativ die passende Folge von “Connected” hören). Einer der relevanten Reviews kommt von John Gruber, der das Potential des iPod Pro als Laptopersatz sieht, allerdings ein paar massive Einschränkungen beim Keyboard-Support darlegt, die zumindest Sven erstmal vor dem Kauf zurückschrecken lässt. Zum Glück nichts, was Apple nicht in einem der nächsten iOS Updates beheben könnte. Jim Dalrymple hingegen sieht im iPad Pro vor allem ein Gerät für Kreative, denn von der Genauigkeit und Geschwindigkeit des Apple Pencils sind alle wie weggeblasen. Der Apple Pencil und das Apple Keyboard für das iPad Pro werden allerdings erst in 3-4 Wochen lieferfähig während das iPad Pro schon verfügbar ist. Viele testeten auch das Logitech Create Keyboard als Alternative und befanden es für besser. Aus der Übercast-Sicht heisst die Empfehlung aber erstmal abwarten und schauen, ob vor allem der Keyboard-Support in kommenden iOS Versionen verbessert wird. Markdown und Markdown Flavors Die Philosophie hinter Grubers Markdown ist “KISS”. Markdown is intended to be as easy-to-read and easy-to-write as is feasible. John Gruber Doch warum ist Markdown cool? Unabhängigkeit beim Bloggen. Als Blogplattformnormade kann man überall seine Texte einfüttern. Sven Fechner Plain Text. Damit universell einsetzbar auf allen Plattformen, mit jedem Editor, selbst wenn “Markdown” als “Format” nicht unterstützt wird. (Unterschied Format ↔ Syntax Highlight) Andreas Zeitler Das großartige ist, dass Gruber’s Markdown schon langt für 99% der Fälle. Warum? Weil man einfach Inline HTML mit einbauen kann und es am Ende, wenn man es kompliliert/exportiert/sektiert/sabotiert immer noch funktioniert. Patrick Zeitler Ein guter Einstieg und samt Übersicht von David Sparks und Eddie Smith gibt es in Buchform als Teil der MacSparky FieldGuide Serie. Erhältlich beim iBooks Store eures Vertrauens. Eine – wie Patrick findet – Wunderbare Allegorie findet sich bei einem anderem Podcast: 99% Invisible: 149- Of Mice And Men. Flavors MultiMarkdown sollte das neue Markdown sein. Da sind sich schon einmal 2/3 des Cockpits einig. Spezielle Editoren für den Mac Ein paar Editoren haben es sich zur Aufgabe gemacht die Syntax von Markdown weitestgehend “zu verstecken”. Die meisten davon basieren auf JavaScript, womit schon einmal gefühlte 1000 Stolpersteine mit integriert sind – vor allem bei Whitespace (Returns, Leerzeichen, …). Je nach Parser sieht man dann im gerendertem HTML auch Unterschiede, also eigentlich genau das, was man als Markdownnutzer mitunter vermeiden will. As Gruber noted early on, nested lists are an exception to the never-too-much-whitespace rule. Blank lines between list items can be interpreted very differently between processors. Brett Terpstra in “Write better Markdown” Babelmark 2 - Compare markdown implementations PS: Wer mehr über die Unterschiede wissen will: Markdown Video Tutorial von Brett Terpstra Typora — a minimal markdown editor (beta) Texts — Markdown Word Processor - Richt Editor for Plain Text (28 €) FoldingText — Plain text productivity for Mac users Ausflüge – Plain Text Lifestyle Wer wie Andreas Atom nutzt um markdownen will was das Zeug hält, der schaut sich folgenden Tipp an: Console aufmachen und folgendes eingeben: for(var scopeName in atom.grammars.grammarsByScopeName){ console.log(scopeName); } Anschliessend die Settings aufmachen. Und klicken “Open Configs”. Darin das config.cson öffnen und unter dem core: Eintrag folgendes ergänzen: customFileTypes: "source.gfm": [ "txt" "markdown" "md" ] Das sieht bei Andreas dann so aus: core: disabledPackages: [ "welcome" "remember-session" "autocomplete" "term" ] themes: [ "atom-dark-ui" "monokai" ] customFileTypes: "source.gfm": [ "txt" "markdown" "md" ] Mehr gute Sachen hier: Fountain – A markup language for screenwriting. Storyist Markdown for Keyboard Maestro 2 Marked 2 – Custom Processor per command-option-C oder auf Dokumentenbasis (per Metadaten) TextExpander Snippets für Markdown Der Markdown Syntax ist nicht immer einfach (zu merken). TextExpander Snippets helfen da ungemein, z.B. die von David Sparks. Markdown Tools (Mac OS X System Services) von Brett Terpstra Ohne Brett’s Service Tools für einiges in Sachen Markdown auf dem Mac schwerer Fallen. Schnelles Übernehmen von Links von den aktuelle Safari- oder Chrome-Tabs oder größere Operationen wie dem Konvertieren von HTML in Markdown oder dem Tauschen von Inline und Referenz Link Styles zum Beispiel. Markdown iOS Editorial Coda ist sehr praktisch für Jekyllnutzer die selbst hosten. nvNotes ($9.99) wirbt derweil mit folgendem Slogan: “The best Markdown keyboard for iOS”. TextExpander Touch (iOS) Snippets für Markdown Wenn es auf dem Mac manchmal schon nicht einfach ist den Markdown Syntax zu erinnern oder gar zu tippen, dann ist es auf iOS gleich doppelt so schwer. Mit TextExpander Touch und den richtigen Snippets wird es schon besser: TextExpander Touch iOS Markdown Snippets von Brett Terpstra Markdown iOS Snippet Ansatz von Macdrifter’s Gabe Links Flavors & Co. John Gruber: Markdown (Das Original) GitHub Flavored Markdown Fletcher Penny: MultiMarkdown Syntax Guide GitHub Flavored Markdown David Parson: Discount – a C implementation of the Markdown markup language ist sehr nah am Original, kann aber mehr es kann nicht so viel wie Kramdown und mischt gerne die existierenden Features Thomas Leitner: kramdown Die beste Wahl für Leute mit viel Custom Code. mdast - markdown processor powered by plug-ins geil zum selber bauen Madoko LaTeX + Markdown Coole Apps und Helferlein Deckset Building less shitty slides using a bowl of M&M’s Archimedes – LaTeX and Markdown editor for Mac OS X Markdown Plugins for Sublime Text Unsere Picks Andreas: Hype 2 Sven: Elgato Eve Wetter- und Raumklimamessung mit HomeKit und Siri-Unterstützung; Auch Steckdosensteuerung und Fenster- und Türsensoren aus Deutschland. Patrick: Eigentlich f.lux, aber nun da es doch wieder weg ist thomasfinch/GammaThingy (Bei Installations-Problemen hier klicken) Hörbuch Picks Money von Martin Amis Ein Mann namens Ove von Frederik Backmann In Spenderlaune? Wir haben Flattr und PayPal am Start und würden uns freuen.
This week, Gordon and Mark continue their accidental Swift-and-frameworks-that-use-functionalish-concepts series by talking about the new Parser type in Argo and niceties that are emerging in ReactiveCocoa's Swift development branch. Buff iOS Coaching from thoughtbot PR to add a Parser type to Argo NSNorth (Sponsor) Maybe Haskell (50% off for our listeners!) ReactiveCocoa swift-development branch
The Historian takes on that age-old controversy that has plagued adventure games since time immemorial (or, at least, back to the late 80’s and beyond): Which is better? Parser or point-and-click interfaces? Join us as we delve into the pros and cons of written input versus mouse-driven pointing-and-clicking on things with input from Jason Fyre […]
The Historian takes on that age-old controversy that has plagued adventure games since time immemorial (or, at least, back to the late 80’s and beyond): Which is better? Parser or point-and-click interfaces? Join us as we delve into the pros and cons of written input versus mouse-driven pointing-and-clicking on things with input from Jason Fyre […]
Новости Гем для визуализации классов RDot Rails 4.0 RC1 Возможности гема Parser Петрович Функциональное программирование в ОО языках Ruby 2.1.0 Roadmap Hamster — библиотека неизменяемых типов для Ruby Как масштабировался Pinterest Возрождаем Google Reader Пассажир 4.0.1 таки доехал до нас Ruby at github Новый GC в Ruby (на самом деле нет) Обсуждение Интервью с Петром Зотовым Официальный сайт языка Foundry Блог Петра Твиттер Петра Почта Петра Виртуальная машина llvm Язык Rust Язык Go Функциональное реактивное программирование Язык Haskell Структура данных веревка Разное Конференция DevConf 14 июня
Programmation sur plateforme mobile : application à iOS et Android (2103/2014, HD)
Cette séquence présente la classe NSXMLParser et son protocole associé (NSXMLParserDelegate) qui permettent de parcourir et analyser un flux XML.
Como desarrolladores, pocas herramientas usaremos tan a menudo como un compilador. Ya sea independiente o integrado en algún entorno de desarrollo, el compilador es el responsable de transformar nuestras ideas, esos complejos castillos en el aire formados por algoritmos y estructuras de datos, en instrucciones básicas que pueda procesar la máquina. En este programa, analizamos [...]
Robert Helling ist Stringtheoretiker und die Sendung ist ein Dokument des Scheiterns. Gescheitert ist mein Gehirn, also ich. Wer aufmerksam zuhört, kann es schmatzen hören, wenn mein Parser immer wieder verharzt. Trotzdem habe ich einiges gelernt, während wir plauderten über Newton, Gravitation, Planetenbahnen, Kepler, Brahe, Einstein, Pössel, die Relativitätstheorie, Einstein-Leugner, GPS, Krumme Räume, Zeit, Äpfel, Ameisen, schwarze […]
Eine Einführung in Parser und ihre Anwendungsmöglichkeiten für typische Alltagsprobleme. Session 2, Samstag, Terrassensaal, Macoun 2011
. . . В день дураков и смеха мы общаемся про то, как разыгрывать своих коллег сегодня и каждый день. Разговариваем про специфичный язык программирования Parser и про то, как можно смотреть видео и слушать музыку на iPad без iTunes. В выпуске Грабли пилотного выпуска. Изменения в регламенте. Планы на будущее. Суровые айтишные первоапрельские шутки. @LapinDmitry о том, как все начиналось, и особенностях работы в крупной компании. Язык Parser от Студии Артемия Лебедева. iPad + XBMC = ура-ура! Но не совсем. Хорошие книги. Послешоу Ссылки Zen Coding Parser Книги Стивен Р. Кови - 7 навыков высокоэффективных людей. Мощные инструменты развития личности. Стив Круг - Веб-Дизайн: книга Стива Круга или "не заставляйте меня думать!".
Epizoda 10. „Zuze… Sjuse… teda SUSE” [50 min] Technická poznámka: Tentokrát je hodně potichu Honza Korbel - moc si stáhnul mikrofon :-) Odkazy Cross-Browser CSS Gradient Co bude podporovat IE 9 Launch: Draft for iPad - (37signals) HTML5Rocks Host [začíná 10:45] David Majda v současnosti pracuje na SUSE Studio Co to je za službu/aplikaci? Pro koho je SUSE Studio určeno? Jak dlouho a v kolika lidech? Jaký je byznys model? Rails v SUSE Parser generátor v JavaScriptu, GitHub LESS, SASS Nezapomeňte, že SUSE hledá lidi! Citát „Člověk často přehlédne příležitost, kterou mu přináší dnešek.” — čínské přísloví Autor hudby je Discofield. Stáhnout v MP3 [50 min]
Harvard Extension School's Computer Science E-259: XML with Java, Java Servlet, and JSP
PDF format
Harvard Extension School's Computer Science E-259: XML with Java, Java Servlet, and JSP
PDF format
This course analyzes issues associated with the implementation of high-level programming languages. Topics covered include: fundamental concepts, functions, and structures of compilers, basic program optimization techniques, the interaction of theory and practice, and using tools in building software. The course features a multi-person project on design and implementation of a compiler that is written in Java® and generates MIPS executable machine code. This course is worth 8 Engineering Design Points.