Общо показвания

октомври 28, 2006

Beryl and the eye-candy factory

It feels almost unnatural when you see on the screen live and for real the effect you have just read about a few days ago that someone dreams to make come true.
Well, today I decided to give beryl a try. I use Fedora Core 5 and as probably everybody knows it supports AIGLX and compiz trough a dedicated repository (link here).
First of all - compiz as packed in that repository does not have the scale plug-in. This issue has been addressed in earlier post on this blog. As of Fedora Core 6 the AIGLX and compiz packages are part of the core. This mean you can have them without any effort. The scale plug-in is back (as of the change log, I did not test this as I am still with core 5) What makes me anxious is that it comes with the default window decorator (gnome-window-decorator) and some minor patches to allow key bindings to act like in metacity.
  • -no way to theme this

  • -no way to move the buttons of the window decorator from the right to the left corner, and still this is possible in metacity! this means step back!

In previous post I have made an example how do get cgwd and install it on f
edora core 5. As it has some issues with the newer version (being not compatible with compiz vanilla thus no plug-in works except the legacy one) it was not the best out there but still allowed greater flexibility in themes.
This was all good until there were newer and greater plug-ins out there. In the previous post on my blog some links were pasted - all of theme pointing to different resources for the beautification of the desktop.
Today I used svn to download the beryl source tree and compile it: here are the steps

svn co svn://svn.beryl-project.org/beryl/trunk/ beryl

On Fedora Core 5 you will need newer intltool to compile the components. A source RPM package from FC6 can be used. Just download it and recompile it (rpmbuild -bb intltool.spec) and then update the rpm. If you want to keep the compiz around just in case you do not like the beryl offer use some prefix different from /usr

./autogen.sh --prefix=/opt/beryl && make

You will need to compile and install (as root) beryl-core, beryl-settings, beryl-plugins, beryl-manager, emerald and emerald-themes to get the basic functionality. Additionally beryl-dbus, emerald-themes-repo and others can be used (sorry, still not sure what they are used for)
You will need to ass the /opt/beryl prefix to your $PATH and to include the beryl lib path to ldconfig. For some reason the /opt/beryl/lib subfolders are not used by ld so you'll need to include /opt/beryl/lib/beryl also if beryl does not start.
The configuration panel of beryl is so big it took me over 1/2 hour to read all the options. Real round edges are now working correctly. lots of new and really interesting plug-ins are available. The most interesting for me was that now you can type in the windows while scale/zoom are activated! Also it is possible to assign different effects to different types of windows. The Blur plug-in is working slow on my 855GM card but I assume it is faster on Nvigia/Ati. The water plug-in is not working at all (again - the old hardware). Emerald (the window decorator) can use the cgwd themes without any changes so it is compatible. I will try to make a RPM for this but until then this can be used in order to try the latest and greatest from the desktop eye-candy.
Bdock can be used for docking some applications if beryl is used in a bare desktop environment - it is probably useless in Gnome/KDE.
The Mac lovers will greatly awe the magic lamp animation. The burn and the beam up animation effects are probably the most interesting but are too slow on my hardware.

So - it is a great piece of software. Give a try! Now the only thing we are waiting for is a really intriguing GTK engine to mimic the Aqua look and we are there where the Mac owners pretend they are for years now in the UI. What will be next? I do not know....but I'll keep pray for the best!

октомври 20, 2006

News on the Linux desktop

Recently I have been working on the GTK theming ground. Some success have been reached. The new GtkToolBar can be seen here.

the GtkToolBar

