The US economy is in imminent danger of seizing up solid

http://img.youtube.com/vi/E7t5yj1rScI/0.jpg

 

I’ve always said that logistics are the true bellwether of many economic issues.  If logistics (a.k.a. the ability to provide enough supply to meet demand) are working, the economy is lubricated and runs smoothly.  If they’re not, the economy is in danger of seizing up like an engine running without adequate oil supply.  General Omar Bradley‘s famous observation is as true in economic disciplines as it is in military:  "Amateurs study tactics.  Professionals study logistics."

Let me put the next paragraph in big, bold, black letters to emphasize how serious I am.

Right now, our logistics snarl-up is posing the real danger of seizing up our economy – and the danger is growing worse by the day.  The next two to three months are likely to prove absolutely critical.  If I were talking about the potential for military conflict, I’d call this article a WAR WARNING.  In economic terms, I suppose I’ll have to call it a COLLAPSE WARNING.

Yes, it is getting that bad – and it all boils down to logistics.  The problem is that there are too many goods seeking shipment, and not enough containers, vessels, vehicles and aircraft – not to mention people – available to move them.  If a container ship is anchored off a Chinese port for a month, waiting to load cargo, then sails across the Pacific to a US port, then anchors off one of our harbors for another month to await unloading, it’s occupied for three to four months with a single cargo.  Under normal circumstances, it’d carry three to four cargoes during that same period – but the clogged-up arteries of the world’s transport and logistics system simply can’t cope with that any more.

CNBC offers this overview of the problems being experienced by container ships.

The result of the clogged-up ocean shipping system is that, due to delays and waiting periods, literally hundreds of the biggest cargo ships in the world are forced to carry no more than a quarter of the cargo they’d normally transport during any given year.  All those manufacturers and countries that gleefully exported their manufacturing capacity to China or Asia in past years are now sitting with goods overseas that they can’t get to the customers who want them.  That’s the living definition of a logistics bottleneck, right there.  Some high-value, low-bulk items can be transferred to aircraft for shipment (at much greater expense), but that doesn’t apply to many heavier or bulkier manufactured goods.  They have to wait for a ship, or take the railroad from China across Siberia and Russia to Europe, and be distributed there or sent on by ship to the USA and elsewhere – but the ships to carry them are, as mentioned above, in drastically short supply.

Here in the USA, ships are waiting one to two months to get off-loaded;  then their containers are sitting in harbors, waiting for rail or road transport to their destinations.  However, land transportation is also backlogged, struggling to cope with the huge influx of containers and cargo.  It’s not just at the harbors, either.  Railroad companies have only so many freight cars, and road transport companies have only so many trucks that can carry containers.  They may want to order more, but the companies that make them often rely on raw materials and parts from – guess where? – CHINA, or other overseas manufacturers.  (For example, almost every rail car relies on computer chips to control its brakes, send signals to the engine if it has a problem, etc.  The chip shortage currently affecting motor vehicle manufacturers is affecting rail car manufacturers, too.)

Here’s a report of how rail congestion in and near Chicago is affecting one small business – and it’s far from alone.

It’s gotten to the point where goods are being delivered to stores in this country, and bought by anxious customers before they’re even put out on the shelves.  That happened to me just yesterday.  I wanted to buy a couple of 5-gallon cans of kerosene for our newly-purchased heater, but no store in the big city nearby had any in stock – just smaller plastic 1- and 2½-gallon containers.  Eventually, Tractor Supply’s national Web site said that its local store had the cans in stock, so I went straight there.  The assistants inside all said that no, they were out of stock:  but when I insisted, they went to the rear to check – and found that six cans had just been delivered that morning.  They brought back two for me, only to find another customer had just arrived, having checked online as I had, and also wanted two.  They ended up having only two out of six to put on the shelves, and I learned later those sold within the hour.  They don’t know when they’ll be getting more in;  they’re dependent on their regional office to send what they can, when they can, and they’re never sure what will arrive on that day’s truck.

These aren’t isolated incidents or rare examples.  This sort of thing is happening more and more often, all over the country.  The pipelines of supply are clogging up, so that most places can’t get enough of what they want, or know for sure what they’re getting and when they’re getting it.  I wrote about a number of examples in my recent articles on supply chain problems, and I’m hearing more and more complaints like that.

If the supply pipeline gets much more clogged – and it’s getting worse almost by the day – there will come a time when nothing can move.  The deadweight hanging over the system will squash it flat, and everything will come to a grinding halt.

Let me try to paint the broad picture as best I can by citing several articles that, taken together, provide enough flashing red lights and economic sirens to scare anybody.

MISES INSTITUTE:

Not only were people locked down [during the COVID-19 pandemic], but society and therefore practically the whole economy was forcefully paused. The problem here is that there is no "Pause button" for the economy. It may sound easy for politicians, who have no conception of how the real world works. But you cannot simply pause a business. You also cannot pause the supply chain. If you have ever run a business you know that being an entrepreneur is not a steady state but a changing process. It is a constant struggle to get money to come in so that you can cover costs that you’ve assumed long ago. That’s what entrepreneurs and businesses do. They assume costs and imagine they will be paid for their efforts later, and paid more than the cost they already assumed.

In other words, if you "pause," a business, the costs remain but you get no revenue. How are you going to pay those bills when everything is on pause? You cannot. This is perhaps easy to understand … so easy that even some politicians grasp the concept. So many countries like the United States have offered relief in the form of loans to businesses. Of course, such schemes come with the usual cronyism and favoritism. The loans often do not end up in the hands of those intended. They also shift power and influence away from the market to the bureaucrats in government. Or to put it differently, businesses survive or go under as decided by bureaucrats, not by consumers.

