• Почему не SQL?



      Без преувеличения можно сказать, что SQL — один из самых распространенных в мире языков. Информационные системы могут быть написаны на Java, Python, JavaScript, C#, PHP и десятке других языков, но SQL база в том или ином виде будет в абсолютном большинстве таких систем. Среди бизнес-приложений процент систем, использующих SQL, вообще стремится к 100%.

      При этом большинство существующих материалов о SQL на хабре и других ресурсах сводятся к простым вопросам, вроде: «какие типы соединений бывают», «чем левое соединение отличается от правого», «что такое триггеры» и так далее. Более того, в этих материалах практически ничего не говорится о проблемах SQL (и его реализациях), которых на самом деле очень и очень немало. Поэтому мы решили восполнить оба этих пробела: с одной стороны рассказать, как многие вещи в SQL работают изнутри, а с другой стороны — почему они работают не так как нужно / хотелось бы.

      При этом речь в статье пойдет не о «вкусах и цветах фломастеров». Все затрагиваемые проблемы носят фундаментальный характер: присутствуют при разработке практически любой информационной системы и не ограничиваются «красотой кода», а в той или иной степени приводят либо к критическому падению производительности, либо к существенному росту порога вхождения, либо к значительным трудозатратам со стороны разработчика.
      Читать дальше →
    • Другой Github 2: машинное обучение, датасеты и Jupyter Notebooks



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

        В этой подборке собраны репозитории по машинному обучению, датасетам и Jupyter Notebooks, ранжированные по количеству звезд. В предыдущей части мы рассказывали о популярных репозиториях для изучения работ по визуализации данных и глубокому обучению.
        Читать дальше →
        • +43
        • 16.9k
        • 1
      • Бесплатная GPU Tesla K80 для ваших экспериментов с нейросетями


          Около месяца назад Google сервис Colaboratory, предоставляющий доступ к Jupyter ноутбукам, включил возможность бесплатно использовать GPU Tesla K80 с 13 Гб видеопамяти на борту. Если до сих пор единственным препятствием для погружения в мир нейросетей могло быть отсутствие доступа к GPU, теперь Вы можете смело сказать, “Держись Deep Learning, я иду!”.


          Я попробовал использовать Colaboratory для работы над kaggle задачами. Мне больше всего не хватало возможности удобно сохранять натренированные tensorflow модели и использовать tensorboard. В данном посте, я хочу поделиться опытом и рассказать, как эти возможности добавить в colab. А напоследок покажу, как можно получить доступ к контейнеру по ssh и пользоваться привычными удобными инструментами bash, screen, rsync.

          Читать дальше →
        • Метрики в задачах машинного обучения

            Привет, Хабр!



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


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


            Читать дальше →
            • +38
            • 257k
            • 9
          • Боль в спине — понимание с позиции современной медицины

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

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


              Несмотря на акцент на болях в области поясницы в целом все написанное применимо в контексте болей и в других отделах позвоночника.
              Читать дальше →
            • Как платить программистам меньше

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

              • Translation
              image

              Об авторе. Питер Хинченс — бельгийский разработчик, писатель и бывший президент Фонда свободной информационной инфраструктуры, ассоциации, которая борется с софтверными патентами в Европе. Автор более 30 протоколов и распределённых систем, основатель свободного проекта ZeroMQ и проекта Edgenet по созданию полностью безопасной, анонимной глобальной P2P-сети, исполнительный директор и ведущий программист компании iMatrix. Автор книг «Культура и империя: цифровая революция», «Код психопата», «Масштабируемый Си» и др.

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

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

              Я был изолированным и одиноким юношей. Немного аутистичным, наверное. Я думал только о работе, плавании, своих домашних животных, снова о работе. Мысль о том, что людям может нравиться моё общество, была странной. По крайней мере моя работа, казалось, имеет значение. Мы писали генераторы кода на Cobol. Я написал редактор кода, который нравился сотрудникам, потому что элегантно работал на всём. Я самостоятельно выучил Си, ассемблер 8086 и писал программы shareware. Так медленно прошли 90-е.
              Читать дальше →
            • Паттерны React

              Привет Хабр! Предлагаю вашему вниманию свободный перевод статьи «React Patterns» Майкла Чана, с некоторыми моими примечаниями и дополнениями.

              Прежде всего хотел бы поблагодарить автора оригинального текста. В переводе я использовал понятие «Простой компонент» как обозначение Stateless Component aka Dump Component aka Component vs Container
              Конструктивная критика, а так же альтернативные паттерны и фичи React приветствуются в комментах.

              Оглавление
              • Простые компоненты — Stateless function
              • JSX распределение атрибутов — JSX Spread Attributes
              • Деструктуризация аргументов — Destructuring Arguments
              • Условный рендеринг — Conditional Rendering
              • Типы потомков — Children Types
              • Массив как потомок — Array as children
              • Функция как потомок — Function as children
              • Функция в render — Render callback
              • Проход по потомкам — Children pass-through
              • Перенаправление компонента — Proxy component
              • Стилизация компонентов — Style component
              • Переключатель событий — Event switch
              • Компонент-макет — Layout component
              • Компонент-контейнер — Container component
              • Компоненты высшего порядка — Higher-order component

              Поехали!
              Читать дальше →
            • Краткое руководство по созданию навигации на основе фрагментов

              • Translation


              В течение последних лет можно было наблюдать использование различных подходов к построению навигации в Android-приложениях. Кто-то использует только активности (Activity), кто-то смешивает их с фрагментами (Fragment) и/или с модифицированными видами (Custom View).

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

              В этой статье мы рассмотрим несколько характерных подходов к реализации навигации в Android, а затем поговорим о подходе с использованием фрагментов, сравнив его с другими подходами. Демонстрационное приложение, на примере которого иллюстрирована статья, можно скачать с GitHub.
              Читать дальше →
              • +13
              • 12.5k
              • 8
            • End-to-end шифрование, теперь это просто


                Шифрование. Вопрос, к которому многие разработчики подходят с благоговением и опаской. За последние пару десятков лет многие пытались изменить этот неидеальный мир и многие достигали успеха. Но одна вещь оставалась неизменной — создать безопасное приложение до сих пор могут позволить себе далеко не все. Цена безопасности слишком велика и включает в себя изучение десятков стандартов и спецификаций, компиляцию тонн непонятного кода, чтение многостраничных монографий криптографических гуру. Мы в Virgil Security далеки от амбициозных планов по изменению мира, мы просто хотим сделать безопасность доступной каждому. И вот мы на Хабре, здравствуйте!
                Читать дальше →
              • Часы Shock Clock: разряд электричества и страх — залог успеха пробуждения



                Насколько тяжело вам вставать утром? Многим людям — очень тяжело. Даже, если утром назначена важная встреча, нужно сдавать экзамен или квартальный отчет — встать вовремя смогут не все. Раньше для быстрого пробуждения ставили в железную миску с мелочью обычный механический будильник. Утром поднимался такой грохот, что и соседи в доме неподалеку иногда просыпались.

                Теперь механических будильников не так много, а вставать по-прежнему нужно. И чтобы не проспать, можно использовать реально действенный метод — Shock Clock. Эти часы могут начать пробуждение вибрацией, звуковым сигналом, а закончить ударом тока или даже тремя последовательными ударами. Такое уже не проспишь.
                Читать дальше →
              • Отзыв о кэшбэке с Алиэкспресс или 5 основных критериев оценки кэшбэк-сервиса

                  Не так давно мы выбирали кэшбэк-сервис для покупок на Алиэкспресс и, лично мне кажется, что именно бонусная программа Алиэкспресс принесла в Россию моду на кешбэк. Но, опыт всего мира нам показывает, что на этом всё не остановилось — буквально каждый первый более-менее значимый магазин во всём мире включился в эту историю и Россия — не исключение. Количество подключённых магазинов в крупнейших кешбэк-сервисах России уже больше 700. А в скольких интернет-магазинах вы закупаетесь? И знаете ли вы, что во всех этих магазинах можете возвращать часть потраченных средств? Мы рассмотрим сервис кешбэкеров подробно на примере компании LetyShops, услугами которой уже пользуются более 3 млн человек ежемесячно.

                  image
                  Читать дальше →
                • Введение в CQRS + Event Sourcing: Часть 1. Основы

                    В первый раз я услышал о CQRS, когда устроился на новую работу. В компании, в которой работаю и по сей день, мне сразу сказали что на проекте, над которым я буду работать используется CQRS, Event Sourcing, и MongoDB в качестве базы данных. Из этого всего я слышал только о MongoDB. Попытавшись вникнуть в CQRS, я не сразу понял все тонкости данного подхода, но почему-то мне понравилась идея разделения модели взаимодействия с данными на две — read и write. Возможно потому что она как-то перекликалась с парадигмой программирования “разделение обязанностей”, возможно потому что была очень в духе DDD.

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

                    Сразу хочу уточнить что я работал только со связкой CQRS + Event Sourcing, и никогда не пробовал просто CQRS, так как мне кажется что без Event Sourcing он теряет очень много бенефитов. В качестве CQRS фреймворка я буду использовать наш корпоративный Paralect.Domain. Он чем-то лучше других, чем то хуже. В любом случае советую вам ознакомиться и с остальными. Я здесь упомяну только несколько фреймворков для .NET. Наиболее популярные это NCQRS, Lokad CQRS, SimpleCQRS. Так же можете посмотреть на Event Store Джонатана Оливера с поддержкой огромного количества различных баз данных.

                    Начнем с CQRS


                    Что же такое CQRS?
                    CQRS расшифровывается как Command Query Responsibility Segregation (разделение ответственности на команды и запросы). Это паттерн проектирования, о котором я впервые услышал от Грега Янга (Greg Young). В его основе лежит простое понятие, что вы можете использовать разные модели для обновления и чтения информации. Однако это простое понятие ведет к серьёзным последствиям в проектировании информационных систем. (с) Мартин Фаулер
                    Читать дальше →
                  • Введение в CQRS + Event Sourcing: Часть 2

                      В прошлой статье я начал с основ CQRS + Event Sourcing. В этот раз я предлагаю продолжить и более подробно посмотреть на ES.

                      В примере который я выкладывал с моей прошлой статьей магия Event Sourcing’а была скрыта за абстракцией IRepository и двумя методами IRepository.Save() и IRepository.GetById<>().
                      Для того чтобы поподробнее разобраться что происходит я решил рассказать о процессе сохранения и загрузки агрегата из Event Store на примере проекта Lokad IDDD Sample от Рината Абдулина. У него в аппликейшен сервисах идет прямое обращение к Event Store, без дополнительных абстракций, поэтому все выглядит очень наглядно. Application Service — это аналог CommandHandler, но который обрабатывает все комманды одного агрегата. Такой подход очень удобный и мы тоже на него в одном проекте перешли.
                      Читать дальше →
                    • 400 потрясающих бесплатных сервисов

                      • Translation

                      Рад представить дополнение оригинального списка из 300 потрясающих бесплатных сервисов. Автор оригинальной статьи Ali Mese добавил ещё +100 новых сервисов, которые помогут найти все — от источников вдохновения и редакторов фотографий до создания опросов и бесплатных иконок.

                      И еще подборку +500 инструментов от 10 марта 2017 г. смотрите здесь.



                      A. Бесплатные веб-сайты

                      • HTML5 UP: Адаптивные шаблоны HTML5 и CSS3.
                      • Bootswatch: Бесплатные темы для Bootstrap.
                      • Templated: Коллекция 845 бесплатных шаблонов CSS и HTML5.
                      • Wordpress.org | Wordpress.com: Бесплатное создание веб-сайта.
                      • Strikingly: Конструктор веб-сайтов.
                      • Layers: Создание сайтов на WordPress (new).
                      • Bootstrap Zero: Самая большая коллекция бесплатных шаблонов Bootstrap (new).
                      • Landing Harbor:  Продвижение мобильного приложения c помощью бесплатного лендинга (new).
                      Читать дальше →
                    • «Кухонный гаджет»: Новинка для низкотемпературной готовки



                        Социологи сообщают: фастфуд и перекусы в кафе теряют популярность; новый тренд – готовка домашних блюд. В 2013 году агентство Tiburon Research по заказу журнала Psychologies провело исследование среди более тысячи человек в возрасте 15-30 лет. Результат оказался просто удивительным: 87% девушек и 78% мужчин сообщили, что выступают против питания вне дома, что им нравится готовить, и они стараются делать это как можно чаще.

                        В связи с этим на рынке появляется все более изощренные инструменты для готовки. В 2015 году основатель Музея еды и напитков Дэйв Арнолд (Dave Arnold) выпустил прибор под названием Searzall – кулинарный инструмент для приготовления мяса. Еще годом ранее инженер Массачусетского технологического института объявил о создании «умной» сковороды Pantelligent, температуру которой можно регулировать через приложение.

                        Современный рынок изобилует подобными кулинарными игрушками. Чаще всего за их изобретением стоят исследовательские лаборатории или кулинарные школы, но мало кто ожидал, что в разработке одного из таких устройств примет участие игровой магнат Гейб Ньюэлл (Gabe Newell).
                        Читать дальше →
                      • Как выбрать фреймворк для frontend-разработки

                        Предлагаю вашему вниманию перевод статьи How To Pick a Frontend Web Framework c сайта top.fse.guru.

                        Привет, приятель!

                        Ниже ты найдешь большой список компоновки инструментов и фреймворков. Не волнуйся! Ты можешь выбрать один, в котором точно уверен, или проигнорировать все и придумать свой вариант.

                        Данная статья предназначена для того, что бы помочь тебе узнать и упорядочить список инструментов которые используются в сфере frontend-разработки. А так же, это неплохой список, из которого ты можешь выбрать то, что тебе придется по душе.
                        Читать дальше →
                      • REM vs EM – Великий спор

                        • Translation


                        Представляю вашему вниманию перевод достаточно большой и объемной статьи по поводу вечного спора, какие же единицы измерения использовать при верстке: em'ы или rem'ы. В каких случаях стоит использовать одни единицы, а в каких другие. Вас ожидает много кода, примеров и их объяснений.

                        Добро пожаловать в мир типографики и относительных единиц измерения =)
                        Читать дальше →
                      • «Половина научных работ по Concurrency — полная чушь!» — интервью с Романом Елизаровым из Devexperts

                          Добрый день, это «Без слайдов». В гостях у меня побывал Роман Елизаров aka elizarov, Java Champion, эксперт по Java и многопоточности (а с недавнего времени — еще и по финансовой математике), спикер многочисленных конференций, председатель жюри Северо-Восточного Европейского региона ACM-ICPC, престижнейшей в мире олимпиады по программированию, лектор в ИТМО и, наконец, VP по технологиям в компании Devexperts. В общем, «человек и пароход».

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




                          Текстовая версия — под катом.
                          Читать дальше →
                        • Что такое Entity System Framework и зачем он нужен в геймдеве?

                          На Хабре уже есть очень много интересных статей про создание игры с нуля, но мало статей, описывающих что делать, чтобы своя любимая поделка не превратилась во Франкенштейна и дошла до вменяемого состояния. Автор оригинальной статьи рассказывает, как эволюционировал код игрового движка от кучи хлама в основном цикле к продуманной, расширяемой архитектуре, использующей Entity Component System. В статье много кода, который почти весь часто повторяется — но я не стал его выбрасывать, поскольку с ним будет понятнее, какие изменения вносит автор и как это отражается на всей структуре. Статья рассчитана на новичков, вроде меня, которые уже настрочили несколько «гениальных» прототипов, но теперь не знают, как разобраться в их коде.
                          Читать дальше →