Произвольное чтение из удаленного (внешнего) файла

May 19, 09 by TracKer

Зашел сегодня на AskDev и обнаружил такой вопрос.

Более чем уверен что каждый более-менее продвинутый (да и не только) пользователь интернета скачивал оттуда относительно большие файлы – например MP3. Особенно сложно это было сделать раньше когда был сплошной Dial-Up с отвратительным качеством связи и постоянными разрывами. :) Единственный действенный способ скачать большие файлы был с помощью менеджера закачек, и было очень приятно когда сервер, на котором лежал желанный файл, поддерживал заветную докачку. Именно с ее помощью и можно прочитать любую область удаленного файла.

В Википедии написано:

The HTTP/1.1 webserver publishes its ability to respond to requests for certain byte ranges of the document by setting the header Accept-Ranges: bytes. This is useful if the client needs to have only certain portions of a resource sent by the server, which is called byte serving.

Подробнее читаем тут.

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

Немного тестов и у меня получились вот такие две функции:

function isRestoreSupported($url) { 
 
	$supported = false;
 
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_HEADER, 1);
	curl_setopt($ch, CURLOPT_NOBODY, 1);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	$content = curl_exec($ch);
	curl_close($ch);
 
	$content = trim(strtolower($content));
	$headers = explode("\n", $content);
 
	foreach ($headers as $val) {
		$val = trim($val);
 
		if (substr($val, 0, 13) == "accept-ranges") {
 
			$pos = strpos($val, "bytes");
 
				if ($pos === false) {
					$supported = false;
				} else {
					$supported = true;
				}
		}
 
	}
 
	unset($headers);
	return $supported;
 
}
 
function selectedRead($url, $position, $size) { 
 
	$position_end = $position + $size;
 
	$hdr = array(
 
		"Range: bytes=$position-$position_end"
 
	);
 
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_HEADER, 0);
	curl_setopt($ch, CURLOPT_NOBODY, 0);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($ch, CURLOPT_HTTPHEADER, $hdr);
	$content = curl_exec($ch);
	curl_close($ch);
 
	return $content;
 
}

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

$restore_support = isRestoreSupported("http://ru.akella.com/Files/Patches/N/NeverWinterNights2/nwn2rus104.exe");
 
if ($restore_support) {
 
	echo "Restore supported\n";
	echo "Reading...\n";
	echo "===[Data - Begin]===\n";
	echo selectedRead("http://ru.akella.com/Files/Patches/N/NeverWinterNights2/nwn2rus104.exe", 0x4e, 39);
	echo "\n===[Data - End]===\n";
 
} else {
 
	echo "Restore not supported\n";
 
}

В результате имеем:

Restore supported
Reading...
===[Data - Begin]===
This program cannot be run in DOS mode.
===[Data - End]===

Суть проста: сначала мы спрашиваем у сервера понимает ли он параметр заголовка Range (в народе – докачка), при этом с помощью CURLOPT_NOBODY ограничиваемся ответом сервера в виде одного заголовка, и в случае успеха скачиваем нужный нам кусок.

Шоубизнес: Хорошо спел Александр Рыбак потому и занял первое место на Евровидении, давно уже хочется сказки…

Меряем скорость загрузки сайта

April 19, 09 by TracKer

Сегодня я хочу написать про несколько сервисов меряющих скорость загрузки сайта.

Скорость загрузки сайта это один из главных параметров сайта, извините за тавтологию. :)
Чем же этот параметр так важен? Дело в том что пользователь не любит ждать. Все должно происходить очень быстро. Раньше, когда большая часть пользователей использовала Dial-Up доступ в интернет, скорость загрузки сайта не имела большого значения, так как это было не заметно из-за медленного канала передачи данных. Теперь же, когда пользователи постепенно переходят на DSL и выше, пропускная способность каналов возросла и любое промедление в работе сайта сразу же становится заметным пользователю. На сегодняшний день есть множество способов оптимизации загрузки сайта, о некоторых я напишу в следующих статьях. Но для начала нужно определить насколько медленно (или быстро) все работает и стоит ли вообще проводить оптимизацию.


Site Perfomance Logo

