Skip to content

Commit

Permalink
projects/thumbgun barryclark#9 concurrent access article
Browse files Browse the repository at this point in the history
  • Loading branch information
mikemix committed Nov 25, 2022
1 parent 4b23a6e commit 7550dc8
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 5 deletions.
8 changes: 4 additions & 4 deletions projects/thumbgun/Makefile
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
docker:
@docker-compose -f _build/docker-compose.yml up -d
@docker compose -f _build/docker-compose.yml up -d

shell:
@docker-compose -f _build/docker-compose.yml exec npm sh
@docker compose -f _build/docker-compose.yml exec npm sh

dev:
@docker-compose -f _build/docker-compose.yml exec -e NODE_ENV=development npm npm --prefix _build run build
@docker compose -f _build/docker-compose.yml exec -e NODE_ENV=development npm npm --prefix _build run build

build:
@docker-compose -f _build/docker-compose.yml exec -e NODE_ENV=production npm npm --prefix _build run build
@docker compose -f _build/docker-compose.yml exec -e NODE_ENV=production npm npm --prefix _build run build
15 changes: 15 additions & 0 deletions projects/thumbgun/_build/index.ejs
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,21 @@
</div>
</div>
</div>
<div class="col">
<div class="card h-100 shadow-sm">
<img loading="lazy" class="bd-placeholder-img card-img-top"
src="https://miro.medium.com/max/1400/0*UO3p_XxvW492e6mE" alt="">

<div class="card-body">
<p class="card-text">
<a href="https://medium.com/@dotcom.software/9-protecting-from-concurrent-access-4e792c56c17e"
target="_blank">
#9 Protecting from Concurrent Access
</a>
</p>
</div>
</div>
</div>
</div>

