• Что за музыка была «зашита» в популярных ОС

      Ситуация: на дворе 2003-й год. Кто-то из вашей семьи разговаривает по телефону, чем занимает линию, к которой подключен модем. В ожидании своей очереди и возможности выйти в интернет вы решаете в очередной раз покопаться в библиотеке бесплатной музыки, которую разработчики поставили вместе с Windows. В то время она лежала в папке «Образцы музыки».

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

      Читать дальше →
    • Разработка Rich Text Editor: проблемы и решения

        Текстовые редакторы, как тип программного обеспечения, появились чуть позже чем динозавры, и вероятнее всего это был вообще первый софт, с которым вы столкнулись в своей жизни, возможно кто-то даже застал MS-DOS Editor.

        Однако с переходом большой части ПО в браузеры актуальны и соответствующие визуальные редакторы Rich Text Editors, и проблемных мест в их разработке масса. Если вы по какой-то причине решили сделать свой собственный редактор, то подумайте еще раз — есть мнение, что делать этого не нужно.



        Чтобы вы могли принять более взвешенное решение, Егор Яковишен обобщил весь свой опыт, полученный в процессе создания Setka Editor, и рассказал про проблемы, с которыми придется столкнуться, и что можно предпринять для их решения.

        Disclaimer: статья написана на основании доклада Егора на конференции Frontend Conf 2017 в июне 2017 года. Ситуация с поддержкой браузерами определенных API с тех пор уже могла измениться.


        Читать дальше →
      • Лучшие VPN-решения для пользователей Linux

        • Translation
        Если вы выходите в интернет со своего Linux-ноутбука, вам стоит знать об особенностях виртуальных частных сетей (Virtual Private Network, VPN). Эта технология особенно актуальна для тех, кто подключается к Сети через точки доступа, расположенные в общественных местах, однако, во многих ситуациях VPN не повредит и компьютеру, которым пользуются дома.



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

        В ходе работы с VPN применимо множество сценариев, касающихся маршрутизации. Типичный сценарий заключается в перенаправлении всего трафика по VPN-соединению, но, кроме того, можно применить концепцию «раздельного туннелирования». При таком подходе некоторые данные идут через VPN, а другие — по обычному интернет-соединению в соответствии с правилами маршрутизации.
        Читать дальше →
      • Лямбда-исчисление на JavaScript

          Привет! В этой статье я хочу в очередной раз взглянуть на лямбда-исчисление. Теоретическую сторону вопроса на хабре обсуждали уже множество раз, поэтому взглянем на то, как лямбда-исчисление может выглядеть на практике, например, на языке JavaScript (чтобы примеры можно было выполнять прямо в браузере).

          Итак, основная идея: всё есть функция. Поэтому мы ограничим себя очень узким кругом возможностей языка: любое выражение будет либо анонимной функцией с одним аргументом (x => expr), либо вызовом функции (f (x)). То есть весь код будет выглядеть похожим образом:

          id = x => x
          double = f => x => f (f (x))
          

          Поскольку результатом работы функций будут другие функции, нам понадобится способ интерпретировать результат. Это единственное место, в котором пригодятся нетривиальные возможности JavaScript.
          Читать дальше →
        • Функциональное тестирование современных web-приложений


            Современные web-приложения зачастую содержат множество "движущихся частей" и сторонних зависимостей. В процессе рефакторинга и добавления/изменения функциональности в таком приложении может произойти поломка существующих use-case сценариев и нестабильная работа в определенных браузерах.


            Для своевременного обнаружения таких ситуаций и выполнения непрерывной интеграции необходимо функциональное тестирование web-приложения. В статье пойдет речь о двух бесплатных open-source решениях:


            Читать дальше →
          • Некоторые тонкости использования Service Workers



              Предисловие


              Сервис-воркеры (Service Workers, да простят меня читатели) сегодня являются полезным дополнением к основной функциональности сайта: тут и работа в оффлайне, и фоновая синхронизация данных, и модные пуш-уведомления.

              Однако большое количество статей про сервис-воркеры выглядят достаточно сжато и описывают простые примеры. Я попробую обратить внимание на некоторые особенности работы сервис-воркеров, так что требуются какие-то базовые знания. Отправной точкой может быть эта статья (перевод) или чуть более подробная статья.
              Читать дальше →
              • +24
              • 21k
              • 7
            • Функциональный TypeScript

              • Translation

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


              Примечание от переводчика: весь код для удобства я оформил в репозитории.


              Для этого мы будем использовать три техники:


              • функции вместо примитивов
              • трансформация данных через pipeline
              • выделение общих (generic) функций

              Начнём же!

              Читать дальше →
              • +20
              • 10.3k
              • 6
            • Теория категорий на JavaScript. Часть 1. Категория множеств

              • Tutorial


              Абстракция – это одна из основных техник в ИТ. Любой язык программирования или моделирования, любая парадигма программирования (процедурная, функциональная, ООП, …) дают ответ на вопрос, как и от чего нужно абстрагироваться. Причём, адепты каждого подхода предлагают какой-то свой вариант абстракции.

              Если вы хотите увидеть истинную, универсальную абстракцию, то вступайте в нашу… изучайте теорию категорий. В статье на примере категории множеств с картинками и JavaScript-кодом объясняются самые базовые понятия теории категорий: пределы, универсальное свойство. Рассматривается вычислительный аспект теории категорий.

              Также немного говорится про классы, примеси и смеси в JavaScript.

              Примеры из статьи можно посмотреть тут.
              Читать дальше →
            • Руководство по работе с Redux

              • Translation
              • Tutorial
              Сегодня Redux — это одно из наиболее интересных явлений мира JavaScript. Он выделяется из сотни библиотек и фреймворков тем, что грамотно решает множество разных вопросов путем введения простой и предсказуемой модели состояний, уклоне на функциональное программирование и неизменяемые данные, предоставления компактного API. Что ещё нужно для счастья? Redux — библиотека очень маленькая, и выучить её API не сложно. Но у многих людей происходит своеобразный разрыв шаблона — небольшое количество компонентов и добровольные ограничения чистых функций и неизменяемых данных могут показаться неоправданным принуждением. Каким именно образом работать в таких условиях?

              В этом руководстве мы рассмотрим создание с нуля full-stack приложения с использованием Redux и Immutable-js. Применив подход TDD, пройдём все этапы конструирования Node+Redux бэкенда и React+Redux фронтенда приложения. Помимо этого мы будем использовать такие инструменты, как ES6, Babel, Socket.io, Webpack и Mocha. Набор весьма любопытный, и вы мигом его освоите!
              Читать дальше →
            • Руководство: Как посчитать выгоды от миграции в «облако»



                Disclaimer: Более подробный анализ и детальный разбор формул представлен в нашей тематической книге.

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

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

                Поэтому облачные провайдеры стараются избегать грубых расчетов («на глаз») в конкретных проектах, а в рекламных целях используют довольно ущербные с точки зрения полноты данных примеры, иллюстрирующие «эффективность» использования облачных решений. В этом материале мы разберем рабочие модели для расчета экономической эффективности и приведем примеры подобных расчетов.
                Читать дальше →
                • +9
                • 10.5k
                • 2
              • Стилизация React-компонентов

                image


                Введение


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


                • Использование React предполагает, что View нашего Web-приложения разбито на компоненты, и каждый из них, так или иначе, отвечает за собственное отображение и функциональность.


                • Подразумевается, что будут использованы современные инструменты разработки вроде babel, webpack, browserify, gulp, post- pre- css-процессоры.

                Читать дальше →
              • Вы не знаете Node: краткий обзор основных возможностей

                • Translation


                Ремарка от автора
                Это статья новая, но она не о новых возможностях. Она о core, то есть о платформе и о том что многие кто просто используют grunt, или webpack могут не подозревать, так скзать about fundamentals.

                Более подробно читайте:

                комментарии rumkin:
                habrahabr.ru/company/mailru/blog/283228/#comment_8890604

                комментарии Aiditz:
                habrahabr.ru/company/mailru/blog/283228/#comment_8890476

                комментарии Suvitruf:
                habrahabr.ru/company/mailru/blog/283228/#comment_8890430


                Идея этой публикации была навеяна серией книг Кайла Симпсона «Вы не знаете JavaScript». Они являются хорошим началом для изучения основ этого языка. А Node — это практически тот же JavaScript, за исключением небольших отличий, о которых я расскажу в этой статье. Весь код, приведённый ниже, вы можете скачать из репозитория, из папки code.

                Зачем вообще переживать насчёт Node? Node — это JavaScript, а JavaScript используется почти везде! Мир был бы лучше, если бы большинство разработчиков в совершенстве владели Node. Чем лучше приложения, тем лучше жизнь!

                Эта статья представляет собой реалистичный взгляд на наиболее интересные основные возможности Node. Ключевые моменты статьи:

                1. Цикл событий: освежаем ключевую концепцию, позволяющую реализовать неблокирующие операции ввода/вывода.
                2. Глобальный объект и процесс: как получить больше информации.
                3. Эмиттеры событий: интенсивное введение в событийную модель (event-based pattern)
                4. Stream’ы и буферы: эффективный способ работы с данными
                5. Кластеры: форкай процессы как профессионал
                6. Обработка асинхронный ошибок: AsyncWrap, Domain и uncaughtException
                7. Аддоны на C++: внесение своих наработок в ядро и написание собственных аддонов на С++
                Читать дальше →
              • 7 истинных причин того, почему вы никогда не добьетесь успеха (и как исправить их прямо сейчас)

                • Translation
                image

                Вы поставили перед собой крупные жизненные цели. Ваши мечты восхитительны. Но ничего не получается. Если у вас все нормально с трудолюбием, отношением к делу и силой воли, почему вы еще не достигли успеха? Давайте разбираться!
                Читать дальше →
              • Тестирование JS. Кармический Webpack

                  image

                  Привет!

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

                  В этой статье хочу поделиться опытом смешивания гремучей смеси webpack + jasmine + chai + karma.
                  Читать дальше →
                • Поняв Docker

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


                    К вашему сведению! В этой статье мы рассматриваем само явление docker-контейнеров, а не составляем список микросервисов, которые гнездятся внутри. Этим мы займемся в следующей серии, во имя справедливости!


                    UPDATE: пришлось заменить «докер» на «docker», иначе статья не ищется. Заранее прошу прощения за все «docker'ы» в тексте. Селяви.


                    Что мы имеем сегодня


                    • Зоопарк дубовых VPS-хостингов.
                    • Дорогие IaaS и PaaS с гарантированным vendor lock in.
                    • Уникальные сервера-снежинки.
                    • Ворох устаревших зависимостей на неподдерживаемой операционке.
                    • Скрытые связи частей приложения.
                    • Незаменимый админ полубог на скейтборде.
                    • Радуга окружений: development, testing, integration, staging, production.
                    • Генерация конфигов для системы управления конфигами.
                    • Feature flagging.
                    docker run docker
                  • Как работает реляционная БД

                    • Translation
                    • Tutorial
                    Реляционные базы данных (РБД) используются повсюду. Они бывают самых разных видов, от маленьких и полезных SQLite до мощных Teradata. Но в то же время существует очень немного статей, объясняющих принцип действия и устройство реляционных баз данных. Да и те, что есть — довольно поверхностные, без особых подробностей. Зато по более «модным» направлениям (большие данные, NoSQL или JS) написано гораздо больше статей, причём куда более глубоких. Вероятно, такая ситуация сложилась из-за того, что реляционные БД — вещь «старая» и слишком скучная, чтобы разбирать её вне университетских программ, исследовательских работ и книг.

                    На самом деле, мало кто действительно понимает, как работают реляционные БД. А многие разработчики очень не любят, когда они чего-то не понимают. Если реляционные БД используют порядка 40 лет, значит тому есть причина. РБД — штука очень интересная, поскольку в ее основе лежат полезные и широко используемые понятия. Если вы хотели бы разобраться в том, как работают РБД, то эта статья для вас.
                    Читать дальше →
                  • Прокрастинация, или как перестать быть ленивой задницей и начать жить

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



                    Автор не является ни медиком, ни психологом, а является просто лентяем, который пытается учиться на своем опыте, а также делать выводы на основе чужого. Кому интересно — прошу под кат.
                    Читать дальше →
                  • Webpack для Single Page App

                      Привет!





                      Отгремели фанфары, прошел звон в ушах от истязаний «евангелистов», модников в сфере фронтенд разработки. Кто-то ушел на sprockets, кто-то пустился во все тяжкие и стал писать свои велосипеды или расширять функционал gulp или grunt. Но статей по поводу популярных инструментов автоматизации процесса сборки – стало существенно меньше и это факт! Пора бы заполнить освободившееся пространство чем-то существенно иным.

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

                      Читать дальше →
                    • Правильное использование Exception’ов в PHP

                        Я рад бы написать что “эта статья предназначена для новичков”, но это не так. Большинство php-разработчиков, имея опыт 3, 5 и даже 7 лет, абсолютно не понимают как правильно использовать эксепшены. Нет, они прекрасно знают о их существовании, о том что их можно создавать, обрабатывать, и т.п., но они не осознают их удобность, логичность, и не воспринимают их как абсолютно нормальный элемент разработки.

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

                        Шесть лет назад мне было 43 года, и я не умел программировать вообще. Ну, может немного на Бэйсике, который преподавали в институте, как вы понимаете, очень давно.

                        В книжном магазине попалась мне на глаза книга «Программирование для iPhone/iPad» и, будучи человеком любознательным, я решил попробовать. Купил книгу, MacBook Air (iPad у меня тогда уже был), установил XCode и начал с примеров из книги. Когда я получил общее представление о том, как что работает, мне захотелось сделать что-то полезное. Так как для программиста очень полезным, или скорее даже необходимым, является знание английского языка, я решил создать такое приложение.
                        Читать дальше →