Большинство топ-менеджеров готовы заменить сотрудников роботами

image

• Семьдесят процентов менеджеров готовы рассмотреть возможность использования робота в своей команде.

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

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

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

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

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

 
image
 

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

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

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

ДОЛЖНЫ ЛИ БЫТЬ У РОБОТОВ ПРАВА?

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

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

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

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

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

Пресс-секретарь Expert Market сказал следующее: "Результаты показывают, что большинство людей вполне нормально относятся к идее работы плечо к плечу с роботами. Многие менеджеры не слишком переживают, что, возможно, придется заменить своих работников роботами, а почти половина опрошенных заявили, что они не будут чувствовать себя виноватыми, если предпочтут робота человеку. Может, для того, чтобы обезопасить себя в будущем, стоит подучиться дизайну или чему-то подобному".

 
В рамках опроса об отношении к роботам и автоматизации высказались 200 топ-менеджеров различных отраслей промышленности.

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

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

Некоторые профессии больше подходят роботам, чем другие – например, роботы могут выполнять обязанности офис-менеджеров, работу в сфере ИТ и финансов, но не справятся с творческими ролями или руководящими должностями. В фильме «Chappie», в котором также снялся Хью Джекман, роботы заняли много рабочих мест, в том числе стали исполнять обязанности полиции.
 

ИСКУССТВЕННЫЙ ИНТЕЛЛЕКТ ТАК ЖЕ ОПАСЕН, КАК И ЯДЕРНОЕ ОРУЖИЕ

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

Профессор Стюарт Рассел, ученый, который руководит ведущими исследованиями в области искусственного интеллекта, опасается, что с быстрым развитием ИИ человечество «на большой скорости мчится к обрыву».

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

Его взгляды совпадают с опасениями других известных людей, в том числе Элона Маска, который недавно говорил об опасности искусственного интеллекта.

Профессор Стивен Хокинг также присоединился к группе ведущих экспертов, которые подписали открытое письмо с предупреждением о необходимости гарантии того, что ИИ будет использован только во благо человечества.

Д-р Стюарт Армстронт из Института будущего человечества, который был основан в Оксфорде,  также предсказал, что вскоре интеллектуальные роботы смогут взять на себя управление целыми странами.

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

Профессор Хокинг сказал: "Развитие искусственного интеллекта может означать конец человеческой расы".

 

 

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

По данным опроса, большинство менеджеров предпочли бы, чтобы роботы выглядели как  машины, а не как люди, но при этом 68% сказали, что им хотелось бы, чтобы применение робототехники освободило для них больше времени.

Руководящие должности признаны неподходящими для использования роботов, тогда как 52 процента опрошенных заявили о своей готовности использовать роботов для выполнения обязанностей офис-менеджеров, 44 процента сказали, что машины могли бы выполнять работу в сфере IT, а 28 процентов отметили, что готовы использовать роботов в области финансов.  

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

image

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

image

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

 

ссылка на оригинал статьи http://geektimes.ru/post/261162/

Перевод книги Ричарда Бартла «Designing Virtual Worlds». Глава 1. Основы

imageНачало тут
Продолжение тут

Ричард А. Бартл (Richard Allan Bartle)
Дипломированный специалист по искусственному интеллекту. Один из создателей самого первого MUDа (1978 год), который дал начало всей индустрии массивно-многопользовательских игр, за бумом которой мы сейчас наблюдаем. В дальнейшем Ричард плотно занялся исследованиями виртуальных миров и их обитателей. В качестве независимого консультанта он участвовал практически в каждом таком проекте за последние 20 лет.

(Кто хочет помочь с переводом фундаментальной книги по разработке игр, пишите в личку или на почту magisterludi2016<собака>yandex.ru)

Основы

(за перевод огромное спасибо Владиславу Задумову)

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

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

  • Внешний вид
  • Жанр
  • Кодовая база
  • Срок жизни
  • База игроков
  • Степень изменяемости
  • Степень неизменности

Давайте рассмотрим их по порядку.

Внешний вид

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

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

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

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

«Умные» клиенты предназначены для использования с определенными видами приложений; в данном случае это текстовые виртуальные миры. Такие клиенты предоставляют дополнительные возможности ввода (такие как макросы или триггеры) и инструменты управления выводом (например, локальное сохранение логов и перенос строк). Хотя эти особенности могли бы быть установлены со стороны сервера, и передаваться в виде результатов «глупым» клиентам, большинство авторов современных серверов не связываются с этим, так как они знают, что сейчас есть такое большое количество[52] хороших клиентов в свободном доступе, что игроки практически гарантированно будут использовать один из них.

[52] http://www.mudconnect.com/resources/Mud_Resources:Mud_Clients.html содержит список ресурсов с клиентами.

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

Как правило, виртуальные миры первого и второго поколения использовали «глупые» клиенты, третьего поколения – «умные», а четвертого поколения – индивидуально настроенные.

Виртуальные миры пятого поколения (графические) также используют индивидуально настроенные клиенты, однако они выводят информацию по-другому. Пакеты, принимаемые клиентом, содержат информацию, которая может быть использована клиентом для того, чтобы отрендерить сцену. Она будет или в 2½D (тесселированная), или в 3D (вид от первого лица), хотя, несомненно, «настоящее» 3D (с использованием какого-либо стереоскопического устройства для придания глубины сцене) на пути к полной ВР совсем не за горами.

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

Жанр

Другая категория, важная и для новичков, и, в гораздо меньшей степени, для дизайнеров, это жанр[53].

[53] Я использую это слово для обозначения как темы/сеттинга, так и категории содержания (обычно выражаемой в допустимости для детей).

Новичок посмотрит на набор виртуальных миров и скажет: «Это средневековое Фэнтези, это Киберпанк — научная фантастика, это Хоррор про вампиров, это про греческую мифологию, это бесполое японское Аниме, это про стилизованных Гангстеров», и так далее.

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

Но случается и так, что жанр имеет важные особенности. Например, почему существует так мало виртуальных миров про Дикий Запад? Потому что очень трудно обосновать, по какой причине персонаж Васи Новенького не может зайти в магазин, купить револьвер и всадить весь барабан в спину персонажа, которого Петя отыгрывает уже лет пять. Не зря же револьверы называют «уравнителями»[54]!

[54] Также есть проблема (подмеченная Дамионом Шубертом), что враги не становятся «больше». Кроме проблем как в реальной жизни, которые будут появляться из-за убийства виртуальных индейцев и мексиканцев, что будет, когда персонаж наберет опыта и продвинется по уровню? Он будет убивать «больших» индейцев и мексиканцев?

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

  • Детективы не очень хорошо работают как жанр, потому, что игроки не захотят раскрывать подсказки друг другу. Это значит, что игра как бы противодействует их общению, в то время как большинство дизайнеров наоборот предпочтут, чтобы они общались.
  • Однотипные комедии как жанр. Игрок посмеется, когда что-то смешное происходит в первый раз, но к десятому разу похожие шутки уже надоедают.
  • Романы не работают в виртуальных мирах. А вот секс работает. Если даже начинать с первого, все очень быстро сводится к последнему.
  • Герои- или героини-одиночки не очень хорошо переносятся в виртуальные миры. Глупо, когда 5000 человек бегают, отыгрывая Индиану Джонса, Лару Крофт, Джеймса Бонда или Доктора Кто. В реальном мире-то места для них бы не хватило, не говоря уже о виртуальном.

Эти проблемы могут быть очевидны для вас, но есть и те, кто их не видит[55]. И даже если это и не так, почему какой-либо бизнесмен захочет спонсировать разработку непроверенного (в рамках возможности создания виртуального мира) жанра? Не более ли вероятно, что он предпочтет выбрать тот жанр, который уже известно, что можно создать?

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

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

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

За:

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

Против:

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

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

Однако, как бы это ни было странно, лицензии могут также облегчить работу дизайнера — по крайней мере там, где это касается виртуальных миров[56]. Гарантированный хит, такой как Star Wars Galaxies или The Sims Online могут рисковать так, как не могут нелицензированные игры, просто потому, что если они накосячат, это не убьет игру. Инновация с 75% шансом на успех может быть легко опробована в лицензированном графическом виртуальном мире, тогда как в нелицензированном её не будут трогать, основываясь на том, что «Шанс 1 к 4, что это продует 15 миллионов долларов вложений? Ты с ума сошел?».

[56] Что касается обычных компьютерных игр, лицензия часто является большим знаком «Осторожно: Вторичный продукт!»

У компетентной команды дизайнеров мир с достаточно большой лицензией не может провалиться, кроме как если они задумали что он провалится (по крайней мере на этот момент).

План перевода

Acknowledgments (готово)
About the Author (готово)
About the Technical Reviewers (готово)
Preface (готово)
Introduction (готово)
Who Should Read This Book? (готово)
Overview (готово)

Chapter 1. Introduction to Virtual Worlds
Some Definitions (готово)
What They Are and Whence They Came (50% готово)
The Past Affects the Future
The Basics (30% готово)
Influences on Virtual Worlds
The Designer

Chapter 2. How to Make Virtual Worlds
Development
On Architecture
Theory and Practice

Chapter 3. Players
Who Are These People and What Do They Want?
Player Types
Other Categorizations
The Celebration of Identity
Anonymity
Role-Playing
Masquerading
Community
Influence Through Design

Chapter 4. World Design
Scope
Major Decisions
Geography
Population
Physics
Reset Strategy

Chapter 5. Life in the Virtual World
Advancement
Character Generation
The Virtual Body
Groups
Combat
Crafting
The Elder Game
The Whole Picture

Chapter 6. It’s Not a Game, It’s a…
Points of View
Making Sense of Virtual Worlds
Virtual Worlds as Subfields
Virtual Worlds as Tools
Virtual Worlds as…Virtual Worlds
Conclusion

Chapter 7. Towards a Critical Aesthetic
A Theory of Virtual Worlds
The Story of Story
The Critical Aesthetic in Use

Chapter 8. Coda: Ethical Considerations
Censorship
Players as People
Groups of Players as Groups of People
Yourself

Краткое описание глав на русском

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

В целом, из этой книги вы узнаете:

Что такое виртуальные миры и как они разрабатываются
Почему люди в них играют и почему перестают играть
Как они дизайнятся и как на самом деле их надо дизайнить
Откуда они пришли и что их ожидает в будущем
Какие существуют применимые теории
Что эти миры — искусство
Designing Virtual Worlds — монументальный труд наверное самого известного человека в индустрии онлайновых игр. Это настоящая научная работа, рассматривающая в деталях все основы и все аспекты разработки, производства и поддержки, геймдизайна онлайновых проектов, психологии и социологии сообществ игроков, обязательно формирующихся вокруг MMO-игр, культурном и социальном влиянии реального мира на виртуальные и наоборот.

1. Introduction to Virtual Worlds

История виртуальных миров от истоков. Как развивалось целое поколение текстовых миров, что было характерно для бесплатных и коммерческих проектов. Как эволюционировали сообщества игроков и как зарождались основы управления онлайновыми сообществами. Почему графические ММО мгновенно вытеснили текстовые, и почему все так недооценили этот переход в лице Ultima Online. Какие культурные и поп-культурные явления повлияли на развитие онлайна (и как Sierra закрыла Lord of the Rings Online, и кусала локти после выхода фильма). Почему с самого начала было понятно, что виртуальные миры — это сервис, это управление ожиданиями, и это предсказание последствий.

2. How to Make Virtual Worlds

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

3. Players

Почему люди живут в виртуальных мирах, что их привлекает и что их удерживает. В этой главе Ричард подробно излагает свою теорию Бартловских типов мотивации в новейшей, трехмерной модификации. Эти 8 типов плюс теория последовательностей (main/secondary sequence) позволяют описать развитие практически любого персонажа со временем. Второй важный момент — их влияние на сообщество в целом, насколько важны разные типы в разных онлайновых сообществах. Рассмотрены методы, которыми геймдизайнер может напрямую влиять на создание и эволюцию гильдий и объединений игроков, явные и неявные, через социологию, экономику мира, или же напрямую через законы.

4. World Design

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

5. Life in the Virtual World

