Kategorien
Symfony

Symfony Logging Verzeichnis anpassen

Um das Verzeichnis, in dem die Logs von Symfony gespeichert werden, zu ändern, kann man die Konfigurationsoption kernel.logs_dir verwenden. Diese Option definiert standardmäßig das Verzeichnis var/log.

Um das Log-Verzeichnis zu ändern, kann man den folgenden Code in der Konfigurationsdatei hinzufügen:

parameters:
    kernel.logs_dir: '/foo/log'

In diesem Beispiel wird das Verzeichnis /foo/log als Log-Verzeichnis verwendet.

Wenn man kernel.logs_dir in der config/services.yaml überschreibt, fügt man den oben genannten Code in den parameters-Abschnitt der Konfigurationsdatei ein.

Nach der Änderung von kernel.logs_dir muss man den Cache löschen, damit die Änderungen wirksam werden:

php bin/console cache:clear

Kategorien
Angular

Angular Test HTML Code der Komponente ausgeben

Der HTML Code kann ausgegeben werden mit:

console.log(fixture.debugElement.nativeElement.innerHTML);
Kategorien
JavaScript

Chrome remote debugging funktioniert nicht mehr mit Intellij IDE

Bei mir reicht es die Datei zu löschen:

C:\Users\MY_USER\AppData\Roaming\JetBrains\PhpStorm2022.2\options\other.xml

Dann PhpStorm/Webstorm neustartne und es läuft wieder.

Kategorien
Uncategorized Webdeveloper Tools

Bilder mit in einem iPhone Rahmen darstellen

Folgenden kostenlosen Service habe ich verwendet um einen Screenshot aufzuwerten:

https://mockuphone.com

Damit kann man einfach Scrrenshots in Tablets oder Handys mocken, wie z.B.:

Kategorien
Angular

Angular Change Detection für Array Input

Die Change Detection von Angular wird immer ausgeführt bei einem Array Input, wenn sich die Referenz des Arrays ändert, aber nicht der Inhalt:

console.log([1] === [1]); // ergibt false

In Angular kann man die Change Detection beeinflussen, indem man die Strategie der Change Detection für eine Komponente ändert. Eine der Strategien ist die „OnPush“-Strategie, bei der die Change Detection nur dann ausgelöst wird, wenn sich die Eingangsparameter einer Komponente ändern oder wenn ein Ereignis aufgerufen wird.

Um sicherzustellen, dass die Change Detection nur ausgeführt wird, wenn das Input-Array geändert wurde, können Sie den OnPush-Strategie für die Komponente verwenden und eine Überwachungsfunktion für das Input-Array hinzufügen, die nur dann ausgelöst wird, wenn sich die Werte des Arrays ändern.

Hier ist ein Beispiel einer solchen Komponente:

import { Component, Input, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core';

@Component({
  selector: 'app-example',
  template: '...',
  changeDetection: ChangeDetectionStrategy.OnPush
})
export class ExampleComponent {
  @Input() items: any[] = [];

  constructor(private cd: ChangeDetectorRef) { }

  ngOnChanges(changes: any) {
    if (changes.items && !this.arrayEquals(changes.items.previousValue, changes.items.currentValue)) {
      this.cd.markForCheck();
    }
  }

  private arrayEquals(a: any[], b: any[]): boolean {
    return JSON.stringify(a) == JSON.stringify(a);
  }
}

Somit wird die Komponente nur neu gerendert, wenn sich an dem Items Array wirklich etwas ändert und nicht nur die Referenz.

Kategorien
Symfony

Symfony mögliche Konfigurationsparameter anzeigen

Um eine alle möglichen Config Parameter eines Packetes anzuzeigen, kann man folgenden Konsolenbefehl verwenden:

php bin/console config:dump-reference doctrine_migrations

Ausgabe:

# Default configuration for extension with alias: "doctrine_migrations"
doctrine_migrations:

    # A list of namespace/path pairs where to look for migrations.
    migrations_paths:

        # Prototype
        namespace:            ~

    # A set of services to pass to the underlying doctrine/migrations library, allowing to change its behaviour.
    services:

        # Prototype
        service:              ~

    # A set of callables to pass to the underlying doctrine/migrations library as services, allowing to change its behaviour.
    factories:

        # Prototype
        factory:              ~

    # Storage to use for migration status metadata.
    storage:

        # The default metadata storage, implemented as a table in the database.
        table_storage:
            table_name:           null
            version_column_name:  null
            version_column_length: null
            executed_at_column_name: null
            execution_time_column_name: null

    # A list of migrations to load in addition to the one discovered via "migrations_paths".
    migrations:           []

    # Connection name to use for the migrations database.
    connection:           null

    # Entity manager name to use for the migrations database (available when doctrine/orm is installed).
    em:                   null

    # Run all migrations in a transaction.
    all_or_nothing:       false

    # Adds an extra check in the generated migrations to allow execution only on the same platform as they were initially generated on.
    check_database_platform: true

    # Custom template path for generated migration classes.
    custom_template:      null

    # Organize migrations mode. Possible values are: "BY_YEAR", "BY_YEAR_AND_MONTH", false
    organize_migrations:  false

    # Use profiler to calculate and visualize migration status.
    enable_profiler:      false

    # Whether or not to wrap migrations in a single transaction.
    transactional:        true
Kategorien
PHP

composer ohne Memory Limit ausführen

COMPOSER_MEMORY_LIMIT=-1 composer update
Kategorien
Docker

Mehrere Befehle mit docker ausführen

Es gibt mehrere Möglichkeiten, mehrere Befehle mit Docker Compose auszuführen. Hier sind ein paar Beispiele:

  1. Verwenden Sie das && Zeichen, um mehrere Befehle in einer einzigen Zeile auszuführen:
docker-compose exec <service-name> <command1> &amp;&amp; <command2> &amp;&amp; <command3>
  1. Verwenden Sie ein Semikolon, um mehrere Befehle in einer einzigen Zeile auszuführen
docker-compose exec <service-name> <command1>; <command2>; <command3>
  1. Erstellen Sie eine Bash-Skript-Datei mit mehreren Befehlen und führen Sie die Datei mit dem Befehl sh aus:
docker-compose exec <service-name> sh <script-file>
  1. Verwenden Sie eine Bash-Eingabeaufforderung, um mehrere Befehle auszuführen.




Nachdem Sie sich in die Bash-Eingabeaufforderung eingeloggt haben, können Sie mehrere Befehle eingeben und ausführen.

Wenn Sie sich mit einem bestimmten Benutzer anmelden möchten und mehrere Befehle ausführen möchten, können Sie auch den Befehl su verwenden, um den Benutzer zu wechseln, bevor Sie die Befehle ausführen, so wie ich es in meiner vorherigen Antwort erwähnt habe.

docker-compose exec <service-name> su -c "<command1> &amp;&amp; <command2> &amp;&amp; <command3>" <username>

Wichtig ist dass, je nachdem welche Art von Befehlen Sie ausführen, bestimmte Bedingungen erfüllt sein müssen und es auch darauf ankommt ob diese Befehle in einer einzigen Zeile oder in mehreren Zeilen ausgeführt werden sollen.

Kategorien
Docker

Verbinden mit einem Docker Container unter einem bestimmten User

Um sich mit einem bestimmten Benutzer in einen Docker-Container zu verbinden, können Sie den Befehl docker exec verwenden. Der Befehl hat folgendes Format:

docker exec -it [container_name_or_id] [command]

Der Parameter -i sorgt dafür, dass die Standardeingabe (stdin) an die angegebene Befehlszeile gebunden wird, während der Parameter -t dafür sorgt, dass ein pseudo-Terminal erstellt wird. Der container_name_or_id entspricht der ID oder dem Namen des Containers, mit dem Sie sich verbinden möchten. Der command ist der Befehl, den Sie ausführen möchten, wenn Sie sich mit dem Container verbunden haben.

Um sich beispielsweise mit dem Benutzer „testuser“ in einen Container mit dem Namen „mycontainer“ zu verbinden und eine Bash-Sitzung zu starten, würden Sie den folgenden Befehl verwenden:

docker exec -it mycontainer bash -c 'su - testuser'

Beachten Sie, dass Sie nur dann in einen Container als bestimmter Benutzer verbinden können, wenn der Benutzer auch tatsächlich in dem Container vorhanden ist.

Verwendung von docker-compose

Wenn Sie Docker Compose verwenden, können Sie den Befehl docker-compose exec verwenden, um sich mit einem bestimmten Benutzer in einen Container zu verbinden. Der Befehl hat folgendes Format:

Der service_name ist der Name des Dienstes, der in der Compose-Datei definiert ist, mit dem Sie sich verbinden möchten. Der command ist der Befehl, den Sie ausführen möchten, wenn Sie sich mit dem Container verbunden haben.

Um beispielsweise mit dem Benutzer „testuser“ in einen Dienst mit dem Namen „web“ zu verbinden und eine Bash-Sitzung zu starten, würden Sie den folgenden Befehl verwenden:

docker-compose exec web bash -c 'su - testuser'

Wie bereits erwähnt, beachten Sie, dass Sie nur dann in einen Container als bestimmter Benutzer verbinden können, wenn der Benutzer auch tatsächlich in dem Container vorhanden ist.

Kategorien
Uncategorized

Review: Google Pixel 7 Pro

Ich habe das Google Pixel 7 Pro vor kurzem gekauft und bin sehr zufrieden mit dem Smartphone. Es läuft sehr flüssig und sieht auch gut aus. Die abgerundete Bauweise macht es angenehm in der Hand und das Curved Display ist kaum noch vorhanden, was ich bevorzuge.

Die Software des Pixel 7 Pro gefällt mir auch sehr gut. Die Benutzeroberfläche ist benutzerfreundlich und intuitiv und bietet auch einige Personalisierungsmöglichkeiten.

Die Kamera des Pixel 7 Pro ist auch sehr gut. Der Zoom bei 10x ist klar und scharf und der Zoom bei 30x ist auch gut. Die Selfie-Kamera macht auch schöne Bilder.

Insgesamt bin ich sehr zufrieden mit dem Pixel 7 Pro und würde es jedem empfehlen, der nach einem hochwertigen und leistungsstarken Smartphone sucht. Der Preis ist zwar etwas hoch, aber ich denke, dass das Smartphone den Preis wert ist.