A History of Perfection: TFB’s Definitive Guide to all Glock Generations

A History of Perfection: TFB’s Definitive Guide to all Glock Generations


The popular phrase “there’s always room for improvement” rings true no matter what industry you’re in. Even for venerated manufacturers such as Smith & Wesson, SIG Sauer, and Glock, there are always tiny steps here and there that are taken to improve their product. Today we’ll be taking a look at the various Glock generations and explore what improvements (or setbacks) were made to the popular line of polymer Austrian pistols over the years.

A History of Perfection: TFB's Definitive Guide to all Glock Generations

A History of Perfection: TFB’s Definitive Guide to all Glock Generations

Glock Generation 1 – 1982

By 1984 Glock was still operating out of just a single building in Deutsch Wagram, Austria. Gaston Glock and 3 employees were hard at work making consumer goods and by the late 70’s even some military hardware. Specifically, the FM 78 Field Knife and machine-gun belt links were at the forefront of their product catalog by the 80s.

A History of Perfection: TFB's Definitive Guide to all Glock Pistol Generations

A History of Perfection: TFB’s Definitive Guide to all Glock Generations – The Original Glock Headquarters

The Glock 17 was the first pistol to come to market after nearly 3 years of development within Glock headquarters. The result of this design process was the semi-automatic polymer-framed Safe Action Glock 17 9mm pistol. The pistol was very bare-bones at this point but proved to be functional and reliable and these qualities gave it much favor with various military and police departments across the globe.

A History of Perfection: TFB's Definitive Guide to all Glock Pistol Generations

A History of Perfection: TFB’s Definitive Guide to all Glock Generations – Photo Credit: Glock

The design of the Glock 17 Gen 1 was simple. There was no accessory rail, the magazine release was minuscule and the grip texturing wrapped fully around the entire pistols grip. The grip pattern used on the Gen 1 pistol frames used a “pebble finish” and had no finger grooves.

Early Glock Gen1 pistols made use of a much thinner bore wall than later generations with the early barrels being referred to as “pencil barrels.” These pistols were produced between 1982 and 1986 and featured serial number prefixes “AF” through “AM”.

A History of Perfection: TFB's Definitive Guide to all Glock Pistol Generations

A History of Perfection: TFB’s Definitive Guide to all Glock Generations

The last notable feature about the Gen 1 Glock pistols was the pistol cases. Early Glock pistols were shipped in the iconic “Tupperware” boxes but Gen 1 Glocks produced and sold in Austria shipped with the case preformed for ammunition storage with these compartments later being removed for importation into the United States. The Generation 1 Glock pistols were produced until 1988 when the Gen 2 Glocks started to make their first appearance.

Glock Generation 2 – 1988

Up until 1988 Glock produced only the Glock 17 model. With the 2nd generation of pistols making their debut in 1988, Glock also released the new Glock 19 – a pistol that would go on to be arguably the most iconic product of the brand. In fact, Hop over on TFBTV argues that the Glock 19 Gen 2 is the greatest generation of Glock to have ever existed.

Gen 2 Glocks saw only minor improvements, some of which were only prompted by pressure from the ATF. For example, Glock had to include a steel serial number plate in order to comply with the BATFE’s regulations (Subpart C—FIREARMS TITLE 27). Other improvements were made to the magazine floorplate and magazine follower spring for improved performance. Glock Gen 2 also holds a special place in my heart as being the pistol heavily featured in the Half-Life series of first-person shooter games.

A History of Perfection: TFB's Definitive Guide to all Glock Pistol Generations

By 1991 Glock had also made revisions to the grip texturing by adding a checkering pattern to the front and rear instead of just on the sides as they had first been released in 1988. These grip modifications gave the user more purchase on the gun in all conditions. In addition to modifications to the grip design, Glock also introduced several calibers including .40 S&W, 10mm Auto, .380 ACP, and .45 ACP.

A History of Perfection: TFB's Definitive Guide to all Glock Pistol Generations

A History of Perfection: TFB’s Definitive Guide to all Glock Generations

In 1995 Glock also introduced the Glock 26 and Glock 27 – the first subcompact pistols made by Glock. These could be considered the first guns that targeted the consumer market rather than the police and military markets.

Glock Generation 3 – 1998

Glock Gen 3 pistols remain to this day some of the most popular handguns on the market. They have been in production for 20 years and are still being produced today and are available for sale. Gen 3 saw the addition of two new calibers (.45 GAP and .357 SIG) and a new feature – an accessory rail. The Universal Glock Rail allowed wielders of the pistols to mount lights and lasers to the gun for added utility.

A History of Perfection: TFB's Definitive Guide to all Glock Pistol Generations

A History of Perfection: TFB’s Definitive Guide to all Glock Generations

Other improvements were the addition of a thumb shelf on both sides of the pistol to accommodate both left and right-handed shooters. By far the most contentious addition to the Gen 3 Glocks were the finger grooves. Many people, myself included, disliked the finger groves. For me, they gave the otherwise smooth lined pistol an odd feeling and awkwardly spaced out your fingers if they didn’t fit exactly inside the groves. However, not everyone disliked them and I supposed that is why the pistols are still being made to this day – someone is buying them.

A History of Perfection: TFB's Definitive Guide to all Glock Pistol Generations

The raised extractor indicating the chamber has a round in it.

Gen 3 also added a life-extending cross pin to the rear of the trigger pin which reduced the stress encountered by the locking block when firing the pistol – this improvement leads to longer service life for the pistol. The last major functional improvement to the Gen 3 Glocks was the addition of an extractor which also served as a loaded chamber indicator. When the pistol had a round in the chamber, the extractor would stick up slightly from the frame giving you a visual indicator that the pistol was hot.

A History of Perfection: TFB's Definitive Guide to all Glock Pistol Generations

Before the start of Glock Gen 4 the Glock 22, 21, 31, 32, and 19 were all being offered in Glock’s new RTF2 (Rough Textured Finish) which had fish-scale style rear slide serrations and a new stippling pattern. These pistols were only offered for a limited time and are no longer being produced.

Glock Generation 4 – 2010

Gen 4 Glocks saw the first dimensional differences to the pistol which to date had been largely identical across generations. The addition of user-serviceable backstraps allowed the user to change both the beavertail and grip of the frame by swapping out Glock Modular Backstraps. The new frames’ base grips were also slightly smaller than previous generations

A History of Perfection: TFB's Definitive Guide to all Glock Pistol Generations

A History of Perfection: TFB’s Definitive Guide to all Glock Generations

