Создать случайный пароль по 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

Discoholic 🪩

PR's Tumblrdome
hello vonnie
$LAYYYTER
I'd rather be in outer space 🛸
2025 on Tumblr: Trends That Defined the Year

JVL
cherry valley forever
Stranger Things
Misplaced Lens Cap
Show & Tell
art blog(derogatory)
Three Goblin Art
d e v o n

ellievsbear
tumblr dot com
Peter Solarz
TVSTRANGERTHINGS
styofa doing anything
he wasn't even looking at me and he found me
seen from United States
seen from T1

seen from United States

seen from Mexico

seen from United Kingdom
seen from United States
seen from Vietnam
seen from New Zealand
seen from T1

seen from United States

seen from Egypt
seen from United States
seen from United States
seen from United States
seen from United States
seen from Brazil
seen from United States

seen from United States
seen from United States
seen from United States
@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.