14 września 2011 18:14 | Kategorie: Internet, Komputery | Tagi: ,

Zdarzyło Ci się kiedyś tak, że korzystałeś(aś) z internetu w miejscu, gdzie wszystko poza stronami internetowymi (http i https) było zablokowane? Istnieje proste rozwiązanie tego problemu, które pojawiło się wraz z pewną funkcjonalnością XMPP, a mianowicie BOSH. Mówiąc w skrócie, technologia ta pozwala na komunikację z serwerami XMPP korzystając tylko i wyłącznie z protokołu HTTP(S), tego samego, którego używa się do przeglądania stron internetowych. Daje nam to dwie możliwości:

  • Tworzenie dziwacznych komunikatorów internetowych w przeglądarkach, jak Google Talk w GMailu, Facebook Chat czy komunikator NaszoKlasowy; do tego grona zalicza się również nieużywany przez nikogo w najbliższej przyszłości atlasowy candy,
  • Oszukiwanie wszelkiej maści firewalli, które po zaszyfrowaniu transmisji SSLem (https) nie mogą rozróżnić normalnego przeglądania stron internetowych i korzystania z takiego komunikatora (oczywiście, można zablokować domeny itp, ale na to już nic się nie poradzi).

Czytaj dalej…

2 kwietnia 2011 16:52 | Kategorie: Techniczne | Tagi: , , , , ,

Natrafiając na następujący problem podczas kompilacji swojego kodu na Atmegę przy użyciu zmiennego przecinka (ja akurat używałem instrukcji atof):

/opt/cross/avr/lib/gcc/avr/4.3.3/../../../../avr/lib/avr5/libc.a(cmpsf2.o):../../../libm/fplib/cmpsf2.S:58: multiple definition of `__ltsf2'
/opt/cross/avr/lib/gcc/avr/4.3.3/avr5/libgcc.a(_lt_sf.o):/usr/src/packages/BUILD/build/avr/avr5/libgcc/../../.././gcc/fp-bit.c:1287: first defined here
/opt/cross/avr/lib/gcc/avr/4.3.3/../../../../avr/lib/avr5/libc.a(floatsisf.o):../../../libm/fplib/floatsisf.S:46: multiple definition of `__floatsisf'
/opt/cross/avr/lib/gcc/avr/4.3.3/avr5/libgcc.a(_si_to_sf.o):/usr/src/packages/BUILD/build/avr/avr5/libgcc/../../.././gcc/fp-bit.c:1349: first defined here

Rozwiązaniem jest dodanie parametru -lm jako ostatniego parametru linkera.

Mój przykładowy plik Makefile, w którym poradziłem sobie z tym problemem:

FILE=gps
MCU=atmega328p
CFLAGS=-g -mmcu=$(MCU) -Wall -Wstrict-prototypes -Os -mcall-prologues -lm
PORT=/dev/ttyUSB0
DUDEOPTS=-c arduino -p m328p -P $(PORT) -b 57600

all: $(FILE).hex

help:
	@echo "Wpisz \"make\", aby zbudować program (stworzyć plik .hex)."
	@echo "Wpisz \"make load\", aby wrzucić program do mikrokontrolera."
	@echo "Wpisz \"make clean\", aby wyczyścić pliki."	

$(FILE).hex : $(FILE).out
	avr-objcopy -R .eeprom -O ihex $(FILE).out $(FILE).hex
$(FILE).out : $(FILE).o
	avr-gcc $(CFLAGS) -o $(FILE).out -Wl,-Map,$(FILE).map $(FILE).o -lm
$(FILE).o : $(FILE).c
	avr-gcc $(CFLAGS) -Os -c $(FILE).c 

load: $(FILE).hex
	stty -F $(PORT) hupcl
	avrdude $(DUDEOPTS) -e -U flash:w:$(FILE).hex

clean:
	rm -f *.o *.map *.out *.hex

Podkreśliłem linię, w której należało dodać ów parametr.

22 marca 2011 19:14 | Kategorie: Komputery, Techniczne | Tagi: , , , ,

