• В каком формате хранить данные (мелкий конфиг) в python?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    Ну для python уже есть формат для конфигов: это встроенный тип dictionary.

    Вы же пишите код на Python и только на нем. За пределами же конфиг ни где не будет использоваться, тогда зачем еще какие-то форматы, когда можно воспользоваться его родными типами?
    Ответ написан
    Комментировать
  • Как работают скриптовые языки встроенные в приложения?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    Напомню, что языки делятся на компиллируемые и интерпретируемые.

    Для того чтобы интерпретируемый язык выполнялся нужен компонент : "Интерпретатор". Это 1 или более исполняемых файлов предоставляющий некий интерфейс. Когда вы пишите свой продукт к примеру на C++, а затем компилируете, чтобы получить PE32\PE32+ файлы, то вам никто не мешает вместе с вашим продуктом поставлять и исполняемые файлы интерпретатора, к примеру для Python. Этот интерпретатор предоставляет API, к примеру в виде набора C-хидеров и набора lib-файлов. Используя, который вы можете вкомпилить в свой продукт связь с этим интерпретатором. А далее, просто подавать python-код в интерпретатор.

    Можете почитать Extending and Embedding the Python Interpreter
    Ответ написан
    2 комментария
  • Можно ли выучить python с помощью приложения учим python с практикой?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    Любой язык прораммирования учится путем решения РЕАЛЬНЫХ задач. Берете свою деятельность не важно где, на работе, дома, в хобби и пытаетесь ее улучшить! По путно возникает множество вопросов и вот ответы на них формируют ваш опыт
    Ответ написан
  • Как в python извлечь корень?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    Не совсем понятно, что вы ищите? Толи готовую функцию, толи понять как в принципе работает алгоритм? Для готовой из стандартной либы,вам уже написали. А про алгоритм, вот:

    def sqrt_r(number, precision_factor=0.0001):
    	def square(n):
    		return n * n
    	def good_enough(guess, number):
    		return abs(square(guess) - number) < precision_factor
    	def improve(guess, number):
    		return ((number/guess) + guess) / 2
    	def sqrt_iter(guess, number):
    		return guess \
    			if good_enough(guess, number) \
    			else sqrt_iter(improve(guess, number), number)
    	return sqrt_iter(1.0, number)
    Ответ написан
    3 комментария
  • Учебный материал по работе с памятью?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    Вот вам вопросы, который помогут принять решение как работать с объектом.
    1. Когда известно какого размера объект? Во время компиляции или во время выполнения?
    2. Насколько большой по размеру объект? Стек имеет не слишком большую память и все не реально большое нужно или держать в памяти или работать с файлом на диске

    Чтобы дать ответ на второй вопрос нужно знать вашего пользователя. Абсолютно для всех никогда не получится написать код. Поэтому нужно знать в каких именно условиях будет работать ваш код.
    Ответ написан
    Комментировать
  • Как обучиться werkzeug?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    На мой взгляд занимаетесь не тем чем нужно!
    Вам не нужно изучать чистый werkzeug чтобы быть хорошим веб-девелопером.

    Веб-девелоперу сейчас оооочень много нужно знать: это очереди, это и несколько веб-фреймворков, это и умение писать мониторинги для оценки загруженности очередей, это и ORM и умение писать качественные запросы в БД. А ко всему прочему желательно неплохо понимать JS и несколько к нему фреймворков.

    Вы это уже все знаете?
    Ответ написан
  • Стоит ли учить flask для back-end разработки?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    Я тоже еще новичок в мире веб-разработки. Первым web-framework для Python выбрал Flask и не пожалел! Достаточно понятен, быстро въезжаешь и быстрее получаешь результаты. Сейчас присматриваюсь в сторону Falcon.

    В любом случае: берите то к чему глаз стремится. Если от кода выворачивает наизнанку и возникает чувство прокрастинации, то ну его нафиг такой фреймворк.
    Ответ написан
    Комментировать
  • Как сделать unit тесты во Flask?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    1. Скачай книгу Мигеля. Это библия по Flask. Без нее как без рук!
    2. У меня применяется flask-sqlalchemy , а базу для тестов создаю с помощью sqllite в памяти
    3. Для обращения к клиенту, который может посылать запросы к вашему веб-серверу можно юзать client как-то так:

    class ApplicationTestCase(unittest.TestCase):
    
        def setUp(self):
            self.app = create_app(config_name='testing')
            self.app_ctx = self.app.app_context()
            self.app_ctx.push()
            db.create_all()
            self.client = self.app.test_client()
    Ответ написан
    4 комментария
  • Как изучить язык приближенно к 100%?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    А зачем? Зачем знать язык до идеального состояния? Перфекционизм мучает?

    20% труда выдают 80% результата.

    Остальные 20% результата потребуют 80% труда. Оно вам нужно?

    Другими словами язык должен быть на таком уровне, чтобы вы могли решать задачи. У математиков есть замечательная фраза "Необходимо и достаточно".

    Я к тому, что знайте когда остановиться. Хорошее всегда будет врагом лучшего.
    Ответ написан
    1 комментарий
  • Где можно найти проект что бы начать тестировать?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    Выбирайте любимую OpenSource-программу и тестируйте! Программ в OpenSource оооочень много! Примеры:
    * GnuCash, KeePass, etc;
    * FreeBSD, Linux, OpenBSD, etc;

    Берете и начинаете проверять!
    Ответ написан
    Комментировать
  • Чем отличается библиотека от фреймворка?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    Чего только не напишут )))

    Фреймворк это тоже библиотека, но не простая, а задающая развитие проекта при его использовании.

    Поясню примером:

    class CarInterface {
    public:
       virtual ~CarInterface() = 0 {}
       
       virtual void go() = 0;
    };
    
    int go(const CarInterface& car);


    Смотря на этот кусок мы видим ДВУХ программистов: программист-разработчик и программист-пользователь. Первый это автор фреймворка и он задумал, что его интерфейс автомобиля будет иметь определенные варианты использования и характеристики, но он не может знать какие именно? Поэтому он ОБЯЗЫВАЕТ программиста пользователя реализовать конкретный автомобиль.

    Фрейморк это библиотека решающая определенный круг задач и при этом направляющая программиста пользователя в строго определенном направлении при решении задачи!

    Другой пример, библиотека Flask: Для того , чтобы обработать HTTP-запрос POST-методом я обязан применять функцию route с аргументом methods в котором указать список содержащий строку 'POST'. Код:

    @app.route('/executables/<id>', methods=['POST'])
    def get_executables(id):
      pass


    можеть мне удобнее не methods, http_verbs, но автор ЗАСТАВИЛ меня передавать с названием methods.

    Фрейморк заставляет не просто так, а с целью получения однообразности кода.
    Ответ написан
  • Как правильно писать тесты?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    1. Начните читать книгу Роя про "Art of Unit testing" уже есть 2 редакция
    2. Прочитайте комментарий на ru_SO

    теперь касательно ваших методов. К примеру я увидел такой лог выполнения тестов:
    AddData_ShouldReturnError() - Failed
    AddData_ShouldReturnException() - Failed


    Что должен заключить из этих ошибок?

    Пытаюсь читать название теста: "Метод AddData должен вернуть ошибку".
    Что произошло мне непонятно. Одни вопросы:
    * Какие тестовые данные подаются?
    * Какое вообще исходное состояние?
    * Что принято считать ошибкой? Может быть запись в логе об ошибке, а может быть некорректное значение возвращаемое методом? А может метод должен возвращать False в случае ошибки?

    Вот пример, к чему нужно стремиться:

    InvalidAdminToken_UsersRequest_ListIsEmpty

    Название теста следует схеме именования:

    [When]_[Act]_[Then]

    Договорившись с командой или самим собою о схеме именования тестов можно читать имя так:
    Тест: Неправильный токен подается в запросе для получения пользователей и должны получить пустой список.

    Если вдруг упало, то вы сразу поймете, что список не пустой! Потому что тестовый метод содержит только и только assert-ы, таким образом ваш тестируемый код выполняемый в Act-части неверный!

    *UPD*

    Любой модульный тест должен работать согласно паттерну проектирования AAA - Arrange -> Act - > Assert. Т.е. Подготовка к тестированию - Выполнение проверяемого кода - Проверка результатов.

    Технически работа модульного теста организовывается так:

    setUp() - это подготовка к тестированию, т.е. Arrange
    test() - Здесь Act и Assert

    Да, в модульном тесте подготовка пишется только и только в setUp() методе! Ошибка в подготовке тест-среды не должно влиять на сам тестовый метод.

    Тестовый метод это не подготовка результата, это проверка РАБОТЫ вашего БОЕВОГО кода.
    Это важно. Очень часто вижу, когда в тест-методы суют небольшие куски кода подготавливающие тест.данные. Это неправильно!!!

    Тестовый метод это:
    Первым делом выполнить боевой код. Ради него радимого и пишется тестовый метод.
    Вторым делом один assert . Да, тестовый метод должен содержать ТОЛЬКО и только одну проверку!

    Другими словами не должно быть такого:
    assertTrue(usersList is not None)
    assertTrue(usersList.isEmpty)
    Ответ написан
    5 комментариев
  • Где почитать про юнит-тесты?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    На системах какого масштаба их стоит начинать применять?


    К примеру нужно написать класс\метод и возникает вопрос "Когда остановиться?" другими словами, как понять что написанный код работает корректно? Можно глазками отсматривать каждую ветку кода. Можно поставить брэйкпоинты, чтобы посмотреть получаемые значения и в пределах допустимого они или нет. А можно по-другому:

    модульные тесты
    Ответ написан
    Комментировать
  • Как преобразовать строку из символов в целое число?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    b = '\x01\x00\x00\x00'.encode()
    struct.unpack('<L', b)[0]


    Может быть это вам надо?

    или это:
    int.from_bytes(b, byteorder='little')
    Ответ написан
  • Есть ли смысл определять новые ключевые слова в c++?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    В чужой монастырь со своим уставом не ходят. (с) Не мое.

    Я к тому, что программируя на C++ нужно с помощью тех способов и идиом, которые привычны ЛЮБОМУ программисту. Самое интересное, имея в своем репертуаре большое кол-во идиом вы приходите к той мысли, что простор для творчества более чем обширен.

    dynamic, abstract : 1. Технически можно 2. Но не по плюсовы
    Ответ написан
    Комментировать
  • Какие решения есть для определения версий библиотек?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    Можно воспользоваться Requirements Files. В таких файлах можно указать точную версию, или старше указанной или не старше указаной. А можно вообще версий не указывать, а просто указать имена пакетов и тогда будут ставиться только самые последнии версии.

    Установленная среда "замораживается" командой: pip freeze
    Ответ написан
  • Зачем тестировщикам комментарии к тестированию?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    Работая несколько лет тестировщиком вывел для себя правило :

    Созданную задачу об ошибке даже с хорошим заголовком, но без комментария неимеет смысла рассматривать.


    Все очень похоже на программирование: пишешь код, даешь названия переменным, методам, классам. Думаешь логично и понятно, а спустя года : Кто все это написал? Что я в тот момент курил? Да, такое бывает! ;) Мы развиваемся, у нас появляется новый опыт. Новые идеи. Видя старые мысли мы можем ужасаться )))

    В тестировании мы тоже не сидим на месте. Мы учимся и наши навыки развиваются. Написав только лишь заголовок вы можете оказаться в ситуации, что не сможете понять : А что нужно-то перепроверить то? Замечу, что задачи разнятся по приоритетам и может получиться так, что созданную сейчас задачу вы увидете только лишь через пол-года или год.

    Сравните два заголовка:
    1. Ошибка в логе при скачивании бэкапа

    понятно? Вроде бы да и все логично на первый взгляд. Заголовок принуждает лезть в конкретное место в коде: класс по скачиванию бэкапа.

    Но вот возникают вопросы:
    1. Какой битности программа?
    2. После чего появилась ошибка? Сразу же после начала скачивания или комп ложился спать и после пробуждения?
    3. Это только на Windows 10 или еще на Windows 8.1? А как себя ведет на Windows server 2012 ?
    4. Эти ошибки в логе? А что если сетевой шнур выдернуть?

    Цель комментария: сузить проблему до таких размеров, чтобы было понятно, где конкретно искать.
    Ответ написан
    1 комментарий
  • Числа Фибоначчи в JS(рекурсия). Как работает функция?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    сделайте улучшения ф-ции:
    1. Передавайте уровень рекурсии
    2. При выходе уменьшайте уровень
    3. При входе увеличивайте
    4. Также выводите число на данном уровне рекурсии

    Будет наглядно и понятно
    Ответ написан
  • Как называется тестирование способом реального запроса на бэкенд?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    Это не модульный тест!
    Это интеграционному тест.

    Модульный тест проверяет один аспект одной части.
    Интеграционный тест проверят несколько частей.

    У Вас есть несколько частей:
    1. Часть бэкенда понимающяя HTTP
    2. Часть бэкенда залезающая в БД
    3. Часть бэкенда формирующая ответ
    4. Часть бэкенда отправляющая ответ по HTTP

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

    посмотрите два теста:

    1.
    test_sum_a_and_b() - Failed

    2.
    test_login() - Failed

    В каком из этих двух вы быстрее сообразите где фиксать и что фиксать и почему фиксать?
    Ответ написан
    Комментировать
  • Стоит ли зацикливаться на непонятной теме?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    Поступайте более гибко. Чуть чуть теории, чуть чуть практики. Не надо бросаться абсолютно все и вся зубрить и заучивать. Пишите! Уверяю, что Вы быстро поймете насколько освоили материал, который только что прочитали, если не откладывая сразу же начнете что-нибудь писать и попытаетесь применить. Программирование это искуство, иногда некоторые логичные вещи по началу не работают и глаза на лоб лезут "А почему?" и наоборот казалось бы тупейший и нелогичный кусок кода почему-то работает.

    чуть-теории - чуть-практики
    Ответ написан
    Комментировать