Podcast appearances and mentions of Joe Watkins

English ice hockey player

  • 29PODCASTS
  • 80EPISODES
  • 48mAVG DURATION
  • ?INFREQUENT EPISODES
  • May 29, 2025LATEST

POPULARITY

20172018201920202021202220232024


Best podcasts about Joe Watkins

Latest podcast episodes about Joe Watkins

ServingLeaders Podcast
Say “Yes” to God and Watch What Happens: An Interview with Joe Watkins

ServingLeaders Podcast

Play Episode Listen Later May 29, 2025 70:36


Do you believe in coincidence? Chance happenings? Listen to the story of Joe Watkins who served as a pastor, assistant to President George H.W. Bush, political commentator, actor, and TV show host and how seemingly serendipitous meetings propelled him into succession of fascinating careers and service to the Lord.Joe Watkins | State of Independence Buy Dave's book here:On AmazonOn New Growth Press

The Archaeology Podcast Network Feed
Indigenous Archaeology: Reclaiming Narratives of the Past - Plains 07

The Archaeology Podcast Network Feed

Play Episode Listen Later Nov 14, 2024 26:12


In this episode of the Great Plains Archaeology Podcast, host Carlton Shield Chief Gover dives into the field of Indigenous Archaeology, exploring its roots, principles, and growing impact on the discipline. Indigenous Archaeology is more than just a methodology; it's a movement to reclaim and represent the histories of Indigenous communities in ways that honor their perspectives and sovereignty. Carlton unpacks how this approach emerged, shaped by Indigenous scholars, activists, and allies who advocate for a respectful, community-centered archaeology that reflects the voices and values of Native peoples. He discusses how Indigenous Archaeology reshapes research practices, challenges traditional narratives, and fosters collaborations that benefit both Indigenous communities and the field as a whole. Tune in to discover how Indigenous Archaeology offers new paths for understanding the past and why it's essential for creating a more inclusive archaeological record. Whether you're new to the concept or eager to deepen your understanding, this episode is an enlightening exploration of how archaeology is transforming from within.Links: indigenous archaeology: American Indian Values and Scientific Practice by Joe Watkins (2001) Collaborating At The Trowel's Edge: Teaching and Learning in Indigenous Archaeology Edited by Stephen W. Silliman (2008) Archaeologies of the Heart Edited by Kisha Supernant, Jane Eva Baxter, Natasha Lyons, & Sonya Atalay (2020) Indigenizing Archaeology: Putting Theory into Practice Edited by Emily Van Alst & Carlton Shield Chief Gover (2024) The Archaeology of the North American Great Plains by Douglas B. Bamforth (2021) Archaeology on the Great Plains Edited by W. Raymond Wood (1998) Carlton's KU Anthropology Faculty BioTranscripts For rough transcripts of this episode, go to: https://www.archpodnet.com/great-plains-archaeology/07Contact: Instagram: @‌pawnee_archaeologist Email: greatplainsarchpodcast@gmail.comAffiliates Motion

learning narrative indigenous native reclaiming archaeology carlton plains joe watkins kisha supernant indigenous archaeology raymond wood douglas b bamforth
PuroJazz
Puro Jazz 21 noviembre 2023

PuroJazz

Play Episode Listen Later Nov 22, 2023 58:48


SIDNEY BECHET / BUNK JOHNSON - DAYS BEYOND RECALL  - New York, March 10, 1945 Milenberg joys, Days beyond recall, Up in Sidney's flat Bunk Johnson (tp) Sandy Williams (tb) Sidney Bechet (cl) Cliff Jackson (p) Pops Foster (b) Manzie Johnson (d) EDMOND HALL - BLUE NOTE JAZZ MEN  - New York, November 29, 1943 High society, Royal garden blues, Blue Note Boogie Sidney DeParis (tp) Vic Dickenson (tb) Edmond Hall (cl) James P. Johnson (p) Jimmy Shirley (g) Israel Crosby (b) Sidney Catlett (d) JESS STACY - TRIBUTE TO BENNY GOODMAN  - Hollywood, CA, April 15, 1954 Goodbye (1) Ziggy Elman (tp) Murray McEachern (tb) Heinie Beau (as,cl-1,arr) Vido Musso (ts) Chuck Gentry (bar) Jess Stacy (p) Allan Reuss (g) Artie Shapiro (b) Nick Fatool (d) - Hollywood, CA, April 29, 1954 Don't be that way, Down south camp meetin' Ziggy Elman (tp) Ted Vesely (tb) Heinie Beau (as,arr) Babe Russin (ts) Joe Koch (bar) Jess Stacy (p) Al Hendrickson (g) Artie Shapiro (b) Nick Fatool (d)  - Hollywood, CA, October 6, 1955 You turned the tables on me, I must have that man Jess Stacy (p) Artie Shapiro (b) Nick Fatool (d) GEORGE LEWIS - AND HIS NEW ORLEANS STOMPERS, VOL. 1  - Hackensack, N.J., April 8, 1955 When you wore a tulip, Walking with the king (kh vcl), Gettysburg march, Bucket's got a hole in it (jw vcl) Kid Howard (tp,vcl) Jim Robinson (tb) George Lewis (cl) Alton Purnell (p,vcl) George Guesnon (bj) Alcide "Slow Drag" Pavageau (b) Joe Watkins (d,vcl)

Neighborly Love
Neighborly Love Podcast, Episode 34 – Joe Watkins

Neighborly Love

Play Episode Listen Later Jul 1, 2023 38:31


Ordinary People. Extraordinary Conversations. If “Comedians in Cars Getting Coffee” and “The Parable of the Good Samaritan” collided at an intersection, then the Neighborly Love podcast would be the result. It features casual conversations over coffee in a “virtual coffee shop” that lean into the power of empathy. It’s about feeling heard, valued, and understood.Continue reading "Neighborly Love Podcast, Episode 34 – Joe Watkins"

ServingLeaders Podcast
How to Respond When Leaders Stumble: An Interview with Joe Watkins

ServingLeaders Podcast

Play Episode Listen Later Mar 15, 2023 26:27


On this episode, Joe Watkins hosts Dave Wiedis on the television show, State of Independence, and interviews Dave on the reasons for and response to leadership failure.

A Life In Ruins
An Oral History of Indigenous Archaeologies with Dr. Joe Watkins - Ep 139

A Life In Ruins

Play Episode Listen Later Jan 16, 2023 81:05


On this episode, Carlton has a solo interview with a leading figure in Indigenous Archaeologies - Dr. Joe Watkins. Dr. Watkins is a Citizen of the Choctaw Nation and has been an advocate for archaeological collaboration with Indigenous Communities throughout his career as an archaeologist. Carlton explores Dr. Watkins' career in Archaeology and the history and continued importance of Indigenous Archaeologies.If you have left a podcast review on iTunes or Spotify, please email us at alifeinruinspodcast@gmail.com so we can get shipping information to send you a sticker.If you are listening to this episode on the "Archaeology Podcast Network All Shows Feed," please consider subscribing to the "A Life in Ruins Podcast" channel to support our show. Listening to and downloading our episodes on the A Life in Ruins channel helps our podcast grow. So please, subscribe to the A Life in Ruins Podcast, hosted by the Archaeology Podcast Network, on whichever platform you use to listen to us on the "All Shows Feed." Please support our show by following our channel.TranscriptsFor rough transcripts of this episode go to https://www.archpodnet.com/ruins/139Links Ancient History in the New World: Integrating Oral Traditions and the Archaeological Record in Deep Time by Roger C. Echo-Hawk Archaeology and Native North American Oral Traditions by Ronald J. Mason Being and Becoming Indigenous Archaeologists by George NicholasLiterature Recommendations Indigenous Archaeology: American Indian Values and Scientific Practice by Joe Watkins Plundered Skulls and Stolen Spirits: Inside the Fight to Reclaim Native America's Culture by Chip Colwell AT A CROSSROADS: ARCHAEOLOGY AND FIRST PEOPLES IN CANADA by George Nicholas & Thomas D. Andrews Hand Book of North American Indians Volume I **FREE** download Anything by Sonya Atalay and Larry ZimmermanGuest Contact Dr. Joe Watkins' Email: jwatkins@theaceconsultants.comContact Email: alifeinruinspodcast@gmail.com Instagram: @alifeinruinspodcast Facebook: @alifeinruinspodcast Twitter: @alifeinruinspod Website: www.alifeinruins.com Ruins on APN: https://www.archaeologypodcastnetwork.com/ruins

The Archaeology Podcast Network Feed
An Oral History of Indigenous Archaeologies with Dr. Joe Watkins - Ruins 139

The Archaeology Podcast Network Feed

Play Episode Listen Later Jan 16, 2023 81:05


On this episode, Carlton has a solo interview with a leading figure in Indigenous Archaeologies - Dr. Joe Watkins. Dr. Watkins is a Citizen of the Choctaw Nation and has been an advocate for archaeological collaboration with Indigenous Communities throughout his career as an archaeologist. Carlton explores Dr. Watkins' career in Archaeology and the history and continued importance of Indigenous Archaeologies.If you have left a podcast review on iTunes or Spotify, please email us at (alifeinruinspodcast@gmail.com) so we can get shipping information to send you a sticker.If you are listening to this episode on the "Archaeology Podcast Network All Shows Feed," please consider subscribing to the "A Life in Ruins Podcast" channel to support our show. Listening to and downloading our episodes on the A Life in Ruins channel helps our podcast grow. So please, subscribe to the A Life in Ruins Podcast, hosted by the Archaeology Podcast Network, on whichever platform you use to listen to us on the "All Shows Feed." Please support our show by following our channel.TranscriptsFor rough transcripts of this episode go to https://www.archpodnet.com/ruins/139Links Ancient History in the New World: Integrating Oral Traditions and the Archaeological Record in Deep Time by Roger C. Echo-Hawk Archaeology and Native North American Oral Traditions by Ronald J. Mason Being and Becoming Indigenous Archaeologists by George NicholasLiterature Recommendations Indigenous Archaeology: American Indian Values and Scientific Practice by Joe Watkins Plundered Skulls and Stolen Spirits: Inside the Fight to Reclaim Native America's Culture by Chip Colwell AT A CROSSROADS: ARCHAEOLOGY AND FIRST PEOPLES IN CANADA by George Nicholas & Thomas D. Andrews Hand Book of North American Indians Volume I **FREE** download Anything by Sonya Atalay and Larry ZimmermanGuest Contact Dr. Joe Watkins' Email: jwatkins@theaceconsultants.comContact Email: alifeinruinspodcast@gmail.com Instagram: @alifeinruinspodcast Facebook: @alifeinruinspodcast Twitter: @alifeinruinspod Website: www.alifeinruins.com Ruins on APN: https://www.archaeologypodcastnetwork.com/ruins

PazNaz Weekly Sermons
Tapestry of Grace: Church: The Visible Gospel

PazNaz Weekly Sermons

Play Episode Listen Later Jan 15, 2023 27:08


Dr. Joe Watkins | 1 Corinthians 12 The post Tapestry of Grace: Church: The Visible Gospel appeared first on PazNaz.

Meredith for Real: the curious introvert
Ep. 161 | Why are there NO Native Archaeologists?

Meredith for Real: the curious introvert

Play Episode Listen Later Nov 14, 2022 52:14


Dr. Joe Watkins has been studying archeology for over 50 years. He's a Senior Consultant at Archaeological and Cultural Education Consultants, in Tucson, Arizona & visiting Professor at the Global Institution for Collaborative Research and Education at Hokkaido University in Japan. He is also a member of the Choctaw Nation of Oklahoma. He was the 2nd native person to be president of the society for American archaeology & serves as a mediator between anthropological disciplines and Indigenous groups. In this episode, he discusses why Native Americans & Archaeologists butt heads, what drew him to archaeology despite social pressure to avoid it & his take on why Native history isn't taught in high schools.If you liked this episode, you'll also like episode 114: HOW DO I KNOW IF I'M INDIGENOUS? MAN DISCOVERS HE'S NATIVE ROYALTYGuest:  https://www.amazon.com/dp/1598745697/ref=cm_sw_r_tw_dp_5YHXT56W8R4YTC3GKJDFHost:  https://www.meredithforreal.com/  | https://www.instagram.com/meredithforreal/  | meredith@meredithforreal.com | https://www.youtube.com/meredithforreal  | https://www.facebook.com/meredithforrealthecuriousintrovertSponsors: https://uwf.edu/university-advancement/departments/historic-trust/ | https://www.ensec.net/

The Sunshine Show
Matt Irie| The Matt Irie Band

The Sunshine Show

Play Episode Listen Later Jun 18, 2022 71:42


The Matt Irie Band started as a one-man show in North Carolina 2006 with vocalist Matt Irie rocking with a DJ at local hip hop shows. Multiple lineup changes over the years brought together a fusion of genres to form the five-piece group they are today. Joined by Larry Holcomb and Joe Watkins on guitars, Will Barkley on drums, and Michael Dorsett on bass and keys, Matt Irie leads what is described as "island infused-Funky Blues." They draw on their diverse backgrounds, bringing together influences from bands like Beastie Boys, Dr. John, Howlin' Wolf and Incubus, and finding themselves sharing the stage with the likes of Pepper, Rev Run, Morning 40 Federation, Badflower, Ludacris, Jelly Roll, Kellie Pickler, Tim Reynolds, Larry Keel, Kottonmouth Kings, The Green, Stick Figure, Tribal Seeds, and Motionless in White. The past few years have taken the band to the next level, enjoying the spotlight on multiple festivals like the Blue Ridge Rock Festival and the Port City Reggae Festival. The Matt Irie Band has formed a one-of-a-kind cocktail blend, packing a unique style and energetic sound to win crowds over at venues all over the Southeast, catching a strong buzz around the entire US, and raising glasses as far as Australia, France, and Japan. The full band just released their debut single under Ingrooves Music Group/TLG this September titled "Coastal," with a string of additional singles to follow in the coming months. Their music can be found on all major streaming platforms. Be sure to follow the band on their socials as tour information will be released soon! https://www.facebook.com/MattIrieBand --- Send in a voice message: https://anchor.fm/thesunshineshow/message Support this podcast: https://anchor.fm/thesunshineshow/support

Real Life - Podcast Conversations from Life Foursquare
Fostering: Nichole and Joe Watkins

Real Life - Podcast Conversations from Life Foursquare

Play Episode Listen Later Jun 3, 2022 31:02


Today we sit down with Nichole and Joe to talk about their experience with fostering. There is a huge need for people like the Watkins family to step up and provide care for children in need of safety and security. We talk about their experience, hurdles, and encouragements for other people who might be considering fostering.

TJ Trout
Joe Watkins, Scott Elder

TJ Trout

Play Episode Listen Later May 26, 2022 28:47


Archeologist from NMPBS Nova on the Ice Age Footprints, and APS Superintendent discusses the Texas school shootings with TJ on News Radio KKOB  See omnystudio.com/listener for privacy information.

Art in the Game
Cashless Gaming & The Future of Gambling with Joe Watkins

Art in the Game

Play Episode Listen Later Mar 15, 2022 59:07


On the latest episode of the casino gambling podcast, we welcome back Joseph Watkins from World Pay by FIS Global. Joe joins us to discuss cashless gaming and the future of online and in person gambling. As a result of Sports Betting and the Covid pandemic cashless gaming has seen enormous gains in the last 2 years in North America. Learn how cashless gaming works and how it will affect you as a player now and in the future. Visit FIS Global Website:  Fintech | Financial Technology | Financial Services Technology | FIS (fisglobal.com) Visit AITG Website:  www.artinthegame.net Call the AITG Player Hotline. 413-285-2211 Share your gambling trip reports and casino reviews and it can end up on a upcoming podcast. Join Club Casino on the Clubhouse:  https://www.joinclubhouse.com/club/club-casino Join in the conversation in the Facebook Private Community:  https://www.facebook.com/groups/238265166923233/?ref=book Learn to play video poker FREE. Join the fun in the AITG Video Poker Challenge.  Sign up through our AITG member's link and receive 2 weeks of Gold membership FREE! When you do, send me your VP nickname and I will add you to the invite list to our AITG VP Challenges. I encourage all my listeners and members to go "Pro" with a Pro membership for $89.00 today!  www.videopoker.com/artinthegame        

Voices of the ElePHPant
Ep#366 – Interview with The PHP Foundation

Voices of the ElePHPant

Play Episode Listen Later Dec 17, 2021 55:40


About Listen as hosts Cal Evans and Khayrattee Wasseem talk with Sara Golemon, Joe Watkins, and Sebastian Bergmann about the newly formed PHP Foundation. Transcript Ep#366-Interview-PHP-Foundation @ThePHPF Show Notes The PHP Foundation on Twitter PHP Foundation on Open Collective Avoiding Busses 2 – 1 Who pays for PHP? Sebastian Bergmann on Twitter Joe Watkins on […] The post Ep#366 – Interview with The PHP Foundation appeared first on Voices of the ElePHPant.

PHP Internals News
PHP Internals News: Episode 95: PHP 8.1 Celebrations

PHP Internals News

Play Episode Listen Later Nov 25, 2021


