Vizz
Vizz
Anima
Anima
fchars
FChars
lanima
LAnima
Таверна «приправа — Космос»

Когда каждый день у заведения случайным образом обновляется название, когда вместо меню — ссылки, когда можно пить и не пьянеть — это называется Веб-Гастро-Бар «Глоагент».

4.01.18
Гит

Код, который не укладывается в формат и некоторые библиотеки на моем гитхабе.

4.08.19
Редирект

У меня возникла проблема, с которой я так и не разобрался. Редирект с site1.ru/* на site2.ru/* ни одним из известных способов через .htaccess не выполнялся корректно. Возможно, по вине хостера, возможно из-за фреймворка.

Решение состояло в том, что разнес директории между двумя этими доменами и на site1.ru закинул голый codeigniter.

Routes.php

$routes->get('/(:any)', 'Home::index');

Home.php

<?php

namespace App\Controllers;

class Home extends BaseController {

    public function index() {
        header("Location: https://site2.ru" . $_SERVER['REQUEST_URI'], true, 301); 
        exit();
        return 0;
    }

    //--------------------------------------------------------------------
}
23.03.20
Шаблон

Бекап каталога в tar по ssh (по ключам).

#!/bin/bash

FOLDER="test"
USER="user"
SERVER="server"
LOCAL_DIR="/home/"
DATE=$(date +%m.%Y)

#ssh-keygen -o -a 100 -t ed25519 если нужно добавить ключи
#ssh-copy-id $USER@$SERVER

TAR_COMMAND="tar -cf $FOLDER-$DATE.tar $FOLDER"
RM_COMMAND="rm $FOLDER-$DATE.tar"

echo "Архивирование"
ssh $USER@$SERVER "$TAR_COMMAND; exit"
echo "Копирование"
scp $USER@$SERVER:$FOLDER-$DATE.tar $LOCAL_DIR
echo "Удаление архива с сервера"
ssh $USER@$SERVER "$RM_COMMAND; exit"

12.01.20
Шутка

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


function t_uniq($r){
    while(count(array_unique($r)) < count($r))
        for($i = 0; $i < count($r); $i++)
            $r[$i] = rand(0,count($r));
    return $r;
}
$arr = [1,1,1,1,1,1,1,1,1,1,1,1,1];
$arr = t_uniq($arr);
print_r($arr);
20.09.19
Шутка
20.09.19
Оптимизация картинок

Рекурсивно обходит папки, оптимизирует картинки и жмет их размер до 2000 пикселей.

#!/bin/bash

I=`dpkg -l | grep "imagemagick"`
if [ -n "$I" ]
then
   echo imagemagick installed
else
   sudo apt-get install imagemagick -y
fi

start() {
  local fullname="$1"
  local filename=`basename "$1"`
  local fileext="${filename##*.}"
  local formatfile=`file "$1" -b --mime-type`;
  if  [[ $formatfile = "image/jpeg" || $formatfile = "image/png"  ]]
    then
      local width=`identify -format "%w" "$1"`
      if [[ $width -gt 2000 ]]
        then
          convert "$fullname" -resize 2000 -quality 75 -strip "$fullname"
      else
          convert "$fullname" -quality 75 -strip "$fullname"
      fi
  fi
}

scan() {
  local x;
  for e in "$1"/*; do
    x=${e##*/}
    if [ -d "$e" -a ! -L "$e" ]
    then
      scan "$e"
    else
      start "$e"
    fi
  done
}

[ $# -eq 0 ] && dir=`pwd` || dir=$@

scan "$dir"

30.06.19
Полоса прокрутки

Автоматическая линия, которая отражает процент проскроленной страницы.

function Status_line(id, h, back, tops) {
    this.id = typeof id !== 'undefined' ? id : 'status-line';
    this.h = typeof h !== 'undefined' ? h : '5px';
    this.back = typeof back !== 'undefined' ? back : '#E91E63';
    this.tops = typeof tops !== 'undefined' ? tops : '0px';

    window.onload=function(){
        var d=document.createElement('div');
        d.innerHTML = '';
        d.id = this.id;
        document.body.appendChild(d);
        jQuery("#" + this.id ).css({
            'position' : 'fixed',
            'z-index' : 1,
            'width' : '100%',
            'left' : 0,
            'top' : this.tops
        });
        jQuery("#" + this.id + " span" ).css({
            'display' : 'block',
            'width' : '0%',
            'height' : this.h,
            'background' : this.back
        });
    }

    window.onscroll=function(){
        var scrolled=window.pageYOffset||document.documentElement.scrollTop;
        var document_height=jQuery(document).height()-950;
        var percent=(scrolled*100/document_height);
        jQuery("#" + this.id + " span").css('width',percent+'%');
    };
    
}

Status_line(); // статусная строка по умолчанию
28.06.19
ImgBust

Анимация картинок в JS. Когда нет возможности использовать .mov, а хочется коротких анимаций с прозрачностью.

jQuery(function () {
     /**
     * Создание экземпляра ImgBust.
     *
     * @constructor
     * @param {string} elem - id картинки.
     * @param {array} urls - список картинок в порядке необходимого следования.
     * @param {number} speed - частота смены кадров в миллисекундах.
     */
    function ImgBust(elem, urls, speed) { // version 0.9

        if (!jQuery("*").is(jQuery(elem))) {
            console.error('ImgBust error: element ' + elem + ' not found');
            return false;
        }
        if (urls.length < 1) {
            console.error('ImgBust error: not found image urls');
            return false;
        }
        this.elem = jQuery(elem);
        this.urls = urls;
        this.len = urls.length;
        this.speed = speed;
        this.step = 0;
        this.flag = false;

        this.bust = function () {
            if (this.step === this.len - 1) {
                this.step = 0;
            }
            this.elem.attr('src', this.urls[this.step]);
            this.step++;
        };

        this.start = function () {
            var interval = setInterval(function (img_bust) {
                if (!this.flag) {
                    img_bust.bust();
                } else {
                    clearInterval(interval);
                }
            }, this.speed, this);
        };
    }
    // Использование 
});
28.06.19