Первый сервис о котором я хочу рассказать это Site Perfomance. Пожалуй самый продвинутый сервис по тесту скорости из тех которые мне удалось найти. Для того чтобы произвести тест скорости, необходимо указать адрес вашего сайта, выбрать из списка сервер, который и будет производить тест скорости, и указать количество потоков для закачки содержимого страницы (это в упрощенном режиме). Например для Internet Explorer 6 и Firefox 3 характерно 6 потоков, а для Opera и Safari – 8 (все это указано в выпадающем списке). Серверов же только три: два в США, один в Европе.

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

  • Bandwidth – пропускная способность канала. Можно замерять скорость загрузки для разных групп посетителей, в зависимости от пропускной способности их канала.
  • Packet loss – искусcтвенна симуляция потери пакетов.
  • Delay – установка дополнительных задержек при закачке.
  • HTTP-compression – поддержка сжатия.
  • Keep-Alive – поддержка сохранения соединения.
  • Referer – добавляет referer в запрос.
  • HTTP-Auth Login и Password – Логин и пароль для доступа к странице.
  • DNS override IP и Domain – позволяет самому установить значение IP-Domain в обход DNS сервера.

Анализ скорости загрузки происходит в несколько этапов (их колличество зависит от хоста и очередности файла): ожидание определения адреса сервера (wait4resolve), ожидание очереди закачки (queue), определение адреса сервера (resolve), ожидание соединения с сервером (connect), получение заголовков (headers), ожидание первого байта информации (first_byte), загрузка основного тела страницы (body).

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

site-pref-graph

Левая часть таблицы это этапы загрузки файлов (этапы я описал выше, а описание каждого цвета будет указано в легенде над таблицей) во времени (сверху указано на какой секунде начинается каждый этап). В правой части таблицы есть столбик “Compress ratio”. Значение 100% говорит о том что сжатия не произошло, тоесть страница было отдана клиенту без предварительного сжатия, чем меньше процент тем больше сжатие.

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


pingdom-logo

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

Как и предыдущий сервис, pingdom производит тест скорости загрузки страницы в несколько этапов (а именно в три) и выводит результат в виде графика по времени загрузки. Этапы анализа не настолько детальны как в предыдущем сервисе: соединение, время до первого байта информации и время до последнего байта информации.

pingdom-graph

Также есть таблица с общей информацией относительно загруженных данных.

В отличии от предыдущего сервиса, в этом можно различным образом сортировать полученные данные и сравнивать текущие результаты с полученными ранее – если при тесте была поставлена галочка “Save test” то все предыдущие проверки по домену будут доступны в маленькой таблице “Test archive” расположенной в правой нижней части страницы.

К минусам можно отнести неизвестность расположения сервера, поэтому непонятно с какого места происходит замер.

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


webo-logo

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

Для проведения тестирования необходимо ввести только адрес сайта. Сразу после тестирования откроется страница с обобщенными данными в верхней части страницы. Ниже будет находиться три вкладки: Рекомндации (активная), Влияние файлов на скорость, Диаграмма загрузки.

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

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

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

webo-graph

В отличии от предыдущих сервисов, этот не фиксирует разные этапы загрузки файлов. Однако есть некоторые опции которые позволяют детализировать уже готовые данные без повторных тестов, а именно: отобразить данные в зависимости от выбранного браузера (доступно пять браузеров: Internet Explorer, Firefox, Opera, Safari / Google Chrome), в зависимости от включения опции кеширования (не очень понял как работает эта опция) и в зависимости от ширины канала (100, 50, 54 и 36 Килобит в секунду). Однако у меня возникли сомнения относительно работы этих опций, если повторно нажать на уже выбранную опцию то данные результата будут разные, то есть если выбрать Firefox, а потом нажать на него еще раз то прядок скачивания файлов измениться и соответственно время загрузки тоже… Еще к минусам можно отнести шкалу времени, которая расположена только внизу таблицы.

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

Вывод: Для точной проверки работы скорости загрузки сайта необходимы все три сервиса, Site Perfomance для точного пределения слабого звена в загрузке файлов, Pingdom для сравнивания результатов и Webo для получения советов по оптимизации. Хотя в принципе можно обойтись одним Site Perfomance.

Постовой: Здесь можно заказать создание корпоративного сайта качественно, быстро и не дорого.

Сервисы наблюдения за параметрами сайта

March 22, 09 by TracKer

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

Мониторинг:

  • тИЦ
  • PR (Page Rank)
  • WR (Webalta Rank)
  • DMOZ
  • Индекс в Яндексе
  • Индекс в Google
  • Счетчик LiveInternet (зачем??)
  • Время до которого продлен домен (судя по всему работате только для RU-нета)

pr-cy-domain-info

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

pr-cy-domain-history

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

Следует быть осторожным с кнопкой удаления домена, так как никаких предупреждений типа “А вы уверены, что вы уверены, что хотите удалить данный домен?” не будет, он просто удалится. Однако если добавить домен повторно он востановится со всеми параметрами включая историю.