There is more than simply money. Imagine food processing and the beef farmer when the politicians press Pause, which stops businesses from dealing with slaughtering, cutting, processing, and shipping meat. But it doesn’t stop the farming. The farmer’s animals will not stop growing and will not stop eating because the economy is paused. The farmer will go bankrupt because he needs to cover their food, water, and care without being able to sell any beef. Even if he has savings to cover the expense, the meat will lose quality and value as the cows grow older than their prime. At the same time, no meat is reaching the shelves in the stores. So while the farmer is stuck with costs he cannot cover because he cannot sell the meat he produces, consumers cannot find meat in stores. Consequently, we experience a shortage of food, while at the same time farmers and other producers have surpluses that they cannot afford to keep and are unable to sell. What a ludicrous situation.

The effect of this is of course that the farmer will not be able to rise again as the politicians press Play on the economy and beef processing is resumed. He will not have been able to make those continuous investments in his business in order to meet future demand for meat. After all, he was stuck with additional costs and no revenue. So pressing Play will not solve the food shortage.

The same story can be told for other types of businesses as well. You cannot stop the freighter that is on its way around the world. You cannot store logs of timber waiting for the sawmill. You cannot pause mines and smelting plants. And if one task can be paused, it affects the other task in the supply chain. The longer the lockdown, the more businesses would have failed and the supply chains lain in shambles. This is an enormous loss. While it can be rebuilt, it can only be so at an enormous expense. And it still requires that there are people with the know-how and willingness to start such businesses again. Can we rely on them to rise and try again, even after they have been crushed?


BLOOMBERG:  "Europe’s Energy Crisis is Coming for the Rest of the World, Too"

This winter, the world will be fighting over something that’s invisible, yet rarely so vital—and in alarmingly shorter supply.

Nations are more reliant than ever on natural gas to heat homes and power industries amid efforts to quit coal and increase the use of cleaner energy sources. But there isn’t enough gas to fuel the post-pandemic recovery and refill depleted stocks before the cold months. Countries are trying to outbid one another for supplies as exporters such as Russia move to keep more natural gas home. The crunch will get a lot worse when temperatures drop.

The crisis in Europe presages trouble for the rest of the planet as the continent’s energy shortage has governments warning of blackouts and factories being forced to shut.

. . .

American exporters are poised to ship more LNG than ever as new projects come online toward the end of the year. But as more gas goes abroad, less will be available at home. Even though gas prices have been notably lower in the U.S. than in Europe and Asia, they are trading near the highest level since 2014. Gas inventories are running below their five-year seasonal average, yet U.S. shale drillers are reluctant to boost production out of concern that would crimp their profitability and put off investors.


FINANCIAL SURVIVAL NETWORK:  "Get Ready for Non-Transitory Inflation: Ten Things About to Shoot Up in Price"

Transportation A large part of our personal budgets are consumed by getting from point a to point b. The cost of doing this has risen and will rise even higher. With gasoline prices up a whopping 85% in the past 12 months, commuters are already feeling the bite. Politicians often increase gasoline excise taxes when seeking more revenue. Same with liquor excise taxes. With electric vehicles expected to capture higher market share, these taxes will have to be raised to make up the difference. In addition, tolls will also increase, to pay higher operating and labor costs in running and maintaining highways, bridges and tunnels.

. . .

Food Expect food shortages, supply chain disruptions and weather issues to drive food prices much higher in the months and years to come. There’s a reason that the government excludes food prices from the consumer price index (cpi) and it’s not because they’re going down. Higher fuel costs will also result in higher food prices, as modern farming techniques are energy intensive, not to mention that virtually all food produced must be shipped to market. Fertilizers and pesticides will go right up along with oil and natural gas prices.


REDSTATE:  "Groups Warning of Imminent Global Supply Chain System Collapse"

Cargo ships anchored off California and New York, and in rail yards and on trucking routes, shipping consumer goods are incredibly backlogged  due to a lack of manpower and pandemic restrictions to unload the goods. And now, there are warnings that the supply chain may be on the brink of collapse.

Shipping ports which normally only had one or two ships in dock waiting to be unloaded prior to the pandemic now have dozens lined up, waiting to be unloaded for up to four weeks, slowing the whole chain. In Los Angeles and Long Beach, as many as 73 vessels were waiting to be unloaded last month. The bottlenecks at the ports are also impacting railways and trucking. In Chicago — that has one of the largest rail yards — it was at one point backed up for 25 miles.


WALL STREET JOURNAL:  "China’s Power Shortfalls Begin to Ripple Around the World"

The power crunch, on a scale unseen in more than a decade, highlights how some of Beijing’s changing policy priorities, including its effort to limit carbon emissions, can ripple through a global economy that has been reshaped by the pandemic.

"There’ll be a cascading effect," said Mike Beckham, Oklahoma-based co-founder and CEO of Simple Modern, which makes products such as insulated water bottles and backpacks. "As we started to comprehend the ramifications of what’s happening, we realized that this is potentially bigger than anything we’ve seen in our business careers."

Two weeks ago, one of Mr. Beckham’s main suppliers, based in Quzhou city in eastern China, was told by the local government that it could only operate four days a week, instead of the usual six. In addition, it must adhere to a power-usage cap, which cuts the capacity of the factory by about one-third as a result.

Mr. Beckham anticipates U.S. retail prices for many products could increase by as much as 15% next spring, as appetite from retailers stays strong.

. . .

Steve Cooke … said he relies on suppliers who source 80% of their products from China.

Already this year, rising freight costs and supply-chain bottlenecks have pushed up his costs and lengthened delivery times for his customers. He said he expects those pressures to intensify as the power crunch squeezes production.

"We rely so much on China, it’s incredible," Mr. Cooke said.


CNN:  "The workers who keep global supply chains moving are warning of a ‘system collapse’ "

Seafarers, truck drivers and airline workers have endured quarantines, travel restrictions and complex Covid-19 vaccination and testing requirements to keep stretched supply chains moving during the pandemic.

