<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="http://wiki2.linuxformat.ru/skins/common/feed.css?97"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title>LXF133:libferris - История изменений</title>
		<link>http://wiki2.linuxformat.ru/index.php?title=LXF133:libferris&amp;action=history</link>
		<description>История изменений этой страницы в вики</description>
		<language>ru</language>
		<generator>MediaWiki 1.11.1</generator>
		<lastBuildDate>Wed, 13 May 2026 22:27:57 GMT</lastBuildDate>
		<item>
			<title>Crazy Rebel: /* Портим ячейки */</title>
			<link>http://wiki2.linuxformat.ru/index.php?title=LXF133:libferris&amp;diff=12392&amp;oldid=prev</link>
			<description>&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Портим ячейки&lt;/span&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Версия 10:53, 13 июля 2011&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 90:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 90:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;{{Врезка|Содержание=[[Изображение:LXF133_72_1.jpg|300px]] Просмотрите фотоальбомы Flickr как файловую систему в файловом менеджере ''ego''. Расширенные атрибуты дадут вам дополнительную информацию.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;{{Врезка|Содержание=[[Изображение:LXF133_72_1.jpg|300px]] Просмотрите фотоальбомы Flickr как файловую систему в файловом менеджере ''ego''. Расширенные атрибуты дадут вам дополнительную информацию.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Изображение:&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;LXF133_72_1&lt;/del&gt;.jpg|300px]] Чтобы скопировать видео на сайт Vimeo, воспользуйтесь ''gfcp'', ''GTK''-заменой для ''cp'', поставляемой с ''libferris''.|Ширина=300px}}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Изображение:&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;LXF133_72_2&lt;/ins&gt;.jpg|300px]] Чтобы скопировать видео на сайт Vimeo, воспользуйтесь ''gfcp'', ''GTK''-заменой для ''cp'', поставляемой с ''libferris''.|Ширина=300px}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;source lang=bash&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;source lang=bash&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</description>
			<pubDate>Wed, 13 Jul 2011 10:53:46 GMT</pubDate>			<dc:creator>Crazy Rebel</dc:creator>			<comments>http://wiki2.linuxformat.ru/index.php/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:LXF133:libferris</comments>		</item>
		<item>
			<title>Crazy Rebel: викификация, оформление, иллюстрация</title>
			<link>http://wiki2.linuxformat.ru/index.php?title=LXF133:libferris&amp;diff=12378&amp;oldid=prev</link>
			<description>&lt;p&gt;викификация, оформление, иллюстрация&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая статья&lt;/b&gt;&lt;/p&gt;&lt;div&gt;: '''''libferris''''' Управляем содержимым web-сайтов через интерфейс файловой системы&lt;br /&gt;
&lt;br /&gt;
==''libferris'': Добавим сервисы==&lt;br /&gt;
&lt;br /&gt;
: Копируйте и редактируйте контент Facebook, Youtube и Vimeo, не запуская браузер. '''Бен Мартин''' покажет, как это сделать.&lt;br /&gt;
&lt;br /&gt;
{{Цикл/libferris}}&lt;br /&gt;
&lt;br /&gt;
Месяц назад мы познакомились с ''libferris'' и узнали, как с помощью этой библиотеки загружать изображения на Flickr прямо с рабочего стола Linux. Во второй части мы расширим наши охват и поговорим о других сервисах, таких как Facebook, видеохостинги и Google Docs, и о передаче данных напрямую в сеть.&lt;br /&gt;
&lt;br /&gt;
Если просмотреть содержимое URL-адреса '''facebook://''' с помощью утилиты, связанной с ''libferris'' (или через ''Fuse''), вы увидите два каталога и файл. Файл '''status''' содержит ваш текущий статус в Facebook, который можно обновить, записав туда данные. Так как на вашей странице в Facebook отображаются ссылки и статусы ваших друзей, расположение вашего статуса в файле делает саму файловую систему удобным средством для микроблоггинга.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
 $ fls -1 facebook://&lt;br /&gt;
 contacts&lt;br /&gt;
 recent&lt;br /&gt;
 status&lt;br /&gt;
 $ fcat facebook://status&lt;br /&gt;
 Simone is home!&lt;br /&gt;
 $ echo Эй, кто купит обезъяну? | ferris-redirect -T facebook://status&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Содержание=[[Изображение:LXF133_70_1.jpg|300px]] С помощью ''libferris'' можно редактировать таблицы Google Spreadsheet.|Ширина=300px}}&lt;br /&gt;
