Для получения полного доступа
зарегистрируйтесь.

Раздел:
Подраздел:
Языки:


Сниппет,  Java

build vue-json-schema-form

Gravatar image
Alexey Markov
  • Репутация: 3
  • Сниппеты: 27
  • Ревизии: 0

node_modules/.bin/vue-cli-service build --target lib --name vue-json-schema-form src/components/index.js

Сниппет,  Bash

gitlab-runner docker

Gravatar image
Alexey Markov
  • Репутация: 3
  • Сниппеты: 27
  • Ревизии: 0

docker run -d --name gitlab-runner --restart always -v /var/www/gitlab-runner/config:/etc/gitlab-runner -v /var/run/docker.sock:/var/run/docker.sock gitlab/gitlab-runner:latest

samdark
  • Репутация: 349
  • Сниппеты: 57
  • Ревизии: 5

Необходимое и достаточное условие пересечения или не пересечения двух интервалов времени или любых других отрезков используется, чаще всего, при составлении и валидации событий в расписаниях.

Обозначения

  • begin1, end1 - начало и конец первого интервала.
  • begin2, end2 - начало и конец второго интервала.

Интервалы пересекаются

begin1 <= end2 AND end1 >= begin2
SELECT *
FROM event
WHERE e.begin <= :end AND e.end >= :begin

Интервалы не пересекаются

begin1 > end2 OR end1 < begin2
SELECT *
FROM event
WHERE e.begin > :end OR e.end < :begin
Stephen Berezuev
  • Репутация: 5
  • Сниппеты: 3
  • Ревизии: 1

Установка:

Создаем файл ~/.git-templates/hooks/pre-commit со следующим кодом:

#!/usr/bin/env bash

# Check if you have 'WIP' markers in code before commit to prevent debug code and info on remote git.
if grep -i -n 'wip' `git diff HEAD --cached --name-only`; then
    read -p "You're about to add a WIP commit, do you want to run the CI? [y|n] " -n 1 -r < /dev/tty
    echo
    if echo $REPLY | grep -E '^[Nn]$' > /dev/null; then
        echo "[skip ci]" >> $1
    fi
fi

В консоли выполняем:

git config --global init.templatedir '~/.git-templates';
chmod a+x ~/.git-templates/hooks/*

Затем, в директориях уже скачанных репозиториев выполняем: git init

Et voila! Tеперь, когда будете добавлять какую-то временную заглушку или дебаг в код, указывайте в комментарии @wip и при попытке закоммитить такой код гит выдаст предупреждение.

Gravatar image
Nepster
  • Репутация: 151
  • Сниппеты: 19
  • Ревизии: 0
$str = '0123456789 abcdKDLAD !@#$%^&*()_+ абвгЖЗИКМ chỉđơngiảnlà 是印刷及排版';
$result = preg_replace('#(*UTF8)[^\pL\pN\s]+#u','', $str);
echo $result; // 0123456789 abcdKDLAD  абвгЖЗИКМ chỉđơngiảnlà 是印刷及排版

Так-же можно удалять и пробелы убрав метасимвол \s.

Gravatar image
zabachok
  • Репутация: 2
  • Сниппеты: 1
  • Ревизии: 0
echo $form->field($model, 'is_bot')->radioList(['' => 'Все', false => 'Люди', true => 'Боты'], [
            'itemOptions' => ['class' => 'd-none', 'labelOptions' => ['class' => 'btn btn-primary']],
            'class' => 'btn-group',
            'data-toggle' => 'buttons',
        ])->label(false);

dfatt
  • Репутация: 260
  • Сниппеты: 53
  • Ревизии: 7

Быстрый способ добавить цветовой оверлей на фоновое изображение

.block_business {
    background: linear-gradient(
            rgba(0, 0, 0, 0.7),
            rgba(0, 0, 0, 0.7)
    ),
    url('https://images.unsplash.com/photo-1524758631624-e2822e304c36');
}

Результат:

Roman Zhuravlev
  • Репутация: 6
  • Сниппеты: 3
  • Ревизии: 0

Пусковой скрипт для запуска cron-команд в docker-контенере. Проверяет cron-выражение и запускает команду. Умеет выход по сигналам SIGTERM и SIGINT. В отличии от стандартного cron-демона следующую команду не запустит пока не выполнит предыдущую. Удобно использовать при разработке c docker-compose. В логах докера показывает что запускалось, когда, и с каким результатом.

#!/usr/bin/env php
<?php
/**
 * Скрипт для запуска команды по расписанию, для замены cron-а в сети из docker-контейнеров.
 *
 * Пример команды, которая будет запускаться каждую минуту:
 * docker/php/cron.php "* * * * *" php yii rate/update
 *
 * Зависимости:
 * "mtdowling/cron-expression": "~1.2.0"
 *
 * @author Roman Zhuravlev <zhuravljov@gmail.com>
 */