But many are now reaching their breaking point, posing yet another threat to the badly tangled network of ports, container vessels and trucking companies that moves goods around the world.


YAHOO! FINANCE:  "China Orders Top Energy Firms to Secure Supplies at All Costs"

China’s central government officials ordered the country’s top state-owned energy companies — from coal to electricity and oil — to secure supplies for this winter at all costs … A severe energy crisis has gripped the country, and several regions have had to curtail power to the industrial sector, while some residential areas have even faced sudden blackouts. China’s power crunch is unleashing turmoil in the global commodities markets, fueling rallies in everything from fertilizer to silicon.

. . .

Volatility in the energy markets is poised to intensify on the order from the central government, said Bjarne Schieldrop, chief commodities analyst at SEB.

China’s statement “to me implies that we are in no way on a verge of a cool-off. Rather it looks like it is going get even more crazy,” he said. “They will bid whatever it takes to win a bidding war for a cargo of coal” or liquefied natural gas.


GCAPTAIN:  "Port Operator DP World Sees Lasting Supply Chain Disruptions: ‘Maybe in 2023’ "

Dubai’s DP World, one of the biggest global port operators, expects supply chain bottlenecks that have rattled global trade flows to continue at least for another two years … Global supply chains are struggling to keep pace with demand and overcome labor disruptions caused by Covid outbreaks. The world’s largest shipping line, A.P. Moller-Maersk, has also warned bottlenecks may last longer than expected.


CHARLES HUGH SMITH:  "The U.S. Economy In a Nutshell: When Critical Parts Are On "Indefinite Back Order," the Machine Grinds to a Halt"

If the part that blew out is 0.1% of the entire machine, and the other 99.9% still works perfectly, the entire machine is still dead in the water without that critical component. That is a pretty good definition of systemic vulnerability and fragility, a fragility that becomes much, much worse if there are two or three components which are on indefinite back order.

This is the problem with shipping much of your supply chain overseas: you create extreme systemic vulnerability and fragility even as you rake in big profits from reducing costs.

. . .

The Federal Reserve can print trillions of dollars and the federal government can borrow and blow trillions of dollars, but neither can print or borrow supply chains, scarce skills, institutional depth or competence.

And, to sum up the effect on the "man (or woman) in the street", Gun Free Zone notes:

The family went grocery shopping on Saturday.

Food was abundant, albeit more expensive than in the past, it was the other consumables that we had a hard time finding.  Things like shampoo, body wash, mouth wash, cleaning supplies, foot spray, OTC drugs, were low, especially the store brand generics.

Today I went to Walmart at lunch and it took was low on a lot of non-food supplies.

Some specialty food items like Gatorade/sports drinks have been low or empty for weeks.

I haven’t seen store shelves this picked clean since the early lockdown days of COVID over a year ago.

. . .

Manufacturing, transportation, and distribution should be back into near-full swing.  The economy should be recovering fast.

Instead, it looks like we’ve rolled the clock back 18 months and we’re about to get ****ed.

I think the bottom is about to out of the market and it’s going to be a disaster.

I wrote recently about steps I was taking to protect my family from the supply chain snarl-up.  I can only recommend most strongly that you check your own supplies, make a list of things you need to get through at least the next two to three months, and stock up on them right now, while they’re still to be found.  You may find some are already unavailable;  if so, look for substitutes, and don’t quibble about getting exactly the brand or variety you wanted.

Right now, we’re bracing for impact.  I don’t believe we’re going to make it to Christmas without things getting much, much worse.

Peter

Bayou Renaissance Man

Here Are All The Headlines The Babylon Bee Would Have Written If We Were Around In Bible Times

https://media.babylonbee.com/articles/article-9624-1.jpg

Here Are All The Headlines The Babylon Bee Would Have Written If We Were Around In Bible Times


Brought to you by: 


Sadly, The Babylon Bee has only been around for five years, which is 5,995 fewer years than the Earth has been around. Had we existed during Bible times, we definitely would have had some hilarious, scathing headlines to cover all the events that happened in ancient Israel and beyond.

But we wanted to bless you. We went back through the Bible archives and came up with our best headlines for what happened in the Bible. Here they are:

 

OLD TESTAMENT 

 

Closed-Minded God Only Creates Two Genders 

 

Crazy Young-Earth Creationist Adam Claims Earth Is Only 7 Days Old

 

Bigot Noah Only Allows Two Genders of Each Animal on Ark

 

Work On Tower Of Babel Near Completion, Grbizt Mcbkd Flimadpt Dipbdeth Swn

 

Friends Concerned for Job After Finding Him Sitting In A Cave Listening To Daniel Powter’s ‘Bad Day’ On Repeat

 

LGBTQ Community Beat: Things Heating Up In Sodom And Gomorrah

 

New Reality Show Follows Wild Misadventures Of Jacob, 2 Wives, And 13 Boys

 

Joseph Canceled For Wearing LGBTQ Coat Despite Being A Cishet Male

 

Angel Of Death Says Blood On Doorpost Booster May Be Necessary

 

Pharaoh Starting To Get Weird Feeling He Should Let Israelites go

 

Moses Arrested As He Did Not Have A Permit For Parting Of Red Sea

 

Moses Accidentally Drops Tablet Containing 11th Commandment Saying ‘Thou Shalt Not Start A Social Media Company’

 

God Says We Can’t Go Out For Manna Because We Have Manna At Home

 

Manna Renamed To More Inclusive ‘Theyna’

 

Israelites Spend 40 Years Wandering In Desert After Moses Forgets To Update Apple Maps

 

Jericho Wall Collapse Blamed On Failure To Pass Infrastructure Bill

 

Goliath Identifies As Female To Compete In Women’s MMA

 

Results Of David And Goliath Bout Bankrupts Numerous Bookies

 

God Confirmed Libertarian After Warning Israel Against Having A King

 

Saul Throws Spear At David ‘Cause He Keeps Playing ‘Moves Like Jagger’

 