PHP Internals News: Episode 95: PHP 8.1 Celebrations London, UK Thursday, November 25th 2021, 09:23 GMT In this episode of "PHP Internals News" we're looking back at all the RFCs that we discussed on this podcast for PHP 8.1. In their own words, the RFC authors explain what these features are, with your host interjecting his own comments on the state of affairs. 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 Hi, I'm Derick, and this is PHP internals news, a weekly podcast dedicated to demystifying the development of the PHP language. Derick Rethans 0:23 This is episode 95. I've been absent on the podcast for the last few months due to other commitments. It takes approximately four hours to make each episode. And I can now unfortunately not really justify spending the time to work on it. I have yet to decide whether I will continue with it next year to bring you all the exciting development news for PHP 8.2. Derick Rethans 0:44 However, back to today, PHP eight one is going to be released today, November 25. In this episode, I'll look back at the previous episodes this year to highlight a new features that are being introduced in PHP 8.1. I am not revisiting the proposals that did not end up making it into PHP 8.1 feature two features I will let my original interview speak. I think you will hear Nikita Popov a lot as he's been so prolific, proposing and implementing many of the features of this new release. However, in the first episode of the year, I spoke with Larry about enumerations, which he was proposing together with Ilija Tovilo. I asked him what enumerations are. Larry Garfield 1:26 Enumerations, or enums, are a feature of a lot of programming languages. What they look like varies a lot depending on the language, but the basic concept is creating a type that has a fixed finite set of possible values. The classic example is booleans. Boolean is a type that has two and only two possible values true and false. Enumerations are way to let you define your own types like that, to say this type has two values Sort Ascending or Sort Descending. This type has four values for the four different card suits, and a standard card deck. Or a user can be in one of four states pending, approved, cancelled or active. And so those are the four possible values that this variable type can have. What that looks like varies widely depending on the language. In a language like C or C++, it's just a thin layer on top of integer constants, which means they get compiled away to introduce at compile time, and they don't actually do all that much they're a little bit to help for reading. On the other end of the spectrum, you have languages like rust or Swift, where enumerations are a robust, advanced data type and data construct of their own. That also supports algebraic data types. We'll get into that a bit more later. And is a core part of how a lot of the system actually works in practice, and a lot of other languages are somewhere in the middle. Our goal with this RFC is to give PHP more towards the advanced end of enumerations. Because there are perfectly good use cases for it, so let's not cheap out on it. Derick Rethans 3:14 In the next episode, I spoke with Aaron Piotrowski about another big new feature: fibres. Aaron Piotrowski 3:20 A few other languages already have Fibers like Ruby. And they're sort of similar to threads in that they contain a separate call stack and a separate memory stack. But they differ from threads in that they exist only within a single process and that they have to be switched to cooperatively by that process rather than pre-emptively by the OS like threads. And so the main motivation behind wanting to add this feature is to make asynchronous programming in PHP much easier and eliminate the distinction that usually exists between async code that has these promises and synchronous code that we're all used to. Derick Rethans 4:03 I also asked Aaron about small PHP I actually have a slightly related question that pops into my head as like. There's also something called Swoole PHP, which does something similar but from what I understand actually allows things to run in threats. How would you compare these two frameworks or approaches is probably the better word? Aaron Piotrowski 4:25 Swoole is they try and be the Swiss Army Knife in a lot of ways where they provide tools to do just about everything. And they provide a lot of opinionated API's for things that in this case, I'm trying to provide just the lowest level just the only the very necessary tools that would be required in core to implement Fibers. Derick Rethans 4:48 Although I discussed several deprecations from Nikita and the last year, I only want to focus on the new features. In episode 76. I spoke with him about array unpacking, after talking about changes to Null in internal functions. Nikita Popov 5:01 The old background is set we have unpacking calls. If you have the arguments for the call in an array, then you write the free dots and the array is unpacked intellectual arguments. Now what this RFC is about is to do same change for array unpacking, so allow you to also use string keys. Derick Rethans 5:24 In another episode, I spoke with David Gebler on a more specific addition of a new function fsync. David explains the reason why he wants to add this to PHP. David Gebler 5:34 It's an interesting question, I suppose in one sense, I've always felt that the absence of fsync and some interface to fsync is provided by most other high level languages has always been something of an oversight in PHP. But the other reason was that it was an exercise for me in familiarizing myself with PHP core getting to learn the source code. And it's a very small contribution, but it's one that I feel is potentially useful. And it was easy for me to do as a learning exercise. Derick Rethans 5:58 And that is how things are added to PHP sometimes, to learn something new and add something useful at the same time. After discussing the move of the PHP documentation to GIT an episode 78, in Episode 79, I spoke with Nikita about his new in initializers RFC. He says: Nikita Popov 6:15 So my addition is a very small one, actually, my own will, I'm only allowing a single new thing and that's using new. So you can use new whatever as a parameter default, property default, and so on. Derick Rethans 6:29 The addition of this change also makes it possible to use nested attributes. Nikita explains: Nikita Popov 6:34 I have to be honest, I didn't think about attributes at all, when writing this proposal. What I had in mind is mainly parameter defaults and property defaults. But yeah, attribute arguments also use the same mechanism and are under the same limitations. So now you can use new as an attribute argument. And this can be used to effectively nest attributes. Derick Rethans 6:59 Static Analysis tools are used more and more with PHP, and I spoke to the authors of the two main tools, Matt Brown, of Psalm, and Ondrej Mirtes of PHPStan. They propose to get her to add a new return type called noreturn. I asked him what it does and what it is used for. Ondrej Mirtes 7:14 Right now the PHP community most likely waits for someone to implement generics and intersection types, which are also widely adopted in PHP docs. But there's also noreturn, a little bit more subtle concept that would also benefit from being in the language. It marks functions and methods that always throw an exception. Or always exit or enter an infinite loop. Calling such function or method guarantees that nothing will be executed after it. This is useful for static analysis, because we can use it for type inference. Derick Rethans 7:49 Beyond syntax, each new version of PHP also adds new functions and classes. We already touched on the new fsync function, but Mel Dafort proposed to out the IntlDatePatternGenerator class to help with formatting dates according to specific locales in a more specific way. She explains: Mel Dafert 8:07 Currently, PHP exposes the ability for locale dependent date formatting with the IntlDateFormat class, it says basically only three options for the format long, medium and short. These options are not flexible in enough in some cases, however, for example, the most common German format is de dot numerical month dot long version of the year. However, neither the medium nor the short version provide and they use either the long version of the month or a short version of the year, neither of which were acceptable in my situation. Derick Rethans 8:40 And she continues with her proposal: Mel Dafert 8:42 ICU exposes a class called DateTimePatternGenerator, which you can pass a locale and so called skeleton and it generates the correct formatting pattern for you. The skeleton just includes which parts are supposed to include it to be included in the pattern, for example, the numerical date, numerical months and the long year, and this will generate exactly the pattern I wanted earlier. This is also a lot more flexible. For example, the skeleton can also just consist of the month and the year, which was also not possible so far. I'm proposing to add IntlDatePatternGenerator class to PHP, which can be constructed for locales and exposes the get best pattern method that generates a pattern from a skeleton for that locale. Derick Rethans 9:26 Locales and internationalization have always been an interest for me, and I'm glad that this made it into PHP 8.1. I spoke at length with Nikita about his property accessors RFC, in which he was suggesting to add a rich set of features with regard to accessibility of properties, including read only, get/set function calls, and asymmetric visibility. He did not end up proposing this RFC, which he already hinted that during our chat: Nikita Popov 9:53 I am still considering if I want to explore the simpler alternatives. First, there was already a proposal, another rejected proposal for Read Only properties probably was called Write Once Properties at the time. But yeah, I kind of do think that it might make sense to try something like that again before going to the full accessors proposal, or instead. Derick Rethans 10:18 He did then later proposed a simpler RFC read only properties, which did get included into PHP eight as a new syntax feature. He explains again: Nikita Popov 10:27 This RFC is proposing read only properties, which means that a property can only be initialized once and then not changed afterwards. Again, the idea here is that since PHP 7.4, we have Type Properties. Remaining problem with them is that people are not confident making public type properties because they still ensure that the type is correct, but they might not be upholding other invariants. For example, if you have some, like additional checks in your constructor, that a string property is actually a non empty string property, then you might not want to make it public because then it could be modified to an empty value. For example, one nowadays fairly common case is where properties are actually only initialized in the constructor and not changed afterwards any more. So I think this kind of mutable object pattern is becoming more and more popular in PHP. Derick Rethans 11:21 Nikita, of course, meant this kind of immutable object pattern, which we didn't pick up on during the episode. Another big change was the PHP type system, where George Peter proposed out pure intersection types. He explains what it is: George Peter Banyard 11:35 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. Derick Rethans 11:54 To explain our pure George Peter says: George Peter Banyard 11:58 So the word pure here is not very semantically, it's more that you cannot mix union types and intersection types together. Derick Rethans 12:06 Just after the feature freeze for PHP 8.1 happened in July, another RFC was proposed by Nicolas Grekas to allow the new pure intersection types to be nullable as well. But as that RFC was too late, and would change the pure intersection type to just intersection types, it was ultimately rejected. Derick Rethans 12:23 The last feature that I discussed in a normal run of the podcasts was Nikita's first class callable syntax support. He explains why the current callable syntax that uses strings and arrays with strings has problems: Nikita Popov 12:35 So the current callable syntax has a couple of issues. I think the core issue is that it's not really analysable. So if you see this kind of like array with two string signs inside it, it could just be an array with two strings, you don't know if that's supposed to actually be a static method reference. If you look at the context of where it is used, you might be able to figure out that actually, this is a callable. And like in your IDE, if you rename this method, then this array should also be this array elements will also be renamed. But that's like a lot of complex reasoning that the static analyser has to perform. That's one side of the issue. The second one is that colour bulls are not scope independent. For example, if you have a private method, then like at the point where you create your, your callable, like as an array, it might be callable there, but then you pass it to some other function, and that's in a different scope. And suddenly that method is not callable there. So this is a general issue with both the like this callable syntax based on arrays, and also the callable type, is callable at exactly this point, not callable at a later point. This is what the new syntax essentially addresses. So it provides a syntax that like clearly indicates that yes, this really is a callable, and it performs the callable culpability check at the point where it's created, and also binds the scope at that time. So if you pass it to a different function in a different scope, it still remains callable. Derick Rethans 14:08 This new feature is a subset of another RFC called partial function applications, which was proposed by Paul Crovella, Levi Morrison, Joe Watkins, and Larry Garfield, but ultimately got declined. So there we have it, a whirlwind tour of the major new features in PHP 8.1. I hope you will enjoy them. As I said in the introduction, I'm not sure if I will continue with the podcast to talk about PHP 8.2 features in 2022 due to time constraints. Let me know if you have any suggestions. Derick Rethans 14:41 Thank you for listening to this installment of PHP internals news, a 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 Episode #73: Enumerations Episode #74: Fibers Episode #76: Array Unpacking Episode #77: fsync function Episode #79: New in Initialisers Episode #81: noreturn type Episode #85: Add IntlDatePatternGenerator Episode #86: Property Accessors Episode #88: Pure Intersection Types Episode #90: Readonly Properties Episode #92: First-Class Callable Syntax Credits Music: Chipper Doodle v2 — Kevin MacLeod (incompetech.com) — Creative Commons: By Attribution 3.0

BIG Truths of Small Business
Ep 48 – The Power of MEDIOCRITY as a Strategy in Your Small Business…What?

BIG Truths of Small Business

Play Episode Listen Later Nov 12, 2021 61:16


Why in the world would a business podcast show discuss how "mediocrity" could be a strategy in your business? This is the type of subject matter your hosts, Joe Watkins and Travis Cassell, love to discuss. It's the unsung hero ideas that often times keep you in business, or even thrust your business to the next level. Tune in for another fantastic discussion on Big Truths of Small Business Podcast show. Visit us at https://BigTruthsofSmallBusiness.com (BigTruthsofSmallBusiness.com) Contact us at info@bigtruthsofsmallbusiness.com

The Rental Property Hangover Show
Ep 23 – The Top Reasons You Should Hire a Property Manager to Manage Your Rental Properties

The Rental Property Hangover Show

Play Episode Listen Later Oct 31, 2021 13:36


Many Investors, especially first time investors, do not realize why they should hire a property manager for managing their rental properties. Travis Cassell and Joe Watkins give you a quick run down on many of the best reasons. Remember, you bought rental properties to serve you, not for you to serve them. This episode is sponsored by https://yesirent.com (YesiRent Property Management in Atlanta, GA)

The Takeaway
Biden Outlines Agenda To Boost the Middle Class 2021-09-17

The Takeaway

Play Episode Listen Later Sep 17, 2021 53:13


Biden Outlines Agenda To Boost the Middle Class President Joe Biden delivered a speech geared toward a tax plan for the middle class. California had its recall election in which Governor Gavin Newsom beat out Republican frontrunner and recall candidate Larry Elder. The Takeaway hosts a politics roundtable with Dave Weigel, a national reporter covering politics for the Washington Post. Brendan Buck is a Republican strategist at Seven Letter and a former aide to Republican speakers of the House John Boehner and Paul Ryan. and Maya King, a politics reporter at Politico.  Political Power Struggle Continues in Haiti  Haiti is still struggling to recover a month after a major earthquake and storm hit the country and killed more than 2,000 people, with hundreds still missing. Meanwhile, Haiti is also dealing with a profound political crisis after the assassination of President Jovenel Moïse in July. This week, that political struggle came to a new head when a prosecutor accused the current leader of the country, Prime Minister Ariel Henry, of being involved with the killing. The Takeaway was joined by Jacqueline Charles, Caribbean Correspondent for the Miami Herald to discuss the ongoing power struggle.  Why Larry Elder's Run Has People Talking About Black Republicans Leah Wright Rigueur, author of The Loneliness of the Black Republican; Joe Watkins host of “State of Independence” and former aide to President George H.W. Bush; and Ron Christie, former special assistant to President George W. Bush, join us to discuss what Elder's campaign means for Black Republicanism in the U.S., and the long and complicated history between Black Americans and the Republican party. For transcripts, see full segment pages.

Politics with Amy Walter
Politics: Biden Outlines Agenda To Boost the Middle Class

Politics with Amy Walter

Play Episode Listen Later Sep 17, 2021 53:13


Biden Outlines Agenda To Boost the Middle Class President Joe Biden delivered a speech geared toward a tax plan for the middle class. California had its recall election in which Governor Gavin Newsom beat out Republican frontrunner and recall candidate Larry Elder. The Takeaway hosts a politics roundtable with Dave Weigel, a national reporter covering politics for the Washington Post. Brendan Buck is a Republican strategist at Seven Letter and a former aide to Republican speakers of the House John Boehner and Paul Ryan. and Maya King, a politics reporter at Politico.  Political Power Struggle Continues in Haiti  Haiti is still struggling to recover a month after a major earthquake and storm hit the country and killed more than 2,000 people, with hundreds still missing. Meanwhile, Haiti is also dealing with a profound political crisis after the assassination of President Jovenel Moïse in July. This week, that political struggle came to a new head when a prosecutor accused the current leader of the country, Prime Minister Ariel Henry, of being involved with the killing. The Takeaway was joined by Jacqueline Charles, Caribbean Correspondent for the Miami Herald to discuss the ongoing power struggle.  Why Larry Elder's Run Has People Talking About Black Republicans Leah Wright Rigueur, author of The Loneliness of the Black Republican; Joe Watkins host of “State of Independence” and former aide to President George H.W. Bush; and Ron Christie, former special assistant to President George W. Bush, join us to discuss what Elder's campaign means for Black Republicanism in the U.S., and the long and complicated history between Black Americans and the Republican party. For transcripts, see full segment pages.

The Takeaway
Biden Outlines Agenda To Boost the Middle Class 2021-09-17

The Takeaway

Play Episode Listen Later Sep 17, 2021 53:13


Biden Outlines Agenda To Boost the Middle Class President Joe Biden delivered a speech geared toward a tax plan for the middle class. California had its recall election in which Governor Gavin Newsom beat out Republican frontrunner and recall candidate Larry Elder. The Takeaway hosts a politics roundtable with Dave Weigel, a national reporter covering politics for the Washington Post. Brendan Buck is a Republican strategist at Seven Letter and a former aide to Republican speakers of the House John Boehner and Paul Ryan. and Maya King, a politics reporter at Politico.  Political Power Struggle Continues in Haiti  Haiti is still struggling to recover a month after a major earthquake and storm hit the country and killed more than 2,000 people, with hundreds still missing. Meanwhile, Haiti is also dealing with a profound political crisis after the assassination of President Jovenel Moïse in July. This week, that political struggle came to a new head when a prosecutor accused the current leader of the country, Prime Minister Ariel Henry, of being involved with the killing. The Takeaway was joined by Jacqueline Charles, Caribbean Correspondent for the Miami Herald to discuss the ongoing power struggle.  Why Larry Elder's Run Has People Talking About Black Republicans Leah Wright Rigueur, author of The Loneliness of the Black Republican; Joe Watkins host of “State of Independence” and former aide to President George H.W. Bush; and Ron Christie, former special assistant to President George W. Bush, join us to discuss what Elder's campaign means for Black Republicanism in the U.S., and the long and complicated history between Black Americans and the Republican party. For transcripts, see full segment pages.

ServingLeaders Podcast
What Does it Mean and Look Like to Shepherd the Shepherds?

ServingLeaders Podcast

Play Episode Listen Later Sep 9, 2021 20:33


On this episode, you will hear Joe Watkins, host of "State of Independence," interview ServingLeaders' COO Joe Bruni about the heart and vision of this ministry.

PHP Internals News
PHP Internals News: Episode 92: First Class Callable Syntax

PHP Internals News

Play Episode Listen Later Jul 22, 2021