&lt;br /&gt;
В каталоге '''contacts''' находятся файлы виртуальных карточек '''vCard''' всех ваших друзей в Facebook. Содержимое этого (и многих других) каталогов в ''libferris'' можно просмотреть командой ''ferris-ls -0''. Опция '''-0''' велит ''libferris'' показывать данные, которые библиотека считает интересными, вместо обычного времени изменения, размера, владельца и группы, которые покажет ''ls -l''. В примере ниже я скрыл свои личные данные. Обратите внимание, что '''NNNNNNNNN''' будет заменено идентификатором каждого из ваших друзей в Facebook. В файле '''vCard''' будет находиться миниатюра контакта, но его телефон с помощью этого API получить нельзя, хотя на сайте Facebook он доступен.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 $ ferrisls -0 facebook://contacts/NNNNNNNNN.vcf John Doe , , NNNNNNNNN&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Наконец, в каталоге '''facebook://recent''' находятся последние записи всех ваших друзей в той форме, в какой вы видите их на своей странице в Facebook. В дальнейшем планируется поддержка загрузки фото- и видеоальбомов.&lt;br /&gt;
&lt;br /&gt;
===Видеохостинги===&lt;br /&gt;
&lt;br /&gt;
Наряду с Facebook, ''libferris'' 1.3.6 поддерживает выгрузку видео-роликов на Flickr, Vimeo и YouTube. Для двух последних сайтов пока поддерживается только выгрузка, но в будущем, вероятно, появится API для работы с друзьями, списками, поиском и комментариями, вроде того, что сейчас предлагает Flickr API. Как и во Flickr API, было бы здорово иметь возможность изменять размер и формат видеоролика в процессе выгрузки.&lt;br /&gt;
&lt;br /&gt;
Выгрузка файла на эти сайты сводится к его копированию в каталог '''upload'''. По ходу процесса вы увидите достаточно общий отчет о ходе передачи.&lt;br /&gt;
&lt;br /&gt;
 gfcp -av medium-test-video.mp4 vimeo://upload&lt;br /&gt;
 gfcp -av medium-test-video.mp4 youtube://upload&lt;br /&gt;
