• Рецепты для хворающих SQL-запросов

      Несколько месяцев назад мы анонсировали explain.tensor.ru — публичный сервис для разбора и визуализации планов запросов к PostgreSQL.

      За прошедшее время вы уже воспользовались им более 6000 раз, но одна из удобных функций могла остаться незамеченной — это структурные подсказки, которые выглядят примерно так:



      Прислушивайтесь к ним, и ваши запросы «станут гладкими и шелковистыми». :)

      А если серьезно, то многие ситуации, которые делают запрос медленным и «прожорливым» по ресурсам, типичны и могут быть распознаны по структуре и данным плана.

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



      Давайте чуть подробнее рассмотрим эти кейсы — как они определяются и к каким рекомендациям приводят.
      Читать дальше →
    • 9 лучших опенсорс находок за август 2019

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


        За полным списком новых полезных инструментов, статей и докладов можно обратиться в мой телеграм канал @OpensourceFindings (по ссылке зеркало, если не открывается оригинал).


        В сегодняшнем выпуске.
        Технологии внутри: Python, Rust, JavaScript, Go.
        Тематика: веб разработка, администрирование, инструменты разработчика.

        Читать дальше →
      • Sampler. Консольная утилита для визуализации результата любых shell команд

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


          Sampler


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


          Код доступен на гитхабе. Инструкции по установке — для Linux, macOS и (экспериментально) Windows.

          Читать дальше →
        • MAM: сборка фронтенда без боли

            Здравствуйте, меня зовут Дмитрий Карловский, и я… обожаю MAM. MАМ управляет Агностик Модулями, избавляя меня от львиной доли рутины.


            Типичный Агностик Модуль


            Агностик Модуль, в отличие от традиционного, это не файл с исходником, а директория, внутри которой могут быть исходники на самых разных языках: программная логика на JS/TS, тесты к ней на TS/JS, композиция компонент на view.tree, стили на CSS, локализация в locale=*.json, картинки и тд, и тп. При желании не сложно прикрутить поддержку любого другого языка. Например, Stylus для написания стилей, или HTML для описания шаблонов.


            Зависимости между модулями трекаются автоматически путём анализа исходников. Если модуль включается, то включается целиком — каждый исходник модуля транспилируется и попадает в соответствующий бандл: скрипты — отдельно, стили — отдельно, тесты — отдельно. Для разных платформ — свои бандлы: для ноды — свои, для браузера — свои.


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

            Читать дальше →
          • HTTP-заголовки для ответственного разработчика

            • Перевод

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

            Разработчики соединяют людей.
            Разработчики помогают людям.
            Разработчики дают людям возможности.

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

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

            1) PROMPT_COMMAND


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

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

            Попробуйте запустить это в новом шелле, и увидите, что произойдёт с сессией:

            $ PROMPT_COMMAND='echo -n "writing the prompt at " && date'
            Читать дальше →
          • Практичный Go: советы по написанию поддерживаемых программ в реальном мире

            • Перевод
            Статья посвящена лучшим практикам написания кода Go. Она составлен в стиле презентации, но без обычных слайдов. Постараемся кратко и чётко пройтись по каждому пункту.

            Для начала следует договориться, что значит лучшие практики для языка программирования. Здесь можно вспомнить слова Расса Кокса, технического руководителя Go:

            Программная инженерия — то, что происходит с программированием, если добавить фактор времени и других программистов.

            Таким образом, Расс различает понятия программирования и программной инженерии. В первом случае вы пишете программу для себя, во втором создаёте продукт, над которым со временем будут работать и другие программисты. Инженеры приходят и уходят. Команды растут или сокращаются. Добавляются новые функции и исправляются ошибки. Такова природа разработки программного обеспечения.
            Читать дальше →
          • Про одного парня

              История реальная, я все видел своими глазами.

              Несколько лет один парень, как и многие из вас, работал программистом. На всякий случай напишу так: «программистом». Потому что он был 1Сником, на фиксе, производственной компании.

              До этого он пробовал разные специальности – 4 года во франче программистом, руководителем проектов, умел закрывать по 200 часов, одновременно получая процент с проекта, за руководство и немного занимаясь продажами. Пробовал самостоятельно разрабатывать продукты, был начальником IT-отдела в большой компании, численностью 6 тысяч человек, примерял разные варианты применения своей кавычечной профессии – программиста 1С.

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

              Этому парню стало интересно, как можно зарабатывать больше денег, не занимаясь продажами и не создавая свой собственный бизнес.
              Читать дальше →
            • Так ли страшен Rust, как его малюют

                Некоторое время назад я начал понимать необходимость разнообразить мой опыт программирования исключительно на C#. После некоторого изучения различных вариантов, таких как Haskell, Scala, Rust и некоторых других, выбор пал на последний. Со временем я начал обращать внимание, что Rust всё больше и больше рекламируется исключительно как "системный язык", который нужен для вырвиглазно сложных компиляторов и супер-нагруженных систем, с особыми требованиями к безопасности и многопоточности, а для вариантов попроще есть Go/Python/Java/..., в то время как я с удовольствием и весьма успешно использовал его как замену моей рабочей лошадке C#.



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

                Читать дальше →
              • Аплодисменты и одобрительные возгласы: тщательно управляемая драма в магазинах Apple

                • Перевод

                Эти чрезмерно разрекламированные «гении» в гладком и прилизанном магазине Apple получают меньше, чем положено, и играют роль персонажей в хорошо продуманной сказке



                Обновлённый магазин Apple в Лондоне обзавёлся деревцами в «роще гениев», и ставит своей целью стать местом, где люди просто проводят время.

                Стив Джобс хотел, чтобы клиент мог понять магазин Apple «с первого взгляда», будто он стоит на горе Олимп. И магазины, вроде бы, действительно говорят сами за себя. Яркие, просторные, со стеклянной отделкой – большего контраста с гигантскими магазинами-лабиринтами, которые они должны были заменить, и желать нельзя.

                Как и больших прибылей. С момента их запуска в 2001 году узнаваемые с первого взгляда магазины загребли больше денег – как в сумме, так и в пересчёте на квадратный метр – чем любой розничный продавец на планете, превратив Apple в самую богатую компанию мира. Однако эта прозрачность магазина Apple одновременно скрывает то, как делаются эти прибыли.
                Читать дальше →
              • Почему Wi-Fi не будет работать, как планировалось, и зачем знать, каким телефоном пользуется сотрудник



                  Привет!

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

                  Для разминки — небольшая задачка. Представьте себе беспроводную сеть Wi-Fi, состоящую из точки доступа (AP) и двух одинаковых клиентских устройств (STA1 и STA2).

                  Читаем надписи на коробках:
                  AP: 1733,3 Мбит/c
                  STA1, STA2: 866,7 Мбит/c

                  Внимание, вопрос. Оба клиента одновременно начинают загружать с сервера большой файл. На какую пропускную способность может рассчитывать каждое из устройств?
                  Читать дальше →
                • Как следует писать комментарии к коммитам

                  • Перевод


                  Предисловие от переводчика


                  На протяжении многих лет разработки ПО, будучи участником многих команд, работая с разными хорошими и опытными людьми, я часто наблюдал (да и чего греха таить, до определенного момента — создавал) одну и ту же проблему — тотальный бардак в репозитории. Каждый писал комментарии к коммитам в своем стиле (и хорошо, если постоянно в одном); половина комментариев была бесполезна (из разряда "это мост"), половина оставшейся половины — едва понятна.

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

                  • Перевод

                  Недавно я создал небольшой проект на языке Go. После нескольких лет работы с Java я был сильно удивлён тем, как вяло внедрение зависимостей (Dependency Injection, DI) применяется в экосистеме Go. Для своего проекта я решил использовать библиотеку dig от компании Uber, и она меня по-настоящему впечатлила.

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

                  В этой статье я расскажу об основах внедрения зависимостей, а также покажу пример приложения до и после применения этого механизма (посредством библиотеки dig).
                  Читать дальше →
                • Как напечатать бейджи для компании и не умереть

                  • Tutorial

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


                  Задача создать бейджи — про коммуникацию. Когда видишь, как зовут собеседника, легче начать разговор. А ещё про безопасность — бейджи помогают отличать сотрудников от гостей. Расскажу, как мы справились с этой задачей и что вам непременно нужно знать, если когда-то решитесь повторить наш опыт.


                  image

                  Читать дальше →
                • Что я узнал на личном опыте за годы фриланса

                  • Перевод
                  Первоначально опубликовано в /r/freelance на Reddit, но выкладываю здесь для потомков.

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

                  Типичный штатный сотрудник обходится компании в 2-3 раза дороже его номинальной зарплаты


                  Используй это в качестве основы для расчёта своих тарифов. $90 в час может показаться дорогой альтернативой сотруднику, который получает зарплату $30 в час, но в реальности это эквивалент $90, и расходы прекращаются сразу по окончании проекта.

                  Если клиент просит 6+ часов в день, ты потратишь 8 часов


                  Ты не сделаешь ничего полезного (читай: оплачиваемого) в оставшиеся два часа. Они отняли у тебя целый день, но заплатили только за 75%. В таких ситуациях взимай дневную ставку.
                  Читать дальше →
                • Цвет: от шестнадцатеричных кодов до глаза

                  • Перевод


                  Почему мы воспринимаем background-color: #9B51E0 как этот конкретный фиолетовый цвет?



                  Долгое время я думал, что знаю ответ на этот вопрос. Но хорошенько поразмыслив, осознал значительные пробелы в своих знаниях.
                  Читать дальше →
                • Профиль неидеального клиента. Каким клиентам отказывать и почему это жизненно важно

                  • Перевод


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

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

                  Что же предпринять?

                  Большинство в таком случае выбирает деньги — и это одна из самых крупных ошибок, которые только можно совершить.

                  Брать деньги не у тех клиентов — это смертный приговор для компании. И мне следовало это понимать.

                  Переведено в Alconost
                  Читать дальше →
                • Игры, в которых нужно писать код (часть 2)


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

                    Читать дальше →
                  • [в закладки] Инструменты JS-разработчика, на которые стоит обратить внимание

                    • Перевод
                    Программист Трэвис Фишер, перевод статьи которого мы публикуем сегодня, решил рассказать о самых полезных, с его точки зрения, модулях и вспомогательных инструментах для JS-разработки. Полезными он считает технологии, которыми пользуется постоянно и в ценности которых убедился на собственном опыте. В частности, речь пойдёт о библиотеках и утилитах, предназначенных для серверной и клиентской разработки на JavaScript. Трэвис говорит, что не стремился к тому, чтобы включить в свой материал нечто узкоспециализированное, или сделать что-то вроде очередного awesome-списка, которые сами по себе весьма полезны, но обычно оказываются несколько перегруженными. Здесь речь пойдёт лишь о том, самом лучшем, что он с полной уверенностью может порекомендовать другим.

                    image
                    Читать дальше →
                  • Разработка: Мессенджер Нового Поколения (Часть 2)

                      Продолжение (Часть 1 ), Часть 3.



                      Функционал мессенджера для Андроид и iOS


                      Для регистрации не используется номер телефона


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

                      Удивительно, но многие мессенджеры упорно продолжают регистрировать по номеру телефона — видимо получить информацию о владельце настолько важно, что они мирятся со следующими проблемами:
                      Читать дальше →