The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

В KWin добавлена поддержка создания визуальных эффектов на JavaScript

31.01.2012 15:08

Мартин Грэслин (Martin Graesslin), один из ключевых разработчиков оконного менеджера KWin, представил новое достижение на поприще интеграции поддержки JavaScript: визуальные эффекты для KWin теперь можно создавать на языке JavaScript, а не только на C++.

C точки зрения производительности, эффекты на JavaScript ничем не отличаются от эффектов на C++. Система наложения эффектов в KWin разделена на две стадии: реагирование на изменение в оконном менеджере (например, закрытие окна) и рендеринг. Скриптовый API взаимодействует только с оконным менеджером и не касается отрисовки, все операции рендеринга как и раньше производятся низкоуровневыми подпрограммами на C++.

API для разработки эффектов максимально приближен к API для разработки скриптов-дополнений к KWin. Для создания анимационных эффектов предлагается использовать API, базирующийся на появившемся в Qt 4.8 элементе AnimationEffect. Для примера, Грэслин представил реализацию на JavaScript известного эффекта затухания (Fade), вариант на C++ которого занимает более 200 строк, а на JavaScript укладывается в 7 строк:


   var duration = 250;
   effects.windowAdded.connect(function(w) {
      effect.animate(w, Effect.Opacity, duration, 1.0);
   });
   effects.windowClosed.connect(function(w) {
      effect.animate(w, Effect.Opacity, duration, 0.0, 1.0);
   });

Кроме упрощения разработки эффектов, использование JavaScript также приведёт к упрощению их последующей поддержки. В настоящее время разработчики испытывают большие проблемы с поддержанием в актуальном виде накопленной коллекции дополнений на C++, особенно в ситуации внесения изменений в API и непостоянности ABI. Дополнения на JavaScript можно будет вынести из основного дерева исходных текстов KWin и поставлять в виде отдельных пакетов. Для распространения эффектов предлагается использовать уже существующую структуру Plasma Package

