Przejdź do treści

Jak osadzić w swojej aplikacji player YouTube.

  • przez

android-128Cześć. W czwartym już z kolei tutorialu androidowym stworzymy aplikację z osadzonym playerem filmów z serwisu YouTube. Do czego może nam posłużyć taka funkcjonalność? Dajmy na to, że stworzyliśmy grę i chcemy zamieścić w niej filmik będący instrukcją jak grać. Albo potrzebujemy prezentacji video jakiegoś miejsca na Ziemi w aplikacji do rezerwacji wycieczek. Filmik instruktażowy w interaktywnej książce kucharskiej? A może klient zażyczył sobie po prostu umieścić swoją reklamówkę w sekcji „O nas” 🙂

Czytaj dalej »Jak osadzić w swojej aplikacji player YouTube.

Android. Jak zrobić wydajną listę zawierającą elementy różnego typu przy pomocy RecyclerView. Cz.3

  • przez

android-128Mamy zdefiniowane rodzaje elementów, obiekty typu view holder dla nich, abstrakcyjny adapter oparty o typy generyczne, oraz renderujący listę RecyclerView. Pozostało nam już tylko podłączyć do elementów listy metody obsługujące kliknięcia. W głównej aktywności dodamy też metody pozwalające na zareagowanie w różny sposób dla każdego typu elementu.
Czytaj dalej »Android. Jak zrobić wydajną listę zawierającą elementy różnego typu przy pomocy RecyclerView. Cz.3

Android. Jak zrobić wydajną listę zawierającą elementy różnego typu przy pomocy RecyclerView. Cz.2

  • przez

android-128W pierwszej części tutoriala stworzyliśmy widoki elementów listy oraz ich model danych. Przewijanie listy zawierającej dużą liczbę elementów wiąże się z częstym wywoływaniem metody findViewById, co może znacznie obniżyć wydajność a w rezultacie spowodować, że lista nie będzie przewijała się płynnie. Sposobem na obejście tego problemu jest wzorzec projektowy View Holder. Idea wzorca polega na stworzeniu obiektu, który będzie przechowywał w swoich polach referencje do kontrolek widoku raz pobranych z layoutu metodą findViewById. Kiedy będzie potrzeba odwołania się do kontrolki, robimy to po prostu po przez pole tego obiektu.
Czytaj dalej »Android. Jak zrobić wydajną listę zawierającą elementy różnego typu przy pomocy RecyclerView. Cz.2

Android. Jak zrobić wydajną listę z zawierającą elementy różnego typu przy pomocy RecyclerView. Cz.1

  • przez

android-128Potrzebujemy wyświetlić listę zawierającą elementy różnego typu. Dla przykładu niech to będzie lista polecanych produktów sklepu na której mogą się znaleźć np. płyta DVD, książka i tp. Lista może też zawierać elementy nie będące produktami jak nagłówek listy czy separator sekcji. Każdy z tych elementów ma swój własny widok z layoutem różnym od pozostałych. Elementy te mają swoje modele danych, reprezentowane przez obiekty różnych klas. Lista może być długa, więc potrzebujemy zarządzania pamięcią jaki oferuje RecyclerView.
Czytaj dalej »Android. Jak zrobić wydajną listę z zawierającą elementy różnego typu przy pomocy RecyclerView. Cz.1

Nowe Django 1.3

  • przez

Jakiś czas temu (prawie rok) pisałem w SDJ o tworzeniu aplikacji internetowych w Django. Kiedy powstawał ten artykuł, własnie wyszła beta 1.2. Wczoraj ukazała się stabilna wersja 1.3 frameworka a w niej sporo zmian. Pełen opis nowych funkcjonalności tu: http://docs.djangoproject.com/en/dev/releases/1.3/

Z najważniejszych zmian:

– widoki można tworzyć teraz jako klasy, odpowiednie klasy zastępują też generyczne widoki oparte o funkcje: http://docs.djangoproject.com/en/dev/topics/generic-views-migration/

– logger z poziomu frameworka:

import logging
logger = logging.getLogger(__name__)
....
logger.error('Coś poszło nie tak!')

Czytaj dalej »Nowe Django 1.3

gedit jak TextMate

  • przez

Krótki przepis jak upiększyć nieco standardowy gnomowy edytor tekstu:

1. Instalacja czcionki Monaco:

$ wget http://jorrel.googlepages.com/Monaco_Linux.ttf
$ sudo mkdir /usr/share/fonts/truetype/custom/
$ sudo mv Monaco_Linux.ttf /usr/share/fonts/truetype/custom/
$ sudo fc-cache -f -v

Czytaj dalej »gedit jak TextMate

Generator liczb pseudolosowych (cz.3) – rozkład Cauchy’ego

  • przez

Witajcie, zgodnie z obietnicą, w tym odcinku generujemy liczby losowe z rozkładu Cauchy’ego.

Jak w poprzednim odcinku, użyjemy generatora rozkładu równomiernego. Kod metody getFromCauchyDistribution() wygląda następująco:

double RandomNumberGenerator::getFromCauchyDistribution() {

    // generuj X o rozkładzie równomiernym U(-1,1)
    double X = getFromUniformDistribution() * 2 - 1;

    // generuj X o rozkładzie równomiernym U(0,1)
    double U = getFromUniformDistribution();

    if ((U + 0.27324) * (1 + X * X) > 1.27324) {
        X = getFromUniformDistribution() * 2 - 1;
    }

    // uzupelnienie rozkładu o "ramiona"
    if (getFromUniformDistribution() > 0.5) {
        return X;
    } else {
        if (X != 0) {
            return (1 / X);
        } else {
            return MAXDOUBLE;
        }
    }
}

Czytaj dalej »Generator liczb pseudolosowych (cz.3) – rozkład Cauchy’ego

Generator liczb pseudolosowych (cz.2) – rozkład normalny

  • przez

W poprzednim odcinku otrzymaliśmy całkiem przyzwoity generator liczb o rozkładzie równomiernym. Teraz uzupełnimy naszą klasę o metodę do pobierania wartości z rozkładu normalnego, zwanego też rozkładem Gaussa.

Zastosowanym algorytmem do generowania liczb losowych z rozkładu normalnego jest implementacja metody Kindermana i Monahana, zwanej ROU (ratio-of-uniforms method). Szczegóły tej metody można znaleźć w książce Wieczorkowskiego i Zielińskiego[2]

Moja implementacja w języku C++ zawarta jest w metodzie getFromNormalDistribution() klasy RandomNumberGenerator i wygląda następująco:

double RandomNumberGenerator::getFromNormalDistribution() {

    bool ok = false;
    double limit = sqrt(2/2.718281828);
    double X;

    do {
        // generuj U o rozkładzie równomiernym U(0,1)
        double U = getFromUniformDistribution();

        // generuj V o rozkładzie równomiernym
        // U(-sqrt(2/e),sqrt(2/e))

        double V = 2 * limit * getFromUniformDistribution() - limit;
        X = V / U;

        if (X*X <= 2*(3-U*(4+U))) {

            ok = true;

        } else if (X*X <= 2/U - 2*U) {

            if (X*X <= -4*log(U)) {
               ok = true;
            }

        }
    } while (!ok);

    return X;
}

Jak widać używa on metody getFromUniformDistribution() zdefiniowanej wcześniej a zwracającej nam dwie liczby z rozkładu równomiernego, jedna z przedziału (0,1) a druga z (-sqrt(2/e), sqrt(2/e)).

Czytaj dalej »Generator liczb pseudolosowych (cz.2) – rozkład normalny