&lt;br /&gt;
В дополнение к фотохостингам, в ''libferris'' недавно была добавлена поддержка ''GStreamer''. На данный момент файловая система '''gstreamer://''' может только захватывать данные, и вы должны сказать ''libferris'', откуда и как это делать. Вы вписываете, какие виртуальные файлы вам нужны, в файл '''~/.ferris/gstreamer.xml'''. Пример показан в коде ниже. Те, кому знаком ''GStreamer'' ([[LXF125:GStreamer|LXF125]] и [[LXF130:Clutter|LXF130]]), обратят внимание, что элемент '''&amp;lt;nowiki&amp;gt;&amp;lt;source&amp;gt;&amp;lt;/nowiki&amp;gt;''' содержит обрабатываемый канал, который могла бы использовать команда '''gst-launch'''. Каждый XML-элемент велит ''libferris'' создать виртуальный файл, а элемент '''&amp;lt;nowiki&amp;gt;&amp;lt;source&amp;gt;&amp;lt;/nowiki&amp;gt;''' сообщает, как использовать ''GStreamer'' для создания содержимого файла, когда этот файл считывается.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;gstreamer&amp;gt;&lt;br /&gt;
 &amp;lt;capture&amp;gt;&lt;br /&gt;
 &amp;lt;file name=”test.jpg”&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;source&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 filesrc location=/tmp/medium-test-image.jpg&lt;br /&gt;
 ! appsink name=sink&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/source&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;/file&amp;gt;&lt;br /&gt;
 &amp;lt;file name=”n810.mpeg”&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;source&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 tcpclientsrc host=myn810 port=5434&lt;br /&gt;
 ! queue ! jpegdec ! ffenc_mpeg2video ! ffmux_mpeg&lt;br /&gt;
 ! appsink name=sink&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/source&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;/file&amp;gt;&lt;br /&gt;
 &amp;lt;/capture&amp;gt;&lt;br /&gt;
 &amp;lt;/gstreamer&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Когда вы читаете '''test.jpg''', то просто получаете копию локального файла '''/tmp/medium-test-image.jpg'''. Стадии канала отделяются друг от друга восклицательным знаком, а последней стадией всегда должна быть '''appsink''' с именем '''sink'''. С другой стороны, если мы прочтем файл '''n810.mpeg''', то получим содержимое web-камеры на нашем Nokia N810 в виде потока MPEG2.&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Заголовок=Скорая помощь|Содержание=''Libferris'' поддерживает оповещения о создании, удалении или изменениях в файловой системе. Например, команда ''ferrisls -monitorall -0 url://что-тотам заставит ''ferrisls'' выдать список содержимого каталога и ожидать от файловой системы событий, о которых нужно сообщить.|Ширина=300px}}&lt;br /&gt;
