• Codable: Советы и Примеры

    • Перевод
    Хотел бы поделиться с вами некоторыми советами и трюками, которые я использовал на этом примере.

    Скачайте Swift Playground со всем кодом из этой статьи:

    image

    Codable представлен в Swift 4 с целью заменить старый NSCoding API. В отличие от NSCoding у Codable есть поддержка JSON первого класса, что делает его перспективным вариантом для использования API JSON.

    Codable отлично подходит в качестве NSCoding. Если имеется необходимость кодировать или декодировать некоторые локальные данные, которые вы должны контролировать в полной мере, вы можете использовать преимущество автоматического кодирования и декодирования.
    Читать дальше →
  • Комментирование кода: хороший, плохой, злой

    • Перевод
    • Tutorial


    Вы наверняка это слышали: «Хороший код является самодокументированным».

    Я больше 20 лет зарабатываю написанием кода, и слышал эту фразу чаще всего. Это клише.

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

    Она истинна? Да.

    Означает ли она, что вы никогда не должны комментировать код? Нет.

    В этой статье мы рассмотрим разные аспекты комментирования кода.
    Читать дальше →
  • Не пишите лишнего

      Все думают, что программист большую часть своего рабочего времени пишет код. Кроме самих программистов. Они знают, что большую часть времени они этот код читают. Читают, силясь понять, как же он работает, зачем он здесь написан и что с ним теперь делать.


      Дольше всего приходится вычитывать не хитрые алгоритмы, и не решения с алгебраическими типами данных и монадами, а огромные куски простого кода: методы на 500 строк, скрипты на 1000 строк, классы на 1500 строк. Все они доставляют индустрии проблем не меньше, чем печально известное NullPointerException.

      Читать дальше →
    • HoleyBeep: объяснение и эксплоит

      • Перевод
      • Tutorial


      В былые времена люди использовали \a для генерирования неприятных «гудков» из спикеров системных блоков. Это было особенно неудобно, если хотелось генерировать более сложные звуковые последовательности вроде 8-битной музыки. Поэтому Джонатан Найтингейл написал программу beep. Это была коротенькая и очень простая программа, позволявшая тонко настраивать звучание из спикера.

      С появлением X-сервера всё стало куда сложнее.

      Чтобы beep могла работать, пользователь должен был либо быть суперпользователем, либо являться владельцем текущего tty. То есть beep всегда будет работать у root-пользователя или у любого локального, но не будет работать у не-root удалённого пользователя. При этом любой терминал (например, xterm), подключённый к X-серверу, считается «удалённым», и поэтому beep работать не будет.
      Читать дальше →
      • +21
      • 5,3k
      • 7
    • Вредные советы для программистов 1С

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

        Каждая из этих профессий — безусловно нужная и почетная, и принадлежащий к ней может с гордостью рассказывать о своем опыте, боли, провалах и достижениях.

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

        Некоторые из них действуют смело и решительно — пытаются доказать всему миру, что 1С — это не программа для бухгалтерии, это самая крутая платформа для автоматизации бизнеса, уверенно захватывающая рынки, осваивающая новые технологии, создающая и развивающая свои собственные. Такие люди, безусловно, вызывают самые сильные ответные чувства. Они — как сильные, гордые и уверенные в себе отрицательные герои фильмов. Ну, знаете, такие, которые затмевают положительных.

        Но большинство 1Сников, увы, не такие. Скромные, тихие, считающие свою «одинэсность» — постыдным недостатком, психическим или физическим заболеванием. Читая Хабр, они вынуждены скрывать свои «желтые трусы», чтобы не быть с позором изгнанными, оплеванными и поруганными.

        Они читают о разработке игр, веб-приложений, машинном обучении, работе за рубежом, Google и Apple, и плачут. А потом отторгают, злятся, бросают читать, возвращаются в бухгалтерию… Но возвращаются снова и читают.

        Публикация — для них.

        Читать дальше →
      • Проверяй входящие данные. Исходная причина уязвимости и атаки на Cisco IOS

          Cisco IOS function weak

          В пятницу 6 апреля 2018 началась мощная атака на оборудование Cisco.

          Много пишут о том, что главная причина, по которой эта атака успешна, это открытые во внешние сети сервисные порты Cisco Smart Install.

          Эти порты открыты по умолчанию. А люди в массе своей оставляют то, что сконфигурировано/выбрано/настроено таким, каким оно было по умолчанию. Как видим, на примере этого случая, это касается не только домашних роутеров, но и серьёзного оборудования в крупных компаниях, где цена ошибки значительно выше.

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

          Вы лишь можете заставить изменить эти значения с помощью каких либо ограничивающих использование приёмов. Чему многие будут не рады. «Защита от дурака» это один из примеров этих обязывающих ограничений.

          Про выбор по умолчанию
          Есть исследование 2003 года «Спасает ли жизни выбор по умолчанию?», в котором есть диаграмма

          image

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

          Я хочу обратить внимание на корень самой уязвимости. В отчёте есть такая часть:
          Читать дальше →
        • Ой, у вас баннер убежал!

          Ну. И что?
          Реклама
        • Code Conventions: как мы сохраняем быстрый темп разработки PHP-проекта

            Привет, Хабр. Меня зовут Евгений Удодов, я сооснователь и технический директор компании Roistat. Хочу поделиться нашим опытом разработки большого и сложного продукта — системы аналитики.

            TL;DR: Мы выложили на github наш Code Conventions и рассказали в статье о том, как его применять на практике.

            При разработке больших продуктов существует распространенная проблема — с течением времени накапливается много legacy-кода, задачи делаются все медленнее и медленнее. Также при росте команды разработчики начинают писать код по-разному и отсутствие единых правил может приводить к конфликтам и спорам.

            За 4 года существования нашего проекта мы сделали больше 20 000 Pull Request’ов (далее PR) и под катом я расскажу, как же мы решили эти проблемы.


            Читать дальше →
          • Requiem for a Dream

              Пролог


              — Ты, главное, не ссы! Держись меня, делай как я, и все будет чики-пуки.

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

              — Коль, давай посерьезнее. — Жанна строго посмотрела на круглую самодовольную рожу. Потом перевела взгляд на новенького. — Сергей, не слушай этого старого коня. Борозды он, конечно, не испортит, но и целины не поднимет.

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

              — Мы на тебя возлагаем большие надежды, Сережа. Николай у нас под завязку загружен текучкой — ее очень много. Мы понимаем, что действуем неэффективно, где-то что-то упускаем, используем устаревшие технологии и подходы… Но у нас реально нет времени остановиться, подумать, посмотреть, поучиться. Как писал Кови — наточить пилу.

              Сергей понимающе покивал головой. Он не знал, кто такой Кови, но метафору понял.

              — Ты — молодой, целеустремленный, не обремененный обязательствами и связями, амбициозный, и очень умный программист. У тебя за плечами очная Бауманка. Мы ждем от тебя новой струи свежего вохдуха, скачка в развитии наших систем, прорыва облачных технологий. Так, и только так!

              — Спасибо, Жанна Ивановна. Я буду стараться.

              — Никакого отчества, просто Жанна! Велкам в нашу команду, Сережа!
              Читать дальше →
            • Анатомическая метафора кода. Где у кода мускулы

                У кода есть мускулы. Правда-правда. Не веришь? Смотри:



                Весь код, который выполняет реальную работу: производит вычисления, преобразует данные, проверяет условия и т. д. — это «мясо». «Мышцы» программы. Код, который отвечает за структуризацию — «сухожилия». То, с помощью чего мышцы крепятся к костям. То, благодаря чему каждый отдельный мускул остаётся самостоятельным, а не слипается в бесформенный фарш. А что тогда «кости»? Кости — это пусть будет архитектура программы.

                Читать дальше →
              • Вам действительно нужен Redux?

                  Не так давно React позиционировал себя как "V in MVC". После этого коммита маркетинговый текст изменился, но суть осталась той же: React отвечает за отображение, разработчик — за все остальное, то есть, говоря в терминах MVC, за Model и Controller.


                  Одним из решений для управления Model (состоянием) вашего приложения стал Redux. Его появление мотивировано возросшей сложностью frontend-приложений, с которой не способен справиться MVC.


                  Главный Технический Императив Разработки ПО — управление сложностью

                  Совершенный код

                  Redux предлагает управлять сложностью с помощью предсказуемых изменений состояния. Предсказуемость достигается за счет трех фундаментальных принципов:


                  • состояние всего приложения хранится в одном месте
                  • единственный способ изменить состояние — отправка Action'ов
                  • все изменения происходят с помощью чистых функций

                  Смог ли Redux побороть возросшую сложность и было ли с чем бороться?

                  Читать дальше →
                Самое читаемое