InputHint — JQUERY/PHP плагин, добавляющий к полям ввода типа input показ подсказок (вариантов вводимого текста), с возможностью их выбора пользователем, и заполнения поля текстом из выбранной подсказки.
Buy on Gumroad |
Programmer — Interplanety
InputHint — JQUERY/PHP плагин, добавляющий к полям ввода типа input показ подсказок (вариантов вводимого текста), с возможностью их выбора пользователем, и заполнения поля текстом из выбранной подсказки.
Buy on Gumroad |
Для того, чтобы уменьшить объем длинной текстовой строки, например для снижения трафика при передаче текстовых данных через Интернет, ее можно сжать перед отправкой и разархивировать после получения. При этом объем передаваемых данных значительно снижается, по сравнению с передачей текстовых строк в их исходном виде.
Чтобы заархивировать текстовую строку в памяти, воспользуемся модулем zlib.
Для сжатия строки мы будем использовать функцию compress. Эта функция принимает во входном параметре строку байт и возвращает эту строку в сжатом виде.
1 2 3 4 5 6 7 8 9 10 11 12 |
import zlib long_text = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.' print('long_text', len(long_text)) long_text_compressed = zlib.compress(long_text.encode('utf-8')) print('long_text_compressed', len(long_text_compressed)) # long_text 445 # long_text_compressed 270 |
Как видно на простейшем примере, объем строки сократился более чем в полтора раза.
Для того, чтобы добавить вызов программы в контекстное меню Windows Explorer — «Мой компьютер», нужно отредактировать реестр windows.
Редактор реестра windows нужно вызвать с правами администратора и внести в него следующие изменения:
Читать далее «Как добавить вызов программы в контекстное меню Windows Explorer»
Виджет для WordPress плагина Elementor. Позволяет скрыть адрес вашей электронной почты под кнопкой и не показывать его на странице в явном виде, чтобы предотвратить его сбор ботами и пауками для спама.
Buy on Gumroad
Читать далее «Виджет для Elementor: кнопка «показать E-mail»»
Чтобы получить первый найденный по определенному условию элемент из списка или None, если ни одного такого элемента не найдено, можно использовать следующую конструкцию:
1 2 3 4 |
elements_list = ['One', 'Two', 'Three'] element = next(iter([e for e in elements_list if e in ['One', 'Two']]), None) print(element) # 'One' |
Если результат в списке не найден, будет возвращено None
1 2 3 |
element = next(iter([e for e in elements_list if e in ['Four', 'Five']]), None) print(element) # None |
Некоторые параметры в GIMP можно задать используя файл с настройками «по умолчанию» gimprc.
Для того, чтобы быстро и удобно создавать директории с именем состоящим из текущей даты средствами Total Commander:
1 2 |
set dir_name=%date:~6,4%.%date:~3,2%.%date:~0,2% md "%1%dir_name%" |
В первой строчке скрипта формируется имя для директории в формате YYYY.MM.DD.
Вторая строчка скрипта создает директорию с указанным именем по пути, переданном во входящем параметре %1.
Читать далее «Как создать директорию с текущей датой в Total Commander»
Для того, чтобы узнать, какая версия интерпретатора Python используется для выполнения кода, можно воспользоваться командой version_info из модуля sys:
1 2 3 4 |
import sys print(sys.version_info) # sys.version_info(major=3, minor=5, micro=2, releaselevel='final', serial=0) |
В текущем примере используется версия Python 3.5.2.
Создание точек восстановления Windows — хороший способ помочь в восстановлении своего компьютера в случае возникновения каких-либо неприятностей вроде заражения вирусами или рекламными ботами.
Точка восстановления — это слепок системы, в котором фиксируется ее текущее состояние (настройки, оформление, установленные программы). Создав и сохранив такую точку, можно в любой момент вернуть систему к зафиксированному в ней состоянию.
Если вы случайно открыли какое-нибудь подозрительное вложение в почте, и теперь то и дело на экране появляются рекламные баннеры (в систему установился рекламный бот) — с помощью точек восстановления можно вернуть систему «в прошлое», до момента заражения ботом. Точки восстановления — не панацея абсолютно от всех неприятностей, но очень часто «откат» системы спасает положение и возвращает компьютер в рабочее состояние.
Читать далее «Автоматическое создание точек восстановления Windows по расписанию»
Список классов, определенных в *.py — файле можно получить с помощью встроенного модуля inspect.
Например для модуля test_cls:
1 2 3 4 5 6 7 |
## test_cls.py class Test1: pass class Test2: pass |
можно получить список классов следующим образом:
1 2 3 4 5 6 7 8 |
## test.py import inspect classes = [cls_name for cls_name, cls_obj in inspect.getmembers(sys.modules['test_cls']) if inspect.isclass(cls_obj)] print(classes) # ['Test1', 'Test2'] |
При разработке онлайн-проектов часто возникает необходимость сохранить html-страничку в виде документа, который можно использовать отдельно, например, отправить по электронной почте, просматривать и редактировать оффлайн. Удобным способом сохранения html таким образом является экспорт в один из наиболее часто используемых текстовых форматов — doc.
Для экспорта html документа в формат doc можно воспользоваться открытым бесплатным php-модулем «html_to_doc». С его помощью можно сохранить html в документ doc, который будет корректно обработан текстовым редактором MS Word. Если в html-страничке присутствуют изображения, они будут встроены в документ doc.
PHP-модуль можно скачать по адресу https://github.com/Korchy/html_to_doc
Если имеется список вида:
1 |
my_list = ['one', 'two', 'three', 'four'] |
Для того, чтобы пройти по элементам списка попарно от текущего к следующему, можно использовать такой код:
1 2 |
for first, next in zip(my_list, my_list[1:]): print(first, next) |
Результат выполнения:
1 2 3 |
one two two three three four |
Некоторые функции принимают в параметрах переменное число аргументов *args, как например функция перебора вариантов itertools.product.
1 2 3 |
list(itertools.product(['a', 'b'], [1, 2])) # [('a', 1), ('a', 2), ('b', 1), ('b', 2)] |
Для того, чтобы передать в такую функцию параметры одним списком, нужно использовать оператор *
1 2 3 4 5 |
my_list = [['a', 'b'], [1, 2]] list(itertools.product(*my_list)) # [('a', 1), ('a', 2), ('b', 1), ('b', 2)] |
Преобразование смешанной строки, в которой заданы, как отдельные числа, так и диапазоны чисел, в полный список значений можно сделать следующим образом:
Пусть имеется исходная строка
1 |
src = '1, 3-5, 8' |
Разобьем строку по разделителю — запятым:
1 |
linearr = [s.strip() for s in re.split(r'[,;]+| ,', src) if s] |
Разделим получившийся список на два списка. В первый список поместим только отдельные значения. Во второй — значения преобразованные из диапазонов чисел.
1 2 |
linearrframes = [int(i) for i in linearr if '-' not in i] linearrdiapasones = sum([list(range(int(i.split('-')[0]), int(i.split('-')[1]) + 1)) for i in linearr if '-' in i], []) |
Объединим полученные списки в один и выкинем повторяющиеся значения.
1 2 |
linearrframes.extend(linearrdiapasones) print(list(set(linearrframes))) |
Полный код преобразования:
1 2 3 4 5 6 7 8 9 |
src = '1, 3-5, 8' print(src) linearr = [s.strip() for s in re.split(r'[,;]+| ,', src) if s] linearrframes = [int(i) for i in linearr if '-' not in i] linearrdiapasones = sum([list(range(int(i.split('-')[0]), int(i.split('-')[1]) + 1)) for i in linearr if '-' in i], []) linearrframes.extend(linearrdiapasones) print(list(set(linearrframes))) # '1, 3-5, 8' # [1, 3, 4, 5, 8] |
PHP поддерживает механизм позднего статического связывания. Полное имя класса с учетом статического наследования можно получить с помощью вызова функции:
1 |
get_called_class() |
На примере:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php class Parent { public static function getName() { echo get_called_class(); } } class Child extends Parent { } Parent::getName(); Child::getName(); ?> // Parent // Child |
Для того, чтобы сделать сдвиг значений в списке — переставить значение стоящее на первом месте списка в его конец и наоборот, нужно переформатировать список по двум срезам.
Сдвиг для списка lst:
1 |
lst = [1,2,3,4,5] |
сдвиг вперед:
1 2 3 4 |
lst = lst[1:]+lst[:1] print(lst) [2, 3, 4, 5, 1] |
сдвиг назад:
1 2 3 4 |
lst = lst[-1:]+lst[:-1] print(lst) [1, 2, 3, 4, 5] |
При необходимости циклического сдвига, данную команду следует повторить нужное число раз.
Для того, чтобы объекты из словаря сохранялись в json в удобном для просмотра виде, каждый класс объекта должен иметь функцию __repr__, возвращающую текстовое представление объекта.
1 2 3 4 5 6 7 8 |
class TestObj: def __init__(self, x, y): self.__x = x self.__y = y def __repr__(self): return "TestObj({x},{y})".format(x = self.__x, y = self.__y) |
Пример словаря с объектами:
1 |
datadict = {"group": {"Object1": TestObj(10,22), "Object2": TestObj(36,74)}} |
Сохранение словаря с объектами в json:
1 2 3 4 |
with open("c:/file.json", "w", encoding="utf-8") as file: import pprint pprint.pprint(datadict, indent=4, stream=file) file.close() |
Кортежи в python могут быть вложенными.
Если просто добавить один кортеж к другому через операцию конкатенации «+», python сольет значения кортежей:
1 2 3 4 5 6 7 8 |
a = ((1,2), (3, 4)) print(a) # ((1, 2),(3, 4)) b = (5, 6) print(b) # (5, 6) a += b print(a) # ((1, 2), (3, 4), 5, 6) |
Для того, чтобы добавляемый кортеж стал вложенным, нужно после добавляемого кортежа поставить запятую «,»
1 2 |
a += b, print(a) # ((1, 2), (3, 4), (5, 6)) |
Получение координат центральной точки выпуклого многоугольника (полигона), так называемого «центроида», если известны координаты его точек (вершин):
1 2 3 4 5 6 7 |
def centroid(vertexes): _x_list = [vertex[0] for vertex in vertexes] _y_list = [vertex[1] for vertex in vertexes] _len = len(vertexes) _x = sum(_x_list) / _len _y = sum(_y_list) / _len return(_x, _y) |
Входным параметром в функцию подается кортеж с координатами точек многоугольника. Функция возвращает кортеж с координатами центроида:
1 2 |
polygon_data = ((0, 0), (1, 0), (1, 1), (0, 1)) print(centroid(polygon_data)) # (0.5, 0.5) |
Системы управления и контроля версий на сегодня практически обязательны для любого проекта. Одной из известнейших и наиболее популярных систем управления версиями является Git. Рассмотрим работу с Git в связке с GitHub — крупнейшим хостингом для размещения IT-проектов совместной разработки. GitHub позволяет бесплатно размещать на своем сервере проекты с открытым исходным кодом.
В данном примере рассматривается работа с Git на операционной системе Windows.
Что же нужно, для того, чтобы начать практическую работу с Git:
Читать далее «Что нужно, чтобы начать работать с Git и GitHub»
Одной из особенностей циклов for в Python является то, что итерируемая переменная (счетчик) не относится к локальной области видимости цикла.
Например, после исполнения следущего участка кода:
1 2 3 4 5 6 7 |
a = 0 print(a) b = [1,3,7] print(b) for a in b: pass print(a) |
Переменная a, объявленная до цикла for, изменит свое значение, если в качестве счетчика цикла объявить переменную с таким же именем «a».
1 2 3 4 |
# вывод > 0 # print(a) > [1, 3, 7] # print(b) > 7 # print(a) после выполнения цикла |
При построении кода об этой особенности нужно обязательно помнить, во избежание записи в ранее объявленную переменную значений итераторов цикла for.
Для того, чтобы замерить, сколько времени уходит на выполнение участка кода, нужно заключать проверяемый код в следующую конструкцию:
1 2 3 4 5 6 7 |
<?php $StartTime = microtime(true); // Проверяемый код sleep(rand(5,10)); // Конец проверяемого кода echo "Выполнено за: ".(microtime(true)-$StartTime)." сек."; ?> |
Результат выполнения примера — вывод на экран:
Выполнено за: 8.9997079372406 сек.
Символические ссылки в Windows, начиная с версии Vista, создаются с помощью команды mklink.
Для того, чтобы сделать в Total Commander кнопку, создающую символическую ссылку на выделенный файл, нужно выполнить следующие шаги:
1 |
mklink %2 %1 |
Эта команда создает символическую ссылку на файл, переданный в первом входном параметре, и размещает ее в месте, переданном во втором входном параметре.
1 |
%P%N %T%N |
Сохранить изменения.
%P — путь к файлу под курсором в активной панели
%N — имя файла под курсором в активной панели
%T — путь к месту, открытому во второй (неактивной) панели
В результате по нажатию созданной кнопки во второй вкладке будет создаваться символическая ссылка на файл под курсором в активной вкладке с таким же именем файла.
В языке Python не предусмотрено внутреннего синтаксиса для многострочного комментирования кода (наподобие /* … */ в других языках). Есть два варианта обхода этой проблемы:
1 2 3 4 |
''' это многострочный комментарий вторая строка ''' |
Минут данного метода в том, что подобный комментарий остается строковой константой и встраивается в конечный код.
Для снятия комментария со строк, нужно нажать ту же самую комбинацию клавиш на выделенных закомментированных строчках повторно.