Interesting things about webdevelopment - version 2011-09-04

By Krzysztof Klinikowski · September 4, 2011

I'm presenting you first post with interesting things related to webdevelopment. So, here we go:

 

Oryginally by

Let's welcome Qt for Android.

By Krzysztof Klinikowski · February 10, 2011

Hello again after such a long break from writting. I was "a bit" busy playing in life but as for now I decided that I will write sometimes on my blog, maybe not as often as I used to but still :)

I made a decision to write all new entries in English, although the writing in that language sometimes causes me problems but I think that could be usefull for wider group of people .

So, not so long ago I took a steps to help one of the Russian developers in porting Qt to the Android platform. The project, is in early stage but even in so short time of lifetime has already attracted a large group of interested developers. It is already possible to use Qt for Android in your projects, however, theres still many bugs in the implementation of this...

 

One of the things that I decided to take is a something called z-ordering. This is a very useful and very important method which sorts the window in the correct order. Without it writting Qt applications on Android could be difficult (but it is possible for example using one window and QStackedWidget manipulation) so for now if you want to port any application to Android you need to rewrite almost every part of the GUI. Proper implementation of the z-ordering will eliminate this requirement. Sergey Galin, a Russian developer, which also deals with the porting of Qt to Android has started to write the implementation of z-ordering but that was really simple and have some lacks. I'm porting Qt application to Android so I decided to extend work of Sergey and polish up z-ordering implementation a bit. I hope that effects of my work will be able to enjoy really soon :)

Zródła mojego blog engine'u udostępnione.

By Krzysztof Klinikowski · August 5, 2010

Tak jak mówiłem tak i też czynię

Zwlekałem trochę z udostępnieniem źróðeł silnika, który napędza ten blog ponieważ zawierał kilka błędów ale dzisiaj wziąłem się w garść popełniając ostatnie bugfixy i udostępniłem wszystko na moim githubie. Nie jest to zaawansowany projekt, ot taki by czasem skrobnąć coś interesującego i podzielić się z tym z Wami. Warto również zauważyć, że projekt jest forkiem platformy blogowej Breta Taylora jednak został on w znacznym stopniu przepisany na nowo dodając nowe funkcje. Dodałem obsługę TinyMCe, kolorowanie kodu, tagowanie, proste stronnicowanie, całkiem nowy szablon a także przetłumaczyłem interfejs. Co ja się w sumie będę rozpisywał? Najlepiej będzie jak sami zajrzycie do repozytorium i zobaczycie co ciekawego tam jest ;)

W razie jakichkolwiek pytań wiecie gdzie mnie szukać.

Obsługa sieci Tlen.pl w Empathy? Powitajmy telepathy-oxygen.

By Krzysztof Klinikowski · August 3, 2010

Witam ponownie.

Jakiś czas nie pisałem a ale na dniach postaram się to nadgonić.

 

Sporo użytkowników prosiło mnie o obsługę tlena w Empathy. Bałem się do tego podchodzić jako, że subskrypcja w Tlenie to istny pain-in-the-ass od strony kodu ale w wolnym czasie naskrobałem troszkę i... i tak narodził się telepathy-oxygen - obsługa sieci Tlen.pl w Telepathy/Empathy. Przyznam, że jest to dopiero podstawowa obsługa protokołu, która obejmuje:

  • Odbieranie/wysyłanie wiadomości
  • Powiadamianie o pisaniu (tzw. typing notify, odpowiednik "pisaka" w Gadu Gadu)
  • Subskrypcje
  • Aliasy/grupy/synchronizacja rostera
  • Awatary

Na próżno więc szukać tu wysyłania/odbierania plików (ale pisze się), odbierania/wysyłania obrazków (jest napisane od strony protokołu ale muszę to jeszcze jakoś ładnie połączyć z samym Empathy), Tlen.Czatów (błędy w telepathy-python, które już poprawiłem i czekam tylko na wydanie nowej wersji by zabrać się do pracy nad tym) czy rozmów audio/video (ktoś tego w ogóle używa?). Jeśli jednak zainteresowanie wtyczką będzie to będę sukcesywnie poszerzał jej funkcjonalności :)

 

W tym momęcie warto wspomnieć, że na dzień dzisiejszy wtyczkę można doinstalować tylko ze źródeł. Jak to zrobić? Zapraszam do poniższej lektury:

  1. Pobieramy źródła z gita komendą:
    git clone git://git.collabora.co.uk/git/user/kkszysiu/telepathy-oxygen.git
    
  2. Przechodzimy do nowo powstałego katalogu i wydajemy tam takie polecenia:
    ./autogen.sh
    ./configure --prefix=/usr --libexecdir=/usr/lib/telepathy
    make
    sudo make install
    
  3. Następnie jeszcze tylko:
    killall mission-control-5
    
  4. I uruchamiamy Empathy.

 

Od tej pory powinniśmy mieć obsługę Tlena w naszym ulubionym komunikatorze.

Jak korzystać z Tlen7 SDK pod linuksem?

By Krzysztof Klinikowski · July 25, 2010

Jako że piszę obsługę sieci Tlen.pl w komunikatorze Empathy i chcę by było to zrobione jak należy, musiałem napisać coś na wzór Protocol Hooka z Tlena 6. Protocol Hook to wtyczka używana do podglądu wysyłanych i odbieranych stanz XML. Dzięki temu łatwiej jest podejrzeć jak działa owy protokół. Potrzebowałem podobnej wtyczki dla Tlena 7 i postanowiłem ją napisać. Używam jednak jedynie Linuksa a pod ten system nie dostaliśmy jeszcze oficjalnego SDK. Musiałem sobie z tym poradzić i udało się. Opisze mniej więcej jak skompilowałem przykładową wtyczkę dołączoną do windowsowego SDK.

 

Po pierwsze wchodzimy na forum Ekipy i pobieramy SDK dla Windowsa 7 stąd http://ekipa.tlen.pl/forum/index.php?showtopic=11752 .

 

Następnie rozpakowujemy je i wchodzimy do katalogu tlen7_sdk/plugins/sample_plugin. Usuwamy stamtąd plik CmakeCache.txt.

 

Teraz musimy wyedytować plik CmakeLists.txt.

Linia 10:

set (QT_RCC_EXECUTABLE ../../qt/bin/rcc.exe)

Zamieniamy na:

set (QT_RCC_EXECUTABLE rcc)

 

Następnie:

include_directories(
../../include
../../qt/include
../../qt/include/Qt
../../qt/include/QtCore
../../qt/include/QtXml
../../qt/include/QtGui
../../qt/include/QtNetwork
)

Ja zamieniłem to na:

include_directories(
/usr/include
/usr/include/qt4
/usr/include/qt4/Qt
/usr/include/qt4/QtCore
/usr/include/qt4/QtXml
/usr/include/qt4/QtGui
/usr/include/qt4/QtNetwork
/home/kkszysiu/Pulpit/tlen7_sdk/include
/home/kkszysiu/Pulpit/tlen7_sdk/include/plugin
)

Pierwszych kilku linijek nie muszę chyba tłumaczyć. Tam właśnie trzymam pliki nagłówkowe QT. Ostatnie dwie linijki to pliki nagłówkowe Tlena 7 których również potrzebujemy.

 

Linijkę:

link_directories(../../lib ../../qt/lib)

Zamieniamy na:

link_directories(/home/kkszysiu/Pulpit/tlen7_sdk/lib /home/kkszysiu/Pulpit/tlen7_sdk/qt/lib)

Musiałem jeszcze wywalić linię:

target_link_libraries(
sample_plugin
tlen_plugin
tlen_gui_context_menu
tlen_gui_chat_window
tlen_gui_chat_manager
tlen_data
${QT_QTCORE_LIB}
)

Prawdę mówiąc nie wiem dlaczego.

 

W terminalu przechodzimy do katalogu tlen7_sdk/plugins/sample_plugin i wklepujemy:

mkdir build
cd build
cmake ..
make

Jeśli nie dostaniemy żadnych błędów w katalogu build powinniśmy mieć plik sample_plugin.o2x, który jest naszą przykładową wtyczką. Kopiujemy ją do katalogu plugins w naszym tlenie i wygrywamy w życie :)

 

I na koniec mój przykładowy plik CmakeLists.txt:


project(tlen_sample_plugin)

cmake_minimum_required(VERSION 2.4.0)

if(COMMAND cmake_policy)
cmake_policy(SET CMP0003 OLD)
endif(COMMAND cmake_policy)


set (QT_RCC_EXECUTABLE rcc)


MACRO (QT4_ADD_RESOURCES outfiles )

