Dec 10 2009

Google Chrome Beta dostepna dla Linuxa

google-chrome-logoPare dni temu dostalem maila informujacego o dostepnosci Google Chrome dla systemu Linux. Oto kilka ciekawostek od zespolu Google Chrome, cytujac orginalny email:
~60 000 wierszy kodu specjalnie dla Linuksa,
23 wersje deweloperskie,
2713 poprawionych bledow w wersji Linux,
12 zewnetrznych wspolpracownikow pracujacych nad bledami w kodzie Google Chrome dla Linuksa oraz 48 zewnetrznych tworcow kodu

Paczke sciagamy z oficjalnej strony GC. Do wyboru, wersje 32 i 64 bit w debach (Debian/Ubuntu) i rpm (Fedora/openSUSE).

Podczas pierwszego uruchomienia, Chrome zaproponuje import ustawien – historia, ulubione, zakladki, wyszukiwanie, hasla – z innych przegladarek, np. Firefox’a.

gc-import-1gc-import-2

Mozemy pominac ten krok dla czystej konfiguracji Google Chrome. Wyszukiwarka, jak nie trudno sie domyslic – Google, ktora mozemy zmienic na Onet, WP, a nawet Bing ;) .
Technicznie nieco kuleje podobnie zreszta jak Safari (WebKit) – css’y, i wyswietlanie grafik, tj .ico.
google-chrome-linux
Zapraszam do testowania.


Nov 28 2009

Kubek z Tuxem

Kubkow jest pelno, ale z Tuxem i jeszcze prawie wlasnorecznie wydrukowany to juz cos.
Przedstawiam moj wlasny, juz lekko przechodzony, ale nadal wspanialy :D

Tux Ubuntu Kubek

kubek-ubuntukubek-tux

A tutaj graficzka przygotowana na podstawie wytycznych zaprzyjaznionej drukarni, nic tylko drukowac :)


Nov 11 2009

Polaczenie ssh w Ubuntu

Na poczatek instalujemy openssh-server na komputerze, z ktorym bedziemy sie laczyc – w moim przypadku 192.168.1.5 (zdalny)

1. Instalujemy serwer ssh

czlowiek@zdalny:~$ sudo apt-get install openssh-server

2. Otwieramy port 22

czlowiek@zdalny:~$ sudo iptables -I INPUT -p tcp --dport 22 -j ACCEPT

3. Restartujemy serwer

czlowiek@zdalny:~$ sudo /etc/init.d/ssh restart
 * Restarting OpenBSD Secure Shell server sshd                [ OK ]

4. Teraz mozemy sie juz laczyc

czlowiek@maszyna:~$ ssh czlowiek@192.168.1.5
czlowiek@192.168.1.5's password:
Linux zdalny 2.6.31-15-generic #49-Ubuntu SMP Fri Nov 6 09:52:03 UTC 2009 i686
...
Last login: Wed Nov 11 00:23:31 2009 from 192.168.1.1
czlowiek@zdalny:~$ sudo apt-get moo
         (__)
         (oo)
   /------\/
  / |    ||
 *  /\---/\
    ~~   ~~
...."Have you mooed today?"...
czlowiek@zdalny:~$

Gdybysmy chcieli zmienic, naprzyklad port to zapraszam do pliku /etc/ssh/sshd_config.
Jezeli mamy uruchomiona nakladke ufw

czlowiek@zdalny:~$ sudo ufw status
Status: active

to tak otwieramy porty

czlowiek@zdalny:~$ sudo ufw allow 22/tcp

tak zamykamy

czlowiek@zdalny:~$ sudo ufw deny 22/tcp

Oct 29 2009

Premiera Ubuntu 9.10

Ubuntu: For Desktops, Servers, Netbooks and in the cloudDostepny jest juz najnowszy Ubunciak. Mozna go pobrac stad. A tutaj zapoznac sie z nim.

Tak w skrocie … zmieniono jednak Pidgina na Empathy. Firefox juz w wersji 3.5, Rythmbox, Totem, pelen pakiet Open Office 3.0. Ubuntu One – iFolder, mozna juz powiedziec, ze konkurent Dropbox’a. Software Center z podzialem na kategorie, tj. Edukacja, Gry, Dzwiek i Wideo, Grafika, Biuro, no i Programowanie (warte uwagi Ubuntu Quickly). W kategorii gier mamy ponad 400 darmowych pozycji, ale to oczywiscie nie wszystko.

Troche zmieniony domyslny wyglad, kilka nowych tapetek i ikonek, ale najwazniejsza jest wydajnosc.

Kernel 2.6.31, usprawniona grafika Intela lub ATI. W kernelu znalazla sie tez obsluga USB 3.0. EXT4, GRUB 2, GNOME 2.28 lub KDE 4.3.1.

Dostepne odmiany.
Oficjalki:
- Kubuntu,
- Edubuntu,
- Ubuntu Server Edition,

Uznane:
- Xubuntu
- Ubuntu Studio
- Mythbuntu

a tutaj dostepna polska wersja.


Oct 15 2009

Watki w C

Po tym jak napisalismy i uruchomilismy nasz programik helloworld, mozemy teraz przejsc do bardziej ciekawych rzeczy. Na rozgrzewke proponuje pare watkow. Naszymi bohaterami beda, zbieracze zbierajacy ziarno z pola i znoszacy je do spichlerza.