В чем же суть жизни в виртуальном мире? В развитии, как аватара, так и самого игрока в реальном мире. Игроки получают только неосязаемые изменения, персонажи могут получать еще и осязаемые (насколько это применимо к записям в базе данных) изменения. Уровни, скилы, капы — все это хорошо знакомо жителям ММО-миров. В чем заключается социальное взаимодействие и социальная жизнь в онлайне, какие признаки характерны для онлайновых объединений, и какими их может сделать геймдизайнер. Нельзя не разобрать подробно боевые системы, как PvE, так и PvP, поскольку подавляющее большинство миров основано на боевке. И целая глава посвящена необратимой смерти (permanent death), как одной из страшилок среди онлайновых разработчиков.

Применим ли мономиф Кэмпбелла в онлайновых мирах? Бартл считает что да, несомненно, и приводит подробное объяснение, как связать классическое изложение «пути героя» с теорией последовательностей развития.

6. It’s not a Game, It’s a…

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

7. Towards a Critical Aesthetic

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

8. Ethical Considerations

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

Статья Бартла «Черви, трефы, бубны, пики: игроки виртуальных миров»

ссылка на оригинал статьи http://habrahabr.ru/post/265813/

Новыми партнерами Иннополиса стали Acronis и ИТ-парк Казани

Молодой город Иннополис продолжает привлекать партнеров. «Мы ставим перед собой задачу, чтобы Иннополис стал одним из драйверов развития индустрии высоких технологий и IТ в России», говорил мэр города Егор Иванов в интервью. Город должен стать эффективной площадкой взаимодействия между наукой, образованием и бизнесом.

Российский разработчик облачных сервисов Acronis откроет центр исследований и разработок облачных систем для хранения данных на территории Иннополиса. Компания заключила двустороннее соглашение с АО «ОЭЗ «Иннополис».

Соглашение позволит Acronis сделать новый шаг в работе над системой с гео-распределенным хранением, оптимизированным мобильным доступом и защитой данных. Работать над системой компания начала еще до переговоров о сотрудничестве.

28 августа появилось подразделение Acronis в Казанском ИТ-парке.

За первое полугодие 2015 года совокупный рублевый доход компании от продаж по всем направлениям вырос на 51% по сравнению с тем же периодом 2014 года, согласно данным компании. Максимальный рост показали продажи облачных продуктов и решений по виртуализации. Выручка Acronis от продажи облачных продуктов увеличилась на 573%, а доход от решений по виртуализации – на 337%. Максимальный объем российских продаж (18%) приходится на телекоммуникационную отрасль, передает Firrma.

ИТ-парк запустил в университете «Иннополис» бизнес-инкубатор и собственные образовательные программы. Студенты смогут обучиться технологиям развития стартапов. Они получат от ИТ-парка инфраструктурную поддержку. Обучение будет построено как цикл практических семинаров для введения в методологию и работу с менторами. Кроме того, студенты смогут получить индивидуальные рекомендации от экспертов ИТ-отрасли, сообщает Firrma.

В Казани бизнес-инкубатор ИТ-парка существует с 2011 года. Резидентами бизнес-инкубатора являются 60 проектов — 27 в Казани и 33 в Набережных Челнах. Общая сумма привлеченных стартапами инвестиций за четыре года превысила 500 миллионов рублей, по данным компании.

ссылка на оригинал статьи http://megamozg.ru/post/18984/

Первые версии Google, Facebook, YouTube и других IT-монстров (и чему они могут научить тебя в плане развития собственного бизнеса)

«Лучшее, что мы знаем и любим, начиналось с малого», – Джоэл Гаскойн (Joel Gascoigne).

Генеральный директор компании Buffer, Джоэл Гаскойн не так давно написал пост о том, как важно начинать с малого новые проекты. Он замечательно подметил, что, глядя на завершенный продукт, который является результатом чужого упорного труда, можно забыть о том, как много времени понадобилось его создателем для того, чтобы оказаться в данной точке:

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

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

«Даже не пробуйте построить стартапы. Это преждевременные намерения. Для начала постройте то, что кажется интересным для вас», – Пол Грэм (Paul Graham)

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

Итак, давайте проследим за тем, как из скромных проектов эти компании эволюционировали в могучих исполинов IT-бизнеса:

Facebook – «Работайте на долгосрочную перспективу»

«Я здесь для того, чтобы построить что-то в долгосрочной перспективе. Все остальное – лишь забава», – Марк Цукерберг

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

«Я знаю, что это может прозвучать сентиментально, но мне бы хотелось улучшить жизни людей, особенно в социальном аспекте… А сделать мир более открытым – дело не одного дня. На это понадобится 10-15 лет».

2004

Сегодня Facebook стал больше и гораздо сложнее, чем он был в самом начале, но Цукерберг остается верным своим идеям:

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

2013

Google – «Сфокусируйся на одной цели»

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

1998

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

«Если говорить о Google, то мы стараемся удовлетворять потребности наших пользователей как можно быстрее», – Ларри Пейдж.

2014

Tumblr – «Первым делом создавайте для себя»

Основатель Tumblr Дэвид Карп (David Karp) создал сервис для того, чтобы удовлетворить собственную потребность. Ведение блогов становилось все более популярным, но главное внимание в нем уделялось написанию текстов – том, чем не каждый хотел бы заниматься, как было верно подмечено Дэвидом.

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

2007


Сегодня Карп связывает успех Tumblr не только с идеей использовать «больше фишек» (в том числе фото и GIF), но и с тем, что команда сосредоточена на создании чего-то, что любит и использует:

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

2014

YouTube – «Не считайте, что все знаете»

Команда YouTube стремится к тестированию своих разработок и созданию продуктов на основе того, как они привлекают людей на основе предыдущего опыта:

«У нас было множество наших собственных идей о том, как должен развиваться сервис. Если говорить о PayPal и eBay, то нам казалось, что YouTube мог бы стать замечательным средством добавления видео к товарам на аукционе, но мы обнаружили, что никто не использует наш продукт таким образом, поэтому и не стали добавлять соответствующие функции», – Чад Херли (Chad Hurley).

2005

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

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

2014

Yahoo! – «Будьте готовы к росту»

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