A welcome improvement to Generation 4 was the larger magazine catch/release which was nearly tripled in size and was now reversible for both left and right-handed shooters. There was a minor drawback when it was first introduced as the current generation magazines had issues when the magazine catch was moved to the right side (for left-handed shooting). This problem was later corrected with the introduction of a new generation of magazines designed to circumvent this problem.

A History of Perfection: TFB's Definitive Guide to all Glock Pistol Generations

A History of Perfection: TFB’s Definitive Guide to all Glock Generations – A Glock Slimline G42 Pistol

The Generation 4 Glocks featured a new dual recoil spring which reduced the recoil felt when shooting and also had the benefit of reducing wear and tear on the gun. Alongside these improvements, two new single-stack “Slimline” pistols were introduced as part of generation 4 in 2014 and 2015. The Glock 42 .380 ACP pistol and the much favored Glock 43 9mm pistol were introduced as subcompact single stack pistols.

Glock Generation 5 – 2017

The newest numbered generation of Glocks made its debut at SHOT Show 2017 and to date has only released a handful of pistols. The current lineup includes only the 17, 19, 26, 34 MOS, 17 MOS, and 19 MOS pistols. The MOS pistols share a unique optics mounting plate for the addition of a micro red dot – something that spilled its way over into the United States Military Modular Handgun System competition.

A History of Perfection: TFB's Definitive Guide to all Glock Pistol Generations

A History of Perfection: TFB’s Definitive Guide to all Glock Generations

Both the Glock 47 and 45 have since been added to the list of offerings with both being used by United States Customs and Border Patrol agents as their new duty weapon. However, more than just combinations of the already existing slide and frame sized were being added. Gen 5 also saw the addition of a flared magazine well, trigger guard relief cuts for a higher grip as well the first major changes to the internal components.

A History of Perfection: TFB's Definitive Guide to all Glock Generations

A History of Perfection: TFB’s Definitive Guide to all Glock Generations

The internal workings of Glock pistols had more or less remained unchanged since the Gen 1 Glock was introduced, however, the Gen 5 saw the removal of the cross pin that would normally be above the trigger guard. Glock also replaced the standard barrel with a Glock Marksman barrel for all Gen 5 Glocks and lastly, the outer coating is a newer nDLC coating. I’m not personally a fan of this newer coating as I much prefer the Tennifer ferritic nitrocarburizing that has been around and lasted throughout the decades on previous generations of Glocks.

A History of Perfection: TFB’s Definitive Guide to all Glock Generations – The flared magazine well of a Glock Gen 5

Glock Sliver Slimline Era – 2019

The Slimline series of Glocks were released in early 2019 and made waves when they were revealed to the public. The Glock 48 and 43X were both single-stack 10 round capacity pistols using the Glock Slim 01 magazines. Not quite a Glock 19 but also not a Glock 43 and having features from the last three generations of Glocks makes these pistols almost a generation of their own.

A History of Perfection: TFB's Definitive Guide to all Glock Generations

A History of Perfection: TFB’s Definitive Guide to all Glock Generations

One thing that sets the 43X and 48 (as well as the 43 and 42) is the unique firing pin and striker. All four of the pistols share the same striker and firing pin and these components are not compatible with any other generation of Glock pistol. Furthermore, the Slimline pistols nixed the finger groves from the Gen 3’s as well as the modular backstraps from Gen 4 and Gen 5 but at the same time add their own flair with an increase single-stack magazine capacity, a silver PVD finish and forward slide serrations.

A History of Perfection: TFB's Definitive Guide to all Glock Pistol Generations

A History of Perfection: TFB’s Definitive Guide to all Glock Generations

Regardless of where these Silver Slimline pistols fit they are no longer being produced as they have been replaced by the more traditional all-black models which carry the same features but lack the non-reflective PVD coating. By far these Slimline Glocks have to be my favorite generation of pistols.

More to Come?

Glock continues to make improvements to their long line of pistols and is even branching out into new territory with the recently released Glock 44 22LR pistol. I would expect Generation 5 Glocks to continue for quite a while until we start seeing any signs of Gen 6 Glocks and by then who knows what we will see happen to the popular polymer pistol brand. What is your favorite generation and model of Glock and why? Let us know down in the comments!

A History of Perfection: TFB's Definitive Guide to all Glock Pistol Generations

Thanks to TFBTV’s Hop for some of the photos used in this article

We are committed to finding, researching, and recommending the best products. We earn commissions from purchases you make using the retail links in our product reviews.

Learn more about how this works



via The Firearm Blog https://ift.tt/2JX8W99

May 27, 2020 at 08:01PM

He’s Been Generating Free Power for 16 Years Using a Water Wheel

He’s Been Generating Free Power for 16 Years Using a Water Wheel


Way back in ancient times, or maybe about 4 years ago, I posted here about a homemade water wheel power generator built by a guy in Kentucky. He used a vehicle alternator, some bicycle parts, and some old vehicle batteries to generate power to help him run things off-grid. Pretty cool… but not quite as cool as a guy who repurposed an old washing machine and uses it to power his home and workshop!

Here’s what he says about it:

I’ve been living off grid for the past 16 years, I make my own electricity using an old washing machine I found at the dump.

I rewired the smart-drive washing machine motor to generate electricity, the generator is rotated via a water-driven Pelton Wheel (Hydro Turbine).

Water goes into the intake, creates pressure due to the difference in height between intake and outlet nozzle. Water comes out of the nozzle at 60 psi and spins the pelton wheel which is attached to the modified washing machine motor (now a generator).

The generator puts out 3 phase AC voltage which is passed through a 3 phase diode block rectifier to change it into DC, it is then fed directly into a 24v DC battery bank. A 24-240v AC inverter is connected to the battery bank, 240v AC travels up the power lines to my house. I can now power all my 240v AC household appliances from the inverter.

It makes enough power to heat my water and run all the appliances in my energy-efficient house as well as most of the tools in my shed.

Occasionally I have issues with it and need to go down to the stream to problem-solve, a small price to pay to avoid paying a power bill.

His title says “16 years,” but early in the video he says — twice — that he built this generator 6 years ago. Turns out he’s been generating his own power for 16 years, but this particular setup has only been in operation for 6. Late in the video, he shows some of his earlier attempts at power generation.

Warning: the camera work isn’t great and some viewers may find it nauseating.

In the video, he says he’s doing a yearly checkup on the system, having gotten a low-voltage alarm at his house. The system was only putting out 300 of the usual 600 watts. After a quick check at the unit, he strolls up the creek to check the intake.

He stops along the way to chat about some old trees, but finally makes it to his water intake, where he starts digging in the stony creek bed without any explanation. Afterward, he explains his crude-but-effective water filtration system.

He got all his pipe second-hand for about $400, and the most expensive part of his system was the wire to run power from the generator to his house; he said that ran him about $2,000 — but it would have cost $14,000 for him to connect to a power grid and start paying a monthly power bill, so he definitely made the better choice.

As far as maintenance, this filter cleaning is usually only needed about once a year and he says the motor that’s acting as a generator needs new bearings every 2 years.

Pretty sweet setup, all things considered.

The post He’s Been Generating Free Power for 16 Years Using a Water Wheel appeared first on AllOutdoor.com.


via All Outdoor https://ift.tt/2yaNKUu

May 26, 2020 at 03:33PM

Keeping Warm With The 5.11 Aggressor Parka – Review

Keeping Warm With The 5.11 Aggressor Parka – Review


Keeping Warm With The 5.11 Aggressor Parka
Keeping Warm With The 5.11 Aggressor Parka

U.S.A.-(Ammoland.com)-This winter was an interesting time to be a gun owner and 2A advocate in Virginia. The liberal majority in the state legislature led by Bloomberg’s pawn, Governor Ralph “Black Face” Northam, decided to enact Draconian gun laws across the Commonwealth.

The people of Virginia stood up for their rights and rallied through the cold winter weather against tyrannical gun laws. Being a journalist and a gun owner, meant I had to attend these pro-freedom events and brave the winter elements. Lucky for me, 5.11 offered me their Aggressor Parka to keep me warm while standing up for my rights by the side of other liberty-minded individuals.

5.11 Aggressor Parka

5.11 Aggressor Parka
5.11 Aggressor Parka

The company is well known for its duty ready gear, and the 5.11 Aggressor Parka is no exception to their mission. 5.11 based its parka on its popular 3-in-1 Patrol Jacket that many people in law enforcement use daily. The difference is that the Aggressor Parka is better suited for off duty use than the Patrol Jacket. The difference in situations doesn’t mean that the Aggressor Parka is any less functional than the Patrol Jacket. It is just a little more discrete and doesn’t scream “cop.”

The 5.11 Aggressor Parka comes in two different colors. I got my coat in “Tundra,” which is an olive drab green color. Wearers can also get the jacket in “Coyote,” which is a tan color. I wish 5.11 offered the Aggressor Parka in black. That is my most significant criticism of the jacket. Almost all my winter coats are black. It probably has to do with my OCD, but I was able to deal with a green jacket. I am not sure why the company chose only to provide the coat in two colors. I think 5.11 could increase its sales if the company offered the parka in other colors.

One of the reasons why I like the Aggressor Parka is that the wearer can use it in various weather conditions. During my time with the coat, I wore it while snowboarding in freezing temperatures, in the rain, and during the early spring. In every situation, the parka worked well for me.

The first thing I noticed with the 5.11 Aggressor Parka is how much the coat weighs. It is heavy. I mean, it is cumbersome. I have worn a lot of heavy jackets in the past, but this one is the heaviest coat I have ever owned. My wife picked it up and asked me if I left my gun in the coat. It isn’t unmanageable, but the weight is noticeable.

Virginia might be in the mid-Atlantic region of the east coast, but during the winter it can get cold and does drop below zero then a week later it could warm up into the 50s. That is what makes this Parka great. The wearer of the parka can remove inner fleece leaving a breathable outer shell for when the weather is a little warmer.

During Lobby Day in Richmond last January, I wore this jacket all day, and my upper body never felt cold. The other people that I attended the rally with were in other brands of coats, and they froze their asses off. The 5.11 Aggressor Parka, along with the camaraderie of the other gun owners, did a great job keeping me warm that day.

5.11 Aggressor Parka
The wearer of the parka can remove inner fleece leaving a breathable outer shell for when the weather is a little warmer.

A month later, I attended and spoke at the “For the Love of Country” pro-gun rally outside DC. That day turned out to be the coldest day of the year in Virginia. It was freezing and extremely windy. My legs were cold as hell. My hands were ice, and my face was numb. The cold would have been unbearable if it wasn’t for the 5.11 Aggressor Parka. Although my legs, face, and hands were ice cubes, the coat kept my mid-section nice and toasty. It did its job.

I also wore the Aggressor Parka in the rain. A lot of parkas claim to be water-resistant, but after an hour of being in the elements, the rain ends up soaking the wearer. I took the 5.11 coat on a snowboarding trip to test out the waterproof quality of the parka. I am not the best snowboarder (or even average), so I don’t stay too dry. Couple my snowboarding skills with snow tubing I did with my family, and I got soaked from head to toe.

Even though the rain-soaked 5.11 Aggressor Parka on the outside, my t-shirt stayed dry, and I stayed warm. I also wore this coat in the soaking rain and snow in New York. I spend a lot of time in the Empire State, which gave me an excellent opportunity to test out the parka in a harsher environment than the Virginia winter. It worked just as good for me in New York as it did in my home state.

I think that is the real strength of the 5.11 Aggressor Parka. With the removable fleece, it is very versatile when it comes to multiple weather conditions. The fleece can be removed and reattached quickly. Another cool feature is the side zippers. When I took the parka snowboarding, I would get a little warm, and I didn’t want to take off the jacket to cool down. I was about to use the side zippers to open up the side of the jacket to let in the cold air I could cool down without having to move the coat.

It might sound crazy to rave about, but the zippers that 5.11 chose to use on the Aggressor Parka are very high quality. They used YKK zippers. The zipper is an area where a lot of companies skimp out on using in their designs. A bad zipper can make a great coat unusable.

5.11 included plenty of pocket room in the Aggressor Parka. By my count, 5.11 included nine separate pockets. Two of the pockets were on the inside and the rest on the outside. I usually kept my cell phone on in the inside zipper pocket, and there was plenty of room.

The parka also included the 5.11 “Ready Pocket.” These pockets are massive. I was able to store my full-size notebook in the pocket easily. For someone who has to carry anything like a notebook, then this is a great jacket.

Overall, I was happy with the 5.11 Aggressor Parka. I wish it were a little lighter, but it does its job admirably. The price point of $249 isn’t too bad for what you get. The Aggressor Parka does go on sale from time to time for $199. At that price, I think it is a steal!

Check out 5.11 at www.511tactical.com.

About John CrumpJohn Crump