FOREACH (it ${ARGN})
GET_FILENAME_COMPONENT(outfilename ${it} NAME_WE)
GET_FILENAME_COMPONENT(infile ${it} ABSOLUTE)
GET_FILENAME_COMPONENT(rc_path ${infile} PATH)
SET(outfile ${CMAKE_CURRENT_BINARY_DIR}/qrc_${outfilename}.cxx)
# parse file for dependencies
FILE(READ "${infile}" _RC_FILE_CONTENTS)
STRING(REGEX MATCHALL "[^<]*" _RC_FILES "${_RC_FILE_CONTENTS}")
SET(_RC_DEPENDS)
FOREACH(_RC_FILE ${_RC_FILES})
STRING(REGEX REPLACE "^" "" _RC_FILE "${_RC_FILE}")
SET(_RC_DEPENDS ${_RC_DEPENDS} "${rc_path}/${_RC_FILE}")
ENDFOREACH(_RC_FILE)
ADD_CUSTOM_COMMAND(OUTPUT ${outfile}
COMMAND ${QT_RCC_EXECUTABLE}
ARGS -name ${outfilename} -o ${outfile} ${infile}
MAIN_DEPENDENCY ${infile}
DEPENDS ${_RC_DEPENDS})
SET(${outfiles} ${${outfiles}} ${outfile})
ENDFOREACH (it)

ENDMACRO (QT4_ADD_RESOURCES)

IF(CMAKE_BUILD_TYPE)

ELSE(CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Debug)
ENDIF(CMAKE_BUILD_TYPE)

set(QT_QTCORE_LIB QtCore4.lib )
set(QT_QTGUI_LIB QtGui4.lib )
set(QT_QTNETWORK_LIB QtNetwork4.lib )
set(QT_QTXML_LIB QtXml4.lib )

IF(CMAKE_BUILD_TYPE STREQUAL Debug)

IF( CMAKE_COMPILER_IS_GNUCXX )
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall -O0 -fPIC")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -Wall -O0 -fPIC")
ENDIF( CMAKE_COMPILER_IS_GNUCXX )


ELSE(CMAKE_BUILD_TYPE STREQUAL Debug)

add_definitions(
-DQT_NO_DEBUG -DTLEN_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_WARNING_OUTPUT -DNDEBUG
)

IF( CMAKE_COMPILER_IS_GNUCXX )
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -O2 -fPIC")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -O2 -fPIC")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS} -Wall -O2 -fPIC")
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS} -Wall -O2 -fPIC")
ENDIF( CMAKE_COMPILER_IS_GNUCXX )


ENDIF(CMAKE_BUILD_TYPE STREQUAL Debug)

SET(CMAKE_COLOR_MAKEFILE TRUE)
set(CMAKE_VERBOSE_MAKEFILE ON)


IF( CMAKE_COMPILER_IS_GNUCXX )

ELSE( CMAKE_COMPILER_IS_GNUCXX )
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /Oi")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Oi")
ENDIF(CMAKE_COMPILER_IS_GNUCXX)


include_directories(
/usr/include
/usr/include/qt4
/usr/include/qt4/Qt
/usr/include/qt4/QtCore
/usr/include/qt4/QtXml
/usr/include/qt4/QtGui
/usr/include/qt4/QtNetwork
/home/kkszysiu/Pulpit/tlen7_sdk/include
/home/kkszysiu/Pulpit/tlen7_sdk/include/plugin
)

#link_directories(../../lib ../../qt/lib)

link_directories(/home/kkszysiu/Pulpit/tlen7_sdk/lib /home/kkszysiu/Pulpit/tlen7_sdk/qt/lib)

qt4_add_resources(RCC_SRCS sample_plugin.qrc)

add_library(sample_plugin SHARED TlenSamplePlugin.h TlenSamplePlugin.cpp ${RCC_SRCS})

set_target_properties(sample_plugin PROPERTIES PREFIX "" SUFFIX ".o2x")

#target_link_libraries(
# sample_plugin
# tlen_plugin
# tlen_gui_context_menu
# tlen_gui_chat_window
# tlen_gui_chat_manager
# tlen_data
# ${QT_QTCORE_LIB}
#)

Another day goes by...

By Krzysztof Klinikowski · July 22, 2010

Witam ponownie.

Jak niektórzy zapewne wiedzą jakiś czas temu dałem szansę blogowemu silnikowi Wordpress hostowanemu w domienie xlinux.pl. Moje wypociny nadal można znależć pod adresem http://xlinux.pl/kkszysiu/ jednak jakoś platforma ta nie spełniła moich oczekiwań i znowu wracam na stare śmieci. Jak widzicie blog przeszedł mały redesign i zyskał kilka funkcjonalności. Nadal zamierzam rozwijać tę platformę blogową, dodając do niej co jakiś czas nowe funckjonalności a dla programistów ogłaszam, że za kilka dni otworze kod źródłowy tej oto platformy blogowej, która powstaje z użyciem Pythonowego frameworka Tornado i Google App Engine. Tymczasem jednak zapraszam do zmiany adresu RSSa na ten. Od jutra startuję pełną parą z pisaniem tutaj ciekawych notek dotyczących GNOME, Linuksa, Empathy oraz własnych projektów.