From the Ubuntu forum the new GTK macmenu patch is available and it is now completed with a nifty little panel applet that hosts the menu bar, it has been fixed to correctly hosts the reappearing windows (like gaim's main window and the f-spot window). The patch is available for gtk 2.8 and 2.10 and the applet works in both 214 and 2.16 of the gnome desktop environment. They can be seen in the screen shot at the end of the post.

The new software I have installed the last days is called democracy player. Here is the official website. My first impression is very positive. As a software it is really damn good and practical. I have been looking for something like this for a long time. It supports RSS for video broadcasting and podcasting, also it can search YouTube, Google videos and Yahoo! video. It uses the xine-lib software to play the downloaded files. Unfortunately the xine-lib cannot play the audio in the flv files. It is documented that the support for h264 is not working due to a bug in the xine-lib but I am successfully playing such files with totem-xine for a long time (the HD trailers from the Apple site for example) and now it plays ok in the democracy. I guess they have made the tests with the xine-lib packaged from livna. I use another repo.
A screen shot can be seen here


I'd say the concept of the application of using already existing software and to make a new one that greatly improves the user experience is like a beacon in the outer space, but hey, this might be just the beginning. I really like the idea of using the mozilla rendering engine, the xine-lib playback capabilities and the download management of python (including torrents) and deliver the great user experience is inspiring. Try it and you'll notice how better the Linux applications might be than expected.

The last news is about a new GTK engine. It is a fork of the original murrine engine written by cimi86. It includes the long ago talked functionality of random widget graphics i.e. every widget gets it's own drawing schema, so widgets of the same class look a bit different. The difference is random and the buttons are still recognizable. Here is the link for the original announce. As you can see in the thread the theme using this engine is 2 to 3 times slower than the original murrine based theme but it is caused by the Cairo graphics library. Let's hope there will be improvements soon. I really like the idea and back there (aprox. 2 years ago) when I read the blogs with such ideas I told myself OMG it will be great but after a while it understood it wont be such working prototype soon. And now there it is! Isn't this just GREAT?

PS. As the new panel applet for the patched GTK is working I'm totally convicted. No way back to the menus on every single window damn it! I even doubt I'll switch soon to the Fedora Core 6 distribution as it might not work as well. Also fedora does ship compiz but does not ship gset-compiz. Whatta heck!!??!! How am I supposed to set the properties, using gconf-editor? Unbelievable....

октомври 10, 2006

За иконките и менютата

Напоследък ме занимава идеята за "разкрасяването" на работната среда Гном. Опитвах се изпаднал почти в патос да достигна висините на титулувания за най-добър Aqua интерфейс. Само че някъде по пътя явно се изгубих. Може би не умея добре да следя набелязаните цели, а може би просто не съм сигурен каква е целта, но е факт че от простото рисуване на нови и предполагаемо по-добри елементи преминах към четене на кода (gtk+-2.x) и снощи достигнах климакса на лудостта си - поставяне на код вътре в готови и работещи приложения за да ми отпечатват йерархията на активираните елементи/уиджети/ (за любопитните, използвах обикновен hook който извиква gtk_widget_path() при всеки почти всеки event (явно съм слаб програмист или слабо разбирам GTK) предизвикан от потребителя))
Резултатите? С доста голяма точност са възможни стилизирания на определени уиджети в определени програми. Въпросът е на каква цена става това. И кому е нужно.
През тези няколко дни (почти седмица) агония в преследване на намирането на начин да се докопвам до точно определени елементи, да се справям с инженерните решения на някой и друг програмист (специално тези разработили графичния интерфейс на epiphany просто са надминали себе си от всякъде!), тотално омазване на дистрибуцията ми (Fedora 5) с всевъзможни закърпени програми (при това с кръпки писани от мен - лудост и самоубийство!, аз все пак не съм програмист, нито имам опит в тези неща, вероятно по-разумно беше да направя виртуална машина на която да тествам или поне някакъв chroot, не знам как е най-добре да се постъпи, във всеки случай нямам отделна машина за тестовете, тук ако някой може да даде съвет ще е хубаво) и безсънни нощи преправяне на gtkrc файла и тест и преправяне и тест и преправяне.... стигнах до извода, че един човек сам не би могъл да се справи, дори и да е на пълен работен ден над това. Следва да потърся помощ може би, но от малкото което съм виждал като отношение по коментарите из gnome-look не съм очарован от идеята, там явно всеки е за себе си, което е малко разочароващо.