&lt;br /&gt;
В результате, при настроенных на захват видео и изображений виртуальных файлах ''GStreamer'' можно «скопировать» данные с вашей камеры прямо в web-сервис. Копирование виртуальных файлов JPEG одним махом на web-сервисы протестировано; поддержка загрузки видео напрямую через '''gstreamer://''' еще ожидается.&lt;br /&gt;
&lt;br /&gt;
Файлы, созданные в '''gstreamer.xml''', появляются в '''gstreamer://capture''' под теми именами, которые вы им дали. Поддержка пока ограничена файлами только-для-чтения, но в будущем планируется и поддержка записи в ''GStreamer''.&lt;br /&gt;
&lt;br /&gt;
Вы наверняка обратили внимание, что часто имеется каталог '''upload''', позволяющий копировать файл на web-сервис. Это работает, потому что виртуальная файловая система позволяет создать файл в каталоге '''upload''', и потом, когда вы получаете '''std::iostream''' для этого файла, выполняется HTTP-запрос к web-сервису. Когда вы записывает данные в этот поток, ''libferris'' продолжает отправлять ваш контент web-сервису.&lt;br /&gt;
&lt;br /&gt;
Обычно компьютер может выдавать данные значительно быстрее, чем интернет-соединение способно их забрать, поэтому ''libferris'' время от времени должна просить приложение подождать. Принцип здесь тот же, что и при записи на медленный диск, в соответствии с архитектурой '''std::iostreams''' ''C++''. Как только сетевой буфер очистится, отправив порцию данных web-сервису, ''libferris'' разрешит потоку принять еще. Эти игры в кошки-мышки позволяют клиенту ''libferris'' в любой момент времени знать примерный объем данных, отправленный web-сервису. Примерный – потому что, конечно, между потоком и сетью есть небольшой буфер, и у ''libferris'' всегда есть какие-то данные, которая она пытается выгрузить в сеть.&lt;br /&gt;
&lt;br /&gt;
===Обработка видео===&lt;br /&gt;
&lt;br /&gt;
Обработка видео для загрузки на web-сервисы сложнее. Если понять, что такое корректный JPEG-файл, нетрудно, то в случае с видео-роликом приходится принимать во внимание контейнеры для аудио- и видеокодеков. Многие сайты не принимают популярные открытые кодеки, что создает проблему с лицензированием ПО и патентами. Вероятно, будет добавлена поддержка загрузки видео с помощью специальных профилей перекодировки для ''MEncoder'', так что пользователь сможет выбрать или обновить профили без необходимости что-то компилировать.&lt;br /&gt;
&lt;br /&gt;
===Данные на потоке===&lt;br /&gt;
&lt;br /&gt;
Так как данные передаются через поток ввода-вывода ('''iostream'''), в будущем должна появиться возможность скопировать данные с web-камеры прямо на сайт видеохостинга. Конечно, в определенный момент придется нажать '''Ctrl+C''' чтобы остановить загрузку. И тогда ''libferris'' следует знать, что вы сделали это, чтобы корректно закончить передачу данных по HTTP.&lt;br /&gt;
&lt;br /&gt;
В первой части обзора мы говорили о трудностях в создании приложений с открытым исходным кодом, которые получают доступ к web-сервисам, таким как YouTube, Flickr и Google Docs. Теперь мы немного порезвимся с сервисами Google и посмотрим, как обстоят дела здесь. Сервисы Google в ''libferris'' находятся по адресу '''google://'''. В корне этой схемы вы видите '''docs, spreadsheets''' и '''youtube'''. Каталог '''youtube''' – то же самое, что и '''youtube://''' в ''libferris'' – с точки зрения внутренней архитектуры, последнее лишь указывает на первое.&lt;br /&gt;
&lt;br /&gt;
Как легко догадаться, в каталоге '''docs''' хранятся документы Google Docs, а в каталоге '''spreadsheets''' – таблицы Google Spreadsheets. Так как Google Spreadsheets – это тоже Google Docs, та же самая таблица будет доступна в обоих каталогах. Различие заключается в вариантах возможного взаимодействия с каталогами: каталог '''spreadsheets''' рассчитан на чтение и запись таблиц, их листов, ячеек и т. д. Каталог '''docs''' нацелен на полноценное взаимодействие с документом – например, на создание, замену и удаление целой таблицы.&lt;br /&gt;
&lt;br /&gt;
===Портим ячейки===&lt;br /&gt;
&lt;br /&gt;
В прошлой статье мы чуть-чуть коснулись каталога '''google://docs'''. Google Docs API включает поддержку для добавления данных в существующие текстовые файлы вместо их замены. Как и пример из первой статьи, фрагмент кода ниже сохраняет сегодняшнюю дату в файл '''google://docs'''. Затем с помощью флага '''--append''' команды ''ferris-redirect'' новое содержимое добавляется в существующий документ Google. Добавление может пригодиться, если у вас есть скрипт, генерирующий информационные сообщения, и вы хотели бы, чтобы пользователи, у которых есть доступ к Google Docs, смогли эти сообщения прочесть:&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Содержание=[[Изображение:LXF133_72_1.jpg|300px]] Просмотрите фотоальбомы Flickr как файловую систему в файловом менеджере ''ego''. Расширенные атрибуты дадут вам дополнительную информацию.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF133_72_1.jpg|300px]] Чтобы скопировать видео на сайт Vimeo, воспользуйтесь ''gfcp'', ''GTK''-заменой для ''cp'', поставляемой с ''libferris''.|Ширина=300px}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
 $ ftouch google://docs/appender.txt&lt;br /&gt;
 $ date | ferris-redirect --trunc google://docs/appender.txt&lt;br /&gt;
 $ fcat google://docs/appender.txt&lt;br /&gt;
 Fri Aug 21 11:54:25 EST 2009&lt;br /&gt;
 $ date | ferris-redirect --append google://docs/appender.txt&lt;br /&gt;
 $ fcat google://docs/appender.txt&lt;br /&gt;
 Fri Aug 21 11:54:25 EST 2009&lt;br /&gt;
 Fri Aug 21 11:54:53 EST 2009&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если вы создадите несколько каталогов в web-интерфейсе Google Docs, они появятся в виде каталогов и в ''libferris''. По адресу '''google://docs''' можно просматривать их содержимое, загружать данные и обновлять целые документы.&lt;br /&gt;
