Tuesday, March 23. 2010
Zaktualizowałem i przebudowałem program BeeWinDiff. W tej chwili oparty jest o świeżą wersję Qt 4.6.2. Dołączyłem również natywny windowsowy plik diff.exe, ze znalezieniem którego niektórzy mieli problemy.
Przypominam, że program można pobrać tutaj, natomiast wymagane do uruchomienia programu biblioteki - tutaj.
Friday, March 19. 2010
Metro 2033.
Co to jest? To po pierwsze książka autorstwa Dmitrija Glukhovsky'ego. Książka napisana rewelacyjnie, pochłaniająca czytelnika bez granic. Powiem o niej tylko tyle, że jej 600 stron(!) połknąłem w niecałą dobę, co powinno stanowić wystarczającą rekomendację do sięgnięcia po nią. A po drugie, to gra typu FPS (czyli strzelanka), oparta o tę książkę. Pieczę nad stroną fabularną gry trzymał autor książki, natomiast wykonaniem zajęło się studio 4A Games (wydawca to THQ). Co to za nieznane studio? Okazuje się, że w skład drużyny wchodzą ludzie, którzy pracowali nad pierwszą wersją kultowej gry S.T.A.L.K.E.R., co nie powinno jednak prowadzić do zbyt daleko wysuniętych wniosków. Owszem, klimat ten sam, ba, nawet w technikaliach gry znajdziemy wiele podobieństw (nawet zmienne w pliku konfiguracyjnym gry nazywane są bardzo podobnie), jednak Metro 2033 to typowy liniowy shooter, bardziej podobny do gier typu Half Life, niż Stalker.
Miałem to szczęście, że jako aktywny modder gry Stalker, oraz współtwórca rodzącego się serwisu metro-2033.pl, mogłem uczestniczyć w przedpremierowych beta-testach gry. Wrażenia z pobytu w siedzibie polskiego wydawcy i lokalizatora, CD Projekt, opisałem na łamach owego serwisu.
Czym się gra wyróżnia spośród innych? Jest tego kilka: postapokaliptyczny klimat, który wycieka z ekranu i głośników, piękna grafika, która wygląda tak jak wygląda nie tylko pod DirectX 11, które obsługuje, ale i również pod, uwaga, DirectX 9! Sama rozgrywka to, jak już wspomniałem, liniowy shooter. Na szczęście fabuła jest bardzo sprawnie poprowadzona i gra jest naprawdę ciekawa. Wokół gry narobiło się bardzo dużo szumu z powodu dość niefortunnie przedstawionych przez THQ wymagań sprzętowych, które okazały się na szczęście dość mocno zawyżone (lepiej w sumie tak, niż na odwrót). Mój komputer to Pentium D @3,2GHz, 4GB RAM i karta GeForce 9600GT z 1GB RAMu. Gra w rozdzielczości 1280x1024 (bo w takich rozdzielczościach grywam) działa w okolicach 30 kl./s., momentami zwalniając do nieco powyżej 20 kl./s.
Ogółem... jeżeli ktoś lubi klimatyczne gry, które pozostawiają po sobie ślad - naprawdę szczerze polecam tę pozycję. Jeżeli jednak należysz do tych, którzy muszą mieć 120 kl./s. przy rozdzielczości Full-HD, a do tego wybór 150 rodzajów broni (nieważne, że każda do siebie podobna) - odradzam, to nie jest gra dla miłośników Call of Duty, czy Battle Field, serio.
Wednesday, March 3. 2010
W trakcie pisania prostego skryptu, odpalanego z crona, który na serwerze ma za zadanie wykonać backup bazy firebird i wysłać plik na wyznaczony serwer FTP, napotkałem się na jeden mały niuans, który może komuś sprawić pewien problem.
W zasadzie, wydawało by się, skrypt powinien wyglądać tak:
#!/bin/bash
data=`date +%Y%m%d` plik_baza=/home/utak3r/bazy/baza.gdb plik_backup=/home/utak3r/backup/backup_$data.gbk
# backup bazy if [ -e "$plik_backup" ] then rm -f $plik_backup fi /opt/firebird/bin/gbak -b -g -l $plik_baza $plik_backup if [ ! -e "$plik_backup" ] then echo "Przerywam operacje." exit fi echo "Backup poprawny."
# pakowanie backupu if [ -e "$plik_backup.bz2" ] then
rm -f "$plik_backup.bz2" fi /bin/bzip2 $plik_backup if [ ! -e "$plik_backup.bz2" ] then echo "Przerywam operacje." exit fi echo "Backup spakowany poprawnie."
# ftpujemy plik na serwer plik_backup_bz2=$plik_backup.bz2
ftp -n utak3r.pl <<EOC user login haslo passive binary cd backupy_bazy put ${plik_backup_bz2} bye EOC
echo "Plik skopiowany na FTP."
Jednak, okazuje się, że wszystko działa - poza wysyłaniem pliku na serwer. Dlaczego? Problem w tym, że wspaniały klient ftp potrafi wysyłać pliki tylko i wyłącznie z bieżącego katalogu. Dlatego też, fragment skryptu odpowiedzialny za tę operację, powinien wyglądać następująco:
# ftpujemy plik na serwer plik_backup_bz2=$plik_backup.bz2 akt_sciezka=`pwd` backup_sciezka=${plik_backup_bz2%/*} backup_basename=${plik_backup_bz2##*/}
# ftp może uploadowac pliki TYLKO z AKTUALNEGO katalogu !!! cd $backup_sciezka
ftp -n utak3r.pl <<EOC user login haslo passive binary cd backupy_bazy put ${backup_basename} bye EOC
cd $akt_sciezka echo "Plik skopiowany na FTP."
Miłego zbierania backupów 
Thursday, January 21. 2010
Po rozmowach ze znajomymi, postanowiłem odszukać na dysku swoje stare dziełko... Znalazłem też i parę innych rzeczy, nad którymi kiedyś pracowałem, ale jest tego mnóstwo i wymaga przesiania ;) W każdym razie, dla was dzisiaj, w pełni funkcjonalna i całkiem niezła pod względem AI, gra logiczna Reversi. Wygląda wg mnie całkiem nieźle, patrząc na inne klony tej popularnej gry. Dodatkowo, zmiana kamieni jest animowana - animacje renderowane w 3D jakieś 7 lat temu ;) Do wyboru jest kilka poziomów trudności.
Znalazłem też mój wielki projekt, nad którym siedziałem w latach 2000-2003 bodajże... pisałem engine gry 3D. Engine powstał i... straciłem zainteresowanie ;) Oto, co pozostało: działający engine z dwoma pokojami... dodam, że silnik jest całkowicie software'owy, żadnego sprzętowego dopalania.
Jak coś jeszcze godnego uwagi znajdę, dam znać 
Wednesday, November 4. 2009
Jak szybko i prosto otworzyć tunel po SSH? Okazuje się, że do prostych zadań wystarczy... znany wszystkim (chyba) programik PuTTY. Proces otwierania tunelu pokażę na przykładzie przekierowania portu 2401, czyli podpięciu się do serwera cvs. Po co tak? Załóżmy, że mamy w firmie serwer cvs, który nie jest wystawiony publicznie i jest dostępny jedynie w ramach sieci LAN firmy. Jeden warunek: musimy mieć konto shellowe na serwerze, z którym się będziemy tunelować.
Otwieramy PuTTY i wprowadzamy adres serwera i port SSH, po którym zazwyczaj się z nim łączymy, aby dojść do konsoli:
Przechodzimy teraz do zakładki Connection -> SSH -> Tunnels i definiujemy elementy tunelu.
Wybieramy opcję "local" i podajemy w "source port" port, który otworzymy na naszym komputerze, po czym w "destination" adres IP i port docelowy.
Klikamy przycisk "Add" i jesteśmy gotowi. Zapisujemy sesję na przyszły użytek (z poziomu zakładki "Sessions") i łączymy się i logujemy. Od tej pory mamy otwarty tunel na podany port. W podanym tutaj przykładzie, klientowi cvs podajemy, że serwer cvs znajduje się pod adresem 127.0.0.1:2401. Działa! 
Thursday, September 10. 2009
As the time of expiration of Apophysis 2.08 beta 2 has come, here's a brand new release of Apophysis 2.09.
What's new?
+ Added favourite variations + In variables list there're displayed only used ones + Not used variations are greyed out + Thumbnails in flames list + "Symmetry" parameter renamed to "Color speed" + Added checking XML for unrecognized variation/variable values - 64-bit renderer removed + Many various fixes
One thing to keep in mind though: it's still in a beta state, so expect some crashes from time to time...  Have fun!
Monday, September 7. 2009
Jeżeli zdarzy wam się, że ktoś w swojej bezkresnej mądrości i błyskotliwości, na prośbę przysłania wam bazy danych z serwera MS SQL Server, przyśle sam goły plik baza.mdf, nie popadajmy w panikę ;) Postaramy się podpiąć taki plik jako nową bazę - choć nie zawsze, niestety, się to uda. W grę wchodzi tutaj kompatybilność plików bazy i zainstalowanego serwera. Najpierw odnajdujemy katalog, w którym trzymane są pliki baz docelowej instancji serwera MSSQL (pamiętaj! Może być ich kilka na jednym komputerze!) - zazwyczaj C:\Program Files\Microsoft SQL Server\MSSQL$NAZWA_INSTANCJI\Data. Następnie dowolnym narzędziem logujemy się na ten serwer i wchodzimy do bazy master (USE master). Następnie wydajemy polecenie: EXEC sp_attach_single_file_db @dbname = 'nowa_baza', @physname = 'c:\Program Files\Microsoft SQL Server\MSSQL$NAZWA_INSTANCJI\Data\przyslany_plik_bazy.mdf' GO System poinformuje nas o utworzeniu nowego pliku historii *.LDF, ewentualnie dokona aktualizacji struktury fizycznej pliku do obowiązującej wersji serwera MSSQL i już możemy cieszyć się z nowo podpiętej bazy danych 
Wednesday, August 26. 2009
Załóżmy, że mamy na naszym serwerze jakiś bardzo ważny, kluczowy wręcz proces. Jego "kluczowość" sprowadza się do tego, że musi działać, nie dopuszczamy możliwości, że padnie. Jak tego przypilnować?
Oczywiście, padu nie unikniemy, ale... możemy zadbać o to, żeby po takim padzie natychmiast ponownie wstał. Zrobimy strażnika procesu, watchdoga. Zrobimy go w zwykłym bashu...
#!/bin/bash while [ 1 -eq 1 ] ; do plikcmdline="" for file in `find /proc -maxdepth 2 -wholename "/proc/*/cmdline" ` do if [[ -a $file ]] then result=`cat $file` if [[ $result = "nazwa_bardzo_waznego_procesu" ]] then plikcmdline=$file fi fi done
if [[ $plikcmdline = "" ]] then nazwa_bardzo_waznego_procesu fi sleep 10s done
W miejscu "nazwa_bardzo_waznego_procesu" podstawiamy nazwÄ™ naszego procesu i tyle 
|