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

Kiana Khansmith

if i look back, i am lost

祝日 / Permanent Vacation

tannertan36
occasionally subtle
Peter Solarz

Love Begins
Misplaced Lens Cap
tumblr dot com
he wasn't even looking at me and he found me

oozey mess
YOU ARE THE REASON

blake kathryn
we're not kids anymore.

@theartofmadeline
Today's Document
Jules of Nature
RMH

pixel skylines
Sweet Seals For You, Always

seen from Hong Kong SAR China

seen from Italy
seen from Brazil
seen from Türkiye
seen from United States

seen from Singapore
seen from Malaysia

seen from Germany
seen from Morocco

seen from Türkiye
seen from Germany

seen from United States

seen from Malaysia

seen from United States

seen from United Kingdom
seen from Germany

seen from Spain

seen from Netherlands
seen from Germany
seen from T1
@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

Anya is live and ready to show you everything. Watch her strip, dance, and perform exclusive shows just for you. Interact in real-time and make your fantasies come true.
Free to watch • No registration required • HD streaming
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;

Anya is live and ready to show you everything. Watch her strip, dance, and perform exclusive shows just for you. Interact in real-time and make your fantasies come true.
Free to watch • No registration required • HD streaming
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__ )

Anya is live and ready to show you everything. Watch her strip, dance, and perform exclusive shows just for you. Interact in real-time and make your fantasies come true.
Free to watch • No registration required • HD streaming
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.