«Мы назвали каталог «Проводник Джерри по Всемирной Паутине» (Jerry’s Guide to the World Wide Web). Мы и глазом не успели моргнуть, как люди со всего мира стали пользоваться созданной нами базой данных», – Джерри Янг (Jerry Yang).

1996

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

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

2014

Amazon – «Поставьте своих клиентов превыше всего»

«Все наши инновации начинаются с клиентов и разрабатываются исходя из их потребностей. Это становится нашим стандартом того, как мы изобретаем что-то», – Джефф Безос (Jeff Bezos).

Создатель Amazon Джефф Безос утверждает, что ориентация на клиента с самого начала была и остается наилучшим преимуществом Amazon перед конкурентами:

«У нас было три основные идеи по развитию Amazon, которым мы остаемся верны вот уже 18 лет, и они являются причиной нашего успеха: Начинайте с клиентов. Создавайте. Запаситесь терпением».

1999

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

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

2014

Примеров того, как крупные нынче компании начинали с малого, достаточно много. В своей статье Джоэл Гаскойн привел в качестве примера книгу Дейла Карнеги (Dale Carnegie) под названием «Как завести друзей и стать влиятельным» (How to Win Friends and Influence People), которая начиналась с короткого разговора и записи на листке бумаги.

Еще одним примером, который мне очень нравится, является стартап Sunrise, который появился в форме ежедневной рассылки по электронной почте, а теперь стал полноценным календарем для iPhone.

ссылка на оригинал статьи http://megamozg.ru/post/18982/

О бедной XWiki замолвите слово

Пролог.

"Ежели Вы вежливы,
То говорите: "Здрасти".
А ежли Вам ответят: "Нет",
Сдерживайте страсти!" (с)

Однажды… когда в очередной раз, выполняя рутинную работу, Ты будешь, теряя время, вспоминать: в каком из вариантов проекта и по какой причине были внесены изменения в расчеты, оформление или текст… о Пользователь — знай, что для тебя настало время борьбы со Страстями за Структурирование! Структурирование, или стратегия организации разрозненной информации, упирается в возможности и способности конкретного человека, продуктивность которого всецело зависит от тех инструментов которыми он пользуется для этих целей, будь то блокнот или АСУ.

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

Добро пожаловать под Cut (осторожно — трафик, картинки)

Экспозиция

О Вики-движке XWiki в русскоязычном сегменте Интернета почти ничего нет, кроме общей информации и парочки руководств, что на мой взгляд категорически неверно, ибо это замечательный инструмент и помощник, со своими плюсами и минусами, конечно. XWiki — это Вики-движок второго поколения, который характеризуются возможностью структуризации информации и программного доступа к базе вики. Написан на языке Java, лицензия распространения LGPL, функциональность включает в себя блог, инструменты API, комментарии, аутентификацию по LDAP, экспорт страниц в PDF. Используется многими компаниями по всему миру. 25 языков интерфейса, включая русский. Так же более подробно желающие могут сравнить на wikimatrix с наиболее распространенными в Рунете Вики-движками: DokuWiki и MediaWiki.

Завязка

Скачать последнюю, на момент написания статьи, версию XWiki 7.1.2 можно по следующей ссылке: http://enterprise.xwiki.org/xwiki/bin/view/Main/Download

Варианты установки поддерживают: Windows, Debian, веб-контейнер (веб-сервер) — *.war, мультисистемный формат — *.jar и портативную версию вики на базе связки Jetty+HSQLDB, которая, ИМХО, наиболее удобна для настройки/эксплуатации Пользователем как в Windows, так и в Linux. О ней и пойдет речь.

Для того чтобы установить Xwiki, необходимо чтобы в системе была установлена Java, а так же распаковать файлы из архива ZIP в корень диска (также рекомендуется переименовать папку до более короткого пути, например так: "D:\xwiki-7.1.2"). Запуск осуществляется файлом start_xwiki.bat, в котором уже прописаны все необходимые настройки.

01. окно консоли

Теперь нам необходимо открыть окно web-браузера (окно консоли при этом закрывать категорически не рекомендуется), и ввести указанный URL из консоли, в нашем случае это: panther.itme.info:8080/xwiki/bin/view/Main/

Здесь так же стоит добавить, что порт по умолчанию, с которого стартует XWiki — 8080, если по тем или иным причинам он у вас занят, то его можно изменить, отредактировав через Блокнот start_xwiki.bat.

После загрузки в браузере откроется следующее окно:

02. Первый запуск. Общее окно

Из интересного здесь ссылка на гайд на английском — Documentation, но нас будет интересовать совершенно другое, а именно кликаем в правом верхнем углу на Log-in и вводим для входа в админку:

Login:        Admin
Password: admin

Здесь стоит отметить, что в этом месте регистр имеет значение!

03. Редактирование гаджетов

Здесь хочу остановиться на следующем:
1. Боковые панели приобрела дополнительный функционал, который настраивается Пользователем.
2. Функционал в XWiki позволяет на страницах редактировать не только текст, с помощью обычного или WYSIWYG редактора, выводя его в колонки с помощью редактирования Inline form, но и вставлять гаджеты на страницу. Под гаджетом в XWiki понимается выводимый в некоторой области Макрос, т.е. вызов одной или последовательности команд, в частности это может быть ссылка на другую страницу или даже ленту блога, облако тэгов, формы для отправки сообщений и т.д. и т.п.

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

Развитие

Здесь нужно немного отвлечься и рассказать об организационной структуре XWiki, а именно о жизненном цикле вики-страниц. Здесь есть одна тонкость, а именно: Пользователь может создавать Page и Space, и если с Page‘ами все более или менее понятно, то при создании Space создается Заголовок области, внутри которого будет создано автоматом Page с именем WebHome, но при этом выводится будет всюду Заголовок области, а адресация будет на WebHome, что может создать некоторые трудности при ссылке на страницу. При этом нет ограничений по уровню вложения, которые можно делать как к Space, так и к Page.

Макросы.

Для начала необходимо выбрать страницу для редактирования и войти в редактор.

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


и заполнить необходимые поля:

Но это все была лирика, давайте перейдем к практике и начнем мы с настройки интерфейса. Для этого необходимо кликнуть на левой панели на пиктограмму Panels и в открывшейся странице запустить Panel Wizard. Перед нами предстанет интерфейс настроек администратора, открытый во вкладке Panel Wizard. альтернативный и основной способ перейти к настройкам XWiki — это клик по стрелочке в верхнем выпадающем списке рядом с Home и выбор пункта Administer Wiki.

04. настройка панелей

Вкладка на странице настроек панели Page Layout позволяет настроить расположение, число и ширину колонок нашей вики. Соседствующая рядом вкладка Panel List включает в себя приложения (макросы), которое может быть расположено на наших полях, при этом они включают в себя окошко предпросмотра, а так же управляющие элементы включения/исключения и редактирования содержимого и функций. Предпросмотр для соответствующих приложений, находящихся в виде кнопок и функционала на полях, выключен. Для того что бы настроить функционал приложения — необходимо кликнуть на Edit, что бы удалить макрос — кликнуть на Delete, что бы убрать/поместить на панель приложение/функционал — перетащить используя метод Drag and Drop.

Теперь мы сделаем правую панель навигационной, для этого убираем с правой панели Quick Links и My Recent Modifications и добавляем Tag Cloud, Navigation и Create Page, кликаем на Save the new Layout при этом заходим в правку Navigation и вставляем следующий код, который сделает наш серфинг более удобным:

код для Content

{{velocity}} #panelheader($services.localization.render('xe.panels.navigation')) ## Escape special characters in macro parameter values. #set ($openToDoc = $doc.documentReference.toString().replaceAll('([~"])', '~$1')) {{documentTree showSpaces="false" showWikis="true" showTranslations="false" showAttachments="true" showChildDocuments="true" compact="true" openTo="document:$openToDoc" /}} #panelfooter() {{/velocity}} 

Что нам это дает? Это дает отображение древовидную структуру для навигации между вложениями, Pages и Spaces, без вывода дополнительной отвлекающей информации. Теперь настало самое внести вдохнуть краски в наш новый сайт и уйти от плоского интерфейса. Для этого выбираем в меню LOOK & FEEL пункт Presentation. Здесь мы меняем Icon Theme на Silk и Color Theme на Garden.

Вуаля.

05. внешний вид

Теперь пора подумать и о медиа инструментах, а именно — какой же блог без галереи и графики? К сожалению встроенной галереи XWiki не имеет, а потому придется потрудиться что бы установить и настроить дополнение (Extensions), для этого заходим в меню EXTENSION MANAGER пункт Add Extensions. Здесь можно из веб репозитория установить необходимые дополнения, в данном случае нас будет интересовать плагин Lightbox Macro, с помощью которого удобно организовывать слайд шоу, а так же объединять по группам картинки. Для установки вводим в строку поиска слово lightbox и в полученном результате поиска кликаем install.

06. установка макроса

Теперь переходим на главную страницу нашей XWiki и здесь в панели Navigation мы обнаружим 2 новых Space Lightbox и LightboxMacro. Значит наступило самое время применить макрос в дело, для этого создаем тестовый Space под именем Test page и во вкладке Attachments загружаем картинки для тестирования галереи, в нашем случае это будут фотографии со дня празднования 9го мая 2014 года снятые на ничем не примечательный китайфон на Андроиде Jiayu G3.

Код для галереи

{{velocity}} #set($myArray=$doc.AttachmentList) #set($myArray=$sorttool.sort($myArray, 'filename')) #foreach ($item in $myArray)#if($item.isImage()){{lightbox image=$item.filename title="Hello" width="20%" group="d1" height="20%"/}}#end#end {{/velocity}} 

Текст кода интерпретируется следующим образом: в массив $myArray закладывается список вложений на странице, затем производится сортировка по имени (для тех случаев если загруженные файлы с камеры были загружены в разнобой, но в то же время хранят в имени файла дату и время съемки, или хотя бы нумерации очередности снимков). После чего для каждого вложения, если оно есть изображение, выводится миниатюра высотой 20% от оригинала. Здесь так же нужно сказать, что параметры макроса включают в себя следующие пункты:

Param Description
image(required) An url or the attached image file. For example, "cat.jpg" or "xwiki:Space.Page@cat.jpg" or "www.google.com/logos/wateronmoon09-hp.gif"
title A short description
width The width of the image.
height The height of the image.
group A string that identify it as a member of a group. A group of images can be viewed as a series of slides.

07. Превью галереи

Чем удобен этот макрос? Тем, что автоматизирует процесс вывода вложений вне зависимости от того сколько, каких изображений и под каким именем были загружены. Так же можно кликнуть на любую из миниатюр и во всплывающем окне будет выведено понравившееся фото, что так же является несомненным плюсом. Но ложечкой дегтя в данном случае будет тот факт, что во всплывающем окне изображение будет открыто в оригинальном размере, что не всегда удобно, особенно, если это разрешение превышает рабочее разрешение экрана монитора. В таком случае делаем следующее:
1. Переходим по ссылке на страницу макроса Lightbox;
2. Кликаем на стрелочке меню Edit и в раскрывшемся списке выпадающего меню выбираем Objects;
3. В новом окне переходим к коду развернув списки Objects of type XWiki.JavaScriptExtension (1) и Objects of type XWiki.StyleSheetExtension (1);
4. Теперь в код JS вносим следующие изменения:

изменения в код JS

+ resizeSpeed: 10, // controls the speed of the image resizing animations (1=slowest and 10=fastest)

