Weird Airplane Experiments

https://theawesomer.com/photos/2023/12/weird_airplanes_peter_sripol_t.jpg

Weird Airplane Experiments

Link

Peter Sripol is no stranger to making unusual aircraft. In this video, he builds and tests out three weird designs for airworthiness, including a plane with a fuselage made from springs, a propeller that works like a tank tread, and a ridiculous set of wings that resemble Venetian blinds.

The Awesomer

Full-text search with Laravel and Meilisearch

https://blog.meilisearch.com/content/images/size/w1200/2023/11/laravel_meili_test.jpg

In this guide, we will see how to use the search functionality in Laravel 10. We’ll start with by introducing the benefits of full-text search. Then, we’ll walk you through setting up full-text search in your Laravel application.

Why use full-text search?

In traditional SQL or NoSQL databases, queries find results exactly matching given criteria. Conversely, full-text search queries can match some or all of a text query with the database’s content. So essentially, full-text search can provide results even in case of partial matches.

When building user-facing search interfaces, full-text search is empowering for users. Tolerance to typos, prefix search, and synonyms help them get results more quickly. It improves discoverability when users do not know what they’re looking for.

How to use search functionality in Laravel 10?

Installing Laravel Scout

Laravel comes with out-of-the-box full-text search capabilities via Laravel Scout.

To enable it, navigate to your Laravel application directory and install Scout via the Composer package manager:

composer require laravel/scout

After installing Scout, you should publish the Scout configuration file. You can do this by running the following artisan command:

php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"

This command should create a new configuration file in your application directory: config/scout.php.

Configuring the Laravel Scout driver

Let’s configure Laravel Scout to use the Meilisearch driver. Meilisearch is an open-source search engine built in Rust. This will allow to get the best full-text search performance. Indeed, the database driver comes with limitations inherent to SQL databases.

First, install the dependencies required to use Scout with Meilisearch via Composer:

composer require meilisearch/meilisearch-php http-interop/http-factory-guzzle

Then, update the environment variables in your .env file:

SCOUT_DRIVER=meilisearch
# Use the host below if you're running Meilisearch via Laravel Sail
MEILISEARCH_HOST=http://meilisearch:7700
MEILISEARCH_KEY=masterKey

Laravel’s official Docker development environment, Laravel Sail, comes with a Meilisearch service out-of-the-box. Please note that when running Meilisearch via Sail, Meilisearch’s host is http://meilisearch:7700.

For production use cases, we recommend using a managed Meilisearch via Meilisearch Cloud. On Meilisearch Cloud, you can find your host URL in your project settings.

Making Eloquent models searchable

With Scout installed and configured, just add the Laravel\Scout\Searchable trait to your Eloquent models to make them searchable. This trait will use Laravel’s model observers to keep the data in your model in sync with Meilisearch.

Here’s an example model:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Laravel\Scout\Searchable;

class Contact extends Model
{
	use Searchable;
}

You can use the toSearchableArray method to configure which fields to store in Meilisearch. This notably enables storing a model and its relationships’ data in the same document.

The example below shows how to store a model’s relationships data in Meilisearch:

<?php

namespace App\Models;

use App\Models\Company;
use Laravel\Scout\Searchable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;

class Contact extends Model
{
    use Searchable;

    public function company(): BelongsTo
    {
        return $this->belongsTo(Company::class);
    }

    public function toSearchableArray(): array
    {
	    // All model attributes are made searchable
        $array = $this->toArray();

		// Then we add some additional fields
        $array['organization_id'] = $this->company->organization->id;
        $array['company_name'] = $this->company->name;
        $array['company_url'] = $this->company->url;

        return $array;
    }
}

Configuring filterable and sortable attributes

Meilisearch allows you to perform advanced filtering and sorting on your search results. Choose which attributes are filterable and sortable via your Meilisearch index settings.

Configure your Meilisearch index settings via the config/scout.php file:

<?php

use App\Models\Contact;

