Archiwum

2007 +

  • Wrzesień
  • Październik
  • Listopad
  • Grudzień

2008 +

  • Styczeń
  • Luty
  • Marzec
  • Kwiecień
  • Maj
  • Czerwiec
  • Lipiec
  • Sierpień
  • Wrzesień
  • Październik
  • Listopad
  • Grudzień

2009 +

  • Styczeń
  • Luty
  • Marzec
  • Kwiecień
  • Maj
  • Czerwiec
  • Lipiec
  • Sierpień
  • Wrzesień
  • Listopad
  • Grudzień

2010 +

  • Styczeń
  • Luty
  • Marzec
  • Kwiecień
  • Maj
  • Czerwiec
  • Lipiec
  • Sierpień
  • Wrzesień

Tagi

polityka

religia

społeczeństwo

akcje

Linux

Prawo

Państwo

Informatyka

recenzja

programowanie

Polska

Internet

Szkoła

blog

ZaDiS

reformy

Kościół Rzymskokatolicki

książki

Moje pomysły

święta

AboutBlogProjekty & PomysłyRegulaminRSS
31 Stycznia 2010, 10:34

Roboty internetowe

Tagi: google, wyszukiwarki, Moje pomysły, roboty_internetowe, roboty_indeksujące, transfer, indeksy,
Kategoria: Reszta

Roboty internetowe zwane także robotami indeksującymi to programy zbierające i przetwarzające informacje o stronach internetowych umieszczonych w indeksach wyszukiwarek lub różnych agregatorów. Popularne strony muszą się liczyć z tym, że takie roboty pożrą dużą część transferu. Poruszył tą tematykę na swoim Piotr Waglowski: Mam się cieszyć, czy martwić?.

Zgadzam się z nim, że nie ma tu dużego wyboru, przecież nie poblokuje wszystkich robotów, można porównać jego (i nie tylko) sytuację do związku między USA a Chinami (USA chciałyby się pozbyć się Chin, ale wtedy gospodarka USA by się załamała). Wydaje się, że problem jest nie do rozwiązania, lecz… wystarczyłoby zaimplementowanie pewnego rozwiązania przez roboty i strony. Webmaster umieszcza na stronie pliczek UPDATED.php (rozszerzenie jest nieważne), który generuje treść XML o określonej strukturze, w której byłyby zawarte informacje, kiedy jaka podstrona została zakutalizowana. Oczywiście mądry webmaster nie umieszczał by tam informacji, że należy ponownie zindeksować wszystkie podstrony, bo plik ze stylem CSS został zaktualizowany. Myślę, że rozwiązanie jest godne poświęcenia uwagi.

Cytat z DI - Polskie Google już szuka w czasie rzeczywistym: Google rozważa w przyszłości rozszerzenie funkcji wyszukiwania w czasie rzeczywistym dzięki protokołowi PubSubHubbub (PuSH). Niewykluczone, że wszyscy dostawcy treści będą mogli po prostu informować Google o nowych treściach, a wyszukiwarka natychmiast je zindeksuje. Więcej informacji na ten temat można znaleźć w innym tekście na łamach DI.

Zobacz komentarze

29 Stycznia 2010, 23:33

Udev - problem z konfiguracją

Tagi: konfiguracja, skrypt, bash, awk, find, udev, Debian, Linux, Linux,
Kategoria: Informatyka

Miałem ostatnio malutki problem, dotyczył on brzydkich ostrzeżeń występujących przy starcie systemu. Nie usuwałem go, bo nie za bardzo miałem kiedy. Dzisiaj się za niego wziąłem. Ostrzeżenia wyglądały tak:

SYSFS{}= will be removed in a future udev version, please use ATTR{}= to match the event device, or ATTRS{}= to match a parent device, in /etc/udev/rules.d/56-hpmud_support.rules:10
BUS= will be removed in a future udev version, please use SUBSYSTEM= to match the event device, or SUBSYSTEMS= to match a parent device, in /etc/udev/rules.d/025_logitechmouse.rules:1
Oznacza to mniej więcej tyle, że należy w plikach konfiguracyjnych wyrażenia: "SYSFS", "BUS" zamienić odpowiednio na: "ATTRS", "SUBSYSTEM", bo używanie "SYSFS" i "BUS" jest przestarzałe. Patrzę do katalogu /etc/udev/rules.d/ i trochę tych plików tam jest. Głupi nie jestem! Własnoręcznie w każdym pliku to zamieniać?! Skorzystałem z AWK i polecenia find i stworzyłem skrypt.awk:
{
	gsub("BUS", "SUBSYSTEM", $0)
	gsub("SYSFS", "ATTRS", $0)
	print $0 >> "temp";
}
END {
	printf("mv %s %sn", "temp", FILENAME) | "sh";
}
Poprzedni skrypt był zły, aż dziw, że działał on dla małych plików. Źle zrozumiałem ideę działania AWK. print $0 > FILENAME było wykonywane dla każdego wiersza, czyli z każdym wierszem był nadpisywany plik, ja myślałem, że $0 reprezentuje bieżący plik, a nie wiersz xD. Teraz skrypt zmienia w każdym wierszu to, co ma zmianiać i zapisuje to pliku temp, później w END(wykonywane raz na cały plik) plik oryginalny zastępujemy plikiem temp. Gdy mamy podobny problem, wchodzimy do katalogu /etc/udev/rules.d/ i wpisujemy polecenie: find . -name '*.rules' -EXEC awk -f /sciezka/dostepu/skrypt.awk {} ; i mamy problem z głowy. Polecenie find szuka nam w katalogu "." (bieżący katalog) plików o nazwie, która pasuje do wzorca "*.rules" (pliki z rozszerzeniem .rules), a opcja "-EXEC" wskazuje, że nie ma wyświetlić listy plików tylko wywołać polecenie awk -f /sciezka/dostepu/skrypt.awk {} w miejsce {} wstawiając tą listę plików. W skrypt.awk mamy tylko trzy linijki kodu. Pierwsza mówi, żeby wszystkie wystąpienia "BUS" zamienić na "SUBSYSTEM" w ciągu $0(aktualnie przetwarzany wiersz pliku), druga zamienia wszystkie wystąpienia "SYSFS" na "ATTRS" w $0, a trzecia wyświetla wynik tych zamian, tyle, że standardowe wyjście jest przekierowywane do pliku aktualnie przetwarzanego (czyli nadpisuje plik, z którego odczytano dane).

Heh! Dzisiaj poszukałem innych rozwiązań mojego problemu. Okazało się, że wystarczy wpisać polecenie: dpkg-reconfigure udev , aby problem zniknął.

Skorzystałem z:

  • http://gnu.univ.gda.pl/~tomasz/prog/awk/awk-intro/awk-man.html
  • http://notatnik.mekk.waw.pl/archives/207-Terminal_pod_reka.html
  • http://linuxindetails.wordpress.com/2009/12/30/udevd-sysfs-will-be-removed-in-a-future-udev-version-please-use-attr-to-match-the-event-device/

Zobacz komentarze

24 Stycznia 2010, 00:40

„Zombieland”

Tagi: komedia, zombie, Zombieland, recenczja, film, recenzja, horror, czarna komedia,
Kategoria: Kultura

Piątkowe wieczory idealnie nadają się od oglądania filmów, sobota wolna, odpowiedni czas na wyluzowanie się po męczącym tygodniu. W ten piątek sięgnąłem po „Zombieland” Rubena Fleishera. Jest to kolejny film z zombiakami, poprzednich nie oglądałem, lecz po ich recenzjach mogę stwierdzić, że ten film jest najlepszy w tej kategorii. Bohaterem jest nastolatek, który w opanowanym przez zombie USA zamierza dotrzeć do rodziców. Niewesołe jest jego życie, niedoszła dziewczyna chce cię schrupać, kina i wesołe miasteczka pozamykane, musisz trzymać się ściśle określonych zasad, aby przetrwać.

Główne role zagrali: Jesse Eisenberg, Woody Harrelson znany m.in z roli w „2012”, Emma Stone znana m.in z roli w „Supersamiec”, Abigail Breslin oraz Bill Murley, który grał samego siebie.

Film jako całość jest dość sympatyczny, lecz nie wg mnie nie wyróżnia się niczym - przeciętna, a zarazem dobra czarna komedia.

