Web + Mobile Blog / Berlin http://sebastianviereck.de/en/ PHP Freelancer Tue, 06 Aug 2019 14:27:54 +0000 en hourly 1 http://wordpress.org/?v=3.5.1 Recursively delete directories Gau Frette FTP adapter http://sebastianviereck.de/en/delete-Gau-Frette-recursive-directories/?utm_source=rss&utm_medium=rss& http://sebastianviereck.de/en/delete-Gau-Frette-recursive-directories/#comments Tue, 06 Aug 2019 14:01:17 +0000 Sebastian Viereck http://sebastianviereck.de/?p=4012-en Continue reading ]]> To with FTP recursively delete files and directories adapter Gau Frette, you can apply following trick to avoid the error message:

ftp_rmdir(): Directory not empty.

1. just delete all files

2. then delete the lowest directories up to the top:

/**
 * @param Filesystem $fileSystem
 */
function deleteAllFilesInDirectory(Filesystem $fileSystem)
{
    // delete files first, than directories
    foreach ($fileSystem->keys() as $key) {
        if (!$fileSystem->isDirectory($key)) {
            $fileSystem->delete($key);
        }
    }
    $keys = $fileSystem->keys();
    usort($keys, function (string $a, string $b){
        $aCount = substr_count($a, '/');
        $bCount = substr_count($b, '/');
        return $bCount <=> $aCount;
    });
    foreach ($keys as $key) {
        $fileSystem->delete($key);
    }
}
]]>
http://sebastianviereck.de/en/delete-Gau-Frette-recursive-directories/feed/ 0
AWS time zone adjust Amazon Linux 2 and RDS MySQL http://sebastianviereck.de/en/AWS-time-zone-adjust-amazon-linux-2-and-rds-mysql/?utm_source=rss&utm_medium=rss& http://sebastianviereck.de/en/AWS-time-zone-adjust-amazon-linux-2-and-rds-mysql/#comments Fri, 02 Aug 2019 07:18:16 +0000 Sebastian Viereck http://sebastianviereck.de/?p=4005-en Continue reading ]]> In the logs and the database use the correct time stamp of the own time zone, must be

1. Configure the system time of the EC2 instance

sudo ln -sf /usr/share/zoneinfo/Europe/Berlin /etc/localtime

and in the file /etc/sysconfig/clock Enter the time zone:

sudo vi /etc/sysconfig/clock
ZONE="Europe/Berlin"

After a reboot of the instance must be:

sudo reboot

Die Anpassung kann überprüft werden mit

date

Quelle

2. Customize the MySQL RDS ParameterGroup

Setting the parameter time_zone on the value Europe/Prague, After a reboot of the RDS instance is necessary

aws_rds_time_zone

Parameter set time_zone MySQL RDS ParameterGroup

SELECT NOW();

]]>
http://sebastianviereck.de/en/AWS-time-zone-adjust-amazon-linux-2-and-rds-mysql/feed/ 0
Symfony FosUser bundle to apply their own password policy http://sebastianviereck.de/en/symfony-fosuser-own-password-policy/?utm_source=rss&utm_medium=rss& http://sebastianviereck.de/en/symfony-fosuser-own-password-policy/#comments Tue, 30 Jul 2019 15:58:45 +0000 Sebastian Viereck http://sebastianviereck.de/?p=3999-en Continue reading ]]> In the SonataAdmin with FosUser bundle your own rules to define module for the strength of the passwords, can you overwrite the validation.xml, by one in the folder src/application/Sonata/UserBundle/resources/config /. its own validation.XML creates:

<?xml version="1.0" ?>
<constraint-mapping xmlns="http://symfony.com/schema/dic/constraint-mapping"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://symfony.com/schema/dic/constraint-mapping
        http://symfony.com/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd">

    <class name="FOS\UserBundle\Model\User">

        <property name="plainPassword">
            <constraint name="NotBlank">
                <option name="message">fos_user.password.blank</option>
                <option name="groups">
                    <value>Registration</value>
                    <value>ResetPassword</value>
                    <value>ChangePassword</value>
                </option>
            </constraint>
            <constraint name="Length">
                <option name="min">8</option>
                <option name="max">50</option>
                <option name="minMessage">fos_user.password.short</option>
                <option name="groups">
                    <value>Registration</value>
                    <value>Profile</value>
                    <value>ResetPassword</value>
                    <value>ChangePassword</value>
                </option>
            </constraint>
            <constraint name="Regex">
                <option name="pattern">/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}$/</option>
                <option name="message">Das Passwort muss mindestens 8 Zeichen haben, eine Zahl, Groß und Kleinschreibung enthalten.</option>
                <option name="groups">
                    <value>Registration</value>
                    <value>Profile</value>
                    <value>ResetPassword</value>
                    <value>ChangePassword</value>
                </option>
            </constraint>
        </property>
    </class>
