• Бесплатный вебинар по функциональному тестированию от TestCafe



      Друзья, хочу пригласить всех сочувствующих и интересующихся тестированием веб-приложений на организованный нами бесплатный вебинар, посвященный свежему релизу нашего тестового фреймворка TestCafe v15.1. 26 мая мы расскажем об основных нововведениях и изменениях, которые появились в новой версии. Зарегистрировавшись, Вы сможете задать интересующие Вас вопросы и получить ответ от команды TestCafe. Под катом Вы найдете подробности о предстоящем событии.
      Читать дальше →
    • Вычисление факториала на числах Чёрча

        Доброго дня, друзья!

        Тема функционального программирования раскрыта на Хабре весьма неплохо, есть целая куча статей посвященных λ-исчислению, числам Чёрча и подобным темам, так что ничего нового я не открою, зато мы напишем одну бесполезную и крайне неэффективную программу.

        Для того, чтоб жизнь мёдом не казалась, ограничим себя небольшим подмножеством языка JavaScript, а именно, будем использовать только анонимные функции от одного аргумента. Больше нам ничего не потребуется (ну почти).

        Начнем с определения факториала, и посмотрим, что нам понадобится в процессе решения задачи:

        var fact = function (n) {
          if (n === 0) return 1;
          return n * fact(n - 1);
        };
        


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

        Готовы?
        Ну тогда поехали.
      • Руководство по установке и настройке OpenVPN



        Когда у нас появились сотрудники, работающие удаленно, пришлось думать над тем, как обеспечить им защищенный доступ к нашим хостинговым серверам, виртуальным выделенным серверам разработчиков Virtual Dedicated Server (VDS), сайтам обеспечения и сопровождения разработки и к другим ресурсам.

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

        Выход нашелся довольно быстро — это использование технологии виртуальных частных сетей Virtual Private Network (VPN) и ее свободной реализации OpenVPN. Эта реализация доступна практически для всех распространенных платформ, в том числе для планшетов и смартфонов. История развития OpenVPN насчитывает уже 12 лет (компания OpenVPN Technologies, Inc. была создана Francis Dinha и James Yona в 2002 году), так что это надежное и проверенное временем решение.

        В нашей компании сеть VPN позволила предоставить защищенный доступ сотрудников к VDS, играющей роль сервера OpenVPN. И уже для фиксированного IP этого сервера был разрешен доступ к другим ресурсам компании. Попутно на сервере OpenVPN был установлен прокси Squid, что решило все проблемы доступа сотрудников с динамическими IP к защищенным ресурсам компании.

        Теме OpenVPN посвящены многочисленные статьи и сообщения на форумах. Тем не менее, нужную информацию мне пришлось собирать по частям из разных мест. Попутно приходилось разбираться с многочисленными терминами и технологиями. В качестве серверов OpenVPN были использованы VDS на базе FreeBSD и Debian Linux, в качестве клиентов — рабочие станции FreeBSD, Debian Linux, Ubuntu и Microsoft Windows.

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

        С благодарностью приму замечания и предложения по содержимому статьи.
        Читать дальше →
      • Meteor. Разрабатываем TODO List

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

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

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

        И еще одно предупреждение: в данном уроке будут использоваться следующие технологии для непосредственного написания примера:

        • jade — html препроцессор;
        • less — css препроцессор;
        • coffeescript — язык программирования, компилируемый в javascript.

        Видео, демонстрирующее приложение, полученное в ходе урока



        И кому все еще интересно, добро пожаловать под кат.
        Читать дальше →
      • Почему буфер должен расти экспоненциально

        • Tutorial
        Сотрудник Mozilla Николас Нетеркот опубликовал заметку с очень чётким объяснением, почему размер буфера памяти для программы нужно увеличивать экспоненциально, а не линейно.

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

        Так вот. Представим, что наш изначальный 1-байтный буфер растёт по 1 байту до тех пор, пока не достигнет размера 1 МиБ. Сколько памяти мы задействовали для него кумулятивно?

        1 + 2 + 3 + … + 1,048,575 + 1,048,576 = 549,756,338,176 байт

        Неслабо, да?
        Читать дальше →
      • Создаем сетку с помощью Susy



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

        В этой публикации будут рассмотрены основные возможности Susy на примерах, а так же будет добавлен вывод с использованием flexbox.
        Читать дальше →
        • +17
        • 42,5k
        • 5
      • 50 цитат о программировании всех времён

        • Перевод
        Перевёл после прочтения комментариев к статье «О ненависти к C++». В цитатах можно найти ответы на большинство возникших там вопросов.

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

        49. Lisp — это не язык, а строительный материал.
        — Alan Kay

        48. Ходить по воде и разрабатывать программы, следуя спецификации, очень просто… если они заморожены.
        — Edward V Berard
        Читать дальше →
      • Ускоряем понимание коммерческого или технического текста: как перестать бояться писать просто



          Читать молча мы научились относительно недавно. Раньше не было иного логичного способа читать, кроме как строго вслух. Фактический процесс чтения напоминает слушание двух голосов: один проговаривает слова текста, второй переводит их для нас на понятный нам язык.

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

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

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

          image
          «В 1997 году Deep Blue обыграл в шахматы Каспарова.
          В 2011 Watson обставил чемпионов Jeopardy.
          Сможет ли ваш алгоритм в 2013 году отличить Бобика от Пушистика?»


          Эта картинка и предисловие — из челленджа на Kaggle, который проходил осенью прошлого года. Забегая вперед, на последний вопрос вполне можно ответить «да» — десятка лидеров справилась с заданием на 98.8%, что на удивление впечатляет.

          И все-таки — откуда вообще берется такая постановка вопроса? Почему задачи на классификацию, которые легко решает четырехлетний ребенок, долгое время были (и до сих пор остаются) не по зубам программам? Почему распознавать предметы окружающего мира сложнее, чем играть в шахматы? Что такое deep learning и почему в публикациях о нем с пугающим постоянством фигурируют котики? Давайте поговорим об этом.
          По заветам издателей Стивена Хокинга - без формул
        • Организация многозадачности в ядре ОС

          Волею судеб мне довелось разбираться с организацией многозадачности, точнее псевдо-многозадачности, поскольку задачи делят время на одном ядре процессора. Я уже несколько раз встречала на хабре статьи по данной теме, и мне показалось, что данная тема сообществу интересна, поэтому я позволю себе внести свою скромную лепту в освещение данного вопроса.
          Сначала я попытаюсь рассказать о типах многозадачности (кооперативной и вытесняющей). Затем перейду к принципам планирования для вытесняющей многозадачности. Рассказ рассчитан скорее на начинающего читателя, который хочет разобраться, как работает многозадачность на уровне ядра ОС. Но поскольку все будет сопровождаться примерами, которые можно скомпилировать, запустить, и с которыми при желании можно поиграться, то, возможно, статья заинтересует и тех, кто уже знаком с теорией, но никогда не пробовал планировщик “на вкус”. Кому лень читать, может сразу перейти к изучению кода, поскольку код примеров будет взят из нашего проекта.
          Ну, и многопоточные котики для привлечения внимания.

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