Веб-программинг

Интересное и полезное про PHP, JS, Jquery, Angular, Bootstrap, MySQL, PostgreSQL, Docker, Git, Trello, Nginx и Apache, API Яндекса, Google, PayPal, Fb, Vk, GeoNames, Robokassa...

Запустить консольную команду в Yii2

Представим, что есть консольная команда в /command/HelloController под названием actionSearch().
Логика, которая, используется в данном экшне и которую необходимо использовать еще где-то в проекте, лучше вынести в модель. Но бывает и так, что необходимо запустить экшн сразу в проекте.
Это можно сделать вот таким образом:

$controller = new HelloController(Yii::$app->controller->id, Yii::$app);
$controller->actionSearch()
26 ноября   php   yii2
7 ноября   codepen.io   Memory Game

Установить Shutter с редактированием скриншотов

Устанавливаем Shutter:

sudo add-apt-repository ppa:shutter/ppa
sudo apt-get update
sudo apt-get install shutter

После установки не работает «Редактирование»:

Рекомендуют установить библиотеку «libgoo-canvas-perl» и «gnome-web-photo», но это не работает:

sudo apt-get install libgoo-canvas-perl
E: Package 'libgoo-canvas-perl' has no installation candidate
E: Package 'gnome-web-photo' has no installation candidate

Нашел вот такой интересный и «рабочий» способ:

wget -q http://mirrors.kernel.org/ubuntu/pool/universe/g/goocanvas/libgoocanvas-common_1.0.0-1_all.deb
wget -q http://mirrors.kernel.org/ubuntu/pool/universe/g/goocanvas/libgoocanvas3_1.0.0-1_amd64.deb
wget -q http://mirrors.kernel.org/ubuntu/pool/universe/libg/libgoo-canvas-perl/libgoo-canvas-perl_0.06-2ubuntu3_amd64.deb
 
sudo dpkg -i libgoocanvas-common_1.0.0-1_all.deb
sudo apt-get -f install
sudo dpkg -i libgoocanvas3_1.0.0-1_amd64.deb
sudo apt-get -f install
sudo dpkg -i libgoo-canvas-perl_0.06-2ubuntu3_amd64.deb
sudo apt-get -f install
18 октября   shutter
7 октября   docker

Если Opera перестала воспроизводить видео h264

Такая проблема возникает если плеер в html5.
Установим необходимое расширение:

sudo apt install chromium-codecs-ffmpeg-extra

Далее переходим в директорию chromium-browser и скопируем библиотеку в директорию opera:

cd /usr/lib/chromium-browser
cp libffmpeg.so /usr/lib/x86_64-linux-gnu/opera/

Теперь открываем Opera и проверяем что все работает

27 сентября   chromium-browser   h264   libffmpeg.so   opera

Найти все дублированные строки в PostgreSQL

Допустим задача: найти дубли не просто по одному полю, а сразу по нескольким полям. Например, в таблице есть поля user_id и link

id name user_id link
1 Первая запись 226 яндекс.ру
2 Вторая запись 67 гугл.ру
3 Третья запись 315 рамблер.ру
... ... ... ...
3116 Последняя запись 226 яндекс.ру

и необходимо найти все дубли, чтобы совпадали поля user_id и link. В нашем случае, это строки под id=1 и id=3116.
Можно применить следующий sql:

SELECT user_id, link, string_agg(CAST(id AS TEXT), ', ') AS ids, count(user_id) AS count
FROM our_table
GROUP BY user_id, link
HAVING count(user_id) > 1
ORDER BY user_id DESC;

Строка string_agg(CAST(id AS TEXT), ', ') AS ids необходима для того, чтобы конкатенировать id дублированных строк

Как сортировать в PostgreSQL согласно списку конструкции WHERE

Если необходимо осуществить поиск по нескольким ID, например (4, 6, 3, 12). Видно, что список имеет неупорядоченную сортировку, и вывод результата в PostgreSQL необходимо построить согласно этому списку.
Что-то вроде того:

SELECT *
FROM "table"
WHERE id IN (4, 6, 3, 12)
ORDER BY (4, 6, 3, 12)

Т. е. чтобы конечный результат сохранил сортировку id

В данном случае нам поможет следующая конструкция:

SELECT *
FROM "table"
JOIN unnest('{4, 6, 3, 12}'::int[]) WITH ORDINALITY t(id, sort) USING (id)
ORDER  BY t.sort;

Как исключить несколько слов в регулярном выражении

Например, вам необходимо составить выражение, которое разрешит любые нечисловые символы.
Это несложно:

/\D/

или

/[^0-9]/

А если необходимо исключить из поиска определенные слова? Тогда лучше применить Negative Lookaround — позиционную проверку. Подробнее можно узнать здесь.

Если наши слова red и black, то регулярное выражение может выглядеть так:

/^(?!.*(?:red|black))[\D]+$/

Пример можно посмотреть здесь

2018   Lookaround   regexp

Быстрый update всех строк для поля JSONB

Если в поле с типом JSONB необходимо поменять только значения определенного ключа, то быстрая команда:

update "tableName" set columnName = jsonb_set("columnName",'{"ip"}','"192.168.0.1"');
2018   jsonb   jsonb_set   PostgreSQL
Ctrl + ↓ Ранее