</constraint-mapping>
]]>
http://sebastianviereck.de/en/symfony-fosuser-own-password-policy/feed/ 0 Create symfony brute-force guard for SonataAdmin http://sebastianviereck.de/en/symfony-brute-force-guard-fuer-sonataadmin-erstellen/?utm_source=rss&utm_medium=rss& http://sebastianviereck.de/en/symfony-brute-force-guard-fuer-sonataadmin-erstellen/#comments Tue, 30 Jul 2019 14:24:17 +0000 Sebastian Viereck http://sebastianviereck.de/?p=3997-en Continue reading ]]> For the SonataAdmin bundle There is the possibility of Symofny guards own logic in the login process to incorporate, such as:

  • Defense against brute force attacks by a maximum number of login attempts

In the following example, I have configured a guard for the administration area, It will count, wie oft sich ein User falsch eingeloggt hat.

The UserManager must then contain the logic, to counting the number of logins for each user, and it formed. auch zu bannen für eine bestimmte Zeit.

<?php

namespace App\Security;

use App\Core\UserManager;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\RouterInterface;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Core\Exception\AuthenticationException;
use Symfony\Component\Security\Core\Exception\BadCredentialsException;
use Symfony\Component\Security\Core\Exception\CustomUserMessageAuthenticationException;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Security\Core\User\UserProviderInterface;
use Symfony\Component\Security\Guard\Authenticator\AbstractFormLoginAuthenticator;

class AdminAuthenticator extends AbstractFormLoginAuthenticator
{

    /**
     * @var UserManager
     */
    protected $userManager;

    /**
     * @var RouterInterface
     */
    protected $router;

    /**
     * Constructor.
     *
     * @param UserManager $userManager
     * @param RouterInterface $router
     */
    public function __construct(
        UserManager $userManager,
        RouterInterface $router
    )
    {
        $this->userManager = $userManager;
        $this->router = $router;
    }

    /**
     * Return the URL to the login page.
     *
     * @return string
     */
    protected function getLoginUrl()
    {
        return $this->router->generate('sonata_user_admin_security_login');
    }

    /**
     * Does the authenticator support the given Request?
     *
     * If this returns false, the authenticator will be skipped.
     *
     * @param Request $request
     *
     * @return bool
     */
    public function supports(Request $request)
    {
        return ($request->getPathInfo() == '/admin/login_check' && $request->getMethod() === 'POST');
    }

    /**
     * Get the authentication credentials from the request and return them
     * as any type (e.g. an associate array).
     *
     * Whatever value you return here will be passed to getUser() and checkCredentials()
     *
     * For example, for a form login, you might:
     *
     *      return [
     *          'username' => $request->request->get('_username'),
     *          'password' => $request->request->get('_password'),
     *      ];
     *
     * Or for an API token that's on a header, you might use:
     *
     *      return ['api_key' => $request->headers->get('X-API-TOKEN')];
     *
     * @param Request $request
     *
     * @return mixed Any non-null value
     *
     * @throws \UnexpectedValueException If null is returned
     */
    public function getCredentials(Request $request)
    {
        return [
               'username' => $request->request->get('_username'),
               'password' => $request->request->get('_password'),
           ];
    }

    /**
     * Return a UserInterface object based on the credentials.
     *
     * The *credentials* are the return value from getCredentials()
     *
     * You may throw an AuthenticationException if you wish. If you return
     * null, then a UsernameNotFoundException is thrown for you.
     *
     * @param mixed $credentials
     * @param UserProviderInterface $userProvider
     *
     * @throws AuthenticationException
     *
     * @return UserInterface|null
     */
    public function getUser($credentials, UserProviderInterface $userProvider)
    {
        return  $userProvider->loadUserByUsername($credentials['username']);
    }

