• Как создавать формы для подписки на email-рассылку: Ошибки и решения



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

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


      • Translation


      Cтэнфордский курс CS183B: How to start a startup. Стартовал в 2012 году под руководством Питера Тиля. Осенью 2014 года прошла новая серия лекций ведущих предпринимателей и экспертов Y Combinator:


      Первая часть курса
      Читать дальше →
    • 40 механик для социальных игр

      • Translation
      Разработчик игр Раф Костер (Raph Koster) составил всеобъемлющий список базовых правил, на которых основаны социальные отношения в играх (мультиплеер, параллельная игра и т.д.). Эти правила для разработчиков игры заменяют азбуку. Во многом они пересекаются с принципами игровой механики, которые уже обсуждались на Хабре.

      Раф Костер приобрёл известность как создатель дизайна Ultima Online и креативный директор проекта Star Wars Galaxies, после чего основал собственную студию.
      Читать дальше →
    • Выходим на Windows phone marketplace: от простого желания до реальных результатов

      Введение


      Если вы матерый программист под платформу .NET и вам неинтересно понастальгировать о временах становления, а также узнать, как там, например, у Яндекса с культурой .NET-разработчиков, а также вы уже зарегистированы в маркетплейсе — эта статья не для вас. Если же вы все тот же матерый программер, но не зарегистированы в маркетплейсе и при этом считаете грабежом отдавать десять процентов прибыли «Софткею», вам будут интересны актуальные данные по регистрации в конце статьи в разделе «Регистрация». Всем остальным: приятного чтения.
      Читать дальше →
    • День релизов для Windows Phone 7

        image

        Сегодня 16 сентября, как и ожидалось, для платформы Windows Phone 7 выпущены финальные версии инструментов разработки.

        Итак обо всем по-порядку:

        1. здесь опубликована новость о выходе рекламного Advertising SDK для Windows Phone 7 и упомянутой в нем платформе Ad Exchange;
        2. на сайте MSDN опубликована информация по элементам управления для Windows Phone 7, среди них: долгожданные элементы Pivot и Panorama, Tilt Effect (!), Bing Maps Silverlight, Web Browser;
        3. выпущен в свет новый набор инструментов Silverlight for Windows Phone Toolkit, в который входят новые элементы управления GestureService/GestureListener, ContextMenu, DatePicker, TimePicker, ToggleSwitch, WrapPanel. Все элементы выпущены с открытым исходным кодом под лицензией MS-PL. Кроме того, в комплекте с набором инструментов идет несколько демонстрационных приложений;
        4. на официальном сайте Silverlight опубликовано видео для разработчиков iPhone желающих начать разрабатывать ПО для WP7;
        5. и наконец-то, выпущены финальные инструменты Windows Phone 7 SDK (прямая ссылка), с подробностями об этом можно ознакомиться в этом анонсе.
        UPD: доступно обучающее руководство Windows Phone 7 Training Kit for Developers — RTM Refresh.
      • О том, как мы продвигали несуществующий интернет-проект

          Статья вторая

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

          Напомню, в упомянутом материале речь шла о том, как мы с помощью интернет-пользователей выбрали название для стартапа – социальной сети для мамочек.
          Читать дальше →
        • 40 креативных меню (перевод)

            Одна из первых вещей, которые делают при планировании нового веб-сайта — это готовят контент, который будет на сайте. Затем разделяют на разделы, а затем на различные уровни навигации.

            В результате получается скучный список ссылок.

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

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

            image
            Читать дальше →
          • Obtics — функциональное реактивное программирование на .Net

            • Translation
            Данная статья — это перевод главной страницы проекта Obtics на Codeplex с небольшими изменениями.

            Описание проекта


            Цель этого проекта – это создание библиотеки, позволяющей применить принципы функционального реактивного программирования (ФРП) в .Net.

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

            История


            Идея проекта возникла во время работы над большим администрирующим приложением, использующим XAML для описания интерфейса. В этом приложении были обширные предметные модели (domain models) данных и отображения (view).

            Одной из проблем было то, что довольно трудно определить, когда необходимо обновить представление(view). Простой пересчет всего отображения при каждом действии пользователя является не достаточно хорошей идеей, поскольку это занимает слишком много времени и, к тому же, данные могут быть обновлены каким-то фоновым процессом.
            Читать дальше →
          • Как я покупал iPod touch на ebay, и как мне пришло не совсем то…

              Привет, image
              Я хочу рассказать интересную историю, как я покупал на Ebay плеер Apple iPod touch 32Gb. О том, как я использовал «снайпер», пользовался посредником и о том какие проблемы возникли. Я уже больше полугода делаю покупки из-за рубежа и особых проблем по поиску того что мне надо не возникло.
              image
              Читать дальше →
            • Habrahabr, Live Writer и Code Highlighting

                Интро



                Уже практически полгода я пользуюсь Windows Live Writer в качестве инструмента для написания веб-ориентированных статей. Это отличный инструмент, работающий с большим количеством blogengine’ов, и даже с SharePoint. Но разговор не об этом, в связи с тем, что я разработчик, мне частенько приходится вставлять листинг кода в написанные статьи, на это я и хочу обратить ваше внимание.
                Читать дальше →
              • Ice. Льдинка первая

                  Данным постом, я начинаю серию статей о замечательной технологии Ice (Internet Communications Engine), которую мне довелось использовать при написании научной исследовательской работы в университете. В этой статье я планирую сделать краткий обзор технологии Ice, и показать небольшой практический пример. Сразу хотелось бы отметить, что вся прелесть Ice заключается именно в простоте его использования на практике.

                  Читать дальше →
                • L-Systems — математическая красота растений

                    Красота растений привлекала внимание математиков веками. Активнее всего изучались интересные геометрические свойства растений, такие как симметрия листьев относительно центральной оси, радиальная симметрия цветов, и спиральное расположение семечек в шишках. «Красота связана с симметрией» (H. Weyl. Symmetry). Во время роста живых организмов, особенно растений, можно четко видеть регулярно повторяющиеся многоклеточные структуры. В случае составных листьев, например, маленькие листочки, которые являются частью большого взрослого листа, имеют ту же форму, что весь лист имел на раннем этапе формирования.

                    В 1968г. Венгерский биолог и ботаник Аристид Линденмайер (Aristid Lindenmayer) предложил математическую модель для изучения развития простых многоклеточных организмов, которая позже была расширена и используется для моделирования сложных ветвящихся структур — разнообразных деревьев и цветов. Эта модель получила название Lindenmayer System, или просто L-System.

                    Для тех, кто в теме и не хочет все читать целиком, проскрольте вниз, есть вопрос.
                    Дальше интереснее
                  • Брутфорс cookies, забыли?

                      Практически на всех более менее крупных проектах имеется система авторизации пользователей по введенному логину и паролю. Человек вводит логин и пароль и если они соответствуют данным в базе, то человек считается авторизованным, для него генерируется сессия и записывается в кукис. Наверное все вы слышали про брутфорс. Многие помнят о нем и реализуют защиту в виде ограниченных попыток ввода логина/пароля с некоторым интервалом. Но практически все забывают о том, что сессию, запрятанную в кукисе можно также брутфорсить. Более того, при аутентификации вы должны знать логин и пароль, а тут только сессию. Да и шаблон сессии (количество символов, какие символы) злоумышленник может посмотреть, зарегистрировавшись на портале.

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

                      1) Поставьте обязательную привязку к IP.
                      Если значение сессии из кукиса равно значению сессии из базы, но IP пользователя отличается от IP пользователя записанного в базе (при удачной авторизации), то выводите авторизационную форму с запросом логина и пароля.
                      Разумеется нужно дать пользователям возможность эту опцию отключить, т.к. иногда провайдеры меняют внешние IP (при натинге) и за полчаса пользователя может несколько раз кикнуть по такому алгоритму. Но по умолчанию опция должна быть включена! Это сильно ограничит взломщика.

                      2) Сессия должна быть как можно больше, ее длина должна варьироваться и состоять она должна из всех возможных символов.
                      Чем короче сессия, тем меньше возможных ее вариаций и тем больше вероятность подбора существующей сессии.
                      При постоянной длине, взломщик, зарегистрировав себе аккаунт, легко определит под какую длину нужно настроить программу — брутфорс, что минимизирует его время.
                      Т.к. взломщик может зарегистрироваться на портале, он может и собрать статистику по сессиям, из каких символов она состоит. Если он видит, что сессия состоит только из строчной латиницы, то внеся эти правила в свою программу он существенно сэкономит время подбора. Добавив только один дополнительный символ вы существенно увеличиваете время взлома!

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

                      Итог: обнаружить попытку брутфорса сессий разумеется можно, а вот заблокировать IP с которого производится брутфорс нельзя, т.к. этим вы лишите возможности нормально пользоваться сессиями настоящих пользователей с этого IP. Поэтому нам остается только увеличить время брутфорса. При использовании трех моментов указанных выше, вы легко можете увеличить время настолько, что взломщик просто откажется от этой идеи.

                      Надеюсь, что эта информация будет полезна веб разработчикам.
                    • Программируем Windows 7: Taskbar. Часть 3 – OverlayIcon

                        На этот раз мы поговорим о другой особенности панели задачи Windows 7 – OverlayIcon. Эта возможность исключительно полезна для приложений, которые обладают каким-то состоянием с точки зрения пользователя.

                        К таким приложениям можно отнести программы для обмена мгновенными сообщениями (IM). Например, Windows Live Messanger активно использует эту возможность. Например, если мы откроем WLM и будем изменять состояние, то можно увидеть как оно отображается на панели задач.



                        Читать дальше →
                      • Программируем Windows 7: Taskbar. Часть 4 – Custom OverlayIcon

                          Ранее я писал о том, как можно добавить значок состояния для вашего приложения в панели задач Windows 7. Мы рассматривали статические изображения для этих целей. Напомню, что для этого мы использовали метод SetTaskbarOverlayIcon, в параметрах которого передается ссылка на Icon.

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

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

                            Прочитав, осознав, и кое-что попробовав, я пришел к выводу: я не стану успешным.

                            Почему?
                            Читать дальше →
                          • Учимся писать: Быть или не быть собой

                              Читая главы «Style» и «The Audience» книги «On Writing Well» наткнулся на хорошее толкование мысли, которая вертелась в моей голове. Мысль касается тонкого различия и баланса между соблюдением принципов писательства для повышения удобочитаемости текста и тем, что нужно оставаться самим собой.

                              Начинающие писатели могут не замечать этого различия и сомневаться в том, где они слишком сильно следуют принципам и перестают быть самими собой. Надеюсь, эта статья поможет найти баланс и развеять эти сомнения.
                              Читать дальше →
                            • Программируем Windows 7: Taskbar. Часть 2 — ThumbButtons

                                Недавно я рассказывал о том, как в Windows 7 можно отображать прогресс выполнения операции прямо в панели задач Windows. На этот раз мы продолжим разговаривать про возможности Windows 7 для программиста и рассмотрим возможность добавления собственных кнопок управления в preview окна.

                                Читать дальше →
                              • Программируем Windows 7: Taskbar. Часть 1 — Progress Bar

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

                                  Читать дальше →
                                • Зоопарк Алгебрaических Типов Данных

                                    В этой статье мы попытаемся рассмотреть всё разнообразие Алгебраических Типов Данных.

                                    Надо сказать, задача это достаточно неподъёмная, и понять человеку, если он ранее с Алгебраическими Типами не имел дело — не очень просто.
                                    АТД были впервые использованы в языке Hope, но основную популярность они приобрели благодаря языкам ML, такими как Standart ML, OCaml, F#, и языку Haskell.
                                    Ныне АТД в той или иной мере поддерживаются в значительно большем количестве языков: Scala, Rust, Nemerle, Racket,…
                                    АТД — это универсальный тип данных. С помощью него можно представить большинство типов данных.
                                    АТД называются алгебраическими, потому что их можно представить как некую алгебраическую композицию типов его составляющих. Это знание даёт своё преимущество: понимая свойства алгебраической композиции, можно посчитать какой тип необходим для построения тех или иных данных.
                                    Будем рассматривать типы на основе языка Haskell, однако подобного с лёгкими изменениями можно добиться в других языках с поддержкой АТД.
                                    Читать дальше →