John is a NRA instructor and a constitutional activist. He is the former CEO of Veritas Firearms, LLC and is the co-host of The Patriot News Podcast which can be found at www.blogtalkradio.com/patriotnews. John has written extensively on the patriot movement including 3%’ers, Oath Keepers, and Militias. In addition to the Patriot movement, John has written about firearms, interviewed people of all walks of life, and on the Constitution. John lives in Northern Virginia with his wife and sons and is currently working on a book on leftist deplatforming methods and can be followed on Twitter at @crumpyss, on Facebook at realjohncrump, or at www.crumpy.com.

The post Keeping Warm With The 5.11 Aggressor Parka – Review appeared first on AmmoLand.com.


via AmmoLand.com https://ift.tt/2okaFKE

May 27, 2020 at 02:34PM

Spatie Multitenancy Package for Laravel

Spatie Multitenancy Package for Laravel


Spatie Multitenancy Package for Laravel

Multitenancy is a hot topic for web developers that need to support multiple clients with the same codebase, but need to keep data separate either via table prefixes or separate databases.

In the Laravel space, Spatie released a new offering recently with an unopinionated multitenancy package to make apps tenant-aware:

According to Freek Van der Herten’s introductory post, the “philosophy of the package is that it should only provide the bare essentials to enable multitenancy.”

This package takes care of a few things related to tenancy for you:

  1. Tracking which tenant is the current tenant.
  2. Dynamically change the configuration when changing a tenant.
  3. Tools to help with creating a new tenant database and running migrations on multiple tenants.

We’ll only touch lightly on the package; the best place to get started is reading the laravel-multitenancy documenation.

Tenant Model

At the core of the package is the Tenant model, which represents each available tenant. You can work with and access the current tenant with a few handy methods provided by the package:

use Spatie\Multitenancy\Models\Tenant; // Get the current tenant, or null if there is no current tenant Tenant::current() // Get the same thing via the container app('currentTenant'); // Determine if there is a current tenant Tenant::checkCurrent() // Setting a tenant instance as the current tenant $tenant->makeCurrent(); // Forget the current tenant Tenant::forgetCurrent(); 

Finding Tenants

After installing the Spatie multitenancy package, you have a tenants database table that will include a row for each tenant in the application. Part of the job of Spatie’s package is determining which tenant should be used to serve the current request, typically based on a domain name. Out of the box, the package provides a DomainTenantFinder class to look up a tenant and set it as the current. However, you can configure a custom finder as long as it extends the abstract TenantFinder class.

Other considerations you need when finding a current tenant include the NeedsTenant middleware for setting the current tenant based on the incoming request and the global EnsureValidTenantSession middleware to prevent users from a given tenant to access other tenants.

Tenant-Aware Console and Queues

Another challenge when implementing multi-tenancy is scoping console commands and queue jobs. By default, all queue jobs are tenant-aware, and you can disable that capability via configuration. Spatie’s package provides a TenantAware and NotTenantAware to make specific queue jobs aware of which tenant to run for any custom needs.

Another thing you’ll likely need is the ability to run a console command for each tenant or target a specific tenant. This package has you covered with the tenants:artisan command:

# Run migrate on each tenant php artisan tenants:artisan migrate # Run migrate on a specific tenant with args php artisan tenants:artisan "migrate --seed" --tenant=123 

Learn More

You can learn more about this package, get full installation instructions, and view the source code on GitHub at spatie/laravel-multitenancy.

I’d also recommend reading Freek’s post which goes into more in-depth details and reasons for making this package.

Filed in: News


via Laravel News https://ift.tt/14pzU0d

May 26, 2020 at 09:02AM

Review: Synology DS-1618+ network attached storage device is the best kind of overkill for most

Review: Synology DS-1618+ network attached storage device is the best kind of overkill for most


More people than ever are working from home, and local-area network storage needs aren’t going down. Don’t cheap out on a low-end network storage device, and get the Synology DS-1618+ to set you up for the future.

If you have one computer, with one user, doing one task, then the storage space you have or can easily add externally is probably sufficient. But as computers, users, or tasks multiply, so does storage. Add in any kind of large file storage need, like accumulation of videos, and it can get out of hand quickly.

Sure, you can keep adding external drives through RAID enclosures like we have, but that can get unwieldy if you have a lot of data and that’s aggravated by multiple users or computers. Cataloging what’s on which drive can be a pain too.

We’ve said it before — we like home servers, and we like the Mac mini for that task. But we also like network attached storage devices (NAS), a device we can sit in the corner, and just let it serve files.

But, it’s all too easy to buy a network attached storage device that doesn’t have enough power for the future, and have to re-buy. This increases cost, and potentially induces a migration nightmare.

Buy what you need from the start of the project. Get something like Synology’s DS-1618+ — which we’ve been using for some time now.

Set and forget

The DS-1618 is plain. It is a black box, specifically designed to sit unobtrusively in a (well ventilated) area of an office. You don’t really want this to be in your office near your workstation or a bedroom with an office space because of noise — but more on that in a bit.

The unit gives the user six bays to add 3.5-inch hard drives, or 2.5-inch SSDs too — but we recommend the former for cost and data density reasons. If this isn’t sufficient, two DX517 expansion chassis can be installed and easily added to the existing RAID through the pair of eSATA ports on the back of the unit.

The DS-1618+ has three USB 3.1 type A connections for expansion, or to back up the entire RAID, assuming you have a large enough external array to hold the contents of the NAS. If you’re so inclined, you can connect a powered USB-A hub to any of these ports for backup or other expansion. And, if you need to, you can connect a USB-only printer to the Synology to turn it into a network printer.

Ports on the rear of a Synology DS-1618+ network attached storage device

Networking is provided by four Gigabit Ethernet ports, with the unit having support link aggregation — in essence, with some routers, you can use all four ports to increase incoming and outgoing bandwidth. But, this can get expensive, as only some routers support it. Besides, in the home office or small business set up with the unit having hard drives, this is overkill.

Extra expansion possibilities are opened up by a PCI-E x4 expansion slot. You can’t just jam any old PCI-E card in there, but Synology does have a list of compatible cards that give the unit things like 10-gig Ethernet, fiberoptic networking cards, SSD caching for faster random access to things like databases, and the like.

Most users won’t need to use this slot for anything. But, it is a good inclusion for the future. The Mac mini has a 10-gig Ethernet option, and the iMac Pro and Mac Pro have it by default. Routers and network switches capable of the speed are coming down in price, and in the next few years, they will become more ubiquitous.