return [
	// additional configuration...
	
    'meilisearch' => [
        'host' => env('MEILISEARCH_HOST', 'http://localhost:7700'),
        'key' => env('MEILISEARCH_KEY'),
        'index-settings' => [
            Contact::class => [
                'filterableAttributes' => ['organization_id'],
                'sortableAttributes' => ['name', 'company_name']
            ],
        ],
    ],

The example above updates Meilisearch index settings for the Contact model:

  • it makes the organization_id field filterable
  • it makes the name and company_name fields sortable

Update your Meilisearch index settings by running the following Artisan command:

php artisan scout:sync-index-settings

Laravel full-text search example

We built a demo application to give you a feel of what full-text search looks like in a Laravel application. This demo showcases an app-wide search in a CRM (Customer Relationship Management) application.

CRM demo application build with Laravel
Laravel SaaS search demo

This demo application uses the following search features:

The code is open-sourced on Github. ????

???? Check out the repository: https://github.com/meilisearch/saas-demo


We hope this guide helped to understand the importance of full-text search and how to implement it with Laravel. For more information, read the Laravel Scout and Meilisearch docs.

Meilisearch is an open-source search engine with intuitive developer experience to build user-facing search. You can self-host it or get a premium experience with Meilisearch Cloud.

For more things Meilisearch, you can join the community on Discord or subscribe to the newsletter. You can learn more about the product by checking out the roadmap and participating in product discussions.

Laravel News Links

Announcing Laravel Pulse – A New Performance Monitoring Tool for Laravel Apps

https://picperf.io/https://laravelnews.s3.amazonaws.com/featured-images/pulse.jpg

Announcing Laravel Pulse - A New Performance Monitoring Tool for Laravel Apps

Laravel Pulse is a brand new free and open source performance monitoring and insights tool for Laravel applications. It was announced at Laracon AU 2023 by Jess Archer from the Laravel core team.

What is Laravel Pulse?

Laravel Pulse gives you an aggregate view of performance data for your Laravel app. It tracks metrics like:

  • System stats (CPU, memory, storage usage)
  • Application usage (requests, slow routes, jobs, etc)
  • Queue throughput
  • Slow jobs
  • Slow queries
  • Exceptions
  • Cache hits/misses
  • Outgoing request times

Pulse was designed specifically for Laravel and knows about all the core components like queues, events, mail, notifications, caching, and more.


It collects the minimal amount of data needed to display helpful insights. The data is saved locally so you maintain full control.

Laravel Pulse is self-hosted and works anywhere Laravel runs – VPS, Laravel Forge, Vapor, etc. It has a responsive UI with light and dark modes.

And best of all, it’s completely free and open source! Big thanks to Taylor Otwell for making this possible.

How Pulse Compares to Telescope

Some may be wondering how Pulse compares to Laravel Telescope, another debugging tool for Laravel.

Telescope is great for local development as it records extensive request data like all queries and events. But this high level of detail makes it less ideal for production.

Laravel Pulse provides high level aggregate data so it’s lean and production-ready. It won’t replace error trackers, but augments them nicely.

Interactive Live Demo

At Laracon AU, Jess Archer did an interactive live demo of Laravel Pulse using the audience’s phones!

The audience acted as flight admins for a fictional Acme Airlines app. They could perform actions like:

  • Sell tickets
  • Raise prices
  • Delay flights
  • Cancel flights

Meanwhile, Jess showed how Laravel Pulse tracked these actions in real-time on a dashboard.

Here’s a recap of some highlights:

Application Usage

The Application Usage card shows:

  • Top users by requests
  • Top users by slow endpoints
  • Top users queuing jobs

This gives insight into who is using your app and any performance issues they face.

Slow Routes

The Slow Routes card shows any application routes that exceed a configured threshold (1 second default).

It displays the route name and action method so you can pinpoint the slow code.

Slow Jobs

The Slow Jobs card is similar, displaying queued jobs exceeding a threshold. It shows the job class name and location.

Failed jobs that retry will increment the count each time so you can spot problem jobs.

Slow Queries

The Slow Queries card reveals queries over a threshold. It only shows the SQL without bindings so it:

  • Obfuscates PII
  • Aggregates identical queries into one result
  • Shows file location the query occurred

You can optionally disable locations to further aggregate results.

Exceptions

The Exceptions card tracks exceptions thrown including location, count, and last occurrence.

You can also sort by most recent exceptions.

Cache

The Cache card tracks cache key usage, along with hits and misses to the cache.

It will make no assumptions about your keys, but allows regrouping and rolling-up of collected data if you need a more generalised view of the data.

Outgoing Requests

Laravel’s HTTP client usage is tracked in Outgoing Requests. You can see slow external requests your app makes.

The demo used a regex in the config file to condense unique URLs into a generalised domain name, similar toe cache data.

Customizing Your Dashboard

The Pulse blade file can be published and customized. For example, you can:

  • Toggle full width mode
  • Adjust number of columns
  • Set card span and position
  • Break cards into individual sections

You can also create your own custom cards to display business-specific metrics. The demo included a "Flights" card showing tickets sold, revenue, delays, and top sellers.

Performance Considerations

Pulse collects minimal data and can handle heavy production workloads. Larave Forge runs it for 2 million requests/day with no sampling needed.

By default, Pulse saves request data to your database after the response is sent. Some options to scale:

  • Use a dedicated Pulse database
  • Redis ingest to queue and saved outside request cycle
  • Run Pulse on a separate server
  • Enable sampling for high traffic
  • Create custom data drivers

When Can We Use Pulse?

Laravel Pulse is expected to launch in the next week or so. It will be a composer require away. Stay tuned for the official release!

Conclusion

Laravel Pulse provides easy insights into your Laravel app’s performance and usage. Its customizability and minimal overhead makes it a great open source addition for any Laravel project.

Big thanks to the entire Laravel team for another amazing free tool for the community!


The post Announcing Laravel Pulse – A New Performance Monitoring Tool for Laravel Apps appeared first on Laravel News.

Join the Laravel Newsletter to get all the latest Laravel articles like this directly in your inbox.

Laravel News