    /**
     * Returns true if the credentials are valid.
     *
     * If any value other than true is returned, authentication will
     * fail. You may also throw an AuthenticationException if you wish
     * to cause authentication to fail.
     *
     * The *credentials* are the return value from getCredentials()
     *
     * @param mixed $credentials
     * @param UserInterface $user
     *
     * @return bool
     *
     * @throws AuthenticationException
     */
    public function checkCredentials($credentials, UserInterface $user)
    {
        if ($this->userManager->checkUserIsAllowedToLogin($user)) {
            return $this->userManager->checkPasswordValid($credentials[' password '], $user);
        } else {
            throw new CustomUserMessageAuthenticationException('user is banned for 1 hour');
        }
    }

    /**
     * Called when authentication executed and was successful!
     *
     * This should return the Response sent back to the user, like a
     * RedirectResponse to the last page they visited.
     *
     * If you return null, the current request will continue, and the user
     * will be authenticated. This makes sense, for example, with an API.
     *
     * @param Request $request
     * @param TokenInterface $token
     * @param string $providerKey The provider (i.e. firewall) key
     *
     * @return Response|null
     */
    public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey)
    {
        $user = $token->getUser();
        $this->userManager->onLoginSuccess($user);
    }

    /**
     * @param Request $request
     * @param AuthenticationException $exception
     * @return \Symfony\Component\HttpFoundation\RedirectResponse
     */
    public function onAuthenticationFailure(Request $request, AuthenticationException $exception)
    {
        if ($exception instanceof BadCredentialsException) {
            $userName = $request-&grequestt-&ggetet('_username');
            if (!empty($userName)) {
                $user = $this->userManager->getUserByUserName($userName);
                if (!empty($user)) {
                    $this->userManager->incrementPasswordFailedCount($user);
                }
            }
        }

        return parent::onAuthenticationFailure($request, $exception);
    }
}

Security.YAML:

security:
  providers:
    fos_userbundle:
      id: App\Security\UserProvider
  admin:
    pattern:            /admin(.*)
    context:            user
    form_login:
        provider:       fos_userbundle
        login_path:     /admin/login
        use_forward:    false
        check_path:     /admin/login_check
        failure_path:   null
        default_target_path: sonata_admin_dashboard
    logout:
        path:           /admin/logout
        target:         /admin/login
    anonymous:          true
    guard:
        authenticators:
            - App\Security\AdminAuthenticator
        provider:       fos_userbundle
access_control:
    # Admin login page needs to be accessed without credential
    - { path: ^/admin/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/admin/logout$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/admin/login_check$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/admin/, role: ROLE_SONATA_ADMIN }

UserProvider:

<?php

namespace App\Security;

use App\Entity\User;
use FOS\UserBundle\Model\UserInterface;
use FOS\UserBundle\Model\UserManagerInterface;
use Symfony\Component\Security\Core\Exception\BadCredentialsException;
use Symfony\Component\Security\Core\Exception\UnsupportedUserException;
use Symfony\Component\Security\Core\Exception\UsernameNotFoundException;
use Symfony\Component\Security\Core\User\UserInterface as SecurityUserInterface;
use Symfony\Component\Security\Core\User\UserProviderInterface;

class UserProvider implements UserProviderInterface
{
    /**
     * @var UserManagerInterface
     */
    protected $userManager;

    /**
     * Constructor.
     *
     * @param UserManagerInterface $userManager
     */
   public function __constructt(UserManagerInterface $userManager)
    {
        $this->userManager = $userManager;
    }

    /**
     * {@inheritdoc}
     */
    public function loadUserByUsername($username)
    {
        /** @var User $user */
        $user = $this->findUser($username);

        if (!$user) {
            throw new BadCredentialsException();
        }

        return $user;
    }

    /**
     * {@inheritdoc}
     */
    public function refreshUser(SecurityUserInterface $user)
    {
        if (!$user instanceof UserInterface) {
            throw new UnsupportedUserException(sprintf('Expected an instance of FOS\UserBundle\Model\UserInterface, but got "%s".', get_class($user)));
        }

        if (!$this->supportsClass(get_class($user))) {
            throw new UnsupportedUserException(sprintf('Expected an instance of %s, but got "%s".', this-->userManager->getClass(), get_classuserer)));
        }

      ifif (null === $reloadedUser = $this->userManager->findUserBy(array('id' => $user->getId()))) {
            throw new UsernameNotFoundException(sprintf('User with ID "%s" could not be reloaded.', $user->getId()));
        }

