Archive for the 'it' Category

Building Chromium Embedded Framework (CEF) on Linux

Prerequisites: What I had?

  • Ubuntu 11.10 x86
  • 2770 Mb of DDR2
  • ~17Gb of free space on NTFS partition
  • I wanted to compile CEF1 1271 branch on Linux

Results & Downloads: What I got?
Here you can download CEF1 1271 binary linux distribution (ATTENTION: ~365MB): http://bit.ly/cef1linux1271x86

CEFclient application

CEF client application

Process: How to build Chromium Embedded Framework (aka CEF) on Linux?

Note to those, who’ll try to compile that on Linux, but on NTFS partitions:
Mount your NTFS partition using
sudo mount -t ntfs -o rw,auto,fmask=0022,dmask=0000,uid=1000,uid=1000 /dev/sdaX /your/mounted/ntfs/folder
Then all your files will be mount, as if they belong to the user with id 1000 (usually default user in linux, root is 0) and all the files could be executable.

  1. Read BranchesAndBuilding from CEF wiki.
  2. Select release branch you need. I used 1271 CEF1: http://chromiumembedded.googlecode.com/svn/branches/1271/cef1
  3. Use automated method: http://code.google.com/p/chromiumembedded/wiki/BranchesAndBuilding#Automated_Method
  4. Double-check, that you have read/write permissions on files and can execute scripts in your development environment.
  5. Checkout automate tools from svn:
    svn checkout http://chromiumembedded.googlecode.com/svn/trunk/cef1/tools/automate /path/to/automate
  6. Read http://code.google.com/p/chromiumembedded/source/browse/trunk/cef1/tools/automate/automate.README.txt
  7. Execute:
    python /path/to/automate/automate.py --download-dir=/FULL/PATH/TO/DOWNLOAD/FOLDER --url=http://chromiumembedded.googlecode.com/svn/branches/YOUR_BRANCH_NUMBER/cef1
  8. Generally, it will fail after the source checkout. Execute:
    ...download/chromium/src/build/install-build-deps.sh
    It will install build dependencies for chromium.
  9. Execute:
    python /path/to/automate/automate.py --download-dir=/FULL/PATH/TO/DOWNLOAD/FOLDER --url=http://chromiumembedded.googlecode.com/svn/branches/YOUR_BRANCH_NUMBER/cef1 --force-update --force-build --force-distrib
  10. If you are lucky enough, build won’t fail and you’ll enjoy generated cef_binary_1.XXX.YYY_linux.zip in the ...download/chromium/src/cef/binary_distrib folder!
  11. In order to check this, cd into ...download/chromium/src/cef/binary_distrib/cef_binary_1.XXX.YYY_linux/Release folder and run: ./cefclient
    I hopy, you’ll enjoy that simple cefclient app, built from source!

Here’s the screenshot of the cefclient :)

That’s it! As the wiki states, you can even set up CI job for that, using your favourite CI tool!

Графічні редактори

Кажуть, людське життя треба ділити не на етапи по віку, а на етапи “по Фрейду”: перший поцілунок, перший секс, і щось там далі.

Так от, можна провести дуже адекватну паралель між цими етапами в житті і графічними редакторами на комп’ютері. Не пам’ятаю, що конкретно навело мене на думку про такий фетиш, та, тим не менше, в цьому щось є (можливо вплив Пєлєвіна і Бегбедера з їхніми неадекватними описами-порівняннями).

Неодноразово чув від дівчат, що саме перший поцілунок визначив, як вони цілуються тепер (пацани, цілуйте дівчаток ніжно, бо потім вашим/іншим губам буде просто Хіросіма і Нагасакі).

Аналогічно, перший графічний редактор, з яким мене познайомили — суперкрутий редактор всіх часів та народів! Зустрічайте, Microsoft Paint! Можу спорити з багатьма людьми на різні теми, та mspaint.exe буду відстоювати довго. Жодна інша програма не дозволяє мені з такою легкістю і швидкістю вирізати кусок скріншота чи картинки з нету. Жодну інші програму я не можу запустити з такою блискавичною швидкістю на будь-якій Windows-машині і знати, що вона запуститься і не впаде. О,ці [Win]+R -> mspaint -> [Enter]. Руки пам’ятають цю послідовність навіть в темноті, при виключеному світлі. А перетягування частин картини з прозорим фоном.. ммм.. воно дасть фори всім.

