• Swift: Копируй-изменяй

    • Tutorial


    Часто бывает так, что нам нужно скопировать объект, изменив некоторые его свойства, но сохранив остальные неизменными. Для этой задачи существует функция copy().

    Это отрывок описания метода copy() из документации Kotlin. На нашем родном языке Swift это означает примерно такую возможность:


    struct User {
        let id: Int
        let name: String
        let age: Int
    }
    
    let steve = User(id: 1, name: "Steve", age: 21)
    
    // Копируем экземпляр, изменив свойства `name` и `age`
    let steveJobs = steve.changing { newUser in
        newUser.name = "Steve Jobs"
        newUser.age = 41
    }

    Выглядит вкусно, не так ли?


    Увы, в Swift отсутствует подобный функционал "из коробки". Это небольшое руководство поможет реализовать его самостоятельно.

    Читать дальше →
    • +11
    • 2,6k
    • 6
  • Создание roguelike в Unity с нуля

    • Перевод
    image

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

    Примечание: я не утверждаю, что это единственный способ создания roguelike в Unity. Он просто один из. Вероятно, не самый лучший и эффективный, я учился путём проб и ошибок. А некоторые вещи я буду изучать прямо в процессе создания туториала.

    Будем считать, что вы знаете по крайней мере основы Unity, например, как создать префаб или скрипт, и тому подобное. Не ждите, что я буду учить вас, как создавать спрайтшиты, об этом есть множество прекрасных туториалов. Я буду делать упор не на изучение движка, а на то, как реализовать игру, которую мы будем создавать вместе. Если у вас возникнут трудности, то зайдите в одно из потрясающих сообществ в Discord и просите о помощи:

    Unity Developer Community

    Roguelikes

    Итак, давайте приступим!

    Этап 0 — планирование


    Да, всё верно. Первое, что нужно создать — это план. Вам хорошо будет спланировать игру, а мне — спланировать туториал, чтобы спустя время мы не отвлеклись от темы. В функциях игры легко запутаться, прямо как в подземельях roguelike.

    Мы будем писать roguelike. В основном мы будем слушаться мудрых советов разработчика Cogmind Джоша Ге, приведённых здесь. Сходите по ссылке, прочитайте пост или посмотрите видео, а потом возвращайтесь.

    Какова же цель этого туториала? Получить крепкую простую базовую roguelike, с которой потом можно будет экспериментировать. В ней должна быть генерация подземелий, движущийся по карте игрок, туман видимости, враги и предметы. Только самое необходимое. Итак, игрок должен иметь возможность спускаться вниз по лестницам на несколько этажей. допустим, на пять, повышать свой уровень, совершенствоваться, а в конце сражаться с боссом и побеждать его. Или умирать. Вот, собственно, и всё.
    Читать дальше →
    • +7
    • 10,3k
    • 3
  • Почему Discord переходит с Go на Rust

    • Перевод


    Rust становится первоклассным языком в самых разных областях. Мы в Discord успешно используем его и на серверной, и на клиентской стороне. Например, на стороне клиента в конвейере кодирования видео для Go Live, а на стороне сервера для функций Elixir NIF (Native Implemented Functions).

    Недавно мы резко улучшили производительность одной службы, переписав её с Go на Rust. В этой статье объясним, почему для нас имело смысл переписать службу, как мы это сделали и насколько повысилась производительность.
    Читать дальше →
  • Проверка б/у макбука перед покупкой — чек-лист

    Статья доработана с учетом ценных комментариев, дополнен список источников.
    Данный чек-лист — компиляция нескольких источников, я его делал для себя, когда в конце 2019 года покупал 13" б/у макбук 2015 года, последний из имевших нормальную клавиатуру и набор портов, перед тем как Apple перешла на клавиатуру-бабочку и usb-с порты.

    Какую модель б/у макбука стоит брать? Вместо введения


    На этот вопрос нет однозначного ответа, поскольку все зависит от ваших задач. Для начала 2020 года и задач «офисной» работы и серфинга я бы сформулировал ответ так — можно брать любой мак от 2014 и более позднего года выпуска, на полноценном процессоре (m5 и m7 брать скорее нежелательно). Macbook pro таким образом предпочтительнее macbook air, поскольку у последних процессор и система охлаждения обычно проигрывает в сравнении.

    Оптимальный выбор, который проработает еще несколько лет без проблем — это модели с четырехядерным процессором (не путать с четырехпоточным!), такие ставили обычно в 15" модели. Оперативки не менее 8 Гб, SSD лучше 256 Гб и больше, хотя на 128 с определенными неудобствами жить тоже можно. Батарея оптимально с менее чем 500 циклами перезарядки.

    Стоимость 13" макбуков 2014-2016 годов колеблется от 40 до 55 тыс. рублей, причем варианты в хорошем состоянии около 40-45 тыс. мне кажутся наиболее выгодными с точки зрения дилеммы «взять б/у или доложить и взять новый».

    Надо иметь ввиду, что все модели 2013-2015 года включительно очень ограничены с точки зрения апгрейда, а апгрейд моделей с 2016 и более поздних вовсе невозможен, поэтому берите сразу конфигурацию, которой вам хватит на ближайшие 2-3 года.

    Моделей с клавиатурой-бабочкой (2016-2019 гг) не то что бы надо избегать, но надо отдавать себе отчет, что они требуют радикально более бережного к себе отношения, чтобы клавиатура проработала дольше. Сейчас полно предложений продажи mac mini — это тоже хороший вариант, особенно если он базируется на нормальном четырехядерном процессоре.
    Читать дальше →
  • В самом популярном фрагменте кода за всю историю StackOverflow ошибка! 

    • Перевод
    Недавнее исследование «Использование и атрибуция сниппетов кода Stack Overflow в проектах GitHub» внезапно обнаружило, что чаще всего в опенсорсных проектах встречается мой ответ, написанный почти десять лет назад. По иронии судьбы, там баг.

    Давным-давно…


    Еще в 2010 году я сидел в своём офисе и занимался ерундой: развлекался код-гольфингом и накручивал рейтинг на Stack Overflow.

    Моё внимание привлёк следующий вопрос: как вывести количество байт в удобочитаемом формате? То есть как преобразовать что-то вроде 123456789 байт в «123,5 МБ».


    Старый добрый интерфейс 2010 года, спасибо The Wayback Machine
    Читать дальше →
  • Скучный технологический стек интернет-компании из одного человека

    • Перевод

    Поисковая выдача на ListenNotes.com

    Listen Notes — это поисковая система и база данных подкастов. Технология на самом деле очень скучная. Никакого ИИ, глубокого обучения или блокчейна. «Если вы должны объявлять о внедрении ИИ, то вы не используете Настоящий ИИ» :)

    После прочтения этой статьи вы сможете повторить мой проект или легко сделать нечто подобное. Не придётся нанимать много разработчиков. Помните, когда Instagram привлёк $57,5 млн и отошёл к Facebook за $1 млрд, у них было всего 13 сотрудников — и это не только разработчики. Покупка Instagram произошла в начале 2012-го. Сейчас 2019 год, и сегодня как никогда просто создать что-то значимое с крошечной инженерной командой — даже из одного человека.
    Читать дальше →
  • Новый язык программирования Mash

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

    В этой статье я хочу осветить основные этапы своей работы и для начала описать созданный концепт языка и его первую реализацию над которой сейчас работаю.
    Читать дальше →
  • Пишем свой язык программирования, часть 2: промежуточное представление программ

    • Tutorial
    image

    Введение


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

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

    В первой части (линк: habr.com/post/435202) я описал этапы проектирования и написания языковой ВМ, которая будет выполнять наши будущие приложения на нашем будущем языке.
    В этой статье я планирую описать основные этапы создания промежуточного языка программирования, который будет собираться в абстрактный байткод для уже непосредственного выполнения на нашей ВМ.

    Думаю, что не помешает сразу привести ссылки на сайт проекта и его репозиторий.

    Сайт
    Репозиторий
    Читать дальше →
    • +14
    • 12,7k
    • 1
  • Пишем свой язык программирования, часть 3: Архитектура транслятора. Разбор языковых структур и математических выражений

    • Tutorial
    image

    Введение


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

    Для начала, по устоявшимся традициям, я приведу ссылки на предыдущие статьи:

    Часть 1: пишем языковую ВМ
    Часть 2: промежуточное представление программ

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

    Также мне стоит разместить сразу ссылку на статью о проекте, который был написан мной ранее и на основе которого идет весь этот разбор полётов: Клац сюды. С ним пожалуй стоит ознакомиться первым делом.

    И немного о проекте:

    Небольшой сайт проекта
    GitHub репозиторий

    Ну и также скажу сразу, что все написано на Object Pascal, а именно — на FPC.

    Итак, начнем.
    Читать дальше →
  • Пишем свой язык программирования, часть 1: пишем языковую ВМ

    • Tutorial

    Введение


    Доброго времени суток всем хабрачитателям!

    Итак, пожалуй стоит сказать, что целью моей работы, на основе которой будет написан ряд статеек было пройти весь путь создания полнофункционального ЯП самому с 0 и затем поделиться своими знаниями, наработками и опытом с интересующимися этим людьми.

    Я буду описывать создание языка, который описал ранее тут.

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

    Думаю, что сразу стоит выложить информацию о проекте:

    Сайт (будет заполнен документацией чуть позже).
    Репозиторий

    Чтобы самому потрогать проект и увидеть все в действии, лучше скачать репозиторий и запускать все из папки bin. В релиз я не спешу выкладывать последние версии языка и среды выполнения, т.к. мне порой бывает просто лень это делать.

    Кодить я умею на C/C++ и на Object Pascal. Проект я писал на FPC, т.к. на мой взгляд этот язык гораздо проще и лучше подходит для написание подобного. Вторым определяющим фактором стало то, что FPC поддерживает огромное количество целевых платформ и пересобрать проект под нужную платформу можно с минимумом переделок. Если вы по непонятным мне причинам не любите Object Pascal, то не спешите закрывать пост и бежать кидаться камнями в комментарии. Этот язык весьма красив и нагляден, а кода я буду приводить не так уж и много. Только то, что нужно.

    Итак, начну пожалуй я своё повествование.
    Читать дальше →
  • Пишем свой язык программирования, часть 4: Представление структур и классов, генерация аллокаторов

      image

      Доброго времени суток тем, кто решил ознакомиться с моей очередной статьёй.

      Первым делом выкладываю ссылки на предыдущие части:
      Часть 1: пишем языковую ВМ
      Часть 2: промежуточное представление программ
      Часть 3: Архитектура транслятора. Разбор языковых структур и математических выражений

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

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

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

      Начнем творить…
      Читать дальше →
    • iTrace. Как пишутся буквы?

      Что это за приложение?


      iTrace — это мобильное приложение для того, чтобы научить детей писать буквы. Электронные прописи на iPad. Сейчас она используется в нескольких странах мира (в основном в США) для обучения детей письму. Придумал и организовал всю работу по проекту Миша Богорад, а мне довелось участвовать в проекте разработчиком всяких внутренностей, главным образом, отрисовкой букв и анализом качества их рисования.

      Идея, сложности


      Идея iTrace ничем не отличается от обычных прописей. Берём букву, просим ребёнка её нарисовать, подсказывая, если ему трудно. Сначала буква большая и ошибиться можно сильно, потом она уменьшается, и допуск тоже всё меньше и меньше. В конце-концов ребёнок, благодаря привычке, запоминает, как пишется буква.
      image

      В статье я расскажу про сложности, с которыми пришлось столкнуться и то, как их удалось решить. Если тема окажется интересной, спрашивайте в комментариях, про техническую часть я могу рассказать подробнее.
      Читать дальше →
    • Почему Apple идёт в суд

      • Перевод


      Критики щедро приписывают Apple целый ряд мотивов, из-за которых она постоянно судится. По их мнению Apple судится, чтобы монополизировать рынок и продавать свои товары по завышенной цене. Вытеснить с рынка конкурентов или наказать их за то, что они не think different. И конечно, что всё это – часть большого плана Apple по глобальному техническому доминированию.

      Но в реальности все эти предположения не являются настоящим мотивом Apple. Будучи логичными внешне, на деле эти мнения лишь играют на эмоциях, выставляя в негативном свете сложные технические, юридические и этические аспекты проблемы и заставляют читателя согласиться с автором в том, что Apple – плохие ребята.

      На деле же у Apple практически всего один реальный мотив для судов и об этом ниже.
      Читать дальше →
    • SSD и HDD в теле одного MacBook Pro

        Приветствую, уважаемые хабражители.

        Мой опыт, которым я хочу с вами поделиться, должен оказаться полезным для всех пользователей ноутбуков, хотя мой частный пример — MacBook Pro.

        После покупки сего агрегата, с порядковым номером в линейке: 6.1, я ожидал невиданных ранее скоростей, но, увы, предательская каруселька перегрузки, на месте курсора > image появлялась достаточно часто, заставляла себя ждать, мучила вопросом «как так?!» при этом скорость загрузки тотально укомплектованной операционной системы составляла примерно 2+ минуты, с загрузкой 5-и приложений (различной тяжести) на автозапуске.

        Такие показатели + периодические подвисания оказались досадным и обидным заключением, ведь под капотом процессор i7 / 4Gb DDR3 / 5 Series Chipset с возможной скоростью обмена данными в 3 гигабита.

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

        Добро пожаловать под хабракат, там сказ о эффективном разгоне моего инструмента.
      • Чистящий кибер-гель (Cyber Clean®)


          Cyber Clean® — гель, способный очистить любой девайс от пыли, грязи и как заявляет реклама, даже от некоторых болезнетворных бактерий, которые живут на ваших клавиатурах, телефонах и т.п.
          alarm: Траффик, много видео с YouTube.com.
          Читать дальше →
        • Core Data для iOS. Глава №1. Теоретическая часть

            Хабралюди, добрый день!
            Сегодня хочу начать написание ряда лекций с практическими заданиями по книги Михаеля Привата и Роберта Варнера «Pro Core Data for iOS», которую можете купить по этой ссылке. Каждая глава будет содержать теоретическую и практическую часть.



            Содержание:
            • Глава №1. Приступаем (Практическая часть)
            • Глава №2. Усваиваем Core Data
            • Глава №3. Хранение данных: SQLite и другие варианты
            • Глава №4. Создание модели данных
            • Глава №5. Работаем с объектами данных
            • Глава №6. Обработка результатирующих множеств
            • Глава №7. Настройка производительности и используемой памяти
            • Глава №8. Управление версиями и миграции
            • Глава №9. Управление таблицами с использованием NSFetchedResultsController
            • Глава №10. Использование Core Data в продвинутых приложениях


            Читать дальше →
          • Продвижение мобильного приложения: с чего начать

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

            Итак, с чего начать?



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

            Немного подробнее остановимся на каждом пункте.
            Читать дальше →
          • Альтернативные крестики-нолики

            • Перевод
            Однажды на пикнике я заметил математиков, толпящихся возле игры, интереса к которой я ожидал меньше всего: крестики-нолики.

            Вы могли и сами заметить, что игра крестики-нолики смертельно скучна. В ней нет места творческой идее или внезапному озарению. Хорошие игроки всегда играют вничью. Игра неизбежно идёт примерно так:



            Но математики на пикнике играли в более изощренную версию игры. В каждой из клеток на квадратном поле они нарисовали поле поменьше:
            Читать дальше →
          • Оптимизация ключевых слов для приложений в App Store

            • Tutorial
            Сегодня, многие разработчики и большинство специалистов по продвижению мобильных приложений говорят об оптимизации ключевых слов для App Store. Хочу еще раз четко обозначить, что ASO в целом (длинную вводную статью про App Store Оptimization читать тут) и оптимизация ключевых слов в частности это не панацея. Но это обязательная вещь, которую вы можете освоить и выполнить самостоятельно, сэкономить кусочек маркетингового бюджета и радоваться примерно таким цифрам в статистике:



            Ниже предлагаю конкретный пример в качестве инструкции:
          • О том, как выпустить отличное iOS приложение, которое кому-то нужно

              У меня déjà vu?
              У некоторых хабраюзеров может возникнуть ощущение дежа вю. Все дело в том, что данная статья уже публиковалась на хабре месяц назад, однако по незнанию я в ней поставил ссылки на приложение и его обзоры. Карающая длань модератора очень быстро настигла меня. Публикую вновь, на сей раз без ссылок.

              Мотивом написания данной статьи в чем-то послужил другой хабратопик «О том, как выпустить отличное iOS приложение, которое никому не нужно». Я попробую рассказать о том как выпустить отличное приложение, которое кому-то все же нужно, но на котором не получилось заработать.

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

              Не мне судить о том, можно ли считать эту историю success-story. Наверное все же нет. Этот проект — мой успех как программиста и менеджера проекта в одном лице и одновременно это мой провал как маркетолога и человека, который не против заработать немного денег.
              Ну и, конечно, однозначный успех для моей жены Александры и ее брата — дизайн приложения, о котором идет речь, это их первый дизайн мобильного приложения, давший дорогу к дальнейшей интересной работе.

              Также для любителей цифр скажу — все цифры в статье будут. Расскажу сколько скачиваний, сколько заработано, сколько инаппов куплено и сколько раз их пытались сломать.
              Читать дальше →