Pytanie: Jak znaleźć wszystkie dowiązania twarde do tego samego pliku w podanym drzewie katalogów i coś z nimi zrobić (policzyć, zamienić na dowiązania symboliczne, usunąć, cokolwiek)? Należy użyć polecenia find. Pojawiają się jednak problemy:

  • Można w find użyć -links +1, aby znaleźć wszystkie pliki, których licznik dowiązań twardych ma wartość większą niż 1 (wiedząc, że każdy plik w *niksie to tak naprawdę jest dowiązanie twarde do jakiegoś inode szukamy takich plików, przy których tych dowiązań twardych jest więcej niż jedno), ale to zwróci również pliki, do których dowiązania znajdują się poza wskazanym drzewem katalogów.
  • Można również znaleźć wszystkie takie pliki, a następnie wewnątrz pętli while wywołać kolejny raz find z parametrem -samefile. Jednak to powoduje przeszukanie całego drzewa katalogów wraz z każdą iteracją pętli, a więc jeśli mamy duże drzewo, to czas operacji może być naprawdę długi.

Rozwiązanie? Trzeba znaleźć wszystkie pliki regularne (-type f) do których istnieje ponad jedno dowiązanie twarde (-links +1). Wszystko dobrze, ale normalne wywołanie find w ten sposób zwróci nam wszystkei takie pliki w dość losowej kolejności. Do osiągnięcia naszego celu potrzebowaliśmy, aby były mniej-więcej posortowane – aby wszystkie dowiązania do jednego pliku były obok siebie. Jak to osiągnąć? find potrafi wypluwać dane nie tylko w prosty sposób, poprzez -print, ale również trochę bardziej potężny przy pomocy -printf. Wiemy również, że każde dowiązanie symboliczne wskazujące na ten sam plik musi mieć ustawiony ten sam numer inode. Tak więc, korzystając z -printf "%i %p\n" wypiszemy sobie wszystkie dowiązania wraz z ich numerami inode na przedzie, a następnie przy pomocy sort posortujemy tak, aby wszystkie dowiązania do jednego inode znalazły się obok siebie.

Kod prezentuje się mniej więcej następująco:

#!/bin/bash
find $1 -type f -links +1 -printf "%i %p\n" | sort | while read a
do
    # w zmiennej $a mamy obecnie przetwarzaną linię
    inode=`echo $a | cut -d' ' -f1`
    path=`echo $a | cut -d' ' -f2`
done

Teraz, jeśli obecny $inode różni się od tego, który znajdował się w poprzedniej iteracji pętli, to możemy być pewni, że już więcej na dowiązanie do poprzedniego pliku nie natrafimy. Tak więc wystarczy coś wykombinować, np. zmienne globalne przechowujące ostatnio znaleziony inode, i wszystko gra.

Dlaczego while a nie for?

Różnica jest prosta, ale ważna. W przypadku takiej pętli:

for i in *
do
    # coś robimy
done

cała zawartość * ląduje w wierszu poleceń. To się może wydawać drobnostką, ale jeśli jest tego bardzo dużo, to może się posypać – w końcu maksymalna długość polecenia w linii komend jest ograniczona. Spójrzmy teraz na konstrukcję z while:

find $1 -print | while read zmienna
do
    # coś robimy
done

Wygląda trochę bardziej skomplikowanie, ale zaleta jest znaczna. Mianowicie, tutaj wynik działania polecenia find nie ląduje w linii poleceń, ale idzie za pośrednictwem potoku do polecenia while, które przekazuje każdą otrzymaną w ten sposób linię do polecenia read. Wiemy, że potok może mieć praktycznie nieskończoną długość, więc tutaj problemu takiego, jak w przypadku for nie ma.

Zobacz też:

15 lutego 2011 14:25 | Kategorie: Bez kategorii | Tagi: ,

Najpierw należy kliknąć przycisk Zapisy.

Dla własnego bezpieczeństwa należy bacznie zwracać uwagę na pasek adresu.

Informacja „Dokument: 0%” informuje użytkownika, że wszystko idzie w dobrym kierunku. Jeśli wyświetla się krócej niż 10 minut może to oznaczać, że do systemu włamali się hackerzy i system działa nieprawidłowo – należy wtedy natychmiast odłączyć komputer z gniazdka sieciowego aby uniknąć dalszych zniszczeń.

Po odczekaniu powinien pojawić się komunikat o prawidłowym działaniu systemu Edukacja. Informuje on o tym, że wszystkie procedury są wykonywane zgodnie z planem.

Następnie naszym oczom ukazuje się komunikat zapewniający, że operatorzy czuwają i konserwują system na bieżąco, a więc możemy spać spokojnie i bez obaw używać systemu, ponieważ wiemy, że znajduje się pod czujnym okien specjalistów.

