• Чистый код: блоки try/catch. Стоит ли так делать?

    Adamos
    @Adamos
    Я бы сказал, применимость такого правила сильно зависит от того, приходится ли вам, читая обработку исключений, лезть в код того, что их вызвало.
    Если код выплевывает исключения, которые полностью понятны без чтения этого кода - можно его завернуть в функцию и убрать с глаз долой.
    Если же исключительные ситуации связаны с самой логикой метода, то размазывание этой логики по разным функциям просто нелепо.
    Ответ написан
    Комментировать
  • Паттерн для мониторинга изменения состояния объекта, есть ли?

    @iMaximus
    Есть, если я правильно понял, что вам нужно, подойдет паттерн наблюдатель
    Ответ написан
    Комментировать
  • IDE для PostgreSQL?

    sim3x
    @sim3x
    psql
    Ответ написан
    Комментировать
  • Паттерн (алгоритм) генерации ключей?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    Ахах. Нет, не получится, выборка маленькая. Да и с большой вряд ли что получится, нужна последовательность. А её вы вряд ли получите, даже не пытайтесь.

    Единственное что, можете попробовать уменьшить энтропию. K9 в начале уже понятно, скорее всего какая-то часть - это контрольная сумма, то есть зависима от другой. Разгадать вы её вряд ли разгадаете, но некоторую зависимость можно попробовать поискать, с достаточно большой выборкой. Хотя опять же, насколько мне известно, сегодня мало кто-то генерирует ключи со встроенной зависимостью, и DES хватило, чтобы понять.

    Штука вот в чём. Хорошие криптостойкие ГПСЧ и с известным алгоритмом колят уже 20 лет, да всё недоколоть. А вы хотите сам алгоритм узнать. Ну. Удачи.
    Ответ написан
    Комментировать
  • Почему django закрывает соединение раньше времени?

    @immaculate
    Программист-путешественник
    Вообще-то, Django никогда не обрабатывает запросы в одиночку. Перед ним еще стоят gunicorn/uwsgi/mod_wsgi и nginx или Apache. Кроме того, прямо в документации описаны ограничения на размер запроса.

    Ну и еще бы неплохо приводить код и текст ошибки в таких вопросах.
    Ответ написан
    5 комментариев
  • Angular.js vs React.js в MEAN-стеке с прицелом на оффер?

    В голове полная каша. Примерно 70% указанных выше пунктов неточны или совсем не верны. Стоит взять любой фреймворк(например angular 1.x, как самый простой и быстрый для изучения) и сделать небольшой spa(можно прям из туториала angular-phonegap). Затем к этому туториалу добавьте бэкэнд в виде экспресса. Большая часть вопросов отпадет сама собой. Что касается изучения уже актуальных фреймворков, несмотря на огромную разницу в реализации общие подходы у ng2/react похожи (components, unidirectional data flow, ...) если понимать сами подходы - изучение основ конкретной реализации не должны занять больше недели. Намного больше времени уходит на изучение экосистемы(flow/typescript/webpack и т.д.)
    Ответ написан
    8 комментариев
  • RabbitMQ, как связаться с другой машиной?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    По умолчанию RabbitMQ имеет только одного пользователя - guest, которому разрешено всё, но только при запросах с localhost. Простой, но небезопасный способ - убрать guest из loopback_users. Более разумный вариант - завести пользователя с паролем и явно назначенными правами.
    Ответ написан
    3 комментария
  • Использовать ли Python, когда можно обойтись bash?

    @fireSparrow
    Без кода сложно говорить что-то конкретное.

    Есть подозрение, что вы не вставляете в цикл никаких задержек. А ведь для большинства практических задач не нужно проверять что-то каждую наносекунду, можно делать, например, раз в 100 миллисекунд. А для некоторых задач и одна проверка в минуту может быть вполне адекватной частотой.

    Вот этот код у меня грузит процессор на 99-100%

    while True:
        x = range(3)


    А вот с этим процесс python3 я почти вообще не вижу в выводе команды top. Он там появляется всего несколько раз в минуту с какой-то смешной цифрой вроде 0,2 % загрузки процессора.

    import time
    
    while True:
        x = range(3)
        time.sleep(0.1)


    Так что используйте задержки в цикле и будет вам счастье.
    Ответ написан
    Комментировать
  • SICP — на чем лучше проработать курс?

    @lastkrick
    Любую между вторником и четвергом)
    Ответ написан
    2 комментария
  • Как отсортировать символы строки в порядке "AaBbCc..." в python?

    @fireSparrow
    Один вариант вам уже подсказали, а я бы сделал иначе, без забивания всего алфавита в код:
    key = lambda c: (c.lower(), c.islower())
    print(''.join(sorted(s, key=key)))
    Ответ написан
    Комментировать
  • Порекомендуйте, на чём сделать backend?

    Q2W
    @Q2W
    На каждом из указанных языков можно сделать быструю реализацию.
    Судя по вот этому:
    Минус в том, что после каждого выполнения скрипт убивается

    Смущает его однопоточность.

    вопрос больше стоит в плоскости опыта программирования, чем выбора конкретного языка.
    Но даже без учёта этого обычно эффективней всего писать на том, на чём лучше всего умеет команда.
    Ответ написан
    Комментировать
  • Как освоить магию url в Django?

    @AlexandrBirukov
    urlpatterns = [
        url(r'^admin/', include(admin.site.urls)),
        url(r'', include('blog.urls')),
        url(r'^post_list/', include('blog.urls')),
    ]

    вот тут url(r'^post_list/', include('blog.urls')) убираем, смысла подключать два раза одно и тоже нет

    urlpatterns = [
        url(r'^$', views.index, name='index'),
        url(r'^$', views.post_list, name='post_list'),
    ]

    а тут второй урл делаем уникальным, вообще ищется первое совпадение, остальные игнорятся
    Ответ написан
    1 комментарий
  • Django. Как защитить форму от множественной отправки?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Django
    Седой и строгий
    class FloodSafeMixin(object):
        def __init__(self, *args, **kwargs):
            request = kwargs.pop('request', None)
            if request:
                self._user = request.user.username if request.user.is_authenticated() else None
                self._ip = get_ip(request)
                self._period = OrderedDict()
                self._period['days'] = kwargs.pop('days', None)
                self._period['hours'] = kwargs.pop('hours', None)
                self._period['minutes'] = kwargs.pop('minutes', None)
                self._period['seconds'] = kwargs.pop('seconds', None)
                self._period['milliseconds'] = kwargs.pop('milliseconds', None)
                if not any(self._period.values()):
                    self._period = {'minutes': 1}
                else:
                    self._period = OrderedDict([(k, v) for k, v in self._period.items() if v])
            else:
                self._ip = None
            super(FloodSafeMixin, self).__init__(*args, **kwargs)
    
    
        def clean(self):
            cleaned_data = super(FloodSafeMixin, self).clean()
            sender_id = hashlib.md5((self._user if self._user else self._ip).encode('utf-8')).hexdigest()
            if sender_id:
                class_name = self.__class__.__name__
                cache_name = 'last-submit.{0}.{1}'.format(class_name, sender_id)
    
                now = datetime.now()
                last_submit = cache.get(cache_name, now - timedelta(days=1))
                if (now - last_submit) < timedelta(**self._period):
                    cache.set(cache_name, now)
                    period = ' '.join([u'{0} {1}'.format(v, _p('genitive', k)) for k, v in self._period.items()])
                    raise forms.ValidationError(_('Form submitted less than %(period)s ago'), code='flood',
                        params={'period': period})
                else:
                    if not self.errors:
                        cache.set(cache_name, now)
            return cleaned_data
    
    
    class FeedbackForm(FloodSafeMixin, forms.Form):
        ...
    
    
    class SomeFormHandlerView(FormView):
        def get_form_kwargs(self):
            kwargs = super(GenericFormHandlerView, self).get_form_kwargs()
            kwargs['request'] = self.request
            kwargs['minutes'] = 2
            return kwargs
        ...
    Ответ написан
    Комментировать
  • Где взять дизайны (.psd) для практики верстки?

    Danakishi
    @Danakishi
    Full stack web dev
    У HTML Academy есть рассылка, иногда присылают на почту макеты для практики верстки
    Ответ написан
    1 комментарий
  • Хочу стать программистом. Какой факультет выбрать(Санкт-Петербург)?

    TrueBers
    @TrueBers
    Гуглю за еду
    Знаю пару отличных факультетов:

    Вот оф сайт главного https://www.google.ru
    Ещё есть у них филиал — https://stackoverflow.com/

    Бесплатно и без СМС!
    Ответ написан
    2 комментария
  • Почему неправильно работает цикл с генератором?

    fox_12
    @fox_12 Куратор тега Python
    Расставляю биты, управляю заряженными частицами
    import decimal
    
    def drange(x, y, jump):
      while x < y:
        yield float(x)
        x += decimal.Decimal(jump)
    
    heights = range(126, 200 + 1, 1)
    
    for height in heights:
      weights = drange(30, 140 + 0.5, 0.5)
      for weight in weights:
        print(height, '-', weight)


    Потому что генератор отрабатывает только раз. Вам нужно пересоздавать объект генератора для нового запуска.
    Ответ написан
    1 комментарий
  • Как в Django сделать извлечение данных из POST-запроса в json?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Django
    Седой и строгий
    Было бы здорово, если бы вы привели в своём вопросе пример формы, с которой надо работать, и формат получаемого json.

    Всё должно быть просто, получаете от фронтенда json, преобразовываете его в словарь с помощью json.loads() и передаёте результат в конструктор формы так же, как обычно передаёте request.POST
    import json
    from django import forms
    
    class SomeForm(forms.Form):
        name = forms.CharField(label=u'Name', max_length=25)
    
    def some_view(request):
        json_string = request.POST.get('json_data')
        form_data = json.loads(json_string)[0]
        f = SomeForm(form_data)
        if f.is_valid():
            name = f.cleaned_data['name']
            # ... Работа с данными ...
        else:
            # ... Обработка ошибки ...
    Ответ написан
    Комментировать
  • Как объединить несколько QuerySet в один без повторений?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Django
    Седой и строгий
    Чтобы убрать повторения, можно преобразовать QuerySet в множество
    tagnews = set(tag_tag | tag_city | tag_country)
    Но лучше вместо трёх запросов сделать один
    from django.db.models import Q
    tagnews = Entry.objects.filter(Q(tags__slug=slug) | Q(to_city__name_en=slug) | Q(to_city__country_code__name_en=slug))
    Ответ написан
    2 комментария
  • Как прочитать указатель из памяти чужого процесса?

    TrueBers
    @TrueBers
    Гуглю за еду
    Хватит плодить вопросы. Ответ на них не поместится на десяток страниц. Почитай лучше про адресацию памяти, что такое абсолютный адрес, относительный, что такое базовый адрес процесса, что такое рандомизация базового адреса. Просто так взять и прочитать память не получится.

    1. Этот адрес работает только для текущего процесса.
    2. Во-вторых, он будет другим при каждом запуске и выделении памяти из кучи.
    3. Он так же может меняться из-за ASLR

    Чтобы докопаться до реальной структуры данных с информацией о персонаже, нужно найти то место в коде, где эта структура выделяется на куче. Т. е. там должно быть что-то типа
    CharInfo info = new CharInfo();
    (_thiscall) CharInfo::CharInfo(info)

    Вот этот кусок кода тебе нужно найти, только так ты сможешь определить статическое место, откуда потом уже будешь плясать. Для поиска кода нужно знать хотя бы основы Ассемблера. Поможет в этом декомпилятор IDA Pro с плагином Hex-Rays.
    Но и этих мест может быть не одно, а десятки и сотни в случае с шаблонными классами и функциями. Тут уже нужен отладчик, чтобы поставить точки останова на чтение или запись памяти, и от них уже отталкиваться.

    Обычным чтением из памяти ты ничего не добьёшься, чтобы пойти по цепочке вызовов с необходимым адресом, тебе нужно самому внедрять свой код в клиент игры, либо пользоваться фреймворками для динамической инструментации, например, DynamoRIO, Intel PIN, Frida.

    Тесты лучше проводи на пиратке, ибо официальный клиент может забанить за такие действия.

    Начать можно, кстати, с курса Рикардо Нарвахи "Введение в крекинг с нуля, используя OllyDbg". Это огромный курс статей, в которых разбирается всё, что нужно для понимания основ. Там 50 с чем-то глав различной сложности, погугли. Есть ещё на ютубе целый плейлист с видео-разборами этого курса.
    Ответ написан
    Комментировать