‘Real Housewives Of Solomon’s Harem’ Reality Show Announced 

 

Breaking: King Solomon Diagnosed With Syphilis

 

Jonah Telling Crazy Stories Again

 

Israel Totally Going To Be Obedient And Follow God This T–Update: Never Mind They Blew It

 

Sources Confirm Ba’al Was Indeed On The Crapper While His Prophets Were Getting Owned

 

Bible Scholars Reveal: Lions Lost Appetite After Hearing Daniel’s Anti-Vax Conspiracy Rant

 

NEW TESTAMENT 

 

Choir Of Heavenly Hosts Cited For Violating Bethlehem’s 8pm Noise Ordinance

 

King Herod Calls For Destroying Any Clumps Of Cells Less Than Two Years Old

 

Pharisee Wears Phylactery So Large He Can’t Lift His Head

 

Zacchaeus Sues Jesus For Not Following ADA Guidelines At Event

 

Pharisees Condemn Jesus’s Miraculous Healings As Unapproved Treatment For Leprosy

 

Jesus Totally Owns Pharisees By Turning Their Tears Into Wine

 

Jesus Heals Your Mom Of Obesity

 

CNN Reports Jesus Only Able To Walk On Water Because Of Climate Change

 

Jesus Hatefully Slut-Shames Woman At Well

 

Pontius Pilate Diagnosed With Germaphobia For Frequent Hand-Washing

 

Jesus Uncancels The Whole World 

 

Local Stoner Named Saul Becomes Apostle 

 

Apostle John Praised For Isolating, Social Distancing On Island Of Patmos


NOT SATIRE: Trust in media is at an all-time low (shocking… we know) but let’s keep “walking around completely uninformed” as a backup plan.

The Pour Over provides concise, politically neutral, and entertaining summaries of the world’s biggest news paired with reminders to stay focused on eternity, and delivers it straight to your inbox. The Pour Over is 100% free for Bee readers.

Supplement your satire… try The Pour Over today!

(100% free. Unsubscribe anytime.)


The Babylon Bee

Larger Laravel Projects: 12 Things to Take Care Of

https://laraveldaily.com/wp-content/uploads/2021/09/Larger-Laravel-Projects.png

Probably the most difficult step in the dev career is to jump from simple CRUD-like projects in the early years into some senior-level stuff with bigger architecture and a higher level of responsibility for the code quality. So, in this article, I tried to list the questions (and some answers) to think about, when working with large(r) Laravel projects.

This article will be full of external links to my own content and community resources, so feel free to check them out.

Disclaimer: What is a LARGE project?

First, I want to explain what I mean by “large”. Some people measure that in the number of database records, like million rows in users table is large. Yes, but it’s a large database, not the Laravel project itself.

What I mean by a larger project is mostly the number of entities to manage. In simple terms, how many Eloquent Models your project has. If you have many models, it usually means complexity. With that, as secondary measurement numbers, you may count the number of routes or public Controller methods.

Example from an open-source Monica CRM project that has 300+ lines of code in routes/web.php file:

With the scope of work this big, there are usually multiple developers working on the project, which brings the complexity to manage the codebase.

Also, a third non-tech feature of a large project is the price of the error. I would like to emphasize those projects where your inefficient or broken code may cause real money to be lost: like 30 minutes of downtime in an e-shop may lose $10,000 to the business easily. Or, some broken if-statement may lead real dozens of people to NOT place the orders.

So yes, I’ll be talking about those large projects below.

1. Automated Tests

In smaller projects, there’s usually a smaller budget and a stronger push to launch “something” quicker, so automated tests are often ignored as a “bonus feature”.

In larger projects, you just cannot physically manually test all the features before releasing them. You could test your own code, yes, but you have no idea how it may affect the old code written by others. Heck, you may even have no idea how that other code or modules work because you’re focused on your parts of the application.

So, how else would you ensure that the released code doesn’t cause bugs? Quite often a new code is just a refactoring of the old code, so if you change something in the project structure, how would you be able to test that nothing is broken? Don’t fall into the mindset I call “fingers-crossed driven development“.

Also, getting back to the definition of a larger project – remember, the price of the bug is high. So, literally, your broken code may cause financial loss to the business. If that argument still doesn’t convince you to cover the code with tests, probably nothing else will.

Yes, I know that typical argument that “we don’t have time to write tests“. I have a full video about it.

But this is where you need to find that time. It involves some communication: evaluate the deadlines thinking about the time to write tests, also talk to the managers about what would happen if you don’t write tests. They will then understand and allow that extra time. If they don’t, it means they don’t care about quality that much, so then maybe time to find another company?

Now, I’m not necessarily talking about a mythical “100% test coverage”. If you are really pressured on time, pick the functions to test that are crucial for your app to work. As Matt Stauffer famously said, “first, write tests for features, which, if they break, would cause you to lose your job“. So, anything related to payments, user access, stability of the core most used functionality.

2. Architecture and Project Structure

Ahh, yes, a million-dollar question: how to structure a Laravel project? I even published a 5-hour course on that topic, back in 2019, and I still feel I only scratched the surface there.

There are many different models or ideas that you may follow: divide the project into modules, use the DDD approach, pick some from the design patterns, or just follow SOLID principles. It is all a personal preference.

The thing is there’s no silver bullet and a one-size-fits-all approach. No one can claim that, for example, all bigger Laravel projects should follow DDD. Even SOLID principles sometimes are busted as not the best for some cases.

But the problem is clear: as your project structure grows, you need to change something, and re-structure the files/folders/classes into something more manageable. So what are the essential things you should do?

First, move things into sub-folders and namespace everything accordingly. Again, the example from the Monica CRM is pretty good.

Then, make sure that your classes/methods are not too large. There’s no magic number to follow, but if you feel that you need to scroll up&down too often, or spend too much time figuring out what the class/method does, it’s time to refactor and move the parts of the code somewhere else. The most common example of this is too big Controller files.

