Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/atom.xml

Large diffs are not rendered by default.

23 changes: 4 additions & 19 deletions docs/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -46,31 +46,16 @@
<div class="content">

<div class="container p-0">
<img class="w-100" src="&#x2F;images&#x2F;heaps_of_fun.jpg" alt="Heaps&#x20;of&#x20;Fun&#x20;in&#x20;PHP">
<img class="w-100" src="images/elephpant_pile.webp" alt="ElePHPant Pile">
</div>
<div class="container bg-white pt-5">
<div class="row px-3 pb-5">
<div class="col-md-12">
<p>Join us on
<time datetime="2025-04-10T19:00:00-04:00" style="display:inline">April 10th, 2025</time>
as Alena Holligan presents</p>
<h2 class="mb-4 font-weight-bold">Heaps of Fun in PHP</h2>
<p class="m-0">
<p>Can PHP be performant for advanced computer science and algorithms? Yes, it can! And it's a lot easier and more fun than you might expect due to some unique data structures. A data structure is a way to organize data, and using the proper data structure for each job can make a massive difference in performance. This session will introduce some Standard PHP Library (SPL) data structures you may not have used before and where they come in handy. We'll also look into tools for testing performance to find bottlenecks and evaluate the best way to address a challenge. Jump into a heap of fun as we explore data structures, performance and algorithms in PHP.</p>

</p>
<h3>Presented by Alena Holligan</h3>
<p><p>For over 20 years, Alena has built technical solutions that inform decisions and solve problems across diverse industries. She enjoys both the creativity of programming and the thrill of solving a puzzle. As a leader in the community, a technical trainer, and a mom, she is passionate about providing the tools and mindset required for everyone to learn and succeed.</p>
</p>

</div>
<div class="col-md-12 text-center">
<h1>Do you have a topic you love to talk about? Share it with the group!</h1>
</div>
</div>
</div>

<div class="container py-5 px-4 bg-secondary text-center">
<h1 class="text-white font-weight-bold">Do you have a topic you love to talk about? Share it with the group!</h1>
</div>

<div class="container bg-white pt-5">
<div class="row px-3 pb-5">
<div class="col-md-12 text-center">
Expand Down
1 change: 1 addition & 0 deletions docs/meetups/2024/12/12/php-meet-ai.html
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@
<h2 class="mb-4 font-weight-bold">PHP, Meet AI</h2>
<div class="d-flex mb-3">
<time datetime="2024-12-12T19:00:00-05:00" class="mr-3 text-muted"><i class="fa fa-calendar-alt"></i> December 12th, 2024</time>
<a href="https://www.youtube.com/watch?v=Ul5D8Rmojwk" class="mr-3 text-muted"><i class="fab fa-youtube"></i> Watch on YouTube</a>
</div>

<article>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@
<h2 class="mb-4 font-weight-bold">What&#039;s new in PHP 9: See the future and discover the past in PHP RFCs</h2>
<div class="d-flex mb-3">
<time datetime="2025-02-13T19:00:00-05:00" class="mr-3 text-muted"><i class="fa fa-calendar-alt"></i> February 13th, 2025</time>
<a href="https://www.youtube.com/watch?v=fMAPoMbCtCk" class="mr-3 text-muted"><i class="fab fa-youtube"></i> Watch on YouTube</a>
</div>

<article>
Expand Down
19 changes: 18 additions & 1 deletion docs/meetups/2025/04/10/heaps-of-fun-in-php.html
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,24 @@ <h2 class="mb-4 font-weight-bold">Heaps of Fun in PHP</h2>
</div>