PHP Internals News: Episode 92: First Class Callable Syntax London, UK Thursday, July 22nd 2021, 09:20 BST In this episode of "PHP Internals News" I chat with Nikita Popov (Twitter, GitHub, Website) about the "First Class Callable Syntax" RFC. 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 Hi, I'm Derick. Welcome to PHP internals news, the podcast dedicated to explaining the latest developments in the PHP language. This is Episode 92. Today I'm talking with Nikita Popov about a first class callable syntax RFC that he's proposing together with Joe Watkins. Nikita, would you please introduce yourself? Nikita Popov 0:36 Hi, Derick. I'm Nikita and I am still working at JetBrains. And still working on PHP core development. Derick Rethans 0:43 Just like about half an hour ago when we recorded an earlier episode. Nikita Popov 0:47 Exactly. Derick Rethans 0:48 This RFC has no relation to read only properties. What is the first class callable syntax RFC about? Nikita Popov 0:55 The context here is that PHP has the callable syntax based on literals, which is that if you just use a plain string, it's interpreted as a function name, and an array where the first element is an object, and the second one is a method name, that's methods. Or the first element is the class name, and the second one is method name, that's a static method. Derick Rethans 1:17 I would consider this concept a bit of a hack, especially the the one with the arrays, and I reckon you feel similar and hence this RFC? Nikita Popov 1:27 Yes, I do. So the current callable syntax has a couple of issues. I think the core issue is that it's not really analysable. So if you see this kind of like array with two strings inside it, it could just be an array with two strings, you don't know if that's supposed to actually be a static method reference. If you look at the context of where it is used, you might be able to figure out that actually, this is a callable. And like in your IDE, if you rename this method, then this array should also be this array element will also be renamed. But there's like a lot of complex reasoning that the static analyser has to perform. That's one side of the issue. The second one is that callables are not scope independent. For example, if you have a private method, then like at the point where you create your callable, like as an array, it might be callable there, but then you pass it to some other function. And that's in a different scope. And suddenly that method is not callable there. So this is a general issue with both like this callable syntax based on arrays, and also the callable type. It's a callable at exactly this point, not callable at a later point. This is what the new syntax essentially addresses. So it provides a syntax that like clearly indicates that yes, this really is a callable, and it performs the callable callability check at the point where it's created, and also binds the scope at that time. So if you pass it to a different function in a different scope, it still remains callable. Derick Rethans 3:01 And it's guaranteed to always be callable. Nikita Popov 3:03 Yeah, exactly. Derick Rethans 3:04 What does the syntax like? Nikita Popov 3:06 The syntax is the funny bit. As a bit of context. This proposal was created as an alternative or as a subset of the partial function application RFC. Derick Rethans 3:17 That is just as hard to pronounce as first class callable syntax RFC. Nikita Popov 3:21 Yes, that's why we say PFA. The PFA RFC has a more general feature. It also allows you to create a reference to a callable as a side effect. But more generally, it allows you to also bind some of the arguments to a fixed value. And has like finer control over for example, you can create a callable that has three required parameters, by passing three question mark arguments. While the new syntax only allows you to use the signature of the original function. But the syntax between both of those is compatible. So the new RFC is a subset of PFA. And that's why it uses the syntax where you do a normal function call, but then pass three dots or an ellipsis as arguments. Derick Rethans 4:08 Instead of passing the function's or method's normal arguments, you use the three dots. Nikita Popov 4:14 I think like the way to think about the syntax is that this is similar to like a variadic argument, or to the argument unpacking syntax, just that the arguments haven't yet been provided, they will be provided during the actual call. But I think the syntax was definitely the most contentious bit in the discussion of the RFC. I think this is mainly related to the fact that if you the see this code snippet, it looks a bit like, like the example code where the arguments haven't been filled in. While now this is like actual syntax. Derick Rethans 4:44 I'm sure there's quite a few tutorials out there explaining how PHP works by using dot dot dot. That is not something you can avoid. Nikita Popov 4:54 Well, we can avoid it, but it's fairly tricky question. I mean, the reason for this dot dot dot syntax, on one hand, this the compatibility with partial functions. I mean, the PFA, RFC has recently been declined. But in the future, we could extend the current syntax to full partial functions. And we would not end up with two different ways. So that's one benefit of the syntax. But the other part is that PHP has different symbol tables for different kinds of symbols. People often ask, why can't you just write like strlen as a plain name, not inside a string, and have that be treated as a reference to this function? And the answer to that is that we can't do that because you can't have a constant that's called strlen. Normally, that would be reference to constant and the same actually applies to all other callable types as well. So if you have something like methods, like object or method name, that would right now be interpreted as a property access. And for static methods, it will be interpreted as a as a class constant access. So we have this ambiguity here. Even if we add an additional symbol to this, for example, like for classes, we have the syntax, class name, and then scope operator class, that gives you the class name. We could do something like strlen, scope operator function, or fn, or whatever, and have that return the callable. That would work, but it also has some ambiguities. For example, if you have something like object, arrow methods, and then scope operator fn, you have this ambiguity. Is this referencing the method of that name? Or is it referencing a callable stored inside the property of that name? This is like fundamentally ambiguous. The way we would resolve it is we will just say that this index is only usable with real simple, so it will always refer to a method, and you couldn't use the syntax to convert the callable stored in a property into a proper callable. I'm actually not sure how I should distinguish these two concepts, because we have the existing callable, strings and arrays, and the first class callables, which are really closure objects. Derick Rethans 7:11 Which actually sort of brings me to the next question which just popped in my head, which is: Does this first class scalable syntax, what is returned as return a closure or an existing callable type as we have now, with a callable type being a single string, or this array syntax that we now use. Nikita Popov 7:28 The syntax returns a closure. Actually, the syntax works essentially the same way as the closureFromCallable method. And we do need to return a closure otherwise, we don't get this behaviour where the scope is bound at the time where the callable is created, rather than called. I think maybe going forward, I would generally recommend that people use a closure type, instead of a callable type in type declarations. I mean, you already cannot use callable for property types. Exactly due to this problem that callability is context dependent. While we only forbid it in property types, the same general problem also exists for argument and return types. And especially with the new syntax being introduced here, I think it's best to use closure instead of callable in the future. Derick Rethans 8:18 Does that sort of mean that first class scalable syntax is syntactic sugar? Or does it do more than the closureFromCallable method? Nikita Popov 8:27 No, I think it's effectively just syntactic sugar for closureFromCallable. Derick Rethans 8:34 I'm actually not sure whether Xdebug is be able to do anything with these closure from callable things to begin with. So that is something I'm going to have to investigate. Nikita Popov 8:44 Be able as in like, display that it actually refers to a specific method rather than just some kind of closure? Derick Rethans 8:51 Yeah, because at the moment, it shows you the file name and the line numbers, it doesn't have a name right if you create normal closures, but in this case, it's important to know that it actually refers to specific methods, which is the same thing as the closureFromCallable syntax would also do, but I've never done anything with that. Nikita Popov 9:10 But I think there is a way to get like the underlying prototype for the closure, and you should be able to determine it from there. Derick Rethans 9:18 The first class callable syntax, are there situations where you can't use it? Nikita Popov 9:22 One place where you don't want to use the new syntax as if you don't want to actually create a closure object, and validate callability at the point of creation. For example, creating this first class callable also implies that you have to autoload the class for a static method. If you have some kind of like large definition of of handler, of static handler methods for routes or something like that, then using the first class callable syntax would imply that you have to immediately create closure objects for all of these and immediately load all those classes. That's a use case where you might want to stick with the old syntax. Derick Rethans 10:01 But wouldn't opcache resolve that issue really? Nikita Popov 10:04 No, opcache is really exactly the reason why you wouldn't want to do that. For example, for my fastroute library, I cache all the data as a static array. And that's something that OpCache can cache very efficiently because it's in shared memory and accessing it is essentially zero cost. If you include something like first class callables in it, then those have to always be created at runtime, because we don't have concept like, like a persistent object. That means that this can no longer, I mean, the whole script can be in shared memory, but it still has to be executed always at runtime to construct the whole data structure. And that's going to be less efficient. To give a more clear answer to your question is that the first class callable syntax has a cost when creating the callable, and if you are in a situation where avoiding that cost is really critical for performance, that's why you wouldn't want to use it. Derick Rethans 11:00 And instead you'd have to use the old scalable syntax that we already have. Nikita Popov 11:03 Exactly. So for that reason, I think that the old syntax is not going to be removed in the near future at least, though maybe we can deprecate certain aspects of it. For example, the syntax also allows you to do highly context dependent things like referencing self, which is even worse than the situation with a private method, because self could refer to something different every time you call it. Those are some things we might want to deprecate early, but the main syntax itself was probably going to stay for a while. Derick Rethans 11:34 Because callability is checked when you create the closures does that mean it also checks for strictness then? If your PHP file has been declared with strict types? Nikita Popov 11:45 Strictness is handled the same as with closureFromCallable.The strictness is still determined at the time where the call is made, not where the callable was created, which actually, I am not a fan of how PHP handles strict types together with dynamic calls. But that's like a pre existing problem. And this isn't touching on this. Derick Rethans 12:06 The language has many issues that probably could have been done better if it was designed from scratch. But that ship has sailed 26 years ago. Nikita Popov 12:15 The strict types are not quite that old. Derick Rethans 12:17 No, that is true. The language itself is of course. Derick Rethans 12:23 Okay, thank you very much then, for taking the time this morning to talk to me about first class scalable syntax. Nikita Popov 12:29 Thanks for having me, Derick. Derick Rethans 12:30 Thank you for listening to this installment of PHP internals news, a 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: First Class Callable Syntax RFC: Partial Function Application Episode #89: Partial Function Applications Credits Music: Chipper Doodle v2 — Kevin MacLeod (incompetech.com) — Creative Commons: By Attribution 3.0

PHP Internals News
PHP Internals News: Episode 91: is_literal

PHP Internals News

Play Episode Listen Later Jul 15, 2021


PHP Internals News: Episode 91: is_literal London, UK Thursday, July 15th 2021, 09:19 BST In this episode of "PHP Internals News" I chat with Craig Francis (Twitter, GitHub, Website), and Joe Watkins (Twitter, GitHub, Website) about the "is_literal" RFC. 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 Hi, I'm Derick. Welcome to PHP internals news, a podcast dedicated to explaining the latest developments in the PHP language. This is Episode 91. Today I'm talking with Craig Francis and Joe Watkins, talking about the is_literal RFC that they have been proposing. Craig, would you please introduce yourself? Craig Francis 0:34 Hi, I'm Craig Francis. I've been a PHP developer for about 20 years, doing code auditing, pentesting, training. And I'm also the co-lead for the Bristol chapter of OWASP, which is the open web application security project. Derick Rethans 0:48 Very well. And Joe, will you introduce yourself as well, please? Joe Watkins 0:51 Hi, everyone. I'm Joe, the same Joe from last time. Derick Rethans 0:56 Well, it's good to have you back, Joe, and welcome to the podcast Craig. Let's dive straight in. What is the problem that this proposal's trying to resolve? Craig Francis 1:05 So we try to address the problem where injection vulnerabilities are being introduced by developers. When they use libraries incorrectly, we will have people using the libraries, but they still introduce injection vulnerabilities because they use it incorrectly. Derick Rethans 1:17 What is this RFC proposing? Craig Francis 1:19 We're providing a function for libraries to easily check that certain strings have been written by the developer. It's an idea developed by Christoph Kern in 2016. There is a link in the video, and the Google using this to prevent injection vulnerabilities in their Java and Go libraries. It works because libraries know how to handle these data safely, typically using parameterised queries, or escaping where appropriate, but they still require certain values to be written by the developer. So for example, when using a query a database, the developer might need to write a complex WHERE clause or maybe they're using functions like datediff, round, if null, although obviously, this function could be used by developers themselves if they want to, but the primary purpose is for the library to check these values. Derick Rethans 2:05 That is a method of doing it. What is this RFC adding to PHP itself? Craig Francis 2:09 It just simply provides a function which just returns true or false if the variable is a literal, and that's basically a string that was written by the developer. It's a bit like if you did is_int or is_string, it's just a different way of just sort of saying, has this variable been written by the developer? Derick Rethans 2:28 Is that basically it? Craig Francis 2:30 That's it? Yeah. Joe Watkins 2:32 It would also return true for variables that are the result of concatenation of other variables that would pass the is literal check. Now, this differs from Google, because they introduced that at the language level, but not only at the language level, at the idiom level. So that when you open a file that's got queries in PHP, commonly, if they're long, basic concatenation is used to build the query and format it in the file so that it's readable. So that it wouldn't really be very useful if those queries that you see everywhere in stuff like PHPMyAdmin, and WordPress, and Drupal and just normal code weren't considered literal, just because they're spread over several lines with the concatenation operator. It's strictly not just stuff that's written by the programmer, but also stuff that was written by the programmer or concatenated, with other stuff that was written by the programmer. Derick Rethans 3:33 Now in the past, we have seen something about adding taint supports to PHP, right? How is this different, or perhaps similar, to taint checking? Craig Francis 3:44 At the moment today, there is a taint extension, which is something you need to go out your way to install, and actually learn about and how to use. But the main difference is that taint checking goes on the basis of say, this variable is safe or unsafe. And the problem is that it considers anything that had been through an escaping function like html_entities as safe. But of course, the problem is that escaping is difficult. And it's very easy to make mistakes with that. A classic example is if you take a value from a user, an SSH SSH, their homepage URL, if you use HTML encoding, and then put it into the href attribute of a link, that can also result in HTML injection vulnerability, because the escaping is not aware of the context which is used. Because if the evil user put in a JavaScript URL, that is in inline JavaScript, that has created a problem because taint checking would assume that because you use HTML encoding it is safe, and all I'm saying is that is it creates a false sense of security. And by stripping out all that support for escaping, it means that you can focus on libraries doing that work because they know the context, they understand the domain, and we can just keep it a much simpler, and much safer approach. Derick Rethans 5:02 Would you say that the is_literal feature is mostly aimed at library authors and not individual developers? Craig Francis 5:09 Yeah, exactly. Because the library authors know what they're doing. They're using well tested code, many eyes over it. The problem libraries have at the moment is that they trust the developer to write things themselves. And unfortunately, developers introduce a lot of injection vulnerabilities with those strings before they even get into the library. Derick Rethans 5:30 How would a library deal with with strings that aren't literal then? Craig Francis 5:35 So it really depends on each individual example. And the RFC does include quite a lot of examples of how each one will be dealt with. The classic one is, let's say you're sorting by a column in a database, because if we're dealing with SQL, the field name might come from the user. But that is also quite a risky thing to do if you start including whatever field name the user wrote. So in the RFC, I've created a very simple example where the developer would create an array of fields that you can sort by, and then whatever the user provides, you search through that array, and you pull out the one that you that matches and is fine. And therefore you are pulling out a literal and including into the SQL. To be fair, these ones are quite unique. And each one needs to be dealt with in its own way. But I've yet to find an example where you can't do it with a literal. Having said that, I think Larry Garfield actually gave an example where a content management system changed its database structure. And the way that would work is the library would have to deal with it, they would receive the value for a field, and then that field would be escaped and treated as a field, it understands it as a field, and it will process it as such, then it can include into the SQL, knowing full well that everything else in that SQL is a literal, and then it can just build up SQL in its own way internally. Derick Rethans 6:58 Okay, talking a little bit about the implementation here. Since PHP seven, we have this concept of interned strings, or maybe even before that actually, I don't quite remember. Which is pretty much a flag on each string and PHP that says, this's been created by the engine, or by coconut. Why would strings have to have an extra flag here to remember that it is created by the programmer? Joe Watkins 7:21 Well, interned does not mean literal. It's an optimization in the engine, should we use strings. We're free to do whatever we want with that. At the moment, it by happenstance, most interned strings are those written by the programmer. If you think about the sort of strings that are written by the programmer, like a class name, when those things are declared internally, by an extension, or by core code, those things are interned as if they were written by the programmer. They don't mean literal, we're free to use interned strings for whatever we want. For example, a while ago, someone suggested that we should intern keys while JSON decoding or unserializing. It didn't happen, but it could happen. And then we'd have the problem of, well, how do we separate out all this other input. There is another optimization attached to interned strings, which is one character strings, where if you type only one character, or you call a Class A or B, or whatever, the permanent interned string will be used. That results in when the chr function is called, that results in the return of that function always being marked as interned. So it would show as literal, which is not a very nice side effect. And that's just a side effect that we can see today. We don't want to reuse the string really, it does need to be distinct. Also, if you're going to concatenate, whether you do it with the VM or a specific function, obviously, you need to be able to distinguish between an interned string and a literal string, which interned means it has a specific life cycle and specific value. And we can't break that. Derick Rethans 9:00 So there are really two different concepts, is what you're saying, and hence, they need to have a special flag for that? Joe Watkins 9:06 Yeah, they're very, two very separate concepts. And we don't we don't want to restrict the future of what interned strings may be used for. We don't want to muddy the concept of a literal. Derick Rethans 9:16 Of course, any sort of mechanism that languages built into solve or prevent injections in any sort of form, there's always ways around it. Theoretically, how would you go around the is_literal checks to still get a user inputted value into something that passes the is_literal check? Craig Francis 9:36 Generally speaking, you would never need it because the library should know how to deal with every scenario anyway. And it's not that difficult. We're only talking about things like in the database world, you'll be taking value from field names and therefore it should receive field names or table names. And, you know, we are providing a guardrail as a safety net. And what should happen is that the default way in which programmers work should guide them, to do it the right way. We're not saying that you can't do weird things to intentionally work around this. A really ugly version, which you should never do, but use eval and var_export together, it's horrible. But if you are so desperate, you need to get around this. That's what we're doing it. But in reality, we can't find any examples where you'd actually need to do this. Joe Watkins 10:22 I would say that, hey, there's this idea that most people writing PHP are using libraries, and they're using frameworks. I don't actually find that to be true. I've been working in PHP for a long time. And most of the big projects I've worked on for a long time did not start out using frameworks. And they did not start out using libraries. They look a bit like that today, but their core, they are custom. There may be a framework buried in there. But there is so much code that the framework is a component and is not the main deal. Most code, we actually do write ourselves, because that's what we're paid to do. I think we don't decide how people are going to use it, and we don't decide where they're going to use it. The fact is, like Craig said, it's a guardrail that you can work around easily. And if you find a use case for doing that, then we shouldn't prejudge, and say, well, that's the wrong thing to do. It might not be the wrong thing to do. For example, an earlier version of the idea included support for integers. We considered integers safe, regardless of their source. If you wanted to do that, in your application, you could do that very easily and still retain the integrity of the guardrail is not compromised. I wouldn't focus on this is for libraries, and this is for frameworks, because these things become so small in the scheme of things that they're meaningless. I mean, most of the code we work on is code that we wrote, it is not frameworks. Derick Rethans 11:48 That also nicely answers my next question, which is what's happened to integers, which have now nicely covered. The RFC talks about that as hard to educate people to do the right thing. And that is_literal is more focused, so to say, on libraries, and perhaps query building frameworks as the RFC alludes to. But I would say that most of these query building tools or libraries already deal with escaping from input value. So why would it make sense for them to start using is_literal if you're handling most of these cases already anyway? Craig Francis 12:24 If you look at the intro of the RFC, there's a link to show examples of how libraries currently receive the strings. And you're right about the Query Builder approach is a risky thing, I would still argue it's an important part. That's why libraries still provide them. Doctrine has a nice example of DQL. The doctrine query language is an abstraction that they've created, which is also vulnerable to injection vulnerabilities. And it gives the developer a lot more control over a very basic API. I still think people should try and use the higher level API's because they do provide a nice safe default, but that depends on which library use, they're not always safe by default. So for example, when you're sort of saying: I want to find all records where field parameter one, is equal to value two, a lot of the libraries assumed that the first parameter there is safe and written by the developer. They can't just necessarily simply escape it as though it's a field because that value might be something like date, bracket, field, bracket, and it's sort of relying on the developer to write that correctly, and not make any mistakes. And that hasn't proven to be the case, you know, they do include user values in there. Derick Rethans 13:43 Just going back a little bit about some of the feedback, because feedback to the RFC has happened for quite some time now. And there were lots of different approaches first tried as well, and suggested to add additional functions and stuff like that. So what's been the major pushback to this latest iteration of the RFC? Joe Watkins 14:01 So I think the most pushback has come from an earlier suggestion that we could allow integers to be concatenated and considered literal. We experimented with that, and it is possible, but in order to make it possible, you have to disable an optimization in the engine, that would not be an acceptable implementation detail for Dmitri. It turns out we didn't actually, we don't need to track their source technically, but it made people extremely uncomfortable when we said that, and even when we got an independent security expert to comment on the RFC, and he tried to explain that it was no problem, but it was just not accepted by the general public. I'm not sure why. Derick Rethans 14:45 All right. Do you have anything to add Craig? Craig Francis 14:48 The explanation given by people is they liked the simpler definition of what that was as if it's a string written by the developer. Once you start introducing integers from any source, while it is safe, it made people feel, yeah, what is this. And that's where we also had the slight issue because we had to find a new name for it. And I did the silly thing of sort of asking for suggestions, and then bringing up a vote. And then we had, I think it's 18 to three people saying that it should be called is_trusted, and you have that sinking moment of going, Oh, this is going to cause problems, but hey, democracy. It creates that illusion that it's something more. So that's why we sort of went actually, while I like Scott's idea of having the idea of maybe calling it is_noble. It is a vague concept, which people have to understand. And it's a bit strange. Whereas going back to the simpler, original example, they've all seem to grasp grasp of that one. And we could just keep with the original name of is_literal, which I've not heard any real complaints about. Derick Rethans 15:53 I think some people were equivalenting is_trusted with something that we've had before in PHP called Safe mode, which was anything but of course. Craig Francis 16:02 Yes, no, definitely. Derick Rethans 16:03 We're sort of coming to the end of what to chat about here. Does the introduction of is literal introduce any BC breaks? Craig Francis 16:11 Only if the user land version of is_literal, which I'm fairly sure is going to be unlikely. So on dividing their own function called that. Derick Rethans 16:18 Did you check for it? Craig Francis 16:20 Yes. Derick Rethans 16:21 So if you haven't found it, then it's unlikely to to exist. Craig Francis 16:24 There are still private repositories, we can't shop through all their show, check through all their code. But yeah. Derick Rethans 16:29 Did I miss anything? Craig Francis 16:31 We covered future scope, which is the potential for a first class type, which I think would be useful for IDs and static analysers. But this is very much a secondary discussion, because that could build on things like intersection types, but we still need to focus on what the flag does. And there's also possibility of using this with the native functions themselves, but we do have to be careful with that one, because, you know, we got things like PHPMyAdmin. We have to be able to make the output from libraries as trusted because they're unlikely to still be providing a literal string at the end of it. So that's a discussion for the future. And the only other thing is that, you know, the vote ends on the 19th of July. Derick Rethans 17:08 Which is the upcoming Monday. How is the vote going? Are you confident that it will pass? Craig Francis 17:13 Not at the moment, we're sort of trying to talk to the people who voted against it. And we've not actually had any complaints as such. The only person who sort of mentioned anything was saying that we should rely on documentation and the documentation is already there. And it's not working. I think a lot of people just voted no, because they just sort of going well, that's the safe default. I don't think it's necessary. Or, you know, I'd like the status quo. And we still are trying to sell the idea and say: Look, it's really simple. It's not really having a performance impact. And it can really help libraries solve a problem, which is actually happening. Derick Rethans 17:46 Is this something that came out of the people that write PHP libraries or something that you came up with? Craig Francis 17:52 So I've come gone to the library authors and suggested you know, this is how Google do it. Would you like something similar? And we've certainly had red bean and Propel ORM saw show positive support for that. And I've also talked to Matthew Brown, who works on the Psalm static checking analysis. He's very positive about it, so much so that Psalm now also includes this as well. Obviously, static analysis is not going to be used by everyone. So we would like to bring this back to PHP so that libraries can use it without relying on all developers using static analysis. Derick Rethans 18:25 Thank you very much. Glad that you were both here to explain what this is_literal RFC is about. Craig Francis 18:31 Thank you very much, Derick. Joe Watkins 18:33 Thanks for having us. Derick Rethans 18:37 Thank you for listening to this installment of PHP internals news, a 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: is_literal Credits Music: Chipper Doodle v2 — Kevin MacLeod (incompetech.com) — Creative Commons: By Attribution 3.0