Кроме всего прочего, напротив каждого домена есть кнопка проведения анализа домена в сервисе PR-CY, а также кнопка на получения счетчика PR и тИЦ.


Второй также подсервис, но Topnem. Открылся недавно. В принципе суть сервиса абсолютно такая-же как у сервиса выше. Визуально он практически копирует выше описанный, по сути используется один и тот же скрипт. Но есть некоторые отличия.

Умеет мониторить:

  • тИЦ
  • PR (Page Rank)
  • DMOZ
  • Индекс в Яндексе
  • Индекс в Google
  • Счетчик LiveInternet (модно)

topnem-domain-info

Интервал обновления составляет 12 часов (в 2 раза больше чем у первого). Опять же никакой автоматики. Погрешности такие же, только с другими параметрами, например часто неправильно определяет тИЦ (у меня пока правильно не разу не определил). В отличии от первого, в этом добавилась возможность разделения сайтов на группы (они расположены над таблицей доменов).

topnem-domain-history

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

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

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

Постовой: Корпорация осуществляющая продвижение сайтов в поисковиках, с хорошими тарифами.

Скробблим ВКонтакте

March 17, 09 by TracKer

vkontakte-scrobbler-lastfm
Как уже многие знают, Last.FM – это огромная социальная сеть позволяющая найти людей с музыкальным вкусом похожим на ваш и общаться с ними. Также там можно найти для себя новые стили, исполнителей или композиции в зависимости от того что вы слушаете (система сама найдет и предложит их вам).

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

На днях пытаясь решить проблему с проигрыванием и скробблингом (так называется процесс сохранения статистики на Last.FM) из браузера я наткнулся на давольно интересную разработку для Greasemonkey. Это ВКонтакте Scrobbler.

Суть проста, вы входите в аккаунт на Last.FM и ВКонтакте, далее нужно обратить внимание на индикатор в левом вертикальном меню (Моя Страница, Мои Настройки…) если он серый на него нужно нажать, если синий – все ок.

vkontakte-lastfm-turn-onВсе, и начинеаете слушать музыку. :) При этом скробблинг происходит при проигрывании половины композиции, если была нажата пауза то это тоже учитывается (время будет приостановлено).

vkontakte-audio

Во время прослушивания на Last.FM написано какая сейчас играет композиция.

lastfm-audio

Однако тут тоже не без глюков, не все композиции у меня учлись, но это можно списать на состояние проекта – Alpha версия. Плагин также загружает информацию об испольнителе и выводит в правой панели когда вы находитесь на странице “vkontakte.ru/audio.php?*” – непонимаю для чего она, но наверно кому-то нужна.

Плагин работает и под Greasemonkey в Firefox, и в Opera.

Скачать и сразу проинсталировать можно па этой ссылке:
http://nichtverstehen.de/vkontakte-scrobbler/vkontakte-scrobbler.user.js

myTTS – Искусственный голос и синтез речи

March 10, 09 by TracKer

myTTS

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

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

Разнообразие книг в электронном виде, доступных для скачивания в Интернете или распространяемых на CD-дисках намного упрощает как поиск книжек для почитать так и собрание и накопление личной библиотеки довольно солидного объема. Однако если читать эти книги с экрана, то рано или поздно можно посадить зрение. Распечатка текста на принтере для чтения – довольно затратное и хлопотное дело, увеличивающее горы макулатуры. Отличной альтернативой традиционным способам прочтения книг стало их озвучивание с помощью компьютерных чтецов-роботов – и зрение не портится, и руки во время прослушивания можно занять полезным делом. А если записать синтезированную речь в аудиофайл и “кинуть” на переносной MP3-плеер, появится возможность слушать книги вдали от дома, например в поездках. До безобразия удобно, неправда ли?

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

Дальше я немножко расскажу о доступных движках для синтеза речи, все ссылки на которые, а также словари и “читалки” к ним есть на myTTS.

Для того чтобы синтезировать речь, прежде всего нужен сам синтезатор – движок для синтеза речи Text-To-Speech (TTS) Engine. Движок – это набор программных средств, выполняющих строго определенную задачу (в нашем случае – задачу синтеза речи) и предоставляющих интерфейс для использования его возможностей. Чтобы обеспечить взаимодействие различных прикладных программ между собой и голосовых синтезаторов, Microsoft предложила использовать стандарт SAPI (Speech Application Programming Interface). Почти все речевые движки поддерживают хотя бы одну из версий этого стандартного программного интерфейса для платформы Windows: MS SAPI 4.x или MS SAPI 5.x, а некоторые – сразу две.

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

Постовой: Теперь за WebMoney можно заказать пополнение КиевСтар.

Page 2 of 2312345...Last »