In this post we will be putting our website online for the world to see! In order to get our website online we need a domain and web hosting. Step 1: Purchase Domain Name Head over to godaddy.com and search for a domain name. If you find a domain name you like, and the na…
100 result(s) for βourβ
In this post we learn how to obtain and access token from the Instagram Basic Display API with a code passed to us from Instagram once the user has authorized our application. The access token we get is short lived meaning it will only be valid for an hour or so. In the next blo…
Today we learn how to setup a Facebook App for use with the Instagram Basic Display API. We create a Facebook app, add Instagram to our Facebook app, create an Instagram app under our Facebook App, and add our personal Instagram account as a tester under our new Instagram App. A…
In this post we will be creating a public repository for our website. We will make some updates locally, add, commit, and push our code changes up to the GitHub where the whole world can see it! Step 1: Create the Repository on GitHub Once you are logged into GitHub. Click on th…
Recently I discovered that this code passed our PHPStan level 10 checks: use http\Exception\InvalidArgumentException; // ... throw new InvalidArgumentException; I was surprised as http\Exception\InvalidArgumentException is not a class in our system. While cooling, I discovered t…
The String type in ES6 has come with four new methods that are really handy, help us write a little bit more readable code, as well as reduce our reliance on using regular expressions, or RegExp, for certain things. .startsWith() and .endsWith() So I have a const variable named …
The other problem using let and const will fix is with our for loop. This is something that you probably have all run into with your regular for loop, like one that will count from zero to nine: for(var i = 0; i < 10; i++) { console.log(i); } Problems that arise here are two …
Just this week we switched from using Gmail to Help Scout for product support. I was really hesitant to make the switch. Gmail has worked exceptionally well for us throughout the past year. The only significant reason for us to switch was the growth of the support team. We had o…
The PHP development team announces the immediate availability of PHP 8.4.22. This is a bug fix release. All PHP 8.4 users are encouraged to upgrade to this version. For source downloads of PHP 8.4.22 please visit our downloads page, Windows source and binaries can also be found …
The PHP development team announces the immediate availability of PHP 8.5.7. This is a bug fix release. All PHP 8.5 users are encouraged to upgrade to this version. For source downloads of PHP 8.5.7 please visit our downloads page, Windows source and binaries can also be found th…
Longhorn PHP is back, with a slightly updated format - this year our conference in Austin, TX, will feature a tutorial day (Thursday, October 15), followed by a main conference day (Friday, October 16). We are currently accepting talk and tutorial submissions. While the CFP is o…
The PHP development team announces the immediate availability of PHP 8.5.6. This is a security release. All PHP 8.5 users are encouraged to upgrade to this version. For source downloads of PHP 8.5.6 please visit our downloads page, Windows source and binaries can also be found t…
The PHP development team announces the immediate availability of PHP 8.2.31. This is a security release. All PHP 8.2 users are encouraged to upgrade to this version. For source downloads of PHP 8.2.31 please visit our downloads page, Windows source and binaries can also be found…
The PHP development team announces the immediate availability of PHP 8.4.21. This is a security release. All PHP 8.4 users are encouraged to upgrade to this version. For source downloads of PHP 8.4.21 please visit our downloads page, Windows source and binaries can also be found…
The PHP development team announces the immediate availability of PHP 8.3.31. This is a security release. All PHP 8.3 users are encouraged to upgrade to this version. For source downloads of PHP 8.3.31 please visit our downloads page, Windows source and binaries can also be found…
The PHP development team announces the immediate availability of PHP 8.4.20. This is a bug fix release. All PHP 8.4 users are encouraged to upgrade to this version. For source downloads of PHP 8.4.20 please visit our downloads page, Windows source and binaries can also be found …
The PHP development team announces the immediate availability of PHP 8.5.5. This is a bug fix release. All PHP 8.5 users are encouraged to upgrade to this version. For source downloads of PHP 8.5.5 please visit our downloads page, Windows source and binaries can also be found th…
The PHP development team announces the immediate availability of PHP 8.5.4. This is a bug fix release. All PHP 8.5 users are encouraged to upgrade to this version. For source downloads of PHP 8.5.4 please visit our downloads page, Windows source and binaries can also be found th…
The PHP development team announces the immediate availability of PHP 8.4.19. This is a bug fix release. All PHP 8.4 users are encouraged to upgrade to this version. For source downloads of PHP 8.4.19 please visit our downloads page, Windows source and binaries can also be found …
The PHP development team announces the immediate availability of PHP 8.5.3. This is a bug fix release. All PHP 8.5 users are encouraged to upgrade to this version. For source downloads of PHP 8.5.3 please visit our downloads page, Windows source and binaries can also be found th…
The PHP development team announces the immediate availability of PHP 8.4.18. This is a bug fix release. All PHP 8.4 users are encouraged to upgrade to this version. For source downloads of PHP 8.4.18 please visit our downloads page, Windows source and binaries can also be found …
The PHP development team announces the immediate availability of PHP 8.5.2. This is a bug fix release. All PHP 8.5 users are encouraged to upgrade to this version. For source downloads of PHP 8.5.2 please visit our downloads page, Windows source and binaries can also be found th…
The PHP development team announces the immediate availability of PHP 8.3.30. This is a bug fix release. All PHP 8.3 users are encouraged to upgrade to this version. For source downloads of PHP 8.3.30 please visit our downloads page, Windows source and binaries can also be found …
The PHP development team announces the immediate availability of PHP 8.4.17. This is a bug fix release. All PHP 8.4 users are encouraged to upgrade to this version. For source downloads of PHP 8.4.17 please visit our downloads page, Windows source and binaries can also be found …
The PHP development team announces the immediate availability of PHP 8.1.34. This is a security release. All PHP 8.1 users are encouraged to upgrade to this version. For source downloads of PHP 8.1.34 please visit our downloads page, Windows source and binaries can also be found…
The PHP development team announces the immediate availability of PHP 8.4.16. This is a security release. All PHP 8.4 users are encouraged to upgrade to this version. For source downloads of PHP 8.4.16 please visit our downloads page, Windows source and binaries can also be found…
The PHP development team announces the immediate availability of PHP 8.2.30. This is a security release. All PHP 8.2 users are encouraged to upgrade to this version. For source downloads of PHP 8.2.30 please visit our downloads page, Windows source and binaries can also be found…
The PHP development team announces the immediate availability of PHP 8.3.29. This is a security release. All PHP 8.3 users are encouraged to upgrade to this version. For source downloads of PHP 8.3.29 please visit our downloads page, Windows source and binaries can also be found…
The PHP development team announces the immediate availability of PHP 8.5.1. This is a security release. All PHP 8.5 users are encouraged to upgrade to this version. For source downloads of PHP 8.5.1 please visit our downloads page, Windows source and binaries can also be found t…
The PHP development team announces the immediate availability of PHP 8.4.15. This is a bug fix release. All PHP 8.4 users are encouraged to upgrade to this version. For source downloads of PHP 8.4.15 please visit our downloads page, Windows source and binaries can also be found …
The PHP development team announces the immediate availability of PHP 8.3.28. This is a bug fix release. All PHP 8.3 users are encouraged to upgrade to this version. For source downloads of PHP 8.3.28 please visit our downloads page, Windows source and binaries can also be found …
The PHP development team announces the immediate availability of PHP 8.3.27. This is a bug fix release. All PHP 8.3 users are encouraged to upgrade to this version. For source downloads of PHP 8.3.27 please visit our downloads page, Windows source and binaries can be found on wi…
The PHP development team announces the immediate availability of PHP 8.4.14. This is a bug fix release. All PHP 8.4 users are encouraged to upgrade to this version. For source downloads of PHP 8.4.14 please visit our downloads page, Windows source and binaries can be found on wi…
The agent can answer from our knowledge base, but not about things that change by the minute like shipping delays. In this episode we add the WebSearch tool so the agent can pull live information from the web, with a locked-down allow list so it only hits domains we trust. The p…
Two weeks ago, we wrapped up another fantastic edition of SymfonyOnline, and we are still buzzing from the energy! π Our pre-conference workshops (June 9-10) focused on Symfony and AI, expertly led by Stiven Llupa and Guillaume Loulier. Thank you for sharing your expertise and s…
Two weeks ago, we wrapped up another fantastic edition of SymfonyOnline, and we are still buzzing from the energy! π Our pre-conference workshops (June 9-10) focused on Symfony and AI, expertly led by Stiven Llupa and Guillaume Loulier. Thank you for sharing your expertise and s…
Learn how Maestro solves the challenge of maintaining 21 Laravel starter kit variants across 8 repositories, using layered builds, priority-based sync, and a contributor workflow designed to scale.
I had the opportunity to play with Jenkins again last week. And the setup for our projects went pretty smooth. But the fact that no matter what i tried. The clover forecast icon would always show up as rainy . While the build was succeeding without issues. So i spend some time g…
Let's see how to run tests in a Laravel project automatically! This isn't about how to do Continuous Integration with Laravel, but instead it's best for local development. Our Goals: Unit test to version of PHP you want Watch for file changes Without Docker: We can use a utility…
We run a Laravel application! docker run --it --rm -v $(pwd):/var/www/html \ -w /var/www/html \ shippingdocker/app:latest \ composer create-project laravel/laravel application This shares our current directory into the /var/www/html directory in the container, and then runs comp…
Here we build up our helper script to accomplish the following: Pass-thru any undefined commands to docker-compose Run docker-compose ps if we don't pass any arguments to the develop script Create a series of commands such as artisan, composer, yarn, and so on, setting the scrip…
We can build up a nice development workflow using a helper bash script. This makes running command witin our Docker container super easy. Running all of those docker-compose commands are a real pain! We also move our application files up a level so the Docker files are all withi…
We add a node service that we can use to build our static assets: version: '3' services: app: build: context: ./docker/app dockerfile: Dockerfile image: shippingdocker/app:latest networks: - appnet volumes: - .:/var/www/html ports: - ${APP_PORT}:80 working_dir: /var/www/html cac…
We can use variables in our docker-compose.yml files! The syntax is: ${SOME_VAR_NAME}. These specifically are environment variables. First, let's set our docker-compose.yml file to read two variables: version: '3' services: app: build: context: ./docker/app dockerfile: Dockerfil…
We cover some more about working directories, the exec vs run command, and update our docker-compose.yml file. If our exec command doesn't work with a working directory setting, we can run a command that cd's into a directory and runs the command we want all in one shot: docker …
We define and flesh out our app service, which includes instructions on how to build our app service image using our local Dockerfile and supporting configuration files. version: '3' services: app: build: context: ./docker/app dockerfile: Dockerfile image: shippingdocker/app:lat…
We fill out a few services into our docker-compose.yml file: version: '3' services: cache: image: redis:alpine networks: - appnet db: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: secret MYSQL_DATABASE: homestead MYSQL_USER: homestead MYSQL_PASSWORD: secret networks: - appn…
Let's start building a docker-compose.yml file so we can manage our Docker environment more easily. Docker Compose lets us manage the life cycle of our Docker environment, including Volumes, Networks, and of course helping us manage multiple containers that can work together. We…
We cover Docker volumes and make sure we have set our docker-compose.yml file correctly to use our created volumes. List volumes: docker volume ls Create a volume named dbdata: docker volume create dbdata Then we can use this volume when we spin up a container, such as MySQL: do…
We can use ENTRYPOINT instead of CMD within our Dockerfile's in order to setup a script that is always run (no matter what!) when a container is spun up from the image we make. Entrypoint Script First, we make a script to act as our ENTRYPOINT: #!/usr/bin/env bash ## # Ensure /.…
We cover the docker logs command. We need to make a tweak so everything outputs to stdout or stderr. If we do that successfully, we can use Docker's logging mechanism to see output from Nginx, PHP, and Supervisord. The only change we need to make: PHP-FPM In our php-fpm.conf fil…
DALL-E picture generated from the answer. I was curious, given all the ChatGPT love, what it would make of some of our favorite topics. I was both impressed and unimpressed. Impressed. ChatGPT instantly generated an response that might make a good answer in a Miss Universe conte…
I recently had to do some maintenance work on an old application hosted on the CakePHP server. The CakePHP project has 20 or so sites and applications deployed in dokku. Dokku allows us to build a platform-as-a-service for our sites that operates on a single server. Dokku encour…
I'm back! The last time I blogged was in 2017: a lot has changed since then, and after a decade of ignoring blogging, I will attempt to put some regularity into it again. The times call for it: having a personal space that is really "our own" is extremely important, and it is as…
Today we're talking about Visual debt in our code. As an introduction, I suggest to watch this short tutorial about visual debt by @jeffrey_way. The concept is simple: let's take the example from Laracasts and re-visit the steps taken to remove visual debt. interface EventInterf…
For a long time, the visitors to our websites were people. That is slowly changing. More and more, the “visitor” is a piece of software, such as an AI assistant, a bot, or an agent doing a task for someone. It might be trying to…
Difficult energetic realities, which, moreover, have a negative tendency to further complications, make us look for new non-standard ways to maintain our comfort and improve it. Among the many original devices invented for this purpose, a special place belongs to all kinds of in…
You spent 5 hours on TikTok yesterday. Wanna do it again?
by Yitzchak Schaffer (@YitzOfTheBits) Silex is a PHP microframework from the same family as Symfony. My shop, Imagine Easy Solutions, uses Silex for some of our most important applications. Modular setup is at the core of Silex’s game, by means of Service Providers. The Mo…
by Yitzchak Schaffer (@YitzOfTheBits) Our team has recently begun working on a new product, and dedicated eight developers for the task. We have been struggling with how to get the product from concept into implementation. We’re using an up-front planning approach, specify…
At Imagine Easy, we pride ourselves on building great products on a great foundation. A great foundation means to also focus on code quality, and with said quality, the right amount of tests and (of course) coding standards. Travis-CI For continuous integration and continuous de…
by Yitzchak Schaffer (@yitznewton) This article comes in response to a critique of TDD eloquently advanced by my colleague, Richard Wossel. Rather than offer a point-by-point comparison of our perspectives, I am going to paint TDD in a broader context, and I hope that this will …
by Yitzchak Schaffer (@yitznewton) I was just reading in Clean Code: The proper use of comments is to compensate for our failure to express ourself in code. Note that I used the word failure. I meant it. Comments are always failures. We must have them because we cannot always fi…
Last year, my partner and I moved into a new (to us) house. One of the first things I needed to get done was to get our home network setup as we both were (still are) working from home due to COVID-19. This post will explore some of that process, some of the decisions I made alo…
Recently my team was working to implement Brakeman in our CI processes to automatically scan our codebase for security vulnerabilities. Among a few other issues, it identified a handful of similar XSS vulnerabilities of a similar pattern:<script type="text/javascript"> var FO…
(AKA: “Thoughts on code smells” and how “high brow” they have become)We have a habit of talking about “code smells” to indicate patterns and practices that our experience has shown can be problematic. Many of these “smells” are backed by a lot of data and really are legitimate p…
Somewhere around a year ago, we started using GES in production as the primary data store of our new loyalty system. The system stores two types of data. External services push batches of dumb downed events to the loyalty system. For example: a user logged on, played a game or p…
Late 2017, we set out to replace and upgrade our existing reporting and analytics infrastructure with something that would be a better fit for our workloads. Keeping costs and required maintenance at a minimum would be a nice plus, making for an easy sell. After a bit of researc…
I’ve been looking into handing a bit of our messaging infrastructure over to a managed alternative. Managing your own messaging infrastructure that should be highly available is not always an investment you want to make in this day and age. Going through the documentation …
In our system a backoffice user can issue a promotion code for users to redeem. Redeeming a promotion code, a user receives a discount on his next purchase or a free gift. A promotion code is only active for a limited amount of time, can only be redeemed a limited amount of time…
So last time we discovered that the C of our beloved MVC has gone. But given that we no longer have a routes.php file and all of the models are kept in plugins, it wasn't going to be able to work in the traditional Laravel way anyway. Click to read more.
EDIT: This article is also available in Japanese. γγγ! In a recent interview with Full Stack Radio our Lord and Savior DHH™ explains how he organizes Rails controllers in the latest version of Basecamp. Here is an enhanced transcript of his holy words: What I’ve come to em…
Almost thirty years after publication, the medium may have changed, but the message has not.
Don’t forget to subscribe to our YouTube channel to stay up-to-date. A standard “thank you” confirmation following a form submission can be a little boring. Drupal’s Webform module lets you easily customize the confirmation message to make it more spe…
This is a major milestone for the library: AutoMapper has reached version 10.0. While our promise remains unchanged — transforming your data from one format to another as fast as possible — this version…
π Symfony 8 π is out after 2 years of hard work, and we are already using it in production. How so? Follow me in this upgrade process π€ We start our journey with a Symfony 7.3 pet project, it's called…
When we unveiled Castor to the world, we shared the reasons that prompted us to develop our own task runner. Since that article from 2023, many things have evolved in the project. And we now consider…
Every sabbatical must come to an end Last October, after a year and a half with Wavetable Labs, including the purchase of PowerReviews which led to a refocusing of our business, I decided to take some time to work on personal stuff. And thus started the sabbatical that I’ve been…
One of our projects has a really large test suite that isn't optimised to run with Laravel's parallel testing. It was starting to take more than 15 minutes to have the whole test suite run inside Github Actions, which is when I searched for a better way to do this.
Statamic v3 has added support for other template languages in addition to their own "Antlers" templating language. Recently when creating a new website for one of our clients, we ran into some performance issues with Antlers. This really only happens when you have a large amount…
I recently worked on the new Spatie docs website. We moved our site from a Digital Ocean server to Netlify, a serverless platform.
We’re introducing Instantaneous PowerLoss Storm, a new testing paradigm within Meta’s infrastructure for handling and mitigating instant or zero-notice power loss in our data centers. We’re sharing: how we built readiness to tolerate instant failures into our existing systems w…
Meta’s data ingestion system, which our engineering teams leverage for up-to-date snapshots of the social graph, has recently undergone a significant revamp to enhance its reliability at scale. Moving from our legacy system to our new architecture required a large-scale migrati…
Context At a previous job, we built a service we called our operations platform. Its aim was to unify the SaaS tooling used by our ops teams with dom...
This is a re-post of an article I wrote for my company's blog. Here's a story of how we improved our CI run times in one of our core Ruby services by...
Update: we’ve decided to move our blog under our official website; we’ve republished this post at this url. This is the last post originally published on Medium.And we’re back with another update on what’s going on in the PHP-FIG! This time we have just two news, but big ones!PS…
Update: we’ve decided to move our blog under our official website; we’ve republished this post at this url.This time I waited a bit longer before drafting a new update post, because a few new things where moving under the hood… Now it’s time to wrap it up!Brace yourselves, elect…
Update: we’ve decided to move our blog under our official website; we’ve republished this post at this url.A couple of days ago, the PHP Framework Interoperability Group (PHP-FIG) approved the PSR-18 “HTTP Client” standard. This standard was the last missing piece to build appli…
Update: we’ve decided to move our blog under our official website; we’ve republished this post at this url.Another two months are passed, and here we are with a new recap of what happened inside the PHP-FIG. Let’s dive in!PSR-18: HTTP clientAt the last moment of October, a new P…
Update: we’ve decided to move our blog under our official website; we’ve republished this post at this url.This time we have waited a bit longer before publishing a recap of the recent news from PHP-FIG, but we have a lot to share; let’s start!The new official page for PSR-17PSR…
Update: we’ve decided to move our blog under our official website; we’ve republished this post at this url.The process of creating a PSR for HTTP clients is coming to an end. I would like to encourage you to review it and raise your concerns or thoughts. But it’s obviously a rea…
Update: we’ve decided to move our blog under our official website; we’ve republished this post at this url.Here we are again, with another bi-monthly update about the state of the affairs here at PHP-FIG. In the last two months, two PHP-FIG meetups where held, during the PHPDay …
The PSR-6 amendment pull requestUpdate: we’ve decided to move our blog under our official website; we’ve republished this post at this url.Continuing in our habit of frequent posts to update the community, here we are to see what happened inside the PHP-FIG in the last two month…
Update: we’ve decided to move our blog under our official website; we’ve republished this post at this url.Back in October 2017, Michael Cullum started a new series on the PHP-FIG blog, ‘A month of PHP-FIG’. Unfortunately as things go, the momentum for this didn’t quite get main…
Update: we’ve decided to move our blog under our official website; we’ve republished this post at this url.As part of the effort to communicate better what’s going on within the PHP-FIG we’re starting a new series of ‘A month of PHP-FIG’ articles to be released towards the end o…
Here we use LetsEncrypt (certbot) with the CloudFlare DNS plugin to generate a free, auto-renewing TLS certificate to use with Nginx. Then we configure Nginx to use that TLS certificate and create a configuration to support multi-tenancy in our applications. We use a special con…
Remember when I called a reverse proxy "basically just a load balancer"? Ours doesn't balance any load. Let's fix that! A Quick Review We use a Mux to match the incoming request to a Target. The Mux can match incoming requests against the domain used, the port requeste…
If we shut down our program (currently via sigint, and crtl+c), it will cut off any current connections. Go's http.Server actually handles graceful shutdowns! We just need to orchestrate it properly with our whacky setup. We'll do just that, giving connections up to 10 seconds t…
Let's get started making our own proxy. We'll just steal the contents of NewSingleHostReverseProxy(), instantiate our own ReverseProxy, and get that working. package main import ( "log" "net/http" "net/http/httputil" "net/url" "string…
It's time to get to more interesting things. The first reverse proxy we'll make is not of our making at all. It turns out that the stdlib has a a decent implementation of a reverse proxy: proxy := httputil.NewSingleHostReverseProxy(backend). As the name implies, it just handles …