Archive for September, 2005

Linux DC++

Според мене најдобрата апликација за размена на датотеки (или leech-ување :)), DC++ кој за Виндоус е слободен софтвер, доби свој порт за под ГНУ/Линукс (исто така ОЈЛ-иран). Ви треба gcc >=3.4 и најновите libstdc++ библиотеки.

Еве неколку слики од екранот, tgz пакет за Слеквер и rpm пакет (направен за федора). Ако користите убунту, трансформирајте го РПМ-то во ДЕБ пакет.

Што сакаме да видиме сите

Еден текст ме натера да размислам за тоа како би се користел ГНУ/Линукс во иднина. Имено, компанија како Гугл која го поддржува слободниот софтвер на високо ниво да „склопи“ оперативен систем кој се надеваме ќе им парира на неслободните алтернативи и кој би стоел како стандард за ГНУ/Линукс дистрибуција. Зошто сакам да го видам ова?

Ако за пример ја земеме нај-пријателската дистрибуција Мандрива Линукс, тогаш секој може да каже најмалку 5 мани кои би сакале да ги нема во неа. Тоа важи нели за секој софтвер глобално. Но на тоа не се жалат корисниците на Виндоус. Тие користат тоа што им се сервира бидејќи и да се пожалат нема кој да ги чуе. Така ако Гугл се актуелизира со оперативен систем базиран на Линукс и изработен од нивни тимови, со оглед на нивните претходни проекти и активности можеме да сметаме на солидна ГНУ/Линукс дистрибуција која на некој начин би поставила стандард во терминот ГНУ/Линукс кај крајните корисници (кога би се споменал Линукс, тоа би била таа дистрибуција). Крајните корисници, одејќи по логиката на лиценцирањето, ќе користат слободен софтвер (во текстот хипотетички се споменува ГуглОС како име за системот). Своите потреби ќе ги прошируваат и надополнуваат бидејќи нели станува збор за слобода на модифицирање и прилагодување. Ќе се развива систем од компанија која веќе му парира на Мајкрософтовите Веб производи, а можеби и веќе ги „шие“. Тоа се случи еднаш порано и со МСН, пропадна. Во иднина би било добро Гугл да превземе пазар со свој систем, своја мрежа (која е веќе актуелна) и свој софтвер. На тој начин ќе се добие ГНУ/Линукс систем, мрежа и слободен софтвер. Подобро амин.

Целиот текст ОВДЕ

Лугола има нов search engine

Овде!

А у јутро кад народњаци доџу

Зоки за претседател !!

Повеќе

Линукс мултимедијално студио

Линукс мултимедијалното студио, скратено LMMS, како што стои во описот на проектот, е слободна алтернатива за софтверските пакети како што се Fruity Loops, CuBASE и Logic. Иако сеуште далеку од тоа, воодушевен сум бидејќи успеав да направам некој ритам проследен со низа ефекти, нешто што досега со ниту една друга апликација не успеав да го направам. Пробајте го…вреди!

Малку off topic

Вчера чекав роденден и беше прекрасно. Случајно едни девојчиња (другарки мои кои ги запознав преку мојата девојка) ми донесоа мало крокодиче кое уште веднаш ми заличи на Konqui, иако Konqui e змеј (кој личи на кроко), па го крстив Конки.

За роденденот добив и шал, антички свечнаќ од Англија, Шримад Бхагаватам, касичка за пари, „Автосперски водич низ галаксијата“ сите делови, The Beach (филмот), ланец со месечината, маска во форма на глава од слон, држач за етерично масло кој стои врз слон, плоча со ликот на Шри Буда (jaya), и многу многу љубов од многу прекрасни луѓе кои ги обожавам. Многу сум среќен кога добивам подароци, морав да споделам со вас :)

Омилена статија

Фала уфо! Ова е закон Uncyclopedia (денес открив) :)

За Бил Гејтс:

In one word: Satan. Real child of Your Mom. He was released in a beta version by George Washington in the early 1800s. He died at birth. He was later re-incarnated and stole billions of dollars from the government with minor help from Matthew Lesko. Today, he uses this money to buy psychotic toys, such as Chucky and family, to assassinate people. He drives around in a Zamboni, since he doesn’t care about the environment or gas mileage.

Qt Упатства, IV дел

Активирање на надворешни процеси во Qt апликации

Qt е во можност да активира надворешни процеси од вашите апликации. Може да комуницира со нив, да пишува во стандарден влез (stdin) и да чита од стандарден излез (stdout), како и да чита од стандарден излез за грешки (stderr). Во секој случај секоја извршна датотека може да биде извршена директно. Едно важно предупредување во помошната документација на Qt вели дека Qt колку и да може да манипулира со овие надворешни процеси, не може да изигрува школка за извршување низи од команди. Пример, доколку командата која се извршува во школка е:

# dmesg

може да се изврши како надворешен процес со имплементација во Qt код, но:

# dmesg|grep nesto

не можеме да ја извршиме директно како една команда. Што во тој случај поволно би било да ја спакуваме командната линија во скрипта, која би изгледала вака:


// skripta.sh—

#!/bin/bash

dmesg|grep nesto

// kraj skripta.sh

и да ја зачуваме со наставка .sh;

Потоа му задаваме извршно знаменце на скриптата (chmod +x skripta.sh) и од нашиот код можеме да ја извршиме како надворешен процес.

Класа која се грижи за сите овие работи и совршено и лесно се применува со нејзините методи и променливи е QProcess. Со оваа класа може да се прават веќе споменатите работи, како и да се испраќаат аргументи кон одредени команди (пример, ls -l, l е аргументот што треба да се испрати) како карактерен (char[n]) знак/низа.

Името на процесот кој сакаме да се изврши може да се зададе или во конструкторот на класата (дефинирајќи го објектот) или преку методот addArgument(const QString & arg) и setArguments(const QStringList & args). Можеме кога сакаме да го активираме процесот со start(QStringList * env = 0) или launch(const QByteArray & buf, QStringList * env = 0). И двата методи враќаат логичка вредност (bool) но се разликуваат според аргументите што ги примаат.
Статусот на процесот (дали е извршен, што вратил, што им праќаш и сл) може да се види преку низа методи, exitStatus(), isRunning(), readStdout(), readStderr(), writeToStdin(), секој со различен тип и број аргументи.

1.#include
2.#include
3.#include
4.
5.int main(int argc,char* argv[])
6.{
7. QApplication myApplication(argc,argv);
8.
9. // QString променлива која ќе го прими името на процесот
10. QString command;
11.
12. command=”konqueror”;
13.
14. /* Следува креирањето на инстанцата на QProcess класата која ќе ја иницијализираме во * конструкторот со QString променливата од погоре. Дефиниција на ваква променлива * може да се реализира и со динамичко доделување меморија. */
15.
16. QProcess myProcess(commandAndParameters);
17.
18. // Активирај го процесот ‘konqueror’.
19. myProcess.start();
20.
21. return 0;
22.}

Тоа што е во коментарите, објаснува се. Креираме стринг променлива и во неа ја ставаме вредноста ‘konqueror’ која впрочем е името на процесот konqueror што сакаме да го активираме, значи по активирањето на овој процес преку QProcess променливата ќе се активира апликацијата (прелистувачот) Konqueror. Сосема идентично како и кога би напишале

# konqueror

од командната линија.

Ако сакаме процесот да биде активиран кога ќе настани некакви испраќање на некој сигнал (пример clicked()), тогаш тоа го правиме исто како и во претходниот дел од упатствата (третиот), некаде во кодот (не било каде, таму каде што треба), ставаме:

connect(pushButtonName, SIGNAL(clicked()), myProcess, SLOT(myProcessStart()) );

Сега произлегуваат други прашања. Што да има во myProcessStart() ? Директно одам на тој метод (сопствен метод):

void myProcessStart()
{
myProcess->start();
}

Што забележувате? Дека во овој случај myProcess променливата мора (!) да е дефинирана како глобална променлива со динамичко доделување на слободен простор.

Читање на стандарден излез и стандарден излез за грешки

Стандарден излез е она што програмата го прикажува по нејзиното извршување. Доколку сето тоа се сведе на обид за извршување, враќа информации во стандардниот излез за грешки. Пример, ако konqueror процесот е успешен, тој може да врати некои информации кон stdout, како на пример кои библиотеки се вчитани и сл. Но излезот може да биде и NULL, т.е. само да се изврши процесот.
Ако пак врати некоја информација и процесот не се извршува тогаш мора да го читаме stderr излезот (пример апликацијата бара дополнителни пакети за да работи или паѓа веднаш на стартот).
Како да видите што се случило со процесот?
Повторно користете го механизмот на сигнали и слотови. Кога сум веќе тука надвор од контекст, мора да споменам дека има некоја тенка линија според која се разликуваат Настаните (Events) од сигналите, но во принцип се добива ист резултат. Настаните ќе ги разгледаме во некој од следните делови. Кој сигнал и кој слот треба да се поврзи? Повторно ќе е потребен еден наш метод (слот) кој ќе го прикажува тоа што QProcess променливата ќе го врати. Еве конкретен пример:

connect(myProcess, SIGNAL(readyReadStdout()), this, mySlotReader()) );

Значи како испраќач на сигналот е инстанцата myProcess на QProcess. Штом го испрати сигналот readyReadStdout() му кажува на апликацијата дека е спремна да чита од стандардниот излез и да праќа каде што треба (кон слотот, mySlotReader()). И во овој случај ќе имаме во предвид (што е многу важно) дека инстанцата myProcess мора да е дефинирана на глобално ниво.

void mySlotReader()
{
QString output(myProcess->readLineStdout());

QMessageBox::information(this, trUtf8(“Порака”), tr(output));
}

за stdErr е сосема идентично. Единствена разлика е името на сигналот што треба да го пратиме, во случајот readyReadStderr(), и името на методот преку кој ќе ја прочитаме пораката за настанатата грешка.

connect(myProcess, SIGNAL(readyReadStderr()), this, mySlotErrReader()) );

void mySlotErrReader()
{
QString output(myProcess->readLineStderr());

QMessageBox::information(this, trUtf8(“Порака”), tr(output));
}

Мала забелешка. Доколку не сте сигурни што ќе врати процесот, имплементирајте ги и поврзете ги двата методи, така едниот ќе прати за stdout, а другиот за stderr.
Тоа е тоа. Имплементацијата во кодот е во зависност од тоа што ви е потребно. Разгледајте ја документацијата на Тролтек за QProcess по што нештата ќе станат далеку појасни. Патем, има и пример за QProcess што доаѓа со Qt.

Александар Балаловски
aleksandar.balalovski@gmail.com

KDE 3.5 бета

Ова ќе биди јако. Се спремаат на големо да ги имплементираат можностите на Карамба во 4ката. Јас во 3.5 не гледам големи промени на изгледот макар што функционалностите се далку подобри и постандардизирани.

КДЕ 3.5 ‘Kanzler’

Напредок

Ова го видов како потпис на QtForum.org :)

C:
printf("%10.2f", x);
C++:
cout < < setw(10) << setprecision(2) << showpoint << x;
Java:
java.text.NumberFormat formatter=java.text.NumberFormat.getNumberInstance();
formatter.setMinimumFractionDigits(2);
formatter.setMaximumFractionDigits(2);
String s = formatter.format(x);
for (int i = s.length(); i < 10; i++) System.out.print(' ');
System.out.print(s);

Next Page »