• Docker + Laravel = ❤

      laravel-in-docker


      В данной статье я расскажу о своём опыте "заворачивания" Laravel-приложения в Docker-контейнер да так, что бы и локально с ним могли работать frontend и backend разработчики, и запуск его на production был максимально прост. Так же CI будет автоматически запускать статические анализаторы кода, phpunit-тесты, производить сборку образов.


      "А в чём, собственно, сложность?" — можешь сказать ты, и будешь отчасти прав. Дело в том, что этой теме посвящено довольно много обсуждений в русскоязычных и англоязычных комьюнити, и почти все изученные треды я бы условно разделил на следующие категории:


      • "Использую докер для локальной разработки. Ставлю laradock и беды не знаю". Круто, но как обстоят дела с автоматизацией и запуском на production?
      • "Собираю один контейнер (монолит) на базе fedora:latest (~230 Mb), ставлю в него все сервисы (nginx, бд, кэш, etc), запускаю всё супервизором внутри". Тоже отлично, прост в запуске, но как на счёт идеологии "один контейнер — один процесс"? Как обстоят дела с балансировкой и управлением процессами? Как же размер образа?
      • "Вот вам куски конфигов, приправляем выдержками из sh-скриптов, добавим магических env-значений, пользуйтесь". Спасибо, но как же на счёт хотя бы одного живого примера, который я бы мог форкнуть и полноценно поиграться?

      Всё, что ты прочитаешь ниже — является субъективным опытом, который не претендует быть истиной в последней инстанции. Если у тебя будут дополнения или указания на неточности — welcome to comments.


      Для нетерпеливых — ссылка на репозиторий, склонировав который ты сможешь запустить Laravel-приложение одной командой. Так же не составит труда его запустить на том же rancher, правильно "слинковав" контейнеры, или использовать продуктовый вариант docker-compose.yml как отправную точку.
      Читать дальше →
    • Git happens! 6 типичных ошибок Git и как их исправить

      • Перевод


      Прим. перев.: На днях в блоге для инженеров любимого нами проекта GitLab появилась небольшая, но весьма полезная заметка с инструкциями, которые помогают сохранить время и нервы в случае различных проблем, случающихся по мере работы с Git. Вряд ли они будут новы для опытных пользователей, но обязательно найдутся и те, кому они пригодятся. А в конец этого материала мы добавили небольшой бонус от себя. Хорошей всем пятницы!

      Все мы делаем ошибки, особенно при работе с такими сложными системами, как Git. Но помните: Git happens!
      Читать дальше →
    • Вариатор для «Москвича»

        Акселерация: старушка утверждает, что у «Москвича» некачественная коробка передач
        © М. Жванецкий


        «Сорок первый»


        В 1985 году в СССР появился новый автомобиль «Москвич-2141».

        Планировалось, что этот автомобиль третьей группы малого класса займет потребительскую нишу между массовой «восьмеркой» ВАЗ-2108 второй группы малого класса и престижной «Волгой» ГАЗ-24-10 среднего класса.

        Довольно большой, скоростной, комфортабельный (по советским меркам) автомобиль с некоторыми элементами шика (УКВ радиоприемник в штатной комплектации!), мечта советского человека.

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

        И если проблему с двигателем предполагалось со временем решить переходом с УЗАМ-331.10 и ВАЗ-2106 на новое семейство двигателей АЗЛК-21414, под которые началось строительство нового завода, то с автоматической коробкой передач все обстояло более печально. Строго говоря, автоматической коробкой не мог похвастаться ни один массовый советский автомобиль, включая предел мечтаний советской номенклатуры 24-ю «Волгу».

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


        Читать дальше →
      • Tutu PHP Meetup #1: видео выступлений

          image

          5 апреля в офисе сервиса путешествий Туту.ру прошел первый PHP Meetup. В гости пришло более 120 backend-разработчиков. Мы записали все выступления и делимся ими с вами.
          Читать дальше →
          • +10
          • 3,1k
          • 5
        • Планирование спидрана Morrowind с помощью имитации отжига

          • Перевод
          image

          Ну ты и соня, тебя даже вчерашний шторм не разбудил. Говорят, мы уже приплыли в Морровинд. Нас выпустят и позволят нам сделать спидран, это точно!

          Введение


          Существует знаменитый спидран основного квеста Morrowind, в котором, по сути, игрок перемещается к месту конца игры, использует несколько свитков и заклинаний, а затем убивает босса.

          Однако не существует категории спидранов Morrowind, в которой игрок стремится стать главой всех фракций. Несмотря на любовь критиков и отличный сюжет, большинство квестов Morrowind заключаются в заданиях «принеси вещь» или «убей этого типа», а квестов, в которых требуется что-то ещё, не так много. Но планирование такого маршрута спидрана всё равно может быть чрезвычайно интересным по следующим причинам:
          Читать дальше →
        • Книга Безопасность в PHP (часть 4). Недостаток безопасности на транспортном уровне (HTTPS, TLS и SSL)

          • Перевод


          Книга «Безопасность в PHP» (часть 1)
          Книга «Безопасность в PHP» (часть 2)
          Книга «Безопасность в PHP» (часть 3)


          Связь через интернет между участниками процесса сопряжена с рисками. Когда вы отправляете платёжное поручение в магазин, используя онлайн-сервис, то совершенно точно не хотите, чтобы злоумышленник мог его перехватить, считать, изменить или заново повторить HTTP-запрос к онлайн-приложению. Только представьте себе последствия того, что атакующий считает куку вашей сессии или изменит получателя платежа, товар, платёжный адрес. Или внедрит в разметку, отправляемую магазином в ответ на запрос пользователя, свой HTML или JavaScript.

          Читать дальше →
          • +16
          • 7,7k
          • 1
        • Вопросы для собеседования бэкенд-разработчика

          • Перевод
          Этот список появился как личная памятка по темам, которые я обсуждал с коллегами и друзьями и в которых хотел разобраться поглубже…

          Я не большой любитель задавать технические вопросы на собеседованиях: по мне так лучше посидеть с кандидатом (или кандидаткой) за клавиатурой над каким-то реальным кодом, реальной проблемой — и целый день заниматься парным программированием, желательно поочерёдно с остальными членами команды. Но я считаю, что некоторые технические вопросы могут быть хорошей отправной точкой для начала увлекательного и приятного разговора и позволят глубже узнать друг друга.

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

          • Tutorial


          Хочу поделиться полезными приемами работы с PostgreSQL (другие СУБД имеют схожий функционал, но могут иметь иной синтаксис).

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

          Данный материал будет полезен тем, кто полностью освоил базовые навыки SQL и желает учиться дальше. Советую выполнять и экспериментировать с примерами в pgAdmin'e, я сделал все SQL-запросы выполнимыми без разворачивания каких-либо дампов.

          Поехали!
          Читать дальше →
        • Подборка документальных научных фильмов


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


            Тем ценнее встретить качественный научный фильм, популяризирующий научное знание.


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

            Читать дальше →
          • Сheat-sheets «регулярные выражения»

              Ловите 2 плаката с регулярными выражениями в форматах A2 и A3.

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

                Вчера на ежегодной конференции Google I/O, проходящей в Сан-Франциско, Гугл объявил Kotlin официальным языком программирования для платформы Android.

                Изучить Kotlin можно уже сегодня, на Stepik, совершенно бесплатно.


                Немного про Kotlin и онлайн-курсы
              • Bitcoin in a nutshell — Mining

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


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


                  mining_meme

                  Читать дальше →
                • Bitcoin in a nutshell — Blockchain

                    Blockchain — это технология, на базе которой построен Bitcoin. И если пару лет назад вся слава доставлась криптовалюте, то сегодня все чаще можно слышать смелые фразы вроде: "Forget Bitcoin, Long Live Blockchain". Активно развиваются платформы вроде Ethereum, IPFS или Overstock, которые рассматривают блокчейн не как инструмент для создания еще одной платежной системы, а как совершенно обособленную технологию, сравнимую по своей инновационности разве что с Интернетом.


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


                    meme

                    Читать дальше →
                    • +27
                    • 57,6k
                    • 1
                  • Bitcoin in a nutshell — Transaction

                      Если говорить об уже существующей банковской системе, то транзакция внутри какого-нибудь Альфа-банка — это просто редактирование таблицы балансов, где уменьшается число напротив одного имени и увеличивается напротив другого. В случае с межбанковскими переводами подключаются некоторые сторонние организации, например SWIFT, но, по сути, все работает примерно так же.


                      Когда мы имеем дело с финансовой системой на основе блокчейна, то процесс денежного перевода выглядит совершенно иначе. В Bitcoin не существует никакой общей таблицы вида <адрес, баланс>, ровно как и не существует регулятора, который бы эту таблицу редактировал. В этой статье я покажу, что из себя представляет транзакция в Bitcoin, как она строится, и объясню, зачем же внутри Bitcoin добавлен свой язык программирования, про который все слышали, но никто не видел.


                      meme

                      Читать дальше →
                      • +27
                      • 48,9k
                      • 9
                    • Bitcoin in a nutshell — Protocol

                        Транзакции — это чуть ли не самый "главный" объект в сети Bitcoin, да и в других блокчейнах тоже. Поэтому я решил, что если и писать про них целую главу, то тогда нужно рассказать и показать вообще все, что можно. В частности то, как они строятся и работают на уровне протокола.


                        Ниже я объясню, каким образом формируется транзакция, покажу как она подписывается и продемонстрирую механизм общения между нодами.


                        meme

                        Читать дальше →
                        • +14
                        • 24,2k
                        • 3
                      • Bitcoin in a nutshell — Cryptography

                          Одна из причин, почему Bitcoin продолжает привлекать столько внимания — это его исключительная «математичность». Сатоши Накамото удалось создать систему, которая способна функционировать при полном отсутствии доверия между ее участниками. Все взаимодействия основаны на строгой математике, никакого человеческого фактора — вот в чем была революционность идеи, а не в одноранговой сети, как многие думают. Поэтому первую главу я решил посвятить именно математическим основам Bitcoin.

                          Ниже я постараюсь объяснить вам самые базовые вещи — эллиптические кривые, ECC, приватные / публичные ключи и так далее. По возможности я буду иллюстрировать свои слова примерами кода, преимущественно на Python 2.7, если что-то непонятно — спрашивайте в комментариях.

                          intro
                          Читать дальше →
                          • +33
                          • 67,3k
                          • 9
                        • Когнитивные стимуляторы и другая психофарма: можно ли стать умнее

                            Привет, %username%!

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

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

                            Spoiler: NZT ещё не изобрели, но синтезировали некоторое количество потенциально интересных штук.
                            Читать дальше →
                          • Подборка полезных слайдов про Linux

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


                            Читать дальше →
                          • Как работает Git

                            • Перевод
                            В этом эссе описана схема работы Git. Предполагается, что вы знакомы с Git достаточно, чтобы использовать его для контроля версий своих проектов.

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

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

                            После прочтения для ещё более глубокого погружения можно обратиться к обильно комментируемому исходному коду моей реализации Git на JavaScript.
                            Читать дальше →
                          • Разбираемся с SOLID: Инверсия зависимостей

                              Давайте глянем на определение принципа инверсии зависимостей из википедии:


                              Принцип инверсии зависимостей (англ. dependency inversion principle, DIP) — важный принцип объектно-ориентированного программирования, используемый для уменьшения связанности в компьютерных программах. Входит в пятёрку принципов SOLID.

                              Формулировка:

                              A. Модули верхних уровней не должны зависеть от модулей нижних уровней. Оба типа модулей должны зависеть от абстракций.
                              B. Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.

                              Большинство разработчиков, с которыми мне доводилось общаться, понимают только вторую часть определения. Мол "ну а что тут такого, надо завязывать классы не на конкретную реализацию а на интерфейс". И вроде бы верно, но только кому должен принадлежать интерфейс? Да и почему вообще этот принцип так важен? Давайте разбираться.

                              Читать дальше →