• Ни кому не встречался задачник по Rust?

    AngReload
    @AngReload
    Кратко о себе
    Сайт есть такой codewars, пишешь программу по заданию, если код проходит тесты, то дают задачи сложнее
    https://www.codewars.com/?language=rust
    Ответ написан
    Комментировать
  • Как научится четко понимать где модульное тестирование, а где функциональное?

    @kn0ckn0ck
    Продюсер
    Функциональные тесты относятся к системе в целом и проверяют выполнение бизнес-функций системы. Система обычно состоит из нескольких модулей. Модульные тесты применяются к модулям. Также модульность - многоплановое понятие. Может быть модуль (unit) "класс", а может быть модуль "сервис". Главное то, что модуль - это техническое понятие (пользователю все равно как вы там внутри на модули все разложили), а функции системы всегда имеют бизнес смысл.
    Ответ написан
    Комментировать
  • Как защититься от парсельщиков?

    @deliro
    Нет
    Ответ написан
    Комментировать
  • Каков статус языка Rust в данный момент?

    @snuk182
    Rust развивается основательно. Не семимильными шагами, потому что каждый шаг согласовывается с сообществом и ресурсами на его воплощение, но достаточно быстро, и крупных жалоб пока нет (кроме кривой обучения, но это субъективно, главное понять принцип владения данными). Best Practices есть. Для новых коммерческих проектов его выбирают в основном в отрасли блокчейна и специальных вебсервисов с быстрым откликом. Веб фреймворков россыпь, пока лидируют Actix и Rocket. Десктопного гуя стабильного нет, пользуются биндами к gtk.
    Ответ написан
    5 комментариев
  • Каков статус языка Rust в данный момент?

    @freecoder_xx
    Rust развивается стабильно, новые возможности и исправления вводятся с каждым релизом раз в 6 недель. Замеченные баги тоже исправляются оперативно в нерегулярных минорных релизах. Иногда такая динамика развития даже может служить препятствием: многие "живые" библиотеки требуют новой версии компилятора, но не всякая компания способна быстро обновлять его на своих проектах.

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

    Что касается веба - вот тут есть список актуальных компонентов: www.arewewebyet.org

    Какого-то единого сборника лучших практик использования Rust, насколько я знаю, пока нет. Много полезных советов есть в официальной документации (в так называемых Книгах), а также разбросано по разным отдельным статьям. Однако, существуют списки полезных статей, которые помогут найти среди них нужную. Например эти:
    https://github.com/ctjhoa/rust-learning
    https://github.com/brson/rust-anthology/blob/maste...

    В новых проектах Rust используется, и пока тенденция идет на расширение. Вот на этой странице вы можете посмотреть, какие компании используют Rust сейчас и для чего: https://www.rust-lang.org/en-US/friends.html

    Итак, если вы планируете использовать Rust в производстве, готовьтесь вот к чему:
    1. Довольно высокий порог входа в язык. Тут нет особой сложности, просто потребуется практика на языке и поначалу время на следование советам компилятора по устранению постоянно возникающих ошибок компиляции.
    2. Достаточно частые обновления компилятора по добавлению новых возможностей в язык. Это может приводить к тому, что нужная вам библиотека будет требовать свежую версию компилятора.
    3. Сыроватые библиотки. Вероятно, вам придется их слегка дорабатывать под себя.
    4. Rust упрощает сложное, но усложняет простое. Для совсем простых проектов, не требующих высокой производительности и серьезных доработок в будущем, возможно, Rust будет не лучшим выбором.
    Но что вы получите от использования Rust?
    1. Высокую производительность программ, автоматическое управление памятью без сборщика мусора.
    2. Высокую надежность и защищенность программ, устранение большого количества потенциальных проблем на этапе компиляции.
    3. Достаточно легкий и безопасный процесс рефакторинга и доработки программ, благодаря развитой системе типов.
    4. Развитую систему управления зависимостями проекта.
    5. Действительно хороший универсальный инструмент: Rust подойдет и для прототипирования, и для разработки, причем для любого типа программ (утилиты, настольные приложения, веб-приложения, мобильные приложения, встраиваемые системы). Хорошая поддержка пока еще есть не для всего, но на перспективу - это большой плюс.
    Ответ написан
    7 комментариев
  • Веб-сервер на ГО?

    @qazar
    потому что встроенный сервак на го не умеет работать с медленными клиентами, и сотня другая таких медленных соединений просто его отвалят, если ему не выставить правильно таймауты, но тогда будут отвалятся посетители которые например пытаются открыть сайт с телефона с медленным интернетом,
    по этому на фронт ставят nginx, причем даже там, где уже есть сервак такой как IIS или Apache,
    о том как nginx обрабатывает соединения написано частично тут
    https://habr.com/post/260669/
    Ответ написан
    Комментировать
  • Как правильно сделать связку в Docker: php + cron?

    ice2038
    @ice2038
    Абсолютно нет необходимости создавать отдельный контейнер под крон, в этом нет смысла. Достаточно описать в слое выше все задачи
    * * * * * docker run --rm your-container /home/user/task.sh
    Ответ написан
    9 комментариев
  • Есть ли в свободном доступе системы распознавания обьектов?

    Есть опенсорсный проект YOLO, который работает очень даже неплохо. https://pjreddie.com/darknet/yolo/
    Классифицирует объекты в кадре за 20ms при использовании видеокарты или спец. железок от Nvidia.
    На процессоре около 6-9 секунд.
    Ответ написан
    1 комментарий
  • Принцип асинхронных приложений в GO?

    astec
    @astec
    Разработчик https://debtstracker.io/
    За примерами и объяснением когда это нужно идём в https://tour.golang.org/concurrency/1

    Также стоит разобраться чем асинхронность отличается от многопоточности.

    Не нужно тогда когда накладные расходы на каналы и рутины превышают выигрыш от их использования.

    Так же полезно почитать разную критику чтобы понимать реальные подводные камни. Например www.jtolds.com/writing/2016/03/go-channels-are-bad...

    Удачи.
    Ответ написан
    Комментировать
  • Как получить дату?

    nikonor
    @nikonor
    Программист go, perl
    t := time.Now().Format("02.01.2006")

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

    lxsmkv
    @lxsmkv
    Test automation engineer
    когда вы пишите тест вы хотите знать если вдруг что-то пойдет не-так. Вы используете интерфейс, вы уверены что фунцкция этого интерфейса всегда делает то, что обещает по документации? А вы уверены что это будет так завтра и через год? Вы уверены что ваш код правильно реагирует на ответы которые приходят на ваши запросы по API? А как поведет себя код если формат ответа изменится? Все эти "а что-будет если" не из любопытства и духа экспериментаторства а от неизвестности и неуверенности.
    Когда ты ставишь свой код на "сигнализацию", стресса и неуверенности становится меньше, а информации больше. Можно проводить операции над кодом (рефакторинг) будучи уверенным, что если заденешь жизненно важный орган тебе об этом заморгает лампочка.
    Про ТДД ничего не могу сказать, мне тяжело думать шиворот-навыворот. Стремиться к этому наверно нужно, потому, что если ты можешь начать с тестов то значит спецификация у тебя жесткая, отлично закодокументированая, архитектура четкая - но в жизни к сожалению бывает и иначе, там где сначала пилим как придется, посмотрим что получится, и если это понравится заказчику - доведем до ума.

    П.С. помню как-то давно, когда только начинал изучать junit попробовал ради интереса написать на простенький класс-коллекцию тесты. Во-первых их получилось больше, чем мне казалось возможным на первый взгляд. Во-вторых, я не успел отъехать и на пятьсот строк кода, как уже тесты местами покраснели. Значит что-то задел и совершенно не обратил внимания. А казалось ну что можно напортачить в десяти классах. Можно.
    Ответ написан
    4 комментария
  • Что за ility testing?

    pi314
    @pi314
    Президент Солнечной системы и окрестностей
    Гугл, в данном случае, как почти всегда, прав )) Речь идет о т.н. нефункциональных требованиях, т.е. таких, которые нельзя вот так вот взять, проверить тестом, и убедиться, что "оно работает, как заказывали". Это суть требования качественного характера, предъявляемые к архитектуре в целом, или к отдельным группам функциональных и/или системных требований. Например: "горизонтальное масштабирования хранилища данных не должно влиять на время реакции системы для операций регистрации новых и удаления ранее зарегистрированных пользователей", или, "система должна быть с минимальными затратами переносима на 64-битную архитектуру"... или еще круче: "разрабатываемая система должна обеспечивать легкость сопровождения кода новыми разработчиками".

    Термин "Ility" происходит из (ныне устаревшего) ISO/IEC-9126, разросшегося в целое семейство стандартов ISO/IEC-250*, которые перечисляют и классифицируют все мыслимые и немыслимые аспекты качества ПО и даже определяют методику их оценки (SQuaRE)... правда, эта методика настолько туманна, что после ее прочтения растет число самоубийств остается больше вопросов, чем было до него )) В самой же классификации, большинство аспектов верхнего уровня заканчиваются на "ility" - Testability, Reliability, Portability и т.д. - oтсюда и название.

    Однако, если есть требование, QA должен хоть извертеться на пупке, но найти возможность проверить/подтвердить, выполнено оно или нет... и такие возможности действительно есть. Только вот "тестированием" назвать их можно весьма условно. Скорее, речь идет о методиках анализа кажущихся на первый взгляд субъективными, характеристик качества ПО на основе его объективных характеристик - от мнений независимых экспертов, проводящих аудит (архитектуры, процессов разработки и системы управления качеством на предприятии), и вплоть до результатов структурного анализа архитектуры и статического/динамического анализа кода (в качестве примера последнего подхода: SQALE).
    Ответ написан
    1 комментарий
  • Что такое end-to-end тестирование?

    pi314
    @pi314
    Президент Солнечной системы и окрестностей
    Понятие еnd-to-end обозначает всего-навсего классификацию тестов по уровню, на котором тестируется система, и, само по себе, ничего не говорит ни о том, какие конкретно должны быть эти тесты, ни о том, какую роль они играют в общей стратегии обеспечения/проверки качества и, также, не является методикой тестирования. (Методика - это совсем другое понятие.)

    Для понимания сути этого понятия хорошо сравнить его с модульным ("нижний" уровень) и интеграционным ("средний") тестированием на каком-нибудь конкретном примере. Давайте рассмотрим некий сферический webshop в вакууме. Предположим, в нем есть 50 классов и для большинства из них написаны модульные тесты. Они проверяют исключительно функционал конкретного модуля (чаще всего, класса), т.е. тот, что зависит только от самого модуля и ни от чего чего более. Потом есть интеграционные тесты. Они проверяют корректность работы отдельных "модулей", если их собрать вместе согласно архитектурe. Например, работает ли правильно "Корзина", состоящая, в свою очередь, из 10 классов (предварительно проверенных модульными тестами), или "Корзина", подключенная к "Вебморде" и т.д. Где-то повыше в этой иерархии есть такие интеграционные тесты, которые проверяют конкретный функционал всей системы. Например, отправляется ли юзеру мейлом копия оплаченного заказа...

    И вот тут начинается самое интересное для понимания того, что такое end-to-end тестирование! Можно представить себе тест, проверяющий, что соответствующий мейл генерируется и сбрасывается SMTP серверу. Если SMTP сервер не рассматривать, как часть разрабатываемой системы, то этот тест вполне можно назвать end-to-end тестом (послали кучку HTTP запросов через "Вебморду" и проверили сброс мыла на SMTP - все зашибись!). Однако, если настройки и эксплуатация SMTP сервера - часть проекта (например, заказана разработка webshop "под ключ"), может оказаться, что это мыло будет отфильтровано каким-нибудь спам-фильтром, превысит лимит почтового ящика пользователя... короче, не дойдет до него. Тогда этот же самый тест уже нельзя считать end-to-end, а нужно бы было написать тест, проверяющий приход мыла в POP3/IMAP ящик. (Опять же, если это действительно нужно! Ибо, в зависимости от конкретных функциональных и нефункциональных требований, архитектор и QA инженер вполне могут найти возможность обеспечить адекватный контроль качества и без такого теста.)

    Таким образом, end-to-end тесты, это такие интеграционные тесты, которые воздействуют на систему через ее самые внешние интерфейсы и проверяют ожидаемую реакцию системы через эти же интерфейсы. Почему именно интеграционные? Потому, что это единственное, что можно о них сказать наверняка: они по определению не могут быть модульными тестами. А все остальное: являются ли они одновременно приемочными, нагрузочными или еще какими - зависит только от общих плана/стратегии тестирования и той роли, которые эти тесты в них играют.
    Ответ написан
    Комментировать
  • Как понять, что подрядчик разработает безопасный продукт без утечек данных?

    Stalker_RED
    @Stalker_RED
    Слово "аудит" вам знакомо? Предупредите подрядчика, что по окончанию работ будет проведен аудит безопасности. Ну и наймите хорошего аудитора.

    На счет стандартов могу припомнить разве что ISO 9001, который хоть и не заточен конкретно под медицинские, но используется некоторыми фарм-компаниями, например.

    Вот само содержимое: guap.ru/guap/standart/kach/gost_r_iso_9001-2015.pdf
    Ответ написан
    5 комментариев
  • Минимальные настройки безопасности Linux на VPS?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    1. На порты управления обязательно: port-knocking
    2. Не нужно использовать ключи взамен пароля.
    3. Нужно использовать здравый смысл, поведенческий фильтр с ограничением по подсетям. Его можно использовать как перед подключением к SSH, так и сразу после подключения (например, промежуточным логин-скриптом проверить: предоставить доступ с верным паролем или нет).

    Не забывайте, что кроме пары логин-пароль и ключей, есть много других способов аутентификации.

    4. port-knocking: https://www.vultr.com/docs/port-knocking-on-debian
    Подключение из putty с port-knocking "из коробки":
    putty-port-knocking.png
    https://putty.org.ru/

    5. Также, можно поставить AppArmor (что это?) для управления доступом приложений к системе: https://wiki.debian.org/AppArmor/HowToUse

    6. Защита web-сайтов от большинства видов атак (включая правила исполнения кода): sitecoder.blogspot.com/2016/05/website-protection-...
    Ответ написан
    3 комментария
  • Достаточно ли сильной будет такая схема хэширования с двойной солью?

    Jump
    @Jump
    Системный администратор со стажем.
    Достаточно ли сильной будет такая схема хэширования с двойной солью?
    Никакая вообще. С тем же успехом буковки местами можете поменять.

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

    Нормальная схема такова - по https передается пароль.
    На сервере к паролю добавляется соль, он подвергается хэшированию, и получившийся хэш сравнивают с тем что храниться в БД.
    Ответ написан
    2 комментария
  • Достаточно ли сильной будет такая схема хэширования с двойной солью?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Смотрите на реализацию CRAM-MD5
    (вместо MD5, ставите любую более "устойчивую" hash-функцию)

    нужно будет узнать алгоритм получения соли в android приложении.Все так?Или где-то дырка
    именно в этом и дырка, что достать алгоритм из приложения - проще простого!
    Ответ написан
    Комментировать
  • Достаточно ли сильной будет такая схема хэширования с двойной солью?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Security through obscurity - наихудший вариант. Передавайте пароль через защищённое соединение и не извращайтесь.
    А дырка в том, что если кто-то может перехватить пароль, то он может с тем же успехом перехватить и кэш, этого будет достаточно для аутентификации.
    Ответ написан
    6 комментариев