Другият проблем се оказаха иконите.
Аз използвам набор икони събрани от 3 комплекта, OSX, Nuvola и Aero плюс няколко директно "откраднати" от Mac OSX. До колкото ми е известно, лиценза на art-works на Епъл не позволява използването му по този начин, но нали съм българче, не се съобразих. Знам какво си мислят някои сега - предател! И аз дори си го мисля понякога, но като погледна безбройните "снимки" на десктоп средите въртящи се из нета (например linux.org.ru , linux-bg.org и т.н.) гледам гледам и.... дървения братче. И то здрава. В HIG за Гном има една сравнителна таблица - the Globe иконата показана как се използва в Джава, Аква и Гном. Познайте коя е най-впечатляваща. Е, поне не сме по-зле и от Уиндоус... ( линк ) Иконата на Гном изглежда някак.... убита, неясни цветове, на фона на тях твърде силно изразена светлосянка ( лъскаво ли е топчето ааа?). За цветовете има обяснение (линк и линк) но назрява следния въпрос у мен: аз да имам някакви проблеми с цветоусещането?
Тогава защо ми се налага да виждам както би виждал някой с такива проблеми? И ако той вижда по този начин така или иначе какъв е проблемът да направим иконите цветнички? Идеята тук е да не използваме в стиловете икони с еднаква или твърде сходна форма, но с различен цветови състав защото рискуваме някой с проблемно цветоусещане да не ги различи. Отваряме обаче gnome стила с икони и какво да забележим там, имаме едни и същи по форма и размер папки но с различен цвят. Супер! При това всичките са с пепеляв сякаш остарял от времето цвят. Перфеткно.

Като капак на всичко тези които най-много използват Линукс с Гном или КДЕ в ежедневието продължават да твърдят че колкото по блед, схлупен и безцветен и без ефекти е десктопа им толкова по-добре работят. Аз някак не мога да свържа двете неща. Може би някой ще ми разясни. Това разбира се обезкуражава ентусиастите и в никой случай не привлича професионалистите. В тази връзка една интересна статия: тук.
Честно казано съм много объркан. Много неща се пишат из Интернет как това или онова трябва да стане с Гном или графиката под Линукс като цяло. Мненията са много и всичките си противоречат, в крайна сметка може би всеки като мен се хваща да прави каквото смята за правилно и накрая нищо не излиза като свят защото няма обединени усилия. А може би греша.
Аз сигурно няма да си купя Мак никога, от части заради политиката им спрямо ДРМ от части защото съм свикнал да имам определено ниво на контрол върху софтуера който използвам, до степен каквато няма да имам с OSX но нищо не се знае. Но дори слабите изпълнения с ShapeShifter могат да сложат в малкия си джоб онова което е останало като графично достойнство при Линукс. Малко ми е тъжно. Защото с толкова много разработчици и толкова малко артисти Линукс ще си остане една тясно секторна работна операционна система и нищо повече. И не че съм ЗА световно господство на Линукс-а и свалянето на Уиндоус и т.н. просто съм за идеята всеки да може да допринесе с нещо към онова което харесва, понеже аз харесвам Гном искам да направя нещо за него. Много хора са неудовлетворени от работата си, защото е скучна или еднообразна или просто не е тяхното нещо, но се налага да се работи така или иначе; за мен това е разтоварването. Да се опитам да реализирам своите идеи и Линукс с отворените си стандарти ми даде тази възможност, нима можех да закърпя някоя уиндоус програма за да видя как точно бих могъл да я стилизирам?

Интересна статия на сайта на Весо: тук
Макар да не съм напълно съгласен с него няма да скрия че модернизма ми е неприятен. Това по го кльопам.

Другата интересна новина е, че след като Quinn (аз така и не можах да разбера това мъж ли е или жена, на много места се обръщат с She към псевдонима??, ако е жена егати кефа, едно интересно и забавно нещо да има за десктопа и да ни го напише дама:) ) форкна Compiz и създаде Beryl Emerald и така нататък деривати David добави поддръжка за metacity теми в Compiz. Очарователно е как се надпреварват. За сега Beryl води, защото поддържа няколко интересни плъгина с ефекти. Надявам се след като се напишат на непотребни плъгини да седнат да помислят за нещо полезно. И за това имам някои идеи, но е рано за това, сега писачите на анимацийки и подскачащи прозорчета са във вихъра си.

