При добавлении каждой папки создаётся её секретный код, Master secret, состоящий из 32 символов. Этот код даёт папке полный доступ для двусторонней синхронизации. Его в любое время можно заменить новым кодом или кодом в системе Base64 длиной более 40 символов. После замены кода для доступа к папке его будет необходимо ввести и на других компьютерах.
Если вам требуется лишь отправлять данные с одного компьютера на другие, а не синхронизировать изменения на всех машинах, следует использовать секретный код «только для чтения». В этом случае только на «главной» машине можно будет изменять данные этой папки, а любые изменения, произведённые на других компьютерах, никак не будут отражаться на «главном».
В целях безопасности можно задействовать не основной секретный код, а одноразовый ключ из 16 символов, который может быть использован только один раз в течение 24 часов после его создания. Такой ключ может предоставлять как полный доступ к сети, так и доступ только для чтения.
В настройках можно задать название компьютера, как оно будет отображаться на других машинах, включить автозагрузку при включении компьютера, изменить порт и переназначить порты, а также ограничить скорость обмена данными.
Доступ к BitTorrent Sync на системах под управлением Linux и на сетевых накопителях NAS на базе ядра Linux осуществляется через веб-интерфейс, функциональность которого повторяет функциональность клиентского приложения.
Расширенные настройки доступны через конфигурационный файл sync.conf. Для этого сначала нужно создать демонстрационный файл с комментариями при помощи команды:
./btsync —config sync.conf
Сохраняем его:
./btsync —dump-sample-config > sync.conf
Отредактировав конфигурационный файл, можно запускать BitTorrent Sync с изменёнными настройками:
./btsync —config sync.conf
* * *
Разумеется, BitTorrent Sync не является заменой облачного хранилища, где всегда хранятся ваши данные и к которым можно получить доступ с любого компьютера. С другой стороны, эта технология позволяет создать личное облако на NAS-сервере, обмен данными с которым осуществляется по протоколу BitTorrent с 256-битным шифрованием.
Кроме того, пользователи могут «расшаривать» для друзей какие-то папки через интернет, например с фильмами или музыкой, причём скорость обмена ограничивается только возможностями сети. Таким образом, можно даже организовывать большие P2P-хранилища с общим ограниченным доступом. Технически же это будет выглядеть просто как обмен зашифрованным трафиком.
Наше знакомство с BitTorrent Sync оказалось более чем удачным: предельно простое в использовании, клиентское приложение позволяет без проблем синхронизировать файлы на разных машинах на максимально доступной скорости. Пожалуй, не хватает только возможности использовать BitTorrent Sync с мобильных устройств — под управлением iOS, Android и Windows 8 Mobile. Мы надеемся, что такая функция в скором времени будет реализована.
Система STEPS: двадцать тысяч строк кода, которые изменят программирование, операционные системы и интернет
У программистов есть заветная мечта: взять и переделать заново всё — операционную систему, языки программирования, библиотеки и приложения. Упразднить ненужное дублирование функций и написать всё красиво и по-новому — словом, сделать всё как надо, а не как получилось в результате многих лет нагромождения разных стилей и технологий. При этом все обычно понимают, что мечтам никогда не сбыться и что никому не под силу заново проделать такой объём работы. Над смельчаками принято посмеиваться, а их попытки — обзывать переизобретением колеса. Но когда за работу берётся человек, который уже однажды изобрёл немалую часть технологий, которые мы ассоциируем с персональными компьютерами, все шутки становятся неуместными.
Алан Кей — живая легенда компьютерной индустрии. В середине шестидесятых он работал с Айвеном Сазерлендом, создавшим первый графический редактор и систему автоматизированного проектирования, а в 1970 году присоединился к исследовательской лаборатории Xerox PARC, где придумал объектно-ориентированное программирование, создав язык Smalltalk, и первый компьютер с оконным графическим интерфейсом. Позднее его работа вдохновит Стива Джобса и команду, сделавшую Macintosh, а прототип Macintosh убедит Билла Гейтса в том, что MS-DOS срочно нуждается в графической оболочке с оконным интерфейсом, известной нам как Windows.
После PARC Кей работал в самых разных исследовательских центрах: Atari, Apple, Disney и HP, а также в Калифорнийском университете в Лос-Анджелесе и Киотском университете. Видимым результатом его исследований стали Squeak — более современная и дружественная версия Smalltalk, а также Etoys — вариант Squeak для детей (на его основе был создан более известный сегодня Scratch). В 2005 году Кей основал исследовательский институт Viewpoints, финансируемый Национальным научным фондом США, а также рядом крупных компаний: Intel, Motorola, HP и Nokia. То, чем Кей и десяток сотрудников Viewpoints заняты сейчас, может ещё перевернуть наш взгляд на программирование.
Изначальное предложение Кея, представленное Национальному научному фонду США, звучало не просто смело, а почти фантастически. Кей пообещал создать среду (мы не будем называть её операционной системой, так как Кей настаивает на том, что это не ОС в привычном понимании), которая позволит функционировать современному компьютеру и будет включать в себя графический пользовательский интерфейс и набор прикладных программ. Главное отличие этой среды от всех уже существующих решений: длина кода этой системы не будет превышать двадцати тысяч строк.
Сказать, что двадцать тысяч строк — это немного, значит не сказать ничего. Если верить «Википедии», то исходные коды Windows NT 3.1 занимали 4-5 миллионов строк кода, ядро Linux 2.6.0 − 5,2 миллиона, а современные ОС с набором стандартных приложений могут содержать сотни миллионов строк кода.
Вот кадр из презентации Кея, показывающий, сколько будет занимать код ОС и основных приложений, если напечатать его в виде книг.
Объём сопоставим с Эмпайр стейт билдинг и равен примерно 17,5 тысячам книг. «Кто из вас прочёл семнадцать тысяч книг? — вопрошает Кей собравшихся на лекции. — А кто из вас прочёл хотя бы одну?» Объёма одной книги, то есть примерно двадцати тысяч строк, по его мнению достаточно для того, чтобы создать систему, напоминающую по функциям те ОС и приложения, с которыми мы сейчас работаем. Просто строить нужно умело.
Современный софт Кей сравнивает с египетскими пирамидами. Их строители ещё ничего толком не знали об архитектуре и сооружали конструкции, которые почти полностью состояли из материала и практически не имели свободного пространства внутри. С изобретением колонн и арок стало возможно возводить куда более изящные и практичные сооружения. Нельзя ли изобрести аналог арок для написания программ?
Сейчас программист при всём желании не способен свободно ориентироваться в миллионах строк кода. Зато если уместить всю систему в объём книги и разделить на логические части по 100-1000 строк, это даст возможность легко понимать логику её строения и вносить изменения. Проблемы вроде багов, которые на протяжении многих лет преследуют крупные проекты, просто уйдут в прошлое.
Главный вопрос: возможно ли такое в принципе? За пять лет работы команда Кея доказала, что ответ на этот вопрос может быть положительным. Систему методов, которые позволят это сделать, авторы называют STEPS. Это рекурсивный акроним, расшифровывающийся как STEPS Toward Expressive Programming Systems — «Шаги к выразительным системам программирования».
Руководствуясь принципами STEPS, в институте Кея создали прототип системы. Он называется Frank, а если полностью — «Франкенштейн». Такое имя выбрано не зря: система составлена из кусочков, каждый из которых ещё может быть заменён или переписан заново.
Вот как выглядит «Франкенштейн» с точки зрения пользователя.
Что может делать пользователь Frank? Всё то же, что мы обычно делаем за компьютером: создаём и редактируем текстовые документы, графику, видео, презентации и электронные таблицы, а также обмениваемся ими через сеть. Вся разница в том, что исследователи попытались полностью избавились от дублирования функций разными программами и максимально сократить исходный код.
Frank — это не операционная система, в которой работают приложения, а скорее, подобие Smalltalk или Squeak — большое приложение, которое можно расширять и дополнять, пока оно не станет делать всё, что нам нужно. Вместо приложений, в которых реализованы собственный интерфейс и функции, здесь присутствуют компоненты, имеющие сложные взаимосвязи.
Во Frank есть единое понятие «документ», в который могут быть включены и на месте изменены любые объекты, будь то изображения, таблицы или созданные пользователем скрипты. Презентация, например, — это документ, включающий в себя сценарий перехода вперёд и назад по страницам (или, если угодно, кадрам), а не файл, для открытия которого требуется специальная программа. Такая программа просто не нужна, потому что интерфейс для работы с изображениями и текстом идентичен тому, что используется для подготовки других документов.
То же и с электронной почтой: письмом во Frank считается любой документ, который был передан по Сети. Список писем — это результат поиска документов, полученных от других пользователей.
Ещё одно ценное качество системы Кея — универсальная отмена. Здесь может быть отменено действительно любое действие, а не как в сегодняшних программах — лишь некоторые, да и то не всегда. Для этого используется механизм «миров»: каждый раз, когда мы что-то меняем, система может запомнить, чем нынешний «мир» отличается от предыдущего, и в случае надобности вернуть всё, как было.
Интереснее всего то, как Кей предлагает переделать веб. Во Frank нет браузера, зато есть поддержка протокола TCP/IP (его код занимает 160 строк, и это, по словам Кея, не предел краткости). Вместо веб-страниц предлагается использовать те же самые документы, добавив в них объект нового типа — гиперссылку.
Поскольку код, содержащийся в документах, по сути, работает в виртуальной машине, это делает их загрузку извне не менее безопасной, чем исполнение JavaScript браузером. Получается, что объекты-страницы просто подгружаются через Сеть по мере необходимости. Кстати, делать такие «сайты» намного проще, чем обычные: можно пользоваться уже имеющимися в системе средствами — теми же самыми, при помощи которых редактируются текстовые документы, презентации и всё остальное.
Внешняя сторона Frank интересна уже хотя бы в качестве примера унифицированной среды, в которой нет ни разделения на приложения, ни традиционной файловой системы. Но настоящая чёрная программисткая магия скрыта внутри.
Сколько занимают разные части STEPS?
Как Frank уместился в двадцать тысяч строк кода? Ответ кроется за двумя терминами: метапрограммирование и предметно-ориентированные языки (DSL). Главная идея заключается в том, чтобы создавать языки под конкретные задачи и, хитроумно комбинируя их, писать элегантные и короткие программы. Эта идея не нова: на ней основан язык Forth, и она используется в написании программ на языке Lisp, которым Кей в своё время вдохновлялся при создании Smalltalk. Более современный пример — фреймворк Ruby on Rails, применяемый в качестве DSL для разработки бэкэндов веб-приложений. Но STEPS — это нечто куда большее, чем один язык, — это набор методов и языков, при помощи которых можно создавать сложные системы, используя минимум кода.
Один из самых интересных компонентов STEPS — это объектно-ориентированный язык OMeta (pdf). Он предназначен для описания синтаксиса других языков. К примеру, на OMeta можно в несколько строк описать синтаксис калькулятора, а потом при помощи наследования расширить его и сделать научный калькулятор. Синтаксис OMeta при этом описан на самом OMeta.
Второй важный язык — это Nile (названный в честь реки Нил). Авторы STEPS называют его «языком исполняемой математики». Nile позволяет компактно описывать математические выражения и сделан таким образом, чтобы максимально облегчить параллельные вычисления. На нём написана графическая подсистема Frank, называемая Gezira. Gezira умещается в несколько сотен строк на Nile и умеет выводить растровую и векторную графику, поддерживает сглаживание и различные фильтры.
Самый низкий уровень во всей этой сложной системе — язык Nothing (переводится с английского как «Ничто»), «высокоуровневый язык с низкоуровневой семантикой». Nothing — это промежуточное звено между всеми языками в STEPS и машинными кодами. На Nothing не предполагается писать вручную, и нужен он лишь для возможности смотреть, что получается на выходе. Nothing, по словам исследователей, вдохновлён BCPL, использовавшимся в шестидесятые годы и вдохновившим авторов Си. На данный момент код на Nothing можно транслировать в Си для дальнейшего перевода в машинные коды или в JavaScript — чтобы система исполнялась в браузере. Предполагается, что в будущем из Nothing можно будет получать машинные коды напрямую.
В качестве промежуточного слоя, на котором написан пользовательский интерфейс, одно время использовался NotSqueak — упрощённый диалект Squeak. Но в последнем отчёте упоминаний о NotSqueak уже нет, зато появился новый объектно-ориентированный язык — Maru. Как и OMeta, он написан сам на себе и может использоваться как для описания высокоуровневого представления, так и для связи с низкоуровневыми функциями. На Maru может быть реализован парсер грамматики, и в 2011 году команда Кея была занята переносом Nile на Maru.
К сожалению, отчёты Кея и его команды (pdf) — это не пособие для программистов-суперменов и не справочник. Оно и понятно — STEPS пока что не готов, и каждый год во Viewpoints ставят разнообразные эксперименты, цель которых — не столько в создании законченной системы, сколько в том, чтобы отточить методы. «Франкенштейн» как цельная система здесь нужен лишь в качестве подопытного тела.
Если посмотреть отчёты Viewpoints за разные годы, то заметно, что здесь снова и снова изобретают языки программирования, делают их всё более самодостаточными (пока что кое-где ещё остаётся код на Си, но от него постепенно избавляются) и ставят смелые эксперименты.
Время от времени команда Кея пробует пробрасывать мостики в реальный мир, создавая, к примеру, виртуальную машину Squeak для Google Native Client или делая метаязык Tamacola на основе Tamarin VM, входящей во Flash. Эти методы могут позволить всей системе не просто работать в браузере, но исполняться быстрее, чем при трансляции в JavaScript.
Скорость, впрочем, не является целью Кея: по его оценке, в нынешнем виде Frank работает примерно на 30 процентов медленнее, чем если бы был написан традиционными методами. Оптимизацией исследователи занимаются лишь тогда, когда это не вредит компактности кода.
Понятно, что Frank не станет конкурентом современных ОС и вряд ли вообще будет доделан до необходимого для этого уровня. Тем не менее те методы, которые разрабатывает Алан Кей, могут повлиять на подход к программированию не меньше, чем в своё время повлиял Smalltalk.
Еnergy harvesting: энергия из ничего
Мы все с интересом обсуждаем одежду со встроенными датчиками и пультами управления, кроссовки с шагомером, GPS и прочую носимую электронику. Однако стоит задаться вопросом: а от чего, собственно, должны питаться все эти полезные гаджеты? От сменных батареек? Тогда вся эта вшитая электроника становится ничем не лучше обычных «умных» коробочек, которые можно просто сунуть в карман. Это как если бы мы вместе с мобильным телефоном носили большой тяжёлый чемодан с аккумуляторами или заправляли автомобиль вязанкой дров.
Нужно более изящное решение, отвечающее реалиям XXI, а не XX века. В идеале такой источник питания должен быть лёгким и миниатюрным, способным принимать любую форму и вид, умеющим заряжаться от любых типов энергии в окружающем пространстве и не требующим регулярной замены.
Идеал пока недостижим, но первые шаги в этом направлении уже сделаны. Поскольку для датчиков и простых микрокомпьютеров не требуются источники большой мощности, с ними можно использовать устройства, способные генерировать энергию буквально из ничего, собирая её по крупицам практически из воздуха — как, например, ветряные генераторы или солнечные батареи.
Эта идея положена в основу концепции Еnergy harvesting — её название пока не имеет общепринятого русского перевода, а по смыслу оно примерно означает «сбор энергетического урожая». Концепция заключается в сборе разнообразной энергии из окружающей среды и преобразовании её в электрическую для питания автономных миниатюрных устройств. Источником энергии могут быть любые естественные природные и физические процессы и явления — от солнечного света до любых механических колебаний.
Создаваемые в рамках концепции Еnergy harvesting устройства должны быть способны как генерировать, так и сохранять электрическую энергию — они смогут заменить тяжёлые и громоздкие аккумуляторные батареи там, где не требуются большая мощность и высокое напряжение. В результате мы получим вшитые микрогаджеты, датчики в одежде и обуви с практически вечным питанием, способные работать автономно до своего физического износа. На международной конференции Printed Electronics Europe 2013, проходившей с 17 по 18 апреля в столице Германии Берлине, в рамках шоу Energy Harvesting & Storage Europe был представлен целый ряд чрезвычайно интересных разработок в области Еnergy harvesting.
Самый простой для преобразования в электричество вид внешних воздействий — это механические колебания и вибрации. Чаще всего для конвертации таких колебаний в электроэнергию применяются пьезоэлектрические материалы. Такие материалы используются, в частности, в называемых микроэлектромеханических системах (MЭМС или MEMS), представляющих собой гибридные устройства на кремниевой подложке, в которых объединены микромеханические и микроэлектронные компоненты. МЭМС-чипы легко распаиваются на печатной плате и без проблем интегрируются в любую электронную схему.
Британская компания Perpetuum показала на выставке Energy Harvesting & Storage Europe свою основную разработку — вибрационный «сборщик энергии» Vibration Energy Harvester (VEH). Это беспроводной датчик, предназначенный для установки на вращающиеся детали, например на подшипники колёс поездов. Кстати, в ходе выставки VEH демонстрировался в вагончике на миниатюрной модели железной дороги.