• Вы — не Google

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

    Рациональные люди не принимают решения таким образом. Но именно так программисты часто решают использовать что-то вроде MapReduce.

    Вот как комментировал этот выбор Joe Hellerstein своим студентам (на 54-той минуте):

    Дело в том, что в мире сейчас есть где-то 5 компаний, обрабатывающие данные подобных объёмов. Все остальные гоняют все эти данные туда-сюда, добиваясь отказоустойчивости, которая им на самом деле не нужна. Люди страдают гигантоманией и гугломанией где-то с середины 2000-ых годов: «мы сделаем всё так, как делает Google, ведь мы же строим один из крупнейших (в будущем) сервисов по обработке данных в мире!»

    image

    Сколько этажей в вашем датацентре? Google сейчас строит четырёхэтажные, как вот этот в Оклахоме.
    Читать дальше →
  • Двести лет назад механические роботы, или автоматоны, были развлечением избранных, и многим казались порождением магического искусства. Сегодня нас сложно чем-то удивить. Разве что возможностью сделать из дерева собственного автоматона, способного ходить или ездить. Пусть на упаковке Ugears и написано 14+, я собирал игрушечного коня вместе с четырехлетней гик-малышкой Соней — и мы испытывали в процессе примерно одни и те же эмоции.
    Подробности — под катом
  • Давайте разберём, почему покупатели задают «тупые» вопросы



      — Добрый день! Почём мороженое?
      — Вот же ценник!

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

      Очень много явно странных вопросов имеют совсем не то значение, которое озвучивается. Это касается и продаж, и обычной жизни. Давайте разберём ещё пару примеров. Начнём с риторических вопросов в духе «А этот пазл точно собирается? Там все детали внутри?».
      Читать дальше →
    • Самая нужная программа на свете

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

        Можно сказать, что вышеперечисленный набор программ — это самые нужные программы, которыми пользуется человек в цифровую эпоху. Этот список покрывает все базовые потребности человека-пользователя. Или не все? Есть ли еще одна базовая потребность, которая не учтена в вышеприведенном списке самых необходимых программ? Является ли эта потребность самой важной из тех, что должен автоматизировать компьютер? Для меня такая потребность есть, но в списке самых используемых программ ей места не нашлось. Что же это за потребность?
        Ранее компьютер считался устройством для проведения вычислений...
      • Доступно о криптографии на эллиптических кривых

        • Translation
        image


        Тем, кто знаком с криптографией с открытым ключом, наверно известны аббревиатуры ECC, ECDH и ECDSA. Первая — это сокращение от Elliptic Curve Cryptography (криптография на эллиптических кривых), остальные — это названия основанных на ней алгоритмов.

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

        До того, как ECC стала популярной, почти все алгоритмы с открытым ключом основывались на RSA, DSA и DH, альтернативных криптосистемах на основе модулярной арифметики. RSA и компания по-прежнему популярны, и часто используются вместе с ECC. Однако несмотря на то, что магия, лежащая в фундаменте RSA и подобных ей алгоритмов легко объяснима и понятна многим, а грубые реализации пишутся довольно просто, основы ECC всё ещё являются для большинства людей загадкой.

        В этой серии статей я познакомлю вас с основами мира криптографии на эллиптических кривых. Моя цель — не создание полного и подробного руководства по ECC (в Интернете полно информации по этой теме), а простой обзор ECC и объяснение того, почему её считают безопасной. Я не буду тратить время на долгие математические доказательства или скучные подробности реализации. Также я представлю полезные примеры с визуальными интерактивными инструментами и скриптами.
        Читать дальше →
      • Иерархическая генерация ключей

          В этой статье мы поговорим о детерминистических кошельках, иерархической генерации ключей, а также о том, как это математически работает и в каких случаях это удобно применять на практике. Данный материал будет полезен специалистам, чья деятельность связана с платежными шлюзами, Биткоин кошельками и другими хранилищами монет. Кроме того, материал будет интересен тем, кто увлекается эллиптической криптографией и схемами развертывания ключей электронной подписи.
          Читать дальше →
          • +10
          • 10.4k
          • 2
        • Кэти Сьерра о том, как создавать востребованные приложения и повышать «крутизну» своих пользователей

          • Translation
          Можно ли сегодня создать популярное приложение? Рынки поделены, ниши заняты, конкуренция — очень плотная… Но не время разработчикам предаваться печали! Общая планка приложений все еще остается низкой, и обойти всех конкурентов все еще возможно. Так утверждает Кэти Сьерра (Kathy Sierra) в своем выступлении со сложно переводимой темой «Building the minimum Badass User» и его продолжении.

          Кэти Сьерра известна в России прежде всего как автор мирового бестселлера «Изучаем Java». Но книги по программированию — это далеко не всё, чем она занимается. Теория обучения, разработка интерфейсов, маркетинг приложений, мотивация — вот неполный список тем, по которым она регулярно пишет статьи и выступает на конференциях. В поле нашего внимания попали именно эти два выступления, потому что они обобщают и резюмируют самое ценное из её собственного опыта разработки, а также сотен прочитанных Кэти научных работ. Перед вами — не перевод, а, скорее, конспект наиболее интересных мыслей и практических рекомендаций.
          Читать дальше →
          • +32
          • 25.3k
          • 9
        • Data Context Interaction (DCI) — эволюция объектно-ориентированной парадигмы

          • Translation
          Слишком часто стала мелькать в западных блогах и твиттере аббревиатура “DCI”. Меня удивил тот факт, что на хабре по данной тематике почти нету информации, лишь в Ruby NoName Podcast S04E09 упоминалось об этом. Любопытство взяло вверх, и я решил узнать об этом загадочном слове побольше. В процессе поиска я наткнулся на хорошую статью, написанную на английском моим земляком, Виктором Савкиным. Данная статья без обильной теории, на практических примерах показывает, что из себя представляет DCI. Далее повествование будет идти от лица Виктора.
          Читать дальше →
        • Хроническая усталость, апатия, сезонная «депрессия» и многое другое: тривиальная причина

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

            Казалось бы, работа у IT-шников несложная — вагоны не разгружаем, землю не роем и уставать физически не должны. Однако о дичайшей усталости людей занятых интеллектуальным трудом приходится слышать чаще, чем хотелось бы. После того как я приехал в Москву 3 года назад — я почему-то начал дичайше уставать на совершенно ровном месте, и ни я, ни врачи не могли найти причину. После 2-х лет поисков тривиальная и легко исправимая причина нашлась, и на мой взгляд — в группе риска находятся практически все люди, занимающиеся интеллектуальным трудом. Ситуация усугубляется двумя народными обычаями.

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

            1) Летом все ок, а зимой — апатия, ничего не хочется делать. Это любят называть сезонной «депрессией».
            2) Утром все ок, а к вечеру на работе — мозги «не варят», ничего не хочется делать — только хабр и reddit листать. Приходите домой — и с дичайшей усталостью падаете в кресло. Сил хватает только лазить в интернете до ночи. Этот пункт — касается и работодателей, есть шанс, что люди вечером перестают работать не из-за своей лени.
            3) Даже если вы просыпаетесь без будильника — вы не высыпаетесь.
            4) Кофе и прочие стимуляторы — не дают бодрости, лишь делают вас злее.
            5) Даже если вы спите «сколько влезет» — сны короткие и не запоминающиеся, или их нет вообще.
            6) Вы замечаете, что даже 1 вещь вам иногда трудно удержать в голове. Мы можете забыть что вы сейчас хотели сделать.
            7) Вы просыпаетесь уже с дичайшей усталостью
            8) Вам кажется, что в комнате темно и все несколько не резкое.
            Читать дальше →
          • Клавиатура нового поколения — «10-Ю»

            С самого первого знакомства с печатью (на мех. машинках) я понял: есть что улучшить. Решение, которое пришло мне в голову, настойчиво требовало воплощения. Хочу поделиться с вами и узнать ваше мнение.
            Читать дальше →
          • Синергетические организации. Часть 0



              Работа… Что для вас значит это слово? Мы тратим более 30% своей жизни на эту деятельность, и если вам уже за 30, то вы точно знакомы с прокрастинацией, монотонностью и безысходностью исполнения обязанностей согласно должностной инструкции. Мы отдаем этой деятельности лучшие годы своей жизни, порой жертвуя отношениями с близкими, здоровьем, а иногда и собственным талантом. Кто-то исполняет роль наемного сотрудника, другой выступает в роли босса, но много ли среди них счастливых людей? Счастливых именно на работе, а не дома, в отпуске или на том свете? Автор стоп! Какое счастье на работе?! Я сдаю в аренду свои руки, ноги, голову в обмен на деньги, или я беру в аренду всё это, чтобы заработать опять же деньги! Работа это контакт купли-продажи, где каждая сторона стремится заплатить минимальную цену. Да, это распространенная точка зрения на организацию коллективной деятельности, которую автор считает безнадежно устаревшей.
              Почему?
            • DRuby aka DRb — основа распределенных систем на Ruby. Принцип работы и обход подводных камней

                Недавно вышла книга The dRuby book — distributed and parallel computing with Ruby (перевод японской книги, написанной автором самой библиотеки). В этой статье я попытаюсь дать обзор глав книги, касающихся библиотеки DRb. Если вам захочется ознакомиться с темой более подробно, книгу можно купить или скачать. Сразу скажу, что я не буду говорить в этом посте ни о синхронизации потоков, ни о библиотеке Rinda.

                Предположим, что вы пишите систему, которая работает с более чем одним процессом. Например, у вас есть веб-сервер, который в фоновом режиме запускает задачи, работающие долгое время. Или вам просто нужно обеспечить пересылку данных из одного процесса в другой и координировать их. Для таких ситуаций и нужна библиотека DRb. Она написана целиком на Ruby и включена в стандартную библиотеку, поэтому начать работать с ней можно моментально. Для её подключения достаточно написать require 'drb'

                Достоинства библиотеки DRb большей частью проистекают из динамичности самого языка Ruby.
                Во-первых, при затрате минимальных усилий на подготовительном этапе, дальше вы работаете с объектами не задумываясь, где они расположены: в одном процессе или в другом. Библиотека полностью маскирует от вас все технические детали.
                Во-вторых, вы не обязаны жестко прописывать интерфейс. Любой руби-объект может выставить свой интерфейс наружу — таким образом вы можете как воспользоваться функциональностью одного из стандартных классов типа Hash или Queue, а можете сделать свой класс с любым интерфейсом. Кроме того вам ничто не мешает менять интерфейс прямо в процессе исполнения, и даже использовать method_missing для обработки любых запросов. И уж разумеется, обновление интерфейса сервера вообще никак не влияет на клиента, если тот не вызывает методы, которые изменили сигнатуру или поведение. Таким образом сервер и клиент максимально независимы.
                И наконец, клиент даже не обязан знать классы объектов, которые ему возвращает сервер, он может их использовать и без этого. Таким образом сервер волен скрыть столько много деталей, сколько ему угодно.
                Но, конечно, есть и подводные камни, и их предостаточно. К счастью, dRuby несложен в понимании, ну а понимание его устройства позволяет большей части проблем просто не допускать. Документация к этой библиотеке, к сожалению, не проясняет множества моментов, поэтому статья будет интересна и новичкам, и людям уже поработавшим с библиотекой.

                Читать дальше →
                • +23
                • 4.4k
                • 3
              • Обзор децентрализованных крипто-платформ. Часть1: Waves

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

                  В первом материале цикла речь пойдет об open source блокчейн-платформе Waves, которой к июню этого года в рамках краудфандинговой кампании удалось привлечь финансирование в размере 29 445 BTC, что по действовавшему на тот момент курсу составило более $15 млн.

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

                  В отличие от базирующегося в Канаде ядра команды Ethereum и немецкой команды Lisk, костяк команды Waves работает в Москве.
                  Читать дальше →
                • Вникаем в метаклассы Ruby

                  • Translation

                  Примечание переводчика: данный пост является логическим развитием, а точнее «предысторией» поста Вникаем в include и extend и был подсказан в комментариях к нему пользователем murr, за что ему большое спасибо.

                  Классы и объекты в Ruby связаны между собой достаточно затейливо и не сразу можно понять что к чему. Из-за особого назначения классов очень легко потерять из вида тот факт, что классы — это тоже объекты Ruby. От «обычных» объектов их отличает два вещи: они служат образцом для создания новых объектов и они являются частью иерархии классов. Все верно, классы могут иметь экземпляры себя (объекты), суперклассы (родителей) и подклассы (детей).

                  Если классы — это объекты, то у них должен быть свой собственный класс. Классом всех классов (как объектов) в Ruby является класс Class:

                  # один из способов создать новый класс
                  Dog = Class.new
                      
                  # общепринятый способ создания класса
                  class Dog
                      # какая-то реализация собачьего поведения
                  end
                  
                  Dog.class
                  => Class
                  

                  Читать дальше →
                • Вникаем в include и extend

                  • Translation

                  Примечание переводчика: перед прочтением этого поста рекомендую сначала ознакомиться с постом Вникаем в метаклассы Ruby.

                  Все рубисты знакомы с формальными определениями для include и extend. Вы делаете include модуля, чтобы добавить методы экземпляра класса, и extend — чтобы добавить методы класса. К сожалению, данные определения не совсем точны. Они не могут объяснить почему мы используем instance.extend(Module), чтобы добавить методы объекту. Разве не должны мы в этом случае использовать instance.include(Module)? Чтобы разобраться в этом вопросе, начнем с выяснения где же хранятся методы.
                  Читать дальше →
                • Расширяем Ruby с помощью Ruby: заимствуем у Python декораторы функции

                  • Translation
                  От переводчика: предлагаю вам перевод начала презентации Michael Fairley — Extending Ruby with Ruby. Я перевел только первую часть из трех, потому что она имеет максимальные практические ценность и пользу, на мой взгляд. Тем не менее, настоятельно рекомендую ознакомиться с полной презентацией, в которой помимо Python приводятся примеры заимствования фишек из Haskell и Scala.

                  Декораторы функции


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

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

                  Возьмем Ruby и притворимся, что нам нужно перевести деньги с одного банковского аккаунта на другой. Вроде все просто, так?

                  def send_money(from, to, amount)
                    from.balance -= amount
                    to.balance += amount
                    from.save!
                    to.save!
                  end
                  Читать дальше →
                • В поисках пути — царь Салтан осваивает лапласиан

                    … Молвит он: «Коль жив я буду, чудный остров навещу, у Гвидона погощу».



                    В царстве Салтана не без изьяна. Принят закон — не лезть за кордон, да тут князь Гвидон.
                    Опять прислал поклон, да приглашение на угощение,- надо принимать политическое решение.

                    Дворцовые интриганки, похожие на поганки, встали стеной — «мол, скажи, что больной». Но прослышал Салтан про Гвидонов кальян, про изумрудную белку, да богатырскую стрелку. А главная новинка — молодая жинка. В общем, ехать решено — «Я не был за морем давно».

                    Было однако одна проблема,- нужен был маршрут или схема. Поскольку никто (кроме Врангеля барона) не знал, как добраться до острова Гвидона. Корабельщики дали карту,- пришлось сесть за парту. Над картой склонился Салтан, — где тут остров Буян? Задача была как будто знакома — проложить путь к острову Гвидона. Но как найти дорогу, когда путей слишком много?

                    До ночи решал Салтан задачку, в итоге свалился в спячку. Снились ему матрицы и точки, да на болоте кочки. На кочку прыгнул Нео с острова Борнео.
                    — Если хочешь добраться ко сроку — плыви по максимальному потоку.
                    — Чего? — Салтан почти проснулся. Но Нео уже в зайца обернулся.
                    Плывем дальше
                    • +26
                    • 18.8k
                    • 6
                  • Семь принципов создания современных веб-приложений

                    • Translation
                    • Tutorial
                    Эта статья основана на моей презентации с конференции BrazilJS в августе 2014 года. Она базируется на идеях, о которых я писал в блоге недавно, в основном, в связи с UX и производительностью.

                    Я хочу представить 7 действенных принципов для веб-сайтов, которые хотят применить JavaScript для управления UI. Эти принципы являются результатом моей работы как веб-дизайнера, но также как давнего пользователя WWW.

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

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

                    • Должен ли JavaScript использоваться как замена функциям браузера: история, навигация, рендеринг?
                    • Умирает ли бэкенд? Нужно ли вообще рендерить HTML?
                    • Правда ли, что будущее за приложениями на одной странице (Single Page Applications, SPA)?
                    • Должен ли JS генерировать страницы на веб-сайте и рендерить страницы в веб-приложениях?
                    • Нужно ли использовать техники вроде PJAX или TurboLinks?
                    • Каково точное отличие между веб-сайтом и веб-приложением? Должно ли остаться что-то одно?
                    Читать дальше →
                  • 10 уроков о том, как повысить продуктивность, которые я усвоил, работая по 90 часов в неделю целый месяц

                    • Translation
                    image

                    Сколько часов в неделю вы тратите на работу? Около 40, не так ли? А как вы думаете, что будет, если работать 90 часов в неделю?

                    Автор сайта a Year of Productivity Chris Bailey решил провести такой эксперимент. К чему это привело? Читайте о 10 уроках, которые он извлек, в нашем переводе его статьи.
                    Читать дальше →
                  • Сказ царя Салтана о потенциале лапласиана

                      «Три девицы под окном пряли поздно вечерком.»

                      image

                      Ну как пряли. Не пряли, конечно, а лайкали друг на друга. По условиям конкурса «мисс Салтан» девицы должны были выбрать меж собой лучшую.

                      «Какой-то странный конкурс», — беспокоились девицы. И это было правдой. По правилам конкурса вес лайка участника зависел от того, сколько лайков он получает от других. Что это значит, — никто из девиц до конца не понимал.
                      «Как все сложно», — тосковали девушки и подбадривали себя песней «Кабы я была царицей».

                      Вскоре «в светлицу вошел царь — стороны той государь» (показан на рисунке). «Во все время разговора...», — ну понятно в общем.
                      «Собираем лайки нежности — формируем матрицу смежности», — бодро срифмовал он.
                      Девицы-красавицы с именами Алена, Варвара и Софья засмущались, но лайки (из балалайки) передали.

                      Вот что там было:
                      • Алена получила 1 лайк от Софьи и 2 лайка от Варвары.
                      • Варвара получила по лайку от Алены и Софьи.
                      • А Софья получила 2 лайка от Алены и 1 от Варвары.

                      Царь взял лайки, покрутил гайки, постучал по колесам, пошмыгал носом, причмокнул губами, поскрипел зубами, сгонял в палаты и объявил результаты.

                      Наибольший вес лайков (7 баллов) получила Софья, но титул «мисс Салтан» достался Алене (15 баллов).

                      Подробнее о матрице лайков
                      Для матрицы


                      вектор потенциалов равен (5, 4, 7), а вектор потоков — (15, 12, 14).

                      После объявления результатов девицы бросились обратились к царю с просьбой рассказать,- откуда взялись эти странные цифры?
                      Действительно - откуда?