        return $reloadedUser;
    }

    /**
     * {@inheritdoc}
     */
    public function supportsClass($class)
    {
        $userClass = $this->userManager->getClass();

        return $userClass === $class || is_subclass_of($class, $userClass);
    }

    /**
     * Finds a user by username.
     *
     * This method is meant to be an extension point for child classes.
     *
     * @param string $username
     *
     * @return UserInterfaczeroll
     */
    protected function findUser($username)
    {
        return $this->userManager->findUserByUsername($username);
    }
}

services.YAML:

App\Security\AdminAuthenticator:
  - '@App\Core\UserManager'
  - '@router'

App\Security\UserProvider:
  - '@fos_user.user_manager'
]]>
http://sebastianviereck.de/en/symfony-brute-force-guard-fuer-sonataadmin-erstellen/feed/ 0
letsencrypt AWS http challenge http://sebastianviereck.de/en/letsencrypt-aws-http-challenge/?utm_source=rss&utm_medium=rss& http://sebastianviereck.de/en/letsencrypt-aws-http-challenge/#comments Thu, 23 May 2019 07:24:37 +0000 Sebastian Viereck http://sebastianviereck.de/?p=3990-en Continue reading ]]> I had the problem, dass beim Erneuern des Letsencrypt Zertifikates per Cronjob unter Amazon Linux 2

certbot renew --post-hook "systemctl reload httpd"  >> /var/log/certbot.log 2>&1

the SSL certificate was not renewed, but following error occurred:

Could not choose appropriate plugin: The manual plugin is not working; there may be problems with your existing configuration.
The error was: PluginError('An authentication script must be provided with --manual-auth-hook when using the manual plugin non-interactively.',)
Attempting to renew cert (foo.de) from /etc/letsencrypt/renewal/foo.conf produced an unexpected error: The manual plugin is not working; there may be problems with your existing configuration.
The error was: PluginError('An authentication script must be provided with --manual-auth-hook when using the manual plugin non-interactively.',). Skipping.

I then looked in configuration: /etc/letsencrypt/renewal/foo.conf and the&nbsp;uthentificator modified on apache and the challenge of Authentificator on HTTP (through the Web server).

# Options used in the renewal process
[renewalparams]
account = xxx
server = https://acme-v02.api.letsencrypt.org/directory
authenticator = 
installer = apache
pref_challs = http-01,

After that was the important Port 80 unlock the security group for authentication and another command

certbot renew

wurde das Zertifikat wurde erfolgreich erneuert.

Cert is due for renewal, auto-renewing...
Plugins selected: Authenticator apache, Installer apache
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for foo.de
Waitinhttpr verification...
Cleaning up challenges

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
new certificate deployed with reload of apache server; fullchain is
/etc/letsencrypt/live/foo.de/fullchain.pem
]]>
http://sebastianviereck.de/en/letsencrypt-aws-http-challenge/feed/ 0
Angular ngx-translate TranslateLoader ohne http Modul http://sebastianviereck.de/en/translate-angular-ngx-translateloader-without-http-service/?utm_source=rss&utm_medium=rss& http://sebastianviereck.de/en/translate-angular-ngx-translateloader-without-http-service/#comments Fri, 12 Apr 2019 13:26:23 +0000 Sebastian Viereck http://sebastianviereck.de/?p=3978-en Continue reading ]]> Compatibility with old browsers, as the Firefox version <= 5 to reach, can you do that angular http Do not use module. The NGX-translate Modules bneötigt a loader, It loads the correct language via AJAX request. Also with the XMLHttpRequest and an Observalbe solve this can:

import {Injectable} from '@angular/core';
import {TranslateLoader} from '@ngx-translate/core';
import {Observable} from 'rxjs/Observable';

@Injectable()
export class LanguageLoader implements TranslateLoader {

  getTranslation(lang: string): Observable<any> {
    return Observable.create(function (observer) {
    let url = `./assets/i18n/${long}.json?=` + new Date().getTime();
    let xhr = new XMLHttpRequest();

      xhr.onreadystatechange = function () {
        if (xhr.readyState == XMLHttpRequest.DONE || xhr.readyState == 4) {
              let response = JSON.parse(xhr.responseText);
              observer.next(response);
              observer.complete();
        }
      }
      xhr.open('GET', url, true);
      xhr.send(zero);
    });
  }
}

In the app.module.TS can you then embed the loader as follows:

TranslateModule.forRoot({
  loader: {provide: TranslateLoader, useClass: LanguageLoader}
})
]]>
http://sebastianviereck.de/en/translate-angular-ngx-translateloader-without-http-service/feed/ 0
Execute PHP script as a Windows service http://sebastianviereck.de/en/PHP-script-as-a-windows-service-running/?utm_source=rss&utm_medium=rss& http://sebastianviereck.de/en/PHP-script-as-a-windows-service-running/#comments Sun, 07 Apr 2019 14:28:52 +0000 Sebastian Viereck http://sebastianviereck.de/?p=3956-en Continue reading ]]> Under Windows, scripts can be, die endlos laufen sollen mit PHP mittels eines Dienstes realisieren.

This has the advantage of, that is the memory consumption with the time to infinity, with endless script versions and a recovery and restart functionality can be implemented, um den Dienst über lange Zeiträume am Laufen zu halten.

Furthermore, the service receives from the operating system events, if e.g.. a shutdown is, um sich rechtzeitig selber beenden zu können und keine korrupten Daten zu produzieren beim Abbruch in einer nicht atomaren Operation.

To create a Windows service, you need the win32service PHP library.

You can here them Download and in the php.ini embed:

extension=php_win32service.dll

Create service

To create and control a service, You can use the following code in the file Win32_Service.php Save:

<?php
//No timeouts, Flush Content immediatly
set_time_limit(0);
ob_implicit_flush();

$serviceName = 'FooCommand';

$serviceAction = $argv[1];

switch ($argv[1]) {
    case  'install': {
        $result = win32_create_service(array(
            'service' => $serviceName,
            'display' => $serviceName,
            'description' => $serviceName,
            'params' => sprintf('%s\win32_run.php', __DIR__),
            'recovery_delay'        => 1000,                                               // Recovery action is executed after 10s
            'recovery_action_1'     => WIN32_SC_ACTION_RESTART,
            'recovery_action_2'     => WIN32_SC_ACTION_RESTART,
            'recovery_action_3'     => WIN32_SC_ACTION_RESTART,
            'recovery_reset_period' => 3600,                                                // Reset the fail counter after 1 hour
        ));
        break;
    }
    case  'uninstall': {
        $result = win32_delete_service($serviceName);
        break;
    }
    case  'stop': {
        $result = win32_stop_service($serviceName);
        break;
    }
    case  'status': {
        $ServiceStatus = win32_query_service_status($serviceName);
        if ( $ServiceStatus['CurrentState'] == WIN32_SERVICE_STOPPED ) {
            echo "Service Stopped\n\n";
        } else if ( $ServiceStatus['CurrentState'] == WIN32_SERVICE_START_PENDING ) {
            echo "Service Start Pending\n\n";
        } else if ( $ServiceStatus['CurrentState'] == WIN32_SERVICE_STOP_PENDING ) {
            echo "Service Stop Pending\n\n";
        } else if ( $ServiceStatus['CurrentState'] == WIN32_SERVICE_RUNNING ) {
            echo "Service Running\n\n";
        } else if ( $ServiceStatus['CurrentState'] == WIN32_SERVICE_CONTINUE_PENDING ) {
            echo "Service Continue Pending\n\n";
        } else if ( $ServiceStatus['CurrentState'] == WIN32_SERVICE_PAUSE_PENDING ) {
            echo "Service Pause Pending\n\n";
        } else if ( $ServiceStatus['CurrentState'] == WIN32_SERVICE_PAUSED ) {
            echo "Service Paused\n\n";
        } else{
            echo "Service Unknown\n\n";
        }
        exit;
    }
    default: {
        throw new Exception('unknow argument');
    }
}

switch($result) {
    case WIN32_ERROR_SERVICE_DOES_NOT_EXIST:
        throw new Exception('service not found');
    case WIN32_SERVICE_ERROR_IGNORE:
        die('service successfully installed/uninstalled');
    case WIN32_ERROR_ACCESS_DENIED:
        throw new Exception('access denied, run command as administrator');
    case WIN32_ERROR_SERVICE_EXISTS:
        throw new Exception('service already exists, uninstall service prior');
    case WIN32_ERROR_SERVICE_MARKED_FOR_DELETE:
        throw new Exception(sprintf('service has been marked for deletion, look here https://stackoverflow.com/questions/20561990/how-to-solve-the-specified-service-has-been-marked-for-deletion-error'));
    case WIN32_SERVICE_START_PENDING:
        throw new Exception('service start is pending');
    case WIN32_ERROR_FAILED_SERVICE_CONTROLLER_CONNECT:
        echo 'can not connect to service controller'. PHP_EOL;
        break;
    default:
        # search for hex value of result win32service lib
        debug_zval_dump($result);
}

