• Haskell. Задача о мудрецах и колпаках

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

      Так получилось, что все трое вытянули колпаки белого цвета. Мимо проходящий прохожий сообщает им: «на одном из вас надет белый колпак». Через некоторое время самый умный из мудрецов воскликнул: «на мне белый колпак!!!».

      Как он об этом догадался?
      Существует определенная последовательность рассуждений, которая привела нашего мудреца к верному ответу. Мы попытаемся смоделировать эти рассуждения.
      Читать дальше →
    • Удивительный Angular

        Awesome Angular



        От переводчиков


        Всем привет, с вами Максим Иванов и Дмитрий Сергиенков, и сегодня мы поговорим о новостях в мире Angular. Мы подготовили для вас наиболее интересные материалы и отобрали список вопросов, который вам должен понравиться. Отметим только, что если вы будете ждать от этой статьи ответа на вопрос "Чем Angular лучше других технологий?", то придется вас огорчить, у нас не будет ответа на него. Почему? Как правило, все мнения вида "Технология X лучше технологии Y" почти всегда не более, чем отражение точки зрения высказывающегося. Однако для тех, кто только начинает изучать этот фреймворк, мы постараемся объяснить, что дает вам эта технология и какую пользу она приносит. Также не проходите мимо и ответьте на опрос, самые популярные ответы будут отправлены Игорю Минару (ведущий разработчик команды Angular). Ну что же, приступим.

        Читать дальше →
      • Работа с геолокацией в iOS 24/7

        • Tutorial



        В последнее время, часто вижу вопрос:
        Можно ли в iOS работать с геолокацией, когда приложение свернули и отправлять данные на сервер?

        Это действительно возможно и совсем не сложно.
        How to вместится в превью статьи.

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


        Чтобы была какая-то конкретика, я предположил, что перед нами стоит задача написать вело-трекер. Со стороны пользователя это выглядит так:


        1. Скачиваю приложение
        2. Запускаю
        3. Регистрируюсь
        4. Нажимаю куда просят
        5. Закрываю
        6. Катаюсь
        7. Запускаю
        8. Вижу результат

        p.s. финальный код здесь.

        Любые совпадения с реально существующим приложением случайны
      • Компьютерное зрение на примере приложения для IKEA. Часть 1

        • Tutorial
        Готовился к очередному хакатону, решил обновить свои знания в области компьютерного зрения. В прошлый раз задачу распознавания номеров авто в видеопотоке я так и не смог решить быстро «в лоб». Сейчас, поразмыслив, решил немного упростить задачу. Было много идей, листал фотки в телефоне и наткнулся на привычный кейс для всех, кто бывал в магазине ikea — фотографию с чеком, где указан номер товара и его положение на складе самообслуживания.

        Читать дальше →
      • NooLite + Raspberry Pi + Telegram = умный дом

        2 года назад передо мной встала задача реализовать удаленное управление обогревательными приборами в своем загородном доме. В данной статье я хочу поделиться моим вариантом автоматизации и удаленного управления, к которому я в итоге пришел. Постараюсь охватить весь процесс и подробности создания этого хобби-проекта и поделиться всеми сложностями, с которыми пришлось столкнуться. В процессе реализации, как видно из названия статьи, я использовал Noolite (о нем расскажу в статье), Telegram и совсем немного Python.


        image
        Читать дальше →
      • У нас проблемы с промисами

        • Translation
        Разрешите представить вам перевод статьи Нолана Лоусона «У нас проблемы с промисами», одной из лучших по теме из тех, что мне доводилось читать.

        У нас проблемы с промисами


        Дорогие JavaScript разработчики, настал момент признать это — у нас проблемы с промисами.

        Нет, не с самими промисами. Их реализация по спецификации A+ превосходна. Основная проблема, которая сама предстала передо мной за годы наблюдений за тем, как многие программисты борются с богатыми на промисы API, заключается в следующем:

        — Многие из нас используют промисы без действительного их понимания.

        Если вы мне не верите, решите такую задачку:

        Вопрос: В чем разница между этими четырьмя вариантами использования промисов?

        doSomething().then(function () {
          return doSomethingElse();
        });
        
        doSomething().then(function () {
          doSomethingElse();
        });
        
        doSomething().then(doSomethingElse());
        
        doSomething().then(doSomethingElse);
        

        Узнайте решение задачи
      • Навигатор 2ГИС: Экстраполяция позиции автомобиля



          В приложении 2ГИС теперь есть навигатор. Мы научились «ехать» по треку, озвучивать манёвры, автоматически перестраивать маршрут, рассчитывать время в пути, доводить пользователя до входа в здание или организацию, учитывая заборы и шлагбаумы, — и всё это в честном офлайне. Пробки (вот разве что для них нужен интернет), разведённые мосты и перекрытые улицы учитываем давно. Пока в нашем навигаторе — необходимый минимум. Чуть позже научим его предупреждать о слишком высокой скорости, лежачих полицейских и камерах ГИБДД, настроим ночной режим, сделаем маршруты по платным и грунтовым дорогам опциональными. Чтобы воспользоваться им, нужно обновить 2ГИС в своем смартфоне или скачать в AppStore или Windows Store. Для Android обновление выходит постепенно, начиная с 22 августа (будет доступно на всю аудиторию к сентябрю).

          А сегодня расскажем, как навигатор 2ГИС предугадывает положение автомобиля и плавно перемещает стрелочку по маршруту. Ведь именно качество ведения пользователя по маршруту определяет эргономику интерфейса любого современного навигатора, простоту ориентирования на местности и своевременность совершения манёвров.
          Читать дальше →
        • Динамические очереди звонков в Asterisk

            Добрый день уважаемые читатели сего сайта.
            Сегодня я хотел бы рассказать может быть о странном способе управления очередями в asterisk.
            Итак.

            Дано:
            1. сервер asterisk1.8.32.3
            2. sip клиенты(35 номеров). Нумерация двухзначная. Первый номер 11, последний 46.
            3. Очереди звонков. При поступлении звонка на городской номер, проговаривается меню и предлагается нажать на цифры от 1 до 4. при нажатии звонок перебрасывается в очередь 1,2,3 или 4 соответственно.
            Читать дальше →
          • Asterisk: использование AEL в повседневной жизни

              image

              Сегодня поговорим об интеграции Asterisk'a с CRM системой. Со стороны CRM вопрос рассматривать не будем, достаточно знать, что CRM хочет знать о всех звонках (как входящих, исходящих, так и переведенных)

              Что мы хотим получить:

              Для каждого звонка должны отправляться в CRM 2 события: start и stop. Естественно с кучей аргументов.
              Читать дальше →
              • +8
              • 10.6k
              • 3
            • Asterisk и информация о входящих звонках в браузере через Notifications

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

              Для удобства сотрудников и возможности персонализированного ответа была внедрена система распознавания входящего звонка по внутренней базе клиентов.
              Читать дальше →
            • Autofill: чего не знают веб-разработчики, хотя должны знать

              • Translation


              Многим известно, что в мобильной версии Safari можно отсканировать свою банковскую карту. Но многие ли разработчики умеют создавать формы, поддерживающие эту возможность?

              Готов поспорить, что немногие.

              Дело осложняет полное отсутствие документации от Apple по работе этой функции. Но тут есть один момент. Функция сканирования банковских карт является подмножеством автозаполнения — браузерного функционала, давно игнорируемого веб-разработчиками. Понятно, почему они не уделяли ему должного внимания: когда регулярно заполняешь форму тестовыми данными, автозаполнение обычно мешает. Но для наших пользователей это важная функция. В Google выяснили, что при использовании автозаполнения пользователи на 30% быстрее заполняют формы. Так что давайте изучим работу автозаполнения, разберёмся, как создавать формы, поддерживающие кросс-браузерное автозаполнение, и воспользуемся преимуществами новых возможностей наподобие сканирования банковских карт.
              Читать дальше →
            • Аарон Леви: Разработка B2B-продуктов

              • Translation


              Cтэнфордский курс CS183B: How to start a startup. Стартовал в 2012 году под руководством Питера Тиля. Осенью 2014 года прошла новая серия лекций ведущих предпринимателей и экспертов Y Combinator:


              Первая часть курса
              Читать дальше →
              • +12
              • 18.4k
              • 3
            • Ресайз картинок в браузере. Все очень плохо

                Если вы когда-нибудь сталкивались с задачей ресайза картинок в браузере, то вы наверное знаете, что это очень просто. В любом современном браузере есть такой элемент, как холст (<canvas>). На него можно нанести изображение нужных размеров. Пять строчек кода и картинка готова:

                function resize(img, w, h) {
                  var canvas = document.createElement('canvas');
                  canvas.width = w;
                  canvas.height = h;
                  canvas.getContext('2d').drawImage(img, 0, 0, w, h);
                  return canvas;
                }
                

                Из холста картинку можно сохранить в JPEG и, например, отправить на сервер. Можно было на этом закончить статью, но сперва давайте взглянем на результат. Если вы поставите рядом такой холст и обычный элемент <img>, в который загружена та же картинка (исходник, 4 Мб), то вы увидите разницу.

                img
                Читать дальше →
              • Взаимодействие php-soap на linux с авторизацией по сертификатам с использованием алгоритмов ГОСТ

                С криптографией я сталкивался ранее, приходилось разворачивать удостоверяющий центр на КриптоПро в свое время, так что общие представления о том что такое закрытые и открытые ключи и сертификаты у меня имелось, но вот о том как все это работает в Linux представления особого не было.
                Встала задача обеспечить взаимодействие со службами РосМинздрава, а именно — с федеральным регистром медработников по протоколу SOAP. Со стороны клиента система на CentOS и работающими службами на PHP, со стороны сервера — SOAP-сервис с авторизацией по сертификатам с использованием ГОСТ алгоритмов. В наличии была флешка с закрытым ключом, сформированным удостоверяющим центром РосМинздрава и сертификат этого ключа.
                После анализа ситуации по использованию ГОСТ алгоритмов шифрования в мире Linux выяснено что за последние годы здесь есть хорошее движение вперед, но все таки не совсем все хорошо. Итак, для того чтобы заставить расширение php-soap прозрачно понимать алгоритмы ГОСТ, а также использовать сертификаты и ключи выданные РосМинздравом нужно сделать следующее:

                1. Обновить в дистрибутиве библиотеку OpenSSL до версии не ниже 1.0.1с и настроить поддержку ГОСТ.
                2. Преобразовать выданный ключ и сертификат в формат, понятный OpenSSL. Проверить работу OpenSSL.
                3. Подправить расширение OpenSSL в PHP и перекомпилировать сам PHP. Протестировать работу SOAP на PHP.

                Итак, приступим.
                Читать дальше →
                • +26
                • 19.2k
                • 8
              • Как организовать отправку push-уведомлений на айфон

                  В Surfingbird мы используем пуш-уведомления, чтобы сообщать нашим пользователям срочные новости и просто информировать их об интересных материалах за день. Уже в первые недели тестов пуши показали свою огромную эффективность в плане увлечения ретеншена. Этому есть логичное объяснение – телефон у пользователя всегда с собой, в метро, в туалете, на совещаниях и т. д. Когда юзеру приходит пуш, все его внимание концентрируется на этом уведомлении.

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

                  image
                  Читать дальше →
                • Бизнес-план: немного о конкурентах

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

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

                    Работая над списком конкурентов собрал немного дополнительной информации, которой хочу поделиться. Эта же информация послужила основой составления рейтинга для определения самых-самых конкурентистых конкурентов.
                    Читать дальше →
                  • Взломать Wi-Fi за 10 часов

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


                      Читать дальше →
                    • Как стать миллионером в AppStore или немного формул про продвижение и продажи. Часть 1

                      Схема успеха



                      Джон, мы потеряли два листа математических выкладок! Что делать?
                      Как обычно, Билл… напиши: «отсюда с очевидностью следует…»


                      image

                      Чтобы прочитать некраткую сопроводительную записку к схеме – добро пожаловать под кат.

                      Читать дальше →
                    • Не баг-трекер, а…

                        Настоящий IT-шник всегда любит сварить «кашу из топора». А если этой кашей еще и получается вкусно накормить коллег, то выходит вообще замечательно.

                        По долгу службы мне постоянно приходится сталкиваться с различными инсталляциями bug и issue-трекеров (далее просто баг-трекеров) и среди них попадалось довольно много нестандартных решений. Что-то мне приходилось разворачивать самому, что-то я «подсмотрел» у клиентов, но поделиться наблюдениями было бы полезно.



                        С этой темой я уже выступал на конференции SQADays, но для тех, кому лениво смотреть 18 минут видео, все будет кратко расписано в статье.

                        Сварить кашу из баг-трекера!
                      • В поисковой строке Рамблера можно не только писать — но и говорить

                          Привет %USERNAME%!

                          Google Chrome начиная с 11 версии получил возможность распознавания речи в тегах input;
                          Раз уж возможность есть, грех ее не использовать :)

                          Теперь в поисковой строке рамблера можно не только писать — но и говорить.


                          Как это работает