• Зарплаты и стоимость жизни в Кремниевой долине

      Америка со смешанными чувствами смотрит на островок благоденствия в море рецессии — Кремниевую долину. Туда идут многомиллиардные потоки инвестиций, стартапы появляются как грибы после дождя, а многие успешно выходят на биржу. Только за январь-март 2011 года в стартапы Кремниевой долины было вкачано $7,5 млрд инвестиций (738 сделок, из которых 46% — сделки раунда А, то есть первичные инвестиции под создание рабочих мест).

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

      Иллюстрация

      Вы заботитесь о своем здоровье?


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

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

      Читать дальше →
    • SQL Server 2011 — Автономная база данных

      В течение последних лет Microsoft внедрила множество интересных технологий, которые прочно вошли в арсенал разработчиков. Кардинальные изменения были включены в SQL Server 2005, после чего SQL Server 2008 развил и укрепил успех. Denali несет в себе множество новых инструментов, а так же расширений функционала для существующих. В этой статье в деталях рассмотрим один из новых инструментов, который, я уверен, придется по душе разработчикам баз данных. Этот инструмент, фича ­ – автономные базы данных (Contained Database). Рассмотрим что они собой представляют, как с ними работать, к чему можно применить и другие вещи.

      Что не так с текущими базами?


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

      Вот некоторые из ключевых проблем:
      • Потеря информации во время разворачивания базы или передвижения ее между серверами.
        Во время передвижения базы данных между серверами, то такая информация как логины, пароли, задания агента SQL Server и прочее не может быть передвинуто вместе с базой. Потому что эта информация принадлежит серверу баз данных.  Пересоздание упомянутых объектов  руками не самое приятное занятие, которое к тому же занимает много времени и не гарантирует защиты от ошибок.
      • Различия между Разработкой и Разворачиванием приложений.
        При разворачивании приложения разработчиков могут поджидать самые разные неприятности, начиная от несовпадения тонких настроек окружения, таких как разрешения на создание новых логинов, отключенная командная строка (xp_cmdshell), языковые настройки сервера.
      • Вопросы безопасности в администрировании приложения.
        Весьма сложно администрировать и поддерживать отдельно стоящую базу данных из-за того, что, например, задания агента SQL Server доступны в пределах всего сервера, что влечет за собой повышение привилегий отдельно взятых пользователей. Однако эти повышенные права дают доступ к другим частям сервера, которые не желательно открывать. Все это может вести к серьезным проблемам безопасности.

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

      Читать дальше →
    • SSD на графике горячая/сумасшедшая

      • Translation
      Являясь сторонником твердотельных дисков …
      The State of Solid State Hard Drives (октябрь 2009, англ.)
      Revisiting Solid State Hard Drives (октябрь 2010, англ.)
      … я чувствую себя этически и морально обязанным посвятить вас в маленький грязный секрет, открытый мной за последние два года использования твердотельных дисков. Твердотельные диски дохнут. В огромных количествах. И не просто дохнут. Я говорю об ужасных поломках «боже мой, что случилось со всеми моими данными». И это нифига не клево.

      Я купил три твердотельных диска Crucial на 128 гигабайт в октябре 2009 для себя и двух других работников Stack Overflow. По состоянию на предыдущий месяц два из них уже сдохли. На днях я беседовал с Джоэлом во врем записи подкаста, и он сказал, что твердотельный диск от Intel в его Thinkpad, купленный примерно в то же время, тоже сдох.
      Читать дальше →
    • Корректная обработка проблем аутентификации AJAX-запросов для приложений ASP.NET MVC

        Для современных веб-приложений стало уже нормой использование AJAX при создании пользовательских интерфейсов. Однако, из-за этого, порой, возникают дополнительные сложности. Часто эти сложности связаны с аутентификацией и процессом обработки таких запросов на клиенте.
        Читать дальше →
      • Работаем с jQuery Templates

          Введение


          Плагин jQuery Templates – это «движок шаблонов», работающий на стороне клиента как расширение jQuery.

          Этот плагин помогает показать в браузере данные, которые находятся в объектах и массивах JavaScript, избавляя вас от рутинных операций по созданию HTML-кода, экранированию специальных символов и т.п. Кроме того, он обладает очень интересными возможностями – например, позволяет обновлять созданный с его помощью HTML-код при изменении исходных данных.

          Разумеется, jQuery Templates – не единственный и не первый «движок шаблонов», но у него есть большое преимущество перед альтернативными вариантами – поддержка со стороны jQuery Team. Это позволяет нам не бояться того, что этот плагин окажется заброшенным, и различные проблемы, возникающие при выходе новых версий браузеров, придется решать своими силами.

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

          Читать дальше →
        • Ищем деньги. Каталог инвесторов для стартапа


            Здравствуйте уважаемые Хабравчане, особенно те, у кого есть идея своего стартапа! А вот с деньгами и осведомленностью похуже. Хочу Вам в помощь поделиться небольшой таблицей IT-инвесторов, которая была составлена для себя. Дело в том, что я также как и вы, обладаю минимум информации. Такие вопросы как: «к кому идти за деньгами», «как составить бизнес-план», и наконец «кому я вообще нужен со своей идеей» — давно стали навязчивыми.
            Именно сейчас, после Новогодних праздников, самое время начать искать тех самых менторов, инвесторов, бизнес-ангелов, да и в целом зачитываться информацией на эту тему. Да, и у меня есть свой стартап, который перестал быстро развиваться и я активно ищу инвестора на дальнейшее развитие (О чем уже писал неделю назад).
            Под катом таблица, со списком полезных ссылок, в помощь начинающим IT-компаниям.
            Читать дальше →
          • 7 Продуктовых техник, на которые стоит обратить внимание разработчику

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

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

              Чуть лучше дело обстоит в продуктовой разработке, особенно в стартапах, где генерация требований равномерно распределена по всему жизненному циклу работы над продуктом. Благодаря принципам Lean StartUp: построить -> измерить -> изучить, продуктовые команды работают более короткими циклами. На входе каждой итерации — новая порция требований для «эксперимента», в формулирование которых часто вовлечена вся команда.

              В заказной разработке я наблюдаю 3 типа проблем, связанных с ожиданием готовых требований от клиента:

              1. “Бизнес” не умеет формулировать хорошие требования, потому что не понимает процесса разработки и технологических возможностей. Спецификация содержит представление заказчика о решении проблемы, докопаться до сути которой по документу сложно.

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

              3. “Бизнес” и “разработка” говорят на разных языках. Как следствие — ложное понимание требований, не проясненные предположения, вытекающие из них 'сюрпризы' в момент демонстрации. Несуществующую систему сложно описать на бумаге. Отсюда вытекают проблемы, которые можно обобщить словами заказчика: “Я не знаю точно чего хочу, но точно знаю чего не хочу”.


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

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

              Ниже — обзор продуктовых техник, которые могут в этом помочь.
              Читать дальше →
            • StructureMap — краткий справочник для работы (1/3)

                Сегодня я хочу рассказать о IoC контейнере StructureMap (и это не перевод устаревшей официальной документации), который мне приглянулся гораздо больше чем Unity. Хотя, честно сказать, мои взаимоотношения с Unity не сложились с самого начала, когда я увидел километровые файлы конфигурации к нему или же двухсот знаковые строки конфигурации в коде. Не будем о грустном.

                StructureMap не только мне показался более удобным чем другие реализации DI\IoC, достаточно набрать в гугле StructureMap vs Unity и получить кучу ссылок, где люди обсуждают и показывают наглядно, что в работе самым удобным, гибким и естественным является StructureMap.

                Ссылка раз, два и три. Ко всему прочему StructureMap еще и достаточно быстрый.
                Вот еще очень интересные подборки материалов по сравнению фреймворков http://www.sturmnet.org/blog/2010/03/04/poll-results-ioc-containers-for-net

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

                В чем, на мой взгляд, плюсы StructureMap:
                • Настройка с помощью DSL
                • Очень гибкая настройка всего
                • Простота конечного использования
                • Возможности для проверки внутренних связей
                • Поддержка тестирования out-of-the-box

                Еще много есть интересных и полезных вещей в StructureMap, но их было бы неправильно отнести к плюсам, лучше назвать их приятным дополнением, которые только облегчают жизнь.
                Читать дальше →
              • StructureMap — краткий справочник для работы (2/3)

                  Продолжение первого поста о StructureMap

                  В первой части были освещены темы:
                  • Установка
                  • Регистрация (Основа, Профили, Плагины, Сканирование, Внедрение)

                  В этой части пойдет речь о:
                  • Конструкторы (Простые типы, Конструктор по умолчанию, Составные типы, Приведение типов, Задание аргументов)
                  • Свойства (Простое задание свойств, Встроенное задание свойств, Задание свойств фреймворком, Допостроение существующих классов)
                  • Время жизни


                  Конструкторы


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

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

                  Подробности
                • StructureMap — краткий справочник для работы (3/3)

                    Теперь наступило время для:
                    • Перехватчики (OnCreation, EnrichWith)
                    • Дженерик типы
                    • Аттрибуты (DefaultConstructor, ValidationMethod, Все остальные)
                    • Немного о тестах

                    Перехватчики


                    С версии 2.5+ появилась возможность постобработки только что созданного объекта, либо полной его замены. В данном случае не ставится целью создать еще одни AOP фреймворк, так как их уже достаточно в мире, просто это может облегчить жизнь.

                    Для постобработки существует два+ метода:
                    • OnCreation – принимает в качестве параметра Action, позволяет провести свою (custom) инициализацию объекта. Есть доступ к контексту SturctureMap.
                    • EnrichWith – принимает в качестве параметра Function. Может возвращать любой тип совместимый с запрашиваемым.
                    • Свои перехватчики

                    Читать дальше →
                  • Сервер подсчета кликов

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

                      История разработки уходит в один проект торгово-рекламной площадки, где необходимо было учитывать кол-во переходов. Было решение на РНР. Но это давало видимую задержку в 0.5-1 сек, что очень раздражало разработчиков (в частности меня) и я думаю пользователей тоже.

                      По этому, когда пришлось разрабатывать аналогичный проект, мне пришлось искать альтернативы.
                      Читать дальше →
                    • Улучшаем релевантность поиска в sphinxsearch

                      Sphinxsearch является поисковым движком для быстрого fulltextsearch, может получать данные из mysql, oracle и mssql, может выступать сам хранилищем(realtime индексы). Также sphinx имеет режим работы через api и через sphinxql — аналог протокола sql(с некоторыми ограничениями), что позволяет подключить поиск через sphinx на сайте с минимальным изменением кода. Это один из немногих великих, крупных и открытых проектов разработанный в России. На моей жизни я видел как sphinx обрабатывает порядка 100-200 поисковых запросов на 2 миллиона записей из mysql и при этом сервер свободно дышал и его не тошнило, mysql начинает умирать уже на 10 запросах в секунду на аналогичном конфиге.

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

                      Sphinx содержит две независимые программы indexer и searchd. Первый строит индексы по данным взятым из базы данных, второй производит поиск по построенном индексу. А теперь перейдем к настройкам поиска в sphinx.

                      morphology

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

                      Пример нормализации слова стеммингом на русском.
                      Слова “яблоко”, “яблока”, “яблоку” будут обрезаны в “яблок” и любой поисковый запрос с вариацией слова “яблока” будет тоже нормализован и найдет записи со словами которые были описаны выше.
                      Читать дальше →
                    • Как правильно сортировать контент на основе оценок пользователей

                      • Translation


                      В оригинале название звучит как «How Not To Sort By Average Rating». Я подумал, что дословный перевод «Как не сортировать по усреднённому рейтингу» будет малопонятен и хуже отражает содержание статьи.

                      Постановка проблемы


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

                      Неправильное решение №1

                      Рейтинг= (Число положительных оценок) - (Число отрицательных оценок)
                      

                      Читать дальше →
                    • Как создавался «Кинопоиск» для Windows Phone

                        Не так давно в российском Marketplace появился официальный клиент сайта «Кинопоиск», который на ура был воспринят пользователями Windows Phone и сейчас бьёт все рекорды популярности среди бесплатных приложений. Конечно же, мы не могли не взять интервью у Григория Никонова (Anadale), разработчика этого приложения.

                        Григорий является сооснователем крупнейшего в России диджитал-агентства Actis Wunderman и главным техническим гуру компании. Кроме того, Григорий сотрудничал с ATM Forum European Marketing Awareness Committee и стал одним из авторов монографии, посвященной ATM-сетям. В совокупности его опыт работы в сфере IT составляет более двадцати лет.

                        Под катом вы сможете почитать мнение Григория Никонова о платформе Windows Phone и конкурирующих мобильных операционных системах (как со стороны разработчика, так и пользователя), о проблемах разработки под мобильные ОС, и, непосредственно о проектировании и разработке «Кинопоиска».



                        — Чем разработка под Windows Phone отличается от разработки под другие платформы?

                        С точки зрения разработчика, iOS имеет очень хорошее API, позволяющее реализовать практически всё, что может потребоваться, и содержит отличную документацию. Однако при разработке под iOS есть один минус, который так или иначе напрягает: разработка ведётся на Objective-C — чудесном языке, который пытались дотянуть до языка высокого уровня. К сожалению, на нем вы тратите массу времени на подробное объяснение того, что нужно сделать, чтобы показать ваши данные, вместо того, чтобы сказать «вот мои данные – покажи их». Ну и, конечно, приходится помнить о таких вещах, как утечка памяти, управление счетчиками ссылок и подобных вещах.
                        Читать дальше →
                      • Новый aggregation framework в MongoDB 2.1

                          В релизе 2.1 было заявлена реализация такой функциональности, как новый фреймворк агрегирования данных. Хотелось бы рассказать о первых впечатлениях от этой весьма интересной штуки. Данный функционал должен позволить в некоторых местах отказаться от Map/Reduce и написания кода на JavaScript в пользу достаточно простых конструкций, предназначенных для группировки полей почти как в SQL.

                          Читать дальше →
                        • HOWTO: свой бизнес в США из России

                              Наверняка многие из нас хоть раз думали про себя: «Черт побери, и везет же этим американцам!». Это касается многого, от магазинов с доставкой «только в пределах 48 континентальных штатов» до вполне серьезных контрактов, которые срываются только потому, что потенциальный заказчик в США категорически не желает иметь дело с иностранцами.

                              В этой статье я попробую осветить процесс создания и администрирования американской корпорации для резидента РФ. Наверняка многие из фактов для самих американцев покажутся тривиальными, однако для жителя России все куда сложнее — увы, это данность. Чтоб не сказать — это Родина, сынок. Оговорюсь сразу — я все это проделал более 2 лет назад, так что, некоторые детали могут быть не совсем актуальны. Но вряд ли что-то поменялось принципиально.
                          Читать дальше →
                        • Chop Slider 2 — лучший jQuery-слайдер


                          Добрый день. Несколько дней назад появилась необходимость использовать слайд-шоу на своём сайте, но оно должно было быть нестандартным, чтоб привлекало внимание пользователей. Искал в течение дня и ничего нормального не мог найти, были более менее подходящие «слайдеры», но душа хотела клубнички. После того как я облазил весь рунет, переключился на «забугорных» друзей и… удача! Забегая наперёд хочу сказать: этот обзор сделан потому, что в рунете нет никакого упоминания про это слайд-шоу, отсюда и логика.
                          Читать дальше →
                        • Создание форм для глубоко вложенных View Model в ASP.NET MVC

                          • Translation
                          Ёще один интересный пост от Jimmy Bogard, посвященный cозданию форм для глубоко вложенных View Model в ASP.NET MVC. Несмотря на то, что в нём постоянно идёт отсылка к ASP.NET MVC 2, информация актуальна и для 3-ей версии. Под хабракатом оригинальный пост в вольном переводе.

                          Познакомиться с шаблонами для редактирования
                        • Что делать если в Ваш Amazon EC2 instance ударила молния?

                            Как многим известно, недавно в Ирландии был обесточен один из датацентров Amazon. Об этом уже рассказывали. Как я понял из общения со своими коллегами, большинство пользователей Amazon EC2 получили разве что downtime, но вот мне не повезло больше — у меня не только инстансы остановились, но один из моих volume-ов перешел в состояние error.

                            Все бы ничего (ведь есть snapshot-ы), но вот незадача: отключать (detach) EBS volume-ы нельзя, если они подключены как root к какому либо инстансу. Во всяком случае через web.

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