and run (Run CMD as administrator) with:

run with: php win32_service.php install
//or
run with: php win32_service.php uninstall
//or
run with: php win32_service.php status
//or
run with: php win32_service.php stop

Then should see Systemsteuerung -> Services the service FooCommand have been created, der beim nächsten Windows Start automatisch gestartet wird.

Create Windows service with PHP script

The long-running PHP script

The script, that should be performed on the service is located in the file: win32_run.php

<?php
set_time_limit(0);
ob_implicit_flush();
$serviceName = 'FooCommand';

$result = win32_start_service_ctrl_dispatcher($serviceName);
if (!$result)serviceName("I'ifprobably not runninthender the service control manager");
}
debug_zval_dump($result);
win32_set_service_result(WIN32_SERVICE_START_PENDING);

// Some lengthy process to get this service up and running.

win32_set_service_status(WIN32_SERVICE_RUNNING);

while (WIN32_SERVICE_CONTROL_STOP != win32_get_last_control_message()) {
    exec(sprintf('php %s/script.php', __DIR__));
}

In the script.php can the endless code be added now:

<?php
echo "hello service";

The service configuration

The service can be configured precisely in the case of an error:

Service configuration in the event of a fault

Debugging the service

When running the service not right off the bat, can be an error in Systemsteuerung -> EvenControl Panel- give more information:

Windows service event display

]]>
http://sebastianviereck.de/en/PHP-script-as-a-windows-service-running/feed/ 0
Windows 10 scheduled task for PHP script create crontab http://sebastianviereck.de/en/Windows-10-create-a-scheduled-task-for-php-script-analog-crontab/?utm_source=rss&utm_medium=rss& http://sebastianviereck.de/en/Windows-10-create-a-scheduled-task-for-php-script-analog-crontab/#comments Sun, 07 Apr 2019 11:15:38 +0000 Sebastian Viereck http://sebastianviereck.de/?p=3949-en Continue reading ]]> For recurring PHP jobs can the operating system scheduler use, unter Linux ist das cron und unter Windows Aufgaben.

To a PHP script to start C:\foobar. php using the Task Scheduler every minute can you see Windows 10 und darunter wie folgt neue Aufgaben anlegen.

Under control panel -.> Aufgabenplanung new tasks can be managed:

Control Panel-> AufgabenplanunTask Scheduler

Create task – If you want the script to run in the background, then you should select “Execute independently of the Bneutzeranmeldung” check

 

Every minute to create trigger, activated necessarily tick

also run on battery power

define php script as action, PHP must be entered for it in the PATH, otherwise must enter the absolute path to the PHP installation. In “Start in” can a directory be specify, in dem der Befehl ausgeführt werden kann.

After 5 Kill the process to minutes

]]> http://sebastianviereck.de/en/Windows-10-create-a-scheduled-task-for-php-script-analog-crontab/feed/ 0 Web application for arranging IT forces http://sebastianviereck.de/en/webanwendung-to-arranging-it-forces/?utm_source=rss&utm_medium=rss& http://sebastianviereck.de/en/webanwendung-to-arranging-it-forces/#comments Sun, 07 Apr 2019 08:59:46 +0000 Sebastian Viereck http://sebastianviereck.de/?p=3946-en My bachelor thesis for download:

Concept and development of a
Web application for arranging IT forces

From this, the startup has become nerdle.de, What after 2 Years due to lack of funding had to be adjusted, aber mir sehr viel Spaß gemacht hat.

Download .pdf

Download .doc

]]>
http://sebastianviereck.de/en/webanwendung-to-arranging-it-forces/feed/ 0
Behavioral finance and moving averages http://sebastianviereck.de/en/behavioral-finance-and-moving-averages/?utm_source=rss&utm_medium=rss& http://sebastianviereck.de/en/behavioral-finance-and-moving-averages/#comments Sun, 07 Apr 2019 08:52:39 +0000 Sebastian Viereck http://sebastianviereck.de/?p=3941-en My diploma thesis for download

Behavioral finance and moving averages – Applicability/simulation of stock markets
on the basis of the 200-day average

Download .pdf

Download .doc

Download Excel macro

]]>
http://sebastianviereck.de/en/behavioral-finance-and-moving-averages/feed/ 0