These are just two pieces of advice, but just those two changes make your code massively more readable, maintainable, and even more testable.

And yes, sometimes it requires a big “risky” refactoring of classes, but hey, you probably have automated tests to check everything, right? Right?

3. “Fake Data” with Factories and Seeds

A topic related to the automated testing we’ve already talked about. If you want to stress-test your application features, you need a large amount of data. And factories+seeds are a perfect combination to achieve that pretty easily.

Just get into the habit of, when creating a new Eloquent model, create a factory and a seed immediately, from the very beginning. Then, whoever will use it in the future to generate some fake data, will thank you very much.

But it’s not only about testing. Also, think about the fresh installation of your application. Large successful projects tend to grow only larger, so you would definitely have to onboard new developers. How much would they struggle with the installation process and getting up to speed, if they don’t have any sample data to work with?

You will also probably need to install your application multiple times on various servers – local, staging, some Docker-based environments, etc. You can customize the seeds to run under the condition of whether it’s a production or local environment.

4. Database structure

Although I mentioned in the beginning that database size is not the definition of a large Laravel project, but database structure is a hugely important thing for long-term performance and maintainability.

Which relationships to use? In Laravel terms, should it be a HasOne? HasMany? BelongsToMany? Polymorphic?

Also, other questions. One larger table or several smaller ones? ENUM field or a relationship? UUID or ID column? Of course, each case is individual, and I have a full course on structuring databases, but here is my main short tip.

Try to ask your “future self” about what potential SQL queries will there be on these DB tables, and try to write those queries first.

In other words, think about the end goal, and reverse engineer the structure from that. It would help you to “feel” the correct structure.

If you have factories and seeds ready (notice the pattern of how the topics in this article help each other?), you would be able to easily simulate the future usage, maybe even measure A vs B options, and decide on which is the correct one. This moment is actually very important: changing the DB structure in the future, with a large amount of live data, is probably one of the most complex/expensive/risky changes to make. So you better make a good decision up front.

That said, you shouldn’t be afraid to refactor the database if there’s a real need for that. Move some data into a separate less-used table, change HasMany into Polymorphic, choose other column types, etc.

Just make sure you don’t lose any customer data.

5. External Packages and Laravel Upgrades

When you choose what Laravel/PHP packages to include in your composer.json, in the very beginning it’s pretty easy: just use the latest versions of everything, and make sure the package is useful.

But later, when the project is alive for a year or two, there’s a need to upgrade the versions. Not only Laravel itself but also the packages, too.

Luckily, Laravel switched to a yearly release schedule from 6-months (and later moved Laravel 9 release to be in sync with Symfony), so developers don’t have that headache every 6 months anymore.

Generally, the framework itself has a pretty stable core, and the upgrades to new versions are relatively easy, should take only a few hours. Also, a service called Laravel Shift is a huge helper for developers who want to save time on this.

But the problem arises from the packages you use.

Pretty typical scenario: you want to upgrade the project to a new Laravel version, but a few packages from your composer file haven’t released their new versions yet to support that Laravel upgrade. So, in my experience, project upgrades are happening at least a few months after the official Laravel release, when the package creators catch up.

And, there are worse scenarios: when the package creator doesn’t have time to release the upgrade (remember, most of them do it for free, in their spare time), or even abandon the package. What to do then?

First, of course, you can help the creator, and submit a Pull Request with the suggested upgrade (don’t forget to include automated tests). But even then, they need to review, test, and approve your PR, so I rarely see that happening in real life. The packages are either actively maintained, or close to abandoned status. So, the only reasonable solution then is to fork the package and use your own version in the future.

But, an even better decision, is to think deeper at the time of choosing what packages to use. Questions to ask are: “Do we REALLY need that package?” and “Does the package creator have a reputation of maintaining their packages?

6. Performance of everything

If the project becomes successful, its database grows with more data, and the server needs to serve more users at a time. So then, the loading speed becomes an important factor.

Typically, in the Laravel community, we’re talking about performance optimization of Eloquent queries. Indeed, that’s the no.1 typical reason of performance issues.

But Eloquent and database are only one side of the story. There are other things you need to optimize for speed:

Queue mechanism: your users should not be waiting for 5 minutes for the invoice email to arrive
Loading front-end assets: you shouldn’t serve 1 MB of CSS/JS if you can minimize it
Running automated tests suite: you can’t wait for an hour to deploy new changes
Web-server and PHP configuration: users shouldn’t be “waiting in line” while other 10,000 users are browsing the website
– etc.

Of course, each of those topics is a separate world to dive deep in, but the first thing you should do is set up a measurement and reporting system, so you would be notified if there’s a slow query somewhere, a spike in visitors at some time or your server is near CPU limit.

7. Deployment Process and Downtime

In a typical smaller project, you can deploy new changes by just SSHing to the server and running a few git and artisan commands manually.

But if you have bigger traffic and a larger team, you need to take care of two things:
Zero-downtime deployment: to avoid any angry visitors that would see the “deploying changes…” screen, and collisions for visitors pre-post deployment. There’s the official Envoyer project for this and a few alternatives.
Automatic deployments: not everyone on your team has (or should have) SSH access to production servers, so deployment should be a button somewhere, or happen automatically, triggered by some git action

Also, remember automated tests? So yeah, you should automate their automation. Sounds meta, I know. What I mean is that tests should be automatically run before any deployment. Or, in fact, they should be run whenever new code is pushed to the staging/develop branch.

You can schedule to perform even more automated actions at that point. In general, automation of this build/deploy process is called Continuous Integration or Continuous Delivery (CI/CD). It reduces some stress when releasing new features.

Recently, the most popular tool to achieve that became Github Actions, here are a few resources about it:

Build, Test, and Deploy Your Laravel Application With GitHub Actions
How to create a CI/CD for a Laravel application using GitHub Actions

But it’s not only about setting up the software tools. The important thing is the human factor: every developer should know the deployment process and their responsibility in it. Everyone should know what branch to work on, how to commit code, and who/how closes the issues. Things like “don’t push directly to the master branch” or “don’t merge until the tests passed” should be followed on the subconscious level.

There are also social norms like “don’t deploy on Fridays”, but that is debatable, see the video below.

8. Hardware Infrastructure for Scaling

If your project reaches the stage of being very popular, it’s not enough to optimize the code performance. You need to scale it in terms of hardware, by putting up more server power as you need it, or even upsizing/downsizing based on some expected spikes in your visitor base, like in the case of Black Friday.

Also, it’s beneficial to have load balancing between multiple servers, it helps even in case one of the servers goes down, for whatever reason. You can use Laravel Forge for this, see the screenshot below.

Also, don’t forget the scaling of external services. There are separate infrastructure hardware solutions to power your File Storage, Queues, Elasticsearch/Algolia, Socket real-time stuff, Databases, etc. It would be a huge article on each of those areas.

There are so many various tools out there that I can’t really recommend one, in particular, everything depends individually on your project needs, your budget, and your familiarity with a certain ecosystem.

The obvious server-power leader of the world is Amazon with their AWS Ecosystem, but often it’s pretty hard to understand its documentation, there are even explanation websites like AWS in Plain English.

Also, there’s a relatively new “player” in town, called serverless. It became a thing in the Laravel world with the release of Laravel Vapor – a serverless deployment platform for Laravel, powered by AWS.

Probably the best resource to get deeper into this whole scaling world is the course Scaling Laravel.

9. Backups and Recovery Strategy

Everyone probably knows that you need to perform regular backups of your database. And, on the surface, it’s pretty easy to do with a simple Spatie Laravel Backup package:

And, of course, you need to automate it, like “set it and forget it”. But, an important question is have you tried the recovery from that DB backup, at least once?

You need to actually test the scenario: what if your current DB server totally dies, or someone drops the whole production database, and all you have is that backup SQL. Try to actually run the import from it, and test if nothing breaks. If there’s a problem with a backup recovery, you better know it before the disaster happens.

Also, it gets more complicated when you have multiple Database servers, replication, and also you want to not slow down your server while the backup is in progress. So you may tweak the process or use some database backup tools directly, even outside the Laravel world.

10. Bug Monitoring Process

Of course, the larger the codebase, the bigger probability of bugs happening. Also, when there are dozens of features, developers can’t test them all themselves, and even automated tests don’t catch all the possible scenarios and cases. Bugs happen to real users of the system, in the wild.

Your goal as a team is to monitor them and be informed when they happen. There are various tools to help with that, I personally use Bugsnag, but there’s also Flare, Sentry, Rollbar – all of them perform pretty much the same thing: notify you about the bugs, with all possible information that helps to trace and fix that bug.

But again, it’s not only about setting up the tool, it’s about the human factor, as well. The team needs to know the process of who reacts to what bug and how exactly: which bugs are urgent, which ones can be postponed, or totally ignored.

Also, the question “Who’s on duty today” is pretty relevant: if the bug tracking software notifies about something, who needs to get that message and via which channel? In our team, we use Slack notifications, and then ideally the situation should be fixed by the developer responsible for that part of the application which is buggy. Of course, in reality, it doesn’t happen all the time, but at least the team needs to know the time-to-react goals.

There’s also another part of the team: non-tech people. Developers need to be in touch with customer support people, and with managers, informing them about the severity and the status of the situation, so the “front-facing” people would talk to the customers accordingly.

11. Security

This question is kinda obvious, so I won’t explain it in too much detail. In addition to generally avoid getting hacked, probably the most important thing is to secure the personal data of your users – both from other users in multi-tenant systems and from the outside world.

I recommend reading this article: How to Protect Your Laravel Web Application Against the OWASP Top 10 Security Risks

Also, I recommend trying to hack yourself. Yes, I’m not kidding – ask some trusted friend/company from the outside to break into your app and do some damage. Heck, even pay for that – there are companies specializing in this area. Of course, you could try to do it yourself, but, as the author of the code, you’re kinda biased, and you probably wouldn’t try something unusual as a typical hacker would.

Finally, I’d like to express my happiness about the fact that we don’t need to explain the need for an SSL certificate anymore: with browser warning changes, and with free tools like Let’s Encrypt, there’s no excuse to not have https:// in your website.

12. Docs for onboarding new devs

The final point in this big article is about people. If you work on the project not from its first day, remember the day when you were introduced to it. Do you remember the feeling of installing everything, reading the docs, playing around with testing data, trying to understand how things work?

Now, imagine the mind of a new developer doing that on the current project, which is not much more complex. So, you need to help those poor guys, as much as you can.

I would suggest to even become that “new developer” for a day. When was the last time you tried to install your application, from the ground up? On a new computer or re-installed OS, for example. So yeah, try that, you may get a few unpleasant “surprises” to fix.

Things like installation instructions in Readme (maybe even with Docker images), comments in the code, making the code “clickable” in the IDE, understandable messages in git commits – all of that should be taken care of. And, remember when we talked about factories and seeds? Yes, that applies here, massively.

By the way, there are tools to help you, like this Readme generator.

And it’s not only about totally new developers – the same may happen to any existing team member who needs to fix something in the module that they hadn’t seen before. Any help is appreciated.

Your Thoughts?

What do you think about these 12 questions? I tried to provide short comments and external links, but obviously, it’s just an overview. Would you add any more questions to this list? Or, maybe you have a particular question you want me to expand on, in future articles/videos? Shoot in the comments below.

Laravel News Links

Synchronize Tables on the Same Server with pt-table-sync