The whole package is powered by an Intel Atom C3538 CPU, with 4GB DDR4 RAM standard. RAM is expandable to 32GB with two SO-DIMM RAM slots on the underneath of the machine. More on this, and why and when you’d want more RAM in a network peripheral in a bit, though.

Loading a hard drive into a Synology DS-1618+ network attached storage device

The chassis is metal and well-engineered. Drive trays are tool-less, beyond the key that’s included in the system to pop the tray out.

Two plastic rails hold a drive firmly in place in the mostly-metal tray. The tray then slides in, and with the level lock on the tray, there is no doubt that you’ve made a good mechanical connection to the SATA drive connector in the NAS itself.

Drive tray assembled and ready to get installed

But, in operation and under load, we’d like it to be a little quieter. Under full I/O and CPU load, the unit doesn’t vibrate, but between fan noise and drive noise, it hits 61 dBa at three feet from the enclosure.

It is replete with LEDs and incredibly blinky when in use. This is expected, given that it has up to six hard drives, and is important to be able to see at a glance if everything is functioning okay. But again, you probably don’t want it physically near your workstation.

Setting up the Synology DS-1618+

Setup is about the easiest we’ve ever seen for a network attached storage device. The first step is to load up the device with drives. Synology makes it easy to see in advance how much storage you’re going to get from the unit with a tool where you can virtually load it up and see what you get — and we highly recommend fiddling with this before you buy drives.

Drive slots interior to the Synology DS-1618+

Synology has a list of recommended drives for the unit, and as a general rule, we do recommend adhering to those. That said, in the courses of our testing, we’ve used an assortment of drive sizes and manufacturers, and found that heat and data transfer consistency changes little.

Synology also has an online tool so you can see what you’re getting into for DSM software setup before you really get going. After you’ve taken a look at that, and following the drive installation, plug it into power, and use Safari or other browsers to go to find.synology.com.

Synology DS-1618+ loaded with drives

This loads up the configuration page for the device, lets you set up an administrative user, and format the drives in the unit. Synology and AppleInsider recommends Synology Hybrid RAID for flexibility. It also supports RAID 0, RAID 1, RAID 5, RAID 6, RAID 10, RAID 50, RAID 60 in hardware — but the drive requirements for each are left as an exercise for the reader.

After formatting, the interface has you configure the basics of file sharing. Using a URL that Synology provides that the NAS itself keeps up to date with your internet-facing IP address, you can also access your files and some of your services outside of your home network, all secured by encryption and password.

We have seen some probing from the Internet, looking for a Synology. The basic security is robust, assuming you’re using best practices for user and password selection. And, this is enhanced by notifications — the DSM will block IP addresses that hammer on the NAS looking for access automatically, and it will email you that it has done so, if you’ve configured it appropriately.

Under the basic configuration of DSM, file sharing is basic SMB — but this can be tailored to a ridiculous extent. Not only can you add additional services like SFTP, BitTorrent, and the like, times of file availability can be selected, you can lock down specific folders with a password, and you can prevent certain folders from being seen by a user at all.

Synology’s DSM also allows for full-drive AES 256-bit encryption without a large amount of performance loss. But if you do this, don’t then use the machine for anything that needs any notable processing horsepower. You can upgrade the RAM, but you can’t upgrade the processor.

The use of the device goes so much deeper than this, though.

What do I want a network attached storage device for, anyway?

Beyond just serving files, a network attached storage device like the Synology DS-1618+ has an expandable ecosystem, very similar to Apple’s App Store. Software can be added to extend the usability of the device — and you can even install Windows on it.

Synology settings page in Safari — your gateway to installing packages and configuring the unit

For most Apple Mac and iPad users, the most usability beyond SMB file sharing will come from an integrated iTunes sharing package, which is easily configured through the web-based interface. Additionally, it can be set up as network Time Machine targets, even for Macs running macOS El Capitan and older with AFP services.

Other software available for the unit include a Plex server, built-in DLNA video streaming, and integration with Dropbox and other cloud-based storage services.

Regarding that video streaming, though — if you use the iTunes server, all of your videos and music need to be encoded properly for iTunes. Basically, you’re front-loading all the processor work that needs to be done for a video, and keeping that work off the NAS itself.

Services like Plex will transcode just about any media format on the NAS prior to streaming, but this takes some effort from the hardware. This is commonly where lesser NAS devices fall down.

In our testing, we consistently can stream three 1080P videos simultaneously with no dropped frames. But, it will only realistically manage one 4K stream, and the enclosure’s fans are very, very loud during the process.

The DS-1618+ also comes with a two-user license for IP-based cameras, to use the unit as the core of a network-based surveillance system. Up to 40 cameras are supported, at additional cost.

As you add services and load, that 4GB of RAM in the unit is consumed very rapidly. It uses virtual memory like every other modern computer does, but as that footprint increases, performance drops. We didn’t run into this when running a Time Machine backup, an iTunes server, and regular file service. When we added a Plex server, we started seeing some performance hits even before we started streaming anything.

So, if you’re going basic, 4GB is probably enough. But, if you plan on running a lot of services, get more RAM. We put 16GB in our unit and didn’t hit any more performance issues induced by low RAM.

DS-1618+ transfer speeds

The Synology 1618+ will saturate your home network, if you let it. With six 7200 RPM drives installed in the NAS, when copying 20GB of large files, we saw 110.1 megabytes per second read, and 109.1 megabytes per second write speeds. The impact of smaller files varies, but when copying 20GB of MP3 files across the network, we saw that same 110 megabytes per second read, but 81 megabytes per second write.

This changes when using 10-gig Ethernet through a Netgear XS505M switch, and to a Mac mini with that 10-gig option. Using that setup, we got about 400 megabytes per second read on big and small files, and 390 megabytes per second write of large files, and 220 megabytes per second write on the MP3 folder.

Buy what you need for tomorrow, not today

The DS-1618+ is not inexpensive. It is Mac mini-priced, if you’re looking to stay inside the Apple ecosystem for your server needs.

From a price perspective, you’re looking at $799 for either the DS-1618+ or the Mac mini on the low-end, assuming you’re using the 2018 Mac mini. Drive prices vary, depending on what you pick up, but $100 per 4TB isn’t an unrealistic estimation. On top of that, for the Mac mini, you’re looking at $200-ish for a USB 3.2 type C enclosure with the limited macOS software RAID options, and much more if you want hardware RAID support — unless you just want four drives in individual enclosures laying about.