PHP Internals News
PHP Internals News: Episode 89: Partial Function Applications

PHP Internals News

Play Episode Listen Later Jun 17, 2021


PHP Internals News: Episode 89: Partial Function Applications London, UK Thursday, June 17th 2021, 09:17 BST In this episode of "PHP Internals News" I chat with Larry Garfield (Twitter) and Joe Watkins (Twitter, GitHub, Blog about the "Partial Function Applications" RFC. 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 Hi, I'm Derick. Welcome to PHP internals news, a podcast dedicated to explaining the latest developments in the PHP language. This is Episode 89. Today I'm talking with Larry Garfield and Joe Watkins about a partial function application RFC that they're proposing with Paul Crevela and Levi Morrison. Larry, would you please introduce yourself? Larry Garfield 0:36 Hello World. I'm Larry Garfield or Crell on most social medias. I'm a staff engineer for Typo3 the CMS. And I've been getting more involved in internals these days, mostly as a general nudge and project manager. Derick Rethans 0:52 And hello, Joe, would you please introduce yourself as well? Joe Watkins 0:55 Hi, I'm Joe, or Krakjoe, I do various PHP stuff. That's all there is to say about that really. Derick Rethans 1:02 I think you do quite a bit more than just a little bit. In any case, I think for this RFC, you, you wrote the implementation of it, whereas Larry, as he said, did some of the project management, I'm sure there's more to it than I've just paraphrased in a single sentence. But can one of you explain in one sentence, or if you must, maybe two or three, what partial function applications, or I hope for short, partials are? Larry Garfield 1:27 Partial function application, in the broadest sense, is taking a function that has some number of parameters, and making a new function that pre fills some of those parameters. So if you have a function that takes four parameters, or four arguments, you can produce a new function that takes two arguments. And those other two you've already provided a value for in advance. Derick Rethans 1:54 Okay, I feel we'll get into the details in a moment. But what are its main benefits of doing this? What would you use this for? Larry Garfield 2:01 Oh, there's a couple of places that you can use partial application. It is what got me interested. It's very common in functional programming. But it's also really helpful when you want to, you have a function that like, let's say, string replace takes three arguments, two of which are instructions for what to replace, and one of which is the thing in which you want to replace. If you want to reuse that a bunch of times, you could build an object and pass in constructor values and save those and then call a function. Or you can just partially apply string replace with the things to search for, and the things to replace with and get back a function that takes one argument and will do that replacement on it. And you can then reuse that over and over again. There are a lot of cases like that, usually use in combination with functions that wants a callback. And that callback takes one argument. So array map or array filter are cases where very often you want to give it a function that takes one argument, you have a function that takes three arguments, you want to fill in those first ones first, and then pass the result that only takes one argument to array map or a filter, or whatever. So that's the one of the common use cases for it. Derick Rethans 3:15 That's the benefits and some of its background comes from functional programming, as you've just mentioned. What is the syntax that you're proposing and some of the semantics? Larry Garfield 3:26 The syntax that we've developed, are two placeholders that you can use in a function call. So if you're calling a function as you normally would, but for one of the arguments, you pass a question mark, or at the tail end, you have an ellipsis (dot dot dot), then that tells the engine: This is not a function call. This is a partial application. And what it will do is return not the result of the function but return a closure object that has the the arguments that correspond to those question marks. And then when called with those arguments, we'll pass those along with the original function. Probably easier to explain, if I use a concrete example, using the string replace example we talked about before, you would call it with str_replace, the example from the RFC, hello, hi, question mark. What that gives you is a callable, a closure that has one argument, which will take its type and name from str_replace. So the third argument to str_replace essentially gets copied into that closure. And what closure does internally when you call it with that one argument is it just calls string replace with hello, hi, and whatever argument you gave it and returns that value. It is conceptually very, very similar to just writing a short lambda or an arrow function that takes one arguments and calls string replace hello, hi, and that argument. In most cases, it ends up functioning almost exactly like that. There's a few subtle differences in a few places. But most of the time, you can think of it working essentially like that. The question mark means one required argument only. The dot dot dot means zero or more arguments, if you want to, say provide the first argument to a function, and then dot dot dot would mean: And then all of the other arguments, however many there are, even if it's that zero, those are what's left, which languages other languages that have partial application as a first class feature, usually end up doing it that way where you can only pre fill from the left. PHP, because the placeholder lets us do it in any order. So we can skip over arguments if we want to, which is quite nice. But it means that you can take a function and reduce it to, I want to prefill just these two arguments and leave these three arguments for the new function, or I want to prefill these arguments from the left, and then everything else, whatever it is, is left. It also lets you do cute things like if you provide all of the arguments to a function, and then just tack on a dot dot dot the end of it, then you get back a closure that takes essentially zero arguments. But when called, will call that other function. So it's lets lets you really easily build a delayed function as you need to. Derick Rethans 6:15 When do the arguments to the function get evaluated then? Larry Garfield 6:18 Arguments are evaluated in advance. So this is the subtle difference between partial application and the short lambda syntax. In a short lambda, what happens is, essentially, that entire expression on the right hand side gets wrapped up into a closure. And so any arguments that are compound like they have a function call that is inside one of the placeholders, or one of the arguments, that'll get evaluated later. With partial application, the function that is in a parameter position gets evaluated first and reduced to a value. And that value gets partially applied to the function. 90% of the time, that's not going to be an issue. There are a few cases where doing it one way or the other may be subtly different, but you'll spot those fairly easily. Derick Rethans 7:02 So the RFC talks about things that you can do, but also a few things that you cannot do or don't want to do yet. What are these things that partials won't support, or run support yet, at least? Larry Garfield 7:13 The main thing that it doesn't support is named placeholders. You can pre fill a value or an argument with a named named argument. But not a named placeholder. Those have to be positional. Named placeholders are complicated to implement, and run into a question of, if you provide those in a different order, does that also change the order of the arguments in the partially applied function that you get back in that closure? And there's a good argument to be made that either way is logical. And so we're like, no, does not deal with it, too complicated. We'll just positional only. And you cannot specify an optional arguments either. It's just again, too complicated. Things get too weird. If you have those advanced cases, use our short lambda, that works just fine. If you want to just make a new function that defers to a new function, and change its API in the process, short lambda works fine. And it's still quite short. Derick Rethans 8:13 I know the RFC talks a little bit about references, but I don't like talking about references. So let's skip that part. In my opinion, they should be removed from the language. But I know we can't. Larry Garfield 8:22 There's occasionally used for them. But very occasionally. Derick Rethans 8:25 There's a bunch of technical things that I also want to chat about. And hopefully, Joe, if you want to fill in, I'd be more than welcome to hear your opinions on these things. But the first one is that PHP has this thing called func_get_args. How does that work with these partials? How does that tie in together? Joe Watkins 8:42 It should mostly behave as if you've invoked the function directly. We don't want there to be a huge discrepancy between. The callee know whether they've been called through partial application or complete application. It should be the same. Derick Rethans 8:58 That is good to know. I mean, I always like it how things work as people expect them to work, right? Joe Watkins 9:03 Yeah. Derick Rethans 9:04 We already have used the dot dot dot operator for variadics. But you're reusing the dot dot dot, or ellipses, as you more eloquently call it earlier. Here again, as well, is that not going to cause issues? Or does that tie in well together? Joe Watkins 9:18 Well, there's quite a lot of debate about what's the right symbol to use. I think it's dot dot dot, and I think Larry agrees with me. But there's some people who want to stick an extra question mark on the end, which to me looks like it reads zero to one. And to Larry, it looks like an extra character that's just not needed. Other people say it makes sense for them. But if you can type three characters and not four, I mean, you need a really good argument. The arguments that have been put forward so far don't really make very much sense for me. Maybe we should ask that question and it doesn't really matter. In the end, what the syntax is, is if it's a difference between it getting in and not getting in, then we'll just put the extra question mark on there. I don't really have a really good argument to change it like to be like that. Derick Rethans 10:05 To be honest, to me, it looks like you then have two placeholders. Joe Watkins 10:09 Yeah. Derick Rethans 10:10 I don't feel the need for it. Joe Watkins 10:11 That's also another argument because we've introduced this one symbol, and then this other symbol, and then you put them together. And that's two things. I mean, you can't have one and one equals one. Derick Rethans 10:20 Fair enough. The RFC does touch on another quite interesting thing, I think, which is constructors, which it also be able to partially apply. But of course, you've mentioned that, that arguments get applied immediately when you do the substitution, when you do the partial application. But of course, the constructor is a bit weird because a constructor runs immediately after an object has been constructed. So how does that work together with partials? Joe Watkins 10:47 So at first, we made it so like if you invoke a constructor with reflection, and you just invoke it over and over again, it'll invoke it on the same object, you won't get back a new object. It's not the constructor that returns the object, it's the new operator. So first, we had a bit dumb. And we did just like what reflection does. And if you applied to a constructor, you'd get back a closure that just repeatedly invokes the constructor, which is, as Larry called it, quite naive. So we went back and revisited that. And so now it acts like a factory. Every time you invoke the closure return from an application, you get a brand new object, which is more in line with what people expect. And it's also quite cool. It's one of my favourite bits, actually as it turns out. Derick Rethans 11:31 In my opinion, it also makes more sense than then having an apply to the same object over and over again. Whether I'd like it or not, I don't know yet. Joe Watkins 11:39 Oh, the other option is traditional constructors to avoid the surprising behaviour. But that would be just a strange. Larry Garfield 11:45 There are a lot of use cases where you want to take a bunch of values, convert them to objects using an array map, supporting constructors for that makes total sense to me. Derick Rethans 11:54 And I would probably say, though, that I would prefer not allowing it over it applying over the same object over again. You've touched a little bit on some common cases where you want to use this, do you perhaps have some other ideas where this might be really useful? Larry Garfield 12:10 So there's three use cases that we think are probably going to be the lion's share. One is to just use the dot dot dot operator. So you have some function or method call, call it with dot dot dot, and that's it. You prefill nothing, which gives you back a closure that is identical in signature to the function or the method that you're applying it to. Everything we've said about functions applies the methods here as well. Which means we now effectively have a new way to refer to a function or a method and make a callable out of it, that doesn't involve just sticking it into a string. You just say, hey, function called dot dot dot, or an arrow bar, parentheses, dot dot dot, parentheses. And now you can turn any function or method into a callable and pass that around. And it's still, it's not wrapped up into the silly array format, it's still accessible to static analysers and refactoring tools. Hopefully, with this, you will never need to refer to a function name using a string ever again, never refer to a method call as an array of object and method. So that that just is not needed any more in the vast majority of cases. Derick Rethans 13:20 That alone is probably worth having them, maybe. Larry Garfield 13:23 And Nikita had an RFC that was doing just that, and nothing else. It's kind of a junior version of this. I don't think that's necessary, the full full scope here works, and gives us that. The second use case that I think is going to be common are unary functions. That's functions that take a single argument. More to the point, as I mentioned before, a lot of functions take a callback. And that callback needs a single argument, array map, array filter, some validation routines, a lot of other things like that. So it's now stupidly easy to take any arbitrary function or method and turn it into a single parameter function, which you can then pass as a callback to array map, array filter, all these other tools, and it just becomes really easy to pre fill things that way. The third is the other one I mentioned earlier, if you pre fill all the arguments, and then just put a dot dot dot at the very end, which means zero or more, you now have a function that takes no arguments, but calls the original function you specified with all the arguments you specified. This often the case for default values, where I want to have a default value available, but don't want to take the time to compute it in advance because it might be expensive. Whatever function it is that will determine that default value, I just partially apply that and give it all the arguments and I get back a callable. That creating a callable is dirt cheap, but when I actually need that value, I can then call it at that time, but it won't actually get called unless I need it. That's another use case that we expect to be common. There are no doubt others that we haven't thought of, or that will be less common, but still useful. I think this will probably replace a large chunk of the use cases for short lambdas. Not because short lambdas are bad, they're wonderful. But so many of them convert a function to a simpler function. And this gives us an even more compact, more readable syntax for that, with even less extra symbols and flotsam around it. Derick Rethans 15:24 I saw, hopefully as a joke, saying that, instead of using the question mark, we should use dollar sign dollar sign, and then we should call the token name T_BLING. Larry Garfield 15:36 This RFC actually has a storied history. Several years ago, Sara Golemon had proposed porting the pipe operator from Hack to PHP. The pipe operator is an operator available in a lot of different languages that lets you string together a series of functions. So you pass a function, pass an argument into one function, its results you pass to the next function, its results, you pass the next function and so on, which is a good case for unary functions. In Hack's syntax, they don't use a function on the right hand side, they use an arbitrary expression, and then dollar dollar as a placeholder for where to put the value from the left hand side from the previous step. It's the only language that does that. Derick Rethans 16:20 The other language that does it is bison. Larry Garfield 16:23 Or Bison also does that style of? Derick Rethans 16:25 It does something weird like that, yeah. Have a look at the grammar file. Larry Garfield 16:29 I've looked in there. It's scary. So at the time, she didn't actually put an implementation in for it. But there was some discussion about it. I joked that if she wanted to do that, she should call it T_BLING. And she thought it was hilarious, but never went anywhere. A year ago, I started working on a pipe operator RFC that did just the pipe part, but used a callable on the right hand side, instead of an expression, more like F#, and Haskell, and other languages that have a pipe operator. And their main response to that was, we'd like this, this is cool, except that just using short lambdas on the right all the time to make unaries is too ugly. We want partial application first. So I spent a while trying to bribe someone with more experience and knowledge than me to work on partial application. I tried bribing Ilya Tovolo, to do so by working with him on enumerations. And we got enumerations in, but he doesn't have the time to work on partial application. Levi and Paul had already written an RFC for partial application that had no implementation. It's just a skunkworks, essentially. Then a few weeks ago, Joe pops up and starts working on an implementation for partials. And I, to this day, don't know what interested him in it. But I'm very happy about this fact. So as we updated the RFC, I knew that people want a bike shed about syntax. So I threw that in as a joke. I don't think we're actually going to do that. It's just a little inside reference that is now no longer inside. Derick Rethans 17:56 Joe what made you work on partials, then? Joe Watkins 17:58 It's interesting to write. I've had my fun whether it gets in or not. Derick Rethans 18:02 Sometimes that's the case, right? So just working on this is all the fun. Larry Garfield 18:06 Sometimes it's fun to just run down rabbit holes for the heck of it. And sometimes really cool things can come out of that sometimes. Derick Rethans 18:12 At some point, I might have to implement support for partials like I have for closures in Xdebug as well. Because at some point, people might want to debug these things. So I'm a little bit interested in how do these the closures that it generates? Where does it store the already applied arguments? Joe Watkins 18:29 So partials have the same binary struct up to this point or of the closure, and then after that there's some extra fields. Derick Rethans 18:36 Would they still have the names? Joe Watkins 18:39 No, because named arguments aren't actually named, that information is lost. By the time we've got them, we don't have any name information. We've only got their correct position, according to the call that was made. Derick Rethans 18:50 And every argument that hasn't been filled and doesn't have a special placeholder in there, or does it keep track of which ones have been filled in? Joe Watkins 18:56 We've got two special placeholders internally, you won't see as undef or null or anything. Derick Rethans 19:02 Okay, that's good to know. What has the reaction been so far? Larry Garfield 19:05 Slightly positive. There were a lot of discussions early on about do we support argument reordering? And should it use a single placeholder or two separate placeholders? Originally, we had one and realized after a while, that doesn't actually work. There're use cases where that will be confusing. Overall, the feedback has been quite positive, and I fully expect that to pass. Really the only question people are still debating about at this point is ellipsis versus ellipses question mark. Joe Watkins 19:34 Yeah, I think the first version of the RFC was quite well received. Someone said we could document it as to make a partial sprinkle or question mark over it and hope for the best. Derick Rethans 19:44 Oh, that's good to hear. With feature freeze coming not pretty soon now. When do you think you're putting this up for a vote? Larry Garfield 19:51 Probably in the next couple of days. The only question I think is whether we include a second question for which variadic placeholder to use, which syntax/ Or if we just say it's dot dot dot, go away. Other than that it should go to a vote probably before this episode airs. Derick Rethans 20:06 Thank you very much, both of you for taking the time to me today to talk about partials. Larry Garfield 20:11 Thank you again Derick, hopefully see you once more on this season. Joe Watkins 20:15 Thanks Derick, see you soon. Derick Rethans 20:21 Thank you for listening to this installment of PHP internals news, a 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: Partial Function Applications Credits Music: Chipper Doodle v2 — Kevin MacLeod (incompetech.com) — Creative Commons: By Attribution 3.0

The Rental Property Hangover Show
Ep 22 – Google Doesn't Have Your Next Real Estate Deal – How to Find a Deal in 2021's High Market

The Rental Property Hangover Show

Play Episode Listen Later Jun 4, 2021 14:49


The Rental Property Hangover Podcast ventures into a real investing topic on this episode. Investors are the heart and blood of the our target audience. Joe Watkins and Travis Cassell of https://yesirent.com (YesiRent Property Management) discuss their deep experience in how to source deals when Google delivers no result, because of this 2021 high real estate market.

PHP Internals News
PHP Internals News: Episode 84: Introducing the PHP 8.1 Release Managers

PHP Internals News

Play Episode Listen Later May 13, 2021


PHP Internals News: Episode 84: Introducing the PHP 8.1 Release Managers London, UK Thursday, May 13th 2021, 09:12 BST In this episode of "PHP Internals News" I converse with Ben Ramsey (Website, Twitter, GitHub) and Patrick Allaert (GitHub, Twitter, StackOverflow, LinkedIn) about their new role as PHP 8.1 Release Managers, together with Joe Watkins. 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 Hi, I'm Derick, welcome to PHP internals news, a podcast, dedicated to explaining the latest developments in the PHP language. This is episode 84. Today I'm talking with the recently elected PHP 8.1 RMs, Ben Ramsey and Patrick Allaert. Ben, would you please introduce yourself. Ben Ramsey 0:34 Thanks Derick for having me on the show. Hi everyone, as Derick said I'm Ben Ramsey, you might know me from the Ramsey UUID composer package. I've been programming in PHP for about 20 years, and active in the PHP community for almost as long. I started out blogging, then writing for magazines and books, then speaking at conferences, and then contributing to open source projects. I've also organized a couple of PHP user groups over the years, and I've contributed to PHP source and Docs and a few small ways over the years, but my first contributions to the project were actually to the PHP GTK project. Derick Rethans 1:14 Oh, that's a blast from the past. You know what, I actually still run daily a PHP GTK application. Ben Ramsey 1:21 Oh, that's interesting. What does it do? Derick Rethans 1:23 It's Twitter client. Ben Ramsey 1:24 Did you write it. Derick Rethans 1:26 I did write it. Basically I use it to have a local copy of all my tweets and everything that I've received as well, which can be really handy sometimes to figuring out, because I can easily search over it with SQL it's kind of handy to do. Ben Ramsey 1:41 It's really cool. Derick Rethans 1:42 Yep, it's, it's still runs PHP 5.2 maybe, I don't know, five three because it's haven't really been updated since then. Ben Ramsey 1:49 Every now and then there will be some effort to try to revive it and get it updated for PHP seven and eight, but I don't know where that goes. Derick Rethans 1:59 I don't know where that's gone either. In this case, for PHP eight home there are three RM, there's Joe Watkins who has done it before, Ben, you've just introduced yourself, but we also have Patrick Allaert, Patrick, could you also please introduce yourself. Patrick Allaert 2:13 Hi Derick, thank you for the invitation for the podcast, my name is Patrick Allaert. I am a Belgian freelancer, living in Brussels, and I spent half of my professional time as a IT architect and/or a PHP developer, and the other half, I am maintaining the PHP extension of Blackfire, a performance monitoring solution, initiated by Fabien Potencier. Derick Rethans 2:39 I didn't actually know you were working on that. Patrick Allaert 2:40 I'm not talking much about it but more and more. So I succeeded to Julian Pauli, who by the way was also released manager before so now I'm working with Blackfire people. It's really great, and this gives me the opportunity to spend about the same amount of time developing in C and in PHP. This is really great because at least I don't. It's not just only doing C. I, at least I connect with what you can do with PHP. I see the evolution from both sides. And this is really great. It's great, it's also thanks to you Derick, you granted me access to PHP source codes. That was to contribute to testfest something like 12/13 years ago, it was, CVS, at that time. Derick Rethans 3:28 CVS, so now I remember that. Basically, what you both of you're doing is making me feel really old and I'm not sure what I like that or not. I think we all have gotten less head on our heads and greyer in our beards. In any case, what made you volunteer for being the PHP 8.1 RM? Patrick Allaert 3:46 In my case, I think there were two two reasons is that PHP really brings a lot to me in my career, everything is built around my expertise in PHP and its ecosystem. By volunteering as a release manager. I think I can give something back to PHP, because the last time I contributed to source code of PHP, it was really years ago. If I remember it was array to string conversion that was very silent and not emitting any notice; now it's warning. In the meantime, so I think that was PHP 5.0, Derick Rethans 4:22 Ages ago. Patrick Allaert 4:23 Ages ago. Indeed. I was quite passive I was mostly reading on PHP internals, and most of the time now that is quite big so if, if I had to say something I could always see some someone who already just said the same thing so I was not saying: plus one. This is one of the reason and the second one I think is that I think it's kind of a unique opportunity, and I can learn a couple of things. I think, on day one when the Rasmus gave me the access, saying that I can do to OAuth authentication on SSH and that was: okay, day one I already learned something, so that was really cool. Derick Rethans 4:58 And you Ben, I think you tried to be the PHP eight zero release manager as well at some point. That didn't happen at the time, but you've tried again. Ben Ramsey 5:06 I almost didn't try again. I don't know why but when Sara announced it this year, I thought about it, and I don't know, I tossed it around a little bit, but I've been wanting to do it for a long time and I've noticed as Joe Watkins recently put it on a blog post that we need to help the internals avoid buses. So since this is a programming language that I've spent a lot of time with just as Patrick mentioned, both in and out of my day jobs. I want it to stick around to thrive. Since I'm not a C guru, but I do have a lot of experience managing open source software. I wanted to volunteer as a release manager, and I hope that I can use this as an opportunity to inspire others who might want to get involved, but don't know how. Derick Rethans 5:55 And of course you just mentioned Joe, Joe Watkins, who is the third PHP release manager for 8.1, and that is a bit of a new thing because in the past, when the past many releases I can remember you've only had two most of the time. Ben Ramsey 6:09 I think, on the mailing list that came up early on in the thread, and there was a general consensus, I think, consensus may be the wrong word, but there were a couple of people who spoke up and said that they wouldn't mind seeing multiple rookies or mentees or whatever you want to call us, and Joe when he volunteered to be the veteran, and he was the only one who volunteered as the veteran. He said that he would take on two. And so that's that's why Patrick and I are both here and I think that's a good idea, because it will continue to help, you know, us to avoid buses. Derick Rethans 6:46 Yep. And if you're three, you only have once every 12 weeks. Whereas of course, in my case doing it for PHP 7.4 it's every four weeks, because it's me on my own, isn't it. Which is unfortunate that these things happen because people get busy in life sometimes. Getting started being a PHP release manager can be a bit tricky sometimes because just before we started recording, I had to add you to a few mailing lists. Do you think you've now have access to everything, or what do you need access to to begin with? Patrick Allaert 7:18 There is the documentation about release managers, what are you supposed to do, and, and there is an effort of documentation, what you have to ask, in terms of access, and that's great. We are probably going to contribute with our findings to, to improve the documentation. Once you did a bit of the setup, mainly needs to access the servers. You should also know what is the workflow and what are the usual tasks. This is mentioned in the documentation, but I think it would be better to have a live discussion with someone that already did it. The fact that we are doing it with Joe Watkins, who is not only a release manager of 8.1, but also previous release manager, that should be really smooth, to, to see what the the orders and what is the routine to do. To do so, why do you think Ben? Ben Ramsey 8:16 I agree. I think that, I mean we've only just gotten started. It's only this I believe is what was it two weeks ago that we, that this was announced. So this is the first time that Patrick and I have actually spoken face to face. Hi, Patrick! We've communicated by email and slack. I'm sorry not Slack, StackOverflow chat. Joe has given us a lot of good pointers. I feel like some of the advice he's given his been really good, but it's like Patrick said, we haven't really had like a live, like one on one chat, or face to face chat, where we could kind of get caught up on things and understand what the flow looks like. So last week I started going through a lot of the pull requests on GitHub. And I've been tagging them as bug fixes or are enhancements, and there's also an 8.1 milestone that I've been adding to a lot of the tickets, are the pull requests, and I've merged a few of them, but I think that I've merged them a little prematurely. So there were some funny things that came up out of that. I do plan to blog on this, but one of Nikita's comments in the Stack Overflow chat was, you've just made it your personal responsibility to add tests for uncovered parts of the Ristretto255 API. Derick Rethans 9:40 Right, exactly say because I'm doing release management for PHP seven four. I don't do any merging at all. The only thing I'm doing is making the packages, and then coordinating around them. I'm not even sure whether it is a responsibility of a release manager to do. Ben Ramsey 9:55 It may not be a responsibility. I felt like it was helpful maybe to go ahead and take a look and see where things were trying to follow up with people, to get them to respond if something had been sitting there for two weeks or so without any kind of movement. I would, you know, leave a message saying what's the status of this. Derick Rethans 10:19 I know from the documentation that we have on our Release Management process. And many of these steps actually been replaced by a Docker container that actually builds the binaries, so I'm not sure whether Joe I've mentioned that to you yet, because I'm not sure whether that was around when he did release management, the previous time. Ben Ramsey 10:36 Right, it wasn't around either when he did release management, but he's also mentioned that he would like for us to learn how to do it without the Docker container, even if we do plan to use the Docker container. Derick Rethans 10:48 That's fair enough, I suppose. I have never had to do that, but that there you go. Now, what is the timeline like? Patrick Allaert 10:56 In terms of timeline I think the very first thing is being all three release managers having live discussion to define what, what we should do, when we should do, and how. This way we clearly knows our responsibility and the sequence, and also how we are going to organize. Do we do every three releases? We share the task? How are we going to do the work together. In terms of timeline I think the very first release is going to happen in June, if I remember correctly. I set up an agenda sheet with ICAL so that we all can put that in our calendar, nothing really clear on my side. Derick Rethans 11:41 From what I can see from the to do list that the first alpha release is June, 10, which is exactly a month away from when we are recording this. Patrick Allaert 11:51 Right, yeah, it's one month come down before the very first one. I think it might be great that the very first release being made by by Joe, so that we can really see every single step he's doing, so that we can do the same. However, I guess it's kind of a shared responsibility to do triage of bugs and pull requests. Ben Ramsey 12:14 Right. I think there is some desire among the community to see these releases in real time at least a few of them. So I'm going to try to encourage us to stream some of them maybe live, or at least record it and put it up somewhere for people to kind of just see the process to demystify it, so to speak. Derick Rethans 12:35 I actually tried it a few months ago to record it, but there were so many breaks and pauses and me messing things up, and me swearing at it, that I had to throw away the recording. I mean the release went out just fine but like absolute as again... I can imagine the first few times, you're trying this there might be some swearing involved, even though you might not vocalize that swearing. Ben Ramsey 12:56 Oh I'll vocalize it. Derick Rethans 12:58 Fair enough. This is something that is that you're going to have to do for the next three and a half years. Do you think you'll be able to have the time for it in another three years? Ben Ramsey 13:08 I mean for myself I I'm committed to it, I definitely believe that I'll have the time over the next three and a half years, and I'll make the time for it. Derick Rethans 13:18 What about you, Patrick? Patrick Allaert 13:20 Exactly the same. I think it's the least that I can do to PHP, in terms of contributing back, there will be some changes because I it's not like it's, it's not like the infrastructure is something that doesn't change, like for example recently, GitHub, being more having more focus rather than our Git infrastructure. So the changes that will happen, we will have to adapt, I have the impression that release manager has to, every time it's adapting to change this, and that will be very interesting. Derick Rethans 13:53 Luckily we haven't had too many. The only thing I had to change with a change from git dot php.net to get up, was my local remote URLs. So there wasn't actually a lot to do, except for running git remote set-url. I was pleasantly surprised by this because if anything messing around with Git isn't my favourite thing to do. Ben Ramsey 14:14 Also, merging is a little bit more streamlined now you don't have to go to qa.php.net to do that. Derick Rethans 14:21 I've never done anything without Ben Ramsey 14:23 Really? Oh, I guess you would commit directly to git.php.net? Derick Rethans 14:27 Yep. Ben Ramsey 14:28 If there were PRs on GitHub, the only way to merge them well, probably wasn't the only way but one way to merge them was to go to qa.php.net, and if you were signed in with your PHP account, you were able to see all the pull requests, and choose to merge them. Derick Rethans 14:46 Yep, also something I've never done as an RM. The only way how I have reacted with pull requests is commenting on the pull requests, and I wouldn't merge them myself. With the only exception of security releases where you need to cherry pick from certain branches into your release branches. I'm not always quite sure about it as the responsibility for release managers actually do the merging into the main branches. From what I've understood is it's always the people that made the contributions, who just merge themselves, and you then sometimes need to make sure that they merge into the right branch instead of just master, which is what, as far as I know, the, the buttons on GitHub do. Ben Ramsey 15:21 Well the individual contributors, in this case, if they're doing like a bug fix or something, most of them, or many of them aren't don't have permission to do the merging, so someone else has to merge it, like, often I see Nikita merging, a lot of the pull requests. Derick Rethans 15:37 Maybe I've just been relying on Nikita to do that then. I'm not sure how, bug fixes are merchants debug fig branches. I think it's usually been done by people that have access already anyway, because it's often either Nikita or Cristoph Becker, or Stas, and the main developments, or the main other new things that people don't have access to are usually to master. So I guess there's a bit of a difference now. I'm not sure what if any other questions, actually, would have anything to add yourself? Patrick Allaert 16:05 maybe something that would be quite challenging is the very recent discussion about the system that we, that we might change from. The system or the issue tracker with where we have all the bugs. I understand the current issues, I understand as well the drawbacks of what is possibly, for example GitHub issues. It might be great for some, would it be great for us? If we do it was going to be in the bring a lot of changes, and I think, 8.1 will be already slightly impacted by the change to GitHub in terms of pull request strategies, but potentially there will be another change, which is around the bugtracking system. Derick Rethans 16:54 I have strong opinions about this, but we'll leave that for some other time. What about you, Ben? Ben Ramsey 17:00 Right, I actually don't think that we're going to end up making a lot of changes in that regard, very, like, not in the near term, probably. But I did want to point out, or promote that I've started journaling some of these experiences, and capturing information mainly for my own purposes, but I'll be posting these publicly so that others can follow along. My blog is currently down right now. Derick Rethans 17:28 That's because you're using Ruby isn't it? Ben Ramsey 17:30 That's because I'm using Ruby. The short story of it is that there are some gems that were removed from the master gem repository at some point in the past, or the versions I'm using were removed, either for security reasons or what I have no idea why. And that's put, put it into a state where I just can't easily update. I just haven't, I just don't care, right now, so I plan on migrating to something else. In the short term, I'm not going to be doing that. So I've started writing at https://dev.to/ramsay and Dev.to is just a developer community website. If you're on Twitter. It's run by @thePracticalDev, I'll be, I'll be blogging there. Derick Rethans 18:18 And I'll make sure to add a link to that in the show notes as well. Thank you for taking the time this afternoon, or morning, to talk to me about being a PHP 8.1 release managers. Ben Ramsey 18:28 Thank you for having me on the show. Patrick Allaert 18:30 Thank you, Derick for that podcast. I'm really glad you invited us. Derick Rethans 18:39 Thank you for listening to this installment of PHP internals news, a 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 PHP 8.1 Release Todo List Ben's journal Joe Watkins' Avoiding busses blog post Credits Music: Chipper Doodle v2 — Kevin MacLeod (incompetech.com) — Creative Commons: By Attribution 3.0

The Rental Property Hangover Show
Ep 20 – How to Determine Market Rent or Value?

The Rental Property Hangover Show

Play Episode Listen Later Apr 30, 2021 10:34


Determining how to set your rental rate for your investment property could be the most important decision you make as a landlord. Learn from the pros at https://yesirent.com (YesiRent Property Management), Joe Watkins and Travis Cassell, what the primary indicators of rent value are and how get your next rental property rented quickly to great tenants.

Middle Market Musings
Episode 3 Joe Watkins, Hagelin Flavor Technologies

Middle Market Musings

Play Episode Listen Later Apr 30, 2021 36:40


Joe Watkins has been a business owner, investor and observer in the flavors & fragrances industry for 40 years.  He was co-owner of Hagelin Flavors Technologies prior to its sale to a European strategic buyer. Joe shares his perspectives on the challenges – and eventual rewards – of operating a successful business. The guys draw out tales from a storied and well-traveled career.

BIG Truths of Small Business
Ep 42 - On a War Footing in Your Business?

BIG Truths of Small Business

Play Episode Listen Later Apr 22, 2021 39:43


Joe Watkins and Travis Cassell boldly compare some of the attitudes and thinkings business owners may have that are shared by warriors in war. On Big Truths of Small Business, we often look outside of our daily battles and paradigms to see how battles are being fought elsewhere. Come take this journey with us.

The Extreme History Project: The Dirt on the Past
Indigenous Archaeologist, Joe Watkins, on the Past as Present

The Extreme History Project: The Dirt on the Past

Play Episode Listen Later Feb 9, 2021 70:01


Join us as we talk with archaeologist Joe Watkins about Indigenous Archaeology and his current role as President of the Society for American Archaeology. We discuss experimental archaeology in the form of building and living in a pit house for a year, his research with the Ainu of Japan, and so much more!   For more information,   Indigenous Archaeology: American Indian Values and Scientific Practice - https://www.amazon.com/Indigenous-Archaeology-American-Scientific-Archaeologies/dp/0742503291   The Story of the Choctaw Indians: From the Past to the Present - https://www.amazon.com/Story-Choctaw-Indians-Present-American/dp/1440862664

The Rental Property Hangover Show
Ep 15 – The YesiRent Boys forecast 2021 Atlanta Real Estate

The Rental Property Hangover Show

Play Episode Listen Later Jan 1, 2021 13:50


Joe Watkins and Travis Cassell, our hosts, and founders of https://yesirent.com (YesiRent Property Management out of McDonough, GA) (Atlanta Metro), use there experience and finger on the pulse of the Atlanta real estate market and give you a peek into what 2021 might bring for your investment properties.

BIG Truths of Small Business
Ep 30 - What to do When Uncertainty Strikes In Your Business

BIG Truths of Small Business

Play Episode Listen Later Nov 19, 2020 62:16


Uncertainty-- it can wreak havoc in your life and business if not put into perspective. Co-hosts Travis Cassell and Joe Watkins share their research and experience on how to turn uncertainty into opportunities and put into perspective.

BIG Truths of Small Business
Ep 29 - What are the Blind Spots in Your Small Business?

BIG Truths of Small Business

Play Episode Listen Later Nov 12, 2020 61:11


Often times as small business owners we assume we have all of the answers, which contributes to managing our business in tunnel vision. Founders of https://yesirent.com (YesiRent Property Management out of Atlanta, Georgia), Joe Watkins and Travis Cassell share their thoughts on the dangers of Blind Spots and what to do about them.

The Rental Property Hangover Show
Ep 13 - Should I Sell My Rental Property? What are the Consequences?

The Rental Property Hangover Show

Play Episode Listen Later Nov 5, 2020 13:29


As property managers at https://yesirent.com (YesiRent Property Management), we get asked all of the time- "Should I sell my rental property now?" The answer to this question is more loaded than just what the market is doing right now. Joe Watkins and Travis Cassell explore some of those additional things to think about when selling your rental property. If you have topics you would like us to discuss, email rentalpropertyhangover@yesirent.com

The Milk Bar
Jason Forrest in The Milk Bar - Episode 593

The Milk Bar

Play Episode Listen Later Nov 5, 2020 67:39


Recorded for release W/C 2nd Nov 2020 Sylvester McCoy chats about his career including Doctor Who and The Hobbit, an interview I did for Science of Cinema. Also we are joined by Rhys Mason from Myoto to talk about their music and we  have a tune from Sam Lambeth too. Daniel Bean talks about the plight of the circus industry and this years cancelled season for Circus Petite as well as hearing about the film South of the river from one of it's stars and the writer and director Joe Watkins.

Money Talks
Political tussle douses hopes of economic stimulus package | Money Talks

Money Talks

Play Episode Listen Later Nov 4, 2020 12:45


The outcome of the US presidential election is hanging in the balance with no clear winner as vote-counting continues some key swing states. President Donald Trump has called for legitimate tallying efforts to stop, while his Democratic challenger Joe Biden has urged patience. The contest to control the US Senate also appears at a stalemate, with Republicans and Democrats grabbing a nearly even split of seats. As Mobin Nasir reports, that could delay much-needed stimulus spending for an economy that's been ravaged by the coronavirus pandemic. For more on this knife edge race Joe Watkins spoke to us from Philadelphia. He's a former White House aide under the President George H.W. Bush's administration and is the host of 'State of Independence. And Simon Rosenberg joined us from Washington DC. He's the President of the New Democrat Network and a former senior consultant for the Democratic Congressional Campaign Committee. #USstimulus #Pandemic #USelections

BIG Truths of Small Business
Ep 27 - The Basics of the House Flipping Business – by Joe Watkins

BIG Truths of Small Business

Play Episode Listen Later Oct 22, 2020 57:30


Joe Watkins, co-host of Big Truths of Small Business, has personally flipped over 400 properties in his real estate career. In this episode, he outlines the basics, the opportunities, the pitfalls, and much more for the new real estate investor looking to flip a house for profit. Check out our other shows and episodes at https://yesirent.com/podcast.

BIG Truths of Small Business
Ep 25 - Self-imposed Stress by the Business Owner – Why and How to Identify & Resolve

BIG Truths of Small Business

Play Episode Listen Later Oct 10, 2020 61:31


It has been proven by many doctors and scientists that stress is a leading cause of all of kinds of health problems and risks. But how does stress impact you in business; and moreover, who is creating the most stress in your business? The Big Truths of Small Business podcast, hosted by Joe Watkins and Travis Cassell and sponsored by https://yesirent.com (YesiRent Property Management), explores how the business owner's self-imposed stress may be the biggest issue and can be resolved if identified, and strategies are used to manage it.

The Rental Property Hangover Show
Ep 8 - When do you Hire a Property Manager? and Why?

The Rental Property Hangover Show

Play Episode Listen Later Sep 24, 2020 12:16


Your hosts Travis Cassell and Joe Watkins, of https://yesirent.com/property-management-atlanta/ (YesiRent Property Management), give you the bottom line on when to hire a property management company or property manager for your rental property. They scratch the surface as to why as well. You may be surprised at their answers....

BIG Truths of Small Business
Ep 23 - Learn How NAYSAYERS can be Identified in Your Business and Life – and a Live Performance of “The Naysayers” Song

BIG Truths of Small Business

Play Episode Listen Later Sep 24, 2020 64:58


The Big Truths goes deep on this episode as we dive into understanding how the Naysayers in your life and business affect you. What are the different types of Naysayers? How do you identify Naysayers? Could there be good Naysayers in your ear? We are also thrilled to unveil a live performance of "Naysayers" written and performed by Joe Watkins, the co-host of the show. It's just Joe and Travis today giving you some real nuggets. Stay tuned till the end.

PHP Internals News
PHP Internals News: Episode 68: Observer API

PHP Internals News

Play Episode Listen Later Sep 17, 2020


PHP Internals News: Episode 68: Observer API London, UK Thursday, September 17th 2020, 09:31 BST In this episode of "PHP Internals News" I chat with Levi Morrison (Twitter, GitHub) and Sammy Kaye Powers (Twitter, GitHub, Website) about the new Observer API. 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:15 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 68. Today I'm talking with Levi Morrison, and Sammy Powers, about something called the observer API, which is something that is new in PHP eight zero. Now, we've already passed feature freeze, of course, but this snuck in at the last possible moment. What this is observer API going to solve? Levi Morrison 0:44 the observer API is primarily aimed at recording function calls in some way so it can also handle include, and require, and eval, and potentially in the future other things, but this is important because it allows you to write tools that automatically observe, hence the name, when a function begins or ends, or both. Derick Rethans 1:12 What would you use that for? Levi Morrison 1:13 So as an example, Xdebug can use this to know when functions are entered or or left, and other tools such as application performance monitoring, or APM tools like data dog, New Relic, tideways, instana so on, they can use these hooks too. Derick Rethans 1:38 From what I understand that is the point you're coming in from, because we haven't actually done a proper introduction, which I forgot about. I've been out of this for doing this for a while. So both you and Sammy you work for data dog and work on their APM tool, which made you start doing this, I suppose. Sammy Kaye Powers 1:54 Yeah, absolutely. One of the pain points of tying into the engine to to monitor things is that the hooks are insufficient in a number of different ways. The primary way that you would do function call interception is with a little hook called zend_execute_ex and this will hook all userland function calls. The problem is, it has an inherent stack bomb in it where if, depending on your stack size settings you, you're going to blow up your stack. At some point if you have a very very deeply deep call stack in PHP, PHP, technically has a virtually unlimited call stack. But when you use zend_execute_ex, it actually does limit your stack size to whatever your settings are your ulimit set stack size. One of the issues that this solves is that stack overflow issue that you can run into when intercepting userland calls but the other thing that it solves is the potential JIT issues that are coming with PHP eight, where the optimizations that it does could potentially optimize out a call to zend_execute_ex where a profiling or APM tracing kind of extension would not be able to enter set that call, because of the JIT. The Observer API enables to solve multiple issues with this. Not only that, there's more. there's more features to this thing, because zend_execute_ex by default will intercept all userland function calls, and you have no choice but to intercept every single call, whereas, this API is designed to also allow you to choose which function calls specifically you want to intercept, so there is on the very first call of a function call. And it'll basically send in the zend function. This is a little bit of a point we've been kind of going back and forth on what we actually send in on the initialisation. But at the moment it is a zend function so you can kind of look at that and say okay do I want to monitor this function or observe it. If your extension returns a handler and says this is my begin handler This is my end handler. Those handlers will fire at the beginning and end of every function call. So it gives you a little bit of fine grain sort of resolution on what you want to observe. The other really kind of baked in design, part of the design is, we wanted it to play well with neighbours, because some of the hooks, at the moment, well, pretty much all of the hooks. Aside from typical extension hooks. Whenever you tie into the engine it's very easy to be a noisy neighbor. It's very easy not to forward a hook along properly it's very easy to break something for another extension. This has like kind of neighbour considerations baked right in. So when you actually request a begin and end hook. It will manage on its side, how to actually call those, and so you don't have to forward along the hook to other other extensions to make it a little bit more stable in that sense. Derick Rethans 4:52 From working on Xdebug, this is definitely problem forwarding both zend_execute_ex and also zend_execute_internal, which is something I also override are of course. And I think there are similar issues with, with the error display as well and PHP eight will also have a different, or a new API for that as well. Also coming out of a different performance monitoring tool, which is interesting to see that all these things works. You mentioned the Zend function thing and I'm not sure how well versed the audiences and all this internal things what is this zend function thing? Levi Morrison 5:24 as any function in the engine is what represents a function so not the scope that it's called in but the scope that it's defined in. It represents both method calls and function calls. It's triggered whenever a user land function is in play. So it has the function name, the name of the class that it's associated with, it tells you how many parameters you have and things like this. It does not tell you the final object that it's called with, and this is partly why we are debating what exactly should get passed in here, because some people may care. Oh, I only want to observe this with particular inheritors or, or other things of that nature so there's a little bit of fine tuning in the design perhaps still but the basic idea is you'll know the name of the function. What class it's in, and it's bound late enough in the engine that you would also have access to whatever parents that class has, etc. Derick Rethans 6:33 Does it contain the arguments as well, that are being sent, or just a definition of the arguments? Levi Morrison 6:38 The Zend function only contains the definition of the arguments. The hook is split into three sections kind of so there's like initialisation and then begin and end. Initialisation only gives you the Zendo function but to begin and gives you access to what's called the Zend execute data which has more information, including the actual arguments being passed. Derick Rethans 7:03 Okay, so it's the idea of the initialisation, just to find out whether you actually want to intercept the function. And if you want remember that and if not it wouldn't ever bother are the trying to intercept that specific zend function either. Sammy Kaye Powers 7:17 Actually what we actually pass into that initialization function is has been sort of up for debate. The original implementations, that is plural. We've had many different implementations of this thing over the, over the year. Derick you did mention that this got squeezed in last minute it has been a work in progress for a very long time and it actually is fulfilling JIT work so there's a specific mention in the JIT RFC that that mentions an API that is going to be required to intercept some function calls that are optimized out so that's why we were able to sneak in a little bit past feature freeze on the actual merge I think. But what we actually sent into this initialization function is spin up two for debate based on how we've actually implemented it. One of the original early implementations actually called this initialization function during the runtime cache initialization, just basically kind of a cache that gets initialized before the execute data actually is created. We didn't have the option of sending in the execute data at that time, we did have the zend function. So we were sending that in. Later on this implementation get refactored to a number different ways. We have the option now to send an execute data if we wanted to, but it might be sufficient to send in the op array instead of the Zend function. The op array should be the full sort of set of opcodes that basically is a function definition from the perspective of of internals, but it also includes like includes and evals. Having additional information at initialisation might actually be handy. I think we're still kind of maybe thinking about that potentially changing I don't know what do you think Levi. Levi Morrison 8:59 Yeah, you can get the oparray from the function so it's a little pedantic on which one you pass in I guess, but yeah. The idea is that we don't want to intentionally restrict it. It's just that the implementations have changed over the year so we're not sure exactly what to pass in at the moment. I think a zend function's pretty safe, passing in a zend oparray is perhaps a better signal to what it's actually for, because it can measure function calls, but also include, require, eval. And the oparray technically does contain more information. Again, if you have zend function, you can check to see if it is an oparray and get the operate from the Zend function. So a little pedantic but maybe a little better in conveying the purpose and what exactly it targets. Derick Rethans 9:56 And you can also get the oparray from zend_execute_data. Levi Morrison 10:00 Yeah. Derick Rethans 10:01 If I want to make use of this observe API I will do that? I guess, you said only from extensions and not from userland. Sammy Kaye Powers 10:08 Exactly. At the moment you would as an extension during MINIT or startup, basically in the very early process with the actual PHP processes starting up, would basically register your initialization handler. And at that point, under the hood, the whole course of history is changed for PHP at that point, because there is a specific observer path that happens when an observer extension registers at MINIT or startup. At that point the initialization function will get called for every function call. The very first function call that that function called is called, I know that sounds confusing but if you think you have one function and it's called 100 times that initialization will run one time. That point you can return either a begin and or at an end handler. If you return null handlers it'll never, it'll never bother you again for that particular function, but it will continue to go on that is don't mentioned earlier for every new function that encounters every new function call and encounters, I should say. Derick Rethans 11:12 There is not much overhead, because the whole idea is that you want to do as little overhead as possible I suppose. Levi Morrison 11:19 Exactly, we have in our current design in pre PHP 8.0. You could hook into all function calls using that zend_execute_ex, but it has performance overhead just for doing the call. So let's imagine we're in a scenario where we have two extensions, say Xdebug and one APM product. Both of them aren't actually going to do anything on this particular call it will still call those hooks, which has overhead to it. So if nobody is interested in a function, the engine can very quickly determine this and avoid the overhead of doing nothing. This way we only pay significant costs, if there's something to be done. Derick Rethans 12:09 You're talking about not providing much overhead at all. Just having the observer API in place, was there any performance hits with that? Sammy Kaye Powers 12:17 That was actually one of the biggest sort of hurdles that we had to overcome specifically with Dmitri getting this thing, merged in because it does touch the VM and whenever you touch the VM like we're talking like any tiny little null check that you have in any of the handlers is probably going to have some sort of impact at least enough for Dmitri, who understandably cares about like very very very small overheads that are happening at the VM level, because these are happening for every function call. You know, this is, this is not something that's just happening, you know, one time during the request is happening a lot. In order to apeace Dmitri and get this thing merged in, it basically had to have zero overhead for the production version non observer, his production version but on the non observed version on the non observed path it had to basically reach zero on those benchmarks. That was quite a task to try to achieve. We went through four, about four or five different ways of tying into the engine, we got it down to about, like, two new checks for every function call. And that still was not sufficient, so we end up going with based on Dmitris excellent suggestion, went with the opcode specialization, to implement observers so that at compile time. We can look and see if there's an observer extension present and if there is, it will actually divert the function call related opcodes to specific handlers that are designed for observing and that way once, once you get past that point, the observer path is already determined at compile time and all the observer handlers fire. In a non observed environment, all of the regular handlers will fire without any observability checks in them. Derick Rethans 14:03 At the end of getting within the loss of zero or not? Levi Morrison 14:07 It is zero for certain things. Of course, there are other places besides the VM that you have to touch things here and there for, you know, keeping code tidy and code sane but it's effectively zero, for all intents and purposes. Goal achieved. I will say zero percent. Derick Rethans 14:30 I think the last version of the patch that I saw didn't have the code specialization in it yet. So I'm going to have to have a look at myself again. Levi Morrison 14:39 Yeah, the previous version had very low overhead, so low overhead that you couldn't really observe it through any time based things. But if you measured instructions retired or similar things from the CPU, then it was about point four to 1% reduction, and personally I would have said that's good enough because all of them would correctly branch predict, because you either have handlers in a request, or you don't. And so they would perfectly predict, every time. But still, those are extra instructions technically so that's why Dmitri pushed for specialization and those are no longer there. Derick Rethans 15:27 Does that mean there are new opcodes specifically for this, or is it just the specialization of the opcodes that is different? Sammy Kaye Powers 15:33 It's just this specialization. During the process of going, figuring out what exactly Dmitri needed to mergeable actually proposed an implementation that added basically an observer version of every kind of function call related opcode like do_fcall_observed, or observed_return or something like that. With, opcodes specialization, it reduces the amount of code that you have to write sort of at the VM level, it doesn't change the amount of code that's generated though because with opcode specialization, basically the definition file will get expanded by this, this php file that actually generates C code. When you add a specialization, to a handler that already has specializations on it, it will expand quite considerably. The PR at one point ended up being like 10,000 lines or something like that, so we had to do some serious reduction on the number of handlers that were automatically generated. Long story short, is there are no new opcodes but there are new opcode handlers to handle this specific path. Derick Rethans 16:40 Not sure what, if anything more to ask about the Observer API, do you have anything to ask yourself? Levi Morrison 16:45 I think it's worth repeating the merits of the observer API and where we're coming from. The key benefits in my opinion are that it allows you to target per function interception for observing. It allows you to do it in a way that's that plays nice with other people in the ecosystem and increasingly that's becoming more important. We've always had debuggers and some people occasionally need to turn debuggers on in production and other things like this. But increasingly, there are other products in this space; the number of APM products is growing over time. There are new security products that are also using these kinds of hooks. And I expect over time we will see more and more and more of these kinds of of tools, and so being able to play nicely is a very large benefit. At data dog where Sammy and I both work we've hit product incompatibilities a lot of times, and some people are better to work with than others. I know that Xdebug has done some work to be compatible with our product specifically but you know competitors aren't so interested in that. We care a lot about the community right, we want the whole community to have good tools, and I don't think we actually mentioned yet that we did collaborate with some other people and competitors in this space. That hopefully proves that that's not just words of mine that, you know, we actually met with the competitors who were willing to and discussed API design, and use cases, and making sure that we could all work together and compete on giving PHP good products rather than, you know, hoarding technical expertise and running over each other and causing incompatibilities with each other. So I think those are really important things. And then lastly, it does not have that stack overflow potential that the previous hooks you could use did. Derick Rethans 18:54 Yeah, which is still an issue for Xdebug but but I fixed that in a different way by setting an arbitrary limit on the amount of nested levels you can call, right. Levi Morrison 19:02 Yeah, and in practice that tends to work pretty well because most people don't have intentionally deep code. But for some people they do. And we can't as an APM product for instance say: sorry your code is just not good code, we can't observe a crash your your your thing and so we can't make that decision. And then the biggest con at the moment is that it doesn't work with JIT, but I want to specifically mention that, that's not a technical thing, that's just a not enough time has been put in that space yet because this was crunched to the last second trying to get it in. And so, some things didn't get as much focus yet. Hopefully by the time 8.0 gets released it will be compatible with JIT, or at least it will be only per function, so maybe a function that gets observed, maybe that can't be JIT compiled that specific function call, but all the other function calls that aren't observed would be able to. We'll see obviously there's still work to do there but that's our hope. Derick Rethans 20:10 What happens now, if, if you use the observer API and the JIT engine is active? Does it just disable the JIT engine. Sammy Kaye Powers 20:16 Yep. It just won't enable the JIT at all. In fact, it just goes ahead and disables it, if an observer extension is enabled and there is a little kind of debug message that's emitted inside of the OP cache specific logs that will will say specifically why the JIT isn't enabled just in case you're sitting here trying to turn the JIT on you're like, why isn't enabled, and it'll say there's an observer extension present so we can enable the JIT. Hopefully they'll be able to work a little bit, and maybe just change an optimization level or something in the future. I'd like to give a shout out to Benjamin Eberlei, who has been with us since the very beginning on this whole thing has been vetting the API on his products, has gotten xhprof on not only the original implementation but also on the newest implementation, and has just been a huge help in actually getting this thing pushed in, and was said some of the magic words that actually, this thing merged in, when it was looking like it wasn't gonna land for eight dot O and got it landed for eight dot one so Benjamin gets a huge thumbs up. So, Nikita Popov, Bob Weinand, and Joe Watkins really early on. These are awesome people from internals who have spent some time to help us vet the API, but also to help us with specific implementation details. It's been just a huge team effort from a lot of people and it was just like, really great to work across the board with everybody. Derick Rethans 21:35 Yeah, and the only thing right now of course is all the extensions that do observe things need to be compatible with this. Sammy Kaye Powers 21:43 Exactly. Derick Rethans 21:44 Which is also means there's work for me, or potentially. Sammy Kaye Powers 21:47 Absolutely. Levi Morrison 21:49 I guess one one minor point there is that if an extension does move to the new API, it is a little bit insulated from those that haven't moved to the new API. So, to some degree, it still benefits the people who haven't moved yet because the people who have moved have one less competitor in the same same hook, so it's just highlighting the fact that it plays nicely with other people. Derick Rethans 22:14 Is opcache itself actually going to use it or not? Levi Morrison 22:17 So this is focused only on userland functions; past iterations that was not the case. Dmitri kind of pushed back on having this API for internals and so that got dropped. I don't think at this stage there's any there's any value in opcache using it specifically, but there are some other built in things like Dtrace. I don't know how many people actually use Dtrace; I actually have used it once or twice, but Dtrace could use this hook in the future instead of having a custom code path and things like that. Derick Rethans 22:49 For Xdebug I still need to support PHP seven two and up, so I'm not sure how much work it is doing it right now, but definitely something to look into and move to in the future, I suppose. Well thank you very much to have a chat with me this morning. I can see that for Sammy the sun has now come up and I can see his face. Thanks for talking to me this morning. Sammy Kaye Powers 23:10 Thanks so much, Derick and I really appreciate all the hard work you put into this because I know firsthand experience how much work podcasts are so I really appreciate the determination to continue putting out episodes. It's a huge amount of work so thanks for being consistent. Levi Morrison 23:26 Yeah, thank you so much for having us Derick. Derick Rethans 23:30 Thanks for listening to this installment 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/patroen. 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 Pull Request: https://github.com/php/php-src/pull/5857 Credits Music: Chipper Doodle v2 — Kevin MacLeod (incompetech.com) — Creative Commons: By Attribution 3.0

BIG Truths of Small Business
Ep 21 - UnSelling – How to Really Serve and Sell Your Clients – Back with Clay Cutts, Square Peg Counseling & Coaching

BIG Truths of Small Business

Play Episode Listen Later Sep 11, 2020 56:06


Back with Clay Cutts with Square Peg Consulting & Coaching, Joe Watkins and Travis Cassell of YesiRent Property Management take a deep dive into a mystery that all businesses can identify with--how do we sell to more clients and raise our conversion ratios. We unpack the idea of UNSELLING in this episode of BIG Truths of Small Business where building trust and serving the real needs of your customers is the magic.

The Rental Property Hangover Show
Ep 6 - Should I Buy Rental Properties in a High Market?

The Rental Property Hangover Show

Play Episode Listen Later Sep 1, 2020 9:40


We often get the question asking when is the right time to buy rental properties. Should I wait for a low market? Joe Watkins and Travis Cassell give you some unique thoughts to buying properties in any market.

BIG Truths of Small Business
Ep 17 - Becoming a Small Business Owner by Buying the Business You Work For – Interview with Jef Bass, an Emmy Winning Audio Video Producer

BIG Truths of Small Business

Play Episode Listen Later Aug 17, 2020 53:30


The YesiRent Boys, Joe Watkins and Travis Cassell, have an exclusive interview with Emmy winning and Grammy nominated owner of Sound Around Audio Video, Jef Bass. We discuss his story of working hard, which led to the opportunity to purchase his boss's business; how life's circumstances can change your outlook on business; and the importance of quality audio and video in your small business productions.

The Rental Property Hangover Show
Ep 1 - Tenant Screening Fundamentals for your Rental Properties

The Rental Property Hangover Show

Play Episode Listen Later Aug 6, 2020 33:59


This inaugural episode of The Rental Property Hangover discusses the basics and importance of proper tenant screening. This is one of the foundational steps towards long-term success in the rental business. Joe Watkins and Travis Cassell (The YesiRent Boys), founders of YesiRent Property Management give their decades of experience in this very important property management principle - tenant screening.

BIG Truths of Small Business
Ep 14 - The Power of Empathy in the Art of Negotiations

BIG Truths of Small Business

Play Episode Listen Later Jul 24, 2020 64:26


We often reveal that the soft skills are the most powerful skills needed to help other skills. This show discusses how empathy and compassion are critical in winning negotiations and making all sides feel like they got a win as well. The show hosts, Joe Watkins and Travis Cassell, also the the owners of YesiRent Property Management, navigate their way through leanings in negotiations.

PazNaz Weekly Sermons
Invitation to Freedom

PazNaz Weekly Sermons

Play Episode Listen Later Jul 5, 2020 16:48


Dr. Joe Watkins – 1 John 2:12-17 The post Invitation to Freedom appeared first on PazNaz.

BIG Truths of Small Business
Ep 12 - What does it take to Get in the “ZONE” while working?

BIG Truths of Small Business

Play Episode Listen Later Jul 2, 2020 63:19


Joe Watkins and Travis Cassell, with https://yesirent.com (YesiRent Property Management), explore how small business owners can get into the "ZONE" to accomplish things at an incredibly high level. They compare athletes to business people and give you a step-by-step analysis as to how to get yourself in the Zone more often in your small business.

Ambo TV
S2 Ep. 5 Featuring Pastor Joe Watkins

Ambo TV

Play Episode Listen Later Feb 10, 2020


Host: Dean Windsor Guest: Joe Watkins Churches: 1. Hope Church -- Pastor Jordan Poole 2. Fresh Life Church -- Pastor Levi Lusko 3. Valley Christian Church -- Pastor Stephen Francis

Ambo TV
Episode 8 Featuring Rev. Joe Watkins, Author Jeff Bethke, Cynthia Erivo and Kasi Lemmons

Ambo TV

Play Episode Listen Later Oct 21, 2019


Host: Dean Windsor Guests: Rev. Joe Watkins, Author Jeff Bethke, Actress Cynthia Erivo and Director Kasi Lemmons Churches Highlighted: 1. Mountain Lake Church - Pastor Chris Emmitt 2. Crossover Church -Pastor Tommy Kyllonen 3. Fresh Life Church - Pastors Levi and Jennie

PHP Internals News
PHP Internals News: Episode 16: API, ABI, and ext/recode

PHP Internals News

Play Episode Listen Later Jun 27, 2019


PHP Internals News: Episode 16: API, ABI, and ext/recode London, UK Thursday, June 27th 2019, 09:16 BST In this sixteenth episode of "PHP Internals News" I talk with Joe Watkins (Twitter, Patreon, Website, GitHub) about his APIs, ABIs, and an RFC to unbundle the ext/recode extension. 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 Show Notes RFC: Unbundle ext/recode Article "Adverse ABIs" discussing the ABI problems with the MacOS machine. Credits Music: Chipper Doodle v2 — Kevin MacLeod (incompetech.com) — Creative Commons: By Attribution 3.0

Conservatish with Peter Feliciano
Episode 85- Joe Watkins and Ken Kurita at the Little Spot Cafe

Conservatish with Peter Feliciano

Play Episode Listen Later Jun 20, 2019 100:42


Joe Watkins of Stank Sauce is back! We're hosted by Ken Kurita, owner of the coolest cafe in SF: The Little Spot Café! We talk about Halo Halo, being a bad kid, Luke Cage, owning a small business in SF in 2019, sagging, and pickle-products!

Art in the Game
Decoding the Mlife Rewards Program with Special Guest Joe Watkins Director of Casino Marketing MGM Springfield

Art in the Game

Play Episode Listen Later Jun 19, 2019 46:07


On Episode 29 we talk with the Director of Casino Marketing at MGM Springfield Mr. Joe Watkins. During our conversation Joe helps us better understand the details, benefits, and nuances of the MGM Mlife Rewards program.  There have been several questions and rumors on how the MGM loyalty program works.  Together we're going to address the comp, tier and point accruement questions while putting rumors to rest.  If you want to make the most out of your non gaming budget and casino play.  You won't want to miss what our special guest has to share on this casino podcast.  See all the pictures and check out other fun content on the websit www.artinthegame.net  Read all about MGM Springfield on their web site https://mgmspringfield.mgmresorts.com Dear Friends and Players, I will be hosting the first Video Poker challenge on line very soon.  Team New England will be challenging Team New York and New Jersey.  Sign up to play with us using only your email.  Challenge details to follow.   You can play for free and become a better player by using training mode with our special members link www.videopoker.com/artinthegame Members who sign up with an email receive 14 days of gold membership for free!  Also you can compete in daily weekly and monthly cash contests! Gold membership not necessary for Video Poker challenge.        

PHP Internals News
PHP Internals News: Episode 11: Parallel Extension

PHP Internals News

Play Episode Listen Later May 23, 2019


PHP Internals News: Episode 11: Parallel Extension London, UK Thursday, May 23rd 2019, 09:11 BST In this eleventh episode of "PHP Internals News" I talk with Joe Watkins (Twitter, Patreon, Website, GitHub) about his parallel extension. 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 Show Notes pecl/parallel: https://pecl.php.net/parallel CSP: Communication Sequential Processes Credits Music: Chipper Doodle v2 — Kevin MacLeod (incompetech.com) — Creative Commons: By Attribution 3.0

PHP Town Hall
Episode 66: Getting Jitty Wit It

PHP Town Hall

Play Episode Listen Later May 15, 2019 45:36


Matt Trask and Ben Edmunds are joined by Joe Watkins to discuss what’s new with PHP 7.4 and PHP 8.0.

The Archaeology Podcast Network Feed
SAA2019, #metoo, and a Response from SAA President Joe Watkins - CRMArch 161.2

The Archaeology Podcast Network Feed

Play Episode Listen Later Apr 19, 2019 55:26


A few APN hosts and a guest joined together at the 2019 Society for American Archaeology meetings in New Mexico to talk about the issues that took place at the meeting, the SAA response, and how we can all do better.

The CRM Archaeology Podcast
SAA2019, #metoo, and a Response from SAA President Joe Watkins - 161.2

The CRM Archaeology Podcast

Play Episode Listen Later Apr 19, 2019 55:26


A few APN hosts and a guest joined together at the 2019 Society for American Archaeology meetings in New Mexico to talk about the issues that took place at the meeting, the SAA response, and how we can all do better.

Three Devs and a Maybe
162: PHP + JIT = GR8 with Joe Watkins

Three Devs and a Maybe

Play Episode Listen Later Apr 11, 2019 51:04


In this weeks episode we have good friend of the show Joe Watkins back on to discuss the recent developments in PHP. We start off by highlighting how code is currently compiled and executed using the Zend VM, and distill how the recently approved JIT (for PHP 8) will change this. From here we mention the reasoning for going down this path now, the difference between I/O vs CPU bound code, and the use-cases where the JIT will improve performance. This leads us to the PHP compiler project Anthony Ferrara is working on (with the goal of Ahead-of-Time PHP compilation), and the new parallel concurrency API Joe is working on which uses a model similar to Goroutines. Finally, we discuss his recently approved Weak References and Abolish Narrow Margins RFC’s.

Three Devs and a Maybe
159: PHP Test Tooling and RFC Roundup with Joe Watkins

Three Devs and a Maybe

Play Episode Listen Later Jan 8, 2019 56:37


In this weeks episode we are joined by Joe Watkins for a long overdue catchup. We start off the show by discussing what Sandboxing is and the new Sandbox extension he has developed. From here, we touch upon test-doubles/mocking frameworks, the reasoning behind building uopz in the past, and now componere/mimus to aid in testing. This leads us on to highlight what test coverage is, the history of coverage tooling within PHP, and the new exciting pcov extension he has released. Finally, we do a big ol’ RFC roundup, discussing RFCs that have been accepted for PHP 7.4 (FFI, Typed Properties and Preloading) and ones under discussion (JIT and Weak References).

Conservatish with Peter Feliciano
Episode 19- Joe Watkins, Founder of Stank Sauce

Conservatish with Peter Feliciano

Play Episode Listen Later Oct 22, 2018 70:34


Joe Watkins is my black frie-I MEAN good friend. He is a Veteran, a fan of comic-books, and the Founder of Stank Sauce!! We talk about preferring "black" to "African-American", playing the dozens in old school hip-hop, white guilt, coming home from the service, flag-burners, and the finest of gourmet, specialty sauces.

Three Devs and a Maybe
150: PHP was not designed for that?! with Joe Watkins

Three Devs and a Maybe

Play Episode Listen Later Jun 15, 2018 44:38


In this weeks episode we catch-up with Joe Watkins. We start off discussion with a recent blog post he wrote about the unhelpful ‘just because you can, doesn’t mean you should’ response he sees surrounding some of his PHP extensions. From here we move on to highlight a debugger you can ‘composer require’, reasons behind creating such a tool and how it works. This leads us on to mention some updates to uopz for PHP 7 support, a weak references RFC he has recently published and future plans for PHP. Finally, we wrap up by talking about a CommonMark extension he has published, and how CQL provides the ability to efficiently traverse a document.

Three Devs and a Maybe
139: Mobile Internet isn't Cheap! with Joe Watkins

Three Devs and a Maybe

Play Episode Listen Later Dec 22, 2017 45:28


In this episode we catch up with Joe Watkins to discuss all things PHP. We start off discussion with his recent move to Spain, the pain of getting a good Internet connection and PHP TestFest. This leads us on to highlight some recent work he is doing with adding PHP bindings to Bicoin’s Secp256k1 library and a Generic Traits idea. From here we touch upon the additions that made it into PHP 7.2 and some that have already been accepted for 7.3. Finally, we get Joe’s opinion on a couple of RFC’s (Call-site pass-by-reference and Operator functions).

Three Devs and a Maybe
133: RFC Showdown, Round 2 with Joe Watkins

Three Devs and a Maybe

Play Episode Listen Later Jul 16, 2017 43:30


In this weeks episode we catch up with Joe Watkins discussing all things PHP. We start off the discussion with how his role as release-manager is going for PHP 7.1, highlighting how Security bugs are defined and handled within internals. Following this we chat about several RFC’s that are under-discussion (Retry Keyword, UUID) and accepted (Libsodium, Object Typehint) for the next release. Finally, we mention a recent small extension Joe has been working on to provide user verified types within the language.

Three Devs and a Maybe
120: Contributing to PHP with Joe Watkins

Three Devs and a Maybe

Play Episode Listen Later Feb 15, 2017 49:09


In this weeks episode we chat to good friend of the show Joe Watkins. We start off discussion with his recent work on creating a compute-node, dual WAN setup and accepted PHP Serbia talk on contributing to PHP without being a ‘C wizard’. From here we move on to mention some of the areas (bug tracking system and QA) that could be improved with the help of new contributors within the PHP internals ecosystem. Finally, we highlight several recently proposed RFCs, his opinions on them and some work he is doing on a future RFC.

Three Devs and a Maybe
114: Episode 2.0 with Joe Watkins

Three Devs and a Maybe

Play Episode Listen Later Dec 23, 2016 32:05


In this weeks episode we are joined by good friend of the show Joe Watkins. We start off discussion with the successful release of PHP 7.1 and what is in store for Joe now as release manager for that version. Following this, we chat about the libui and Yubico PHP wrappers he as been working on and development of a better Raspberry Pi OS. Finally, we highlight progress made towards incorporating a JiT compiler within PHP and some interesting things you can do with Zero-width joiner’s and Emoji’s in Unicode.

Three Devs and a Maybe
109: Processing Signals and Collecting Garbage with Joe Watkins

Three Devs and a Maybe

Play Episode Listen Later Oct 30, 2016 33:07


In this weeks episode we have a long overdue catch-up with Joe Watkins. We start off discussion with progress on PHP 7.1 and work Joe has been doing to provide an interface to libui within PHP. We then move on to chat about a couple of interesting RFC’s that are currently under-discussion, followed by managing long-running PHP processes with Supervisor and Unix signaling. Finally, we highlight how Garbage collection works and how PHP implements the concept to help manage memory.

Three Devs and a Maybe
103: Caching up with Joe Watkins

Three Devs and a Maybe

Play Episode Listen Later Jun 20, 2016 38:54


In this weeks episode we are lucky to be joined by Joe Watkins. We start off discussion around the development of PHP 7.1 and the recent initial alpha release. Following this, we give an update on a couple of previously mentioned RFC’s, along with how Joe’s ones are doing. This leads us on to highlight how some small proposed changes are paving the way to optimal machine-code and finally integration of a JIT compiler. Some of these proposed changes may result in backwards compatibility breaks, we discuss this topic and when it is deemed acceptable to permit this. Finally, we chat about memorisation, caching and how it is not really feasible to distill a standard caching interface that fits all requirements.

Three Devs and a Maybe
97: RFC Showdown for PHP 7.1 with Joe Watkins

Three Devs and a Maybe

Play Episode Listen Later May 12, 2016 57:11


In this episode we are joined by Joe Watkins to discuss the many RFC’s that are in contention to be approved for PHP 7.1. We start off with a congratulations to Joe for his first PHP Release Manager position, highlighting what the role entails and how it is going. We then discuss the RFC process and how there has been a lot of activity over the past couple of weeks within this space. The concept of ‘Null’ is the first group of RFC’s we discuss, followed by union/intersection types and the pipe operator. We then move on to chat about short closure syntax, functional interfaces and lexical scope within anonymous classes. Finally, we bring up the comparable RFC which has been around for many years and the benefits of having attributes within the language.

Three Devs and a Maybe
92: Where is the Value? with Joe Watkins

Three Devs and a Maybe

Play Episode Listen Later Mar 31, 2016 56:08


In this week’s episode we start off discussion with a recent PHP RFC Joe has been working on in-regard to typed properties, bringing up the value (if any) surrounding getters and setters. We then move on to Joe’s views on designing a programming language, and his mind-set that there should be no defined scope surrounding the features that the language should adopt. Finally, we wrap up the show with an update on how stabilisation of uopz is going for PHP 7, along with a reflection on the ‘Hacking on PHP 7’ screencasts we released earlier this month.

Three Devs and a Maybe
90: PHP Data-Structures and RFC Discussion with Joe Watkins

Three Devs and a Maybe

Play Episode Listen Later Feb 24, 2016 52:28


In this weeks episode Edd is joined by podcast regular Joe Watkins. We start off catching up with what Joe has been upto since we last spoke, and his current experiences with upgrading a legacy code-base to PHP 7. Discussion about the stability of ‘uopz’ in-regard to PHP 7 is then highlighted, followed by his recent mentoring on a data-structures extension which has been met by much phrase. Joe discusses the goals behind the extension and how the developer (Rudi Theunissen) has done a great job in designing and describing the implementation. Following this, we chat about the draft Code of Conduct RFC that Anthony Ferrara proposed earlier this year (since taken over by Derick Rethans), which has been subject to much debate. Finally, we dive into a couple of other new RFC’s that are in-discussion or recently accepted into the next release.

Three Devs and a Maybe
78: PHP Internals catch-up with Joe Watkins

Three Devs and a Maybe

Play Episode Listen Later Nov 22, 2015 61:41


On this weeks show we are lucky to be joined by recurring guest and friend of the show Joe Watkins. We start of discussion with the upcoming PHP 7 release, reasoning behind why it has been postponed, the bright future of adoption to the release compared to previous versions and how the release gets packaged up for different distributions. We then move on to touch upon uopz (User Operations for Zend), how it helps aid getting code ‘under-test’ and the progress made to make it compatible with PHP 7. The pthreads polyfill and work on a new project called ‘inspector’ are next on the list, with the history behind how inspector started from the concept of serialising functions/closures. Finally, we chat about the recent APCu events and additions, highlighting different forms of locking in the process - followed by what interesting topics he wishes to explore in the future.

Three Devs and a Maybe
73: PHP 7 Extension Development with Joe Watkins

Three Devs and a Maybe

Play Episode Listen Later Sep 17, 2015 55:54


In this episode we are lucky to be joined by good friend of the show Joe Watkins. We start off the podcast discussing the recent major release of pthreads (version 3) and the differences found compared to version 2. This moves us on to touch upon the design decisions made due to changes between PHP 5 and 7, providing a good API to the user, volatility and immutability considerations and installing extensions within PHP 7. We finally bring up the progress being made in moving over other extensions such as APCu and uopz, helping out with other projects such as Xdebug and our delve into screencasting.

Three Devs and a Maybe
72: ReactJS, Flux and Screencasting

Three Devs and a Maybe

Play Episode Listen Later Sep 14, 2015 58:03


This week we start off discussion with the topic of CSRF and Session hijacking. We then move on to the recently released screencasts we did with Joe Watkins, and how interesting Edd found recording them. Following this we discuss ReactJS, the Flux architecture, handling error-logging on the front-end and the JavaScript source-maps. We wrap up the show with the emphasis of removing jQuery, how hard following a single source of truth is and ‘dangerous’ design patterns.

Three Devs and a Maybe
63: Working Remote

Three Devs and a Maybe

Play Episode Listen Later May 8, 2015 56:10


Originally recorded early February but only now being released (blame Edd), we are lucky to have Joe Watkins on the show again. The show starts off with payment gateway woes, Joey Essex ‘bants’ and Joe’s experience researching into Vitess. We then discuss how Joe works on improving a large, mature code-base in his day job - enjoying brown-field projects as the code has already been proven in production. Finally, we bring up the topic of working remote, discussing the pros n’ cons with two very different viewpoints. This includes, highlighting how important collaboration tools are and remote working loneliness.

Three Devs and a Maybe
55: Concurrency, Strict type-hinting and PHP 7 with Joe Watkins

Three Devs and a Maybe

Play Episode Listen Later Jan 21, 2015 65:39


This week we are lucky to be joined by Joe Watkins, for a general catch-up on a host of PHP-related topics. We start the show off talking about his newly created blog and what drew him to start writing. Following this, we touch upon his first proposed talk on ‘Parallel PHP’ - hoping to resolve some of the confusion around concurrent terminology and patterns. We then mention his experience looking at YouTube Vitess (for MySQL scaling), and the pros and cons of the team deciding to use Go. His work on strict parameter type-hints is then discussed, along with how the idea has changed over time to be a little less strict. We then highlight the awesome work that Nikic has done for the PHP community, along with his most recent article on the improvements made to PHP’s hash-table implementation. PHP 7 and the proposed 5.7 release are then touched upon, followed by the speedy Unicode String implementation. Finally, we discuss the common perception of fear around compiling PHP from source, along with the differences between static and shared libraries.

Three Devs and a Maybe
40: News on PHP 7, and how PHP internally works with Joe Watkins

Three Devs and a Maybe

Play Episode Listen Later Aug 27, 2014 68:52


In this weeks show we are very lucky to have Joe Watkins on again to discuss all things PHP 7. Starting off with the decisions behind calling the next release 7, we delve into the reasons for 6 being abandoned. Moving on from this we look into what PHP 7 currently has scheduled to offer, including the PHPNG patch, an AST and maybe Joe’s own Unicode String class. We then discuss how a PHP script is internally lexed, parsed/compiled and cached, - including how a JIT would speed up certain use-cases. Finally we touch upon the much requested String type hinting and how a solution similar to Java’s could be implemented with minimal hassle.

Three Devs and a Maybe
26: PHP Internals, pthreads and PHPDBG with Joe Watkins

Three Devs and a Maybe

Play Episode Listen Later May 28, 2014 106:40


This week we are very lucky to have Joe Watkins from pthreads and PHPDBG fame on the podcast. Starting off discussion with the ‘PHP Next Generation’ drama, we move on to wrap-up our thoughts on the ‘Is TDD dead’ set of Google Hangouts. The topic then shifts onto our guest and how he got into programming and PHP - with the creation of pthreads and PHPDBG projects discussed. Finally, we finish off the podcast with the regular quiz.

PHP Town Hall
Episode 18: PHPDBG, HHVM and Internals

PHP Town Hall

Play Episode Listen Later Jan 29, 2014 54:02


Joe Watkins and Sara Goleman join Phil to make one hell of an episode. These two are not only core contributors to PHP, but are behind a lot of RFCs and decisions that make PHP considerably better. We talk about a whole bunch of awesome stuff, including progress of the named parameters RFC - and the chances of it making in, the new accepted PHP 5.6 feature PHPDBG and what it means for you, HHVM and its relationship to “The PHP”, wether PHP should have a spec for implementations of the language, and a whole bunch of other stuff. Sara knows a thing or two about HHVM because she helped build it. Joe knows a thing or two about PHPDBG because he helped build it. So basically… THEY’RE SMARTER THAN YOU ARE SO LISTEN TO THEM DAMMIT!

BC Podcast
Catch Episode 28 of the Business Catalyst Podcast

BC Podcast

Play Episode Listen Later Mar 28, 2013


Tune in for Episode 28 of the Business Catalyst podcast! Hear from BC expert Joe Watkins, learn about our latest system update and stay tuned for an exclusive MAX 2013 discount! Listen to this month's podcast: Simply click the play button below to stream the podcast via your browser. player AudioPlayer.embed("player-mar13", {soundFile: "http://www.businesscatalyst.com/_literature_117161/BC_Podcast_Episode_28.mp3", noinfo: "yes" }); Alternatively, you can download the podcast in .mp3 format for offline listening. To subscribe and receive the BC Podcast each month, you can find us on the iTunes store here or by simply searching "BC Podcast" from iTunes. In this episode : Meet Partner and BC expert Joe Watkins (Read his article on Responsive Web Design on the BC Evangelist Blog) Learn about our latest system update Listen in for an exclusive discount code for Adobe MAX 2013 Answer our HTML quiz question for a shout out in the next episode! See you next time! Jackson.

Anderson University SOT chapel sermons
Rev. Joe Watkins, Associate Pastor at New Life Christian Fellowship, Joel 2:21-27

Anderson University SOT chapel sermons

Play Episode Listen Later Nov 27, 2012


Rev. Joe Watkins, Associate Pastor at New Life Christian Fellowship