Sigma UC ZOOM 70-210mm with Sony a6000

Obiektyw Sigma UC ZOOM 70-210mm 1:4-5.6

Jako, że zbliża się wielkimi krokami nowy sezon występów tanecznych mojej córki, Natalki, a także wiedząc, jak wielką porażką (przynajmniej wg mnie samego) fotograficzną z tego tytułu był sezon poprzedni, postanowiłem rozejrzeć się za nowym obiektywem. Oczywiście, rozmawiamy o cenach dla ludzi, dla których fotografia to tylko hobby. Wiem, że za 2-4 tysiące mógłbym mieć wspaniałe szkło, no ale… wystarczy, że aparat tyle kosztował 😉  Jeszcze gwoli uzupełnienia tematu, ostatnio zakupiłem również monopod, który przyda się na tego typu imprezy, gdzie ze statywem nie ma się jak pchać.

Po kilku tygodniach polowań udało mi się wygrać aukcję, na której wytargałem Sigmę UC ZOOM 70-210mm 1:4-5.6 na bagnecie pentaksa za jedyne 91 zł 🙂 Zbyt wiele od niego nie oczekiwałem… dzisiaj przyszedł, więc po pracy wybrałem się z nim nad wody Odry (wystarczy wyjść z biura i już tam jestem 😉 ).

Na pierwszy ogień poszedł test bokeh. Tutaj nie miałem zbyt wielkich oczekiwań – raz, że zoom, dwa, że dość ciemny jednak (pełna dziura to zaledwie f4). I… mocno się zdziwiłem. Obiektyw ma przepiękny bokeh!

Potem poszedł test ostrości… dzisiaj, jako że z ręki strzelałem, na krótkim końcu i w okolicach (tak 70-90mm). Tutaj również obiektyw zdał test. Wychodzi na to, że za 90 zł udało mi się dostać całkiem udane szkiełko 🙂  duże toto co prawda, no i oczywiście w pełni manualne, ale mi to akurat w ogóle nie przeszkadza (gdy się uczyłem fotografii, nie istniał autofokus 😉 ).

Reasumując: za mniej, niż 100zł mam szkiełko, które potrafi dać sporo radości 🙂 czego i Wam życzę. A za dwa tygodnie dam znać, jak się toto spisuje w trudnych warunkach oświetleniowych…

Facebooktwitterredditpinterestlinkedinmail
twitterlinkedin
dogwood52week5

Dogwood 52 Week Photography Challenge

Z początkiem tego roku, trafiłem na ciekawy projekt fotograficzny: Dogwood 52 Week Photography Challenge. Projekt polega na tym, że są ustalone 52 tematy zdjęć, które należy wykonywać tydzień po tygodniu. Za każdym razem należy wykonać nowe zdjęcie, specjalnie na potrzeby owego projektu. W ten sposób, w miarę egzekucji, powinniśmy rozwinąć nasze zdolności postrzegania świata dookoła nas, a także wzmocnić umiejętności czysto techniczne, nauczyć się planowania fotografii itd.

Stwierdziłem, że taki projekt to ciekawa sprawa – no i przystąpiłem do niego 🙂 Aktualnie ukończyłem tydzień szósty i już myślę nad tygodniem siódmym. Poniżej możecie obejrzeć moje wypociny. Galeria poniżej będzie uaktualniana w miarę postępów.

Oprócz opisu, dostępnego pod linkiem powyżej, można znaleźć w sieci kilka miejsc, gdzie ludzie wykonujący ów challenge, publikują swoje prace, pomagając sobie nawzajem. Przekrój umiejętności uczestników jest ogromny, od totalnych początkujących, do półprofesjonalistów. Jest oficjalna grupa na Facebooku, jest półoficjalna grupa na Flickr, są i inne miejsca.

 

Facebooktwitterredditpinterestlinkedinmail
twitterlinkedin

Jack Reacher

Nadgoniłem w końcu i uzupełniłem stan przeczytania serii książek Lee Childa o Jacku Reacherze. Na tę chwilę w Polsce na serię składa się 19 tomów, ale za miesiąc ma się ukazać najnowszy, dwudziesty tom (oryginał ukazał się latem tego roku).

Zmuś mnie (Make me)

