• Нормально ли я отрефакторил if-else?

    EvgenyMamonov
    @EvgenyMamonov Куратор тега Go
    Senior software developer, system architect
    Я бы посоветовал оставить начальный вариант, т.к. если сделаете banchmark'и - вы увидите, что он будет быстрее вашей реализации.
    Т.к. в начальной реализации нет доп. вызова функции, а в вашей есть getRulesResult.
    Чтобы вызвать функцию - нужно положить значения в стек, а по завершению извлечь.
    За счёт этого ваша реализация будет работать медленнее.
    Но это замечание справедливо только для функций, скорость выполнения которых критична, как сортировка например.

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

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

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

    Но вы однозначно на верном пути, принятые решения и подход мне нравятся, просто у вас не совсем удачная задача для рефакторинга выбрана, решение изначально хорошее )

    Обычно, код, который нужно рефакторить выглядит во много раз непонятнее, это может быть простыня на несколько экранов монитора :)), а когда в такой простыне еще и цикломатическая сложность огромная (вложенность if'ов и for'ов большая) - такой код вообще очень трудно понять :)
    Вот тут самое то для рефакторинга.
    Ответ написан
    3 комментария
  • Как получить элементарные общеинформационные знания, не прикасаясь к учебникам по информатике?

    samodum
    @samodum
    Какой вопрос - такой и ответ
    Дональд Кнут.
    Там ни слова о принтерах, зато всё об информатике
    Ответ написан
    3 комментария
  • Не работают тесты и gopath, как исправить?

    Отключите GOPATH интеграцию (File | Settings | GOPATH | Index entire GOPATH), инициализируйте новый go.mod файл (go mod init в корне проекта) и затем перейдите к импорту, нажмите Alt+Enter и должна появиться кнопка Sync Dependencies.

    После этого зависимости добавятся в файл go.mod и будут успешно резолвится.

    Советую уже не использовать GOPATH подход, поскольку в последующих версиях Go он уже будет идти как deprecated.

    P.S если будете использовать Go Modules и хотите импортировать локальный проект, то рекомендую обратиться к этой статье: https://golangbyexample.com/import-local-module-golang/

    P.S.S самое лучшее объяснение как всё это работает в официальной документации: https://golang.org/doc/code#Workspaces
    Ответ написан
    Комментировать
  • Есть ли интерактивный курс по Vue.js?

    IonDen
    @IonDen
    JavaScript developer. IonDen.com
    Мне в свое время очень помогли вот эти:
    https://www.vuemastery.com/
    Ответ написан
    Комментировать
  • Какую профессию выбрать для девятиклассника не знающего что такое IT?

    saboteur_kiev
    @saboteur_kiev Куратор тега IT-образование
    software engineer
    Человечек ничего не умеет и не очень хочет кроме как поступать в IT, но куда?

    Пусть сам думает, не надо за таких что-либо решать.

    Единственное скажу, что по итогам, успешное трудоустройство — это главное, иначе — это зря потраченное время.

    Как вы думаете, почему в школе люди получают разные оценки, хотя учатся у тех же преподавателей, по тем же учебникам, и даже сидят рядом на тех же уроках?

    Никакое образование не дает знаний. Знания берет сам ученик, и если он их умеет брать, то неважно куда поступать, сам изучит нужные и интересные области. А если его просто отправить в лучший институт на факультет ИТ, и он там просто просидит 5 лет, так ничего и не хотя - естественно ничего не получится и никуда не устроится.

    Как выбрать профессию, как проверить его способности и куда направить?

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

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

    Поэтому мой совет - не лезьте в его жизнь. Если он хочет в ИТ - пусть научится пользоваться поиском - в инете СТОЛЬКО информации, что все можно узнать. И если он даже на это не готов потратить усилия, а хочет чтобы ему кто-то сразу все разжевал за него - то ему точно не в ИТ. Тут нужно уметь работать с большим количеством информации и уметь его фильтровать самостоятельно.
    Ответ написан
    Комментировать
  • Что делать с кодом после того, как он написан?

    romesses
    @romesses
    Backend инженер
    Когда ПО разработано, его нужно доставить до конечного пользователя. Это называется развертывание ПО, англ. Software deployment (Википедия).
    ПО может работать на другом компьютере, или на специальной железяке с функцией сервера, к которой доступ осуществляется по сети. В случае работы на сервере, ПО должно работать в функции сервера, обрабатывающего запросы с клиента.

    Для настольного обычно используют установщики ПО (software installer). Подготовив набор файлов установщика (обычно 1 файл), его публикуют где-то в каталогах ПО в интернете или просто на своем веб-сайте. Пользователь, скачивая, устанавливает ПО и запускает его для работы.

    Для развертывания ПО на сервере есть множество способов.
    Примитивный способ:
    запаковать в ZIP, затем перенести код на сервер по FTP, распаковать в директории.

    Более разумный:
    У себя на компьютере разрабатывать и когда добавлена новая фунция или исправление, синхронизировать изменения по Git в хостинг Git (GitLab.com, GitHub.com, BitBucket.com и прочие). При разворачивании на сервере синхронизировать с репозитория Git на сервер.

    Есть веб-сайты поставщиков услуг, при помощи которых можно устанавливать ПО, умея работать лишь с Git (PaaS). Суть состоит в том, что при синхронизации кода на удаленный репозиторий Git, срабатывает установка установщика и он сам автоматически устанавливает ПО и запускает новую версию. И все это без необходимости в знании как работают сервера.
    Ответ написан
    Комментировать
  • Как стать специалистом ИБ?

    @dmshar
    Для того, что бы стать специалистом по информационной безопасности, надо:
    Научиться САМОСТОЯТЕЛЬНО (!!!!!!!) искать ответы на свои вопросы. Ну хотя-бы на том самом ресурсе, на котором вы решили задать свой супер-необычный, уникальный и неповторимый вопрос.
    Если этого не умеете - то никак. Если по этой теме вы нашли мало информации в интернет, то это означает, что искать вы еще не научились.
    Ну вот, просто три секунды поиска:
    С чего начать изучение ИБ?
    Что изучать, чтобы стать специалистом инфо.безопасности?
    Как стать специалистом по информационной безопасности?
    Как лучше углубиться в ИБ?
    Можете посоветовать какие-нибудь ресурсы и литературу по информационной безопасности?
    Как переквалифицироваться на специалиста в сфере ИБ?
    Какие книги посоветуете?
    С чего начать изучение ИБ?
    Ответ написан
    Комментировать
  • Почему "игровые" и "рабочие" ноутбуки стоят почти одинаково?

    @Tabletko
    никого не трогаю, починяю примус
    "Рабочий ноутбук" - это бизнес серия (например dell latitude, hp probook/elitebook, lenovo thinkpad). Есть отдельная линейка мобильных рабочих станций, вроде dell precision или hp zbook.
    "Игровой ноутбук" называют так за наличие дискретной видеокарты, и как написали выше, больше в маркетинговых целях.
    Ответ написан
    Комментировать
  • Почему "игровые" и "рабочие" ноутбуки стоят почти одинаково?

    anthtml
    @anthtml
    Системный администратор программист радиолюбитель
    В случае если название писали не маркитологи:
    Рабочий ноубук - про/бизнес серия - параметры оптимально рассчитанные / заточенные под выполнение основного круга типичных офисных задач, сниженный вес чтобы было легче таскать по командировкам, повышенная надежность чтобы при перетаскивании труднее было убить
    Игровой ноутук - дешевая машинка с которой выжимают максимум для геймеров на ближайшие 3-4 года, потом всеравно устареет и придется менять.
    Ответ написан
    Комментировать
  • Какие книги лучше подойдут новичку по bash?

    @MechanID
    Админ хостинг провайдера
    Начните с этого например: https://www.opennet.ru/docs/RUS/bash_scripting_guide/
    Ответ написан
    Комментировать
  • Есть какие-нибудь сайты, сервисы, которые предоставляют услуги по code review?

    Compolomus
    @Compolomus
    Комполом-быдлокодер
    https://scrutinizer-ci.com/
    Как я понял интересует go
    60268966e594b360235263.png
    Ответ написан
    Комментировать
  • Что можно почитать про написание кодогенераторов?

    vabka
    @vabka
    Токсичный шарпист
    Для каждого языка это будет по своему. В си и си++ макросы - это тоже кодогенераторы, в принципе.
    В целом принцип такой: Берём некоторые данные, файлы, исходный код, запускаем на нём некоторую программу-кодогенератор, которая эти данные обработает и создаст новые исходные файлы.

    Вот про C# source generators: https://devblogs.microsoft.com/dotnet/introducing-...
    Вот про T4: https://docs.microsoft.com/ru-ru/visualstudio/mode...
    Вот про кодогенерацию в го: https://golang.org/pkg/cmd/go/internal/generate/
    В rust есть декларативные и процедурные макросы, которые тоже генерируют код.
    Концепция так-то ужасно простая, я хз, что можно в книгах про неё написать.
    Ответ написан
    1 комментарий
  • Правильно ли я понимаю работу защищенных протоколов?

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

    Алгоритм этой операции такой:

    1. Сервер передает клиенту публичный ключ по незащищенному соединению.

    2. На основе публичного ключа сервера клиент создает разделяемый (общий) ключ, сохраняет его у себя.

    3. Клиент шифрует свой разделяемый ключ и в зашифрованном виде передает серверу.

    4. Сервер расшифровывает зашифрованный разделяемый ключ c помощью своего приватного ключа и получает разделяемый ключ у себя.

    Ассиметричное шифрование свою задачу выполнило - handshake состоялось. Далее клиент и сервер имея разделяемый ключ могут обмениваться уже симметрично зашифрованными данными.
    Ответ написан
    Комментировать
  • Можно ли ускорить архивацию/разархивацию за счет распараллеливания ??

    @Mercury13
    Программист на «си с крестами» и не только
    Если использовать стандартную библиотеку сжатия (например, ZLIB), будет проблематично. Нужно как минимум писать своё сжатие с блэкджеком и многопоточностью.
    Однако можно распараллелить разархивацию и интерпретацию того, что разархивировалось, и это помогает. Проверено (писал сохранение в простой блочный формат, запаковываемый в ZIP).
    Архивация на ZLIB с высшей степенью сжатия упирается не в SSD, а в процессор. Тоже проверено. Для баланса между сжатием и остальной функциональностью установил степень сжатия в четвёрку.
    Ответ написан
    Комментировать
  • Можно ли ускорить архивацию/разархивацию за счет распараллеливания ??

    @dmtrrr
    Backend developer
    Параллельные вычисления ускоряют CPU bound задачи.
    Ответ написан
    Комментировать
  • Можно ли ускорить архивацию/разархивацию за счет распараллеливания ??

    Adamos
    @Adamos
    7z еще лет десять назад начал поддерживать многопроцессорную обработку архивов. Его собственный алгоритм потяжелее zip, но распаковывать zip-ы он тоже умеет.
    7z -mmt={количество потоков}
    Ответ написан
    2 комментария
  • Можно ли ускорить архивацию/разархивацию за счет распараллеливания ??

    @kalapanga
    У 7-zip есть опция для управления многопоточностью. Можете потестить или даже исходники посмотреть.
    Ответ написан
    Комментировать
  • Почему не получается запустить исполняемый файл на флешке (ubuntu)?

    vaut
    @vaut
    На флешке скорее всего у вас FAT32.
    В FAT32 не могут храниться атрибуты, так что бита X там нет и не может быть. Как следствие бинарник вы с него не запустите.
    Google говорит, что можно всей файловой системе установить права при монтировании.
    Ответ написан
    1 комментарий
  • Есть ли быстрый алгоритм поиска подстроки с пропусками в строке?

    Lynn
    @Lynn
    nginx, js, css
    Есть стандартный механизм. Называется «регулярные выражения».

    Впрочем в этом конкретном случае непонятно зачем нужно что-то сохранять в отдельный массив. Нужно просто найти 0xFF 0xDD сдвинуться на три байта вправо и проверить, что там 0xFF. Примерно так (псевдокод):
    for(int i = 0; i < data.size - 4; i++) {
      if (data[i] == 0xFF && data[i+1] == 0xDD && data[i+4] == 0xFF) {
        // нашёл
      }
    }
    Ответ написан
    Комментировать
  • Как правильно хранить ключ шифрования для десктопных приложений?

    Protos
    @Protos
    Спрашивай - отвечу
    Не слушайте этого экс олимпиадника Илью, отмените ответ на вопрос. Вариант безопасно хранить пароль это использовать встроенный TPM модуль материнской платы или внешний функциональный ключевой носитель (eToken, например). Эти средства не позволяют закрытому ключу оказаться вне контейнера т.к. расшифрование и электронная подпись осуществляются внутри этих устройств. Ну есть у тебя мастер пароль, это всего лишь один этап для злоумышленника. Есть еще технологии HSM, даже программные есть. Если же вы хотите хранить локально, то нет смысла его как-то защищать кроме мониторинга обращения к контейнеру с паролем и клбча в реальном времени. Обратился не тот процесс - пк вырубается либо вы выбегаете с кочергой и бежите бить злоумышленника
    Ответ написан
    3 комментария