<article>
<p>Can PHP be performant for advanced computer science and algorithms? Yes, it can! And it's a lot easier and more fun than you might expect due to some unique data structures. A data structure is a way to organize data, and using the proper data structure for each job can make a massive difference in performance. This session will introduce some Standard PHP Library (SPL) data structures you may not have used before and where they come in handy. We'll also look into tools for testing performance to find bottlenecks and evaluate the best way to address a challenge. Jump into a heap of fun as we explore data structures, performance and algorithms in PHP.</p>
<p>Can PHP be performant for advanced computer science and algorithms? Yes, it can! And it's a lot easier and
more fun than you might expect due to some unique data structures. A data structure is a way to organize data,
and using the proper data structure for each job can make a massive difference in performance. This session
will introduce some Standard PHP Library (SPL) data structures you may not have used before and where they
come in handy. We'll also look into tools for testing performance to find bottlenecks and evaluate the best
way to address a challenge. Jump into a heap of fun as we explore data structures, performance and algorithms
in PHP.</p>
<h3>Resources</h3>
<ul>
<li><a href="https://www.php.net/manual/en/spl.datastructures.php">SPL Data Structures</a></li>
<li><a href="https://doeken.org/blog/linked-lists-explained-in-php">Linked Lists Explained in PHP</a></li>
<li><a href="https://doeken.org/blog/tree-traversal-in-php">Tree Traversal in PHP</a></li>
<li><a href="https://medium.com/the-andela-way/binary-tree-implementation-in-php-e12df09d046f">Binary Tree Implementation in PHP
</a></li>
<li><a href="https://doeken.org/blog/heaps-explained-in-php">Heaps Explained in PHP</a></li>
<li><a href="https://xdebug.org/docs/profiler">Xdebug Profiler</a></li>
<li><a href="https://www.jetbrains.com/help/phpstorm/profiling-with-xdebug.html">PhpStorm Profiling with Xdebug</a></li>
</ul>

</article>

Expand Down
23 changes: 23 additions & 0 deletions docs/meetups/2025/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,29 @@ <h3 class="mt-md-4 px-md-3 mb-2 py-2 bg-white font-weight-bold"><a href="/meetup
</div>
</div>
</div>
<!-- Blog List Start -->
<div class="container bg-white pt-5">
<div class="row blog-item px-3 pb-5">
<div class="col-md-5">
<img class="img-fluid mb-4 mb-md-0" src="/images/heaps_of_fun.jpg" alt="Heaps of Fun in PHP">
</div>
<div class="col-md-7">
<h3 class="mt-md-4 px-md-3 mb-2 py-2 bg-white font-weight-bold"><a href="/meetups/2025/04/10/heaps-of-fun-in-php.html">Heaps of Fun in PHP</a></h3>
<div class="d-flex mb-3">
<time class="mr-2 text-muted"><i class="fa fa-calendar-alt"></i> April 10th, 2025</time>
</div>
<p>
Can PHP be performant for advanced computer science and algorithms? Yes, it can! And it&#039;s a lot easier and
more fun than you might expect due to some unique data structures. A data structure is a way to organize data,
and using the proper data structure for each job can make a massive difference in performance. This session
will introduce some Standard PHP Library (SPL) data structures you may not have used before and where they
come in handy. We&#039;ll also look into tools for testing performance t
&hellip;
</p>
<a class="btn btn-link p-0" href="/meetups/2025/04/10/heaps-of-fun-in-php.html">Read More <i class="fa fa-angle-right"></i></a>
</div>
</div>
</div>

<hr>

Expand Down
14 changes: 7 additions & 7 deletions docs/sitemap.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://www.mergephp.com/</loc>
<lastmod>2025-04-04T22:18:48+00:00</lastmod>
<lastmod>2025-04-14T21:39:18+00:00</lastmod>
<changefreq>daily</changefreq>
<priority>1</priority>
</url>
Expand Down Expand Up @@ -122,7 +122,7 @@
</url>
<url>
<loc>https://www.mergephp.com/meetups/2025/04/10/heaps-of-fun-in-php.html</loc>
<lastmod>2025-04-04T22:09:29+00:00</lastmod>
<lastmod>2025-04-14T21:23:25+00:00</lastmod>
<changefreq>weekly</changefreq>
<priority>0.5</priority>
<image xmlns="image">
Expand All @@ -131,7 +131,7 @@
</url>
<url>
<loc>https://www.mergephp.com/meetups/2025/02/13/what-s-new-in-php-9-see-the-future-and-discover-the-past-in-php-rfcs.html</loc>
<lastmod>2025-04-04T21:33:15+00:00</lastmod>
<lastmod>2025-04-14T20:02:54+00:00</lastmod>
<changefreq>weekly</changefreq>
<priority>0.5</priority>
<image xmlns="image">
Expand All @@ -140,7 +140,7 @@
</url>
<url>
<loc>https://www.mergephp.com/meetups/2025/index.html</loc>
<lastmod>2025-04-04T21:33:15+00:00</lastmod>
<lastmod>2025-04-14T21:23:25+00:00</lastmod>
<changefreq>weekly</changefreq>
<priority>0.5</priority>
</url>
Expand Down Expand Up @@ -182,7 +182,7 @@
</url>
<url>
<loc>https://www.mergephp.com/meetups/2024/index.html</loc>
<lastmod>2025-04-04T21:33:15+00:00</lastmod>
<lastmod>2025-04-14T20:04:22+00:00</lastmod>
<changefreq>weekly</changefreq>
<priority>0.5</priority>
</url>
Expand All @@ -206,7 +206,7 @@
</url>
<url>
<loc>https://www.mergephp.com/meetups/2024/06/13/mergephp-lightning-talks-ignite-your-php-knowledge.html</loc>
<lastmod>2025-04-04T21:33:15+00:00</lastmod>
<lastmod>2025-04-14T20:04:22+00:00</lastmod>
<changefreq>weekly</changefreq>
<priority>0.5</priority>
<image xmlns="image">
Expand All @@ -215,7 +215,7 @@
</url>
<url>
<loc>https://www.mergephp.com/meetups/2024/12/12/php-meet-ai.html</loc>
<lastmod>2025-04-04T21:33:15+00:00</lastmod>
<lastmod>2025-04-14T20:02:43+00:00</lastmod>
<changefreq>weekly</changefreq>
<priority>0.5</priority>
<image xmlns="image">
Expand Down
2 changes: 1 addition & 1 deletion src/Generator/MeetupGeneratorService.php
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ public function generate(
$class
->addMethod('getDescription')
->setReturnType('string')
->setBody('return \'' . addslashes($description) . '\';');
->setBody('return <<<END' . PHP_EOL . wordwrap($description, 110, PHP_EOL) . PHP_EOL . 'END;');
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Awesome, this should fix issues with new meetups failing the linter

$class
->addMethod('getDateTime')
->setReturnType('DateTimeImmutable')
Expand Down
5 changes: 5 additions & 0 deletions src/Meetup/Meetup20241212PhpMeetAi.php
Original file line number Diff line number Diff line change
Expand Up @@ -48,4 +48,9 @@ public function getImage(): string
{
return '/images/php-meet-ai.jpg';
}

public function getYouTubeLink(): ?string
{
return 'https://www.youtube.com/watch?v=Ul5D8Rmojwk';
}
}
5 changes: 5 additions & 0 deletions src/Meetup/Meetup20250213WhatsNewInPhp9.php
Original file line number Diff line number Diff line change
Expand Up @@ -50,4 +50,9 @@ public function getSpeakerBio(): string
. 'Plaid Belt in Kung Fu movies. Connoisseur of dad jokes. Dev Manager by day, '
. 'Lifelong Student before bedtime.';
}

public function getYouTubeLink(): ?string
{
return 'https://www.youtube.com/watch?v=fMAPoMbCtCk';
}
}
25 changes: 18 additions & 7 deletions src/Meetup/Meetup20250410HeapsOfFunInPhp.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,24 @@ public function getTitle(): string