Po chwili konserwacja zostaje wykonana (wiadomo, godzina 13:00 w dzień zapisów to najlepszy moment na wykonywanie konserwacji, ponieważ można natychmiast sprawdzić, czy dokonane poprawki dobrze znoszą wysokie natężenie ruchu), a my możemy się zalogować.

Należy jednak uważać – ze względów bezpieczeństwa użytkownik, który przez dłuższy czas nie wykonuje żadnej operacji w systemie zostaje automatycznie wylogowany z systemu. Dlatego też, jeśli dłużej niż 1ns nie będziemy wykonywać żadnej operacji pokaże nam się następujący komunikat:

Warto zwrócić uwagę na pełną transparentność systemu Edukacja.CL. Niektóre systemy po prostu zwracają komunikat o błędzie, natomiast EduCL gra w otwarte karty i nie ukrywa niczego przed użytkownikiem:

Po chwili jednak sie powstrzymuje i nie zasypuje użytkowników tyloma informacjami, pokazując jedynie esencję problemu:

Po chwili jesteśmy w stanie zapisać się na pewną ilość przedmiotów, choć możliwe, że w trakcie zapisów będziemy musieli powtórzyć całą opisaną tu procedurę od początku. Nie ma się co martwić, ponieważ tak naprawdę wszystko jest…

Przepraszam za skriny w jpg, ale w gorączce chwili i przypływie adrenaliny nie zwróciłem na to uwagi, a KSnapshot uznał, że domyślnie będzie zapisywał w tym formacie.

14 lutego 2011 14:43 | Kategorie: Gry, Recenzje | Tagi:

Witamy w Akademii Bullworth, jedynej takiej szkole z internatem. Tylko tutaj znajdziesz nauczycieli specjalizujących się w różnych dziedzinach – łapówkarstwie, alkoholiźmie, biciu lub uwodzeniu uczniów. Twoje dziecko będzie mogło spożywać pełnowartościowe posiłki pełne błonnika, witamin i popiołu papierosowego. Tutaj nauczy się prawdziwego życia, gdzie zwycięża większy i silniejszy. Odetchnie pełną piersią atmosferą szkolnej ławki, gdzie gnębienie słabszych należy do wieloletniej tradycji. Bezpieczeństwo jest zapewnione przez grupę Prefektów, którzy każdą oznakę niesubordynacji natychmiast zdławią butem w zarodku. Witamy w Akademii Bullworth, najgoszej szkole z internatem w Nowej Anglii.

Grę tę kupiłem w okolicy Bożego Narodzenia na wyprzedaży Steam. Jeśli ktoś o niej nie słyszał, podpowiem, kto jest producentem – Rockstar. Ten sam, który utrzymuje poziom serii GTA. Co więcej, Bully jest grą opartą na tym samym silniku, co GTA z serii III. Z tą różnicą, że dzieje się w szkole, a głównym bohaterem jest piętnastolatek. Co za tym idzie, nie mamy do dyspozycji prawdziwych broni, a przeciwnicy nie giną, a jedynie „odpadają”. Czy to jest jakiś problem? Ani trochę.

Walka jest wciągająca i daje dużo zabawy. Zamiast zwykłych broni mamy procę, superprocę, petardy, jajka, proszek na swędzenie, smródbombę, karabin na kartofle… Brzmi to dziwnie, ale gra się naprawdę wyśmienicie (zwłaszcza superprocą, która jest wyposażona w… lunetę snajperską). Co więcej, możemy walczyć tym, co znajdziemy na ziemi. Kij bejzbolowy, cegłówka, linijka? Cokolwiek. Walka bynajmniej nie jest trudna, więc nie ma co oczekiwać wyzwań, ale daje naprawdę dużo frajdy (wspomniałem, że można nauczyć sie combosów?). Pod koniec każdej potyczki gracz ma możliwość zadrwić z przeciwnika – nic to nie daje, poza satysfakcją wykręcenia ręki denerwującemu przeciwnikowi.