https://www.percona.com/blog/wp-content/uploads/2021/10/Synchronize-Tables-on-the-Same-MySQL-Server-300×157.pngSynchronize Tables on the Same MySQL Server

Synchronize Tables on the Same MySQL ServerIt is a common use case to synchronize data in two tables inside MySQL servers. This blog post describes one specific case: how to synchronize data between two different tables on the same MySQL server. This could be useful, for example, if you test DML query performance and do not want to affect production data. After few experiments, tables get out of sync and you may need to update the test one to continue working on improving your queries. There are other use cases when you may need to synchronize the content of the two different tables on the same server, and this blog will show you how to do it.

Table Content Synchronization

The industry-standard tool for table content synchronization – pt-table-sync – is designed to synchronize data between different MySQL servers and does not support bulk synchronization between two different databases on the same server yet. If you try it, you will receive an error message:

$ pt-table-sync D=db1 D=db2 --execute --no-check-slave
You specified a database but not a table in D=db1.  Are you trying to sync only tables in the 'db1' database?  If so, use '--databases db1' instead.

However, it is possible to synchronize two individual tables on the same server by providing table names as DSN parameters:

$ pt-table-sync D=db1,t=foo D=db2,t=foo --execute --verbose
# Syncing D=db2,t=foo
# DELETE REPLACE INSERT UPDATE ALGORITHM START    END      EXIT DATABASE.TABLE
#      0       0      5      0 GroupBy   03:24:26 03:24:26 2    db1.foo

You may even synchronize two tables in the same database:

$ pt-table-sync D=db2,t=foo D=db2,t=bar --execute --verbose
# Syncing D=db2,t=bar
# DELETE REPLACE INSERT UPDATE ALGORITHM START    END      EXIT DATABASE.TABLE
#      0       0      5      0 GroupBy   03:25:34 03:25:34 2    db2.foo

We can use this feature to perform bulk synchronization.

First, we need to prepare a list of tables we want to synchronize:

$ mysql --skip-column-names -se "SHOW TABLES IN db2" > db1-db2.sync

$ cat db1-db2.sync
bar
baz
foo

Then we can invoke the tool as follows:

$ for i in `cat db1-db2.sync`; do pt-table-sync D=db1,t=$i D=db2,t=$i --execute --verbose; done
# Syncing D=db2,t=bar
# DELETE REPLACE INSERT UPDATE ALGORITHM START    END      EXIT DATABASE.TABLE
#      0       0      0      0 GroupBy   03:31:52 03:31:52 0    db1.bar
# Syncing D=db2,t=baz
# DELETE REPLACE INSERT UPDATE ALGORITHM START    END      EXIT DATABASE.TABLE
#      0       0      5      0 GroupBy   03:31:52 03:31:52 2    db1.baz
# Syncing D=db2,t=foo
# DELETE REPLACE INSERT UPDATE ALGORITHM START    END      EXIT DATABASE.TABLE
#      0       0      0      0 GroupBy   03:31:52 03:31:52 0    db1.foo

If you have multiple database pairs to sync, you can agree on the file name and parse it before looping through table names. For example, if you use pattern

SOURCE_DATABASE-TARGET_DATABASE.sync

  you can use the following loop:

$ for tbls in `ls *.sync`
>   do dbs=`basename -s .sync $tbls`
>   source=${dbs%-*}
>   target=${dbs##*-}
>   for i in `cat $tbls`
>     do pt-table-sync D=$source,t=$i D=$target,t=$i --execute --verbose 
>   done
> done
# Syncing D=cookbook_copy,t=limbs
# DELETE REPLACE INSERT UPDATE ALGORITHM START    END      EXIT DATABASE.TABLE
#      0       0      4      0 GroupBy   04:07:07 04:07:07 2    cookbook.limbs
# Syncing D=cookbook_copy,t=limbs_myisam
# DELETE REPLACE INSERT UPDATE ALGORITHM START    END      EXIT DATABASE.TABLE
#      5       0      5      0 GroupBy   04:07:08 04:07:08 2    cookbook.limbs_myisam
# Syncing D=db2,t=bar
# DELETE REPLACE INSERT UPDATE ALGORITHM START    END      EXIT DATABASE.TABLE
#      0       0      5      0 GroupBy   04:07:08 04:07:08 2    db1.bar
# Syncing D=db2,t=baz
# DELETE REPLACE INSERT UPDATE ALGORITHM START    END      EXIT DATABASE.TABLE
#      5       0      5      0 GroupBy   04:07:08 04:07:08 2    db1.baz
# Syncing D=db2,t=foo
# DELETE REPLACE INSERT UPDATE ALGORITHM START    END      EXIT DATABASE.TABLE
#      5       0      0      0 GroupBy   04:07:08 04:07:08 2    db1.foo

Note that

pt-table-sync

synchronizes only tables that exist in both databases. It does not create tables that do not exist in the target database and does not remove those that do not exist in the source database. If your schema could be out of sync, you need to synchronize it first.

I used option

--verbose

in all my examples, so you can see what the tool is doing. If you omit this option the tool still is able to synchronize tables on the same server.

Complete the 2021 Percona Open Source Data Management Software Survey

Have Your Say!

Planet MySQL

A Picture from History: St. Valentine’s Day Massacre

https://www.pewpewtactical.com/wp-content/uploads/2021/09/2.-Al-Capone.jpeg

In 1929, alcohol was an illegal item throughout the United States.

But a thriving bootleg liquor business sprang up underground.

And in Chicago, nobody had as much influence in the trade as gangster Al Capone.

Al Capone
Al Capone

For Capone, business boomed. He pulled in roughly $85 million per year in 1920’s money — close to $1.3 billion today.  

There was only one problem…Bugs Moran.

Bugs Moran

Bugs Moran
Bugs Moran

Moran’s attempts at moving into the liquor business aggravated Capone’s South Side Gang, who wanted to operate throughout Chicago, not just a section of the city.

Capone wasn’t happy…and Moran was about to make him even less so.

Location of Saint Valentines Day Masascre
Map of Chicago

Aside from attempting to assassinate Capone’s friend and mentor, Johnny Torrio, Bugs also sent hitmen after Capone.

John Torrio
John Torrio

But Moran took it further, targeting Capone’s chief hitman, “Machine Gun” Jack McGurn.

Jack McGurn
Jack McGurn

Bad blood built between the two and it culminated on Valentine’s Day 1929.

The Last Valentine’s Day

February 14, 1929 — seven of Maron’s men waited in a North Side garage for a shipment of bootlegged Canadian whiskey.

A police car pulled up with four men stepping out – two wearing police uniforms.

The police ordered Maron’s men up against a nearby wall, shoulder to shoulder. Thinking it was nothing more than a police raid, Bugs’ men complied.

Reenactment of the St. Valentine's Day Massacre.
Reenactment of the St. Valentine’s Day Massacre. (Photo: Chicago History Museum)

It would be the last thing they’d do.

Shots rang out from two Thompson submachine guns and a shotgun.

By the time the dust settled, all seven of the men laid dead on the ground.

Valentines Day Massacre Tommy Guns
The two Tommy guns used in the St. Valentine’s Day Massacre now reside in Berrien County, Michigan. (Photo: Chriss Lyon via Block Club Chicago)

Chicago Mourned

Public outcry was swift for what became known as the St. Valentine’s Day Massacre.

It proved to be a nightmare for Capone.

Before the shooting, he was seen as something of the common man’s hero — fighting against the system’s injustice.

St Valentines Day Masascre Brick
Saint Valentine’s Day Massacre brick displayed at the National Museum of Crime & Punishment, Washington, D.C. (Photo: David via WikiCommons)

But after, Capone became a violent criminal in the public’s eye. In short, it was a public relations disaster.

Furthermore, the massacre brought down the entire strength of the federal government on Capone’s head.

Capone was in Miami during the shooting, but the blame instantly fell to him. (Though the case technically remains unsolved.)

Al Capone
Al Capone

Valentine’s Day 1929 brought Capone into the limelight, and investigators seized the opportunity to lock him away.

The famed gangster was later sentenced to 11 years in federal prison for tax evasion.

This is a new style of article for Pew Pew Tactical; if you liked it — let us know in the comments! If you didn’t enjoy it…well phooey. To catch up on previous Pictures from History, click on over to our History Category.

The post A Picture from History: St. Valentine’s Day Massacre appeared first on Pew Pew Tactical.

Pew Pew Tactical

The 10 ‘Seinfeld’ Episodes to Watch If You’ve Never Seen It Before (Not That There’s Anything Wrong With That)

https://i.kinja-img.com/gawker-media/image/upload/c_fill,f_auto,fl_progressive,g_center,h_675,pg_1,q_80,w_1200/2f487958a272d040a2052a218d833fcf.png

Graphic: Elena Scotti (Photos: Getty Images)

More than 30 years ago, Larry David and Jerry Seinfeld brought an impressive innovation to the TV sitcom: Protagonists who are uniformly terrible people.

Sure, Married… with Children’s deplorable Bundys had been on air for a couple of years, but that series was on Fox—then a small upstart network—and an explicit parody of family sitcom tropes, while Seinfeld was, at least on the surface, a more traditionally structured show. It was also in the big leagues, airing on NBC, and the terribleness of its central characters was a lot more subtle: Jerry, George, Elaine, and Kramer made us love them while also reflecting some of our worst flaws, overreacting to small slights and petty annoyances in all the horrible ways we’d probably like to, if we thought we could get away with it.

After a rocky start in the ratings, it broke out in a big salad way, and was a ratings monsters through the remainder of its nine-season run. It has remained a favorite in reruns (and, more recently, on streaming services) ever since—thanks in no small part to an all-time great cast. Its even darker spiritual sequel, Curb Your Enthusiasm (which featured a whole season revolving around a fictional Seinfeld reunion special) is still going strong. Oh, and Seinfeld’s coming to Netflix starting Oct. 1—the streaming giant having paid some $500 million to grab the rights away from rival Hulu—so you’ll be able to while away your fall visiting or revisiting the gang.

Maybe you’ve never watched the show, and are feeling left out of this particular pop culture moment, or maybe it has just been a couple decades and you need a refresher. If you don’t want to immediately dig into 180 episodes, you can take a representative sample and totally get the gist (not hard when the show is about nothing, am I right?). Like a lot of TV, this show peaked somewhere in the middle seasons, and despite some minor plot continuity and a few running gags, there’s no need to start at the beginning.

This isn’t a “best of” list. Rather, these are 10 episodes that represent the things that Seinfeld did particularly well—including a couple with iconic punchlines and catchphrases that will get you in with the cool crowd, circa 1995.

Lifehacker

How the Bark to Make Cork is Harvested from Cork Oak Trees

https://s3files.core77.com/blog/images/1212461_81_110177_xEfTPsELF.jpg

Nearly every task you can perform on a tree, whether it’s cutting it down, de-limbing it or stripping the bark, can be done by a machine. Indeed they often require one.

However, one tree-borne task for a specific type of tree resists automation and can still only be performed by humans using hand tools . That task is stripping the bark from a cork oak tree, for the purpose of turning it into cork. The bark has to be removed cleanly, so as to avoid damaging the tree; the bark will regenerate, but it will be another nine years before one can harvest it again. If you’re too heavy with the axe, you risk leaving a gash in the tree beneath the bark, which then becomes an entrance for insects who will destroy the valuable cash crop.

Here’s a look at the process in Portugal, the world’s largest producer of cork. And while it might seem like fun to cleanly peel a tree, the work and conditions look absolutely grueling:

When I watch stuff like this, I can’t believe I ever just tossed a cork in the garbage.

Core77