forked from barryclark/jekyll-now
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
projects/thumbgun barryclark#9 concurrent access article
- Loading branch information
Showing
3 changed files
with
20 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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> |