Jeśli ktoś grał w GTA, to nie zawiedzie się na Bully. Dużo misji pobocznych, dodatkowe misje od przechodniów, zbieranie kart do gry i gumer recepturek, dodatkowe „domki”, w których po odblokowaniu można zapisywać grę. Zróżnicowane pojazdy – od deskorolki, poprzez różne rodzaje rowerów, traktorek-kosiarkę do trawy, na skuterach kończąc. Mamy całe wesołe miasteczko wraz z atrakcjami do dyspozycji. No i „gangi” – grupy uczniów (nerdzi, bogaczki, sportowcy itd), którzy w zależności od postępów w grze są pozytywnie bądź negatywnie nastawieni w stosunku do gracza. Są też zróżnicowane placówki w mieście, które mamy do dyspozycji – szkoła, ryneczek, osiedle domków jednorodzinnych, slumsy, park industrialny, a nawet… zakład dla umysłowo chorych.

Misje są zróżnicowane, i można je wykonywać tak samo, jak w GTA – niektóre można pominąć, a każdą rozpoczynamy w odpowiednich miejscach. Ponadto należy uczęszczać na lekcje – ucieczka z lekcji powoduje wzrost poziomu poszukiwań (do momentu zakończenia zajęć o odpowiedniej godzinie). Lekcji nie trzeba kończyć z pozytywną oceną, ale warto, ponieważ osiągamy przez to wymierne korzyści. Większość lekcji polega na wykonywaniu poleceń na ekranie (tak, jak skakanie samochodem w niektórych misjach San Andreas, kojarzą się od razu gry takie, jak Dance Dance Revolution), choć niektóre są zdecydowanie inne. Nie będę ich tutaj opisywał, ale z pewnością można stwierdzić, że zajęcia lekcyjne nie są nudne. Każdy przedmiot składa się z pięciu zajęć, po zaliczeniu których nie trzeba już na ów przedmiot uczęszczać – ominięcie zajęć nie skutkuje podwyższonym poziomem poszukiwań.

Wady gry

Ta gra to konwersja z PlayStation, trzeba to powiedzieć głośno i wyraźnie. W związku z tym gra na klawiaturze jest o wiele mniej przyjemna niż na kontrolerze – na szczęście kupiłem sobie za 20pln w Saturnie na promocji joypada z dwoma analogami (które są potrzebne do gry). Podpinam go, zaczynam grać… i nic, gra go nie wykrywa. Co się okazuje? Gra wymaga kontrolera od XBox 360. Jaki jest tego powód? Żaden, ponieważ praktycznie te kontrolery nie dają niczego, czego moja tania podróba kontrolera z PS2 nie daje, poza inaczej ułożonymi przyciskami. Można użyć emulatora kontrolerów x360, który działa, i przy pomocy którego grałem. Fakt, nie jest to najstabilniejsze rozwiązanie na świecie – gra wywala się przy wychodzeniu do początkowego menu, co jednak nie ma wpływu na rozgrywkę, jeśli gra się długimi posiedzeniami i nie próbuje się wczytywać gry podczas grania. Wywalanie się gry w trakcie wychodzenia również nie przeszkadza, ale czuję się, jakbym grał w źle krakowanego pirata. No ale cóż, lepsze to, niż klawiatura.

No i, jak to zwykle przy konwersjach bywa, gra nie jest najlepiej zoptymalizowana. Działa wolno, potrafi przyciąć na moim (wiekowym) sprzęcie, ale na nowszych maszynach nie powinno być żadnych problemów.

Soundtrack

Muzyka w grze jest bardzo przyjemna. Zmienia się w zależności od pory dnia, pory roku (wspomniałem, że wygląd otoczenia zmienia się w zależności od pory roku?), czynności lub rodzaju misji. Instrumentalne melodyjki wpadają w ucho, i nie przeszkadza fakt, że są zapętlone. Nie, poważnie, o ile muzyki tej nie nagrałbym sobie do samochodu (tak, jak muzykę z GTA4 nagrałem), to do tej gry jest dobrana idealnie.

Podsumowanie

Rockstar ponownie stanął na wysokości zadania. Polecam tę grę, zwłaszcza, że w sklepach można ją wyhaczyć za ~30pln w Ekstra Klasyce. Kilka godzin dobrej zabawy, pełnej żartów, typowo Rockstarowego humoru (przykład – pocałunek od dziewczyny daje bonusowe punkty zdrowia – pamiętasz, co dawało takie punkty w GTA III?), pościgów rowerowych, strzelanin z procy i różnego rodzaju misji, które pasują tylko do gry tego rodzaju, lecz dają tak wiele radości z gry, że tego po prostu nie można przegapić.