User
Организация живой трансляции с ip камеры на сайте
Введение
Задача
Рассмотрим задачу по организации на сайте живой видео трансляции с ip камеры. Наш стенд состоит из трёх составных частей:- ip камера
- медиасервер
- flash плеер в браузере на стороне клиента
DDoS — как выжить от школьников?
PHP & AMQP (Продолжение) Инсталляция php-rabbit
кому интересно, какие камни ожидают при инсталляции php-rabbit
Большой брат в Linux или видеонаблюдение своими руками
После переезда в новый офис, дабы не расслаблять сотрудников, было решено
установить систему видеонаблюдения. Но, как обычно, основным условием было:
дешево и сердито :) После обдумывания и подсчетов было решено остановиться на
следующем:
IP камеры и компьютер в качестве регистратора.
Для начала попробовали небезызвестный ZoneMinder. Но отчего-то с 9 камерами он
грузил систему нещадно. После некоторой борьбы с ним, было решено отказаться от
него. Поискав на просторах Internet была найдена программка под названием
motion (http://www.lavrsen.dk/twiki/bin/view/Motion/WebHome). Почитав немного
про нее, было решено остановиться на ней.
Итак, у нас были IP камеры, компьютер в качестве регистратора, motion в
качестве софта и желание подружить весь этот колхоз :)
Технология Power over Ethernet
Доставка видеоконтента пользователям
Что такое «контент» для видеохостинга? Во-первых, контент видеохостинга – это просто видео, которое представляет собой набор файлов в различных форматах, в частности, в формате FLV для просмотра пользователем через Flash Player. Эти файлы статичны, видеохостинг при загрузке пользователем видеоролика осуществляет конвертацию во все требуемые форматы с необходимым битрейтом. Хранение такого контента — это хранение обычных файлов, только довольно большого размера. Отдача контента — это, по сути, организация скачивания файлов.
Во-вторых, контент видеохостинга — это «живые» потоки или вещания. Вещания не записываются на диск, не происходит их конвертация, потоки раздаются клиентам с учетом пропускной способности каналов (происходит пропуск пакетов, если канал клиента недостаточен для получения потока вещания в полном качестве). Отдача контента в данной ситуации — это раздача потока на большое количество подключенных пользователей (тысячи смотрящих).
HTML5 File API: множественная загрузка файлов на сервер
Рассматривать возможности File API будем на примере одновременной загрузки нескольких картинок на сервер. В конце статьи приводится готовое решение, оформленное в виде jQuery-плагина.
Закон «Об информации». Интересные моменты
Во-первых, основной «информационный» закон «Об информации, информационных технологиях и защите информации» носит декларативный характер, никакой ответственности за нарушения он не устанавливает. Поскольку для большинства неюристов «закон» – это «Уголовный кодекс», то ясно, что читать его никто не будет. Во-вторых, написан он довольно непонятным языком, так что, даже тот, кто читать все-таки будет, вполне возможно, не осилит до конца. В общем, закон этот, хотя и является основным при регулировании правоотношений, связанных с информацией, читается редко и немногими.
Сейчас мы попробуем провести нашего «сферического айтишника в вакууме» через «информационный» закон, выделив в нем наиболее важное.
Программа и данные
Как перезагрузить зависшую систему
PulseAudio, часть 1: управление из командной строки
Одним из новшеств Ubuntu 10.10 стал переход с «голой» ALSA на PulseAudio. Ранее постилось много советов прибить и удалить его для решения проблем, однако теперь PulseAudio стабилен, с ним не шипят колонки ;), и он способен на такое, что не снилось Alsa :)
В статье я с самого начала расскажу что это такое и как оно работает, а так же:
- Как переключить весь звук на USB-колонку на закрывая приложений (usb hotplug);
- Как выбрать порт звуковой карты для вывода звука (колонки ноутбука/наушника, LineOut/Наушники);
- Как выбрать профайл звуковой карты (маппинг физических портов: 5.1 или стерео+lineIn?);
- Как управлять громкостью и усиливать тихий сигнал (!);
- Как сделать Skype громче музыки?
И представлю своё решение, призванное упростить управление PulseAudio ;)
Пишем свой драйвер под Linux
Хочу признаться сразу, что я вас отчасти обманул, ибо драйвер, если верить википедии — это компьютерная программа, с помощью которой другая программа (обычно операционная система) получает доступ к аппаратному обеспечению некоторого устройства. А сегодня мы создадим некую заготовку для драйвера, т.к. на самом деле ни с каким железом мы работать не будем. Эту полезную функциональность вы сможете добавить сами, если пожелаете.
То, что мы сегодня создадим, корректнее будет назвать LKM (Linux Kernel Module или загрузочный модуль ядра). Стоит сказать, что драйвер – это одна из разновидностей LKM.
Писать модуль мы будем под ядра линейки 2.6. LKM для 2.6 отличается от 2.4. Я не буду останавливаться на различиях, ибо это не входит в рамки поста.
Мы создадим символьное устройство /dev/test, которое будет обрабатываться нашим модулем. Хочу сразу оговориться, что размещать символьное устройство не обязательно в каталоге /dev, просто это является частью «древнего магического ритуала».
Простой и эффективный метод отразить http DDoS от 50мбит с помощью nginx и iptables
Предлагаю твоему вниманию простой и в то же время эффективный метод борьбы с http DDoS. На основе сервера Xeon 2.5GHz / 4Gb RAM / SAS можно отражать атаку примерно до 300 Мбит/с (значение получено методом экстраполяции).
Способ реализация
Производится тонкая настройка параметров системы. Так что север будет способен выдерживать больше подключений от ботнета, чем канал до сервера сможет пропустить.
Область применения
Борьба с Http DDoS на выделенном сервере или ВПС. Максимальная возможная мощность сдерживания DDoS атаки ограничивается физическими возможностями сервера и пропускной способностью канала.
SEO под DDoS-ом
Ваш сайт будет правильно индексироваться во время атаки, что позволит сохранить позиции в выдаче поисковых систем. Особенно актуально для сайтов с большими SEO бюджетами.
Стоимость и эффективность
На время атаки придется отказаться от некоторых сервисов вашего сайта. Возможно, придется расширить полосу канала, перенести сайт на более мощный сервер. Эффективность достигается максимизацией коэффициента масштабируемости системы. Обеспечивается быстрое наращивание аппаратных ресурсов при увеличении мощности атаки.
Когда не нужна тригонометрия
Закрепляем jQuery — 25 отличных советов
Далее все написано от имени автора оригинальной статьи.
Введение
jQuery прекрасен. Я использую его вот уже почти год и, хотя я и был достаточно впечатлен в самом начале, он нравится мне все больше и больше по мере использования и по мере того, как я узнаю о том, как он устроен внутри.
Я не эксперт в jQuery. И даже не претендую, поэтому, если встретите ошибки, смело поправляйте меня и вносите предложения по улучшению (поправлять и присылать поправки нужно автору статьи, а не перевода — зам. пер.).
Я называю себя «среднестатистическим» пользователем jQuery и я думаю, что всем остальным будет интересно почитать и что-нибудь почерпнуть из «фишек», «трюков» и техник, которые я освоил за последний год. Статья получилась куда длиннее, чем я предполагал изначально, так что в самом начале я привел «содержание» для более удобной навигации и возможности при желании пропустить не интересующие моменты.
Содержание
- Загружайте фреймворк с Google Code
- Используйте «шпаргалку» (cheat sheet)
- Соединяйте все ваши скрипты и уменьшайте размер файла
- Используйте возможности Firebug для ведения логов
- Минимизируйте операции выборки в пользу кэширования
- Сводите манипуляции с DOM-деревом к минимуму
- Оборачивайте все в единый элемент, когда речь идет о любой вставке в DOM
- Используйте «id» вместо классов, где это возможно
- Задайте контекст своим селекторам
- Используйте последовательности вызовов методов с умом
- Научитесь правильно использовать анимацию
- Научитесь назначать и делегировать события
- Используйте классы для сохранения состояния
- Еще лучше — используйте встроенный в jQuery метод data() для сохранения состояния
- Пишите собственные селекторы
- Подготавливайте HTML и модифицируйте его, когда страница загружена
- Используйте «отложенную загрузку» (lazy loading) для определенного контента для выигрыша в общей скорости и преимуществ для SEO
- Используйте служебные функции jQuery
- Используйте «noconflict» для переименования глобального объекта «jquery», когда используете его с другими фреймворками
- Как узнать что картинки загружены?
- Всегда используйте последнюю версию
- Как проверить, что элемент существует?
- Добавляйте класс «JS» в элемент «html»
- Возвращайте «false» для отмены поведения по-умолчанию
- Короткая запись для события готовности документа
Как увеличить скорость работы jQuery скрипта
Декодирование JPEG для чайников
[FF D8]
Вам когда-нибудь хотелось узнать как устроен jpg-файл? Сейчас разберемся! Прогревайте ваш любимый компилятор и hex-редактор, будем декодировать это:
Специально взял рисунок поменьше. Это знакомый, но сильно пережатый favicon Гугла:
Последующее описание упрощено, и приведенная информация не полная, но зато потом будет легко понять спецификацию.
Даже не зная, как происходит кодирование, мы уже можем кое-что извлечь из файла.
[FF D8] — маркер начала. Он всегда находится в начале всех jpg-файлов.
Следом идут байты [FF FE]. Это маркер, означающий начало секции с комментарием. Следующие 2 байта [00 04] — длина секции (включая эти 2 байта). Значит в следующих двух [3A 29] — сам комментарий. Это коды символов ":" и ")", т.е. обычного смайлика. Вы можете увидеть его в первой строке правой части hex-редактора.
Таблетка от пингвиньего жара своими руками
Другая ситуация. У моего знакомого довольно пожилой ноутбук ASUS с достаточно странными настройками ACPI, в таблицах которого записано, что включать throttling нужно при температуре системы в 89 градусов Цельсия, а отрубать систему от критического перегрева при температуре в 81 градус.
Эмс… Вы не сочтите это всё антипиаром ASUS и Intel, ибо (я уверен) на других ноут(нет)буках с другими x86-процессорами вполне появляются схожие проблемы, и этот пост о том, как их решать, а не о том, какие праАативные флагманы IT… И вообще, я фанат ARM'ов… Так что для меня, что Intel, что AMD — одинаковое x86-зло… Но просто факт остаётся фактом. В некоторых старых моделях ноутбуков от ASUS кривые таблицы ACPI, а Atom'ы греются.
Нужно как-то управлять режимами работы процессора, чтобы остужать пыл горячих кремниевых парней, дабы не разрушали они естественный прохладный микроклимат для пингвина.
Проблема только в том, что стандартные рецепты манипулирования только лишь power-уровнями процессора в Linux (при помощи подсистемы cpufreq), которые раздаются на всех форумах направо и налево, недостаточно эффективны. Тот же Atom ощутимо греется находясь и в самом 'экономном' режиме, а моему знакомому в работе периодически нужна высокая производительность процессора, однако не ценой отключения по критической температуре. И при этом сброс процессора его ноутбука в 'экономный' режим при повышении температуры от перегрева не спасал.
В общем, проблемы надо как-то решать. Собственно вот, где-то на троечку с плюсом их решить получилось, решение описываю ниже с некоторыми подробностями, о которых редко пишут на user-форумах Linux (и вообще, я даже и сам не понял, откуда я всё это решение раздобыл :).
Джаббер чат на веб-странице
Как это вообще должно работать: пользователь заходит на сайт, и видит окошко, куда можно разговаривать. После того как пользователь послал сообщение, оно прилетает на указанный джаббер аккаунт. Получатель этого сообщения может написать ответ и оно придёт посетителю сайта.
Что для этого нужно:
- Jabber сервер, можно публичный, можно локальный. Я выбрал Openfire и установил его локально. Сервер должен поддерживать Bosh — XEP-0124: Bidirectional-streams Over Synchronous HTTP, об этом чуть позже.
- JS библиотека, которая будет реализовывать джаббер-клиент на сайте. Я взял Strophe. Это достаточно низкоуровневая библиотека, в которой нет функций типа «ПослатьСообщение(Куда, Текст)». Для достижения нужных действий нужно вручную составлять команды джаббер серверу (в XML). Удобные средства для создания XML в Strophe есть :)
Согласованные в конечном счете (Eventually Consistent)
Information
- Rating
- Does not participate
- Registered
- Activity