public function getDescription(): string
{
return 'Can PHP be performant for advanced computer science and algorithms? Yes, it can! ' .
'And it\'s a lot easier and more fun than you might expect due to some unique data structures. ' .
'A data structure is a way to organize data, and using the proper data structure for each job can ' .
'make a massive difference in performance. This session will introduce some Standard PHP Library (SPL) ' .
'data structures you may not have used before and where they come in handy. We\'ll also look into tools ' .
'for testing performance to find bottlenecks and evaluate the best way to address a challenge. ' .
'Jump into a heap of fun as we explore data structures, performance and algorithms in PHP.';
return <<<END
Can PHP be performant for advanced computer science and algorithms? Yes, it can! And it's a lot easier and
more fun than you might expect due to some unique data structures. A data structure is a way to organize data,
and using the proper data structure for each job can make a massive difference in performance. This session
will introduce some Standard PHP Library (SPL) data structures you may not have used before and where they
come in handy. We'll also look into tools for testing performance to find bottlenecks and evaluate the best
way to address a challenge. Jump into a heap of fun as we explore data structures, performance and algorithms
in PHP.
### Resources
- [SPL Data Structures](https://www.php.net/manual/en/spl.datastructures.php)
- [Linked Lists Explained in PHP](https://doeken.org/blog/linked-lists-explained-in-php)
- [Tree Traversal in PHP](https://doeken.org/blog/tree-traversal-in-php)
- [Binary Tree Implementation in PHP
](https://medium.com/the-andela-way/binary-tree-implementation-in-php-e12df09d046f)
- [Heaps Explained in PHP](https://doeken.org/blog/heaps-explained-in-php)
- [Xdebug Profiler](https://xdebug.org/docs/profiler)
- [PhpStorm Profiling with Xdebug](https://www.jetbrains.com/help/phpstorm/profiling-with-xdebug.html)
END;
}

public function getDateTime(): DateTimeImmutable
Expand Down
6 changes: 3 additions & 3 deletions tests/Generator/MeetupGeneratorServiceTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ public function testItGeneratesAFileWithAllRequiredInputsSpecified(): void
$expectedFilename = 'Meetup20230101Title.php';
$expectedFilenameAndPath = "vfs://root/$expectedFilename";
$response = $this->generator->generate('Title', 'Description', '2023-01-01', 'Speaker', 'Bio');
$this->assertEquals(672, $response->bytesWritten);
$this->assertEquals(685, $response->bytesWritten);
$this->assertEquals($expectedFilenameAndPath, $response->filename);
$this->assertFileEqualsCanonicalizing(
self::FIXTURES_DIR . $expectedFilename . '.txt',
Expand All @@ -57,7 +57,7 @@ public function testItGeneratesAFileWithAllInputsSpecified(): void
'Bio',
'https://www.example.com/image.jpg',
);
$this->assertEquals(761, $response->bytesWritten);
$this->assertEquals(774, $response->bytesWritten);
$this->assertEquals($expectedFilenameAndPath, $response->filename);
$this->assertFileEqualsCanonicalizing(
self::FIXTURES_DIR . $expectedFilename . '.txt',
Expand All @@ -79,7 +79,7 @@ public function testItGeneratesAFileWithAllInputsSpecifiedAndALongImageName(): v
'https://www.example.com/this/entire/url/is/greater/than/102/characters/which/normally/makes/phpcs/unhappy.jpg',
);

$this->assertEquals(914, $response->bytesWritten);
$this->assertEquals(927, $response->bytesWritten);
$this->assertEquals($expectedFilenameAndPath, $response->filename);
$this->assertFileEqualsCanonicalizing(
self::FIXTURES_DIR . $expectedFilename . '.txt',
Expand Down
4 changes: 3 additions & 1 deletion tests/fixtures/Meetup20220101Title.php.txt
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,9 @@ class Meetup20220101Title extends AbstractMeetup

public function getDescription(): string
{
return 'Description';
return <<<END
Description
END;
}

public function getDateTime(): DateTimeImmutable
Expand Down
4 changes: 3 additions & 1 deletion tests/fixtures/Meetup20221231MultipleWordTitle.php.txt
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,9 @@ class Meetup20221231MultipleWordTitle extends AbstractMeetup

public function getDescription(): string
{
return 'Multiple word description';
return <<<END
Multiple word description
END;
}

public function getDateTime(): DateTimeImmutable
Expand Down
4 changes: 3 additions & 1 deletion tests/fixtures/Meetup20230101Title.php.txt
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,9 @@ class Meetup20230101Title extends AbstractMeetup

public function getDescription(): string
{
return 'Description';
return <<<END
Description
END;
}

public function getDateTime(): DateTimeImmutable
Expand Down