Skip to content

Instantly share code, notes, and snippets.

View inesusvet's full-sized avatar
🇬🇧
You know: fish, chips, cup 'o tea, bad food, worse weather, Mary flippin Poppins

Ivan Styazhkin inesusvet

🇬🇧
You know: fish, chips, cup 'o tea, bad food, worse weather, Mary flippin Poppins
View GitHub Profile
@inesusvet
inesusvet / iterator.py
Last active December 18, 2015 18:39
Сложная часть была в том чтобы возвращать через yield пару ключ+значение и сцеплять ее с текущей последовательностью. Отлично помогло в этом деле сложение списков
#!/bin/python
def flatter(items):
"""Реккурсивный итератор.
Обходит все ключи в словаре, работает со спискам любой длины.
Исходный словарь предполагается без вложенных словарей.
>>> d = {'a': [2, 5, 6], 'b': [8, 3, 6]}
>>> map(dict, flatter(d.items()))
[{'a': 2, 'b': 8}, {'a': 2, 'b': 3}, {'a': 2, 'b': 6}, {'a': 5, 'b': 8}, {'a': 5, 'b': 3}, {'a': 5, 'b': 6}, {'a': 6, 'b': 8}, {'a': 6, 'b': 3}, {'a': 6, 'b': 6}]
@inesusvet
inesusvet / class_attr_resolving
Created June 28, 2013 08:07
Задача в том чтобы иметь объяснение почему в строке 4 нет ошибки, в то время как в строке 8 значения различаются
In [1]: class Foo(object):
...: attr = {'initial_state': True}
...: def bar_class(self):
...: self.attr['initial_state'] = False
...: def bar_instance(self):
...: self.attr = {'initial_state': False}
...:
In [2]: foo = Foo()
@inesusvet
inesusvet / run_coverage.sh
Created July 3, 2013 14:32
Покрытие это добро!
#!/bin/sh
# Requirements: `pip install nose coverage`
# ЗАМЕНИТЬ
# <pymodule_name> - название python-модуля для прогона тестов
# <tests_dirname> - название папки где храним тесты
# <webserver_adderss> - поднимаем на dev-машине вебсервер и путь отдает статику по этому имени из /tmp/coverage
# ...
# PROFIT!
/*
Макдак продает нагитсы в коробках по 6, 9 или 20 кусочков.
Возможно купить 15 кусочков (одна коробка 6 кусочков и одна 9), но не возможно купить ровно 16 кусочков.
Напишите функцию McNuggets, которая принимает один аргумент, n, и возвращает true, если возможно купить такое количество кусочков комбинируя упаковки по 6, 9 и 20 кусочков в каждой, иначе возвратить false.
*/
var isDivisible = function(number, modulo) {
return (number % modulo) === 0;
};
@inesusvet
inesusvet / 55-facts-and-fallacies.py
Last active August 22, 2016 08:50
Список фактов и заблуждений профессионального программирования от Роберта Гласса. Использую как post-commit-git-hook, чтобы не забывать
# -* coding: utf-8 -*-
u"""
1. Самый важный фактор в разработке ПО – это не методы и средства, применяемые программистами, а сами программисты.
2. По результатам исследования персональных отличий лучшие программисты до 28 раз превосходят слабейших. Если учесть, что оплата их труда никогда не бывает соразмерной, то лучший программист и есть самое выгодное приобретение в индустрии ПО.
3. Если проект не укладывается в сроки, то добавление рабочей силы задержит его еще больше.
4. Условия труда оказывают сильное влияние на продуктивность и качество результата.
5. Рекламный звон вокруг инструментов и методов это чума индустрии ПО. Большая часть усовершенствований средств и методов приводит к увеличению производительности и качества примерно на 5–35%. Но многие из этих усовершенствований были заявлены как дающие преимущество «на порядок».
6. Изучение нового метода или средства сначала понижает производительность программистов и качество продукта. Пользу из обучения можно извлечь только после того, как пройдена крив
@inesusvet
inesusvet / user-admin.py
Created September 30, 2016 16:59
Создание linux-пользователя по шаблону
# ~*~ coding: utf-8 ~*~
import datetime
import os
import sys
import subprocess
"""
Документация по модулю subprocess, который позволяет вызывать другие процессы,
писать им в stdin, читать из stdout и stderr, проверять код их завершения
https://docs.python.org/2/library/subprocess.html
@inesusvet
inesusvet / colored_formatter.py
Last active October 13, 2016 20:57
Форматтер для разноцветных записей в логах
from __future__ import print_function
import logging
class ColoredFormatter(logging.Formatter):
"""
See more colors and styles at http://stackoverflow.com/a/21786287
"""
@inesusvet
inesusvet / walk-game.py
Created March 14, 2017 10:41
Игра-бродилка
"""
Имеется лабиринт, нужно провести игрока к сокровищу
"""
import os
LOCATION_FILENAME = '.location'
TEST_LOCATION = [
[1, 1, 1],
[1, 0, 1],
# -* coding: utf-8 -*-
"""
Memento
Не нарушая инкапсуляцию, определяет и сохраняет внутреннее состояние объекта и позволяет позже восстановить объект в этом состоянии
Chain of responsibility
Избегает связывания отправителя запрос с его получателем, давая возможность обработать запрос более чем одному объекту. Связывает объекты-получатели и передает запрос по цепочке пока объект не обработает его
Observer
@inesusvet
inesusvet / watch_bro.py
Created June 24, 2017 20:18
Watch dog which knows only one trick
"""
Watchdog which can do one trick only - to sniff for a pattern in a log file and
"bark" by running some command. The program won't stop after "barking".
Usage:
python watch_bro.py <filename> <pattern> <command>
filename: A file to watch for changes
pattern: A string to look for in the file
command: What to execute when the pattern occurs