&lt;br /&gt;
Вы, видимо, любопытствуете, что же еще поддерживает для таблиц ''libferris''. Вспомним, что у файла в ''libferris'' бывают расширенные атрибуты (EA) вида ключ=значение, и эти атрибуты также виртуализируются ''libferris''. Таким образом, атрибуты могут приходить и уходить откуда и куда угодно.&lt;br /&gt;
&lt;br /&gt;
А если разделить таблицу на строки и представить каждую в виде файла со столбцами, представленными расширенными атрибутами? Тогда содержимое отдельной ячейки можно было бы получить командой ''cat'', а для записи в определенную ячейку приспособить перенаправление '''stdin''' — короче говоря, наладить взаимодействие таблиц с командной строкой.&lt;br /&gt;
&lt;br /&gt;
Несколько примеров помогут прояснить функции расширенных атрибутов и ячеек. Пусть вы создали таблицу '''smalltest1''' с рабочим листом '''Sheet1'''. В ''libferris'' URL этого листа содержит префикс '''google://spreadsheets''' и имя таблицы, за которым следует имя рабочего листа, как показано в объявлении переменной '''SPREAD''' ниже.&lt;br /&gt;
&lt;br /&gt;
При открытии '''smalltest1''' (или создании новой таблицы) через web-интерфейс Google строки пронумерованы, причем верхняя строка имеет номер 1, следующая – 2 и т. д. Столбцы отмечены буквами, начиная с A. Все это соответствует стандартному соглашению об обозначениях элементов таблиц.&lt;br /&gt;
&lt;br /&gt;
В ''libferris'' каждая строка становится виртуальным файлом с именем, которому соответствует номер строки, и расширенными атрибутами для связанных с ней ячеек в столбцах A, B, C и т. д. Чтение атрибута b файла 9 даст нам значение ячейки B9 таблицы. В примере ниже Google превращается в самодельный калькулятор, сначала заполняющий две ячейки таблицы, а затем записывающий формулу в третью ячейку. Как и через web-интерфейс, в ячейку можно записать формулу, но значением ячейки будет результат ее применения. Так, запустив ''cat'' для ячейки с формулой, мы увидим результат вычисления:&lt;br /&gt;
&lt;br /&gt;
{{Врезка|left|Заголовок=Скорая помощь|Содержание=Если воспользоваться Google Spreadsheets как калькулятором, множество пользователей сможет обновлять отдельные ячейки при расчетах.|Ширина=200px}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
 $ export SPREAD=google://spreadsheets/smalltest1/Sheet1&lt;br /&gt;
 $ echo 5 | ferris-redirect --ea b $SPREAD/9&lt;br /&gt;
 $ echo 23 | ferris-redirect --ea c $SPREAD/9&lt;br /&gt;
 $ echo -n “=sum(B9,C9)” | ferris-redirect --ea d $SPREAD/9&lt;br /&gt;
 $ fcat -a d $SPREAD/9&lt;br /&gt;
 28&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее, предположим, что в строке 9 аналогичным образом заданы значения, по крайней мере для столбцов B, C и D. Добавив метки и небольшую обертку для ''SQLite'', приведенную ниже, мы можем позабавиться с ''SQL'' и Google Spreadsheets. Обратите внимание, что в обеих командах ''echo'' для предотвращения создания символа перевода строки используется опция '''-n'''. Это важно, так как мы хотим, чтобы в ячейку записалось '''foo''', а не '''foo\n'''. В следующем примере создается сессия ''SQLite'' для ''libferris'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
 $ echo -n foo | ferris-redirect --ea a $SPREAD/9&lt;br /&gt;
 $ echo -n bar | ferris-redirect --ea a $SPREAD/10&lt;br /&gt;
 $ cat run.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 SQLFILE=${1:=test.sql};&lt;br /&gt;
 rm -f /tmp/empty/test.sqlite&lt;br /&gt;
 touch /tmp/empty/test.sqlite&lt;br /&gt;
 sqlite3 -init $SQLFILE /tmp/empty/test.sqlite &amp;gt;/dev/null;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Во всех ''SQL''-файлах, которые работают с Google Spreadsheets, нужно настроить виртуальную таблицу для рабочего листа. Соответствующие ''SQL''-запросы (файл '''$SQLFILE''') приведены ниже. Сначала загружается общая библиотека виртуальной таблицы ''libferris'', а затем создается таблица для представления URL-адреса, доступного через ''libferris''. Третий параметр – упрощенная версия обычного синтаксиса создания таблицы: перечисление всех столбцов и их типов.&lt;br /&gt;
&lt;br /&gt;
Столбец берется из расширенных атрибутов файловой системы ''libferris'', и поскольку каждый столбец таблицы – это расширенный атрибут, легко получить через ''SQLite'' всю таблицу:&lt;br /&gt;
&lt;br /&gt;
 .load libferrissqlitevtable.so&lt;br /&gt;
 create virtual table fs using libferris(&lt;br /&gt;
 ‘google://spreadsheets/smalltest1/Sheet1’,‘’,name text,&lt;br /&gt;
 a text, b int, c int, d int, e text, f text, size int );&lt;br /&gt;
&lt;br /&gt;
===Табличный SQL===&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Заголовок=Скорая помощь|Содержание=Чтобы затвитить или обновить ваш статус в Facebook, достаточно всего-навсего перенаправить данные в файл.&lt;br /&gt;
&lt;br /&gt;
Иногда требуется захватить с камеры и выкинуть кучу изображений, пока устройство правильно настроит яркость.|Ширина=200px}}&lt;br /&gt;
&lt;br /&gt;
Можно проверить, что Google умеет складывать числа и что формула в '''D9''' работает так, как мы ожидали, сложив две ячейки с помощью ''SQL''. Обратите внимание, что выражение с '''where''' выбирает строку по значению ячейки в таблице, ограничивая запрос только строкой 9. Вот какие данные будут выбраны из Google Spreadsheet:&lt;br /&gt;
&lt;br /&gt;
 .headers on&lt;br /&gt;
 select a,b,c,d,b+c as result&lt;br /&gt;
 from fs&lt;br /&gt;
 where a = ‘foo’;&lt;br /&gt;
 a|b|c|d|result&lt;br /&gt;
 foo|21|25|46|46&lt;br /&gt;
