im simple message default title
PostgreSQL coub css express.js freeware git jquery laravel links linux macos mysql node.js php python task1 ubuntu vim virtualbox анекдот игры интересно музыка стихи цитаты

Задача: реализовать функцию копирования в буфер обмена ссылки на опубликованный на Я.Диске файл.
Вообще в природе есть готовые решения, но меня они как-то не впечатлили.
Будем пользоваться
  1. yandex-disk - Собственно сам консольный клиент Yandex.Disk
  2. xclip - утилитка для копирования всякого в буфер обмена
  3. notify-send - утилита для отправки оповещений на уровне оконного менеджера (здесь xfce)
Ставим клиент Я.Диск-а, ставим xclip из репозитория. Дальше открываем Thunar -> Edit -> Configure custom actions..
Добавляем новое действие. Вот такой командой пользуемся для публикации выбранного файла, копирования ссылки в буфер и отправки нотиса о завершении процедуры
mm=`yandex-disk publish %f`;echo -n $mm | xclip -sel clip;notify-send $mm
Выглядеть новая команда будет примерно так (иконку можно взять тут).


Для быстрого постинга скриншотов, думаю вполне подойдет Shutter (ставится из репозиториев). Его можно настроить для сохранения скриншотов сразу в папке Я.Диск-а, настроить качество и формат скриншотов. В нем же есть небольшой графический редактор который позволяет кропать изображения, рисовать рамки-стрелки и т.д. Правда чтобы активировать редактор в Shutter нужно поставить ещё кое-что (по состоянию на сегодня это всё ещё требуется, странно что не ставится всё сразу).
sudo apt-get install libgoo-canvas-perl gnome-web-photo
Как установить Shutter дефолтным инструментом в XFCE можно почитать например тут. Кажется это всё. Закончили упражнение.
linux ubuntu

Для того, чтобы не ползать править постоянно /etc/hosts при каждом заведении нового проекта на локалке хорошо бы заставить машину ломится по определенному домену на локальную машину всегда. Я как-то уже писал на эту тему, но решение там мягко говоря не самое простое. Я тут и там слышал про dnsmasq но как-то все не доходили руки разобраться. В общем, это совсем-совсем просто.
  1. sudo apt-get install dnsmasq (ну или brew install dnsmasq, кстати с brew была какая-то проблема небольшая, сейчас не вспомню на ходу)
  2. Идем открываем редактором файл конфигурации /etc/dnsmasq.conf (внутри конфига все расписано, но все опции закоменчены; в случае с brew конфиг лежит /usr/local/etc/dnsmasq.conf)
  3. Добавляем (или ищем и раскоментируем+правим то что уже есть в конфиге) две строки
    address=/.dev/127.0.0.1   # прибиваем гвоздями домен к ip
    listen-address=127.0.0.1 # слушать будем на этом ип
    
    Создаем папку (если нет)
    sudo mkdir /etc/resolver
    
    Создаем такой файлик под зону
    sudo bash -c 'echo "nameserver 127.0.0.1" > /etc/resolver/dev'
    
    Теперь все хосты вида *.dev будут завернуты на 127.0.0.1
    Любопытные граждане гуглят и читают комментарии в конфиг файле.
  4. Последний штрих, идем в свойства текущего сетевого соединения и в его свойствах указываем дополнительный DNS как свой локальный 127.0.0.1 (в формах настройки есть разница, но я думаю это просто и пояснения не нужны)
  5. И совсем последний штрих - перезапускаем dnsmasq
    sudo service dnsmasq restart
    
    Как это делается на маке я не помню, нужно поглядеть brew info dnsmasq
Вот собственно и все. Теперь /etc/hosts можно оставить в покое и прописывать везде локальные хосты в домене .dev
Жаль я забыл что у меня там с brew сломалось, но фикс нагуглился минут за 20, ничего серьезного.

P.S.:

А если ещё в nginx добавить что-то вида
server {

  server_name ~^(.*)\.my\.dev$;
  set $projectFolder $1;

  root /home/luke/projects/php/$projectFolder/public;
  index index.php;
  
  location / {
    try_files $uri $uri/ /index.php?$query_string;
  }

  location ~ \.php$ {
    # With php5-fpm:
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  }
}
то ещё и в конфиги сервера можно будет ползать значительно реже.
В этом примере будет достаточно просто размещать проекты на диске вот так
/home/luke/projects/php/project-one/public -> http://project-one.my.dev
/home/luke/projects/php/project-two/public -> http://project-two.my.dev
/home/luke/projects/php/project-three/public -> http://project-three.my.dev
/home/luke/projects/php/project-four/public -> http://project-four.my.dev
linux ubuntu macos

Картина маслом
ssh-add ~/.ssh/mykey_rsa
Could not open a connection to your authentication agent.
ЭЭ.. чего? Гуглим.. ок, нет агента, запускаем его.
eval $(ssh-agent -s)
Теперь ключ добавляется. Ладно вроде все окей. Только при следующем коннекте опять та же канитель!! То есть отключился от сервера, зашел под тем же логином и опять 25. Ровно тот же самый вопрос. При этом
ps axu | grep ssh
.. говорит что да-да, ssh-agent запущен и все круто. Но при следующем коннекте мы его не видим все рано. Во дела. Как быть-то..

Я знатно попарился разыскивая решение, но оно тупое как.. В общем убиваем агент, он не нужен будет
killall ssh-agent
Теперь делаем так
cd ~/.ssh/
touch config
echo IdentityFile ~/.ssh/mykey_rsa >> ./config
И таки все начинает работать, при условии что ключ сгенерен без парольной защиты, иначе будет трэбовать пароль после каждого нового логина и придется приплясывать снова ещё и с этим. Мне это надо было для автоматизации обновлений через баш-скриптик одной штуки, то есть зашел-запустил-вышел, минимум движений. Буду признателен за решение лучше.

Решение нашел тут.
ubuntu

Пример рекурсивно ищет файлы с расширением .php в выбранной директории, читает их и считает в них строки.
cd ~/projects/project
find . -type f -name *.php -exec cat {} \; | wc -l
linux ubuntu

Маленькие "хитрости" bash. На примере перезапуска приложения node.js
#!/bin/bash
# чтобы было легче жить, добавим все нужные пути в переменные
DAEMON="/usr/local/bin/node"
ROOT_DIR="/home/user/project-copy-folder"
# тут на основании базовых путей выставляем пути к файлам PID, 
# логов и скрипта, запускающего само приложение
PIDFILE="$ROOT_DIR/pidfile"
SERVER="$ROOT_DIR/app.js"
LOG_FILE="$ROOT_DIR/app.js.log"

# останавливаемся, обратите внимание на то, как получается и обрабатывается PID
echo -n "Stopping $SERVER: "
kill -9 $(cat $PIDFILE) && echo 'ok stoped' || echo 'error on stop my-funny app'

# чистим логи и убираем старый PID (это опционально)
>$LOG_FILE
>$PIDFILE

# стартуем. тут самое как мне кажется, непонятное — это конструкция echo $! > $PIDFILE
# здесь $! это PID последнего запущенного приложения (читаем ман по bash), с пониманием
# этого нюанса становится понятно все остальное
echo -n "Starting $SERVER: "
`$DAEMON $SERVER > $LOG_FILE & echo $! > $PIDFILE &` && echo 'ok, started' || echo 'error on start my-funny app'
Интересная особенность как мне показалось состоит в том, что если мы выполним например вот такой код
/usr/local/bin/node /home/user_name/project/app.js &
echo $!
То увидим напечатанный PID. А вот если исполнить тоже самое, но через eval
NODE='/usr/local/bin/node'
APP='/home/user_name/project/app.js'
`$NODE $APP &`
echo $!
То не увидим ничего. То есть eval где-то у себя это значение закусывает и нам оно нормально не доезжает. Соответственно решением (скорее всего одним из решений, так как я никакой не специалист по bash), будет получение PID-а прямо внутри этого самого eval-a как показано в первом примере.

Из переменной (правильно называть это переменными??) $$ - можно получить PID текущего скрипта, то есть если вы планируете в нем зависнуть то имеет смысл положить куда-то PID-файл чтобы потом что-то с этим процессом делать. Баш вообще интересная штука, жаль почти не остается времени на глубокие раскопки в этих шаманствах.
linux ubuntu node.js

HO-HO-HO!! L10 is here.
dance-dance #3
update new 01.10.2023