<hr class="my-5">
Expand Down
2 changes: 1 addition & 1 deletion projects/thumbgun/index.html
Original file line number Diff line number Diff line change
@@ -1 +1 @@
<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Symfony 6 Thumbgun PHP project</title><link href="style.01621c93313bdb14b44c.css" rel="stylesheet"></head><body><div class="col-md-8 py-5 px-3 mx-auto"><h1>Thumbgun project</h1><div class="col-lg-8 px-0"><p class="lead">A <a href="https://medium.com/@dotcom.software/serving-resized-s3-images-on-the-fly-2ed98e10bf3a?utm_source=dotcom.software" target="_blank">story published on Medium</a> about creating a fully functional, practical, Symfony 6 based application.</p><hr class="my-5 w-25 mx-0"><p>The requirements for the app:</p><ul><li>be written in PHP8.1,</li><li>have few dependencies,</li><li>be open-sourced on GitHub,</li><li>have a GitHub actions pipeline to ensure quality,</li><li>be Dockerized for easy and quick developing,</li><li>cache generated thumbs locally to save bandwidth,</li><li>support multiple types on the output (JPEG + WEBP)</li><li>allow to clear the thumbnail cache en masse,</li><li>correctly handle concurrent access to the same image,</li><li>protect against unauthorized use,</li><li>be flexible enough to change from S3 to any other source if necessary.</li></ul></div><hr class="my-5 w-25 mx-0"><div class="row row-cols-1 row-cols-sm-2 row-cols-md-3 g-3"><div class="col"><div class="card h-100 shadow-sm"><img loading="lazy" class="bd-placeholder-img card-img-top" src="https://miro.medium.com/max/700/0*R6Kze0jCTYd4meZS" alt=""><div class="card-body"><p class="card-text"><a href="https://medium.com/@dotcom.software/serving-resized-s3-images-on-the-fly-6b052ee3b0ca?utm_source=dotcom.software" target="_blank">#1 Dockerizing the Symfony 6 app</a></p></div></div></div><div class="col"><div class="card h-100 shadow-sm"><img loading="lazy" class="bd-placeholder-img card-img-top" src="https://miro.medium.com/max/700/0*IcCp-RyRUR1ulKEv" alt=""><div class="card-body"><p class="card-text"><a href="https://medium.com/@dotcom.software/2-setting-up-xdebug-cec92b7c0cd0?utm_source=dotcom.software" target="_blank">#2 Setting up Xdebug</a></p></div></div></div><div class="col"><div class="card h-100 shadow-sm"><img loading="lazy" class="bd-placeholder-img card-img-top" src="https://miro.medium.com/max/700/0*uGSCsxHuZ20DYEQ8" alt=""><div class="card-body"><p class="card-text"><a href="https://medium.com/@dotcom.software/3-phpunit-and-psalm-c316e4f7e20a?utm_source=dotcom.software" target="_blank">#3 Setting up PHPUnit and Psalm</a></p></div></div></div><div class="col"><div class="card h-100 shadow-sm"><img loading="lazy" class="bd-placeholder-img card-img-top" src="https://miro.medium.com/max/700/0*wVz5GeNddhpb4n5M" alt=""><div class="card-body"><p class="card-text"><a href="https://medium.com/@dotcom.software/4-github-actions-continuous-integration-pipelines-1bc80a902374?utm_source=dotcom.software" target="_blank">#4 GitHub actions continuous integration</a></p></div></div></div><div class="col"><div class="card h-100 shadow-sm"><img loading="lazy" class="bd-placeholder-img card-img-top" src="https://miro.medium.com/max/700/0*845sgSeGFG676C-t" alt=""><div class="card-body"><p class="card-text"><a href="https://medium.com/@dotcom.software/5-serving-thumbnails-1e5d95d8c76b?utm_source=dotcom.software" target="_blank">#5 Serving thumbnails</a></p></div></div></div><div class="col"><div class="card h-100 shadow-sm"><img loading="lazy" class="bd-placeholder-img card-img-top" src="https://miro.medium.com/max/700/0*_yF17Nfw0VCQElw2" alt=""><div class="card-body"><p class="card-text"><a href="https://medium.com/@dotcom.software/6-preventing-request-forgery-380c63b416b7?utm_source=dotcom.software" target="_blank">#6 Preventing request forgery</a></p></div></div></div><div class="col"><div class="card h-100 shadow-sm"><img loading="lazy" class="bd-placeholder-img card-img-top" src="https://miro.medium.com/max/700/0*0UHxXFx0OnDS1aXy" alt=""><div class="card-body"><p class="card-text"><a href="https://medium.com/@dotcom.software/7-talking-to-s3-a2b4cb65c7fd?utm_source=dotcom.software" target="_blank">#7 Talking to S3</a></p></div></div></div><div class="col"><div class="card h-100 shadow-sm"><img loading="lazy" class="bd-placeholder-img card-img-top" src="https://miro.medium.com/max/700/0*qsk3J9Ci239nH1yS" alt=""><div class="card-body"><p class="card-text"><a href="https://medium.com/@dotcom.software/8-caching-requests-ae4778e3d9d1?utm_source=dotcom.software" target="_blank">#8 Caching requests</a></p></div></div></div></div><hr class="my-5"><p class="text-muted">The code is hosted on <a href="https://github.com/dotcom-poland/thumbgun" target="_blank">GitHub</a> and is available for free under MIT license.</p></div><script defer="defer" src="bundle.31d6cfe0d16ae931b73c.js"></script></body></html>
<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Symfony 6 Thumbgun PHP project</title><link href="style.01621c93313bdb14b44c.css" rel="stylesheet"></head><body><div class="col-md-8 py-5 px-3 mx-auto"><h1>Thumbgun project</h1><div class="col-lg-8 px-0"><p class="lead">A <a href="https://medium.com/@dotcom.software/serving-resized-s3-images-on-the-fly-2ed98e10bf3a?utm_source=dotcom.software" target="_blank">story published on Medium</a> about creating a fully functional, practical, Symfony 6 based application.</p><hr class="my-5 w-25 mx-0"><p>The requirements for the app:</p><ul><li>be written in PHP8.1,</li><li>have few dependencies,</li><li>be open-sourced on GitHub,</li><li>have a GitHub actions pipeline to ensure quality,</li><li>be Dockerized for easy and quick developing,</li><li>cache generated thumbs locally to save bandwidth,</li><li>support multiple types on the output (JPEG + WEBP)</li><li>allow to clear the thumbnail cache en masse,</li><li>correctly handle concurrent access to the same image,</li><li>protect against unauthorized use,</li><li>be flexible enough to change from S3 to any other source if necessary.</li></ul></div><hr class="my-5 w-25 mx-0"><div class="row row-cols-1 row-cols-sm-2 row-cols-md-3 g-3"><div class="col"><div class="card h-100 shadow-sm"><img loading="lazy" class="bd-placeholder-img card-img-top" src="https://miro.medium.com/max/700/0*R6Kze0jCTYd4meZS" alt=""><div class="card-body"><p class="card-text"><a href="https://medium.com/@dotcom.software/serving-resized-s3-images-on-the-fly-6b052ee3b0ca?utm_source=dotcom.software" target="_blank">#1 Dockerizing the Symfony 6 app</a></p></div></div></div><div class="col"><div class="card h-100 shadow-sm"><img loading="lazy" class="bd-placeholder-img card-img-top" src="https://miro.medium.com/max/700/0*IcCp-RyRUR1ulKEv" alt=""><div class="card-body"><p class="card-text"><a href="https://medium.com/@dotcom.software/2-setting-up-xdebug-cec92b7c0cd0?utm_source=dotcom.software" target="_blank">#2 Setting up Xdebug</a></p></div></div></div><div class="col"><div class="card h-100 shadow-sm"><img loading="lazy" class="bd-placeholder-img card-img-top" src="https://miro.medium.com/max/700/0*uGSCsxHuZ20DYEQ8" alt=""><div class="card-body"><p class="card-text"><a href="https://medium.com/@dotcom.software/3-phpunit-and-psalm-c316e4f7e20a?utm_source=dotcom.software" target="_blank">#3 Setting up PHPUnit and Psalm</a></p></div></div></div><div class="col"><div class="card h-100 shadow-sm"><img loading="lazy" class="bd-placeholder-img card-img-top" src="https://miro.medium.com/max/700/0*wVz5GeNddhpb4n5M" alt=""><div class="card-body"><p class="card-text"><a href="https://medium.com/@dotcom.software/4-github-actions-continuous-integration-pipelines-1bc80a902374?utm_source=dotcom.software" target="_blank">#4 GitHub actions continuous integration</a></p></div></div></div><div class="col"><div class="card h-100 shadow-sm"><img loading="lazy" class="bd-placeholder-img card-img-top" src="https://miro.medium.com/max/700/0*845sgSeGFG676C-t" alt=""><div class="card-body"><p class="card-text"><a href="https://medium.com/@dotcom.software/5-serving-thumbnails-1e5d95d8c76b?utm_source=dotcom.software" target="_blank">#5 Serving thumbnails</a></p></div></div></div><div class="col"><div class="card h-100 shadow-sm"><img loading="lazy" class="bd-placeholder-img card-img-top" src="https://miro.medium.com/max/700/0*_yF17Nfw0VCQElw2" alt=""><div class="card-body"><p class="card-text"><a href="https://medium.com/@dotcom.software/6-preventing-request-forgery-380c63b416b7?utm_source=dotcom.software" target="_blank">#6 Preventing request forgery</a></p></div></div></div><div class="col"><div class="card h-100 shadow-sm"><img loading="lazy" class="bd-placeholder-img card-img-top" src="https://miro.medium.com/max/700/0*0UHxXFx0OnDS1aXy" alt=""><div class="card-body"><p class="card-text"><a href="https://medium.com/@dotcom.software/7-talking-to-s3-a2b4cb65c7fd?utm_source=dotcom.software" target="_blank">#7 Talking to S3</a></p></div></div></div><div class="col"><div class="card h-100 shadow-sm"><img loading="lazy" class="bd-placeholder-img card-img-top" src="https://miro.medium.com/max/700/0*qsk3J9Ci239nH1yS" alt=""><div class="card-body"><p class="card-text"><a href="https://medium.com/@dotcom.software/8-caching-requests-ae4778e3d9d1?utm_source=dotcom.software" target="_blank">#8 Caching requests</a></p></div></div></div><div class="col"><div class="card h-100 shadow-sm"><img loading="lazy" class="bd-placeholder-img card-img-top" src="https://miro.medium.com/max/1400/0*UO3p_XxvW492e6mE" alt=""><div class="card-body"><p class="card-text"><a href="https://medium.com/@dotcom.software/9-protecting-from-concurrent-access-4e792c56c17e" target="_blank">#9 Protecting from Concurrent Access</a></p></div></div></div></div><hr class="my-5"><p class="text-muted">The code is hosted on <a href="https://github.com/dotcom-poland/thumbgun" target="_blank">GitHub</a> and is available for free under MIT license.</p></div><script defer="defer" src="bundle.31d6cfe0d16ae931b73c.js"></script></body></html>

0 comments on commit 7550dc8

Please sign in to comment.