октомври 08, 2006


Що е то?
HIG е често използвана абревиатура и означава Human Interface Guidelines, на български - насоки за създаване на потребителски интерфейс. В десктоп работните среди това са насоките които се очаква да следват програмистите и дизайнерите на приложенията за да ги направят по-лесни, удобни и приятни за употреба. Не на последно място и по-интуитивни.

Аз не претендирам да разбирам много от тази материя, но нищо не пречи да си кажа мнението, след като съм се запознал с няколко документа по въпроса. На първо място започнах с помощната документация която може да бъде намерена на страницата за програмисти на Apple. Документът не е от най-кратките, но според мен си струва да се прочете. Детайлите са много (включително препоръчваните отстояния в пиксели между елементите и така нататък), но странно защо имаше голям смисъл, поне за мен. Сигурно за никой не е тайна ,че съм голям фен на Aqua интерфейса. Опитвал съм се да пригодя някои от характерните за него елементи към GTK с по-глолям или по-малък успех (например Focus ring). Анимацията също смятам, че използвана разумно добавя много за улесняване на взаимодействието с потребителя. Едно от нещата които все още не знам как да осъществя е обезцветяването на контролните елементи на неактивните прозорци, добавянето на бутон за оразмеряване на прозореца (както всички вече знаете такъв бутон се поддържа от (почти?) всеки мениджър на прозорци, но някак си не-интуитивно се работи с тях, дори ако сте имало опит с Уиндоус се сещате че там така наречения Resize Grip присъства. Разбира се window frame (рамка на прозореца) позволява промяна на размера, но какво правим ако нямаме рамка на прозореца (тоест използваме мениджър на прозорци който позволява рамката да бъде с големина 0) ? Ами... остава ни да използваме бутона (ами ако сме решили че не искаме да има такъв?) или да се надяваме разработчика да е добавил а) StatusBar и б) resize grip на него.
Следващото което прави неприятно впечатление е липсата на гъвкавост по отношение на менютата, докато тази функционалност присъства в KDE то тя е доста недодялана в ГТК все още.
Актуализация: AqD написа поправка към GTK 2.10 която в последствие порт-на към GTK 2.8 и аз имах удоволствието да я изпробвам лично. Първоначално кръпката беше доста недодялана (например менюто изчезваше ако се активира контекстно меню или се влачи прозореца) също така не можеше да се интегрират менютата с панела, но днес посетих отново страницата на проекта и О ЧУДО, имаме си вече аплет за панела, който помества менютата, да им е честито на Mac OSX любителите! За съжаление кръпката за 2.8 не се поддържа и няма да се обновява.

Странната имплементация на някои уиджети поставя пред сериозно изпитание създаването на декорация за елементите следващи подобни на Aqua HIG. Едно от нещата е, разбира се е, че уиджетите са различни от тези в Cocoa . Например типовете бутони (най-ясната разлика), типовете визуални разграничители и други. Голям напредък за дизайнерите на теми беше въвеждането на възможността да се променят отстъпите и размерите на някои уиджети чрез темите в GTK2. Един типичен пример за често задаван в темите размер на уиджет е scrollbar и slider. За съжаление задълбоченото познаване на GTK е наложително за да се използват тези възможности.
Но дори те не могат да се справят с някои ограничения на имплементацията по отношение на "theming". Ще изброя някои от тях с цел илюстрация:
  • GtkToolButton - това са бутоните използвани в горната част на прозорците, например контролите на Nautilus или Gedit. За съжаление, макар да са много различни като предназначение и тип и логиката е поне да могат да се изчертават по начин различен от обикновените бутони, тези бутони напълно еднакво се изчертават както обикновения GtkButton. Всичките ми опити до сега да променя това са безрезултатни.

  • Променените от някой програмист уиджети, извлечени от основния тип, но неподдаващи се на theming. Ужасно дразни, а на всичкото отгоре нямам идея как да се справя с това за сега, примери за това са widgets в: Grisbi, Evolution, Epiphany LocationBar и други

  • Липсата на стабилна документация за най-често използвания engine - pixmaps. Всичко на всичко което се знае за този модул е това което успее дизайнера на темата да схване от чуждите работи и коментари и евентуално ако чете кода и доразбере нещо.

  • Липсата на приложение за тестване на темите, съдържащо всички уиджети (включително с имената им), което да може да променя използвания стил без да се сменя системния такъв - това много би ускорило тестването на стиловете поне за стандартните контроли (уиджети)

  • Липса на лесен и надежден начин за получаване на името и path-а на уиджет директно от работеща програма, например искате да направите тема за определен уиджет в определено приложение, но не знаете какъв е той, ако имаше начин просто да кликнете на него и в stdout да ви се изпише името щеше да е къде къде по-лесно

  • Няма документирана възможност за стилизиране на конкретни уиджети в конкретни приложения, макар че очевидно това е възможно(как?) - виждали сме го в няколко теми вече и наистина работи (и как все пак?)