W filmie nie zachwyciły mnie tzw. efekty specjalne, wszechobecne flaki doprowadzały mnie do tego, że miałem ochotę wyłączyć odtwarzacz filmów. Nie radziłbym jeść czegoś w trakcie lub przed filmem, popcorn też odpada. Poza tymi flakami nic mnie zdenerwowało.

Zabawne jest tzw. „cieszenie się drobiazgami” w wykonaniu niektórych bohaterów i jak zawsze w takich komediach fobie głównych bohaterów. A Najbardziej rozbawia jak kontrast pomiędzy zachowaniem się głównych bohaterów oraz to, że „duży chłopiec” ma także własne słabości. W filmie jest też tzw. Easter Egg, kto zobaczy na grę aktorską, ten domyśli się o co chodzi. Akcja jest utrzymywana na poziomie, ciężko przewidzieć, co się za chwile wydarzy, niech przykładem tu będzie spotkanie przez bohaterów na ulicy ukradzionego im czarnego Cadilaca. Kobiety są tutaj równie nieprzewidywalne jak akcja, reżyser pragnie nam pokazać, że nawet do kobiet nie można mieć zaufania w czasie trwania zombie-apokalipsy. Reżyser potrafi też wywoływać w nas strach o bohaterów, robi to w dość prosty sposób (nie znaczy, że nie skuteczny), ale robi to zbyt rzadko, było zbyt mało momentów, w których naprawdę można by się naprawdę bać.

Gra aktorska była dobra, aktorzy nie tylko mówią, ale również czują to, co bohaterowie, których grają. Powiecie, że nie nowość? A co powiecie o polskich serialach? Fabuła nie jest strasznie skomplikowana, ale na nią nie narzekam, bo to miał być film dla wszystkich, dla rozrywki, a nie film mający zmusić widza do myślenia. W filmie nie poświęcono dużo miejsca muzyce, ale jak już była, to mogę jedynie potwierdzić, że pasowała do sytuacji panujące w danym momencie.

Podsumowując, film jest warty obejrzenia, ale radziłbym się trzymać kilku zasad: nie jemy, nie szukamy drugiego dna filmu. To powinno wystarczyć, aby film był dobrą rozrywką dla nas i znajomych (rodzinne oglądanie odpada), z którymi postanowimy go oglądnąć. Moja ocena tego filmu to 4 w skali od 1 do 6.

Zobacz komentarze

22 Stycznia 2010, 19:37

Użycie wskaźnika na elementy vectora

Tagi: błędy, vector, programowanie, STL, programowanie, konkord, C++, błądbłb,
Kategoria: Informatyka

Podczas wprowadzenia zmian i testowania programu do nauki słówek wykryłem błąd, który nie był zwykłą literówką, lecz błędem w strukturze programu, pojawiającym się raz na ileś. Taki błąd jest najgorszy, bo trudno odgadnąć, dlaczego to program się wyspuje, jest trudny do uchwycenia. Z tym błędem wiązało się też, że rozwiązując go, musiałem stanąć przed dylematem, które rozwiązanie wybrać. Zaprezentuję przykład, gdzie będzie ten sam błąd

#include 
#include 
using namespace std;
int main() {
	vector elements;
	int **wsk_to_elements = new int*[10000];
	for(int i = 0; i < 10000; i++) {
		elements.push_back(i);
		wsk_to_elements[i] = &elements[i];
	}
	for(int i = 0; i < 10000; i++) {
		elements.push_back(i);
	}
	vector elements2;
	for(int i = 0; i < 100; i++) {
		elements2.push_back(i+10000);
	}
	for(int i = 0; i < 10000; i++) {
		cout << *wsk_to_elements[i] << endl;
	}
	return 0;
}
Niby wszystko w porządku, ale… po skompilowaniu i uruchomienu raczej zobaczymy, że 100 pierwszych wskaźników z tablicy wsk_to_elements wskazuje nam na jakieś elementy, których wartość jest większa od 10000, czyli chyba elementy vectora elements2. Dlaczego? Vector to taki obiekt, który przechowuje nam elementy, pozwala nam dodawać i usuwać elementy w każdej chwili, ale też stara się zachować ciągłość w pamięci, dlatego gdy przy dodaniu 1000 elementu vector widzi, że na nie ma już miejsca na prawo, to przenosi wszystkie elementy do takiego miejsca w pamięci, gdzie będzie mógł dodać ten 1000 element. Krótko mówiąc, nie gwarantuje nam, że elementy będą cały czas w tym samym miejscu w pamięci. Można się przed tym zabezpieczyć rezerwując miejsce na x elementów, dając mu x w konstuktorze, ale przecież nie zawsze wiemy, jaki rozmiar nam będzie potrzebny. Dlatego użycie wskaźników na elementy vectora jest samobójstwem.