+ var maxheight = 640;
+ if(imgPreloader.height > maxheight)
+ {
+ var scale = imgPreloader.height/maxheight
+ imgPreloader.height = maxheight;
+ imgPreloader.width = imgPreloader.width/scale;
+ }
Код целиком с учетом исправлений

 //---------------------------------------------------------------------------- // // Lightbox v2.04 // by Lokesh Dhakar - http://www.lokeshdhakar.com // // Licensed under the Creative Commons Attribution 2.5 License - http://creativecommons.org/licenses/by/2.5/ //  - Free for use in both personal and commercial projects // - Attribution requires leaving author name, author link, and the license info intact. // // Cleaned up using jslint. //---------------------------------------------------------------------------------- /*global LightboxOptions, Lightbox, Builder, Class, Prototype, $, $$, $w , Effect*/ LightboxOptions = Object.extend({ fileLoadingImage:        '$doc.getAttachmentURL("loading.gif")', fileBottomNavCloseImage: '$doc.getAttachmentURL("closelabel.gif")', overlayOpacity: 0.8,   // controls transparency of shadow overlay animate: true,         // toggles resizing animations resizeSpeed: 10,        // controls the speed of the image resizing animations (1=slowest and 10=fastest) borderSize: 10,         //if you adjust the padding in the CSS, you will need to update this variable // When grouping images this is used to write: Image # of #. // Change it for non-english localization labelImage: "Image", labelOf: "of" }, window.LightboxOptions || {}); // ----------------------------------------------------------------------------------- var Lightbox = Class.create(); Lightbox.prototype = { imageArray: [], activeImage: undefined, // initialize() // Constructor runs on completion of the DOM loading. Calls updateImageList and then // the function inserts html at the bottom of the page which is used to display the shadow // overlay and the image container. // initialize: function () { this.updateImageList(); this.keyboardAction = this.keyboardAction.bindAsEventListener(this); if (LightboxOptions.resizeSpeed > 10) { LightboxOptions.resizeSpeed = 10; } if (LightboxOptions.resizeSpeed < 1)  { LightboxOptions.resizeSpeed = 1; } this.resizeDuration = LightboxOptions.animate ? ((11 - LightboxOptions.resizeSpeed) * 0.15) : 0; this.overlayDuration = LightboxOptions.animate ? 0.2 : 0;  // shadow fade in/out duration // When Lightbox starts it will resize itself from 250 by 250 to the current image dimension. // If animations are turned off, it will be hidden as to prevent a flicker of a // white 250 by 250 box. var size = (LightboxOptions.animate ? 250 : 1) + 'px'; // Code inserts html at the bottom of the page that looks similar to this: // //  <div id="overlay"></div> //  <div id="lightbox"> //      <div id="outerImageContainer"> //          <div id="imageContainer"> //              <img id="lightboxImage"> //              <div style="" id="hoverNav"> //                  <a href="#" id="prevLink"></a> //                  <a href="#" id="nextLink"></a> //              </div> //              <div id="loading"> //                  <a href="#" id="loadingLink"> //                      <img src="images/loading.gif"> //                  </a> //              </div> //          </div> //      </div> //      <div id="imageDataContainer"> //          <div id="imageData"> //              <div id="imageDetails"> //                  <span id="caption"></span> //                  <span id="numberDisplay"></span> //              </div> //              <div id="bottomNav"> //                  <a href="#" id="bottomNavClose"> //                      <img src="images/close.gif"> //                  </a> //              </div> //          </div> //      </div> //  </div> var objBody = $$('body')[0]; objBody.appendChild(Builder.node('div', {id: 'overlay'})); objBody.appendChild(Builder.node('div', {id: 'lightbox'}, [   Builder.node('div', {id: 'outerImageContainer'},       Builder.node('div', {id: 'imageContainer'}, [           Builder.node('img', {id: 'lightboxImage'}),           Builder.node('div', {id: 'hoverNav'}, [               Builder.node('a', {id: 'prevLink', href: '#' }),               Builder.node('a', {id: 'nextLink', href: '#' })           ]),           Builder.node('div', {id: 'loading'},               Builder.node('a', {id: 'loadingLink', href: '#' },                   Builder.node('img', {src: LightboxOptions.fileLoadingImage})               )           )       ])   ),   Builder.node('div', {id: 'imageDataContainer'},       Builder.node('div', {id: 'imageData'}, [           Builder.node('div', {id: 'imageDetails'}, [               Builder.node('span', {id: 'caption'}),               Builder.node('span', {id: 'numberDisplay'})           ]),           Builder.node('div', {id: 'bottomNav'},               Builder.node('a', {id: 'bottomNavClose', href: '#' },                   Builder.node('img', { src: LightboxOptions.fileBottomNavCloseImage })               )           )       ])   ) ])); $('overlay').hide().observe('click', (function () { this.end(); }).bind(this)); $('lightbox').hide().observe('click', (function (event) { if (event.element().id == 'lightbox') { this.end(); } }).bind(this)); $('outerImageContainer').setStyle({ width: size, height: size }); $('prevLink').observe('click', (function (event) { event.stop(); this.changeImage(this.activeImage - 1); }).bindAsEventListener(this)); $('nextLink').observe('click', (function (event) { event.stop(); this.changeImage(this.activeImage + 1); }).bindAsEventListener(this)); $('loadingLink').observe('click', (function (event) { event.stop(); this.end(); }).bind(this)); $('bottomNavClose').observe('click', (function (event) { event.stop(); this.end(); }).bind(this)); var th = this; (function () {   var ids =       'overlay lightbox outerImageContainer imageContainer lightboxImage hoverNav prevLink nextLink loading loadingLink ' +       'imageDataContainer imageData imageDetails caption numberDisplay bottomNav bottomNavClose';   $w(ids).each(function (id) { th[id] = $(id); }); }).defer(); }, // // updateImageList() // Loops through anchor tags looking for 'lightbox' references and applies onclick // events to appropriate links. You can rerun after dynamically adding images w/ajax. // updateImageList: function () { this.updateImageList = Prototype.emptyFunction; document.observe('click', (function (event) {   var target = event.findElement('a[rel^=lightbox]') || event.findElement('area[rel^=lightbox]');   if (target) {       event.stop();       this.start(target);   } }).bind(this)); }, // //  start() //  Display overlay and lightbox. If image is part of a set, add siblings to imageArray. // start: function (imageLink) { $$('select', 'object', 'embed').each(function (node) { node.style.visibility = 'hidden'; }); // stretch overlay to fill page and fade in var arrayPageSize = this.getPageSize(); $('overlay').setStyle({ width: arrayPageSize[0] + 'px', height: arrayPageSize[1] + 'px' }); var effect = new Effect.Appear(this.overlay, { duration: this.overlayDuration, from: 0.0, to: LightboxOptions.overlayOpacity }); this.imageArray = []; var imageNum = 0; if ((imageLink.rel == 'lightbox')) {   // if image is NOT part of a set, add single image to imageArray   this.imageArray.push([imageLink.href, imageLink.title]); } else {   // if image is part of a set..   this.imageArray =       $$(imageLink.tagName + '[href][rel="' + imageLink.rel + '"]').       collect(function (anchor) { return [anchor.href, anchor.title]; }).       uniq();   while (this.imageArray[imageNum][0] != imageLink.href) { imageNum++; } } // calculate top and left offset for the lightbox var arrayPageScroll = document.viewport.getScrollOffsets(); var lightboxTop = arrayPageScroll[1] + (document.viewport.getHeight() / 10); var lightboxLeft = arrayPageScroll[0]; this.lightbox.setStyle({ top: lightboxTop + 'px', left: lightboxLeft + 'px' }).show(); this.changeImage(imageNum); }, // //  changeImage() //  Hide most elements and preload image in preparation for resizing image container. // changeImage: function (imageNum) { this.activeImage = imageNum; // update global var // hide elements during transition if (LightboxOptions.animate) { this.loading.show(); } this.lightboxImage.hide(); this.hoverNav.hide(); this.prevLink.hide(); this.nextLink.hide(); // HACK: Opera9 does not currently support scriptaculous opacity and appear fx this.imageDataContainer.setStyle({opacity: 0.0001}); this.numberDisplay.hide(); var imgPreloader = new Image(); // once image is preloaded, resize image container imgPreloader.onload = (function () {   var maxheight = 640;   if(imgPreloader.height > maxheight)     {     var scale = imgPreloader.height/maxheight     imgPreloader.height = maxheight;     imgPreloader.width = imgPreloader.width/scale;      }           this.lightboxImage.src = this.imageArray[this.activeImage][0];   this.resizeImageContainer(imgPreloader.width, imgPreloader.height); }).bind(this); imgPreloader.src = this.imageArray[this.activeImage][0]; }, // //  resizeImageContainer() // resizeImageContainer: function (imgWidth, imgHeight) { // get current width and height var widthCurrent  = this.outerImageContainer.getWidth(); var heightCurrent = this.outerImageContainer.getHeight(); // get new width and height var widthNew  = (imgWidth  + LightboxOptions.borderSize * 2); var heightNew = (imgHeight + LightboxOptions.borderSize * 2); // scalars based on change from old to new var xScale = (widthNew  / widthCurrent)  * 100; var yScale = (heightNew / heightCurrent) * 100; // calculate size difference between new and old image, and resize if necessary var wDiff = widthCurrent - widthNew; var hDiff = heightCurrent - heightNew; if (hDiff != 0) { var scaleXEffect = new Effect.Scale(this.outerImageContainer, yScale, {scaleX: false, duration: this.resizeDuration, queue: 'front'}); } if (wDiff != 0) { var scaleYEffect = new Effect.Scale(this.outerImageContainer, xScale, {scaleY: false, duration: this.resizeDuration, delay: this.resizeDuration}); } // if new and old image are same size and no scaling transition is necessary, // do a quick pause to prevent image flicker. var timeout = 0; if ((hDiff == 0) && (wDiff == 0)) {   timeout = 100;   if (Prototype.Browser.IE) { timeout = 250; } } (function () {   this.prevLink.setStyle({ height: imgHeight + 'px' });   this.nextLink.setStyle({ height: imgHeight + 'px' });   this.imageDataContainer.setStyle({ width: widthNew + 'px' });   this.showImage(); }).bind(this).delay(timeout / 1000); }, // //  showImage() //  Display image and begin preloading neighbors. // showImage: function () { this.loading.hide(); var effectAppear = new Effect.Appear(this.lightboxImage, {   duration: this.resizeDuration,   queue: 'end',   afterFinish: (function () { this.updateDetails(); }).bind(this) }); this.preloadNeighborImages(); }, // //  updateDetails() //  Display caption, image number, and bottom nav. // updateDetails: function () { // if caption is not null if (this.imageArray[this.activeImage][1] != "") {   this.caption.update(this.imageArray[this.activeImage][1]).show(); } // if image is part of set display 'Image x of x' if (this.imageArray.length > 1) {   this.numberDisplay.update(LightboxOptions.labelImage + ' ' + (this.activeImage + 1) + ' ' + LightboxOptions.labelOf + '  ' + this.imageArray.length).show(); } var effectParallel = new Effect.Parallel(   [ new Effect.SlideDown(this.imageDataContainer, { sync: true, duration: this.resizeDuration, from: 0.0, to: 1.0 }),       new Effect.Appear(this.imageDataContainer, { sync: true, duration: this.resizeDuration })   ],   {       duration: this.resizeDuration,       afterFinish: (function () {      // update overlay size and update nav      var arrayPageSize = this.getPageSize();      this.overlay.setStyle({ height: arrayPageSize[1] + 'px' });      this.updateNav();       }).bind(this)   } ); }, // //  updateNav() //  Display appropriate previous and next hover navigation. // updateNav: function () { this.hoverNav.show();       // if not first image in set, display prev image button if (this.activeImage > 0) { this.prevLink.show(); } // if not last image in set, display next image button if (this.activeImage < (this.imageArray.length - 1)) { this.nextLink.show(); } this.enableKeyboardNav(); }, // //  enableKeyboardNav() // enableKeyboardNav: function () { document.observe('keydown', this.keyboardAction); }, // //  disableKeyboardNav() // disableKeyboardNav: function () { document.stopObserving('keydown', this.keyboardAction); }, // //  keyboardAction() // keyboardAction: function (event) { var keycode = event.keyCode; var escapeKey; if (event.DOM_VK_ESCAPE) {  // mozilla   escapeKey = event.DOM_VK_ESCAPE; } else { // ie   escapeKey = 27; } var key = String.fromCharCode(keycode).toLowerCase(); if (key.match(/x|o|c/) || (keycode == escapeKey)) { // close lightbox   this.end(); } else if ((key == 'p') || (keycode == 37)) { // display previous image   if (this.activeImage != 0){       this.disableKeyboardNav();       this.changeImage(this.activeImage - 1);   } } else if ((key == 'n') || (keycode == 39)) { // display next image   if (this.activeImage != (this.imageArray.length - 1)) {       this.disableKeyboardNav();       this.changeImage(this.activeImage + 1);   } } }, // //  preloadNeighborImages() //  Preload previous and next images. // preloadNeighborImages: function () { var preloadNextImage, preloadPrevImage; if (this.imageArray.length > this.activeImage + 1) {   preloadNextImage = new Image();   preloadNextImage.src = this.imageArray[this.activeImage + 1][0]; } if (this.activeImage > 0) {   preloadPrevImage = new Image();   preloadPrevImage.src = this.imageArray[this.activeImage - 1][0]; } }, // //  end() // end: function () { this.disableKeyboardNav(); this.lightbox.hide(); var effectFade = new Effect.Fade(this.overlay, { duration: this.overlayDuration }); $$('select', 'object', 'embed').each(function (node) { node.style.visibility = 'visible'; }); }, // //  getPageSize() // getPageSize: function () { var xScroll, yScroll, pageHeight, pageWidth, windowWidth, windowHeight; if (window.innerHeight && window.scrollMaxY) {  xScroll = window.innerWidth + window.scrollMaxX; yScroll = window.innerHeight + window.scrollMaxY; } else if (document.body.scrollHeight > document.body.offsetHeight) { // all but Explorer Mac xScroll = document.body.scrollWidth; yScroll = document.body.scrollHeight; } else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari xScroll = document.body.offsetWidth; yScroll = document.body.offsetHeight; } if (self.innerHeight) { // all except Explorer if (document.documentElement.clientWidth) { windowWidth = document.documentElement.clientWidth; } else { windowWidth = self.innerWidth; } windowHeight = self.innerHeight; } else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode windowWidth = document.documentElement.clientWidth; windowHeight = document.documentElement.clientHeight; } else if (document.body) { // other Explorers windowWidth = document.body.clientWidth; windowHeight = document.body.clientHeight; }  // for small pages with total height less then height of the viewport if (yScroll < windowHeight) { pageHeight = windowHeight; } else { pageHeight = yScroll; } // for small pages with total width less then width of the viewport if (xScroll < windowWidth) {  pageWidth = xScroll;  } else { pageWidth = windowWidth; } return [pageWidth, pageHeight]; } }; document.observe('dom:loaded', function () { var lightbox = new Lightbox(); });  