&lt;br /&gt;
Конечно, в запросах можно использовать конструкции ''SQL'' и поинтереснее. Посмотрите на набор данных ниже. Группировка по двум столбцам для генерации отчета здесь легко обрабатывается ''SQL'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=sql&amp;gt;&lt;br /&gt;
 select max(b),max(c),avg(d) as mean, sum(d) as total&lt;br /&gt;
 from fs&lt;br /&gt;
 where not (b = ‘’ or c = ‘’)&lt;br /&gt;
 group by b,c;&lt;br /&gt;
 max(b)|max(c)|mean|total&lt;br /&gt;
 LA|barry|77.0|77&lt;br /&gt;
 LA|john|12.0|12&lt;br /&gt;
 LA|peter|54.5|109&lt;br /&gt;
 NY|barry|77.6666666666667|233&lt;br /&gt;
 NY|peter|56.0|56&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В первой строке листа можно также дать столбцам заголовки: например, поместить '''location''' в B1 этой таблицы и пользоваться '''location''' вместо b в качестве имени столбца. Когда вы редактируете данные клиентом ''libferris'' – в ''ferris-redirect'' или файловом менеджере ''ego'' (см. рисунок) – таблица в браузере обновляется автоматически. Правда, поддержка мониторинга ленты обновления от Google в ''libferris'' еще не реализована, и если вы что-то измените в браузере, то, чтобы увидеть эти изменения, придется обновить клиенты ''libferris'' вручную. Обратите внимание, что в файловом менеджере ''ego'' столбцы с именами '''city, person''' и '''sales''' соответствуют столбцам b, c и d. Для доступа можно использовать любое из имен.&lt;br /&gt;
&lt;br /&gt;
В дальнейшем планируется добавить возможность использования другого интерфейса аутентификации в Google, и незачем будет указывать имя файла и пароль в ''libferris''. Также планируется поддержка в Google Docs большего количества типов файлов и обновлений с возможной интеграцией с ''rsync'' и ''git'', так что вы сможете локально хранить резервную копию или журнал с изменениями файловой системы Google Docs.&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Содержание=[[Изображение:LXF133_73_1.jpg|300px]] Текстовый редактор ''Kate'' в KDE работает с документами Google через ''librerris'' и ''Fuse''.|Ширина=300px}}&lt;br /&gt;
&lt;br /&gt;
===Альтернатива ''SQL''===&lt;br /&gt;
&lt;br /&gt;
Если вы не любите ''SQL'', для получения данных из таблицы Google или любой другой файловой системы ''libferris'' пользуйтесь ''XQuery. XQuery'' может быть удобнее в том&lt;br /&gt;
случае, если вы генерируете XML-документ по запросу.&lt;br /&gt;
&lt;br /&gt;
''Libferris'' умеет монтировать журналы ''Apache'' и реляционные базы данных, а ''XQuery'' позволит объединить web-записи первого с пользовательскими данными последних в отдельные KML-файлы для анализа географии ваших посетителей в ''Google Earth''.&lt;br /&gt;
&lt;br /&gt;
===Идем дальше===&lt;br /&gt;
&lt;br /&gt;
Кроме Google Docs, планируется расширить поддержку YouTube, Vimeo и других видеохостингов, включив туда поиск по видео и загрузку через виртуальные файлы – точно так же, как в API Flickr. Таким образом, должна появиться возможность проигрывать видео с этих сайтов прямо в ''MPlayer, Xine'' или ''VLC'', не привлекая браузер.&lt;br /&gt;
&lt;br /&gt;
Основная задача, конечно, охватить побольше сайтов. О некоторых уже известно: это Last.fm и LinkedIn. Также есть планы выделить базовые классы для общей функциональности web-сервиса – постов, списков, комментариев и друзей. В конце концов, на многих из этих сайтов есть система друзей и списки видеороликов и фотографий. Базовые классы смогут позаботиться о функционале, инициируя перечитывания и асинхронные обновления. Это значит, что когда друг добавит комментарий, тот автоматически появится в виртуальной файловой системе.&lt;br /&gt;
&lt;br /&gt;
Сбор друзей всех web-сервисов на ''Akonadi'' может также оказаться перспективным. По файлам виртуальных карточек '''vCard''' может будет легко увидеть общих друзей на разных web-сервисах.&lt;br /&gt;
&lt;br /&gt;
Web-сервисы – последнее добавление к ''libferris'', и они постоянно развиваются, обрастая новыми возможностями и все больше приближаясь к web-сервисам, лежащим в их основе. Помните, что это открытое ПО – увидев в API web-сервиса то, что вы хотели бы видеть в файловой системе, можете добавить это сами.&lt;br /&gt;
&lt;br /&gt;
===Ресурсы===&lt;br /&gt;
&lt;br /&gt;
* Первая часть статьи о совместном использовании ''libferris'' и ''SQLite''. http://ldn.linuxfoundation.org/article/libferris-and-sqlite-a-powerful-combination-part-1&lt;br /&gt;
* Информация по GStreamer и загрузке. http://gstreamer.freedesktop.org&lt;br /&gt;
* Домашняя страница расширяемого хранилища ''Akonadi''. http://pim.kde.org/akonadi&lt;br /&gt;
&lt;br /&gt;
===Строим социальные сети===&lt;br /&gt;
&lt;br /&gt;
Когда сайты социальных сетей начнут поддерживать FOAF+SSL (http://www.w3.org/wiki/Foaf+ssl), вы сможете перетаскивать контакты из одного web-сервиса в каталог с друзьями на другом, обновляя данные на каждом.&lt;/div&gt;</description>
			<pubDate>Wed, 13 Jul 2011 10:36:03 GMT</pubDate>			<dc:creator>Crazy Rebel</dc:creator>			<comments>http://wiki2.linuxformat.ru/index.php/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:LXF133:libferris</comments>		</item>
	</channel>
</rss>