Схожа ситуація і з чимось серйознішим. В один момент, тобі потрібно щось більше, ніж просто mspaint. Він класний, та ти відчуваєш невимовну тягу до масок, фільтрів і інших тонкостей обробки зображень. Тут смаки графічних фетишистів розходяться. Колись мені подарували диск з редактором PrintArtist. Кліпарт+простий векторний редактор. В ньому я зробив чимало привітальних відкриток важливим для мене людям. Хоча він старий як світ (~2003), та він був дуже простий, і, водночас, неймовірно потужний. Щось схоже на невидимий міст поміж простим і складним. Поцілунки на грані фальшу, легкий петтінг.

Настає момент, коли об’єднані елементики з кліпарту формують більш-менш грандіозні картини, витвори бурної фантазії. Тут я познайомився з Macromedia Fireworks. Так, з цією крихіткою я познайомився ще у ті часи, коли вона носила прізвище Macromedia. У нас закрутився грандіозний роман. Що ми тільки разом не витворяли. Було багато цікавого і неочікуваного, перший солідний заробіток. День за днем я все глибше і глибше занурювався у її великий набір функцій, гладив її шорткатами, старався не відриватись від мишки, крутячи скролл у різні сторони.
Йшов час, ми обоє дорослішали. Fireworks змінила прізвище на Adobe. Все, що колись здавалось неможливим і складним, розтануло у потоці емоцій та думок. Дії викристалізовувались у добре продумані патерни. Я знав, куди слід натиснути для отримання бажаного результату і Fireworks відповідала мені взаємністю, доставляючи візуальні задоволення своїми барвистими фільтрами та шумами.
Перший серйозний редактор — як перші серйозні відносини, а перша серйозна картинка в ньому — як перший секс: косо, криво, з хвилюваннями, але результат є. І він не може не радувати.

А потім я познайомився з Linux. Я перестав користуватись Fireworks. Я старався подружити її з Linux’ом, та вона не піддавалась. InkScape, GIMP — всі здавались складними і чужими. Короткотривалу радість приносила Pinta (аналог mspaint?), та вона вилітала і з буфером в неї не все було впорядку. Час від часу, вони допомагали досягати результату, та більше дратували, ніж приносили задоволення.

Сьогодні я знову згадав про Fireworks, відкрив цю крихітку. Серце наповнилось теплом проведених разом вечорів, в пам’яті промайнули спільні проекти та її неймовірний вклад і пристрасть у боротьбі за їхнє виконання. Вона не гаяла часу дарма, стала соліднішою, серйознішою. Окремі риси зовнішності зазнали незначних змін, та, здається, все на краще. Сьогодні ми зустрілись у великому розширенні на полі широкоформатного монітора. У нас було безліч простору для того, щоб пригадати давні вміння. Це, взагалі-то, як їзда на велосипеді. Ти забуваєш, якщо довго ним не користуєшся; та достатньо лише сісти і закрутити педалі у ритмі серця, і все стає на свої місця: притуплюються непотрібні відчуття, зростає концентрація. З найпотаємніших закаулків мозку назовні пробиваються спогади, таланти та вміння. Згодом, ти вже не їдеш — ти летиш крізь вітер у сонячному промінні, розтинаючи простір навколо себе.

Сьогодні ми досягли цілі. Здається, все пройшло гладко і на порядок структурованіше, вище. На неї вплинули десятки UI/UX дизайнерів та адептів Adobe культури. У мене з’явились мінімальні звички розбиття великих завдань на набір простих, менших цілей, які разом формують щось вище, ідейно наповнене Ціле.

Вона прекрасна, оця Fireworks.

Shutdown, Reboot, Suspend or Hibernate with user priviliges via D-Bus

Some distros don’t allow you to
shutdown -r now
from terminal without superuser password.
Shutdown/Reboot/Suspend/Hibernate with user priviliges in Linux is possible via D-Bus. You just need consolekit and upower packages installed.

Here are the commands:

Operation D-Bus command
Suspend dbus-send --print-reply --system --dest=org.freedesktop.UPower /org/freedesktop/UPower org.freedesktop.UPower.Suspend
Hibernate dbus-send --print-reply --system --dest=org.freedesktop.UPower /org/freedesktop/UPower org.freedesktop.UPower.Hibernate
Reboot dbus-send --system --print-reply --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Restart
Shutdown dbus-send --system --print-reply --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop

Just paste them in your beloved terminal emulator and press enter :)

BlackBerry hidden key combinations

I’ll collect all the hidden key combinations in BlackBerry in this post.
Sort of wiki-page.

Combination Where Purpose
ALT+LGLG Ribbon (screen with apps) Open BlackBerry Event Log
SHIFT+BUYR Options>Status Show data/voice usage
?123+M,M, Ribbon (screen with apps) Open BlackBerry Event Log on touchscreen devices

Флеш

Дуже порадували коменти в неті до цієї новини про флеш
http://liza-bam.livejournal.com/1231845.html

I received my OCPJP certificate

Oracle Certified Professional, JAVA SE 6 Programmer

OCJP Certificate

I successfully passed Oracle Certified Professional Java Programmer Exam (formerly SCJP) a month ago. That was my birthday present. I passed right one day before my 20-th BD.

For everyone, who is willing to pass it I’d recommend just 2 things:

  1. ExamLab for SCJP 6.0 – the best mockup tests for this exam! Free, cool and deep explanations, lot’s of tests. If you can score ~60-70% in this app, you would possibly pass OCJP with a high score (~80-90%).
  2. SCJP Sun Certified Programmer for Java 6 – the so-called K&S book (Katherine Sierra and Bert Bates). If you read all the book, you’ll definitely increse your java knowledge. The best book. 100% coverage.

Have fun!

Crappy legal java code

JavaThat was hard evening.

After reading some java books, right before I went to sleep, some java code came to my mind…


class ${public void _($ $4){}}
class $<_, $, $_> {$ _;<_> $($ _){}<$> $($ _,$ $_){_=$_;}}

And that’s not the upper bound. You can enchant it the way you want, creating crazy valid useless (or even useful?) POJOs 😀

wait() and notify()

Thread Synchronization

Excerpt from old “Exploring Java” book.
It clearly states, what wait(), notify(), notifyAll() are used for and what they do.

With the synchronized keyword, we can serialize the execution of complete methods and blocks of code. The wait() and notify() methods of the Object class extend this capability. Every object in Java is a subclass of Object, so every object inherits these methods. By using wait() and notify(), a thread can give up its hold on a lock at an arbitrary point, and then wait for another thread to give it back before continuing. All of the coordinated activity still happens inside of synchronized blocks, and still only one thread is executing at a given time.
Continue reading ‘wait() and notify()’

Rutorrent + rTorrent on Debian Server

ruTorrent logoOnce, I’ve installed it myself.
Yes, in the way, everyone did this: checkout, compile with xml-rpc support, install web-server, bind everything together and enable some security.
It worked great, but after some updates, it broke up. Don’t know what happened exactly, I was a bit busy at that time.

Several weeks ago, I desperately needed torrent client, but in that environment, no applications could be installed. It was a great disappointment to find out, that me own rTorrent is down on the server. So I tried to perform mentioned actions again, but with no luck.

Right at that moment, I found out about an AWESOME!!! script, which does everything you need! It just installs

  • rTorrent
  • ruTorrent
  • your favourite web-server
  • FTP
  • Webmin

It binds everything together, and it just works!

Here’s the MAGIC link to the documentation:
http://forums.rutorrent.org/index.php?topic=608.msg4427
Everything is pretty strait-forward and troubleless.

Hint: run the downloaded script inside screen session. Script, itself, runs several minutes. It configures and compiles everything. So, please, be patient. If you have poor ssh access, it would be much better to reattach to the running screen process, after connection failure or something.

The only thing, I had to modify afterwards, was a web-server’s port, ’cause my ISP blocks port #80.
As I’ve chosen lighttpd, as my webser, I had to modify lighttpd config file
nano /usr/share/lighttpd/lighttpd.conf
and set
server.port = 1234

Enable Nimbus Look-And-Feel

Always forget how to enable it.
So put it in my blog to reference that quickly.

        try {
            for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (UnsupportedLookAndFeelException e) {
        } catch (ClassNotFoundException e) {
        } catch (InstantiationException e) {
        } catch (IllegalAccessException e) {
        }

Nimbus is really a nice and must-use vector look-and-feel.
Just compare it to the old metal:

Here you can get more information about Nimbus Look-And-Feel
http://download.oracle.com/javase/6/docs/technotes/guides/jweb/otherFeatures/nimbus_laf.html




Hosted by EOMY.NET