Не мога да претендирам да познавам добре GTK, нито начините за стилизирането му, но от набраната до момента информация (няколко дни стабилно ровене и четене както на помощната документация (sgml през DevHelp) така и на изходния код) ми показаха че с някои неща няма да мога да се справя, без да задълбая наистина сериозно в interenals. А дори и тогава се съмнявам да успея. Бих се радвал ако някой има по-голям опит и разбиране по въпроса помогне, но за сега не се е намерил такъв, хем знаещ, хем желаещ да помогне.
Ето някои от нещата, които ме спъват за сега:
  • Изчертаване на фокуса: безумно много ме дразни това че само текстовите контроли (GtkEntry, GtkText, GtkEditable и прочее) се поддават на "фокусиране". Според мен трябва това да се отнася в пълна степен и за листингите, защото може да се скролира с клавиатурата през тях и да се активират Items там с натискането на Enter, което ги прави по логиката на HIG пълноправни кандидати за приемане на Input events следователно - фокусирането им.

  • Не знам как да изчертавам контроли различно според къде са използвани(в каква йерархия), например: GtkCList има в себе си GtkLabel, който, за да променя, използвам следния код
    style "stylename" {
    font_name = "Font Name pointsize"
    widget_class "*.GtkCList*.*GtkLabel*" style = "stylename"

    и това работи, дори да имам другаде зададен различен стил за GtkLabel. Но например не работи за бутоните в GtkToolButton, може би просто не знам как правилно да се обръщам към тях, вече и аз не знам какво става.

Бавно но славно напредвам с моят стил, който съм намислил освен всичко друго да бъде и едно своеобразно помагало за желаещите да изучават начините на стилизиране на обектите от GTK. Вече съм доста наясно че никога няма да мога да постигна Aqua изгледа, да не говорим за поведението (най-малкото анимациите) но мисля че доста красиви и практични неща могат да се получат. За мен разбира се най-важното в това начинание остава доближаване до HIG, а именно, по-добре и по-бързо да може да се ориентира потребителя в това какво се случва с програмата и така нататък, като основната цел в момента ми е пълно и цялостно проследяване на Input focus и Default widget (бил той бутон или друго - както в случаите с диалозите например, Input фокуса може да бъде GtkEntry поле, но default контролата да е Ok или Cancel бутона.)
Отправям призив към всеки който има познания в областта и сведения и иска да помогне да ми пише с информация за контакт. Всяка помощ е добре дошла!
Мисля също така, че следващият път когато Гном се сдобива с нов стил "по подразбиране" той трябва да е много по-добре обмислен (вкл. възможностите които предлага, като проследяване на фокуса, действията по подразбиране и тн, неща които липсват в настоящата реализация (Clearlooks*).

*Clearlooks беше голяма стъпка напред, след годините на грозна тема по подразбиране, но това да се проследява фокуса само в GtkEntry полетата си беше едно недомислие. Също така се оказа че да се изчертават уиджетите само с Cairo не е толкова лесно колкото си мислеха всички. А и този модул предлага твърде малко методи за настройка на външния вид на приложенията.