Создать случайный пароль по regex
Например, пароль только из цифр:
LC_CTYPE=C tr -dc 0-9 < /dev/random | head -c 7 | xargs
При использовании спец. символов их нужно экранировать:
LC_CTYPE=C tr -dc 0-9\!\#\@ < /dev/random | head -c 7 | xargs
tumblr dot com

izzy's playlists!

Discoholic 🪩

#extradirty

★
Lint Roller? I Barely Know Her
Xuebing Du

Andulka
No title available
h
Not today Justin
"I'm Dorothy Gale from Kansas"
Keni
Cosimo Galluzzi
Claire Keane
Aqua Utopia|海の底で記憶を紡ぐ
YOU ARE THE REASON
Today's Document
occasionally subtle
The Stonewall Inn

seen from United States
seen from Ireland
seen from Poland
seen from Malaysia

seen from Greece

seen from Malaysia

seen from Türkiye
seen from Malaysia

seen from United States
seen from United Kingdom

seen from Malaysia
seen from United States

seen from Iraq
seen from Maldives

seen from United Kingdom

seen from Poland

seen from Türkiye
seen from United States
seen from Ecuador

seen from Brazil
@dev-storage
Создать случайный пароль по regex
Например, пароль только из цифр:
LC_CTYPE=C tr -dc 0-9 < /dev/random | head -c 7 | xargs
При использовании спец. символов их нужно экранировать:
LC_CTYPE=C tr -dc 0-9\!\#\@ < /dev/random | head -c 7 | xargs
psql: полезные команды
\c my_database - выбрать БД
\d+ - список таблиц с размером на диске
\d table_name - список колонок указанной таблицы с типами, индексами и ключами
pandas: удаление связанных таблиц при перезаписывании
При использовании метода DataFrame.to_sql(if_exists='replace') в PostgreSQL, при наличии у таблицы внешних ключей получим ошибку: sqlalchemy.exc.InternalError: (psycopg2.InternalError) cannot drop table session because other objects depend on it. Чтобы её исправить, можно использовать следующий хак:
from sqlalchemy.schema import DropTable from sqlalchemy.ext.compiler import compiles @compiles(DropTable, "postgresql") def _compile_drop_table(element, compiler, **kwargs): return compiler.visit_drop_table(element) + " CASCADE"
Теперь при генерации запросов DROP TABLE SQLAlchemy будет добавлять CASCADE, что вызовет каскадное удаление всех связанных таблиц.
На мой взгляд, такой подход, хоть он и интересен, стоит использовать только при разработке. Для практических нужд лучше написать SQL-запрос, положить его в SQL-файл и выполнять прямо перед сохранением. Так в программе будет меньше магии, что упростит дальнейшую её поддержку.
postgres: получить описание таблицы
psql:
\c my_db \d+ my_table_name
Описание конкретной колонки через SQL:
SELECT DATA_TYPE FROM information_schema.columns WHERE table_name = 'tbl_name' AND COLUMN_NAME = 'col_name'
Constraints:
SELECT * FROM information_schema.table_constraints WHERE table_name = 'my_table'
postgresql: добавить пользователя с правами только на чтение
Создаём пользователя:
CREATE ROLE readonly_user password 'readonly_user';
Разрешаем пользователю подключаться к серверу:
ALTER ROLE readonly_user WITH LOGIN;
Выбираем БД, к которой хотим дать доступ:
\c mydb
Даём права на чтение всех таблиц:
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly_user;
Изменяем права по-умолчанию, чтобы таблицы, созданные в будущем, тоже были доступны для чтения:
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO readonly_user;
Разрешаем пользователю подключиться к БД:
GRANT CONNECT ON DATABASE mydb TO readonly_user;
Python: сравнение relativedelta
В текущей версии dateutil (2.6.0) разрешено сравнение двух объектов relativedelta. Кроме того, что это невозможно в принципе (что больше, relativedelta(days=30) или relativedelta(months=1) - зависит от того, какой взять месяц), полученный результат внезапно оказывается неоднозначным:
import dateutil from dateutil.relativedelta import relativedelta from datetime import date next_date = date(2016, 1, 1) birth_date = date(2010, 1, 1) give_before_months = 60 print 'dateutil.__version__', dateutil.__version__ print relativedelta(next_date, birth_date) print relativedelta(months=give_before_months) hren = 0 ok = 0 for i in xrange(10000): if relativedelta(next_date, birth_date) < relativedelta(months=give_before_months): hren += 1 else: ok += 1 print hren, ok print '-' * 10 a = relativedelta(next_date, birth_date) b = relativedelta(months=give_before_months) print a print b hren = 0 ok = 0 for i in xrange(10000): if a < b: hren += 1 else: ok += 1 print hren, ok
Вывод:
dateutil.__version__ 2.6.0 relativedelta(years=+6) relativedelta(years=+5) 5000 5000 ---------- relativedelta(years=+6) relativedelta(years=+5) 0 10000
Вместо этого нужно сравнивать даты:
birth_date + relativedelta(months=give_before_months) > next_date
Django: сделать dev-сервер общедоступным
python manage.py runserver ${PUBLIC_ID}:8000
Django Admin: reverse action url
reverse(’admin:myappname_myappmodelname_actions’, args=[model_id, action_name])
postgres: получить список значений поля, которые не на арабском
select field from my_table where field ~ '[^[\u0600-\u06FF ]]*'
Больше информации о пространствах Unicode для арабского языка
python: получить имя файла вызывающего модуля
Для этого можно использовать модуль inspect.
def print_calling_module_name(): frame = inspect.stack()[1] module = inspect.getmodule(frame[0]) print 'Called from module %s (module path: %s)' % ( module.__name__, module.__path__ )
bash: значение по-умолчанию для переменной
В примере ниже хотим взять текущую дату если дата не указана:
TARGET_DATE=${TARGET_DATE:-`date --iso-8601`}
Немного секретов less
источник
Кроме того, что вместо tail -f можно использовать less +F, оказывается, прямо из less можно открыть файл на редактирование, нажав v.
Небольшое преимущество для хакера: этот вызов не останется в истории команд :)
Параллельное выполнение команд в bash
источник
Для параллельного запуска используется &, а команда wait нужна для ожидания завершения:
((sleep 5 && echo "Slow complete") & (sleep 2 && echo "Fast complete") & wait) && echo "Completed"
Запускаем параллельно два "процесса": sleep 5 && echo "Slow complete" и sleep 2 && echo "Fast complete" и ждём. После того, как оба "процесса" завершатся, срабатывает следующая команда (echo "Completed")
Удалённое выполнение команды в ssh
источник
Когда нужно выполнить одну команду, просто передаём её параметром:
ssh user@host "ls -lah"
Если необходимо выполнить несколько команд, можно использовать следующий синтаксис:
ssh user@host <<'ENDSSH' # команды для запуска на удалённом хосте ENDSSH
Можно вкладывать команды и выравнивать скрипт для лучшей читаемости
ssh user@host <<-'ENDSSH' # команды для запуска на host ssh user@host2 <<-'END2' # команды для запуска на host2 wall <<-'ENDWALL' Error: Out of cheese ENDWALL ftp [email protected] <<-'ENDFTP' test test ls ENDFTP END2 ENDSSH
Параметр -t - чтобы прерывать удалённую команду при завершении ssh-сессии, например, по ^C.