Pull to refresh
10
0
Игорь Карпов @lilo_panic

User

Send message

А я имел вопиющую наглость жаловаться на ручной реболлинг MS88SF3. Поражаюсь вашему терпению. Только сделав что-то примерно похожее на ваше изделие можно прочувствовать всю боль. Год назад я бы вас не понял.

Конечно же всё слиплось, шарики через 1 нужно было ставить и греть два раза. Или думать головой и заказать трафарет.
Конечно же всё слиплось, шарики через 1 нужно было ставить и греть два раза. Или думать головой и заказать трафарет.
Удачный экземпляр. И таких 5 штук.
Удачный экземпляр. И таких 5 штук.

Второго зовут Jason Becker. Один из моих любимых гитаристов.
Для Continuous Delivery есть еще Drone. Вы его рассматривали с каких-нибудь сторон? Спасибо.
Сначала пошумят немного про Telegram, потом показательным образом передумают блокировать, а про VPN большинство на радостях забудет, типа: «спасибо, что хоть Telegram оставили».
Предположение.

Мне всегда было не понятно, почему все эти услуги привязываются к телефонному номеру, который всецело контролировать абонент ЛИЧНО не может. Значит привязывать услуги нужно к какой-либо личной информации. Ну, например, делать hmac(secret, message).

Но уж если это не катит, то:
(Эти решения мне кажутся очевидными, но вполне вероятно, что %s.)
1. IMSI при перевыпуске сим-карты меняется?
2. Получает ли банк вместе с СМС от абонента IMSI или другую информацию?

Если 1&&2 вопросы имеют утвердительный ответ, то, имхо, все просто: реципиент не будет рассматривать сообщения от неизвестного IMSI.
В противном случае нужно, чтобы все операторы бродкастили банкам о перевыпуске сим-карты, пусть отвязывает от нее все услуги.
На тему QuerySet'ов, когда я ковырял исходники трансифекса, нашел там занятную штуку:
class ChainerManager(models.Manager):
    """
    Reference: http://djangosnippets.org/snippets/562/
    """
    def __init__(self, qs_class=models.query.QuerySet):
        super(ChainerManager, self).__init__()
        self.queryset_class = qs_class

    def get_query_set(self):
        return self.queryset_class(self.model)

    def __getattr__(self, attr, *args):
        try:
            return getattr(self.__class__, attr, *args)
        except AttributeError:
            return getattr(self.get_query_set(), attr, *args)


Что позволяло делать:

NewsQuerySet(models.query.QuerySet):
    def live(self):
        return self.filter(state='published')

    def interesting(self):
        return self.filter(interesting=True)

NewsItem(models.Model):
    objects = ChainerManager(NewsQuerySet)

ChainerManager(NewsQuerySet).live().interesting()
[<NewsItem: ...>]
# ну или так:
NewsItem.objects.filter().live().interesting()
class GiveMeJS(object):    
    def __init__(self, *args, **kwargs):
        self.args = args

        for k, v in kwargs.items():
            setattr(self, k, v)

    def __call__(self, *args, **kwargs):
        for k, v in self.__dict__.items():            
            print ('%s: %s' % (k, v))


o = GiveMeJS(*[1, 2, 3], **{'test': '123', '1': 12})
o()


PythonJS пока не умеет импортить. Код выше прожевал только Brython, PythonJS не захотел понимать `.items()`. Пока далековато до питона на клиентсайде. Но в целом занятная тема.

P.S. 1 2
Тема с Brython заинтересовала. Кто-нибудь юзал это в реальных проектах? Как дела у него с другими либами? Как с производительностью?
Я могу ошибаться, но все же предположу, что основная проблема — в неправильной смысловой интерпретации методов encode && decode для str && unicode. Еще проблем добавляет проставленная по умолчанию кодировка. Если бы ее не было, а она всегда указывалась явно, то половина ошибок выглядела бы при чтении так: «я пытаюсь из байтов с кучей искейпов сделать utf8 при помощи ascii».

Ну и всегда есть наводящие вопросы. Какой смысл у encode для str? Какой смысл у encode для unicode? И decode для них? Что они должны вернуть? Я лично до сих пор путаюсь. Поэтому вывод могу сделать только один: unicode в питоне несамоочевиден. Например, постоянные проблемы с чтением файлов, что проще использовать
codecs.open("file", "r", "utf-8")