Jeśli ktoś nie czytał jeszcze (są tacy?) to proponuję zrobić to samo, co i mi poleciła zrobić moja bibliotekarka: zacząć serię od tomu ósmego („Nieprzyjaciel”) i dopiero powrócić do tomu pierwszego („Poziom pierwszy”). Tom ósmy to retrospekcja, w którym poznajemy również brata Reachera i jego matkę, co okazało się być dość wygodne w świetle wydarzeń tomu pierwszego.

Jak się czyta Reachera? Część powieści pisana jest w pierwszej osobie, część (większość) w trzeciej. Dziwny zabieg  . Przestrzeń czasowa między powieściami początkowo była dość duża (co najmniej kilka-kilkanaście miesięcy), później zaczęła maleć. Zapewne Lee Child zorientował się, że seria „nieco” urośnie i życia Reachera mu zabraknie w tym tempie  . Rozkręcanie akcji zazwyczaj nie przebiega zbyt długo i dość szybko wskakujemy w główny nurt wydarzeń. Trzeba też przyznać, że całość jest dość spójna – nawet w ujęciu całej serii. No, może jakoś tak bez wyraźnego powodu zniknęła z radarów postać Jodie Garber.

Poza tym, mi osobiście postać Reachera bardzo przypadła do gustu, mogę go w swoim rankingu postawić na równi z Seanem Dillonem Higginsa  . Akcja jest zawsze wartka i dość ciekawa. Czas przy lekturze spędza się miło. Z czystym sumieniem mogę polecić każdemu fanowi powieści akcji.

…nie mogło zabraknąć słowa na temat jedynej (jak dotąd) ekranizacji Reachera – Jednym strzałem. No cóż… ekranizacja ma jeden podstawowy mankament – aktora grającego postać Jack Reachera. Otóż widzicie, oryginalny Jack Reacher to gość, który ma 195 cm wzrostu, ma 127 cm w klacie i waży ponad sto kilo. Aż tu nagle… na odtwórcę wzięli… Toma Cruise’a  czyli kurdupelka (nic mu nie ujmując). Poza tym „drobnym” (nomen-omen) faktem, fabuła jest w miarę dobrze oddana, choć oczywiście nie pozbawiona sporych skrótów. Kogo bym widział bardziej w tej roli? Chyba jestem skłonny zgodzić się z Drew McWeenym, że całkiem nieźle by tu pasował nie kto inny, jak Dwayne Johnson. Niemniej, szykuje się chyba kolejna odsłona Jacka Reachera z Tomem Cruisem w roli głównej. Pożyjemy – zobaczymy!

Facebooktwitterredditpinterestlinkedinmail
twitterlinkedin

Android – dobór koloru tekstu pod kolor tła

Gdy dodajemy tekst na jakimś tle, którego kolor ustawiany jest dynamicznie, mamy problem: jaki kolor tekstu? Czarny czy biały?

Aby rozwiązać ten problem, należy sprawdzić, jak jasny jest kolor tła. Problem w tym, że wpływ poszczególnych komponentów RGB na ogólną jasność jest różna, stąd trzeba ową jasność policzyć uwzględniając tę zasadę. Ja użyłem dość popularnej w internecie formuły – i spisuje się naprawdę dobrze.

    /**
     * Find the right color of the text, depending on the color of the background.
     * @param aColor Color, to which we're adjusting by contrast.
     * @return Black or white color.
     */
    public int getBlackOrWhite(int aColor)
    {
        int red = (aColor >> 16) & 0xFF;
        int green = (aColor >> 8) & 0xFF;
        int blue = (aColor >> 0) & 0xFF;
        int result = 0;
        if (((double)red*0.299 + (double)green*0.587 + (double)blue*0.114) > 186)
            result = Color.BLACK;
        else
            result = Color.WHITE;
        return result;
    }

Parametrem wejściowym jest kolor tła, wartość zwracana to kolor czarny lub biały. Formuła doboru wygląda na dobrą, bo spośród tych kolorów, które przetestowałem, wybór: czarny-biały zawsze był trafny, stąd mogę ją z czystym sumieniem polecić – co też czynię.

Facebooktwitterredditpinterestlinkedinmail
twitterlinkedin

Zmiana parametrów ekranu z C++ pod Windows 7

Czasem zachodzi potrzeba zmiany ustawień monitora z poziomu aplikacji. Czasem chodzi nam o rozdzielczość, czasem o odświeżanie. Mi akurat chodziło o odświeżanie – aplikacja wyświetla materiał video w różnych formatach i potrzebowałem dostosować monitor do materiału, aby osiągnąć jak najlepszą synchronizację.

Moja aplikacja jest w Qt (a jakże), więc zaczynam od sprawdzenia, na którym monitorze jest wyświetlona moja aplikacja:

int monitor = QApplication::desktop()->screenNumber(ui.centralWidget);

Aby napisać działającą poprawnie metodę zmieniającą parametry wyświetlania pod Windows 7, musimy podać dokładną nazwę urządzenia. Podawanie NULL, która wg dokumentacji MSDN powinna zadziałać na domyślnym urządzeniu, pod Windows 7 kończy się błędem niepoprawnego parametru. Dlatego najpierw listujemy wszystkie dostępne urządzenia – i jeśli jest to nasze urządzenie, pobieramy jego aktualne ustawienia i modyfikujemy je:

DEVMODE winMode;
DISPLAY_DEVICE displayDevice;
memset(&displayDevice, 0, sizeof(DISPLAY_DEVICE));
displayDevice.cb = sizeof(displayDevice);
DWORD iDevNum = 0;
if (EnumDisplayDevices(NULL, iDevNum, &displayDevice, EDD_GET_DEVICE_INTERFACE_NAME))
{
	if (EnumDisplaySettings(displayDevice.DeviceName, ENUM_CURRENT_SETTINGS, &winMode) != 0)
	{
		winMode.dmPelsWidth = aWidth;
		winMode.dmPelsHeight = aHeight;
		winMode.dmDisplayFrequency = aFreq;
		ChangeDisplaySettingsEx(displayDevice.DeviceName, &winMode, NULL, CDS_NORESET | CDS_UPDATEREGISTRY, NULL);
	}
}

Wg dokumentacji, po użyciu ChangeDisplaySettingsEx powinniśmy jeszcze spowodować rozesłanie komunikatu do wszystkich aplikacji, wywołując ją jeszcze raz w ten sposób:

ChangeDisplaySettings(NULL, 0);

Składając wszystko do kupy, napisałem sobie metodę, która bierze parametry ustawień (rozdzielczość i odświeżanie) i sprawdza, czy podałem wartość większą od zera (gdybym chciał ustawić tylko niektóre z tych parametrów):

//! Change display (monitor) settings. If you don't want to change any of the values, pass 0 for them.
static bool setCurrentDisplayMode(int aWidth, int aHeight, int aFreq, int aDisplay = 0);
bool sysWindowsApi::setCurrentDisplayMode(int aWidth, int aHeight, int aFreq, int aDisplay)
{
	bool ret = false;
	DEVMODE winMode;
	DISPLAY_DEVICE displayDevice;
	memset(&displayDevice, 0, sizeof(DISPLAY_DEVICE));
	displayDevice.cb = sizeof(displayDevice);
	if (EnumDisplayDevices(NULL, aDisplay, &displayDevice, EDD_GET_DEVICE_INTERFACE_NAME))
	{
		if (EnumDisplaySettings(displayDevice.DeviceName, ENUM_CURRENT_SETTINGS, &winMode) != 0)
		{
			if (aWidth > 0) winMode.dmPelsWidth = aWidth;
			if (aHeight > 0) winMode.dmPelsHeight = aHeight;
			if (aFreq > 0) winMode.dmDisplayFrequency = aFreq;
			if (ChangeDisplaySettingsEx(displayDevice.DeviceName, &winMode, NULL, CDS_NORESET | CDS_UPDATEREGISTRY, NULL) == DISP_CHANGE_SUCCESSFUL)
			{
				ChangeDisplaySettings(NULL, 0);
				ret = true;
			}
		}
	}
	return ret;
}

Z głównej aplikacji wywołuję ją np. tak:

sysWindowsApi::setCurrentDisplayMode(0, 0, 60, QApplication::desktop()->screenNumber(ui.centralWidget));

powoduje to zmianę tylko częstotliwości odświeżania, pozostawiając rozdzielczość bez zmian – i tylko na tym monitorze, na którym znajduje się nasza aplikacja.

Facebooktwitterredditpinterestlinkedinmail
twitterlinkedin

Bend of Joy – fraktal 3D

Dawno nic nie pisałem… postaram się to nadrobić 🙂

Przez ostatnie dwa tygodnie wieczorami pracowałem nad nową animacją – fraktalem 3D. Poniżej możecie sobie obejrzeć efekt. Dla najlepszego odbioru, przejdźcie na stronę vimeo, żeby obejrzeć ten filmik w jakości HD – oczywiście, na pełnym ekranie.

Muzyka jest autorstwa Scotta Althama.

Zawartość niedostępna.
Wyraź zgodę na używanie plików cookie.

Facebooktwitterredditpinterestlinkedinmail
twitterlinkedin

Android – backup danych aplikacji bez roota

Ostatnio musiałem się zmierzyć z przeniesieniem danych pomiędzy dwoma telefonami Androidowymi, które nie są zrootowane. Szczerze mówiąc, nigdy tego jeszcze nie robiłem, bo w swoich urządzeniach root jest pierwszą czynnością, którą wykonuję po rozpakowaniu 😉 dlatego też postanowiłem się podzielić z wami efektami prac.

Jedyne narzędzie, którego będziesz potrzebować (poza sterownikami USB do telefonu, które powinny się automatycznie zainstalować po podłączeniu telefonu) to Android Platform Tools, którego głównym składnikiem jest Android Debug Bridge (ADB). Android Platform Tools normalnie wchodzą w skład Android SDK i stamtąd właśnie należy je pobrać, ale ktoś, kto potrzebuje jedynie wykonać kilka prostych czynności, nie musi chcieć ciągnąć tego całego bagażu. Tutaj możecie pobrać paczuszkę przygotowaną przeze mnie. Są to Platform Tools w wersji 22, czyli najnowszej na dzień dzisiejszy, obsługującej Android 5.1.

Zanim jednak będziecie mogli użyć ADB na swoim telefonie, należy włączyć ukryte menu w ustawieniach telefonu. Idziemy do Ustawienia → Informacje o urządzeniu i klikamy raz za razem pozycję Numer wersji. Po około 10 tapnięciach pokaże się komunikat, że nowe menu zostało włączone. Wracamy do Ustawień i widzimy nowe menu: Opcje programisty. Wchodzimy do środka i zaznaczamy opcję Debugowanie USB. Od tej chwili możemy używać ADB.

debug_usb

Rozpakowujemy Platform Tools do jakiegoś katalogu. Najlepiej dodać sobie ścieżkę do niego do zmiennej $PATH, żeby móc z adb korzystać z dowolnego miejsca. Sprawdzamy, czy działa:

\> adb version
Android Debug Bridge version 1.0.32

Jeśli działa, podpinamy telefon, odczekujemy, aż system zainstaluje nowe sterowniki USB (z powodu aktywacji trybu debugowania) i sprawdzamy, czy urządzenie jest widoczne:

\> adb devices
List of devices attached
10feda99 device

Sukces! Można działać 🙂

Jeśli powyżej ujrzysz kilka urządzeń na liście, wszystkie dalsze komendy musisz poprzedzić opcją -s z identyfikatorem urządenia.

Sama czynność backupu jest w zasadzie banalna. Zacznijmy od opcji backupowania jednej lub kilku wybranych aplikacji:

\> adb backup -f CatchNotes.ab -apk com.threebanana.notes com.catchnotes.sketch.samsung
Now unlock your device and confirm the backup operation.

Co tu widzimy? Zleciłem backup dwóch aplikacji (com.threebanana.notes oraz com.catchnotes.sketch.samsung) tworzących pakiet Catch Notes i plugin do niego (już niedostępne w sklepie Play – a szkoda). Backup danych wraz z samą instalką aplikacji (APK). Kopia zapasowa zostanie zapisana do pliku CatchNotes.ab. Poniżej widać, że program każe wziąć do ręki telefon.

backup

Jeśli korzystamy z szyfrowania naszych danych w telefonie, wpisujemy hasło i następnie Utwórz kopię zapasową danych. I… to tyle 🙂  na dysku zostanie utworzony plik o nazwie CatchNotes.ab, zawierający dwie instalki APK wraz z danymi obu aplikacji.

Nie wszystkie aplikacje spełniają zalecenia Androida i stosują się do jego zasad (a jakże…). Np. taka gra Temple Run 2 przechowuje swoje dane inaczej niż pozostałe aplikacje, co spowoduje, że powyższy sposób nie zachowa owych danych. Co robić? Musimy skopiować je ręcznie. Wchodzimy Eksploratorem (lub Total Commanderem, jeśli jesteśmy świadomymi użytkownikami komputera 😉 ) do telefonu i wchodzimy do katalogu Phone\Android\data. Zobaczymy tam całą masę katalogów, a wśród nich com.imangi.templerun2. Kopiujemy na komputer cały katalog. W urządzeniu docelowym musimy koniecznie najpierw zainstalować aplikację, a później nadpisać ten sam katalog naszą kopią.

templerun2_data

Oprócz kopii zapasowej wybranych aplikacji, możemy chcieć wykonać pełny backup. Mamy do dyspozycji kilka dodatkowych opcji:

  • -shared spowoduje skopiowanie wszystkich danych współdzielonych i z karty SD.
  • -all spowoduje skopiowanie wszystkich aplikacji, bez ich podawania w komendzie.
  • -system / -nosystem jeśli podaliśmy opcję -all, ta opcja decyduje, czy backupujemy tylko aplikacje użytkownika, czy również aplikacje systemowe.

Np.:

\> adb backup -apk -shared -all

Taka opcja zajmie sporo czasu i wygeneruje potężny plik.

 

Jak taką kopię zapasową później przywrócić?

\> adb restore mojakopia.ab

i… tyle 🙂

 

I tak już na końcu, jako bonus… wśród naprawdę wielu fajnych rzeczy, które można zrobić przy pomocy ADB, jest m.in. również nagrywanie ekranu (tylko na nowszych Androidach):

\> adb shell screenrecord /storage/extSdCard/test123.mp4

Video jest mocno skompresowane, ale do prezentacji jakiejś opcji czy czynności nadaje się świetnie 🙂

Facebooktwitterredditpinterestlinkedinmail
twitterlinkedin

Qt 5.3.2 vs GCC 4.8.1 TDM64

Kolejna wersja Qt, kolejna kompilacja… tym razem budujemy Qt 5.3.2 pod GCC pod Windows, w wydaniu TDM64.

Najpierw – konfiguracja. Ja stworzyłem sobie plik configure.cmd:

cd Qt-5.3.2-gcc-x86_64

set PATH_GCC=C:\gcc\gcc-4.8.1-tdm64
set PATH_PERL=C:\Perl
set PATH_PYTHON=C:\Python27
set PATH_ICU=D:\devel\Qt\Qt5_deps\icu
set PATH_OPENSSL=D:\devel\Qt\Qt5_deps\openssl-1.0.1e

set INCLUDE=%PATH_ICU%\dist\include;%PATH_OPENSSL%\dist\include
set LIB=%PATH_ICU%\dist\lib;%PATH_OPENSSL%\dist\lib
set QMAKESPEC=
set QTDIR=

set PATH=%CD%\qtbase\bin;%CD%\gnuwin32\bin;%PATH_GCC%\bin;%PATH_PERL%\bin;%PATH_PYTHON%;%PATH_ICU%\dist\lib;%PATH_OPENSSL%\dist\bin;%SystemRoot%\System32
set MAKE_COMMAND=

configure -release -opensource -confirm-license -platform win32-g++ -developer-build -c++11 -opengl desktop -plugin-sql-odbc -qt-style-windowsxp -qt-style-windowsvista -nomake tests -nomake examples -skip qtwebkit -skip qtwebkit-examples -skip qtquick1

i uruchamiam.
Jeśli wszystko przebiegło pomyślnie, pozostało nam wykonać jeszcze jeden szybki fix. Będzie to fix nieelegancki i tylko na potrzeby naszej kompilacji, bez zagłębiania się w prawidłowe rozwiązanie, które zadziała z każdym kompilatorem.

Odnajdujemy plik qtwinextras\src\winextras\winshobjidl_p.h i na samym końcu usuwamy sekcję:

#if (defined _MSC_VER && _MSC_VER < 1600) || defined(Q_CC_MINGW)

#   if !defined(__MINGW64_VERSION_MAJOR) || !defined(__MINGW64_VERSION_MINOR) || __MINGW64_VERSION_MAJOR * 100 + __MINGW64_VERSION_MINOR < 301

typedef struct SHARDAPPIDINFOLINK
{
    IShellLink *psl;        // An IShellLink instance that when launched opens a recently used item in the specified
                            // application. This link is not added to the recent docs folder, but will be added to the
                            // specified application's destination list.
    PCWSTR pszAppID;        // The id of the application that should be associated with this recent doc.
} SHARDAPPIDINFOLINK;

#   endif // !defined(__MINGW64_VERSION_MAJOR) || !defined(__MINGW64_VERSION_MINOR) || __MINGW64_VERSION_MAJOR * 100 + __MINGW64_VERSION_MINOR < 301

#endif

Usuwamy tę sekcję całkowicie. Plik zapisujemy, wracamy do głównego katalogu i zaczynamy budowanie:

mingw32-make

Zbudowane binarki będą, jak zwykle, w katalogu qtbase\bin.

Facebooktwitterredditpinterestlinkedinmail
twitterlinkedin

Seria Millenium Stiega Larssona

Znajoma podrzuciła mi (dzięki, Aga!) do przeczytania coś, co mnie jakoś ominęło wcześniej – serię Millenium Stiega Larssona (zmarłego w 2004 roku). To trylogia kryminalna, mieszcząca się na prawie dwu tysiącach stron.

Autor, sam będący dziennikarzem, opowiada historię splatającą losy dociekliwego dziennikarza finansowego i dziewczyny, której osobowość stanowi jeden z głównych kluczy do sukcesu tej powieści. To skomplikowana dziewczyna, doświadczona przez los, a przy tym świetna hakerka, obdarzona pamięcią fotograficzną.

W pierwszej części bohaterowie się spotykają (nie tak znów szybko) i wspólnie rozwiązują pewną starą zagadkę. W tomie drugim i trzecim, zajmują się sprawami bezpośrednio dotyczącymi Lisbeth i tropią niebywałą aferę na najwyższym szczeblu władzy w Szwecji.

Na podstawie tomu pierwszego nakręcono film, w którym Mikaela Blomkvista zagrał Daniel Craig, a w rolę Lisbeth Salander wcieliła się Rooney Mara. Ten film to Dziewczyna z tatuażem, który zapewne już widzieliście.

Te dwa tysiące stron przemknęło bardzo szybko w kilka dni. Muszę przyznać, że pióro Stieg Larsson miał naprawdę świetne i ani przez chwilę się powieść nie nuży. Polecam! 🙂

Facebooktwitterredditpinterestlinkedinmail
twitterlinkedin

S.T.A.L.K.E.R.: Lost Alpha 1.3002 już jest!

Dziś na świat przyszedł długo oczekiwany wielki patch do gry S.T.A.L.K.E.R.: Lost Alpha produkcji grupy dez0wave, której mam zaszczyt być członkiem (jako programista, oczywiście 😉 ).
Patch nosi numer 1.3002 i jest patchem kumulatywnym, co oznacza, że można go instalować bezpośrednio na gołą grę, bez konieczności wcześniejszej instalacji poprzedniego patcha 1.30013.

Co przynosi nowa wersja?
Przede wszystkim całą masę poprawek błędów (których, nie ukrywajmy, było sporo – z przyczyn większości zainteresowanym wiadomych), a także dość długą listę usprawnień i dodatków. Po szczegółową listę zmian zapraszam tutaj lub tutaj. Sam patch pobrać można tutaj.

Pozostaje mi życzyć wam fascynującej przygody w nowej Zonie – a ja tymczasem udaję się na zasłużony urlop w góry 😉 Do zobaczenia!

Zawartość niedostępna.
Wyraź zgodę na używanie plików cookie.

Facebooktwitterredditpinterestlinkedinmail
twitterlinkedin