Теперь правим Objects of type XWiki.StyleSheetExtension (1)

Изменения в XWiki.Style

меняем
-#lightbox{ position: absolute; left: 0; width: 100%; z-index: 1001; text-align: center; line-height: 0;}#lightbox img{ width: auto; height: auto;}#lightbox a img{ border: none; }

на

+#lightbox{ position: absolute; left: 0; width: 100%; z-index: 1001; text-align: center; line-height: 0;}#lightbox img{ max-height: 640px;}#lightbox a img{ border: none; }

Итоговый XWiki.Style

#lightbox{
position: absolute;
left: 0;
width: 100%;
z-index: 1001;
text-align: center;
line-height: 0;
}
#lightbox img{ max-height: 640px;}
#lightbox a img{ border: none; }
#outerImageContainer{
position: relative;
background-color: #fff;
width: 250px;
height: 250px;
margin: 0 auto;
}
#imageContainer{
padding: 10px;
}
#loading{
position: absolute;
top: 40%;
left: 0%;
height: 25%;
width: 100%;
text-align: center;
line-height: 0;
}
#hoverNav{
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
z-index: 10;
}
#imageContainer>#hoverNav{
left: 0;
}
#hoverNav a{
outline: none;
}
#prevLink, #nextLink{
width: 49%;
height: 100%;
background-image: url(data:image/gif;base64,AAAA); /* Trick IE into showing hover */
display: block;
}
#prevLink {
left: 0;
float: left;
}
#nextLink {
right: 0;
float: right;
}
#prevLink:hover, #prevLink:visited:hover {
background: url($doc.getAttachmentURL(«prevlabel.gif»)) left 15% no-repeat;
}
#nextLink:hover, #nextLink:visited:hover {
background: url($doc.getAttachmentURL(«nextlabel.gif»)) right 15% no-repeat;
}
#imageDataContainer{
font: 10px Verdana, Helvetica, sans-serif;
background-color: #fff;
margin: 0 auto;
line-height: 1.4em;
overflow: auto;
width: 100%;
}
#imageData{
padding:0 10px;
color: #666;
}
#imageData #imageDetails{
width: 70%;
float: left;
text-align: left;
}
#imageData #caption{
font-weight: bold;
}
#imageData #numberDisplay{
display: block;
clear: left;
padding-bottom: 1.0em;
}
#imageData #bottomNavClose{
width: 66px;
float: right;
padding-bottom: 0.7em;
outline: none;
}
#overlay{
position: absolute;
top: 0;
left: 0;
z-index: 90;
width: 100%;
height: 500px;
background-color: #000;
}
/* IE7 hack */
*+html #overlay {
position: fixed;
}

Итак что же здесь было изменено? XWiki.Style передает в код JS  габариты изображения, а затем производится масштабирование под высоту 640 пикселей (но так же можно в любой момент изменить значение под себя), это связано с тем, что у моей жены дисплей ноутбука разрешением 1360х768 пикселей. Как сделать так что бы от ОС получить разрешение пользователя в код — я не знаю. Предупреждая дальнейшие замечания к качеству правок в коде — данные правки были сделаны мной на базе знаний полученных в школе на уроках информатики QBasic 4.5 и Borland Pascal 7.0.

Кульминацияция

Теперь у нас есть Вики-движок включающий функционал:
— Блога;
— WYSIWIG редактора;
— Галереи изображений;
— Возможность редактирования и создания новых макросов;
— Возможностью программирования и поддержки синтаксиса популярных Вики-движков;
Интеграцию с Open Office(!) (правда для этого необходимо установить и запустить службу или воспользоваться костылями);

Вот что получилось у меня в качестве примера тестового корпоративного сайта:
08. Пример сайта

Продолжение следует…

ссылка на оригинал статьи http://habrahabr.ru/post/265811/