I właśnie taki błąd miałem w programie i miałem do wyboru kilka możliwości rozwiązania problemu: I. Posłużyć się iteratorami, ale w praktyce wyglądałoby to tak:

class SingleWord {
	//…
	vector::iterator something;
	//…
}
class Kurs {
	//…
	vector singleWords;
	//…
Trochę głupio uzależniać klasę SingleWord, która ma być niezależna od klas ją wykorzystujących. W porównaniu do drugiego rozwiązania zachowałbym taki sam czas dostępu do elementów. I rozwiązanie nie jest rozwiązaniem, bo ma te same wady, co rozwiązanie oparte na wskaźnikach. Rozwiązaniem podobnym do tego opartego na iteratorach byłoby:
class SingleWord {
	//…
	unsigned int something; //numer słowa w vectorze
	//…
}
class Kurs {
	//…
	vector singleWords;
	//…
To rozwiązanie ma jedną zasadniczę wadę: klasa SingleWord jest zależna od klasy ją wykorzystującej Kurs. II. W samym vectorze posłużyć się wskaźnikami, wyglądałoby to tak:
class SingleWord {
	//…
	SingleWord *something;
	//…
}
class Kurs {
	//…
	vector singleWords;
}
W tym rozwiązaniu klasa SingleWord zachowuje swoją niezależność, ale jest trochę wolniejszy dostęp do elementów z klasy Kurs, bo odbywa się przez wskaźniki. To, że w vectorze są wskaźniki, ma jeszcze inną zaletę, gdy vector będzie zmieniał swoje miejsce w pamięci, nie będzie kopiował ponad 100 bitowego elementu klasy SingleWord, lecz 64 bitowe wskaźniki. Oczywiście nie należy zapomnieć, że tym przypadku musimy samodzielnie zwalniać pamięć, vector.erase() usunie tylko wskaźniki, elementy, na które wskazywały zostaną.

Wybrałem II rozwiązanie, lecz zaskutkowało to tym, że musiałem zmieniać działanie wielu funkcji. Przy okazji tych zmian, stwierdziłem, że gdy chcę odmówić prawa do zmieniania elementu, lepiej zwrócić "wskaźnik na stały element" niż "element", program będzie szybciej działał, ponieważ wskaźnik jest tylko 64 bitowy. Zmieniłem… lecz mocno się zdziwiłem, bo funkcja wygląda tak:

SingleWord const* Kurs::getSingleWord() {
	SingleWord const* something;	
	//…
	return something;
}
, a program skompilował się(a nie powinien) z przypisaniem:
Kurs kurs;
//…
SingleWord sword = kurs.getSingleWord();
//…
Zgłosiem buga na Debianie dla pakietu g++-4.4. Bug nie jest taki straszny, lecz z pewnością utrudnia wykrywanie błędów w programie.

Zobacz komentarze

1 Stycznia 2010, 15:57

Podsumowanie roku 2009

Tagi: zmiany, postanowienia, Nowy Rok, blog, 2009, 2010,
Kategoria: Reszta

Jest to najwyższy czas na podsumowanie tego roku, który był rokiem bardzo owocnym w zmiany w moim życiu lub raczej sposobie życia. W drugiej połowie 2009 roku zacząłem czytać książkę „Jak zdobyć przyjaciół i zjednać sobie ludzi” Dale'a Carnagie'o i wcielać w życie wskazówki tam umieszczone. Zmieniłem też podejście do dziewczyn, ale nie dzięki książce, po prostu przemyślałem niektóre sprawy; głównie dzięki jednemu kumplowi i tym, że moje traktowanie dziewczyn przyniosło sukesy, nie zaprzestałem kontynuowania tego, co zacząłem. A w zmiany w sferach mego życia?

...

Przeczytaj cały artykuł i zobacz komentarze

© Godlark 2007 - 2010 | Usługi hostingowe zapewnia