Empathy 2.30 wydane!

By Krzysztof Klinikowski · March 29, 2010

 

W końcu!

Po 6 miesiącach długich prac mamy co świętować albowem dobiliśmy numerek Empathy do wersji 2.30. Nie udało się wypełnić całego roadmapu ale i tak jest się z czego cieszyć. Pidgin już pewnie nigdy nie osiągnie takiej aktywności developerów. Ale przejdźmy do najciekawszej rzeczy czyli co przynosi nam nowe stabilne wydanie:

  • Ulepszone okno zarządzania kontami
  • Okno zarządzania kontami działa teraz jako osobny proces i może być teraz otwarte z ustawień GNOME bez konieczności włączania komunikatora.
  • Ulepszenia w interfejsie. Teraz możemy zobaczyć status naszych kont na liście oraz szczegółowy status jeśli klikniemy na któreś z kont.Okno zarządzania kontami
  • Jest również nowa opcja do konfigurowania kont Facebooka.Facebook
  • Sporo ulepszeń zyskał również asystent pierwszego uruchomienia. Teraz powinien być bardziej wygodny. Aktualizacji uległa też opcja konfiguracji tzw. link-local XMPP (Osoby z naszej sieci).Asystent
  • Lepsza obsługa czatów/konferencji
    • Empathy wspiera teraz sporo komend znanych z popularnego IRCa m. in. /join, /topic i /nick.
    • Możliwe jest teraz również dołączenie do pokojów chronionych hasłem.Czaty zabezpieczone hasłem
  • Lepsze raportowanie błędów
    • Aby nie zaśmiecać naszego pulpitu zbytecznymi oknami teraz gdy coś pójdzie nie tak i nie uda nam się połączyć z siecią na naszej liście kontaktów pokaże się stosowny pasek informujący nas o tym.Błąd
    • Podobną funkcjonalność zyskały również rozmowy VOIP i teraz w razie problemu pojawi nam się stosowny komunikat.
  • Inne funkcjonalności
    • Od teraz możesz łatwo przesyłać pliki przeciągając je na wybrany kontakt lub okno rozmowy.
    • Okno rozmowy zyskało ładny pasek wyszukiwania.Szukajka
    • Linki w wiadomościach statusów są teraz klikalne. A do tego poprawiono ponad 310 błędów (mówimy tu o samym Empathy).

 

 

Tłumaczenie: http://cass.no-ip.com/~cassidy/blog/index.php/post/2010/03/29/Empathy-230-released

Facebook i Empathy

By Krzysztof Klinikowski · March 11, 2010
Jak zapewne wiecie od kilku tygodni Facebook pozwolił na używanie ich protokołu (tzw. Facebook chat) za pomocą klienta XMPP. Jest to dobra wiadomość, która sprowadza ona wielu nowych użytkowników na "jedyną, słuszną drogę". Jednym z głównych celów Empathy jest dostosowanie go do potrzeb wielu użytkowników, również tych zmniej zaawansowanych. Dlatego też Cassidy - jeden z developerów komunikatora, wprowadził kilka dni temu nową funkcjonalność. Dodał on protokół "Facebook" do listy dostępnych protokołów w oknie "Konta". Jest to dość mała zmiana ale całkiem użyteczna. Funkcjonalność pojawia się od wersji 2.29.91 (wydanie deweloperskie) a stabilnie pojawi się w wersji 2.30.

Co nowego w Gnome? [2]