чем преобразовать это руками. Или всякие там
hashlib.md5(sentence.encode('utf8'))

А иногда бывают и ужасы при работе с чужими либами:
r['name'].encode('utf8').decode('string_escape')

Ну и классика:
mimetypes.guess_type(self.file.path.encode('utf8'))


Не много ли encode'ов для таких простых вещей? Вроде же utf8 везде использую, но все равно приходится encodить или decodить. Поэтому теряется даже желание что-то там понимать. Чаще писать encode, чем decode. В особо плохих случаях, когда много непривычных escape'ов, писать decode. Смысл? Понимание? Не желаю. Поэтому совершенно согласен с python3, хотя, справедливости ради, там эти проблемы с кодировками иногда бывают еще более замороченные, когда что-то с escape'ами нужно делать.
Когда случилась беда распознавать печатные документы, я подумал об этом же. Сразу родилась идея.

Например, на каждом документе в уголках листа расположить qr-коды, дублирующие информацию документа. Например, запихать в них json, содержащий помимо данных документа еще и id шаблона на каком-нибудь сервере, чтобы можно было поднести мобильник к печатному документу и получить его .docx эквивалент на мобильнике, или еще где. То есть, распознается код, из json выдергивается template_id, идем на somesite.com/templates/<template_id>/, скачивается шаблон, в него шаблонизатором загоняются данные из json, profit.

Если такую тему поставить на поток, например, на гос. уровне, то можно будет анализировать частоту обращений к разным шаблонам, опираясь на которую строить всякие разные графики напряженности взаимоотношений между компаниями и т.д…
Если каждый печатный документ снабжать своим номером, то можно еще и контролировать получение документа.
Можно пойти дальше, и содержимое qr-кода шифровать каким-нибудь алгоритмом, чтобы его вскрыть мог только получатель. Ну и само собой, тут получится только один большой qr-код.
И больше не надо сканировать документы — хватит всего лишь фото на память.

Правда, а что если в qr-коде запишут заведомо ложную информацию?..
С чего вы взяли, что циферки на каком-то сайте в интернете, отражают реальность?
Ни с чего. Очевидно, что говорить и писать они могут все, что угодно. Но «я ненавижу сплетни в виде версий» (с) и хочу опираться на что-то, что я смогу доказать, потому что утверждая что-либо, находящееся за гранью моего понимания и без доказательной базы, я могу попасть в глупое положение. Я просто копнул и тут же увидел несостыковку, о чем и написал. Но если вышенаписанное — правда, то должен быть и другой способ это доказать. Если это невозможно доказать прямым способом, то должны быть косвенные свидетельства, указатели. Они-то меня и интересуют.

Не смотря на то, что я терпеть не могу темы «заговоров» и все в этом духе, это выглядит на первый взгляд правдоподобно и логично. Но мне не понятна одна вещь. Если через резервный фонд происходит «сбор дани», то почему объем средств этого фонда уменьшился на 40млрд. с 2008 года?

Если включить паранойю и предположить, что эти средства были убраны «куда-то еще», с глаз долой, то не могу не поинтересоваться: куда? Там был упомянут "Фонд национального благосостояния", но он держится примерно на одном уровне.
Обычный гражданини — не аллигарх, не террорист…

Почему ваше определение содержит отрицание? Такое определение не может быть конструктивно.

Право — это уже из области юриспруденции… Закон приняли — право исчезло ;-)

Получается, что права человека — это не нечто фундаментальное, а просто запись на бумаге.

Мне не жалко, если кто — то что — то приобретает, но при этом у меня ничего не уменьшится =)

Площадь подконтрольного вам вашего личного пространства уменьшится.
Вы некорректно ставите вопрос. Тут важно не то, что потеряете вы, а что приобретет кто-то другой. Да и не совсем понятно, что такое «обычный гражданин».
Все вот кричат про авторское право, интеллектуальную собственность, незаконное копирование, и т.д. А по факту, эти товарищи будут копировать мою информацию, не спросив моего разрешения.

