• Почему асимметричное шифрование слабее симметричного?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    При одинаковой длине ключей, симметричных и асимметричных, криптостойкость алгоритмов разная. И криптостойкость симметричных выше. Асимметричных ниже. ...

    Как это объяснить?

    Это объясняется тем, что у симметричных и асимметричных алгоритмов разная природа.
    Симметричные (например AES) используют ключ для генерации преобразования входного блока в выходной. Количество бит в ключе напрямую определяет размер пространства преобразований -- 128-битный ключ даёт 2128 возможных значений выходного блока для каждого входного.
    Асимметричные используют ключ по-разному, поэтому нужно рассматривать конкретный алгоритм. RSA использует биты ключа для хранения произведения двух простых чисел. 128-битный ключ даёт 64-битные простые числа. Факторизация 128-битного числа не требует перебора 2128 вариантов и занимает на обычном современном железе порядка секунды.
    Ответ написан
    Комментировать
  • Как деплоить небольшие проекты?

    @Stqs
    senior software developer
    вопросы у вас философские, на каждый можно отвести часы обсуждения
    Полноценный CI/CD поднимать не вижу смысла ввиду размеров

    вы ж все равно собираетесь какие-то скрипты мутить и чото выдумывать,
    какая разница это будут крон скрипты на сервере или джоба в дженкинсе? по-скорости написания - одно и тоже будет. так что по-моему размер тут не имеет значение
    единственное что имеет значение - насколько явно у вас описан процесс(алгоритм) билда/разворачивания приложений
    с этой точки зрения мое видение примерно такое:

    1) git не есть инструмент для развертывания по, git лишь для версионирования кода
    и по-идее результатом вашей работы должен быть не код в гитхабе, а какой-то вменяемый артефакт, готовый к деплою (docker-image, pip пакет, npm пакет, deb пакет, jar, war, zip в крайнем случае, и тд и тп). Если производить артефакты то вопрос с тегами отпадет сам собой - у вас будет артефакт какой-то версии и все
    сервер не должен знать ни про какие гиты и ни про какие-то теги в нем
    Здесь я бы рекомендовал паковать все в докер-имеджи хотя бы только потому, что сервер в итоге не будет знать ничего о зависимостях приложения, нужных библиотеках, ниочем вообще, вам нужно установить только докер
    Огромное преимущество использование докера - в Dockerfile вы вынуждены волей/неволей описать точно и явно все шаги требуемые для установки приложения. И что самое замечательное - это все будет храниться в том же репозитории, под контролем гит - шикарно.
    Артефакты желательно хранить в каком-то артефактории,
    но если реально все просто - то можно хранить несколько последних версий прямо на сервере в какой-нибудь папочке

    2) как только вы получили артефакт - его можно деплоить
    неплохо было б знать особенности вашего проекта, но грубо говоря допустим что достаточно его зааплоадить на сервер, положить в нужное место
    опять же с этим дженкинс справится на ура и займет у вас это все дело 10 минут . Если вы опишете логику в Jenkinsfile вы выиграете еще раз потому что процесс развертывания(алгоритм) будет описан опять же ЯВНО. И будет тоже под контролем гита. (Jenkins должен знать только в каком репозитарии и в каком месте ему искать Jenkinsfile)
    Если же вы будете крутить какой-то спрятанный cron скрипт на сервере - о нем никому ничего не будет известно. Поверьте уже через короткое время все это дело начнет усложнятся, что-то забудется, что-то измениться и это все вместе больно ударит вас по яйцам.

    В чем еще преимущество такого подхода: если вам нужно сделать roll-back на предыдущую версию вам не нужно собирать проект заново выкачивая все с гита, ведь у вас есть предыдущие артефакты, ролбек в таком случае вообще не проблема - просто указываем предыдущую версию артефакта и деплоим еще раз и все

    3) Env Variables
    когда приложение стартует - считывает все что ему нужно из переменных окружения
    деплой джоба может каждый раз эти переменные устанавливать перед тем как деплоить - это было бы тоже круто потому что вы сделали бы это знание так же явным

    Итого имеем
    - логика сборки проекта описана в Dockerfile и находится под гитом
    - логика деплоя находится в Jenkinsfile и находится под гитом, и что самое главное является кодом (Jenkinsfile пишем на груви, для простых вещей вам понадобиться 30 минут изучения и все)
    - на сервере мы ничего не устанавливали совершенно кроме самого докера
    - мы храним несколько версий нашего приложения на всякий случай и можем быстро откатиться не прибегая к гиту вообще
    - сервер не знает ничего о гитах
    - на сервере нет НИКАКОЙ дополнительной логики по разворачиванию вашего приложения
    - имея все это очень легко добавлять другие сервера для деплоя - что нам нужно - грубо говоря указать другой айпи и набор env variables к нему ( если они конечно отличаются)
    giphy.gif
    Ответ написан
    5 комментариев
  • [PHP] DataBase на ООП, как лучше написать?

    search
    @search
    мама говорит что я особенный
    Вот тут вкратце описаны все популярные шаблоны проектирования DB слоя https://gist.github.com/codedokode/c4cbc4d7dc8e45ea074a

    Выбирайте тот что вам по душе и кайфуйте.

    Попробуйте DataMapper. Он довольно прост в реализации (вам даже либа не пондобится. Ну разве что стандартная PDO) и меньше чем ActiveRecord склоняет программистов к говнокоду. Ну и гораздо менее тяжеловесен чем полноценная ОРМ. Для понимания и закрепления ООП - самое то.

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

    Вот очень подробная статья на инглише https://www.sitepoint.com/integrating-the-data-mappers/

    А самый, на мой взгляд, лучший пример, предоставлен японцем (не пугайтесь иероглифов, смотрите код): https://github.com/hirak/pdo-datamapper-example
    Ответ написан
    2 комментария
  • Книги по построению БД?

    @Romanchitoz
    Это популярный вопрос.
    Хорошие книги по базам данных
    А так AVKOR предложил хорошие варианты.
    Ответ написан
    Комментировать
  • Книги по построению БД?

    @AVKor
    Kroenke, David M., Auer, David J. Database Processing.
    Connolly, Thomas M., Begg, Carolyn E. Database Systems: A Practical Approach to Design, Implementation, and Management.
    Ответ написан
    Комментировать
  • Средство автоматизации регрессионного тестирования?

    @taktik
    Sr. QA automation | SDET
    Как вариант можно посмотреть на CodeceptJS. Но сам не пользовался, про минусы не знаю.
    Есть статья на хабре - https://habr.com/ru/post/319656/
    Ответ написан
    1 комментарий
  • Какой CMS движок учить начинающему?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Никакой. Изучайте разработку ПО, языки программирования, построение архитектуры ПО, алгоритмы, математику и т.д и т.п.

    UPD
    Приведу немного аргументации и очевидных вещей для тех, кто не понимает почему ответ именно такой. На самом деле все очень просто: в IT индустрии все развивается и меняется очень, очень-очень быстро. И как следствие возникает проблема устаревания знаний и умений. Вот например 15-20 лет назад изучение языка программирования под названием "Дельфи" и популярной тогда его среды разработки для дестктопных приложений вполне имело смысл и было популярным явлением, т.к. оно тогда довольно широко использовалось, или например Perl для создания сайтов. А где оно сейчас? Почему сегодня сайты пишутся на джаваскрипте? А как на счет десктопных приложений? А ведь те же десять лет назад попробуй скажи такое — как бы область деятельности не пришлось менять. И вот такое происходит просто с языками программирования за довольно короткое время. А основа любого CMS, фреймворка и иже с ними — это как раз таки язык программирования. И вот за время жизни языка программирования в нём случаются новые стандарты, изменения и прочее, а популярное ПО на нём переписываются десятки и сотни раз. Т.е., изменчивость продуктов какого либо языка зависит как от самого языка так и от его популярности. И чем они выше — тем чаще что-то меняется. Из всего этого вытекает очень логичный вывод: в долгосрочной перспективе выгоднее те знания, которые не устареют как можно дольше. И вот тут как раз таки знания разработки ПО и языков программирования, построения архитектура, алгоритмы и прочее имеют наибольший срок устаревания. А уж сколько тысяч лет математике можно и не вспоминать. А она, кстати именно благодаря стремительному развитию IT тоже развивается очень быстрыми темпами. Так вот, при наличии вот таких фундаментальных знаний можно легко и быстро осваивать любые новые фреймворки, CMS, языки программирования и прочее. А уж при наличии подробных мануалов, гугла, форумов и прочего большинство задач сводится тупо к вбиванию "как сделать YYY в ZZZ" в строке поиска (я вот например никак не могу понять ход мыслей людей, которые задают вопросы на форумах и прочих ресусах, ответ на которые выдается в первых же строчках гугла, складывается впечатление, что они вообще первый раз в интернете и про гугл не знают вообще ничего).
    Если есть желание именно в изучении CMS — ставим себе задачу и решаем её используя разные CMS, далее выбираем наиболее понравившуюся и пользуемся пока не надоест или не устареет. А после — повторить.

    Немного перефразирую сам вопрос и соседний популярный ответ:
    — Каким инструментом учиться пользоваться начинающему строителю?
    — Учись использовать молоток и гвозди, леса полно, доски везде используются.
    Вот только строительство — это не одни только доски, в которые забиваются гвозди, а еще архитектура, сопромат и иже с ним, экстерьер, интерьер, отопление, освещение, канализация, вентиляция и еще куча всего. Аналогично и во всех остальных областях, в том числе и web разработке.
    Ответ написан
    9 комментариев
  • Как в PHP вывести маленькое дробное число без изменения количества знаков после запятой и перевода в формат "e"?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    > Есть какой-то еще способ заставить PHP просто вывести дробное число без изменения его внешнего вида?

    Нет

    Разумеется, никакого способа нет. Потому что никакого "внешнего вида" у дробных чисел не существует в природе. У них есть только внутренний вид, но вам на него смотреть не захочется. А для вывода в десятичном формате его всегда надо преобразовать и отформатировать.

    Если важен "исходный внешний вид", то следует работать с числами, как со строками, и тогда они будут всегда выводиться, как есть.
    Ответ написан
    Комментировать
  • Как вы вносите изменения в сайт после установки админки?

    @maniiii
    Тут описана работа из ide и в принципе это шикарный вариант. А тут обсуждалась связка только с шаблонами.
    Ответ написан
    Комментировать
  • Как вы вносите изменения в сайт после установки админки?

    one_day
    @one_day
    концепция модх хранить шаблоны в бд
    для работы локально нужно использовать такой костыль:
    # Snippet to include files from filesystem
    # [[includeFile? &file=`assets/templates/mytemplate/file.html`]]
     
    if ( !isset($file) || $file== "" ) return "No file specified."; //check if there's a file given.
     
    //Start the buffer
    ob_start();
     
    //include
    include $file;
     
    //get contents from the buffer
    $ob_contents = ob_get_contents();
     
    //and kill/delete the buffer
    ob_end_clean();
     
    //return it to MODx
    return $ob_contents;

    1) Создаём сниппет includeFile с этим кодом
    2) Создаём шаблон, и вызваем этот снипет передавая в &file - относительный пусть к файлу шаблона assets/templates/mytemplate/file.html
    Ответ написан
    Комментировать
  • Как работает функция сортировки usort?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Ответ написан
    Комментировать
  • Где хранить огромное количество закладок?

    DevMan
    @DevMan
    пользую raindrop.
    не без косяков, но в целом доволен.
    Ответ написан
    8 комментариев
  • Где найти интересные решения макетов для интерфейса сайта?

    romansergeevich
    @romansergeevich
    interfaces.pro - живые
    froala.com/design-blocks - шаблоны
    Ответ написан
    Комментировать
  • Как быстро передать 100 Гб между двумя ПК в разных странах?

    @Fixid
    https://www.resilio.com/
    Суммарно перегнал 6Тб
    Выжирает весь 200мб/с канал между компом в России и сервером в США
    Юзает UDP
    Ответ написан
  • Как организовать процесс разработки масштабируемой системы?

    sim3x
    @sim3x
    Ваш вопрос вцелом не имеет смысла
    Хайлоад появляется только на успешных проектах

    Если вас просто мандраж перед термином
    Возьмите свой проект, любой
    Поставьте себе локально на виртуалку
    И поставьте себе задачу завалить его
    Потом отбейте свой ДДОС без потери легитимных пользователей

    каким образом организовать начальный этап этой разработки?Каков стек необходимого ПО и/или иных инструментов для этого?
    полностью зависит от ТЗ

    Под стеком не имею в виду на каком языке делать бэк, какую использовать БД и что использовать для кэширования, а интересует больше то, каким должно быть окружение процесса разработки - нужно ли с самого начала поддерживать "версионность" и если да, то как это делать?
    гит нужно использовать всегда
    Версионность данных желательно
    Как их хранить? - Делайте консистентные бекапы

    Где вообще изначально разворачивать систему - на локалке или нет?
    у вас джанга. При разработке используйте встроенный сервер, при деплое -nginx/uWSGI/postgreqsl

    если да, то хотелось бы более подробно какие инструменты для этого нужны и как, к примеру, потом с локалки проецировать на боевой сервак без танцев с бубном?
    ansible

    Нужно ли с самого начала задействовать несколько нод - для самого простого случая одна под базу, одна под бэк, одна под фронт или можно на одной все делать а потом как-то относительно просто масштабировать на другие ноды?
    нет. Вначале просто докупают больше мощности, потом выселяют субд на отдельный сервер, и только после такого думают как разделять бекенд.
    Или у вас в задаче прямо сказано, что у вас будет строго больше 10k RPS
    Ответ написан
    Комментировать
  • Как систематизировать изучение JS?

    @dimoff66
    Кратко о себе: Я есть
    По шагам:
    1. Базовые конструкции языка
    2. Функции работы со строками, массивами и объектами
    3. Работа с DOM
    4. Функции и замыкания
    4. ООП посредством функций
    5. ES6 (все полностью)
    6. Любой фреймворк
    Ответ написан
    Комментировать
  • Как систематизировать изучение JS?

    yurakostin
    @yurakostin
    Front-end developer
    Ссылок, собственно, дофига..

    https://learn.javascript.ru/
    https://github.com/getify/You-Dont-Know-JS
    jstherightway.org
    largescalejs.ru
    shop.oreilly.com/product/9780596517748.do
    https://habr.com/company/ruvds/blog/337042/

    У Кантора вполне себе систематизированный учебник. Именно с него я начал, когда понял, что jquery для меня недостаточно.
    Но дело не только в том, что вы читаете учебник. Я уже 100500 раз, наверное, это говорю, но:
    1. Вы должны решать все задачи, которые есть в списке задач к главам.
    2. Важно ещё пытаться применить полученные знания где-то: в своей работе, или в какой-то выдуманной задаче. То есть, например, нужно использовать `Array.prototype.filter` столько раз, чтобы не возникало больше вопросов "как оно работает?", чтобы руки "помнили".

    Разумеется, это всё нужно для того, если вы хотите во фронт. Пласт информации огромный. Сам js, браузерные API, и прочее-прочее..

    Может быть, что всё выше - оффтоп, но дело в том, что нет систематизированного подхода, как мне кажется.
    Есть знакомые, которые умеют работать только с DOM-ом и событиями, а как работать с данными в js, что такое замыкания - не знают. А сайт Ильи Кантора им почему-то кажется сложным.

    Просто решайте разные задачи: работайте с данными; рисуйте на canvas, svg; манипулируйте DOM-ом; используйте service worker-ы; etc.. Это и будет расширять ваш кругозор..
    Но начать я бы советовал всё-таки с учебника Ильи ;)
    Ответ написан
    Комментировать
  • Как систематизировать изучение JS?

    Stalker_RED
    @Stalker_RED
    Если это не первый язык, то основы синтаксиса вы быстро освоите.

    Затем встроенные методы работы со строками, массивами, объектами. Это не обязательно зубрить, какой-нибудь Array.forEach и так рано или поздно усвоится, но желательно знать какие вообще методы бывают и где о них почитать подробнее.

    Приведение типов немного отличается от PHP, надо привыкнуть.

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

    Асинхроность отдельным пунктом.

    Потом (или параллельно) браузерный API и DOM. Объемы там в разы больше чем собственно в языке, но для повседневной работы нужно далеко не все, тут тоже важно понять какие возможности существуют в принципе, и где примерно в справочнике их найти.

    И затем фремворки и библиотеки.

    Естественно вы можете немного переставлять эти пункты местами и что-то изучать параллельно, но у вас не получится изучить Vue до того, как освоите основы синтаксиса.

    Учебник https://learn.javascript.ru/ неплох, но можно почитать и бумажную книгу какую-то.

    Отдельные темы неплохо расписаны на mdn, но все-же это в первую очередь крутой справочник, а не структурированный учебник.

    Основы языка можно потренировать на codewars. Очень круто, если решаешь задачу не подглядывая, а потом сравниваешь свой код с топовыми ответами и разбираешься почему у них 7 строчек, а у тебя 30. Но надо вовремя остановиться и не увлечься написанием всякой нечитаемой фигни.
    Ответ написан
    1 комментарий