From a performance standpoint, that Mac mini home server is more flexible overall, and more powerful. However, it is also more expensive when you consider those additional expenses, and in some respects, not as easy to set up for network services. And, that PCI-E slot for expansion of the NAS is nice.

In a home with low network storage needs or an office that sees a basic need but isn’t sure where to jump in, the Synology DS-1618+ is overkill. But, as you start adding things like media serving and the like, plus the inevitable creep of what you offload onto a NAS once you get started, the unit is a cost-effective way to get a powerful storage solution not just for now, but for the future as well.

Importantly, though, don’t get complacent with backup. It is far too easy to get a NAS in your office and consider yourself safe. A single-facility failure, say, an office fire, will still wipe out all of your data, if you don’t have some sort of off-site backup.

There are certainly cheaper network attached storage units, but they are easy to outgrow. The 1618+ is an excellent, and expandable, starting point.

  • Power to price ratio is excellent
  • Excellent expandability
  • Software configuration more than just about anybody needs
  • Loud and bright
  • Expansion chassis for more drives are expensive
  • Similar in price to a Mac mini

Where to buy

The Synology DS-1618+ sells for $749 at your choice of retailers, including Amazon, B&H and Adorama.


via AppleInsider https://ift.tt/3dGGYcl

May 25, 2020 at 06:34PM

Raw Combat Footage Shows Strafing A-10 Warthog Save Ground Troops

Raw Combat Footage Shows Strafing A-10 Warthog Save Ground Troops


Raw Combat Footage Shows Strafing A-10 Warthog Save Ground Troops

a-10 thunderbolt II warthog cannon

By Staff Sgt. Steve Thurow – A-10 Thunderbolt II, Public Domain, Link

By Travis Smola

When soldiers in our armed forces need air support, they welcome the sound of an A-10 Thunderbolt II, AKA the A-10 Warthog. This awesome plane and her pilots have been in service since 1972, despite repeated efforts over the years to kill it.

The Warthog is a favorite of pilots and troops alike because of its ability to support soldiers on the ground. It’s been called a gun with a plane that was built around it because of the devastating 30mm autocannon in the nose can fire armor-piercing depleted uranium shells at up to 3,900 rounds a minute.

That’s a lot of firepower to the rescue when ground troops are in a pinch. In the video below, a convoy comes under heavy attack when the A-10 comes to their rescue. [NSFW: there’s some harsh language in the video.]

You can hear the relief in the voices of these soldiers at the distinctive sound of the A-10’s cannon pounding the enemy position.

The sound of the A-10 is intense. The rounds hit the ground before you hear the BRRRR buzzing sound of those 30mm cannons. There’s a common saying: “If you hear an A-10 shooting, you weren’t the plane’s intended target.” Imagine the psychological effect this plane must have on anyone on the receiving end of its fire.

A-10 Lightningbolt GAU-8 cannon

By USAF – nationalmuseum.af.mil, Public Domain, Link

Seeing raw combat footage like this reminds us that the movies aren’t accurate when it comes to portraying how things often play out in real life on the battlefield. It just makes us even more thankful for the dangerous job performed by our brave service men and women in uniform.


via The Truth About Guns https://ift.tt/1TozHfp

May 23, 2020 at 04:00PM

Push deploy a Laravel app for free with GitHub Actions

Push deploy a Laravel app for free with GitHub Actions


Push deploy a Laravel app for free with GitHub Actions

For many teams, it makes sense to use services like Ploi or Forge. They provision servers for you, configure push deploys, deal with backups, and many other things.

You can also use a Platform-as-a-Service like Heroku. PaaS is close to serverless in the sense that you don’t think about servers, but the primary difference between PaaS and serverless is that serverless scales automatically, whereas PaaS merely hides the fact that there are servers to deal with. And — speaking of serverless — you can, of course, use a service like Laravel Vapor and get push deploys.

However, if configuring servers is something you’re used to, you might be interested only in the push to deploy part of these services. And as such, you might not want to pay for the services above only to use a single feature.

Luckily, configuring push deploys is super easy to do yourself — and free! — if you’re using GitHub. Specifically, we’re going to be using GitHub Actions.


This article assumes you know how to configure webservers, and as such it will only guide you through configuring Continuous Deployment part — not the actual webservers.

  1. A configured webserver running PHP
  2. A GitHub repository

The git setup

  • Some public/ assets are in .gitignore, but are built on GitHub
  • master branch is used for development
  • production is pushed and deployed
  • deploy is created by the Action, by taking production and adding a commit with the built assets

So the code flows like this: master --> production --> deploy.

A few notes

We compile front-end assets inside the GitHub Actions — not your computer, nor your server. This means that you don’t have to run npm locally to deploy, and that the server’s downtime is as short as possible.

We run tests locally, not in the CI Action. The reason for this is to allow you to deploy hotfixes even if they break some tests. If you want to run tests inside the Action, then simply look up some GitHub Actions phpunit workflow and copy the necessary steps. You can use this example.

1. Server deployment script

Add this bash script to your repository, and name it server_deploy.sh.

This script will be executed on the server to pull and deploy the code from GitHub.

#!/bin/sh set -e echo "Deploying application ..." # Enter maintenance mode (php artisan down --message 'The app is being (quickly!) updated. Please try again in a minute.') || true # Update codebase git fetch origin deploy git reset --hard origin/deploy # Install dependencies based on lock file composer install --no-interaction --prefer-dist --optimize-autoloader # Migrate database php artisan migrate --force # Note: If you're using queue workers, this is the place to restart them. # ... # Clear cache php artisan optimize # Reload PHP to update opcache echo "" | sudo -S service php7.4-fpm reload # Exit maintenance mode php artisan up echo "Application deployed!" 

The process explained:

  1. We’re putting the application into maintenance mode and showing a sensible message to the users.
  2. We’re fetching the deploy branch and hard resetting the local branch to the fetched version.
  3. We’re updating composer dependencies based on the lock file. Make sure your composer.lock file is in your repository, and not part of your .gitignore. It makes sure the production environment uses the exact same version of packages as your local environment.
  4. We’re running database migrations.
  5. We’re updating Laravel & php-fpm caches. If you’re not using PHP 7.4, change the version in that command.
  6. We’re putting the server back up.

Note that the server is always on the deploy branch. Also note that we’re putting the server down for the shortest duration possible — only for the composer install, migrations and cache updating. The app needs to go down to avoid requests coming in when the codebase and database are not in sync — it would be irresponsible to simply run those commands without putting the server into maintenance mode first.

And a final note, the reason we’re wrapping the php artisan down command in (...) || true is that deployments sometimes go wrong. And the down command exits with 1 if the application is already down, which would make it impossible to deploy fixes after the previous deployment errored halfway through.

2. Local deployment script

This script is used in your local environment when you want to deploy to production. Ideally, if you work in a team, you’ll also have a CI Action running phpunit as a safeguard for pull requests targeting the production branch. For inspiration, see the link to the Action example in the How it works section above and make it run on pull_request only.

Store the local deployment script as deploy.sh:

#!/bin/sh set -e vendor/bin/phpunit (git push) || true git checkout production git merge master git push origin production git checkout master 

This script is simpler. We’re running tests, pushing changes (if we have not pushed yet; it’s assumed we’re on master), switching to production, merging changes from master and pushing production. Then we switch back to master.

3. The GitHub Action

Store this as .github/workflows/main.yml

name: CD on: push: branches: [ production ] jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 with: token: $ - name: Set up Node uses: actions/setup-node@v1 with: node-version: '12.x' - run: npm install - run: npm run production - name: Commit built assets run: | git config --local user.email "action@github.com" git config --local user.name "GitHub Action" git checkout -B deploy git add -f public/ git commit -m "Build front-end assets" git push -f origin deploy - name: Deploy to production uses: appleboy/ssh-action@master with: username: YOUR USERNAME GOES HERE host: YOUR SERVER'S HOSTNAME GOES HERE password: $ script: 'cd /var/www/html && ./server_deploy.sh' 


  1. We set up Node.
  2. We build the front-end assets.
  3. We force-checkout to deploy and commit the assets. The deploy branch is temporary and only holds the code deployed on the server. It doesn’t have a linear history — the asset compilation is never part of the production branch history — which is why we always have to force checkout that branch.
  4. We force-push the deploy branch to origin.
  5. We connect to the server via SSH and execute server_deploy.sh in the webserver root.

Note that you need to store two secrets in the repository:

  1. a Personal Access Token for a GitHub account with write access to the repository
  2. the SSH password

If you want to use SSH keys instead of usernames & passwords, see the documentation for the SSH action.


With all this set up, install your Laravel application into /var/www/html and checkout the deploy branch. If it doesn’t exist yet, you can do git checkout production && git checkout -b deploy to create it.

For all subsequent deploys all you need to do is run this command from the master branch in your local environment:


Or, you can merge into production. But know that it will not run tests unless you configure the action for that, as mentioned above.

Performance and robustness

This approach is robust since it makes it impossible for a request to be processed when the codebase and database are out of sync — thanks to artisan down.

And it’s also very fast, with the least amount of things happening on the server — only the necessary steps — which results in minimal downtime.

See how this action runs:

The Action running on GitHub and successfully deploying an application.

The Deploy to production step took only 13 seconds, and the period when the application was down is actually shorter than that — part of the 13 seconds is GitHub setting up the appleboy/ssh-action action template (before actually touching your server). So usually, the application would be down for less than 10 seconds.

Filed in: News


via Laravel News https://ift.tt/14pzU0d

May 22, 2020 at 12:23PM

How To Upload Multiple Files In PHP?

How To Upload Multiple Files In PHP?


Hello Friends! In this article you will learn how to upload multiple files in PHP.

This article covers

  1. HTML File Upload Page
  2. Database Design To Store The Image Names
  3. Database Connection In PHP
  4. Rearrange Files Data When Form Submitted
  5. Simple Multiple File Upload
  6. File Upload With Validation

NOTE: I have added the complete code in GitHub repository. You can find it here Multiple File Upload


Basic knowledge of PHP, HTML & I hope you already know how to do file upload if not then refer this article

How To Uploads Files In PHP?

How To Upload Image In PHP?

1) HTML File Upload Page

The following is the basic HTML code for multiple file uploads make sure you have enctype="multipart/form-data" in form tag,  product_images[] is an array in input type=file tag & multiple must be added to input element.

In the following example I would like to upload multiple product images, this might not be the realistic example but hope it servers for your understanding.

<form action="store_product.php" method="post" enctype="multipart/form-data"> <div> <label for="product_images">Select Product</label> <br> <!-- Basically you get the product list from database. For the sake of demonstration I am hard coding --> <select name="product_id" id="product_id"> <option value="1">Product 1</option> <option value="2">Product 2</option> </select> </div> <br> <div> <label for="product_images">Product Images</label> <br> <input type="file" name="product_images[]" id="product_images" multiple> </div> <br> <div> <input type="submit" value="Upload Product Images"> </div> </form> 

2) Database Design To Store Product & It’s Image Names

NOTE: I would like to store the images/files in disk ie., specific path and not in my database. By saving the images or any files as BLOB in database will increase the complexity, consumes lot of space & even reduces the efficiency of CRUD operations.

Following is the simple design of the products & product_images table inside invoice database.

/** Creating database with name invoice */ CREATE DATABASE `invoice`; /** Once we create we want to switch to invoice so that we can add products table */ USE `invoice`; /** Products table to hold the products data */ CREATE TABLE `products` ( `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, `name` VARCHAR(30), `product_invoice` VARCHAR(255), PRIMARY KEY (`id`) ); /** Product Images */ CREATE TABLE `product_images` ( id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, product_id INT(11) UNSIGNED NOT NULL, product_image VARCHAR(100) NOT NULL, PRIMARY KEY (`id`), FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) ); 

For the sake of demonstration I have the following 2 rows inside products table

INSERT INTO `products` (`id`, `name`, `product_image`) VALUES (1, 'Product 1', '98767461589180160d435607145066fc9c3b5069d336f11a9.jpg'), (2, 'Product 2', '61545675589180160d435607145066fc9c3b5069d336f11a9.jpg'); 

3) Database Connection In PHP

The following is the code to connect to the database which we created above. I am using PDO connection, which is very advanced than mysql or mysqli functions.

<?php $host = 'localhost'; $db_name = 'invoice'; $db_username = 'root'; $db_password = 'root'; $dsn = 'mysql:host='. $host .';dbname='. $db_name; $options = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, ]; try { /** $pdo is the connection object which I will be using for all my datbase operations */ $pdo = new PDO($dsn, $db_username, $db_password); } catch (PDOException $e) { exit($e->getMessage()); } 

4) Rearrange Files Data When Form Submitted

Once you fill the form and submit you will get somewhat similar to the following output.


Lets debug the form uploaded

echo '<pre>'; print_r($_FILES['product_images']); exit; 


Array ( [name] => Array ( [0] => tempro1991266572.png [1] => tempro1913737454.png ) [type] => Array ( [0] => image/png [1] => image/png ) [tmp_name] => Array ( [0] => /Applications/MAMP/tmp/php/php70g7x1 [1] => /Applications/MAMP/tmp/php/phppHPzVH ) [error] => Array ( [0] => 0 [1] => 0 ) [size] => Array ( [0] => 874 [1] => 880 ) ) 

Since looping into them and parsing might be difficult lets format the above. In the below code I am just looping the files and just arranging based on keys ie name, tmp_name etc.

function rearrange_files($files) { $file_array = []; foreach ($files as $file_key => $file) { foreach ($file as $index => $file_value) { $file_array[$index][$file_key] = $file_value; } } return $file_array; } 

Using the above function we will get the rearranged files as follows

Array ( [0] => Array ( [name] => tempro1991266572.png [type] => image/png [tmp_name] => /Applications/MAMP/tmp/php/php3YrETt [error] => 0 [size] => 874 ) [1] => Array ( [name] => tempro1913737454.png [type] => image/png [tmp_name] => /Applications/MAMP/tmp/php/phpm1vF67 [error] => 0 [size] => 880 ) ) 

Ah! This looks clean, very understandable and more easy to work on.

5) Simple Multiple File Upload

Now lets add the bits and pieces to make the basic multiple form upload work

<?php session_start(); require_once 'db.php'; function rearrange_files($files) { /** above I have added function code **/ } if ($_SERVER['REQUEST_METHOD'] == 'POST') { /** array variable to hold errors */ $errors = []; $product_id = $_POST['product_id']; $product_images = $_FILES['product_images']; /** Add form validation */ if (empty($product_images)) { $errors[] = 'Product invoice file required'; } if (empty($product_id)) { $errors[] = 'Select product you want to add image'; } /** Check if the product exists in your database */ $product_stmt = $pdo->prepare(" SELECT id, name FROM `products` WHERE id = :product_id "); $product_stmt->execute([ ':product_id' => $product_id, ]); $product = $product_stmt->fetchObject(); if (!$product) { $errors[] = 'Selected product does not exist!'; } /** If there are any form errors then redirect back */ if (count($errors) > 0) { $_SESSION['errors'] = $errors; header('Location: index.php'); } /** $_FILES will have the upload file details in PHP */ $arranged_files = rearrange_files($_FILES['product_images']); foreach ($arranged_files as $product_image) { /** I am using pathinfo to fetch the details of the PHP File */ $file_name = $product_image['name']; $file_size = $product_image['size']; $file_tmp = $product_image['tmp_name']; $pathinfo = pathinfo($file_name); $extension = $pathinfo['extension']; $file_extensions = ['pdf', 'xls', 'jpeg', 'jpg', 'png', 'svg', 'webp']; /** Since I want to rename the File I need its extension * which will be obtained with above $phpinfo variable * */ /** generate random inage name */ $new_file_name = rand(0, 10000000).time().md5(time()).'.'.$extension; move_uploaded_file($file_tmp, './uploads/product_images/'. $new_file_name); $product_image = $pdo->prepare(" INSERT INTO `product_images` (`product_id`, `product_image`) VALUES (:product_id, :product_image) ") ->execute([ ':product_id' => $product->id, ':product_image' => $new_file_name, ]); } $_SESSION['success'] = 'Products added successfully'; header('location: index.php'); exit; } else { header('location: index.php'); exit; } 

6) File Upload With Validation

In the above code the validation is not added for all the files while doing upload we can perform simple validation as follows

/** File strict validations */ /** File exists */ if (!file_exists($file_tmp)) { $errors[] = 'File your trying to upload not exists'; } /** Check if the was uploaded only */ if (!is_uploaded_file($file_tmp)) { $errors[] = 'File not uploaded properly'; } /** Check for the file size 1024 * 1024 is 1 MB & 1024 KB */ if ($file_size > (1024 * 1024)) { $errors[] = 'Uploaded file is greater than 1MB'; } /** Check File extensions */ if (!in_array($extension, $file_extensions)) { $errors[] = 'File allowed extensions '. implode(', ', $file_extensions); } if (count($errors) > 0) { $_SESSION['errors'] = $errors; header('location: index.php'); exit; } 

The simple validation can be performed within foreach loop as shown below

foreach ($arranged_files as $product_image) { /** The above validation code */ } 


Hope you got some idea on upload multiple files in PHP.


You might be interest to learn more on composer please find my whole article on it

How To Upload Image In PHP?

How To Uploads Files In PHP?

How To Install Packages Parallel For Faster Development In Composer

What Is Composer? How Does It Work? Useful Composer Commands And Usage

composer.json v/s composer.lock

Composer Install v/s Composer Update

Route Model Binding In Laravel & Change Default Column id To Another Column

How To Run Raw Queries Securely In Laravel

Laravel 7.x Multiple Database Connections, Migrations, Relationships & Querying

How To Install Apache Web Server On Ubuntu 20.04 / Linux & Manage It

How To Create / Save / Download PDF From Blade Template In PHP Laravel

How To Add Free SSL Certificate In cPanel With ZeroSSL & Certbot

How To Securely SSH Your Server & Push Files With FileZilla

How To Push Files To CPanel / Remote Server using FTP Software FileZilla

How To Install Linux, Apache, MYSQL, PHP (LAMP Stack) on Ubuntu

How To Cache Static Files With NGINX Server

Redirect www to a non-www website or vice versa

How To Create Free SSL Certificate With Lets Encrypt/Certbot In Linux (Single / Multiple Domains)

How To Install Linux, NGINX, MYSQL, PHP (LEMP Stack) on Ubuntu

PHP Built-In Web Server & Testing Your Development Project In Mobile Without Any Software

How To Do Google reCAPTCHA Integration In PHP Laravel Forms

Happy Coding 🙂


via Laravel News Links https://ift.tt/2dvygAJ

May 21, 2020 at 04:09PM

How Motorsport Tires Are Made

How Motorsport Tires Are Made


How Motorsport Tires Are Made


Everyday car tires are made mostly by machine, but the high-end tires used for racing are made by hand. In this clip from Street FX Motorsport TV, they take us inside Michelin Motorsport’s HQ in France for a look at the tire-making process, building up layer by layer of rubber, textiles, steel, and adhesive on spinning drums.


via The Awesomer https://theawesomer.com

May 20, 2020 at 09:30AM