• Интервью с Медведевым. О безопасности.

      Иван МедведевНа прошлой неделе в Москву приезжал Иван Медведев – самый видный русскоговорящий специалист по безопасности в Microsoft. На конференции Software Engineering Conference (Russia) 2008 он рассказывал о культовой для разработчиков компании вещи – Security Development Lifecycle (SDL). Под этим названием, в широком понимании, скрывается универсальная платформенно-независимая методология и набор средств для обеспечения безопасности в разработке проектов ПО.

      С 2004 года работа по SDL обязательна для всех продуктовых групп Microsoft; в 2006 году о нем была написана книга (которую, кстати, хотят перевести на русский); с 2007, начиная с версии 3.2, SDL продвигается в массы – работать по нему Microsoft советует всем. На что имеет полное моральное право, ведь за 5 минут в интернете можно нарыть целый ворох отзывов об SDL, как о самом продвинутом механизме безопасной разработки.

      К моему удовольствию, мне удалось пообщаться с Иваном в стенах московского офиса Microsoft. Как всегда при встрече с сотрудником этой компании, хотелось спросить его о сотне вещей. Но, как и всегда, опять же, оказалось, что он – просто увлеченный своей работой человек, который имеет мало отношения ко всем тем леденящим кровь историям о корпорации, которыми родители-ITшники пугают своих детей.
      Читать дальше →
    • 33 правила для увеличения Вашей продуктивности (Стив Павлина)

      • Перевод
      Оригинал: 33 Rules to Boost Your Productivity
      Автор: Стив Павлина (Steve Pavlina)
      Перевод: Евгений Ефремов

      Эвристика — это набор правил, предназначенных для того, чтобы помочь решать вам свои задачи. Когда задача сложна или просто велика, а оптимальное решение неясно, применение эвристических методов поможет вам продвинуться в ее решении, даже если у вас нет четкого видения всего решения целиком.
      Предположим, что вашей целью является покорение горы, но ни одна дорога не ведет к вершине. Примером эвристического решения может быть: Двигаться напрямую к вершине до тех пор, пока вы не встретите препятствие, которое не сможете преодолеть. Когда вы встретите подобное препятствие, следуйте вдоль него направо до тех пор, пока не сможете двигаться к вершине снова. Это не самый лучший или самый полный вариант применения эвристики, но во многих случаях он будет нормально работать, и вы достигните вершины.
      Эвристика не гарантирует, что вы найдете оптимальное решение, более того, она не гарантирует, что вы найдете хоть какое-нибудь решение. Но для определенного типа задач эвристика бывает весьма полезна. Ее сила в том, что она помогает сдвинуться с мертвой точки, когда вы не можете принять решение, и приступить к действиям. Когда вы начинаете действовать, вы исследуете возможные варианты, что углубляет ваше понимание задачи. И получая больше информации о задаче, вы понемногу повышаете свои шансы найти ее решение. Если вы пытаетесь решить задачу, не зная точно, как это сделать, зачастую вы можете найти решение в процессе. Причем такое, до которого не смогли бы додуматься, не начав действовать. Особенно это справедливо для творческой деятельности, например для разработки программного обеспечения. Там вы часто не знаете, что вы хотите сделать, пока не начнете это делать.
      Эвристика имеет множество приложений, одним из моих любимых является применение в личной продуктивности. Эвристика в задачах продуктивности — это набор поведенческих правил (иногда общих, иногда — ситуационных), которые помогают нам делать вещи более эффективно. Вот некоторые из мои любимых:
      Читать дальше →
    • Скрытые возможности Google Reader’а

        Оказывается, Google Reader тайком записывает нашу активность. Через интерфейс вы ничего не найдете, однако есть несколько команд, чтобы посмотреть на историю некоторых своих действий:
        1. Все посты, которые вы отправили по почте — www.google.com/reader/view/user/-/state/com.google/tracking-emailed
        2. Все посты, отмеченные, как непрочитанные (галочка «Отметить, как прочитанные» внизу поста) — www.google.com/reader/view/user/-/state/com.google/tracking-kept-unread
        3. Все посты из предыдущего пункта, но которые вы еще не прочитали — www.google.com/reader/view/user/-/state/com.google/kept-unread
        4. Посты, у которых вы нажали заголовок, чтобы посмотреть пост в самом блоге — www.google.com/reader/view/user/-/state/com.google/tracking-item-link-used
        5. Посты, в которых вы нажимали ссылки — www.google.com/reader/view/user/-/state/com.google/tracking-body-link-used
        6. Прочитанные посты, расположенные в порядке того, как прочитывались — www.google.com/reader/view/user/-/state/com.google/read
        7. Фиды, на которые вы подписаны по рекомендации Гугла (раздел «Рекомендации») — www.google.com/reader/view/user/-/state/com.google/recommendations-subscribed
        8. Рекомендованные Гуглом фиды от которых вы отказались («Нет, спасибо» в разделе «Рекомендации») — www.google.com/reader/view/user/-/state/com.google/recommendations-dismissed

        Подсмотрено в блоге «Google Operating System»
      • Советы Тибетцев для Хабрян.

          Одной из причин всех мировых бед, я считаю напряженность в телах жителей земли.
          Как не странно, если вы сейчас, сидя за клавиатурой, прислушаетесь к своему телу, вы обнаружите ряд очагов напряженности, а если будете слушать внимательно и на протяжении какого-то времени, то увидите, что напряженность эта напрямую связана с мыслями и эмоциями. Ниже публикую технику расслабления из книги Лобсанг Рампа «Третий глаз».
          Читать дальше →
        • Тим О’Рейли. Работа, которая имеет значение: основные принципы

          • Перевод

          Work on Stuff that Matters: First Principles


          опубликовано 11 января 2009 года

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

          Но прежде всего я хочу прояснить, что «работа, которая имеет значение» не подразумевает только некоммерческие проекты, благотворительность или иную форму «добрых дел». Некоммерческие проекты часто означают хорошее дело, и люди с техническими способностями могут внести важный вклад, но очень важно выбраться за пределы этих рамок. Я абсолютно убеждён в социальной ценности бизнеса, который ведётся правильно. Нам нужно создать экономическую систему, в которой общественно значимые проекты автоматически и гарантированно получают вознаграждение, а не основанную на благотворительных организациях, финансируемых по доброте сердечной.
          Читать дальше →
        • Memoization в Python

            Memoization – свойство функций сохранять (кешировать) результаты вычислений, дабы не вычислять в последствии повторно.

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

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

            Для python декоратор для функции будет выглядеть следующим образом:

            import cPickle
            def memoized(func):
                memory = {}
                def memo(*args,**kwargs):
                   hash = cPickle.dumps((args, sorted(kwargs.iteritems())))
                   if hash not in memory:
                       memory[hash] = func(*args,**kwargs)
                   return memory[hash]
                return memo
            

            Далее, нам достаточно объявить bigfunc как

            @memoized
            def bigfunc(…):
            …

            Или переопределить, если она уже объявлена:

            bigfunc = memoized(bigfunc)

            Декоратор, объявленный в начале статьи, работает только с пиклезуемыми объектами. Если ваша функция работает с непиклезуемыми объектами – вы можете заменить

            hash = cPickle.dumps((args, sorted(kwargs.iteritems())))

            на

            hash = (tuple(args), frozenset(kwargs.items())

            но вы потеряете возможность работы с mutable объектами.

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

              Haskell достаточно необычный язык. Но, несмотря на немалое количество статей по нему, нередко можно столкнуться с мнением, что всё это помогает лишь в синтетических примерах. И действительно, на простых примерах всё выглядит просто, но куда сложнее представить себе хотя бы небольшую программу в таком стиле, а статьи зачастую рассматривают особенности языка. Поэтому я захотел написать серию статей, в течение которых мы изучим возможности языка и попробуем написать простой чат. Почему именно чат? Потому что там есть место и многопоточности, и GUI клиента, и БД сервера. Хотя я с удовольствием послушал бы и ваши предложения, так как мне самому интересно, насколько этот язык удобен для решения более сложных задач.
              Так что, если вас это заинтересует, то я рискну.

              Основы
              Типы данных, паттерн матчинг и функции
              Классы типов, монады
            • Memcached: статистика, отладка и RPC

                Серия постов про “Web, кэширование и memcached” продолжается. Начало здесь: 1, 2, 3, 4 и 5.
                В этих постах мы поговорили о memcached, его архитектуре, возможном применении, выборе ключа кэширования, кластеризации, атомарных операциях и реализации счетчиков в memcached, а также о проблеме одновременного перестроения кэшей и тэгировании кэшей.

                Сегодняшний пост завершает эту серию, в нём обзорно мы поговорим о технических “мелочах”:
                • анализ статистики memcached;
                • отладка memcached;
                • “RPC” с помощью memcached.

                Полный текст всех разделов в виде одной большой PDF-ки можно скачать и посмотреть здесь (в разделе “Материалы”).
                Читать дальше →
                • +38
                • 7,7k
                • 7
              • WPF Binding: Мощь стилей и шаблонов в WPF.

                • Перевод
                В WPF существует очень четкое разделение между поведением Control'а и тем, как он выглядит. К примеру, поведение объекта класса Button состоит в том, чтобы реагировать на различные события по клику, но его вид может быть любым — вы можете сделать кнопку в виде стрелки, рыбы, или чего-либо еще, что подходит для вашего приложения. Переопределение отображения Control'а очень просто сделать при использовании VS со стилями и шаблонами, и даже еще проще, если у вас есть Microsoft Expression Blend. В этом примере я покажу вам, как переопределить отображение ListBox'а, который используется для отображения списка планет.
                Читать дальше →
              • Правильный цикл работы с версиями SVN

                  Я думаю многие любопытные люди уже знают, как нужно верно работать с SVN.
                  Но во многих статьях это описано достаточно поверхностно. Хочется немного приоткрыть завесу верного цикла версионирования, при разработке проекта, на примере TortoiseSVN.
                  И так, поехали
                  Читать дальше →
                • Cisco. Второй выпуск. Используем Packet Tracer 5.0 для моделирования сети. Скринкаст.

                    Сегодня в выпуске:


                    Packet Tracer 5. Изучаем возможности программы.
                    Выпуск выполнен в виде скринкаста.
                    За 20 минут вы познакомитесь с основными функциями PT5.

                    image

                    На повестке дня:

                    Читать дальше →
                  • Проблема одновременного перестроения кэшей

                      Серия постов про “Web, кэширование и memcached” продолжается. Начало здесь: 1, 2 и 3.
                      В этих постах мы поговорили о memcached, его архитектуре, возможном применении, выборе ключа кэширования, кластеризации, атомарных операциях и реализации счетчиков в memcached.

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

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

                        Несколько европейских университетов и Гарвард продолжают работу над совместным мега-проектом Tribler по созданию идеального BitTorrent-клиента. Об этом проекте мы уже несколько раз упоминали на Хабре, например, после разработки платёжной системы, основанной на взаимозачёте трафика (гигабайты вместо долларов, которыми можно расплачиваться за товары), а также после внедрения там системы рекомендаций.

                        И вот сейчас разработчики объявили (PDF), что в новой версии клиента Tribler 4.1.0 реализована технология полноценной децентрализованной работы. Вся статистика об объёмах закачек и раздач, а также информация о рейтингах и привилегиях, сохраняется в распределённой клиентской сети без помощи торрент-трекеров, при этом есть система социальных рекомендаций по протоколу Buddycast, что устраняет угрозу спама. Искать новые .torrent-файлы можно напрямую на компьютерах других пользователей, опять же без нужды в торрент-трекерах.
                        Читать дальше →
                      • jQuery для начинающих

                          jQuery Logo

                          jQuery — это замечательный JavaScript Framework, который подкупает своей простотой в понимании и удобством в использовании. Но изучение надо с чего-то начинать, и лично моё мнение — лучше всего начинать с наглядных примеров, и они далее…

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