Я жадный, ни с кем своей тайной перепиской делиться не собираюсь. Это мое право. Можно ли «отнять» «тайну» — вопрос, подходящий скорее для философских бесед. Когда информацией обладает «кто-то еще», она перестает быть тайной автоматически. Это вроде как очевидно.
Интересно, а если они так просто нарушают права, декларированные в Конституции РФ, может они попросту не являются гражданами РФ? А если мои конституционные права, на которые я вроде как подписывался, не соблюдаются, то…

А вообще, закон сохранения энергии никто не отменял. Все подавленное в одном месте всенепременно вылезет и в другом. Все недовольство из сети перенесется обратно, а что же тогда будет — вопрос интересный. Такое впечатление, что эти ребятки просто нарываются, подкидывая такие провокации.
Как только я вижу ascii текст такой, сразу вспоминаются 7 лет упоротого MUDерства. Кстати, могли бы упомянуть о них в статье.
Считать кого-то идиотом, если это невынуждено неправильно. Это также плохо, как и много кода. Вообще, все невынужденное — это плохо.

Много раз замечал тенденцию, когда программисты думают, что они лучше знают, что надо заказчику, чем он сам.

Программисты знают лучше, что вынудит писать их много кода, а некоторые (о которых речь) делают невынужденный вывод, что в этом виноват заказчик. Это не так.

Есть и другая крайность. Все заказчики, с которыми мне приходилось работать, все до одного, хотели лишнего. Причина? Жадность. БОЛЬШЕ! БОЛЬШЕ! БОЛЬШЕ СВИСТОПЕРДЕЛОК!

Поэтому я чуть-чуть перефразирую фразу: "зачастую, программист лучше знает, что заказчику НЕ надо".
Говоря проще, лично для меня существует принцип неувеличения энтропии. Это значит, что я продолжаю искать решение, которое мне будет не лень воплощать. А мне всегда лень, поэтому я пишу мало кода. Я вообще не люблю кодить. Именно поэтому, если я увижу красивый фреймворк, который изящно (просто для программиста) решает одну мою проблему и еще 50, решения которых мне не нужны, я буду его использовать, потому что я не люблю кодить. Fuck the fuel economy. Пускай энтропия будет где угодно, только не у меня в уме.

И общий паттерн: вынужденность && конструктивность && достаточность. Чаще всего, вынужденность == бритва Оккама, конструктивность == мне лень писать много кода, достаточность == это решение не подходит, если потенциально потребует переписывания.

Общая логика: мне нужно писать как можно меньше кода:
1. мало кода — мало отладки,
2. мало отладки — больше времени на написание полезного кода,
3. мало кода — мало глюков,
4. мало кода быстрее работает**,
5. мало кода быстрее читается,
6. мало кода проще понимается,
7. мало кода проще поддерживается,
9. мало кода быстрее писать,
8. пускай софт падает тогда когда нет смысла продолжать, это лучше, чем писать много кода.

И еще: креативность нужна ДО того, как началась реализация.

Понравилась первая часть статьи, а дальше, особенно часть с фигурирующим заказчиком — нет. Почти всегда заказчик — это идиот, который вынуждает нас под свою ответственность поднимать уровень энтропии. Чаще всего, он хочет то, что не является вынужденным, даже для него. И многое другое.
У меня за все это время накопилось несколько вопросов. Хотелось бы увидеть статью на хабре с описанием методов работы рубильника всея интернетов, а также последствий его включения для всех остальных.

1. А что будет в случае, если русский забаненный ip достигался извне через сети/стыки ростелекома?
2. Видимо, он выпадет, да? Или у них разные фильтры для физиков и юриков?
3. Так вот, а имеет ли право Россия вообще блокировать каким-то образом адреса выданные райпом?
4. Имеет ли право блокировать зарубежные адреса, и тем самым нарушать достигаемость узлов сети Интернет?
5. Что будет, если хозяин забаненного пула подаст в суд? Простите, но ip-адрес принадлежит (выдан RIPE'ом) хозяину AS'ки, а сайт — это дело десятое. Т.е. хотите устраивать вакханалию — идите и в своих пулах делайте что угодно.

Другими словами, можно ли сказать, что правительство России распоряжается международными адресами, как собственным интранетом? Я клоню к тому, что это не 192.168.0.0 и обращаться так с международной сетью очень некрасиво. И что на счет всех этих блокировок думает Евросоюз?

Или я не прав?

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity