├── episodes ├── 84.md ├── 034.md ├── 073.md ├── 85.md ├── 001.md ├── 065.md ├── 038.md ├── 060.md ├── 86.md ├── 027.md ├── 059.md ├── 056.md ├── 057.md ├── 039.md ├── 050.md ├── 055.md ├── 061.md ├── 054.md ├── 002.md ├── 069.md ├── 051.md ├── 042.md ├── 046.md ├── 058.md ├── 044.md ├── 023.md ├── 064.md ├── 040.md ├── 048.md ├── 017.md ├── 035.md ├── 053.md ├── 037.md ├── 047.md ├── 049.md ├── 004.md ├── 005.md ├── 062.md ├── 041.md ├── 066.md └── 030.md └── readme.md /episodes/84.md: -------------------------------------------------------------------------------- 1 | Ben shared with us his experience being a Release Manager for PHP 8.1. We also talk about the voting process for Release Manager voting for 8.2 (https://externals.io/message/117716#1...). Congratulations to Sergey Panteleev and Pierrick Charron on becoming the Release Managers for PHP 8.2. We share our thoughts on how to follow along with discussions happening on PHP Internals. 2 | 3 | We also talk about PHP Internal's move to Github (https://github.com/php). What's been going on at the PHP Foundation. Joining PHP Social-verse and the overall Fediverse at https://phpc.social. The return of PHP in-person Meetups and Conferences and MergePHP - https://twitter.com/mergephp. 4 | -------------------------------------------------------------------------------- /episodes/034.md: -------------------------------------------------------------------------------- 1 | # Summary 2 | A discussion about PHP debugging technology and techniques. 3 | 4 | # Guests 5 | * [Derick Rethans](https://twitter.com/derickr) 6 | * [Colin O'Dell](https://twitter.com/colinodell) 7 | * [Gary Hockin](https://twitter.com/GeeH) 8 | 9 | Hosted by 10 | * [Sammy Kaye Powers](https://twitter.com/SammyK) 11 | 12 | # Discussion - The panel talks about... 13 | 14 | ## Debugging Attitudes 15 | * Developers sometimes assume that their code was written properly 16 | * Instead, you should verify that your code works 17 | 18 | ## var_dump 19 | * [`var_dump()`](http://php.net/var_dump) is still a valid way of debugging 20 | * [Xdebug](https://xdebug.org/) and similar things can make `var_dump()` prettier 21 | * If you are using `var_dump()` to the point that you need to make it look pretty, you should us a step debugger 22 | 23 | ## Logging 24 | * Log interesting things, but don't go overboard 25 | * Include useful information, like IDs 26 | * Events should have the option for logging to be enabled 27 | 28 | ## Step Debugging 29 | * Xdebug helps for step debugging amongst other things 30 | * Step debugging allows you to pause a program at certain lines 31 | * They are very good for debugging someone else's code 32 | 33 | ## Future of Debugging 34 | * Debugging that allows you to view the history of a variable 35 | 36 | ## Sammy Kaye wraps up with 37 | * Contribute [show notes](https://github.com/PHPRoundtable/show-notes) 38 | * Developer Shout-out: Remi Collet 39 | * Shameless Plugs: 40 | * [PHP 7 Book](http://www.php7book.com/) 41 | * [PHP World - Debugging Effectively](http://www.slideshare.net/colinodell/debugging-effectively-phpworld-2015) 42 | -------------------------------------------------------------------------------- /episodes/073.md: -------------------------------------------------------------------------------- 1 | # Summary 2 | 3 | Hello, and welcome to episode 073 of PHP Round Table! This is a podcast where PHP nerds discuss things that developers care about. 4 | 5 | # Guests 6 | * [Craig Duncan](https://twitter.com/duncan3dc) 7 | * [Ondřej Mirtes](https://twitter.com/OndrejMirtes) 8 | * [Vladimir Reznichenko](https://twitter.com/kalessil) 9 | * [Damien Seguy](https://twitter.com/faguo) 10 | 11 | Hosted by 12 | * [Sammy Kaye Powers](https://twitter.com/SammyK) 13 | 14 | ## Discussion - The panel talks about... 15 | 16 | ### Static Code Analyzers 17 | 18 | Static code analysis tools maintained by the guests: 19 | 20 | * [Exakat](https://www.exakat.io/) 21 | * [PHPStan](https://github.com/phpstan/phpstan) 22 | * [PHP Inspections (EA Extended)](https://plugins.jetbrains.com/plugin/7622-php-inspections-ea-extended-) and [PHP Inspections (EA Ultimate)](https://plugins.jetbrains.com/plugin/10215-php-inspections-ea-ultimate-) 23 | 24 | ### Learnings and Recommendations 25 | 26 | In no particular order: 27 | 28 | * Start simple by installing one of these or other tools and let it analyze your code base. 29 | * Integrate static code analysis into your continuous integration process. 30 | * Most tools support error levels so you can fine-tune your checks. 31 | * Go for easy fixes that stand out in your code base first. 32 | * Static code analysis is useful for PHP projects because PHP does not have a compiler ([yet](https://externals.io/message/102415#102415) ;-)). 33 | 34 | ### Misc 35 | 36 | Colin O'Dell asked for a [working PHPStan config for Drupal 8](https://twitter.com/colinodell/status/1006613928393273344) during the recording of the podcast. [Here it is](https://gist.github.com/dantleech/84d82659583e55d0ffeb48d36d27a9fc). 37 | -------------------------------------------------------------------------------- /episodes/85.md: -------------------------------------------------------------------------------- 1 | An international panel of PHP Community members discusses the stat of PHP User Groups. How to get involved, so of the pitfalls, and a lot of the benefits of being a part of the community. 2 | 3 | ## Panel Member: 4 | 5 | * [Andreas Heigl](https://twitter.com/heiglandreas) 6 | * [Rafael Dohms](https://twitter.com/rdohms) 7 | * [Rick Kuipers](https://twitter.com/rskuipers) 8 | * [Bob Bloom](https://twitter.com/bobbloom) 9 | * [Chris Spruck](https://twitter.com/cspruck) 10 | * [Joe Ferguson](https://twitter.com/JoePFerguson) 11 | * [Ben Ramsey](https://twitter.com/ramsey) 12 | * [Sara Golemon](https://phpc.social/web/@pollita) 13 | * [Eric Van Johnson](https://twitter.com/shocm) 14 | 15 | ## Links Discussed on the show 16 | 17 | * [https://twitter.com/taylorotwell/status/1537970285097275393](https://twitter.com/taylorotwell/status/1537970285097275393) 18 | * [https://php.ug/](https://php.ug/) 19 | * [https://wiki.php.net/usergroups](https://wiki.php.net/usergroups) 20 | * [https://nashvillephp.org/](https://nashvillephp.org/) 21 | * [https://phpamersfoort.nl/](https://phpamersfoort.nl/) 22 | * [https://memphistechnology.org/](https://memphistechnology.org/) 23 | * [https://atlantaphp.org/](https://atlantaphp.org/) 24 | * [https://gtaphp.org/](https://gtaphp.org/) 25 | * [https://www.meetup.com/gta-php-user-group-toronto/](https://www.meetup.com/gta-php-user-group-toronto/) 26 | * [https://bobbloom.me/gta-php-meetup-23jun2022](https://bobbloom.me/gta-php-meetup-23jun2022) 27 | 28 | Stay current with what we are doing by following and subscribing. 29 | 30 | * Website: [https://phproundtable.com](https://phproundtable.com) 31 | * YouTube: [https://www.youtube.com/phproundtable](https://www.youtube.com/phproundtable) 32 | * Twitter: [@phproundtable](https://twitter,com/phproundtable) 33 | * Mastodon: [@phproundtable@phpc.social](https://phpc.social/web/@phproundtable) 34 | * Audio Podcast: [https://pca.st/usqnzuif](https://pca.st/usqnzuif) 35 | * Discord: [https://discord.gg/wmD3sGnMMe](https://discord.gg/wmD3sGnMMe) 36 | -------------------------------------------------------------------------------- /episodes/001.md: -------------------------------------------------------------------------------- 1 | * Everyone goes bonkers over PHP elephpants 2 | * Problems with PHP user groups in Chicago & advice from Cal 3 | * [WurstCon 2014](http://wurstcon.com/) is coming to Chicago! 4 | * Reminiscing about coding on old [Tandy computers](http://en.wikipedia.org/wiki/Tandy_Corporation) 5 | * How [Ruby](https://www.ruby-lang.org/) & [Ruby on Rails](http://rubyonrails.org/) influenced the PHP community 6 | * PHP has lead the pack with a [streams I/O layer](http://php.net/manual/en/intro.stream.php) 7 | * Some talk about [PHP stream filters](http://php.net/manual/en/filters.php) 8 | * [PHPNG](https://wiki.php.net/phpng) gets a mention 9 | * Stuff about [HHVM](http://hhvm.com/) 10 | * It has a [JIT](http://en.wikipedia.org/wiki/Just-in-time_compilation) 11 | * Should we implement it for our project? 12 | * It pushed PHP core team to get back in-gear 13 | * PHP new features and performance 14 | * [Elizabeth Smith](https://twitter.com/auroraeosrose) is awesome 15 | * [Contributing to PHP internals](http://www.phpinternalsbook.com/) ([the internals wiki](https://wiki.php.net/)) 16 | * PHP from the command line - why would we? We're lazy. 17 | * Testing in PHP 18 | * [Test-driven development](http://en.wikipedia.org/wiki/Test-driven_development) is neat but we confess that we don't always do it 19 | * Build an API-first with [apiary.io](http://apiary.io/) 20 | * Grumpy has some [great books on testing in PHP](https://leanpub.com/u/chartjes) 21 | * Various type of tests: unit, functional & integration; oh my! 22 | * Why Cal focuses so much on the community around PHP 23 | * Advice: be part of a local user group 24 | * Learn from the community & pay it forward 25 | * The PHP community is awesome and approachable 26 | * The business of PHP 27 | * Developers are not resources 28 | * The disconnect between managers and developers 29 | * Managing expectations in the context of a web project 30 | * Something old, something new, something borrowed, something deprecated 31 | * Old & Awesome: PHP streams are still awesome 32 | * New & Cool: [PHP variadics](http://php.net/manual/en/functions.arguments.php#functions.variable-arg-list) & [the splat operator](http://www.lornajane.net/posts/2014/php-5-6-and-the-splat-operator) 33 | * Borrowed: [PHP generators](http://php.net/manual/en/language.generators.overview.php) 34 | * Deprecated: [Globals need to be deprecated](http://php.net/manual/en/language.variables.scope.php#language.variables.scope.global) 35 | * [Michelangelo van Dam](https://twitter.com/DragonBe) is amazing -------------------------------------------------------------------------------- /episodes/065.md: -------------------------------------------------------------------------------- 1 | # Summary 2 | Adding tests to php-src is a great way to get involved with PHP internals. Don't know how to get started? You're in luck. [TestFest 2017](https://phptestfest.org/) is going to be a thing in September. User groups and individuals around the world are going to organize to learn how to add tests to PHP and become official internals contributors. 3 | 4 | It has been 7 years since the last [TestFest in 2010](https://wiki.php.net/qa/testfest-2010). We chat about how to get involved with TestFest 2017. 5 | 6 | # Guests 7 | * [Ben Ramsey](https://twitter.com/ramsey) 8 | * [Rafael Dohms](https://twitter.com/rdohms) 9 | * [Zoë Slattery](https://twitter.com/zoe_slattery) 10 | * [Cal Evans](https://twitter.com/CalEvans) 11 | 12 | Hosted by 13 | * [Sammy Kaye Powers](https://twitter.com/SammyK) 14 | 15 | # Discussion - The panel talks about... 16 | 17 | # How do I get involved? 18 | * TestFest runs from September - December 2017 19 | * Join the [Google group](https://groups.google.com/a/phpcommunity.org/forum/#!forum/testfest) 20 | * Attend an event 21 | * If you are a user group, run one or more events where you: 22 | * Introduce TestFest 23 | * Explain what PHPT tests are and how to create them 24 | * Explain how to contribute them 25 | * Help everyone to get set up 26 | * Hold a mini-hackathon where devs write tests for PHP and help each other 27 | * Sammy's [Video Tutorials](https://phptestfest.org/tutorials/writing-tests-for-php-source/) provide some teaching materials 28 | * [docker-phpqa](https://phptestfest.org/tutorials/phpqa-tutorial/) can help devs to get an environment up-and-running quickly 29 | * Contribute the tests to [php-src](https://github.com/php/php-src) 30 | 31 | # Do I need to know C to contribute tests? 32 | * The tests themselves are not written in C. They are written in PHP. 33 | * To find untested code, you will need to read some C code to understand the coverage reports at http://gcov.php.net/ 34 | * You don't need to be able to fully parse the code in order to do this 35 | * There is some internals documentation at [PHP Internals Book](http://www.phpinternalsbook.com/) 36 | 37 | ## Sammy Kaye wraps up with 38 | * Contribute [show notes](https://github.com/PHPRoundtable/show-notes/) 39 | * Upcoming conferences: 40 | * [North East PHP](https://northeastphp2017.sched.com/) 41 | * [Zendcon](http://www.zendcon.com/) 42 | * [Pacific Northwest PHP](http://www.pnwphp.com/) 43 | * Developer Shout-Out: Khayrattee Wasseem 44 | * Shameless plugs: 45 | * http://news.php.net/ 46 | * [Kesha Williams - Machine Learning Circa Minority Report](https://nomadphp.com/machine-learning-circa-minority-report/) 47 | * [PHP São Paulo](https://www.meetup.com/php-sp/) 48 | -------------------------------------------------------------------------------- /episodes/038.md: -------------------------------------------------------------------------------- 1 | # Summary 2 | New features of PHP get added via the [request for comments process](https://wiki.php.net/rfc). We are chatting with a few RFC authors about what features they are proposing for the next major version of PHP. 3 | 4 | # Guests 5 | * [Phil Sturgeon](https://twitter.com/philsturgeon) 6 | * [Scott Arciszewski](https://twitter.com/voodooKobra) 7 | * [Andrea Faulds](https://twitter.com/AndreaFaulds) 8 | * [François Laupretre](https://twitter.com/flaupretre) 9 | * [Davey Shafik](https://twitter.com/dshafik) 10 | 11 | Hosted by 12 | * [Sammy K Powers](https://twitter.com/SammyK) 13 | 14 | # Discussion 15 | ## Davey Shafik talks about 16 | * [HTTP 2 push requests support](https://wiki.php.net/rfc/curl_http2_push) 17 | * [HTTP 2 support in CLI server](https://wiki.php.net/rfc/cli_server_http2) 18 | * [Combined Comparison (Spaceship) Operator](https://wiki.php.net/rfc/combined-comparison-operator) 19 | 20 | ## Sammy K talks about 21 | * [Class Constant Visibility](https://wiki.php.net/rfc/class_const_visibility) 22 | 23 | Consensus is "how does this not already exist?" 24 | 25 | ## Phil Sturgeon talks about 26 | * We should steal the retry keyword from Ruby for use in try/catch blocks 27 | 28 | Debate about whether this is better or worse than using a goto ensues. 29 | 30 | ## Andrea Faulds talks about 31 | * [Void Return Types](https://wiki.php.net/rfc/void_return_type) 32 | 33 | Discussion about whether this is the same or different to just returning null. 34 | 35 | * [List Reference Assignment](https://wiki.php.net/rfc/list_reference_assignment) 36 | * [Named Parameters](https://wiki.php.net/rfc/named_params) 37 | 38 | ## François Laupretre talks about 39 | * PCS extensions 40 | * [Cache Key Operation](https://wiki.php.net/rfc/streams-is-cacheable) 41 | * Taking over the PHAR project 42 | 43 | ## Scott Arciszewski talks about 44 | * [Deprecating mcrypt](https://wiki.php.net/rfc/deprecate_mcrypt_rand) 45 | * "Boring" cryptography 46 | * [libsodium](https://github.com/jedisct1/libsodium) 47 | * Pluggable crypto library - "PDO for crypto" 48 | 49 | ## Sammy K wraps up with 50 | * [Deprecations for PHP 7.1](https://wiki.php.net/rfc/deprecations_php_7_1) 51 | 52 | Some discussion around poor approaches to cryptography and random number generation including deprecation/removal of [rand](http://php.net/manual/en/function.rand.php) and [srand](http://php.net/manual/en/function.srand.php) and potential pitfalls/issues with this. 53 | 54 | * [Code of Conduct](https://wiki.php.net/rfc/adopt-code-of-conduct) 55 | * Developer shout-out: Paul Dragoonis 56 | 57 | ## Further Links: 58 | * [PHP The Right Way](http://www.phptherightway.com/) 59 | * [PHP Sadness](http://phpsadness.com/) 60 | * [PHP Town Hall: Code of Conduct](https://phptownhall.com/episode-48-code-of-conduct/) 61 | -------------------------------------------------------------------------------- /episodes/060.md: -------------------------------------------------------------------------------- 1 | # Summary 2 | 3 | No matter how experienced you are as a programmer, at some point your app will generate errors and crash. Fixing problems with your app quickly is paramount in order to affect as little of your user base as possible. We discuss what is involved with implementing effective logging and crash reporting techniques in PHP to help you keep your apps up and running like a well-oiled machine. 4 | 5 | # Guests 6 | * [John-Daniel Trask](https://twitter.com/traskjd) 7 | * [Daniel Berman](https://twitter.com/proudboffin) 8 | 9 | Hosted by 10 | * [Sammy Kaye Powers](https://twitter.com/SammyK) 11 | 12 | # Discussion - The panel talks about... 13 | 14 | ## What are logs and why do we care about logging? 15 | * Logs are streams of time-ordered events collected from a running process 16 | * Logging can generate huge amounts of output 17 | * Logs allow us to reason about our systems by telling us: 18 | * What is happening 19 | * When it is happening 20 | * Why it is happening 21 | * We can use tools to help us to 22 | * Isolate relevant events based on queries 23 | * Notify us about important events (e.g: by email, slack, etc) 24 | 25 | ## What should we log? 26 | * In general, log more rather than less 27 | * There are some things we should not log: 28 | * Passwords 29 | * Personal data 30 | * Software with filtering can help with this 31 | * Logging too much can impact performance 32 | 33 | The de-facto standard for logging in PHP is [PSR-3](http://www.php-fig.org/psr/psr-3/) and the most common logging library is [monolog](https://github.com/Seldaek/monolog) 34 | 35 | ## PSR-3 Defines a lot of log levels. How many should we use? 36 | * `DEBUG`, `INFO`, `WARNING` and `ERROR` is probably enough for most apps 37 | * The levels we use are based on the [syslog RFC](https://www.ietf.org/rfc/rfc3164.txt) 38 | * It depends on the scale of your application 39 | 40 | ## How can we visualise logs? 41 | * `tail -f` 42 | * The ELK Stack is popular, fast and (relatively) easy to set up 43 | * [Elasticsearch](https://www.elastic.co/products/elasticsearch) indexes logs and makes them searchable 44 | * [Logstash](https://www.elastic.co/products/logstash) collates the data from different log sources 45 | * [Kibana](https://www.elastic.co/products/kibana) is the visualisation layer for analysing the data 46 | 47 | ## Where should we write logs? 48 | * Flat files and `logrotate` 49 | * A buffering system like [Redis](https://redis.io/) or [Kafka](https://kafka.apache.org/) 50 | * Send logs to an aggregation service 51 | 52 | ## Sammy Kaye wraps up with 53 | * Contribute [show notes](https://github.com/PHPRoundtable/show-notes) 54 | * Sammy is giving 2 talks at [PHP|tek](https://tek.phparch.com/) 55 | * Developer Shout-Out: Zeev Suraski 56 | * Shameless Plugs: 57 | * [logz.io](https://logz.io/) 58 | * [raygun.com](https://raygun.com/) 59 | -------------------------------------------------------------------------------- /episodes/86.md: -------------------------------------------------------------------------------- 1 | ## Links from the Show 2 | 3 | - [Boise State University GIMM Program](https://www.boisestate.edu/gimm/) 4 | 5 | - [Madison Area Technical College](https://madisoncollege.edu/) 6 | 7 | ## The Panel 8 | - **Eric Van Johnson** - This is me :-) I am a self-taught PHP developer and have been running a development studio for over ten years. Back in 2021, my business partner and I took over the operations of php[architect] / [phparch.social/@eric](https://phparch.social/@eric) and [@shocm on Twitter](https://twitter.com/shocm) 9 | 10 | - **Ben Ramsey** - A Software Architect, maintainer of the PHP UUID library, release manager for PHP 8.1 and 8.2, and does a lot for the PHP Community as a whole / [phpc.social/@ramsey](https://phpc.social/@ramsey) 11 | 12 | - **Joe Ferguson** - Principal Software Engineer. Writer for php[architect], and is one of the organizers behind [OSMI](https://osmihelp.org/) / [phpc.social@joepferguson](https://phpc.social/@joepferguson) 13 | 14 | - **Sara Golemon** - Contributor to PHP Core, PHP Release Manager 8.0 and 7.2, Author, and has code on Mars / [phpc.social@pollita](https://phpc.social/@pollita) 15 | 16 | - **Kenneth Marks** - Author of "PHP Web Development with MySQL" and teaching IT programming at [Madison Area Technical College](https://madisoncollege.edu/) for ten and a half years in the Web Software Developer degree program / [@FlibertiGiblets](https://twitter.com/FlibertiGiblets) 17 | 18 | - **Kaelyn Lang** - Student at [Madison Area Technical College](https://madisoncollege.edu/) studying Web Software Development BFA in Game Design and Development - Art and a minor in Computer Science from the [University of Wisconsin-Stout](https://www.uwstout.edu/) 19 | 20 | - **Jack Polifka** - Clinical assistant professor at [Boise State University in the Games, Interactive Media, and Mobile (GIMM) program](https://www.boisestate.edu/gimm/) 21 | / [@jack_polifka](https://twitter.com/jack_polifka) 22 | 23 | - **Adam Giles** - third-year student at [Boise State University](https://www.boisestate.edu/gimm/) 24 | pursuing an undergraduate degree in Games, Interactive Media, and Mobile [(GIMM)](https://www.boisestate.edu/gimm/) / [@adamgiles278]( https://twitter.com/adamgiles278) 25 | 26 | - **Derek Pyatt** - third-year student at [Boise State University](https://www.boisestate.edu/gimm/) 27 | pursuing an undergraduate degree in Games, Interactive Media, and Mobile [(GIMM)](https://www.boisestate.edu/gimm/), also working as a Web and Digital Coordinator for BSU's Admissions office / [@pyatt_derek](https://twitter.com/pyatt_derek) 28 | 29 | 30 | ## Thanks to the our sponsor 31 | [![php\[architect\]](https://cdn.phparch.social/logos%2Fphparch-logo-orange-with-slogan%20(150%20%C3%97%20150%20px).png)](https://phparch.com) 32 | 33 | 34 | ### Shownotes 35 | To add to or modify these show notes please open a PR to [show notes for episode 86](https://github.com/PHPRoundtable/show-notes/blob/master/episodes/86.md) 36 | -------------------------------------------------------------------------------- /episodes/027.md: -------------------------------------------------------------------------------- 1 | 2 | At Laracon 2015, panel of people talking. 3 | 4 | ### Guests 5 | * Jeremy Mikola - here because Taylor thinks he is funny. 6 | * Taylor Otwell - creator of Laravel 7 | * Jeffrey Way - creator of Laracasts 8 | 9 | Big thank you to Jeffrey for continuously sponsoring the "Developer Shout Out" on PHPRoundTable, gives PHPRoundTable the ability to give developers lots of money for being awesome! 10 | 11 | Technical difficulties begin happening almost immediately. And the show pretty much wraps...well at least the video version. The audio version is a bit longer and the rest of the notes are from there. 12 | 13 | Jeffrey talks about wearing Bunny Ears and giving out Halloween candy. 14 | 15 | The group discusses Matt Stauffer's talk about how Laravel is great for getting apps out fast. 16 | 17 | Jeremy hosted PHP Jeopardy where a scandal happened in the final round. 18 | 19 | The list of players for PHP Jeopardy was randomized, and a joke was made about using the updated [random functions in PHP7](http://php.net/csprng) that was contributed by PHPRoundTable's own Sammy Kaye Powers. However, that function was not used. 20 | 21 | Was there anything that stuck out in your mind about Laracon? 22 | 23 | Way: Taylor teasing [Spark](https://spark.laravel.com/), but Adam Wathan killed it! A talk on simple, clear code with tests backing it up. The talk was about refactoring. 24 | 25 | Otwell: The best thing I hear is when someone comes up to me and says "because of [Laravel](https://laravel.com/) I can work from home now and be with my kids". The personal stories I can relate to because I have been there. 26 | 27 | Mikola: I liked that there was a good mix between Laravel specific talks and other related things. Not only talks focused on Laravel. 28 | 29 | Otwell: Yeah we try to avoid all talks being about Laravel because otherwise it would be kind of boring. The developer world is so huge and we try to appealing, especially with a single track conference, we try to have something that everyone can take away. 30 | 31 | Powers: I was surprised that almost half the speakers hadn't used Laravel. 32 | 33 | Sammy asks the question to the crowd at the Hyatt 34 | 35 | Otwell talks about Spark and how he came about in building/releasing it. Basically, he saw that all the administration of a SaaS app was annoying and got in the way of releasing an app. So he decided to make a package to release that would allow people to quickly release apps. 36 | 37 | Spark is coupled to Cashier which is coupled to Stripe. 38 | 39 | General consensus is that Spark is awesome! 40 | 41 | The use of Traits in Spark looks great. The traits that are available are `CanJoinTeams`, `UseBillable`, `CanResetPassword`. Helps with Rapid Application Development. Spark has the ability to remove subscriptions. 42 | 43 | [Doctrine](http://www.doctrine-project.org/) was in beta for five years. 44 | 45 | 29:00 - The audio now begins to fail again. 46 | 47 | The rest of the show is the crowd discussing and asking some questions. 48 | -------------------------------------------------------------------------------- /episodes/059.md: -------------------------------------------------------------------------------- 1 | # Summary 2 | PHP 7.1, the latest minor version of PHP, was [released on December 1st](http://php.net/archive/2016.php#id2016-12-01-3). We discuss some things that went on behind-the-scenes that brought this new version to a stable release and we look at some new features that we can start taking advantage of today. 3 | 4 | # Guests 5 | * [Davey Shafik](https://twitter.com/dshafik) 6 | * Sean DuBois 7 | * [Levi Morrison](https://twitter.com/morrisonlevi) 8 | 9 | Hosted by 10 | * [Sammy Kaye Powers](https://twitter.com/SammyK) 11 | 12 | # Discussion - The panel talks about... 13 | 14 | ## PHP has been seeing more regular releases recently - what changed? 15 | * PHP adheres to semantic versioning more closely now. In the past this was not the case 16 | * A lot of time was spent on [PHP 6](https://www.phproundtable.com/episode/what-happened-to-php-6) which never happened 17 | * PHP has settled into a more mature yearly release cadence and [support policy](http://php.net/supported-versions.php) 18 | 19 | ## Davey talks about his role as release manager for 7.1? 20 | * Answered a call on PHP Internals list 21 | * Davey and [Joe Watkins](https://github.com/krakjoe) were approved as co-release managers 22 | * Received a lot of help from others e.g: Stephen from Microsoft (Windows binaries) and Remi from Redhat (testing on RHEL, Fedora, CentOS) 23 | * Primarily about housekeeping: 24 | * Publishing and signing tarballs 25 | * Ensuring there are no unintended BC-breaks 26 | * Ensuring nothing is added that isn't approved 27 | 28 | ## New features in PHP 7.1 29 | * [Nullable Types](http://php.net/manual/en/migration71.new-features.php#migration71.new-features.nullable-types) 30 | * [Iterable Pseudo-Type](http://php.net/manual/en/migration71.new-features.php#migration71.new-features.iterable-pseudo-type) 31 | * [Class Constant Visibility](http://php.net/manual/en/migration71.new-features.php#migration71.new-features.class-constant-visibility) 32 | * [Void Return Types](http://php.net/manual/en/migration71.new-features.php#migration71.new-features.void-functions) 33 | * [Multi-Catch Exception Handling](http://php.net/manual/en/migration71.new-features.php#migration71.new-features.mulit-catch-exception-handling) 34 | * Mcrypt has been deprecated and will be removed in PHP 8 35 | * Fix [inconsistent behavior](https://wiki.php.net/rfc/this_var) of `$this` variable 36 | 37 | ## Features that didn't make 7.1 or may appear in future releases 38 | * [Union Types](https://wiki.php.net/rfc/union_types) (did not pass) 39 | * [Intersection Types](https://wiki.php.net/rfc/intersection_types) (may appear in a future release) 40 | * [Merge Symbol Tables](https://wiki.php.net/rfc/php8/merge_symbol_tables) (proposed for PHP 8 but requires huge BC-breaks) 41 | 42 | ## Sammy Kaye wraps up with 43 | * Contribute [show notes](https://github.com/PHPRoundtable/show-notes) 44 | * Shameless Plugs: 45 | * [Akamai for WordPress](https://github.com/akamai-open/wp-akamai) 46 | * PHP 7.2 - [Call for release managers](http://www.mail-archive.com/internals@lists.php.net/msg90860.html) 47 | * [Arrow Functions RFC](https://wiki.php.net/rfc/arrow_functions) 48 | * [Therac](https://github.com/Sean-Der/Therac) 49 | -------------------------------------------------------------------------------- /episodes/056.md: -------------------------------------------------------------------------------- 1 | # Summary 2 | There are two seemingly contradicting philosophies about how to charge clients for programming work. The hourly camp suggests that the client is paying for your skill and hiring you for your time. The value-based pricing camp suggests that the programmer should price a project based on its value to the client instead of the hours it will take to build it. Today we chat about these two ideas and discuss the pros and cons of both. 3 | 4 | # Guests 5 | * [Keith Casey Jr](https://twitter.com/CaseySoftware) 6 | * [Tim Lytle](https://twitter.com/tjlytle) 7 | * [Mike McDerment](https://twitter.com/MikeMcDerment) 8 | 9 | Hosted by 10 | * [Sammy Kaye Powers](https://twitter.com/SammyK) 11 | 12 | # Discussion - The panel talks about... 13 | 14 | ## Time-based pricing 15 | * Resolution could be hourly or daily 16 | * Allows flexibility: bill your client for the hours you work 17 | * Requires you to keep track of your time 18 | * Was that 10 hours of actual development, or 10 hours of replying to emails? 19 | * As you get better and you can do things faster, you actually earn less 20 | * Safe model if value of work is speculative/experimental 21 | 22 | ## Value-based pricing 23 | * Value of your work is determined by your client, not you 24 | * Charge your client a percentage of the expected value of what you produce 25 | * Fixing a major security hole in the right client's product make be worth a huge amount to them, even if it only takes you an hour to fix 26 | * Billing by the hour pits you against your client: 27 | * You want to bill for as many hours as possible 28 | * Your client wants you to charge them for as few hours as possible 29 | * Value-based pricing puts you both on the same side 30 | * Using value-based pricing, your client should see the money they spend with you as an investment, not a cost 31 | * Many SaaS products use value-based pricing e.g: [GitHub](https://github.com/pricing). Different users receive different levels of value from the same or similar product and pay different prices accordingly 32 | 33 | ## How can we transition hourly clients to a value-based model? 34 | * As speculative/experimental clients become more stable, now is a good time to change 35 | * Start changing your model with new clients 36 | * Use a new project as an opportunity to try something different - don't try to change mid-project 37 | 38 | ## How can we apply value-based pricing to refactoring legacy code? 39 | * It depends on the legacy system: 40 | * If the legacy app is important/frequently used or where defects have high potential cost, it is an easy sell 41 | * If the legacy app is not so important/less frequently used, its a more difficult proposition 42 | * Compare refactoring legacy code to: 43 | * The cost/risk of writing a new system 44 | * The cost/pain of maintaining a brittle legacy product 45 | 46 | ## Sammy Kaye wraps up with 47 | * Contribute [show notes](https://github.com/PHPRoundtable/show-notes) 48 | * Developer Shout-out: Patrick McKenzie 49 | * Shameless Plugs: 50 | * [FreshBooks](https://www.freshbooks.com/) 51 | * [theapidesignbook.com](http://theapidesignbook.com/) 52 | * [php|world](https://world.phparch.com/) 53 | * [@nexmo](https://twitter.com/Nexmo) 54 | -------------------------------------------------------------------------------- /episodes/057.md: -------------------------------------------------------------------------------- 1 | # Summary 2 | There's a lot more going on at [Zend](http://www.zend.com/) other than [Zend Framework](https://framework.zend.com/). We chat about the Zend ecosystem, from [Apigility](https://apigility.org/) to [Zend Certification](http://www.zend.com/en/services/certification) and what Zend's role is in PHP internals. 3 | 4 | # Guests 5 | * [Adam Culp](https://twitter.com/adamculp) 6 | * [Cal Evans](https://twitter.com/CalEvans) 7 | * [Gary Hockin](https://twitter.com/GeeH) 8 | 9 | Hosted by 10 | * [Sammy Kaye Powers](https://twitter.com/SammyK) 11 | 12 | # Discussion - The panel talks about... 13 | 14 | ## The company behind Zend 15 | * Zend Engine is a pre-compiler for PHP and is used internally in PHP's interpreter 16 | * The Zend company and other products grew out of this 17 | * Zend is [now owned by Rogue Wave](http://www.zend.com/en/resources/news-and-events/newsroom/press/3683_rogue-wave-software-acquires-enterprise-php-leader-zend-acquisition-broadens-enterprise-strength-across-top-five-development-languages) 18 | 19 | ## What is Zend's role in PHP Internals? 20 | * [Rogue Wave](http://www.roguewave.com/) employs a number of PHP core contributors 21 | * [Dmitry Stogov](https://twitter.com/dstogov) developed much of the basis for the PHP 7 Engine (codenamed [phpng](https://en.wikipedia.org/wiki/PHP#NG) at the time) while at Zend 22 | * Dmitry and others at Rogue Wave are working on JIT-compilation for PHP 23 | 24 | ## The Zend Framework 25 | * Component-based framework 26 | * Focusses on configuration over 'magic' 27 | * Promotes best-practices and maintainability over rapid development 28 | * Used by a lot of large organisations 29 | * Backed by a stable company 30 | 31 | ## What's new in version 3? 32 | * The framework is now decoupled across 61 'component' repositories instead of all the components living in a single repository - this promotes component re-use 33 | * Contains multiple [backwards-incompatible changes](https://github.com/zendframework/zendframework/wiki/ZF-3.0-Backwards-Compatibility-Breaks), but upgrading from 2.x is not too much of a headache and [well documented](https://docs.zendframework.com/zend-mvc/migration/to-v3-0/) 34 | * Improved performance 35 | * Improved developer experience 36 | * Improved [documentation](https://docs.zendframework.com/) 37 | 38 | ## Apigility 39 | * A quick way to create database-connected APIs 40 | * Handles a lot of the overhead/boilerplate associated with creating APIs: 41 | * error handling 42 | * content negotiation 43 | * versioning 44 | * etc 45 | 46 | ## PHP and Zend Framework Certification 47 | * Proves you understand PHP and current best-practices 48 | * Focussed on core PHP concepts, rather than language features of a particular version of PHP 49 | 50 | ## Sammy Kaye wraps up with 51 | * Contribute [show notes](https://github.com/PHPRoundtable/show-notes/) 52 | * No developer shout out this time. If you are interested in sponsoring the developer shout-out in future, [contact Sammy](https://twitter.com/SammyK) 53 | * Shameless plugs: 54 | * [Spin a Good Yarn](https://spin-a-good-yarn.com/) 55 | * [Sunshine PHP](http://2017.sunshinephp.com/) 56 | * [Run Geek radio](https://rungeekradio.com/) 57 | * [PHPStorm](https://www.jetbrains.com/phpstorm/) 58 | * [Jerks Talk Games](https://jerkstalkgames.com/) 59 | -------------------------------------------------------------------------------- /episodes/039.md: -------------------------------------------------------------------------------- 1 | # Summary 2 | We get an update on status of the project we discussed in [part 1](https://www.phproundtable.com/episode/part-1-turning-an-idea-into-code-for-production) and discuss next steps to take our dance event management app idea to production. 3 | 4 | # Guests 5 | * [Steven Maguire](https://twitter.com/StevenMaguire) 6 | * [Jocelyn Lopez](https://twitter.com/Joclpz) 7 | * Dan Yamamoto 8 | 9 | Hosted by 10 | * [Sammy Kaye Powers](https://twitter.com/SammyK) 11 | 12 | # Discussion - The panel talks about... 13 | ## Intro 14 | * What is [west coast swing](https://en.wikipedia.org/wiki/West_Coast_Swing)? 15 | * Recap of [part 1](https://www.phproundtable.com/episode/part-1-turning-an-idea-into-code-for-production) 16 | * [MVP with fake data](https://www.dancerdeck.com/) 17 | 18 | ## Tech Stack 19 | * [Laravel 5.2](https://laravel.com/) 20 | * [VueJS](http://vuejs.org/) 21 | * [Let's Encrypt](https://letsencrypt.org/) - check out Erika Heidi's articles at Digital Ocean: 22 | * https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-centos-7 23 | * https://www.digitalocean.com/community/tutorials/how-to-set-up-let-s-encrypt-certificates-for-multiple-apache-virtual-hosts-on-ubuntu-14-04 24 | * https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-ubuntu-14-04 25 | * [JSON web tokens](https://jwt.io/) 26 | * [ECMAScript 6](http://es6-features.org/) 27 | 28 | ## Problems Encountered 29 | * Time 30 | * Finding an ORM to work with graph database - [neo4j](http://neo4j.com/) 31 | * The ideal solution vs sticking with what you know 32 | * Building a single page load web app 33 | 34 | ## Where next? 35 | * Review of priorities: 36 | * Event curation: back end done, front end in progress 37 | * Event discovery: done 38 | * Calendar integration: not done 39 | * Participant accounts: back end done, front end in progress 40 | * Event subscription: not started - some discussion around how this should work/feature ideas: 41 | * GitHub terminology ("watch" and "star") vs Facebook terminology ("going" and "like") 42 | * Subscribe by event/subscribe by region 43 | * What events might a user be interested in subscribing to (e.g: venue/accommodation/schedule changes) - could these be handled using Laravel events? 44 | * Live push notifications (schedule events, "milestones") + opt-in or aggregation to avoid spamming users 45 | * Real data: not yet, but this is high priority 46 | * Invitations/partner management: not done 47 | * How do entities in the data model relate to each other - series/groups? Some discussion of polymorphic data model. 48 | * Should endpoints be context-aware? 49 | * What data would API users like to consume? 50 | * Event attendees - stats/badges, biographies 51 | * Event directors - what services are on offer that I could use? 52 | * What goes into the next iteration - long list: 53 | * Finish Event curation 54 | * Participant accounts 55 | * Event subscription/notifications 56 | * Partner management 57 | * Pro Schedule 58 | * Gamification/milestones 59 | * Event rating system 60 | * What goes into the next iteration - short list: 61 | * Finish Event curation 62 | * Participant accounts 63 | * Event subscription 64 | 65 | ## Sammy Kaye wraps up with 66 | * Developer shout-out: Ben Corlett 67 | 68 | ## Further Links: 69 | [Full-Stack Radio](http://www.fullstackradio.com/) 70 | -------------------------------------------------------------------------------- /episodes/050.md: -------------------------------------------------------------------------------- 1 | # Summary 2 | If you're just starting with programming & PHP, this episode is for you. We discuss some helpful tips to get you started with PHP programming such as some helpful learning resources and some common pitfalls to watch out for when learning to program. 3 | 4 | # Guests 5 | * [Andy Huggins](https://twitter.com/andy_huggins) 6 | * [Nick Escobedo](https://twitter.com/nick_escobedo) 7 | 8 | Hosted by 9 | * [Sammy Kaye Powers](https://twitter.com/SammyK) 10 | 11 | # Discussion - The panel talks about... 12 | 13 | ## Getting Started 14 | * Google is your friend, but one of the first hurdles is reaching a point where you know enough to search for solutions to your own problems. 15 | * Books, User Groups, pair programming and mentoring can help with this. 16 | * Break problems down into the smallest chunks possible - more specific questions are easier to find answers for. 17 | 18 | ## What is a user group and how do I get involved? 19 | * A bunch of nerds talking about nerd stuff. 20 | * A good way to meet other people using the same technologies. 21 | * Search for PHP groups in your area on [meetup.com](https://www.meetup.com/). 22 | 23 | ## Why should you choose PHP? 24 | * PHP is specifically designed for web development. 25 | * The barrier to entry is very low. 26 | * It has a large standard library: you get a lot 'out of the box'. 27 | * There's a lot of demand for PHP developers: PHP runs [82% of the world's websites](https://w3techs.com/technologies/details/pl-php/all/all). 28 | 29 | ## Why should you not choose PHP? 30 | * PHP is well suited to generating dynamic web content, but there are other languages better suited for other tasks. 31 | * PHP is not available everywhere. For example, you can't develop an android app with PHP. 32 | * Subjectively, many people think PHP has an ugly syntax. 33 | * The standard library is very inconsistent. For example: 34 | * http://phpsadness.com/sad/9 35 | * http://phpsadness.com/sad/4 36 | * http://phpsadness.com/sad/48 37 | 38 | ## There's a lot to learn - how do we deal with this? 39 | * Tackle one problem at a time - you don't need to learn it all at once. 40 | * To be a programmer, you have to enjoy the process of finding solutions to problems. 41 | * There are good habits and bad habits - focus on good habits and be prepared to re-evaluate bad ones. 42 | * Don't be afraid to ask for help. 43 | 44 | ## My code isn't working - how do I find out what the problem is? 45 | * Turn on [error reporting](http://php.net/manual/en/function.error-reporting.php) in dev. 46 | * [var_dump](http://php.net/manual/en/function.var-dump.php) 47 | * Look at [step dubugging](https://www.phproundtable.com/episode/debugging-is-more-than-var-dump) (tangent - [CppCast Episode 30](http://cppcast.com/2015/10/kate-gregory/)) 48 | 49 | ## Resources and finding help 50 | * [Laracasts: PHP For Beginners](https://laracasts.com/series/php-for-beginners) 51 | * [Stackoverflow](http://stackoverflow.com/) 52 | * Bloggers 53 | * [Scotch](https://scotch.io/) 54 | * [PHP Women](https://phpwomen.org/) is very beginner friendly 55 | * When asking for help, provide as much detail as possible and outline what you've already done to try and solve the problem. 56 | * [NomadPHP](https://nomadphp.com/) - online user groups. 57 | * Conferences. e.g: 58 | * [php[tek]](https://tek.phparch.com/) 59 | * [php[world]](https://world.phparch.com/) 60 | * [Sunshine PHP](http://sunshinephp.com/) 61 | * [PNPPHP](http://www.pnwphp.com/) 62 | * [PHP The Right Way](http://www.phptherightway.com/) 63 | 64 | ## Sammy Kaye wraps up with 65 | * Contribute [show notes](https://github.com/PHPRoundtable/show-notes/) 66 | * Developer Shout-out: Josh Lockhart 67 | * Shameless Plugs: 68 | * https://github.com/ahuggins/utilities 69 | * http://www.meetup.com/Chicago-PHP-User-Group/ 70 | -------------------------------------------------------------------------------- /episodes/055.md: -------------------------------------------------------------------------------- 1 | # Summary 2 | We chat about the open-source Behavior-Driven Development framework called [Behat](http://behat.org/). We get a brief overview of how Behat can help us write more reliable code and also explore some best-practices when writing automated tests. 3 | 4 | # Guests 5 | * [Jessica Mauerhan](https://twitter.com/JessicaMauerhan) 6 | * [Konstantin Kudryashov](https://twitter.com/everzet) 7 | 8 | Hosted by 9 | * [Sammy Kaye Powers](https://twitter.com/SammyK) 10 | 11 | # Discussion - The panel talks about... 12 | 13 | ## What does Behat do? 14 | * Behat is a [BDD](https://en.wikipedia.org/wiki/Behavior-driven_development) tool 15 | * Behat is even more BDD-specific than [RSpec](http://rspec.info/) or [phpspec](http://www.phpspec.net/en/stable/) 16 | * Behat separates semantics of problem description from automated tests 17 | * Behat can be seen more as a tool for documentation and specification than testing in the sense of removing bugs 18 | 19 | ## How do we decide what to test with Behat? 20 | * The [testing pyramid](http://martinfowler.com/bliki/images/testPyramid/test-pyramid.png) 21 | * We should have the lowest number of the tests which are the slowest to run 22 | * We can mock out external services in acceptance tests in the same way we use mocks and stubs in unit testing 23 | * If your test suite takes longer than 10 minutes, you have big problems 24 | * Favour lower-levels tests where possible 25 | 26 | ## How can Behat help us to modernize legacy applications? 27 | * Write end-to-end tests with Behat to define expected behaviour 28 | * Refactor underlying code into more defined 'layers' using acceptance tests to ensure we have not broken anything 29 | * As we refactor, replace slower acceptance tests with faster lower-level (unit/integration) tests 30 | * Only keep the most important acceptance tests 31 | 32 | ## How do we isolate layers (esp. the UI layer) so we don't need end-to-end tests? 33 | * If our UI talks to the back end via REST, point it at a fake back-end 34 | * Use BDD or unit testing tools for javascript 35 | * Write feature files in a UI-agnostic way 36 | * If your tests are entangled, your application will be entangled 37 | * The same descriptions can be used with Behat and [Cucumber JS](https://github.com/cucumber/cucumber-js). This allows your UI and back-end to be tested against the same specification 38 | 39 | ## How do we write good user stories? 40 | * User stories should be the result of a **conversation** between developers and users 41 | * Keep the discussion high-level 42 | * Focus on understanding the problem, not the implementation details 43 | 44 | ## How do we get started with Behat in a project that already has Unit Tests? 45 | * Behat expects to find a top-level dir called `/features` for specifications 46 | * `/features` does not contain tests - think of `/features` as documentation as well as specification 47 | * Within `/tests`, divide tests into `/unit`, `/integration`, `/acceptance` and namespace them 48 | * The content of `/features` should be human-readable, describe features to be used by humans and be implementation-agnostic 49 | 50 | ## How do we acceptance test a user interaction with many variations? 51 | * We don't need to explicitly test every scenario end-to-end 52 | * Create scenario outlines with multiple examples 53 | * Identify the most critical paths and focus testing on those 54 | 55 | ## Sammy Kaye wraps up with 56 | * Contribute [show notes](https://github.com/PHPRoundtable/show-notes) 57 | * Developer Shout-out: Wouter J 58 | * Shameless Plugs: 59 | * [Jessica's Blog](https://jmauerhan.wordpress.com/) 60 | * [Contribute to Behat](https://github.com/behat/behat) 61 | * [Stakeholder Whisperer](http://stakeholderwhisperer.com/) 62 | * [BDD Exchange](https://skillsmatter.com/conferences/7428-agile-testing-and-bdd-exchange-2016#program) 63 | -------------------------------------------------------------------------------- /episodes/061.md: -------------------------------------------------------------------------------- 1 | # Summary 2 | [Dependency Injection](https://en.wikipedia.org/wiki/Dependency_injection) has been a design principle that the PHP community has embraced more fully than a lot of other programming communities. There's even an official PHP-FIG standard being discussed called [PSR-11](https://github.com/container-interop/fig-standards/blob/master/proposed/container.md) which will standardize dependency injection containers. Today we chat all things dependency injection. 3 | 4 | # Guests 5 | * [Stephan Hochdörfer](https://twitter.com/shochdoerfer) 6 | * [David Stockton](https://twitter.com/dstockto) 7 | * [David Négrier](https://twitter.com/david_negrier) 8 | * [Matthias Noback](https://twitter.com/matthiasnoback) 9 | 10 | Hosted by 11 | * [Sammy Kaye Powers](https://twitter.com/SammyK) 12 | 13 | # Discussion - The panel talks about... 14 | 15 | ## What does dependency injection give us? 16 | * Flexibility 17 | * Avoids tight coupling 18 | * Allows component re-use 19 | * Provides separation of concerns 20 | * Makes objects more testable 21 | * Provides inversion of control 22 | 23 | ## How do we implement dependency injection? 24 | * Pass in objects we need as parameters 25 | * Avoid the `new` keyword inside our object code 26 | * Push object instantiation outside of our objects (this is where DI containers can help us) 27 | 28 | ## When should we use dependency injection? 29 | * Services or Repositories which we want to exchange within our code base 30 | * Anywhere we want to be able to use more than one implementation 31 | * Anywhere we want to be able to swap out an object under testing 32 | * Sometimes we can directly instantiate objects, for example domain objects and helper classes 33 | 34 | ## What role do [interfaces](http://php.net/manual/en/language.oop5.interfaces.php) play in dependency injection? 35 | * Interfaces help us to decouple dependencies from their implementation 36 | * We should be able to exchange a dependency with another that conforms to the same interface 37 | * There are some things an interface doesn't capture (e.g: the exceptions that can be thrown by a method) 38 | 39 | ## Which tools can we use to help with dependency injection? 40 | PHP dependency injection containers fall into one of 3 categories: 41 | * Pure PHP: 42 | * [Pimple](https://pimple.sensiolabs.org/) 43 | * [Disco](https://github.com/bitExpert/disco) 44 | * Configuration file-based: 45 | * [Symfony DependencyInjection Component](http://symfony.com/doc/current/components/dependency_injection.html) can optionally work in this way 46 | * Reflection-based/"autowiring": 47 | * [Laravel IoC](https://laravel.com/docs/4.2/ioc) 48 | 49 | ## PSR-11 50 | * [PSR-11](https://github.com/container-interop/fig-standards/blob/master/proposed/container.md) addresses one problem: How do we fetch an object from a container? 51 | * 2 methods: `get()` and `has()` 52 | * Many components (e.g: frameworks or routers) are currently tightly coupled to a particular container implementation 53 | * Standardising container implementation will help to make components more generic 54 | 55 | ## How did dependency injection become so popular in PHP? 56 | * As unit testing has become more important, so has DI. The two compliment each other 57 | * The first versions of frameworks like Zend and Symfony were monolithic. In version 2 these frameworks started to split into smaller components. Using dependency injection helped them to decouple. 58 | * Early implementations borrowed/ported the concept from [Spring](https://spring.io/) in Java 59 | 60 | ## Sammy Kaye wraps up with 61 | * Contribute [show notes](https://github.com/PHPRoundtable/show-notes) 62 | * Developer Shout-Out: Matthieu Napoli 63 | * Shameless Plugs: 64 | * [Disco](https://github.com/bitExpert/disco) 65 | * [training.matthiasnoback.nl](https://training.matthiasnoback.nl/) 66 | * [Mouf](http://mouf-php.com/) 67 | -------------------------------------------------------------------------------- /episodes/054.md: -------------------------------------------------------------------------------- 1 | # Summary 2 | We chat about security in the the PHP community, encryption & hashing in PHP and a new-hotness crypto library called [libsodium](https://download.libsodium.org/doc/). 3 | 4 | # Guests 5 | * [Scott Arciszewski](https://twitter.com/CiPHPerCoder) 6 | * [Chris Riley](https://twitter.com/giveupalready) 7 | * [Chris Cornutt](https://twitter.com/enygma) 8 | 9 | Hosted by 10 | * [Sammy Kaye Powers](https://twitter.com/SammyK) 11 | 12 | # Discussion - The panel talks about... 13 | 14 | ## PSR-9 and PSR-10 15 | * [PSR-9](https://github.com/php-fig/fig-standards/blob/master/proposed/security-disclosure-publication.md) deals with the process by which security issues are submitted or reported to project maintainers. 16 | * [PSR-10](https://github.com/php-fig/fig-standards/blob/master/proposed/security-reporting-process.md) describes a machine-readable format for disclosing security issues to users. 17 | * [Roave/SecurityAdvisories](https://github.com/Roave/SecurityAdvisories) Prevents the installation of packages with known security vulnerabilities. 18 | * [FriendsOfPHP/security-advisories](https://github.com/FriendsOfPHP/security-advisories) provides tools for identifying dependencies with known security issues. 19 | 20 | ## Encryption 21 | * Encryption when you need decryption. Hash when you don't (e.g: passwords) 22 | * Encryption provides confidentiality, [AEAD](https://en.wikipedia.org/wiki/Authenticated_encryption) aims to go further. 23 | * Message authentication/integrity checksum is usually a hashing problem, rather than encryption. 24 | * Scott discusses some encryption pitfalls and how a simple operation like `==` can become very complex to implement securely without becoming vulnerable to side-channel attacks. Encryption is **hard** - don't roll your own. Leave it to the specialists. 25 | * [RFC: OpenSSL AEAD support](https://wiki.php.net/rfc/openssl_aead) 26 | * Always hash passwords with a slow hash function like bcrypt, scrypt or argon2 in [libsodium](https://download.libsodium.org/doc/). Fast hash functions like sha-2 are more vulnerable to brute-force attacks. 27 | * [hash_pbkdf2()](http://php.net/manual/en/function.hash-pbkdf2.php) can be used to slow down your hash process to guard against brute-force by creating a bottleneck for an attacker. Don't DDOS your own server though: Use rate-limiting to avoid creating a DDOS vector. 28 | 29 | ## How do we upgrade the password hashing in legacy apps (e.g: md5)? 30 | * Don't do a mass mailing and require a password reset from everyone: This implies a breach has taken place. 31 | * Phased update - upgrade your userbase gradually: 32 | * Re-hash passwords using a new algorithm in the background each time a user logs in. Mark the user as re-hashed each time. 33 | * As users log in, force a password reset. 34 | * bcrypt all the md5 hashes and make your hashing algorithm `bcrypt(md5($password))` 35 | 36 | ## Password Managers 37 | * Make it easy for users to use password managers on your site 38 | * Don't disable copy & paste on password fields 39 | * Name password fields obviously 40 | 41 | ## libsodium 42 | * [libsodium](https://download.libsodium.org/doc/) is a C library implementing best-in-class cryptographic and hashing algorithms 43 | * Safe from side-channel and cache-timing attacks 44 | * There are plans to move to libsodium implementations of built-in crypto function in PHP >= 7.2 45 | * [mcrypt](http://php.net/manual/en/book.mcrypt.php) is deprecated in PHP 7.1 46 | 47 | ## Sammy Kaye wraps up with 48 | * Discount code for [PHP Architect](https://phpa.me/phproundtable) 49 | * Contribute [show notes](https://github.com/PHPRoundtable/show-notes) 50 | * Developer Shout-out: Brian Retterer 51 | * Shameless Plugs: 52 | * [PHP Yorkshire](https://twitter.com/phpyorkshire) 53 | * [PHP Scotland](http://conference.scotlandphp.co.uk/) 54 | * [Paragon IE Newsletters](https://paragonie.com/contact) 55 | * [websec.io](https://websec.io/) 56 | -------------------------------------------------------------------------------- /episodes/002.md: -------------------------------------------------------------------------------- 1 | * Sammy's B.S. in Linguistics does not help him pronounce [Jeremy](https://twitter.com/jmikola)'s last name properly. 2 | * How to wrap our heads around functional programming: 3 | * "Functional programming is to imperative programming as a curve is to a derivative." 4 | * There is no such thing as a point on a curve, but there are approximations. 5 | * "State" doesn't exist in real life so we don't use it in functional programming 6 | * SammyK has amazing show notes. 7 | * What is state? 8 | * State is holding data around in memory 9 | * Mutable vs Immutable 10 | * Mutable: can be changed 11 | * Immutable: cannot be changed 12 | * Unix piping in the command line is an example of functional programming 13 | * Closures are [anonymous functions](http://php.net/manual/en/functions.anonymous.php) that can be assigned to a variable 14 | * Functional programming 15 | * Functional programming can be done with an imperative programming language like PHP, but there are native functional programming languages like [Haskell](https://wiki.haskell.org/Haskell). 16 | * State happens in a very small context 17 | "[Functional Programming in PHP](http://code.tutsplus.com/tutorials/functional-programming-in-php--net-35043)" by Patkos Csaba says there are three guidelines to functional programming in PHP: 1. **No assignments.**, 2. **No mutable state.**, and 3. **No `while` or `for` loops**. 18 | * Glen mentions [referential transparency](http://en.wikipedia.org/wiki/Referential_transparency_(computer_science)) and minds explode. 19 | * Persistent data sources get a "pass" in functional programming since they store state. 20 | * Immutable values 21 | * Immutable values make testing easier. 22 | * DateTime has an [immutable version](http://php.net/manual/en/class.datetimeimmutable.php). 23 | * [Primitives in PHP](http://php.net/manual/en/language.types.intro.php) are essentially value objects. 24 | * To change the state of an immutable object, create a new one. 25 | * Recursion 26 | * Recursion 27 | * [Recursion](http://en.wikipedia.org/wiki/Recursion_(computer_science)) is used instead of `while` or `for` loops in functional programming. 28 | * We take a PHP elePHPant break. 29 | * [Mojolicious](http://mojolicio.us/) has a [Failraptor](http://blog.kraih.com/post/43196557952/failraptor). 30 | * [ReactPHP](http://reactphp.org/) is an event-driven, non-blocking I/O library. 31 | * The name comes from the [reactor pattern](http://en.wikipedia.org/wiki/Reactor_pattern). 32 | * We compare ReactPHP to [Node.js](http://nodejs.org/). 33 | * [Non-blocking I/O](http://en.wikipedia.org/wiki/Asynchronous_I/O) vs [multi-threading](http://en.wikipedia.org/wiki/Multithreading_(computer_architecture)) 34 | Examples of using non-blocking I/O: q web server, a web scrapper & other apps that use other web protocols (not just * HTTP) like [Ratchet](http://socketo.me/). 35 | * PHP is a great language to run from the command line. 36 | * Some discussion on how single-threaded languages make use of an [event loop](http://en.wikipedia.org/wiki/Event_loop) to perform non-blocking I/O. 37 | * What we use ReactPHP for: 38 | * Jeremy uses it to communicate with child processes in the MongoDB PHP diver test suite. 39 | * Most common uses are web socket apps. 40 | * It's possible to use it for MySQL driver communications. 41 | * In PHP 5.6, the [PostgreSQL driver supports asynchronous connections and queries](http://php.net/manual/en/migration56.new-features.php#migration56.new-features.postgresql). 42 | * We talk about how ReactPHP can help us program functionally in PHP. 43 | * [Igor](https://github.com/igorw) has some great functionally programmed repos. 44 | * Something old, something new, something borrowed, something deprecated 45 | * Old & Awesome: PHP streams (again lol) 46 | * New & Cool: Anything off of [Nikita Popov's blog](https://nikic.github.io/). 47 | * Borrowed: PHP steals pretty much everything 48 | * Deprecated: [Pear](http://pear.php.net/) -------------------------------------------------------------------------------- /episodes/069.md: -------------------------------------------------------------------------------- 1 | # Summary 2 | 3 | Hello, and welcome to the first recording of PHP Round Table for 2018! This is a podcast where PHP nerds discuss things that developers care about. 4 | 5 | # Guests 6 | * [Chris Tankersley](https://twitter.com/dragonmantank) 7 | * [Joe Ferguson](https://twitter.com/JoePFerguson) 8 | 9 | Hosted by 10 | * [Sammy Kaye Powers](https://twitter.com/SammyK) 11 | 12 | ## Discussion - The panel talks about... 13 | 14 | ### Databases and Application State 15 | 16 | * Sometimes it's difficult to tell whether data should be hard-coded, or stored in the database. For example, a list of all 50 states in the United States. 17 | * Joe has worked with an e-Commerce business (back in early 2006) which worked with customers from multiple countries across the globe. In that case, it's good to have some kind of auto-updating system - even better if you can pull that from an external service that maintains the list for you, and then cache in your database. 18 | * It all comes down to how often the data changes. US states do not change often - they could go in config. But there are new zip codes being added constantly. 19 | * Chris' application looks up geolocation for IPs. In many cases, the IP range mapping to countries changes, so it's not really something you can keep in config. 20 | * Be wary of giving your credit card details to online services that provide a list of zip codes, because many of them are unreliable. 21 | * [Smarty Streets API](https://smartystreets.com/docs/cloud/us-street-api) is one of those services that SammyK first implemented Codeception and Feature Acceptance Tests on. He was hitting the real API in his tests, and quickly ran up against the request limit! 22 | 23 | ### Templating Engines 24 | 25 | * [Smarty](https://www.smarty.net/) - both Chris and Joe have used in the past, but not recently. 26 | * [Twig](https://twig.symfony.com/) - currently used by SammyK for non-Laravel projects. 27 | * [Blade](https://laravel.com/docs/5.6/blade) - currently used by SammyK for Laravel projects. 28 | * [Plates](http://platesphp.com/) - Joe feels that this is pretty awesome, but doesn't get as much credit as it should. 29 | 30 | If you're only getting into templating now, it's probably worth starting with Twig, because it will help you to do things properly. 31 | 32 | ### Storing Poop Emojis in your Database 33 | 34 | * Make sure you're using MySQL's `utf8mb4`, you can't just use `utf8`. 35 | 36 | ### Displaying right-to-left languages in HTML 37 | 38 | * Use the [bdi](https://www.w3.org/International/articles/inline-bidi-markup/#bdi) element (bidirectional isolate) 39 | 40 | ### Podcast Tips 41 | 42 | * Don't go months without a podcast, and then expect everything to flow and your guests to be sober! ;-) 43 | 44 | ### Things That Nerds Care About That Don't Matter 45 | 46 | * Just go through PSR-2! 47 | * Tabs vs Spaces 48 | * Using carriage-returns instead of spaces ... what?! 49 | * Postgres - When you try to add a column to a table, you are forced to add it to the end! 50 | * Trailing commas - Joe feels that it looks wrong when the last item doesn't have a trailing comma 51 | * PHP 7.3 allows trailing commas in method calls! 52 | * Fixed-width fields in input files can cause PTSD 53 | * How to pronounce GIF (Graphics Interchange Format, 'giff' and 'jiff') 54 | * How to pronounce CSRF (Cross-Site Request Forgery, 'C-S-R-F' or 'c-surf') 55 | * How to pronounce XSS (Cross-Site Scripting, 'X-S-S' or other silly pronunciations) 56 | * How to pronounce CSPRNG (Cryptographically Secure PseudoRandom Number Generator, 'C-Spring' or 'C-Sprung' in past-tense!) 57 | * How to pronounce PRNG (PseudoRandom Number Generator, or 'Pring'??) 58 | * Trying to map programming concepts to the school environment 59 | * How many pivot tables in a relational database should you reach, before it's better to just use a graph database? 60 | * How to pronounce PNG (Portable Network Graphics, 'P-N-G' or 'Ping') 61 | * Where do extensions for PHP go to die? PECL! Not to be confused with Pickle. 62 | * Don't use `gdb` as an alias for 'git delete branch' if you also want to use the GNU Project Debugger! 63 | 64 | ### The big reveal! 65 | 66 | * Watch the video from 48:52 to 50:55 for details! 67 | 68 | ## Sammy Kaye wraps up with 69 | 70 | * Shameless Plugs: 71 | * Chris Tankersley: [LearningContainers.com](http://learningcontainers.com/) 72 | 73 | -------------------------------------------------------------------------------- /episodes/051.md: -------------------------------------------------------------------------------- 1 | # Summary 2 | Despite the fact that there was never an official release of PHP 6, it was going to be a real thing with a lot of great improvements to the engine and language. But why was this version of PHP never released? We talk with some previous and current internals developers to hear the story of what happened to PHP 6. 3 | 4 | # Guests 5 | * [Sara Golemon](https://twitter.com/SaraMG) 6 | * [Derick Rethans](https://twitter.com/derickr) 7 | * [Sean Coates](https://twitter.com/coates) 8 | * [Andrei Zmievski](https://twitter.com/a) 9 | 10 | Hosted by 11 | * [Sammy Kaye Powers](https://twitter.com/SammyK) 12 | 13 | # Discussion - The panel talks about... 14 | 15 | ## What was the plan for PHP 6? 16 | * PHP 6 was supposed to add native unicode support to PHP. 17 | * This represented a big change and many features were blocked from being added to the PHP 5.x codebase because unicode support had to be added first. 18 | * Significant progress was made towards implementing unicode support, but the process dragged on for a long time: 19 | * [PHP 6 Unicode conversion was at 4.5% in 2006](http://web.archive.org/web/20060614101310/http://www.php.net/~scoates/unicode/render_func_data.php). 20 | * [PHP 6 Unicode conversion was at ~70% in 2011](http://web.archive.org/web/20110819115549/http://www.php.net/~scoates/unicode/render_func_data.php). 21 | * Eventually many of the new features intended for PHP 6 were backported to the PHP 5.x branch. 22 | * PHP 6 had a wider focus than just character encoding (There is an episode of PHP roundtable on the subject of [Character Encoding and UTF-8](https://www.phproundtable.com/episode/character-encoding-and-utf-8-in-php)) - it was also about changing the approach to [i18n and l10n](https://en.wikipedia.org/wiki/Internationalization_and_localization). 23 | 24 | ## What is the legacy of PHP 6's collapse? 25 | * Strings literals in PHP are still fundamentally composed of bytes. 26 | * It is up to developers to deal with character encoding issues using [mbstring](http://php.net/manual/en/book.mbstring.php), [iconv](http://php.net/manual/en/book.iconv.php), [uconverter](http://php.net/manual/en/class.uconverter.php), etc. 27 | * The [intl extension](http://php.net/manual/en/book.intl.php) wraps a lot of the functionality that was originally going to be a part of PHP 6 for use in PHP 5.x/7.x. 28 | * In PHP 5, working with UTF-8 could be painful. Sometimes we would have to specify UTF-8 characters using hex notation. 29 | * PHP 7 helps by adding the inline UTF-8 literal syntax `\u{[0-9A-Fa-f]+}` and [IntlChar class](http://php.net/manual/en/class.intlchar.php). 30 | 31 | ## What went wrong? 32 | * The decision to use UTF-16 internally was made early on in the process (2005). 33 | * At the start of work on PHP 6, UTF-8 was not widely supported but during development, the industry started to standardise on this. Widespread adoption of this more forgiving encoding helped with a lot of the problems that PHP 6 was trying to solve and made the objectives less relevant. 34 | * The number of contributors who fully understood the problem was relatively small and the amount of tedious conversion work was large. 35 | * In open source, people work on what they are interested in and not enough people were interested in it. 36 | * Full unicode support using UTF-16 negatively impacted performance. 37 | * By 2009/2010, it had started to become apparent that PHP 6 was never going to happen. 38 | 39 | ## What can we learn from PHP 6? 40 | * PHP 6 was not a failure: it spawned the [intl extension](http://php.net/manual/en/book.intl.php) and other features that are now part of the language in 5.x or 7. 41 | 42 | ## Other links 43 | * [Andrei's slides from 'The Good, the Bad, and the Ugly: What Happened to Unicode and PHP 6'](http://www.slideshare.net/andreizm/the-good-the-bad-and-the-ugly-what-happened-to-unicode-and-php-6). 44 | * [Because, PHP](https://www.facebook.com/Because-PHP-147594855443853/) 45 | 46 | ## Sammy Kaye wraps up with 47 | * Upcoming conferences: 48 | * [PNPPHP](http://www.pnwphp.com/) 49 | * [ZendCon](http://www.zendcon.com/) 50 | * Contribute [show notes](https://github.com/PHPRoundtable/show-notes/) 51 | * Developer Shout-out: Simon Welsh 52 | * Shameless Plugs: 53 | * [dram.io](https://dram.io/) 54 | * [Mongo DB Europe](https://www.mongodb.com/europe16) 55 | * [seancoates.com](http://seancoates.com/) 56 | * [xhp](https://github.com/phplang/xhp) 57 | -------------------------------------------------------------------------------- /episodes/042.md: -------------------------------------------------------------------------------- 1 | # Summary 2 | The technologies that run the web are constantly changing. We discuss strategies for staying on top of the constant flux with continuous learning throughout your career, having mentors, engaging regularly with your peers, contributing to open source projects, voracious reading, and travel to programming events. 3 | 4 | # Guests 5 | * [Matthew Setter](https://twitter.com/settermjd) 6 | * [Andy Huggins](https://twitter.com/andy_huggins) 7 | * [Henning Glatter-Götz](https://twitter.com/hglattergotz) 8 | * [Tom Oram](https://twitter.com/tomphp) 9 | 10 | Hosted by 11 | * [Sammy Kaye Powers](https://twitter.com/SammyK) 12 | 13 | # Discussion - The panel talks about... 14 | 15 | ## An event that made you realise you weren't staying relevant? 16 | * Popular answer - Not doing unit testing - more than one person talks about the moment they realised they needed to start writing tests 17 | * Discovery that reading books about development (on Kindle) is a great way to stay up-to-date 18 | 19 | ## How does the panel stay up to date? 20 | * Books 21 | * Talking to other devs (user groups etc) 22 | * Podcasts - anyone know of a [good one](https://www.phproundtable.com/)? ;) 23 | * [Twitter](https://twitter.com/) delivers a lot of info very quickly, but has a high signal:noise ratio - [Nuzzel](http://nuzzel.com/) can help 24 | 25 | Sammy asked a bunch of programmers on twitter: What one book made you become a better programmer? Most common answer was [Clean Code](http://www.amazon.co.uk/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882). 26 | 27 | It can be easy to focus so much on doing things the "right" way or the most modern way to the point it becomes a distraction from the core problem solving. 28 | 29 | ## How does the panel avoid becoming "paralysed" into inaction as a result of this? 30 | * Think of code as creative writing - write a first draft, second draft, etc.. 31 | * With so many trends in software development, pick the most important to you and focus on them 32 | * "Mastery" is understanding what level of perfection the task requires 33 | * Another book recommendation: [On Writing Well](http://www.amazon.com/On-Writing-Well-Classic-Nonfiction/dp/0060891548) - a book about creative writing with lessons that are applicable to software 34 | 35 | The next book on Sammy's list is [Refactoring: Improving the Design of Existing Code](http://www.amazon.co.uk/Refactoring-Improving-Design-Existing-Technology/dp/0201485672) 36 | 37 | ## How do the panel approach refactoring? 38 | * Refactor as you go: 39 | * Make small feature branches 40 | * Every few features, do a small cleanup 41 | * Don't treat refactoring as a task in itself 42 | 43 | ## Tools come and go quickly. Techniques are timeless and move slowly. 44 | ### Some timeless techniques: 45 | * Unit(/automated) testing 46 | * Refactoring 47 | * Functional Testing 48 | * Design patterns 49 | * Algorithms 50 | 51 | ## How do the panel become better programmers? 52 | * Ask someone who has been doing it for a while - [PHP Mentoring](https://phpmentoring.org/) can help with that 53 | * Connect with the community - user groups, conferences, workshops, etc 54 | * Speak at a user group 55 | * You learn a lot from talking to/watching/working with other developers 56 | * Code reviews 57 | * Contributing to open source: 58 | * Follow the contributing guidelines 59 | * Get feedback on your code 60 | * Find a project you use yourself - find a bug that needs fixing or a feature that needs adding 61 | * The process associated with getting a PR accepted to a large project is an eye-opener 62 | * Think of submitting a patch as an opportunity to receive a free code review 63 | * Look for issues tagged 'easy' or 'beginner' 64 | * [up-4-grabs.net](http://up-for-grabs.net/#/) - projects 'advertising' easy issues for new contributors 65 | * [First Timers Only](https://medium.com/@kentcdodds/first-timers-only-78281ea47455#.o04s2sjhq) 66 | * [Making your first pull request](http://www.charlotteis.co.uk/making-your-first-pull-request/) 67 | 68 | ## Other resources/links 69 | * [Clean coders video series](https://cleancoders.com/videos/clean-code) 70 | * If you can't get to a conference/user group in your area, check out [Nomad PHP](https://nomadphp.com/) 71 | * [Jeff Carouth's Development Book Club](https://carouth.com/blog/categories/book-club/) 72 | 73 | ## Sammy Kaye wraps up with 74 | * Developer Shout Out: Raquel Vélez [(@rockbot)](https://twitter.com/rockbot) 75 | * Shameless Plugs 76 | * [Lone Star PHP](http://lonestarphp.com/) 77 | -------------------------------------------------------------------------------- /episodes/046.md: -------------------------------------------------------------------------------- 1 | # Summary 2 | 3 | If you've ever gotten a number of weird looking characters in your database or on your website like, "�" and didn't know why, then this episode is for you. Those bizarre characters called "mojibake", rear their ugly heads when we don't account for a consistent character encoding. Today we discuss what character encoding is, how to accommodate for it in HTML, PHP & your database, and how we can ensure we'll never encounter an unexpected alien character in our web apps again. 4 | 5 | 6 | # Guests 7 | * [Andreas Heigl](http://andreas.heigl.org/) 8 | * [Evert Pot](https://evertpot.com/) 9 | 10 | Hosted by 11 | * [Sammy Kaye Powers](https://twitter.com/SammyK) 12 | 13 | # Discussion - The panel talks about... 14 | 15 | ## What are character encodings? 16 | * Comparison of number systems (base-10, binary, hexadecimal) 17 | * Historical development of character maps and encodings (telegram, ASCII, ISO-8859-1...) 18 | * Unicode and its implementations (UTF-8, UTF-16, UTF-32) 19 | * UTF-8 uses 1-4 bytes per character--shows all Unicode characters while keeping a small file size 20 | * UTF-16 uses 2 bytes per character, so results in larger files 21 | * UTF-32 uses 4 bytes per character, so results in even larger files 22 | 23 | ## Character encodings in PHP 24 | * Some other languages have a UTF-8 core, while PHP stores strings a series of bytes--can result in misinterpretation/mojibake 25 | * Mind the [multibyte string functions](http://php.net/manual/en/ref.mbstring.php): 26 | * E.g., [`strpos()`](http://php.net/manual/en/function.strpos.php) works by counting a number of bytes; this is unreliable for UTF-8, so use [`mb_strpos()`](http://php.net/manual/en/function.mb-strpos.php) for unicode strings 27 | * There is a php.ini setting (named?) which overloads functions like `strpos` with their multibyte versions. This it NOT RECOMMENDED as it can cause weird bugs, whether when switching hosts or when using 3rd-party code that wasn't written with this in mind. 28 | * php7: the [IntlChar class](http://php.net/manual/en/class.intlchar.php) offers many useful static functions, e.g. [`IntlChar::chr()`](http://php.net/manual/en/intlchar.chr.php) and [`IntlChar::isWhitespace`](http://php.net/manual/en/intlchar.iswhitespace.php) 29 | * php7: [`\u` escape for unicode codepoints](http://php.net/manual/de/migration70.new-features.php#migration70.new-features.unicode-codepoint-escape-syntax) in strings 30 | 31 | ## Character encodings in HTML 32 | * HTML5: [``](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta#attr-charset) 33 | * [`Content-Type: text/html; charset=utf-8`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers) HTTP header 34 | * [`