• Классы типов в Scala (с небольшим обзором библиотеки cats)

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

      Читать дальше →
    • Обзор курсов по Deep Learning

        Привет, Хабр! Последнее время все больше и больше достижений в области искусственного интеллекта связано с инструментами глубокого обучения или deep learning. Мы решили разобраться, где же можно научиться необходимым навыкам, чтобы стать специалистом в этой области.

        image
        Читать дальше →
      • Play! Lift! Srsly?

        • Tutorial
        Play! и Lift, — эти два фреймворка являются олицетворением того, куда движется основной поток Scala веб-разработчиков. Воистину, попробуйте поискать на Stack Overflow фреймворки для Scala и вы поймете что я прав. Я верю, что процент здравомыслящих людей, которым надоели сложные комбайны, велик, поэтому расскажу про «другой» фреймворк Xitrum.
        Читать дальше →
      • Свой облачный хостинг за 5 минут. Часть 1: Ansible, Docker, Docker Swarm

          Cloud hosting

          Привет Хабр! Последние 1.5 года я работал над своим проектом, которому был необходим надежный облачный хостинг. До этого момента я больше 10 лет занимался веб-программированием и когда я решил построить свой хостинг у меня были относительно поверхностные знания в этой области, я и сейчас не являюсь системным администратором. Все что я буду рассказывать может выполнить обычный программист в течение 5 минут, просто запустив набор сценариев для Ansible, которые я подготовил специально для вас и выложил на GitHub.
          Читать дальше →
        • Wi-Fi термометр на ESP8266 + DS18B20 всего за 4$



          В последнее время всё большую популярность набирают Wi-Fi модули на основе ESP8266. Я тоже решил приобщиться к прекрасному, задумав реализовать термометр, отдающий данные по HTTP. Итак, поехали.
          Читать дальше →
        • Искусственный рассвет

          Началось всё год назад. Перед Новым 2014 годом несколько пришел в упадок жизненный тонус. Процесс самокопания привел к следующей мысли:



          — А, что ж так темно-то, Господи? © День радио.

          Впрочем, для человека, живущего зимой по летнему времени — мысль вполне естественная.
          Что же делать?
        • Программа курса и материалы по Scala

          • Tutorial
          Добрый день.

          Меня зовут Головач Иван, я практикующий Java Tech Lead с опытом в программировании 10+ лет (Java EE, J2ME, C, C++, M-language, Delphi), который перешел на Scala.

          Я подготовил и прочитал как обычные курсы по программированию (Java Core + Junior Java Developer), так и спецкурсы (Multicore Programming for JVM (раз и два)).

          В данный момент я стартую спецкурс по Scala и в этом топике хочу поделиться материалами, которые я нашел наиболее интересными/информативными (курс готовился более года).
          Читать дальше →
        • Новая версия HP Vertica: Dragline 7.1

            image
            8 августа 2014 года вышла новая версия HP Vertica 7.1. Команда Майкла Стоунбрейкера продолжает утверждать, что работа с большими данными сродни БАМу и продолжает новым версиям выдавать названия с строительной тематикой. Итак, Бульдозером (6 версия) по таблицам данные разровняли, сверху неструктурированными данными во Flex зону приложили (версия 7.0), пришла пора большого Экскаватора повернуть реки вспять. Встречаем версию Dragline 7.1! В этой статье я опишу, что же изменилось в новой версии.

            Расширения функциональности проекций


            Напомню для тех, кто в курсе и расскажу для тех, кто не знает: проекцией в Vertica называется материализация данных таблицы. Таблица в Vertica это описание структуры таблицы (столбцов), constraints и партиций. А непосредственно данные хранятся в проекциях, которые создаются на таблицы. Проекции чем-то похожи на индексы, они хранят данные по всем или не всем столбцам таблицы. Может быть более одной проекции на таблицу, проекции могут хранить отсегментированные и отсортированные данные по разным правилам. Данные во всех проекциях автоматически обновляются при обновлении записей таблицы. Фактически проекции содержат данные таблицы полностью всех колонок или частично определенных колонок. Жертвуется дисковое место серверов кластера, но значительно ускоряются выборки для разных групп запросов.

            Выражения в проекциях

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

            В новой версии для проекций введена возможность указать как столбцы, так и выражения:
            CREATE PROJECTION sales_proj (sale_id, sale_count,  sale_price, sale_value) AS
              SELECT sale_id, sale_count, sale_price, sale_count * sale_price
              FROM sales 
              ORDER BY sale_count * sale_price
              SEGMENTED BY HASH(sale_id) ALL NODES KSAFE 1;
            


            Следующий запрос к созданной проекции таблицы:
            SELECT *
            FROM sales_proj_b0
            WHERE value > 1000000
            ORDER BY value;
            

            при выполнении фактически моментально отдаст результат, используя сортировку выражения.

            На такие проекции накладываются следующие ограничения:
            • Нельзя использовать функции, которые могут изменить результат (например функцию TO_CHAR, так как она вернет разный результат в зависимости от выставленной кодировки клиента)
            • Нельзя использовать служебные мета функции
            • Нельзя обновлять записи таблицы оператором MERGE (UPDATE и DELETE разрешены)


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

              Среди задач по программированию часто попадаются такие: дана последовательность однотипных элементов (обычно это числа), требуется за один проход по ней найти какую-нибудь характеристику (среднее квадратическое отклонение, количество минимальных элементов, непрерывный участок с наибольшей суммой...) Дополнительное ограничение — последовательность может быть очень длинной, и в память не поместится. Других ограничений на элементы последовательности, обычно, не накладывается.
              С этими задачами всё, более или менее, понятно: нужно найти то, что на мехмате МГУ называют «индуктивным расширением» искомой функции, и реализовать её вычисление. Если найти не удалось (требуемый объём памяти слишком велик), то задача не решается.
              Но попадаются и другие задачи. В них есть дополнительные ограничения на элементы последовательности в совокупности, и эти ограничения приходится существенно использовать для решения (и проверять их не надо). Простейшая такая задача выглядит так:

              Задача 1. В последовательности записаны целые числа от 1 до N в произвольном порядке, но одно из чисел пропущено (остальные встречаются ровно по одному разу). N заранее неизвестно. Определить пропущенное число

              Решение очевидно: просматриваем числа, находим их количество K и сумму S. По условию, N=K+1, значит, сумма чисел от 1 до N будет равна (K+1)*(K+2)/2, и пропущенное число равно (K+1)*(K+2)/2-S. Если вы почему-то боитесь переполнений, то работайте с беззнаковыми числами (там переполнения не страшны — но будьте осторожны при вычислении (K+1)*(K+2)/2 :) ), или вместо суммы ищите XOR всех чисел.
              Другие задачи
            • Фантастические сериалы — обзор от фаната

                Мне наступили на больную мозоль, сделав некий обзорный пост по нескольким фантастическим сериалам.
                А так как субботним вечером делать особенно нечего, давайте-ка я сделаю свой, более полный.
                Да, будут спойлеры, имейте в виду.
                Да, и очень много картинок! Трафик!

                Начнём со Stargate

                Целое семейство сериалов, начавшихся с одноимённого фильма.
                Это во-первых, конечно,

                Stargate SG-1
                10/10
                image
                Читать дальше →
              • Учим Pebble Watch понимать русский язык


                  Доброго времени, читатели Хабра.
                  В данной статье я хочу поделиться способом, с помощью которого мне удалось научить свои Pebble Watch понимать смски на русском языке и корректно отображать имена звонящих из телефонной книги. Способ не мой, а подсмотренный, ссылки на первоисточник, разумеется, я дам. Однако бурное обсуждение в данном обзоре, и количество негативных мнений, относительно отсутствия возможности у Pebble Watch читать смски на русском языке позволило мне судить о том, что большинство Хабраюзеров про этот способ не слышали.
                  Читать дальше →
                • Youtube

                    Приходится ждать загрузки видео >360p по несколько секунд, обрывы на середине просмотра стало уже обыденным делом и это с достаточно широким каналом.
                    image
                    Причина в занижении провайдерами скорости к серверам кеширующим видео, всё что нужно сделать это заблокировать доступ к ним.
                    Для того чтобы запрос шел мимо cdn серверов ютуба надо заблокировать диапазон ip адресов (в роутере или на компьютере)
                    173.194.55.0/24 и 206.111.0.0/16

                    под виндой (кроме xp) при включенном брандмауэре достаточно открыть cmd с правами администратора
                    netsh advfirewall firewall add rule name=«youtube» dir=in action=block remoteip=173.194.55.0/24,206.111.0.0/16 enable=yes

                    в маке
                    sudo ipfw add reject src-ip 173.194.55.0/24 in
                    sudo ipfw add reject src-ip 206.111.0.0/16 in

                    linux
                    iptables -I INPUT -s 206.111.0.0/16 -j DROP
                    iptables -I INPUT -s 173.194.55.0/24 -j DROP
                  • Механические клавиатуры

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

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

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

                    Механические клавиатуры. Путеводитель.

                    Читать дальше →
                  • Обрабатываем картинки средствами Photoshop и ExtendScript Toolkit

                      Часто нам бывает надо сделать что-то с пачкой картинок. Есть несколько способов добиться этого:
                      • используя ImageMagick – очень удобная консольная утилита, много чего умеющая
                      • на The GIMP – там есть Scheme (диалект lisp-а) и Python
                      • штатными средствами: PHP+gd / Powershell+System.Drawing / Python + PIL
                      • в photoshop-е на JScript, VBScript или AppleScript
                      Плюсы минусы последнего способа рассмотрим под катом. В качестве бонуса посмотрим на недокументированное API Photoshop-а.
                      Читать дальше →
                    • Архитектура Adobe Flex 3 компонентов для новичка

                      Знакомиться со Adobe Flex мне пришлось в почти боевых условиях. Неожиданно понадобилось писать что-то работающее, пользуясь лишь примерами из Интернета и помощью старших товарищей. Поблизости не было ни одной книги по Flex, да и времени на чтение тоже, что сильно сказалось на теоретической базе. Многое делалось на ощупь простым русским методом проб и ошибок. Чтож, попробовать пришлось порядочно. Сейчас, глядя назад, я понял, что многие грабли можно было избежать, если бы имелась под рукой простая вводная статья объясняющая что к чему. Под катом собраны 3 вопроса, из-за недопонимания которых у меня чаще всего возникали проблемы. Надеюсь, ответы на них помогут начинающим быстрее разобраться в тонкостях построения компонентов этого фреймворка.

                      Читать дальше →
                    • Делаем Desire HD из Desire



                        Буквально пару дней назад я прочитал пост Вторая жизнь HTC HD2 и задумался, а можно ли сделать Desire HD из моего Desire? Как оказалось, можно, и даже не очень сложно. В общем, поразмыслив некоторое время о плюсах и минусах перехода на HD, я приступил к превращению. После всех действий я получил все возможности Desire HD в корпусе Desire. Никаких проблем и ошибок не возникло.
                        Читать дальше →
                      • Новые «фишки» Far Manager v2.0


                          Думаю, что многие хабраюзеры использует файловый менеджер Far в своей повседневной работе. И уже почти все знают, что теперь он полностью бесплатен для всех, доступен в исходном коде, выпускается под платформы x86 и x64. Но не все в курсе, что он постоянно развивается, и в нем реализуются новые “плюшки”, которых в свое время очень не хватало.

                          Повышение полномочий
                          Раньше, при попытке зайти в папку, доступ к которой отсутствовал, просто выводилось сообщение «Доступ запрещен».
                          Сейчас, Far Manger «поумнел» и самостоятельно выполняет запрос административных полномочий через механизм UAC.

                          Копирование файлов
                          В прошлых версиях при выделении файлов на панели и копировании в буфер обмена (Ctrl+Ins) копировались только имена файлов.
                          В текущей версии (v2.0 build 1666) – помимо имен файлов копируются также ссылки на эти файлы, что позволяет легко передать их в Explorer (например, на Рабочий стол) или в какую-то другую программу, поддерживающую такое обращение с файлами (например, программы для записи DVD). Копирование полных путей к файлам (Ctrl+Alt+Ins) оставлено без изменений.

                          Не смотрел, появились ли какие-то новые, «вкусные плагины» — для работы мне хватает плагинов для работы с 7-zip, PicView Advanced и Coloree.
                          Если вы знаете какие-то особо вкусные «плюшки», прошу поделиться в комментариях.
                        • Мошенничество с использованием пластиковых карт

                            Ещё один сценарий мошенничества с использованием пластиковых банковских карт. Наиболее уязвимы карты Сбербанка, пригодные для платежей в интернете — начиная от Visa Classic и MasterCard Standard. Владельцы «зарплатных» Maestro и прочих Momentum данному приёму не подвержены.
                            Читать дальше →
                          • О HTML5 в инфографике

                            • Перевод
                            image

                            Рыская в интернете я натолкнулся на весьма приятную по исполнению и интересную к прочтению инфографику о HTML5.
                            Я решил ее перевести. Что из этого вышло можете лицезреть по клику на уменьшенной картинке.

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

                            Имени автора, я к сожалению не нашел. Только ссылку на его твиттер.

                            P.S. Убрал опечатки и обновил картинку с инфографикой.
                          • Эффективная обработка фотографий в Photoshop

                              Эффективная обработка фотографий в Photoshop

                              Читая статьи о Photoshop, я часто удивляюсь тому, насколько многие авторы усложняют решение по сути простых задач по обработке. Этим страдают и многие «монументальные» писатели, например Дэн Маргулис. Но ему это простительно – его задача написать о всех тонкостях и нюансах процесса обработки, рассмотреть его со всех ракурсов и сторон. Хотя именно эта особенность подачи материала в его книгах отталкивает многих читателей.

                              На самом деле, корни подобных способов «увеличить резкость в 40 действий» растут из очень простой вещи – люди, которые пишут эти уроки, никогда не работали с большим объемом фотографий. То есть, как правило, у них есть пара фотографий и они готовы в процессе их обработки убить вечер-другой. Но когда у тебя идут постоянные заказы, и с каждой фотосессии тебе надо серьезно обработать несколько десятков кадров – начинаешь задумываться о более простых и удобных способах обработки.

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

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