• Гик-королева Yahoo: противоречивые результаты первых полутора лет

    • Translation
    В качестве одной из наиболее высокопоставленных сотрудниц Google, Марисса Майер стала суперзвездой Силиконовой Долины. Однако внутри поискового гиганта она порой не так ярко блистала, а все из-за коллег, восстающих против ее авторитарного стиля управления. Автор статьи, Bethany McLean, задается вопросом, станет ли Марисса спасителем Yahoo или же очередной проблемой. Спустя полтора года после назначения на позицию CEO результаты ее работы, пожалуй, противоречивы.



    Марисса Майер на фоне L.E.D-инсталляции, построенной в ее пентхаусе в отеле Four Seasons, в Сан Франциско. По словам бывшего коллеги, она – настоящий гик.

    Осенью 2011 года нью-йоркский финансисит Дэниел Лоеб, управляющий $14-миллиардным хедж-фондом Third Point Capital, возглавил кампанию по свержению текущего и подбору нового CEO для Yahoo, дела которой шли не очень хорошо. Его выбор пал на топ-менеджера Google, Мариссу Майер, которую тогда часто называли «лицом Google» или «Гламурным гиком Google». Прошлым летом, в тот же день когда Yahoo объявила о назначении Майер на позицию CEO, — ставшей самой молодой женщиной в свои 37 лет, возглавившей компанию из списка Fortune 500, — Майер объявила о своей беременности. Тем самым, она завершила свой путь от заучки из провинциального городка в Висконсине, инженера со степенью из Стэнфорда, до бизнес-суперзвезды и культурного идола.
    Читать дальше →
  • OAuth: описание протокола простым и понятным языком

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

      Пример кросс-авторизации


      Вернемся в 2005-й год и представим, что мы пишем социальную сеть. В ней имеется форма импорта контактов из адресной книги GMail. Что нужно для доступа к контактам GMail? Конечно, логин и пароль от ящика. Но если мы попросим ввести их на нашем сайте, пользователь заподозрит неладное. Где гарантия, что мы не сохраняем на сервере введенные пароли? Поэтому нам хочется, чтобы пароль вводился только на сайте GMail, и после этого доступ к контактам через API GMail предоставлялся нашей социальной сети (возможно, на время).
      Под катом - повествование с примерами
    • Цифровые SSL сертификаты. Разновидности, как выбрать?

        Существует достаточно много цифровых сертификатов, каждый из которых служит для своих целей. Самые распространенный тип сертификатов это естественно SSL сертификаты, которые также имеют несколько подвидов. Также существуют Code Signing сертификаты, Website Anti Malware Scanner сертификаты и Unified Communications сертификаты.

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

        Так что если у вас стоит задача поднять защищенное https соединение для вашего сайта, то в этом посте я постараюсь раскрыть все тонкости и особенности SSL сертификатов, чтобы сделать правильный выбор было проще.
        Как выбрать SSL сертификат
      • Декартово дерево: Часть 1. Описание, операции, применения

          Оглавление (на данный момент)


          Часть 1. Описание, операции, применения.
          Часть 2. Ценная информация в дереве и множественные операции с ней.
          Часть 3. Декартово дерево по неявному ключу.
          To be continued...

          Декартово дерево (cartesian tree, treap) — красивая и легко реализующаяся структура данных, которая с минимальными усилиями позволит вам производить многие скоростные операции над массивами ваших данных. Что характерно, на Хабрахабре единственное его упоминание я нашел в обзорном посте многоуважаемого winger, но тогда продолжение тому циклу так и не последовало. Обидно, кстати.

          Я постараюсь покрыть все, что мне известно по теме — несмотря на то, что известно мне сравнительно не так уж много, материала вполне хватит поста на два, а то и на три. Все алгоритмы иллюстрируются исходниками на C# (а так как я любитель функционального программирования, то где-нибудь в послесловии речь зайдет и о F# — но это читать не обязательно :). Итак, приступим.

          Введение


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

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


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

          Сейчас за кадром остается вопрос, каким образом в кучу можно добавлять и удалять из нее элементы. Во-первых, эти алгоритмы требуют отдельного места на осмотр, а во-вторых, нам они все равно не понадобятся.
          А теперь собственно про декартово дерево
        • Что такое «асинхронная событийная модель», и почему сейчас она «в моде»

          Сейчас в тематических интернетах модно слово «Node.js». В этой небольшой статье мы попробуем понять («на пальцах»), откуда всё это взялось, и чем такая архитектура отличается от привычной нам архитектуры с «синхронным» и «блокирующим» вводом/выводом в коде приложения (обычный сайт на PHP + MySQL), запущенного на сервере приложений, работающем по схеме «по потоку (или процессу) на запрос» (классический Apache Web Server).
          Читать дальше →
        • Документация Mojolicious: Потерянные Главы

          • Tutorial
          Это продолжение серии статей о веб-фреймворке для Perl — Mojolicious: первая часть.

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

          Асинхронность: синхронизируем с помощью Mojo::IOLoop::Delay


          Mojo::IOLoop::Delay предоставляет механизм, обеспечивающий для асинхронно выполняющихся callback-ов:

          • описание последовательно выполняющихся операций без «лапши» callback-ов
          • передачу результатов из callback-а(ов) текущего шага на следующий
          • общие данные для callback-ов, объединённых в одну задачу
          • синхронизацию групп callback-ов
          • перехват и обработку исключений в callback-ах

          Используемые термины:

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

          Альтернатива Promises

          Это альтернативный подход к проблеме, обычно решаемой с помощью Promise/Deferred или Future. Вот приблизительное сравнение со спецификацией Promises/A+
          Читать дальше →
        • Шпаргалка по SOLID-принципам с примерами на PHP

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

            Читать дальше →
          • Числа Каталана

            Несомненно, самым замечательным математическим фактом является тождество . В нем удивительным образом сошлись, казалось бы, совершенно не связанные константы из разных областей математики. Доказать это тождество не так сложно, но объяснить его, понять глубинный смысл, удается немногим.
            В качестве еще одного замечательного факта хотелось бы вспомнить числа Каталана, которые удивительным образом всплывают в самых разных комбинаторных задачах. К сожалению, они выпадают из рассмотрения типовой школьной программы, но уверен, что любой специалист компьютерных наук должен быть знаком с ними.
            Читать дальше →
          • UTF-8: Кодирование и декодирование

            Причиной разобраться в том, как же работает UTF-8 и что такое Юникод заставил тот факт, что VBScript не имеет встроенных функций работы с UTF-8. А так как ничего рабочего не нашел, то пришлось писть/дописывать самому. Опыт на мой взгляд полезный в любом случае. Для лучшего понимания начну с теории.

            О Юникоде


            До появления Юникода широко использовались 8-битные кодировки, главные минусы которых очевидны:
            Читать дальше →
          • Всё, что вы хотели знать о динамическом программировании, но боялись спросить

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

              # Весь код в статье написан на языке Python
              

              Основы


              Пожалуй, лучшее описание динамики в одно предложение, которое я когда либо слышал:

              Динамическое программирование — это когда у нас есть задача, которую непонятно как решать, и мы разбиваем ее на меньшие задачи, которые тоже непонятно как решать. (с) А. Кумок.
              Читать дальше →
            • Игра: Загрузка иностранного языка в мозг

              • Tutorial
              Бывает ли у вас такие ситуации, когда слово, идиома или грамматическая конструкция иностранного языка никак не могут удержаться в голове, несмотря на то, что вы встречали её уже много раз и даже специально учили? А сколько процентов иностранных слов вы помните спустя месяц после их изучения? А спустя полгода? Сложно ли вам мотивировать себя на занятия иностранным языком?



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

              Под катом вас ждет рассказ о методе изучения иностранного языка при помощи карточек (flashcards), о технике эффективного использования метода и о принципиальных особенностях и алгоритмах одного варианта программной реализации.
              Читать дальше →
            • Истинное могущество регулярных выражений

              • Translation
              Как частый посетитель тэга PHP на StackOverflow, я очень часто встречаю вопросы о том, как распарсить какие-то конкретные аспекты HTML, используя регулярные выражения. Самый распространённый ответ на это:
              «Ты не можешь парсить HTML с помощью регулярных выражений, потому что HTML не является регулярным. Используй XML парсер, и будет тебе счастье»

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


              Если ты всегда мечтал написать свой язык программирования — добро пожаловать. Здесь ты наверняка найдёшь для себя что-нибудь интересное.

              GitHub-юзер yawnt собрал чудесную подборку ссылок для любителей драконов, языков и прочих вкусных внутренностей. А знающие камрады в комментариях наверняка поделятся с тобой и другими яствами.

              Пишет yawnt следующее:

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

              Я не включил (и не собираюсь) в список ссылки на официальную документацию, т. к. считаю очевидным, что первым делом следует смотреть именно туда ;P.
              Итак, куча интересных ссылок
            • CANVAS шаг за шагом: Основы

              CANVAS шаг за шагом:
              1. Основы
              2. Изображения
              3. Понг
              4. Пятнашки

              Если верить англо-русскому словарю, то можно узнать что canvas переводится как холст, а если верить википедии, то можно узнать что тег canvas, это элемент HTML 5, который предназначен для создания растрового изображения при помощи JavaScript. Тому как создать это растровое изображение и будет посвящен мой небольшой текст. Прежде чем начинать пробовать свои силы в этом не легком деле рекомендуется уже иметь базовые знания о том что такое HTML и с чем едят JavaScript.
              Читать дальше →
            • MySQL: разрушаем стереотипы

              В последнее время часто стал натыкаться на различные рассуждения людей, по поводу того, что MySQL — это плохо, это очень плохо — потому что… а вот дальше идут описания различных фич MySQL, которые четко документированы, но пользователь их просто не знает. Кто-то добавляет в БД данные без валидации и удивляется почему они сохранились в неверном формате, а кто-то описывает кучу особенностей myIsam движка, и на этих основаниях делает вывод, что MySQL это отстой — который невозможно использовать в реальных проектах. Всю документацию прочитать невозможно, и да — я с этим абсолютно согласен, но поверьте у нас есть куча других недокументированных и не менее интересных особенностей. Давайте начнем с малого, к примеру докажем, что NULL равно нулю.
              это новогодний пост - отнеситесь к нему с юмором, качаем последний MySQL и поехали
            • Книги для тимлидов и руководителей проектов. Часть 2

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

                Итак, я просил ответить на вопрос какие книги из статьи вы читали?

                Результаты опроса:
                Название книги
                Количество голосов
                Процент
                Том ДеМарко. Deadline. Роман
                об управлении проектами
                247
                54%
                Фредерик Брукс. Мифический человеко-месяц, или Как создаются
                программные системы
                174
                38%
                Джоэл Спольски. Джоэл о программировании
                165
                36%
                Том Демарко и Тимоти Листер. Человеческий фактор. Успешные
                проекты и команды
                148
                32%
                Джейсон Фрайд, Дэвид Хайнемайер Хенссон. Rework.
                Бизнес без предрассудков
                108
                24%
                Джеффри Янг и Уильям Саймон. iКона. Стив
                Джобс
                94
                21%
                Том ДеМарко, Тимоти Листер. Вальсируя с Медведями: управление
                рисками в проектах по разработке программного обеспечения
                70
                15%
                Том Демарко, Тимоти Листер. Балдеющие от адреналина и зомбированные
                шаблонами. Паттерны поведения проектных команд
                51
                11%
                Кармин Галло. iПрезентация. Уроки
                убеждения от лидера Apple Стива Джобса
                48
                11%
                Патрик Ленсиони. Смерть от совещаний
                21
                5%
                Патрик Ленсиони. Пять пороков команды. Притчи о
                лидерстве
                19
                4%
                Патрик Ленсиони. Пять искушений руководителя: притчи о лидерстве
                16
                4%
                Патрик Ленсиони. Три признака унылой работы. История со смыслом
                для менеджеров (и их подчиненных)
                11
                2%

                А теперь еще один бонус — список книг по заданной тематике, которые прислали нам читатели:
                Читать дальше →
              • Декодирование JPEG для чайников

                • Tutorial

                [FF D8]


                Вам когда-нибудь хотелось узнать как устроен jpg-файл? Сейчас разберемся! Прогревайте ваш любимый компилятор и hex-редактор, будем декодировать это:


                Jpeg file in hex editor


                Специально взял рисунок поменьше. Это знакомый, но сильно пережатый favicon Гугла: Google favicon


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


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


                [FF D8] — маркер начала. Он всегда находится в начале всех jpg-файлов.


                Следом идут байты [FF FE]. Это маркер, означающий начало секции с комментарием. Следующие 2 байта [00 04] — длина секции (включая эти 2 байта). Значит в следующих двух [3A 29] — сам комментарий. Это коды символов ":" и ")", т.е. обычного смайлика. Вы можете увидеть его в первой строке правой части hex-редактора.

                Читать дальше →
              • Как распознать кракозябры?

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

                  Итак, вуаля!


                  За источник информации была взята статья из вики. В блок-схеме «UTF-16 → CP 866» означает, что исходная кодировка была «UTF-16», а распозналась она как «CP 866».

                  Как всегда — кликабельно. Исходник в .docx: здесь.
                • Как начать писать игры

                  Оригинал: Starting out on Game Programming

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

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

                  Руководства хороши для обучения чему-то шаг за шагом, например тому, как перемещать изображение точки по экрану. Для того чтобы собрать игру воедино, вам нужны навыки решения возникающих проблем, приобретаемые лишь с опытом. Это не то, чему можно научиться из руководств. Лучший способ научиться делать игры — это начать их делать.
                  Дальше
                • Код CSS «с душком»

                  • Translation
                  • Tutorial
                  Недавно Крис Койер отвечал на вопросы читателей Smashing Magazine. Один из вопросов был о том, как распознать код CSS с «душком»:
                  Как можно определить, что ваш CSS пованивает? Какие признаки указывают на то, что код неоптимален или что разработчик писал его спустя рукава? На что вы смотрите в первую очередь, чтобы определить, плох или хорош код?

                  Я подумал, что могу расширить и дополнить ответ Криса исходя из собственного опыта.

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

                  Я хочу поделиться несколькими вещами, на которые я обращаю внимание прежде всего, чтобы составить впечатление о качестве, сопровождаемости и чистоте кода CSS.
                  Читать дальше →