26.06.2022
Всем привет!
При командной работе одна из важнейших частей - это понимание ответственности. Для описания ответственности за верхнеуровневые функции очень удобно использовать RACI.
- R - ответственный - это лица, которые несут ответственность за выполнение работы.
- A - подотчетный - это лица, ответственные за результат и лица, принимающие решение.
- C - консультант - это лица, которые способствуют принятию решения (их вклад может быть согласован или не согласован).
- I - информированный - это лица, которые проинформированы о решении, но не получают информации.
- F - фасилитатор - это лица, которые помогают облегчить общение и передачу информации в команде.
Прилагаю также матрицу в формате PDF и исходники (Numbers , Excel).
Источник: https://techblog.constantcontact.com/software-development/scrum-and-raci/.
SCRUM
бизнес
13.06.2022
Раскладка клавиатуры
Вы можете поменять раскладку клавиатуры на привычную, для этого выберите в настройках: Клавиатура
-> Источники ввода
-> Русская ПК
(вместо просто Русская
)
Оболочка по умолчанию
Мне больше нравится bash
, но по умолчанию теперь zsh
. Чтобы сменить обратно на bash
, просто выполните в терминале команду:
chsh -s /bin/bash
Софт
Менеджер пакетов
Первым делом рекомендую поставить brew - с ним установка программного обеспечения становится гораздо проще.
Офис
Не торопитесь ставить офисный пакет Microsoft (Word, Excel), попробуйте Pages и Numbers от Apple. Они бесплатны и хорошо понимают форматы docx, xlsx.
Терминал
Вместо стандартного терминала рекомендую использовать iTerm2 https://iterm2.com, он гораздо удобнее.
Архиватор
Я использую Keka. Платный, но понимает все необходимые форматы, работает шустро и со своей задачей справляется на ура.
macos
18.03.2022
SELECT CONCAT(table_schema, '.', table_name),
CONCAT(ROUND(table_rows / 1000000, 2), 'M') rows,
CONCAT(ROUND(data_length / ( 1024 * 1024 * 1024 ), 2), 'G') data,
CONCAT(ROUND(index_length / ( 1024 * 1024 * 1024 ), 2), 'G') idx,
CONCAT(ROUND(( data_length + index_length ) / ( 1024 * 1024 * 1024 ), 2), 'G') total_size,
ROUND(index_length / data_length, 2) idxfrac
FROM information_schema.TABLES
ORDER BY data_length + index_length DESC
LIMIT 50;
Источник: https://highload.today/vybor-samykh-bolshikh-tablits-iz-mysql/
mysql
07.03.2022
Telegram (телеграм, телега) имеет большое количество интересных особенностей, что выгодно отличает его от других мессенджеров (чатов). Расскажу вам, как настроить его под себя и на что обратить внимание:
Интерфейс
- У телеграма есть возможность переключиться на русский язык. Для этого, при установке можно выбрать “Продолжить на русском” или позже нажать на гамбургер-меню (три полоски слева сверху), нажать Settings, в появившемся окне прокрутить вниз и выбрать язык в Language.
Поиск
Т.к. это мессенджер, то часто необходимо найти какое-то сообщение. В телеграме сообщение (а также файлы), можно найти множеством способов:
-
Для глобального поиска можно нажать на строку “Поиск” сверху слева - будет поиск по названиям и содержимому всех ваших групп и каналов, также будет осуществлен поиск по названиям публичных групп и каналов.
-
Для поиска в конкретной группе (на компьютере) выделите группу слева и нажмите Ctrl+F. Теперь поиск будет осуществляться только в этой группе. Для отмены - можете нажать Esc или нажать на крестик рядом с группой.
-
Для поиска в конкретной группе (на смартфоне) зайдите в группу, нажмите на ее заголовок и нажмите кнопку “Поиск”. Теперь поиск будет осуществляться только в этой группе. Для отмены - нажмите “Отмена” рядом со строкой поиска.
-
В телеграме есть поиск по файлам, изображениям, ссылкам - для этого нажмите на заголовок группы и выберите соответствующий пункт. Работает и на смартфоне и на компьютере. Кстати, если вы нажмете на значок “лупы”, когда просматриваете один из этих разделов, то поиск сузится только до него. Например, можно искать в определенном чате только по ссылкам, это поможет найти искомое быстрее.
-
Также, вы можете посмотреть, в каких еще группах вы пересекаетесь с человеком, с которым переписываетесь. Для этого, зайдите в чат с этим человеком, нажмите на заголовок чата и выберите пункт “Группы”.
Удобство
-
В телеграме есть “Избранное” (это то же самое, как в vkontakte пишешь сам себе). На айфоне нажмите на шестеренку настроек снизу справа – в меню увидите синюю закладку. На андроиде - кликайте на три полоски наверху слева и нажимайте на одноименный пункт меню. Можно хранить любые файлы и текст, он виден только вам.
-
Все важные файлы и сообщения вы можете пересылать в “Избранное”, для этого нажмите правой кнопкой на сообщении (или долгое нажатие на смартфоне) и выберите “Переслать”. После этого вы можете отправить это сообщение в любой чат, включая Избранное.
-
Также, вы можете использовать функцию “Ответить”. Аналогично, правой кнопкой на сообщении (или долгое нажатие на смартфоне) и выберите “Ответить”. Плюс использования этой функции - можно подниматься по сообщениям, чтобы увидеть всю историю “отвеченных”.
-
Если сообщение доставлено на сервер - у него одна галочка. Если прочитано - у него две галочки.
-
Вы можете скопировать изображение в буфер обмена (на Windows комбинация Windows + SHIFT + S) и с помощью комбинации CTRL + V на строке ввода сообщения сразу вставить в чат, без сохранения в файл.
-
Вы можете удалить или отредактировать свое сообщение, если отправили что-то не то. При этом, прошлое сообщение не будет видно. При удалении - оно просто исчезнет, при редактировании - для всех будет помечено как измененное.
-
Вы можете закрепить любой чат. Для этого нажмите правой кнопкой (или долгим нажатием на смартфоне) на нем и выберите “Закрепить чат”. Теперь он будет отображаться сверху всех чатов. Если закрепить несколько, то их можно перетаскиванием отсортировать в нужном вам порядке.
-
Аналогично, можно в любом чате закреплять множество сообщений. При этом, в группах закрепленные сообщения видны всем, а в личном чате можно выбрать, показывать ли. По нажатию на закрепленное сообщение - вы переместитесь к нему.
Уведомления
-
В любом чате можно выключить уведомления. Это полезно, чтобы в рабочее время вас не отвлекали сообщениями или если идет активная переписка, которую вы захотите прочитать потом. Заходим в любой чат, нажимаем на заголовок, листаем вниз и жмем переключатель “Уведомления” - чтобы выключить. Советую оставлять уведомления только в тех чатах, которые критично важны, остальное лучше потом самому почитать ;) На смартфоне уведомления находятся в пункте “Звук” (также, после клика на заголовок чата).
-
Если вам важно, чтобы человек получил уведомление с выключенным звуком, то используйте “обращение”. Просто поставьте собачку (@) и начните набирать имя человека. Будет подсказка, просто выберите ее из списка. Человек увидит это сообщение.
-
Если вы не хотите беспокоить человека именно сейчас, но важно отправить сообщение и не забыть (например, подумали ночью, что стоит что-то написать), то можно написать сообщение и правой кнопкой по “отправить” (или долгое нажатие на смартфоне) и появится выбор отложенного сообщения (можно запланировать на конкретное время, допустим на 09:00 следующего дня).
-
Отложенные сообщения можно отправлять и в “Избранном” - они будут действовать как напоминания. Работает аналогично, но видите их только вы.
Плюшки
-
Изображения можно отправлять как файлы (без сжатия) или как изображения (со сжатием). Можно отправить сразу несколько, они будут собраны в фотогалерею. Ограничений по количеству файлов нет. Максимальный размер файла на текущий момент - 2 гб. Да, можно и фильмы закидывать, если помещаются :)
-
В телеграме есть аудио и видеосвязь. Звонить могут любые пользователи друг другу (если не отключили в настройках). В группах звонить могут только администраторы. После того, как администратор группы начал аудио-/видеочат, то к нему могут присоединиться другие участники. При этом, по умолчанию подключается с выключенным микрофоном (синяя кнопка), по нажатию на кнопку будет включен микрофон (зеленая кнопка).
-
Если любите мемы или не хотите идти в гугл, то у телеграма есть специальные команды. Просто начните писать новое сообщение со слов @pic или @gif и через пробел начните набирать желаемое - вам будет предложено несколько вариантов, которые вы можете быстро отправить. Например, “@gif собака”.
-
В телеграме огромнейшее количество стикеров и все бесплатны. Есть обычные, есть анимированные. Для поиска нажмите на кнопку кружка с загнутым уголком, поднимите вверх и появится строка для поиска стикер-паков. Можно добавить стикер-пак к себе и общаться картинками :)
-
В телеграме есть опросы. Создать их можно только с компьютера. Для создания нажмите на три точки рядом с названием чата и выберите “Создать опрос”.
-
Если вам мешает какой-то чат, то вы можете отправить его в архив (как обычно правой кнопкой или долгим нажатием на смартфоне). Архив - это список чатов, который не занимает много место и у которых количество непрочитанных суммируется.
Папки
-
Папки позволяют отделить по смыслу ваши чаты. Например, можно создать такие папки - “Работа”, “Друзья”, “Мое”. Для создания перейдите в Настройки / Папки с чатами. В этом разделе можно создать эти папки.
-
Далее, заходите в любую папку и добавляйте чаты, которые хотите там видеть. Допустим, вы можете добавить рабочие чаты в в “Работа” и там будут только они. Если же у вас много рабочих чатов, то выберите “Контакты”, “Не контакты”, “Группы”, “Каналы”, “Боты”, сохраните и в списке ниже ИСКЛЮЧИТЕ чаты с вашими друзьями. Как видите, очень гибко можно настраивать видимость каналов. Далее, в течение рабочего дня у вас будут накапливаться чаты с друзьями и когда вы будете готовы пообщаться, то откроете эту папку и посмотрите, что вам писали.
-
Теперь к папке “Мое”. Довольно часто хочется разделить “Избранное” на несколько частей. Для этого вы можете создать приватный канал (сверху справа создание), нажмите “Создать канал”, введите название и переключите “Ссылка” на “Частная”. После того, как вы это создадите, никому не давайте ссылку на этот канал и вы можете ее использовать как дополнительное избранное. Можно создать несколько таких каналов и складывать туда какие-то свои файлы, фотосессии и все что вы не хотите потерять. Не забудьте исключить эти каналы из всех остальных папок, если это необходимо.
Советы
- Файлы всегда остаются на сервере телеграм (если вы их не удалите сами), даже если вы очистите их с вашего телефона. Для уменьшения объема занимаемой памяти советую сделать следующее - Настройки / Данные и память / Использование памяти. В этом разделе “Хранить файлы” и “Максимальный размер кэша” поставьте в минимальное значение.
Вопрос/ответ
- Чем отличается группа и канал? В группе можно писать сообщения, в канале вы только читаете их.
Если есть предлоджения, что еще добавить в статью, пишите мне https://t.me/crusat
01.03.2022
Все просто, используйте параметры -A<число>
и -B<число>
, например:
grep -A5 -B5 searchstring
bash
14.01.2022
Внесите в ваш docker-compose.yml
следующие изменения и оставьте открытыми порты (80 и 443) только в сервисе nginx-proxy
и добавьте VIRTUAL_HOST
и LETSENCRYPT_HOST
в environments
в ваш сервис (или сервисы), который слушает 80 порт (можно использовать и другие порты/настройки, см. ниже):
version: '2'
services:
nginx-proxy:
image: jwilder/nginx-proxy
container_name: nginx-proxy
ports:
- 80:80
- 443:443
restart: always
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
- ./vhost.d:/etc/nginx/vhost.d:ro
- ./data/certs:/etc/nginx/certs
- ./data/html:/usr/share/nginx/html
- ./proxy.conf:/etc/nginx/proxy.conf
nginx-proxy-letsencrypt:
image: jrcs/letsencrypt-nginx-proxy-companion
restart: always
environment:
- DEFAULT_EMAIL=crusat@yandex.ru
- NGINX_PROXY_CONTAINER=nginx-proxy
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- /etc/acme.sh
- ./vhost.d:/etc/nginx/vhost.d
- ./data/certs:/etc/nginx/certs
- ./data/html:/usr/share/nginx/html
server:
# ...
environment:
- VIRTUAL_HOST=example.ru
- LETSENCRYPT_HOST=example.ru
# ...
Создайте в корне файл proxy.conf
:
# HTTP 1.1 support
proxy_http_version 1.1;
proxy_buffering off;
proxy_set_header Host $http_host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $proxy_connection;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $proxy_x_forwarded_proto;
proxy_set_header X-Forwarded-Ssl $proxy_x_forwarded_ssl;
proxy_set_header X-Forwarded-Port $proxy_x_forwarded_port;
# Mitigate httpoxy attack (see README for details)
proxy_set_header Proxy "";
# additional
proxy_connect_timeout 3000;
proxy_send_timeout 3000;
proxy_read_timeout 3000;
send_timeout 3000;
Создайте файл vhost.d/default
:
## Start of configuration add by letsencrypt container
location ^~ /.well-known/acme-challenge/ {
auth_basic off;
auth_request off;
allow all;
root /usr/share/nginx/html;
try_files $uri =404;
break;
}
## End of configuration add by letsencrypt container
client_max_body_size 200m;
Также, если необходимо несколько доменов, то можно добавить прокси по имену домена, например, vhost.d/example.ru
:
## Start of configuration add by letsencrypt container
location ^~ /.well-known/acme-challenge/ {
auth_basic off;
auth_request off;
allow all;
root /usr/share/nginx/html;
try_files $uri =404;
break;
}
## End of configuration add by letsencrypt container
server_tokens off;
client_max_body_size 2000m;
Для дополнительной документации смотрите сюда: https://hub.docker.com/r/jwilder/nginx-proxy/
devops
docker
23.11.2021
brew install maven
git clone https://github.com/camelinaction/camelinaction2.git
cd camelinaction2/chapter1/file-copy
mvn compile exec:java
По итогу, файл будет скопирован из data/inbox/
в data/outbox/
Код, отвечающий за это:
public static void main(String args[]) throws Exception {
// create CamelContext
CamelContext context = new DefaultCamelContext();
// add our route to the CamelContext
context.addRoutes(new RouteBuilder() {
public void configure() {
from("file:data/inbox?noop=true").to("file:data/outbox");
}
});
// start the route and let it do its work
context.start();
Thread.sleep(10000);
// stop the CamelContext
context.stop();
}
Пример взят отсюда: https://habr.com/ru/company/redhatrussia/blog/352188/
apache camel
java
maven
11.07.2021
Создаем файл для прокидывания своих переменных окружения:
sudo vim /usr/local/bin/pipenv_m1
Со следующим содержимым (у вас может отличаться путь openssl и python):
#!/bin/bash
CFLAGS="-I /opt/homebrew/opt/openssl/include" LDFLAGS="-L /opt/homebrew/opt/openssl/lib" GRPC_PYTHON_BUILD_SYSTEM_OPENSSL=1 GRPC_PYTHON_BUILD_SYSTEM_ZLIB=1 /Library/Frameworks/Python.framework/Versions/3.9/bin/pipenv $@
Даем право на запуск:
sudo chmod +x /usr/local/bin/pipenv_m1
Потом настраиваем в PyCharm, идем в Preferences -> Tools -> Python Integrated Tools (или просто ищем в настройках по слову pipenv) и в разделе Pipenv ставим следующий путь:
/usr/local/bin/pipenv_m1
Нажимаем ОК и пробуем установить из PyCharm виртуальное окружение через Pipenv. Все должно работать.
macos
python
27.06.2021
После настройки под себя воркфлоу в джире, пришлось довольно долго искать причины того, что при переключении в статус готово (зеленый) задача продолжала отображаться в стандартном фильтре “Открытые задачи”.
Решение оказалось довольно простое, при редактировании бизнес-процесса в переходах между статусами делаем следующее:
Из любого в зеленый - добавляем post-функцию “Обновить поле” и выставляем “Решение” на “Done”.
Из зеленого в не зеленый - добавляем post-функцию “Обновить поле” и выставляем “Решение” на “Не заполнено”.
Сохраняем бизнес-процесс и теперь, чтобы скрыть решенные задачи, можно перещелкать их на “сделать”/”готово” или аналогичным образом согласно вашим бизнес-процессам.
P.S. Обратите внимание, что если вы сами добавляли свои “Решения”, то выбирать надо именно “Done” - ваши не отработают нужным способом.
jira
24.12.2020
Например, ругается на zlib, хотя он установлен:
File "/usr/local/Cellar/python@3.7/3.7.9_2/Frameworks/Python.framework/Versions/3.7/lib/python3.7/distutils/command/build_ext.py", line 340, in run
self.build_extensions()
File "/private/var/folders/3r/04yr8dd57896ccmx1f86ptnr0000gn/T/pip-install-lmm5ssql/Pillow/setup.py", line 694, in build_extensions
raise RequiredDependencyException(f)
__main__.RequiredDependencyException: zlib
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/private/var/folders/3r/04yr8dd57896ccmx1f86ptnr0000gn/T/pip-install-lmm5ssql/Pillow/setup.py", line 918, in <module>
raise RequiredDependencyException(msg)
__main__.RequiredDependencyException:
The headers or library files could not be found for zlib,
a required dependency when compiling Pillow from source.
Please see the install instructions at:
https://pillow.readthedocs.io/en/latest/installation.html
То можно сделать следующее:
python3 -m pip install --user --force-reinstall pip
После этого у меня все установилось. Если не поможет - то можно понизить версию python через brew и не забывайте про brew doctor.
python