require(__DIR__ . '/../../vendor/autoload.php');

// Params
$params = $_SERVER['argv'];
array_shift($params);
$expression = array_shift($params);
$command = implode(' ', $params);
$schedule = \Cron\CronExpression::factory($expression);

// Signal handler
$signal = 0;
$signalHandler = function ($sigNum) use (&$signal) {
    $signal = $sigNum;
};
pcntl_signal(SIGTERM, $signalHandler);
pcntl_signal(SIGINT, $signalHandler);

// Loop
printLog('Cron started');
while (true) {
    sleep(60 - time() % 60);
    pcntl_signal_dispatch();
    if ($signal) {
        printLog("Cron stopped by signal $signal");
        exit(0);
    }
    if (!$schedule->isDue()) {
        continue;
    }
    $startedAt = microtime(true);
    printLog("[started] command: $command", $startedAt);
    passthru($command, $exitCode);
    $finishedAt = microtime(true);
    $totalTime = sprintf('%01.3f', $finishedAt - $startedAt);
    printLog("[finished] duration $totalTime s, exit code $exitCode");
    if ($exitCode) {
        exit($exitCode);
    }
}

function printLog($message, $time = null)
{
    echo date('Y-m-d H:i:s', $time ?? time()), ' ' , $message, PHP_EOL;
}
Kosuha606
  • Репутация: 11
  • Сниппеты: 11
  • Ревизии: 0

Функция, позволяющая перевести PhpOffice Spreadsheet в таблицу PhpWord Table, Чтобы напечатать таблицу в .doc файле. Пришлось сделать эту функцию, потому что перевод XLS->HTML и HTML->DOC работает плохо для таблиц.

Из недочетов метода:

  1. addCell - использует константую ширину ячейки, это можно доработать
  2. Объединение ячеек учитывается только по ширине, не по высоте.

Делал этот метод для того, чтобы основная логика генерации таблиц была в XLS и чтобы генерация DOC использовала эту таблицу уже готовую и вставляла таблицу в заготовленный шаблон DOC.

private function convertXlsToDocTable(Worksheet $sheet, Table $table)
{
    foreach ($sheet->getRowIterator() as $rowIndex => $row) {
        $table->addRow();
        $prevMergeRange = null;
        $cellIterator = $row->getCellIterator();
        $cellIterator->setIterateOnlyExistingCells(false);
        foreach ($cellIterator as $cellIndex => $cell) {
            $value = $cell->getValue();
            $mergeRange = $cell->getMergeRange();
            if ($mergeRange && $prevMergeRange == $mergeRange) {
                continue;
            }
            if ($mergeRange) {
                $mergeCount = 0;
                foreach ($row as $mergeCell) {
                    if ($mergeRange == $mergeCell['mergeRange']) {
                        $mergeCount++;
                    }
                }
                $table->addCell(2000, ['gridSpan' => $mergeCount])->addText($value);
                $prevMergeRange = $mergeRange;
            } else {
                $table->addCell(2000, [])->addText($value);
            }
        }
    }

    return $table;
}
Gravatar image
ivaaaan
  • Репутация: 3
  • Сниппеты: 1
  • Ревизии: 0
function urange($start, $end, $step)
{
    if (!is_callable($step)) {
        return range($start, $end, $step);
    }

    $helper = function ($current, $start) use ($end, $step, &$helper) {
        if ($start > $end) {
            return $current;
        }
        $current[] = $start;
        return $helper($current, $step($start));
    };
    
    return $helper([], $start);
}

print_r(urange(20, 39, function ($n) {
    $next = ($n / 10) % 10;
    return $n + ($next >= 1 ? $next : 1);
}));

print_r(urange(1, 40, function ($n) {
	return $n+1;
}));

print_r(urange(1, 40, function ($n) {
    return $n+$n;
}));