By Krzysztof Klinikowski · February 26, 2010
Prawda jest taka, że wpis ten powinien pojawić się 21 lutego i jest podsumowaniem zeszłego tygodnia ale nie miałem czasu go wydać aż do dziś a zaszło kilka interesujących zmian w Gnome. A więc przez cały tydzień dokonano 2115 commitów w 218 projektach przez 260 developerów (629 commitów to tłumaczenia). Podsumowanie ważniejszych zmian: * Colin Walters zoptymalizował inwokacje funkcji w gjs (bindingi javascript, używane m. in. w GNOME Shell) ([GNOME bug 604076](http://bugzilla.gnome.org/show_bug.cgi?id=604076)). * Również w gjs, Johan Dahlin dodał początkową implementację Cairo. * W GNOME Shell Floran Müllner dodał efekt zanikania ikon na pulpicie przy przechodzeniu na "otoczenie". ([GNOME bug 600999](http://bugzilla.gnome.org/show_bug.cgi?id=600999)) * W Gnumeric został naprawiony błąd związany z przetrzymywaniem wartości zmiennoprzecinkowych w ODF . ([GNOME bug 610372](http://bugzilla.gnome.org/show_bug.cgi?id=610372)) * Tomas Bzatek naprawił gvfs tak, by poprawnie przetrzymywał hasła dla ssh/sftp używając GNOME Keyring jeśli jest to wymagane. ([GNOME bug 580024](http://bugzilla.gnome.org/show_bug.cgi?id=580024)) * gparted powinno powiadamiać teraz o wymaganych pakietach jeśli nie jest w stanie odczytać systemu plików ([GNOME bug 576908](http://bugzilla.gnome.org/show_bug.cgi?id=576908)) * Dokumentacja gcalctool została przepisana zgodnie z nowym formatem Mallard. * Rygel został zaktualizowany i wspiera teraz uploading. * Lapo Calamamandrei dodał dwie ostatnie brakujące ikony nawigacji do nowych ikonek GNOME. * Kupfer zyskał wtyczkę do podglądu plików w skompresowanych archiwach. * Alexander Kojevnikov zaimplementował obsługę specyfikacji "media art storage" w Banshee (a raczej jej uproszczoną wersję). ([GNOME bug 520516](http://bugzilla.gnome.org/show_bug.cgi?id=520516)) Źródła: http://blogs.gnome.org/commitdigest/2010/02/21/issue-72/

Krótki opis architektury Telepathy.

By Krzysztof Klinikowski · February 26, 2010
Nie mam talentu do pisania ciekawych artykułów ale jeśli komuś to nie przeszkadza, zawsze może zajrzeć na mojego bloga i troszkę sobie poczytać. Dziś chciałbym pokrótce opisać architekturę frameworka Telepathy. Celem powstania Telepathy była chęć ustandaryzowania komunikacji w czasie rzeczywistym tj. "instant messengingu", IRCa i rozmów audio/wideo oraz dostarczenie łatwego frameworka do ich obsługi. Na dzień dzisiejszy dzięki Telepathy zyskujemy więc bardzo ciekawy i ujednolicony pseudo-protokół, który jest łatwy i elastyczny zarówno dla developerów implementacji nowych protokołów jak i klientów. Dzięki wykorzystaniu D-Busa framework jest bardzo elastyczny i niezależny od języka programowania. Jakie korzyści płyną z takiej architektury? * Porzucenie poprzednich idei budowania komunikatorów internetowych w oparciu o pojedyńczą i skomplikowaną aplikację na rzecz rozdzielenia funkcjonalności na mniejsze komponenty. * Wprowadzenie ustandaryzowanego interfejsu tak, by różne protokoły komumnikacji (MSN, Tlen, GG, XMPP) i komunikatory mogły być łatwo ze sobą zintegrowane. * Komponenty implementujące określone funkcjonalności są ładowane "na żądanie" i nie muszą być trzymane w pamięci cały czas. * Dzięki takiej architekturze jeśli któryś z komponentów "padnie", zostanie on po prostu zresetowany i nie zakłóci działania innych komponentów. # Menadżery połączeń (Connection Managers) Menadżery połączeń to komponenty odpowiedzialne za obsługę protokołów komunikatorów lub serwerów VOIP. Jeden menadżer połączeń może obsługiwać kilka protokołów (np. telepathy-haze) i kilka połączeń na raz, zależnie od implementacji. # Mission Control Mission Control to jedyna usługa która musi być działać by Telepathy mogło być używane. Dostarcza ona ważnych funkcjonalności do interakcji z frameworkiem. (np. zarządzanie kontami i kanałami, uruchamianie określonych menadżerów połączeń) Dostarczone są również biblioteki, które upraszczają proces budowania klientów Telepathy (np. telepathy-glib lub telepathy-qt4). Nie da się ukryć, że taka architektura całkiem dobrze rokuje na przyszłość. Telepathy ciągle się rozwija i jest to widoczne z wersji na wersję. Coraz więcej ludzi przekonuje się również do używania Empathy (najpopularniejszego klienta opartego o ten framework). Bardzo cieszy mnie taki stan rzeczy zarówno z perspektywy developera jak i użytkownika.