В настоящее время JavaScript API находится на начальной стадии развития, но будет развиваться в рамках текущего цикла подготовки релиза KDE 4.9. Как уже упоминалось выше скрипты не могут участвовать в операциях рендеринга, но ситуация может измениться после появления биндинга для WebGL, что позволит, например, организовать загрузку собственных шейдеров. Пока реализация поддержки WebGL не входит в планы, по крайней мере в рамках цикла подготовки KDE 4.9.

  1. Главная ссылка к новости (http://blog.martin-graesslin.c...)
  2. OpenNews: В оконном менеджере KWin появится возможность написания дополнений на JavaScript и QML
  3. OpenNews: Связанная с крахом KWin проблема побила рекорд по числу уведомлений в системе отслеживания ошибок проекта KDE
  4. OpenNews: В KWin появилась поддержка OpenGL ES
  5. OpenNews: Продолжение рассказа разработчиков KWin о проблемах с видеодрайверами
  6. OpenNews: Мнение разработчиков KWin о видеодрайверах для Linux
Лицензия: CC-BY
Тип: К сведению
Короткая ссылка: https://opennet.ru/32948-kwin
Ключевые слова: kwin, javascript
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение (60) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (-), 15:43, 31/01/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    > C точки зрения производительности, эффекты на JavaScript ничем не отличаются от эффектов на C++

    ну хорошо.
    жду эффектов на PHP, Python... ^_^

     
     
  • 2.7, Аноним (-), 16:22, 31/01/2012 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Не надо питона, мне уже хватило выколупывания значков в трее на этом по 20 мегз штучка!
     
     
  • 3.31, Аноним (-), 19:17, 31/01/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Вас тоже вынужден отправить взглянуть на ман по сарказму ;)
     
     
  • 4.40, Аноним (-), 21:07, 31/01/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > Вас тоже вынужден отправить взглянуть на ман по сарказму ;)

    man что?

     
  • 2.14, Аноним (-), 17:24, 31/01/2012 [^] [^^] [^^^] [ответить]  
  • –2 +/
    >> C точки зрения производительности, эффекты на JavaScript ничем не отличаются от эффектов на C++

    Написано слишком расплывчато чтобы не придрались (или сравнивали "на глаз"). Любой, более менее понимающий разницу между С++ и ECMAScript поставит под сомнение это заявление.

    >ну хорошо.

    То что вы сглотнули заявление без анализа - вам чести не прибавляет.

    >жду эффектов на PHP, Python... ^_^

    В PHP - ладно, уйдет в web, а вот пидоны не нада нафиг.

     
     
  • 3.16, Аноним (-), 17:34, 31/01/2012 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > То что вы сглотнули заявление без анализа - вам чести не прибавляет.

    читайте ман по сарказму ;)

     
     
  • 4.22, Аноним (-), 18:07, 31/01/2012 [^] [^^] [^^^] [ответить]  
  • +/
    >читайте ман по сарказму ;)

    Не распарсил?

     
     
  • 5.25, Аноним (-), 18:42, 31/01/2012 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Не распарсил?

    Ман по сарказму? ;]

     
     
  • 6.47, Аноним (-), 23:08, 31/01/2012 [^] [^^] [^^^] [ответить]  
  • +/
    >Ман по сарказму? ;]

    Цикл?

     

  • 1.2, Анон (?), 15:44, 31/01/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    >новое достижение
    >JavaScript
    >визуальные эффекты для KWin
    >WebGL

    Как бы в итоге сам Kwin не переписали на яваскрипте с рендером на WebGL -_-

    И почему все так и норовят переписать весь софт на яваскрипте?

     
     
  • 2.3, Аноним (-), 15:48, 31/01/2012 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Потому что если прикрутить jit, то все начинают понимать что лучше быстрее разрабатывать, чем долго компилить.
     
     
  • 3.4, Аноним (-), 15:53, 31/01/2012 [^] [^^] [^^^] [ответить]  
  • +7 +/
    В общем-то, это даже интересно. Но к javascript'у надо привыкать некоторое время, потому что он, имхо, вообще нафиг нечитабельный в том виде, в каком на нём пишут.
     
     
  • 4.37, Df232z (ok), 19:46, 31/01/2012 [^] [^^] [^^^] [ответить]  
  • +/
    А вы не читайте советских газет, то есть творчества быдлокодеров.
     
     
  • 5.41, Аноним (-), 21:08, 31/01/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > А вы не читайте советских газет, то есть творчества быдлокодеров.

    А вы себя к этому направлению не относите?

     
  • 4.57, L (??), 09:37, 01/02/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Ну, у вас одно ИМХО, у других программистов другое ИМХО. JS популярный язык, в котором отношение количества выполняемых действий к количеству строк кода довольно велико.
     
  • 3.5, Толстый (ok), 16:21, 31/01/2012 [^] [^^] [^^^] [ответить]  
  • +8 +/
    Эффект от отсутствия компиляции нивелируется отсутствием статической типизации. Те ошибки, которые в С++ отлавливаются при компиляции в JS приходится искать дебаггером в рантайме, что отнимает намного больше времени. Аргумент не катит.
     
     
  • 4.6, Ваня (??), 16:22, 31/01/2012 [^] [^^] [^^^] [ответить]  
  • –6 +/
    Это называется обфускация :)
     
     
  • 5.9, Аноним (-), 16:24, 31/01/2012 [^] [^^] [^^^] [ответить]  
  • +4 +/
    > Это называется обфускация :)

    Иди на брейнфаке пиши - тебе понравится. Там вся программа - сплощная обфускация. Зато я тебе гарантирую что твою программу никто не сопрет. В силу мучительности этого процесса.

     
  • 5.15, Аноним (-), 17:29, 31/01/2012 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >Это называется обфускация :)

    Какая тут к черту обфускация, когда человек пишет про compile-rime vs run-time, а?

    //лузер, вернись к обсуждению: https://www.opennet.ru/openforum/vsluhforumID3/82693.html#30

     
  • 4.10, Аноним239 (?), 16:55, 31/01/2012 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Откройте для себя юнит тестирование.
     
  • 4.20, mf (ok), 17:44, 31/01/2012 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Динамические языки надо запретить, т.к. Толстый их не понимает. И правоассоциативные операторы с ними, они вносят сумятицу в неокрепший ум. И интерпретаторы. И программирование. И запускать программы не надо. Только компиллировать.
     
     
  • 5.29, Аноним (-), 18:52, 31/01/2012 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Динамические языки надо запретить, т.к. Толстый их не понимает.

    Я б сказал что типизация позволяет ловить кучу багов на этапе компиляции. А у JS ни вам типизации, ни компиляции. И объявление переменных без кейворда. Ну просто все чтобы можно было удобно... где-нить... обосраться в коде и потом неделю сношать себе мозг при достаточном размере кода - "блин, почему же тут возникает этот бред?!" :).

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

     
     
  • 6.35, Df232z (ok), 19:43, 31/01/2012 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Если вы пишете тесты с хорошим покрытием у вас мало багов. Если вы не пишете тесты,с  хорошим покрытием, у вас много багов.
    Все остальное, как то: вид типизации, длинна бороды программиста и фазы луны, на качество кода не влияют.

     
     
  • 7.42, Аноним (-), 21:12, 31/01/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Понимаешь, если часть багов отстрелена на уровне валидации сорца - ловить тестам... большой текст свёрнут, показать
     
     
  • 8.64, anonymous (??), 16:51, 01/02/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Утверждение применимо и к компиляции Так что тут о двух концах палка ... текст свёрнут, показать
     
  • 6.46, Xasd (ok), 21:39, 31/01/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > И объявление переменных без кейворда

    с дуба свалилсся чтоле x_X ? освой наконец уже в Javascript -- синтаксисическую конструкцию "use strict"

     
     
  • 7.52, Anon12203235 (?), 02:59, 01/02/2012 [^] [^^] [^^^] [ответить]  
  • +/
    И щито? Есть места (типа IE) гиде ваш юз скрипт не работает и всем насрать. Так-то :)
     
     
  • 8.53, Df232z (ok), 03:32, 01/02/2012 [^] [^^] [^^^] [ответить]  
  • +/
    И давно IE стал движком JS для KDE ... текст свёрнут, показать
     
  • 6.67, sagifire (?), 02:54, 07/02/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > И объявление переменных
    > без кейворда ...

    нету, не видел такого

     
  • 4.30, Lain_13 (?), 18:59, 31/01/2012 [^] [^^] [^^^] [ответить]  
  • +/
    В фоксовском движке, например, сделали нечто вроде промеждуточной модели между динамической и статической типизацией. Компилер определяет что и какого типа попадает в переменные, и если код писал не сотона, то у него это получается. Дальше он ими оперирует уже как статически-типизированными и вроде даже может сообщать о случаях когда переменная в одном месте определяется одним типом, а потом внезапно его меняет на пол-пути.
     
  • 3.8, Аноним (-), 16:23, 31/01/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > Потому что если прикрутить jit, то все начинают понимать что лучше быстрее
    > разрабатывать, чем долго компилить.

    Ага, только вот работает потом так что 4-ядерник становится унылее первопня. Хотя по скорости вычислений и делает его раз в 100.

     
     
  • 4.11, Аноним239 (?), 16:56, 31/01/2012 [^] [^^] [^^^] [ответить]  
  • +6 +/
    Не надо путать производительность Javascript и производительность манипуляций с DOM в браузере.

     
     
  • 5.27, Аноним (-), 18:46, 31/01/2012 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Не надо путать производительность Javascript и производительность манипуляций с DOM в браузере.

    А с фига ли динамически типизируемый язык в котором даже массивов нормальных (позволяющих работать с данными побайтово, без диких изгалений и костылей) станет быстрее плюсов? При таком поднасирании в исходных установках никакой jit сие не скомпенсирует. Ну и памяти оно может выжрать прорву, а отдаст... когда-нибудь... может быть... если кому будет не влом дебажить - утечка ли это или gc протормозил. Как все это работает - ежику понятно. Будет у кед системным требоавнием минимум 2 гиг памяти и ребут машины раз в три дня :)

     
     
  • 6.32, Df232z (ok), 19:37, 31/01/2012 [^] [^^] [^^^] [ответить]  
  • –2 +/
    >А с фига ли динамически типизируемый язык в котором даже массивов нормальных (позволяющих работать с данными побайтово, без диких изгалений и костылей)

    data = new Int32Array()
    >Ну и памяти оно может выжрать прорву, а отдаст... когда-нибудь... может быть... если кому будет не влом дебажить - утечка ли это или gc протормозил. Как все это работает - ежику понятно. Будет у кед системным требоавнием минимум 2 гиг памяти и ребут машины раз в три дня :)

    Смайлик в конце не оправдывает идиотизма претензий.
    >станет быстрее плюсов?

    Скорость программы определяется качеством выбранных алгоритмов и мало зависит от языка программирования.

     
     
  • 7.44, Аноним (-), 21:16, 31/01/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > data = new Int32Array()

    Ага, а это работает в том js который в кедах?

    > Смайлик в конце не оправдывает идиотизма претензий.

    А вы приходите через пару лет и мы послушаем как вы будете лечить что "да ладно, память дешевая, блаблаблаблабла" :)

    > Скорость программы определяется качеством выбранных алгоритмов

    Несомненно.

    > и мало зависит от языка программирования.

    Смотря с чем сравнивать. Если конечно сравнивать линейный перебор массива на 100500 миллионов элементов с деревом или хэш-таблицей, оно конечно да. Но в свои несколько раз JS сольет на одном и том же алгоритме. Ну кроме случая когда это - ничегонеделание и ожидание действий юзера.

     
     
  • 8.49, Sauron (??), 00:51, 01/02/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Внезапно да Да и не за горам V8... текст свёрнут, показать
     
  • 8.51, Df232z (ok), 01:59, 01/02/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Смайлик в конце не оправдывает идиотизма претензий А программисты на С способ... текст свёрнут, показать
     
  • 2.12, openclocker (ok), 17:17, 31/01/2012 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Насколько я понял из новости, эффекты написаны на C++, а на JavaScript'е просто написаны (будут) скрипты для запуска эффектов. Например:
    Подключить рябь.длл //Написан на C++ и окомпелированная библиотека с реализацией функции рябь()
    Если окно получило фокус, то выполнить рябь().

    Что-то вроде того.

    P.S. Не силен я в программировании, тем более в JavaScript'е. Изучал чисто для того чтобы получше разбираться в компьютерах.

     
     
  • 3.21, Аноним (-), 18:05, 31/01/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > Насколько я понял из

    новости, эффекты написаны на
    C++, а на JavaScript'е
    > просто написаны (будут)

    скрипты для запуска эффектов.
    Например:
    > Подключить рябь.длл //

    Написан на C++ и
    окомпелированная библиотека
    с реализацией функции
    > рябь()
    > Если окно получило фокус, то

    выполнить рябь().

    > Что-то вроде того.

    Похоже на то, этакий avisynth


     

  • 1.17, Аноним (-), 17:35, 31/01/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Создатели KDE движутся в правильном направлении. Берут пример с GNOME 3.
     
  • 1.23, oneonfire (?), 18:13, 31/01/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Ну чего так все увлекаются этим JavaScript?Лучше бы Lua, почему? Да он проще в обучении...
     
     
  • 2.38, an. (?), 20:11, 31/01/2012 [^] [^^] [^^^] [ответить]  
  • +/
    У Qt есть удобная интеграция с а-ля JavaScript (Qt Script). Для Lua нет. Кроме того, QML и пр. тоже юзают JavaScript - нет смысла разводить зоопарк языков
     

  • 1.24, ZeroOne (ok), 18:20, 31/01/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А что за элемент AnimationEffect? Упоминаний о нём я не нашёл в Qt 4.8.
     
  • 1.26, Stax (ok), 18:44, 31/01/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    > представил реализацию на JavaScript известного эффекта затухания (Fade), вариант на C++ которого занимает более 200 строк, а на JavaScript укладывается в 7 строк:

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

     
     
  • 2.28, Аноним (-), 18:48, 31/01/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > означать в 29 раз быстрее скорость выполнения..

    Звезды погаснут раньше.

     
  • 2.34, Df232z (ok), 19:39, 31/01/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Сколько в 29 строках кода на с++ может быть утечек памяти? Две? Три? А уязвимостей?

     
     
  • 3.45, Аноним (-), 21:19, 31/01/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > Сколько в 29 строках кода на с++ может быть утечек памяти? Две? Три?

    Как будто с JS память не может течь. Не, ну что за ламерство, а?

    > А уязвимостей?

    Уязвимостей эффекта окон? Это вобще как? oO

     
     
  • 4.50, Df232z (ok), 01:55, 01/02/2012 [^] [^^] [^^^] [ответить]  
  • +/
    >Как будто с JS память не может течь.
    >Как будто в С++ память не может НЕ течь.

    Как то так.

    >Уязвимостей эффекта окон? Это вобще как? oO

    // for debug
    printf(windowTitle);
    см новость о sudo.

     
     
  • 5.66, фтыш (?), 18:21, 02/02/2012 [^] [^^] [^^^] [ответить]  
  • +/
    посмешил, спасибо. в Qt если что - QString, такие дела
     
  • 3.54, Аноним (-), 05:24, 01/02/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Их там может быть ровно 0, причём с очень большой вероятностью.
     
     
  • 4.55, Df232z (ok), 07:59, 01/02/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Ноль, говорите? С очень большой вероятностью, говорите?
    А знаете сколько багов было исправлено в плазме, например?
    https://bugs.kde.org/reports.cgi?product=plasma&output=show_chart&datasets=NEW
    16 @#$@#%! тысяч, и тысяча еще не закрыта.
    В Конкьюере вообще 25 000.
    Теперь еще раз расскажите, что "Статическая типизация защит нас от ошибок" или что "разработчики KDE могут писать безупречный код". Я посмеюсь.
     
     
  • 5.60, Аноним (-), 10:14, 01/02/2012 [^] [^^] [^^^] [ответить]  
  • +/
    А вы думаете, будь они на JS, ошибок было бы меньше?
     

  • 1.48, Sauron (??), 00:50, 01/02/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А чем им QML и его shader плагин не угодил?

    *с тоской посмотрел на wayland и qml-compositor, где эффекты на яваскрипте летают*

     
  • 1.56, Андрон (?), 09:34, 01/02/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Нафик не нужна ваши строгая типизация. ДЕЙСТВИЕ должно определять тип данных.

    # perl -e '$a=1; $b=2; print($a+$b,"\n")'
    3
    # perl -e '$a=1; $b=2; print($a.$b,"\n")'
    12

    Никогда никаких неожиданностей не возникнет. Фактически, программа будет работать так, как надо. То, как она работает, должно зависеть от того, что вы напишите в ДЕЙСТВИИ. При строгой типизации работа программы зависит от того, что вы напишите в типах, действия с типами. Это плохо. Долой типизацию, действия должны определять результат.
    Люблю perl.

     
     
  • 2.58, некто (?), 09:56, 01/02/2012 [^] [^^] [^^^] [ответить]  
  • +/
    perl -e '$a="ha"; $b=2; print($a+$b,"\n")'
    2

    это нормально?

     
     
  • 3.59, Михаил (??), 10:04, 01/02/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Безусловно. В общем случае - перед действием достаточно простой проверки. или после получения результата.
    Но я тоже "ЗА" то, что бы действие над данными определяло результат единолично, каковы бы небыли данные. Это поможет избежать дебильных рантайм ошибок.
     
     
  • 4.61, Аноним (-), 10:16, 01/02/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > Это поможет избежать дебильных рантайм ошибок.

    По мне так как раз наоборот.

     
     
  • 5.62, Виталий (??), 10:50, 01/02/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > По мне так как раз наоборот.

    Не наоборот, а так и есть. Ошибок не будет, будут нормально обрабатывать входные данные. Да, результат будет зависеть от данных, но проверяйте данные, кто ж вам запрещает, вы же итак это делаете. Странные данные на выходе? Ну поглядите - что вы подали на вход? Проверяйте.

     
     
  • 6.65, Аноним (-), 15:30, 02/02/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Ага, кроме обычных проверок по бизнес-логике, еще в каждой зачуханной функции делать проверку на соответствие типов переданных значений? Может пусть лучше это компилятор сразу проверит?
     

  • 1.63, Аноним (-), 10:54, 01/02/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Мож, кто эффект снега снова запилит.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Спонсоры:
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2020 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру