Developer Blog

Tipps und Tricks für Entwickler und IT-Interessierte

Microsoft Word | Unbenutzte Formatierungen entfernen

Wie oft passiert es, dann man Text aus einer anderen Quelle kopiert (meist von Webseiten aus dem Internet) und in ein bestehendes oder neues Dokument einfügt. Und plötzlich sind eine Vielzahl von neuen Formatvorlagen vorhanden.

Viele davon werden dabei nicht einmal verwendet:

Um diese unnötigen Formatvorlagen zu entfernen kann man ein einfaches Makro verwenden:

In Word einfach ALT-F11 drücken (oder im Menu Entwicklertool auf Makros, und dann Bearbeiten)

In der Projektansicht sollten dann mindestens zwei Dokumente geöfnet sein:

  • die Formatvorlage Normal.dot
  • das aktuelle Dokument, das sie gerade bearbeiten

Sollten Sie das nachfolgende Makro als hilfreiche empfinde und auch in neuen Dokumenten verwenden wollen, dann speichern Sie es einfach in der Formatvorlage Normal.dot ab.

Erstellen Sie hierzu unter dem Ordner Module einfach ein neues Modul mit dem Namen Lib:

Ändern Sie dann den Namen auf Lib

Danach fügen Sie im Editor das nachfolgende Makro ein:

Public Sub DeleteUnusedStyles()
    Dim oStyle As Style

    For Each oStyle In ActiveDocument.Styles
        'Only check out non-built-in styles
        If oStyle.BuiltIn = False Then
            With ActiveDocument.Content.Find
                .ClearFormatting
                .Style = oStyle.NameLocal
                .Execute FindText:="", Format:=True
                If .Found = False Then
                    oStyle.Delete
                End If
            End With
        End If
    Next oStyle
End Sub

Jetzt können Sie das Makro jederzeit aufrufen über Entwicklertools / Makros / Ausführen

Laravel | Benutzermodel erweitern

Laravel bietet mit Eloquent ORM ein leistungsfähiges Datenbank-Framework.

Mit Hilfe von Modellen werden die Datenbankobjekte (z. B. Benutzer) definiert. Diese Objekte können dabei einfach durch zusätzliche Felder erweitert werden.

Im nachfolgenden Beispiel wollen wir das vorhandene Objekt User einer initialen Laravel-Installation durch ein Feld username erweitern.

Neues Feld den Benutzermodel hinzufügen

Erstellen eines Datenbank-Migrationsskriptes, das unser gewünschtes Feld zur Tabelle users hinzufügt.

php artisan make:migration add_column_username_to_users_table --table users

Hinzufügen des Felder Username in der neu erstellten Datei. Dies liegt unter database/migrations.

    public function up()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->string('username')->nullable();
        });
    }

    public function down()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->dropColumn('username');
        });
    }

Hinzufügen des Feldes Username im Datenbankmodel User in der Datei app\Models\User.php

    protected $fillable = [
        'name',
        'email',
        'password',
        'username'
    ];

Datenbank aktualisieren.

Dieser Schritt entfernt alle Tabellen und erstellt sie neu. Dadurch gehen natürlich alle bereits vorhandenen Daten verloren!

❯ php artisan migrate:fresh --seed
Dropped all tables successfully.
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table (2,326.47ms)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table (1,789.28ms)
Migrating: 2014_10_12_200000_add_two_factor_columns_to_users_table
Migrated:  2014_10_12_200000_add_two_factor_columns_to_users_table (1,010.74ms)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated:  2019_08_19_000000_create_failed_jobs_table (2,399.99ms)
Migrating: 2019_12_14_000001_create_personal_access_tokens_table
Migrated:  2019_12_14_000001_create_personal_access_tokens_table (2,313.60ms)
Migrating: 2021_06_19_085151_create_sessions_table
Migrated:  2021_06_19_085151_create_sessions_table (5,279.76ms)
Migrating: 2021_06_19_102316_add_username_to_users_table
Migrated:  2021_06_19_102316_add_username_to_users_table (432.59ms)
Database seeding completed successfully.

Erweitern der Frontend Views

Hinzufügen des Feldes Username in der Datei resources\views\profile\edit.blade.php

<x-slot name="form">
   ...

   <!-- Email -->
      ...


   <!-- column username -->
   <div class="form-group row">
      <label for="username" class="col-md-4 col-form-label text-md-right">{{ __('Benutzername') }}</label>

      <div class="col-md-6">
         <input id="username" 
               type="text" 
               class="form-control @error('username') is-invalid @enderror" name="email" 
               value="{{ old('email') ?? auth()->user()->email }}" 
               required autocomplete="email" autofocus>

          @error('username')
          <span class="invalid-feedback" role="alert">
             <strong>{{ $message }}</strong>
          </span>
          @enderror
       </div>
    </div>
 </x-slot>

Anpassen des Controllers

Wir passen die PHP Komponente UpdateUserProfileInformation an, so das die neuen Werte gespeichert werden

app\Actions\Fortify\UpdateUserProfileInformation.php
    public function update($user, array $input)
    {
        ...

        if ($input['email'] !== $user->email &&
            $user instanceof MustVerifyEmail) {
            $this->updateVerifiedUser($user, $input);
        } else {
            $user->forceFill([
                'name' => $input['name'],
                'email' => $input['email'],
                'username' => $input['username'],
            ])->save();
        }
    }

Laravel | Installation der Entwicklungsumgebung

Installation

Voraussetzung für die Verwendung von Laravel ist eine Web-Server, der eine PHP Umgebung unterstützt bzw bereitstellt.

Eine einfache Umgebung wird durch XAMPP bereitgestellt. Eine Implementierung kann man bei Apache Friends herunterladen.

XAMPP ist hier ein Akronym für X (Beliebiges Betriebssystem) Apache + MariaDB + PHP + Perl

Im Laufe dieses Post werden mehrerer Pakete und Programme installiert. Alle werden unter einem Startorder installiert. Diese benennen wir im nachfolgenden mit $LARAVEL_TUTORIAL_ROOT

mkdir C:\LARAVEL_TUTORIAL

Setzen der Umgebungsvariablen unter Windows Command Line cmd

set LARAVEL_TUTORIAL_ROOT="C:\LARAVEL_TUTORIAL"

Setzen der Umgebungsvariablen unter Poweshell

$ENV:LARAVEL_TUTORIAL_ROOT="C:\LARAVEL_TUTOPRIAL"

Installation XAMPP

Download des Installer: https://www.apachefriends.org/index.html

Um mehrerer Versionen parallel zu installieren, stehen ZIP-Dateien zur Verfügung. Die aktuelle Version ist

  • Zip Datei herunterladen: $LARAVEL_TUTORIAL_ROOT\xampp
  • Installation mit dem Composer

    Zielverzeichnis erstellen

    mkdir $LARAVEL_TUTORIAL_ROOT\composer
    cd $LARAVEL_TUTORIAL_ROOT\composer

    Diese Verzeichnis als Umgebungsvariable festlehen

    $ENV:COMPOSER_HOME = $ENV:LARAVEL_TUTORIAL_ROOT\composer
    set COMPOSER_HOME
    
    
    
    

    Composer herunterladen

    php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
    php -r "if (hash_file('sha384', 'composer-setup.php') === '756890a4488ce9024fc62c56153228907f1545c228516cbf63f885e036d37e9a59d27d63f46af1d4d07ee0f76181c7d3') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
    php composer-setup.php
    php -r "unlink('composer-setup.php');"

    Pfad erweitern um

    Fügen Sie die beiden nachfolgenden Pfad ihrer PATH Variablen hinzu:

    composer.bat erstellen
    
    
    
    

    Der Composer ist ein PHP Archiv mit der Dateierweiterung phar. Diese Dateien können nicht direkt aufgerufen werden, sondern stellen ein PHP Programm dar. Es muss als über PHP gestartet werden.

    Hierzu erstellen wir einfach ein Skript, das diese Aufgabe für uns übernimmt. Erstellen Sie dazu die Datei composer.bat im Verzeichnis php

    composer.ps1 erstellen

    php $env:composer_home\composer.phar $args

    composer Tipps und Tricks

    Um weniger Meldungen anzuzeigen kann die nachfolgenden Konfigurationseinstellung verwendet werden:

    composer global config bin-dir --absolute --quiet

    Installation von NodeJS

    https://nodejs.org/en/download/

    Installation des Laravel Installer

    Der Laravel Installer erleichterter das Einrichten und Erstellen neuer Laravel Anwendungen.

    Installiert wird er mit Hilfe des Composer:

    composer global require "laravel/installer"

    Installation einer Beispielanwendung

    laravel new blog

    Nächste Schritte

    Laravel | Installation einer Beispielanwendung

    Laravel | Tutorial: Eine Blog erstellen

    SAS | Migrate from SAS to Python

    Introduction

    Cookbook

    proc freq

    proc freq data=mydata;
        tables myvar / nocol nopercent nocum;
    run;
    mydata.myvar.value_counts().sort_index()

    sort by frequency

    proc freq order=freq data=mydata;
    	tables myvar / nocol nopercent nocum;
    run;
    mydata.myvar.value_counts()

    with missing

    proc freq order=freq data=mydata;
        tables myvar / nocol nopercent nocum missing;
    run;
    mydata.myvar.value_counts(dropna=False)

    proc means

    proc means data=mydata n mean std min max p25 median p75;
        var myvar;
    run;
    mydata.myvar.describe()

    more percentiles

    proc means data=mydata n mean std min max p1 p5 p10 p25 median p75 p90 p95 p99;
    	var myvar;
    run;
    mydata.myvar.describe(percentiles=[.01, .05, .1, .25, .5, .75, .9, .95, .99])

    data step

    concatenate datasets

    data concatenated;
        set mydata1 mydata2;
    run;
    concatenated = pandas.concat([mydata1, mydata2])

    proc contents

    proc contents data=mydata;
    run;
    mydata.info()

    save output

    proc contents noprint data=mydata out=contents;
    run;
    contents = mydata.info()  # check this is right

    Misc

    number of rows in a datastep

    * Try this for size: http://www2.sas.com/proceedings/sugi26/p095-26.pdf;
    len(mydata)