Czym jest watek? Nie wiem jak w innych systemach, ale w unixach jest to proces, wykonywany w watku glownym, ktory jest procesem ;) . Dobrze, jak juz wiemy co to jest watek to przejdziemy dalej.

Tworzymy plik programu

czlowiek@maszyna:~$ nano seeds.c

Dolaczamy pliki naglowkowe

#include <stdio.h>
#include <string.h>
#include <pthread.h>

Tworzymy globalne przechowywacze oraz strukture wlasciwosci zbieracza

int grain; // ziarno na polu
int granary; // ziarno w spichlerzu
 
// struktura wlasciwosci zbieracza
struct collector
{
	char name[32]; // nazwa zbieracza
	int seeds; // ilosc zebranych ziaren
	int performance; // wydajnosc
};

I funkcje watku zbieracza – bedzie wywolywana podczas kazdego utworzenia

void* collect_seeds (void* collector_data)
{
	// pobranie danych zbieracza
	struct collector *data;
	data = (struct collector *) collector_data;
 
	// zebranie ziarna
	int collected;
	collected = data->performance;
	if (collected <= grain) {
		grain = grain - collected;
	} else {
		collected = grain;
		grain = 0;
	}
 
	// aktualizacja danych zbieracza
	data->seeds = data->seeds + collected;
	printf ("%s zebral %i\n", data->name, collected);
 
	// zwrocenie ilosci zebranych ziaren
	return (void*) collected;
}

A teraz watek glowny

int main (int argc, char *argv[])
{
	// ustalenie ilosci ziarna
	if (argc == 2 && atoi(argv[1]) > 0) {
		grain = atoi(argv[1]);
	}
	if (grain == 0)
		grain = 1000;
	granary = 1; // nie wymietli wszystkiego ; )
 
	// mieszadlo liczb losowych
	srand (time (0));
 
	// ustalanie danych zbieraczy
	struct collector collector1;
	strncpy (collector1.name, "Dziwigor", sizeof (collector1.name) - 1);
	collector1.seeds = 0;
	collector1.performance = rand() % 10 + 1; // losowanie wydajnosci
 
	struct collector collector2;
	strncpy (collector2.name, "Niesiebud", sizeof (collector2.name) - 1);
	collector2.seeds = 0;
	collector2.performance = rand() % 10 + 1;
 
	printf ("Ziarno na polu: %i ziaren\n", grain);
	printf ("Ziarno w spichlerzu: %i ziaren\n", granary);
	printf ("Zaczely sie zniwa\n\n");
 
	int collected_seeds;
 
	// wskazniki do watkow zbieraczy
	pthread_t thread1;
	pthread_t thread2;
 
	// petelka dopoki nie zostanie zebrane cale ziarno
	while (grain > 0) {

Do tej pory luzik wszystko wiadomo, tworzenie i ustalanie wartosci zmiennych, no i teraz dochodzimy do najwazniejszego elementu programiku – wyzwalanie watkow

Utworzenie watku

		// utworzenie watku Dziwigora
		pthread_create (&thread1, NULL, collect_seeds, (void*)&collector1);

Pobranie danych z watku

		// pobranie zebranych ziaren
		pthread_join (thread1, (void*) &collected_seeds);

“Przesypanie” ziarna do spichlerza, i tak w kolko, dopoki ludki nie zbiora wszystkiego

		// aktualizacja spichlerza
		granary = granary + collected_seeds;
 
		pthread_create (&thread2, NULL, (void*) collect_seeds, (void*)&collector2);
		pthread_join (thread1, (void*) &collected_seeds);
		granary = granary + collected_seeds;
 
		printf ("Pozostalo: %i ziaren\n", grain);
	}
 
	printf ("\nZniwa zakonczone\n");
	printf ("%s zebral %i\n", collector1.name, collector1.seeds);
	printf ("%s zebral %i\n", collector2.name, collector2.seeds);
 
	printf ("Ziarno na polu: %i ziaren\n", grain);
	printf ("Ziarno w spichlerzu: %i ziaren\n", granary);
}

Jezeli skonczylismy pisac kod, to kompilujemy programik

czlowiek@maszyna:~$ gcc -o seeds seeds.c -pthread

za pomoca parametru -pthread informujemy kompilator aby dolaczyl obpowiednie biblioteki, jak tego nie zrobimy to sofcik oczywiscie nie skompiluje sie.

Uruchamiamy programik

czlowiek@maszyna:~$ ./seeds 100
Ziarno na polu: 100 ziaren
Ziarno w spichlerzu: 1 ziaren
Zaczely sie zniwa

Dziwigor zebral 5
Niesiebud zebral 6
Pozostalo: 89 ziaren
Dziwigor zebral 5
Niesiebud zebral 6
Pozostalo: 78 ziaren
...
Dziwigor zebral 5
Niesiebud zebral 6
Pozostalo: 1 ziaren
Dziwigor zebral 1
Niesiebud zebral 0
Pozostalo: 0 ziaren

Zniwa zakonczone
Dziwigor zebral 46
Niesiebud zebral 54
Ziarno na polu: 0 ziaren
Ziarno w spichlerzu: 101 ziaren

Gdy widzimy cos podobnego to odnieslismy kolejny sukces ;) .

Tutaj wersja dla niecierpliwych:
Pobierz zrodlo i/lub binarke