Projekt DP!: Densitas

Piszemy tu o wszystkim, co nie pasuje do żadnej z powyższych kategorii.

Projekt DP!: Densitas

Postprzez Semmko » N sie 09, 2009 10:45 pm

Choć kwestię legalności „omówiliśmy” jedynie wstępnie, postanowiłem dokonać kilku nie tylko teoretycznych działań. Powołuję do istnienia Projekt DisneyPolski!, którego nazwa to „Densitas”.


Formularz projektu DP!

Nazwa: Densitas (łac. gęstość, mnóstwo)
Założyciel: Semmko
Czas realizacji: 10 lat
Natura materiału: aplikacja komputerowa
Cel: stworzenie zbioru użytecznego oprogramowania
Ograniczenia: zgodność z prawem Polski i USA oraz przepisami forum DP!
Opis:
• Projekt polega na publikowaniu w postach niniejszego tematu linków do materiałów, o charakterze przede wszystkim aplikacji komputerowej, do których wszelkie prawa posiada osoba, biorąca udział w tym przedsięwzięciu. Deklaruje ona także, iż okoliczności powstania, publikacji etc. tych materiałów spełniają warunki zawarte w ograniczeniach projektu.
• Projekt jest otwarty, co oznacza, iż każdy może w dowolnym momencie wziąć w nim udział, a także wycofać się z niego bez żadnych konsekwencji, o ile nie naruszył ograniczeń.
• Z uzyskanych materiałów można korzystać dowolnie, ale tylko w ramach projektu.
• Publikowany materiał musi spełniać podstawowe wymagania przyzwoitości, nic więcej.
• Założenie techniczne: przede wszystkim bezawaryjność.


To dopiero początek, jeszcze wiele spraw (szczególnie natury formalnej) pozostało do rozwiązania. Projekt ma charakter poligonowy. Mam nadzieję, że przyniesie nam to wyłącznie korzyść.
Nie można wykorzystywać materiałów (powiedzmy disnejowskich), jeśli jest to niezgodne z prawem, zatem powstaje pytanie: „Czym uzasadnione jest istnienie takiego projektu na tym forum?”. Wydaje mi się, że będzie on przydatny dla osób, które dopiero uczą się tworzyć programy, a także dla tych, którzy chcieliby je niezależnie wykorzystać (wystarczy, chyba, poprosić). Celem jest stworzenie czegoś, co będzie, mimo wszystko, związane z Disneyem i korzystne dla DP!, ale w taki sposób, by mieć czyste i spokojne sumienie (chodzi głównie o kwestię legalności). Wymagania względem samego materiału są minimalne, więc liczę na to, że w gronie tworzących będzie (ostatecznie) więcej niż jedna osoba. Nie ma żadnych zobowiązań. Szczegóły zostaną ustalone, jak sądzę, w najbliższej przyszłości, o ile będzie zainteresowanie tym tematem (tzn. jeśli pojawią się pytania).

Oto mój wkład: sterownik klawiatury (ASCII); biblioteka i opis w pliku archiwum. Załączam także program, który obrazuje nieco działanie sterownika oraz pakiet komponentów, niezbędnych do uruchomienia mojej aplikacji (w systemie Windows). Oczywiście moduł sterownika wymaga jeszcze rozwoju.


Uważam, że projekt zasługuje na Status A. Proszę o weryfikację (np. w formie pytań).

PS
Tak, to jest wstęp do mojej wizji naszej gry. Nie widzę sensu w tworzeniu jakiejkolwiek aplikacji bazującej na materiałach, do których prawa posiada TWDC – lepiej zrobić coś całkowicie własnego. Uważam, że mogłoby się to udać, przynajmniej na niewielką skalę, ale wcześniej należałoby sprawdzić stabilność i jakość możliwej współpracy. Nie liczę na duże efekty. Istota tego projektu to niezobowiązujące dorzucanie do wirtualnego worka rezultatów własnych, drobnych prac. Ot, niebanalna rozrywka.

PS2
Z uwagi na to, że ani temat, ani projekt nie mają już wyłącznie teoretycznej natury, naprawdę nie wypada nie wyrazić choćby skromnej opinii.
Avatar użytkownika
Semmko
 
Posty: 211
Dołączył(a): Śr lip 30, 2008 5:57 pm
Lokalizacja: Kraków
Imię: Ziemek
GG: 0

Re: Projekt DP!: Densitas

Postprzez Mateusssz » Pn sie 24, 2009 12:45 am

Dzięki PW od Semmka dowiedziałem się dokładnie o co chodzi w tym projekcie.

Więc i ja przedstawiam projekt (mam nadzieję) przydatny webmasterom raczkującym w PHP - własna wyszukiwarka (prawie jak Google ;) )

Zacznijmy od wymagań serwera: MySQL o jak największej pojemności (im większa strona, tym większe będą tabele, przykro mi), PHP w wersji 4.2.

Okej! Do dzieła!

Zacznijmy od tabel. Pozwoliłem sobie dać swój nick przed tabelami, by nikt nie przywłaszczył skryptu.
Kod: Zaznacz cały
DROP TABLE IF EXISTS MATEUSSSZ_SEARCH_CRAWL;
DROP TABLE IF EXISTS MATEUSSSZ_SEARCH_STOP_WORD;
DROP TABLE IF EXISTS MATEUSSSZ_SEARCH_INDEX;
DROP TABLE IF EXISTS MATEUSSSZ_SEARCH_DOCUMENT;
DROP TABLE IF EXISTS MATEUSSSZ_SEARCH_TERM;

CREATE TABLE MATEUSSSZ_SEARCH_CRAWL (
    DOCUMENT_URL  VARCHAR(255)  NOT NULL
)
ENGINE=InnoDB DEFAULT CHARACTER SET latin1
    COLLATE latin1_general_cs;

CREATE TABLE MATEUSSSZ_SEARCH_STOP_WORD (
    TERM_VALUE  VARCHAR(255)  NOT NULL
)
ENGINE=InnoDB DEFAULT CHARACTER SET latin1
    COLLATE latin1_general_cs;

CREATE TABLE MATEUSSSZ_SEARCH_DOCUMENT (
    DOCUMENT_ID     INTEGER UNSIGNED  NOT NULL  AUTO_INCREMENT,
    DOCUMENT_URL    VARCHAR(255)      NOT NULL,
    DOCUMENT_TITLE  VARCHAR(255),
    DESCRIPTION     VARCHAR(255),

    PRIMARY KEY (DOCUMENT_ID),

    CONSTRAINT UNIQUE (DOCUMENT_URL)
)
ENGINE=InnoDB DEFAULT CHARACTER SET latin1
    COLLATE latin1_general_cs AUTO_INCREMENT=0;

CREATE TABLE MATEUSSSZ_SEARCH_TERM (
    TERM_ID    INTEGER UNSIGNED  NOT NULL  AUTO_INCREMENT,
    TERM_VALUE VARCHAR(255)      NOT NULL,

    PRIMARY KEY (TERM_ID),

    CONSTRAINT UNIQUE (TERM_VALUE)
)
ENGINE=InnoDB DEFAULT CHARACTER SET latin1
    COLLATE latin1_general_cs AUTO_INCREMENT=0;

CREATE TABLE MATEUSSSZ_SEARCH_INDEX (
    TERM_ID       INTEGER UNSIGNED  NOT NULL,
    DOCUMENT_ID   INTEGER UNSIGNED  NOT NULL,
    OFFSET        INTEGER UNSIGNED  NOT NULL,

    PRIMARY KEY (DOCUMENT_ID, OFFSET),

    FOREIGN KEY (TERM_ID)
        REFERENCES MATEUSSSZ_SEARCH_TERM(TERM_ID),

    FOREIGN KEY (DOCUMENT_ID)
        REFERENCES MATEUSSSZ_SEARCH_DOCUMENT(DOCUMENT_ID)
)
ENGINE=InnoDB DEFAULT CHARACTER SET latin1
    COLLATE latin1_general_cs;



Tu do wyjaśniania nie ma chyba nic ;)

Tabele już stworzone, pora na kod PHP, który będzie przetwarzał dane dla użytkownika.

Najważniejsze będą tutaj indexer oraz panel użytkownika. Zacznijmy od tego pierwszego:

Kod: Zaznacz cały
[b]plik indexer.php[/b]

#! /usr/bin/php
<?php
// do³¹czenie kodu wspó³u¿ytkowanego
include 'lib/common.php';
include 'lib/db.php';

// wyczyszczenie tabel indeksu
$query = sprintf('TRUNCATE TABLE %sSEARCH_INDEX', DB_TBL_PREFIX);
mysql_query($query, $GLOBALS['DB']);

$query = sprintf('TRUNCATE TABLE %sSEARCH_TERM', DB_TBL_PREFIX);
mysql_query($query, $GLOBALS['DB']);

$query = sprintf('TRUNCATE TABLE %sSEARCH_DOCUMENT', DB_TBL_PREFIX);
mysql_query($query, $GLOBALS['DB']);

// odczytanie listy s³ów ignorowanych
$query = sprintf('SELECT TERM_VALUE FROM %sSEARCH_STOP_WORD', DB_TBL_PREFIX);
$result = mysql_query($query, $GLOBALS['DB']);
$stop_words = array();
while ($row = mysql_fetch_array($result))
{
    // ka¿de s³owo bêdzie sprawdzane, czy wystêpuje na liœcie, dlatego s³owa
    // bêd¹ traktowane jak klucze tablicy -- isset($stop_words[<s³owo>]) dzia³a
    // bardziej wydajnie ni¿ konstrukcja in_array(<s³owo>, $stop_words)
    $stop_words[$row['TERM_VALUE']] = true;
}
mysql_free_result($result);

// otwarcie uchwytu CURL do pobierania dokumentów
$ch = curl_init();

// zdefiniowanie opcji curl
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, 'Search Engine Indexer');

// pobranie listy dokumentów do indeksowania
$query = sprintf('SELECT DOCUMENT_URL FROM %sSEARCH_CRAWL', DB_TBL_PREFIX);
$result = mysql_query($query, $GLOBALS['DB']);
while ($row = mysql_fetch_array($result))
{
    echo 'Przetwarzanie: ' . $row['DOCUMENT_URL'] . "...\n";
   
    // pobranie zawartoœci dokumentu
    curl_setopt($ch, CURLOPT_URL, $row['DOCUMENT_URL']);
    $file = curl_exec($ch);

    $file = tidy_repair_string($file);
    $html = simplexml_load_string($file);

    // lub: $html = @simplexml_load_string($file);

    // wyodrêbnienie tytu³u
    if ($html->head->title)
    {
        $title = $html->head->title;
    }
    else
    {
        // wykorzystanie nazwy pliku, je¿eli nie istnieje tytu³
        $title = basename($row['DOCUMENT_URL']);
    }

    // wyodrêbnienie opisu
    $description = 'Nie podano opisu.';
    foreach($html->head->meta as $meta)
    {
        if (isset($meta['name']) && $meta['name'] == 'description')
        {
            $description = $meta['content'];
            break;
        }
    }

    // dodanie dokumentu do indeksu
    $query = sprintf('INSERT INTO %sSEARCH_DOCUMENT (DOCUMENT_URL, ' .
        'DOCUMENT_TITLE, DESCRIPTION) VALUES ("%s", "%s", "%s")',
        DB_TBL_PREFIX,
        mysql_real_escape_string($row['DOCUMENT_URL'], $GLOBALS['DB']),
        mysql_real_escape_string($title, $GLOBALS['DB']),
        mysql_real_escape_string($description, $GLOBALS['DB']));
        mysql_query($query, $GLOBALS['DB']);

    // pobranie identyfikatora dokumentu
    $doc_id = mysql_insert_id($GLOBALS['DB']);

    // usuniêcie z treœci dokumentu znaczników jêzyka HTML
    $file = strip_tags($file);

    // podzia³ treœci na pojedyncze s³owa
    foreach (str_word_count($file, 1) as $index => $word)
    {
        // aby porównywaæ s³owa, wszystkie powinny byæ zapisane ma³ymi literami
        $word = strtolower($word);

        // pominiêcie s³owa, jeœli wystêpuje na liœcie s³ów ignorowanych
        if (isset($stop_words[$word])) continue;
       
        // sprawdzenie, czy s³owo znajduje siê ju¿ w bazie danych
        $query = sprintf('SELECT TERM_ID FROM %sSEARCH_TERM WHERE ' .
            'TERM_VALUE = "%s"',
            DB_TBL_PREFIX,
            mysql_real_escape_string($word, $GLOBALS['DB']));
        $result2 = mysql_query($query, $GLOBALS['DB']);
        if (mysql_num_rows($result2))
        {
            // s³owo istnieje w bazie danych - pobranie jego identyfikatora
            list($word_id) = mysql_fetch_row($result2);
        }
        else
        {
            // dodanie s³owa do bazy danych
            $query = sprintf('INSERT INTO %sSEARCH_TERM (TERM_VALUE) ' .
                'VALUE ("%s")',
                DB_TBL_PREFIX,
                mysql_real_escape_string($word, $GLOBALS['DB']));
            mysql_query($query, $GLOBALS['DB']);

            // ustalenie identyfikatora s³owa
            $word_id = mysql_insert_id($GLOBALS['DB']);
        }
        mysql_free_result($result2);

         // dodanie rekordu do indeksu
         $query = sprintf('INSERT INTO %sSEARCH_INDEX (DOCUMENT_ID, ' .
             'TERM_ID, OFFSET) VALUE (%d, %d, %d)',
             DB_TBL_PREFIX,
             $doc_id,
             $word_id,
             $index);
         mysql_query($query, $GLOBALS['DB']);
    }
}

mysql_free_result($result);
curl_close($ch);
echo 'Indeksowanie zakoñczone.' . "\n";
?>


To kod który wyszukuje słowa i je zapisuje w bazie danych ;)

Teraz pora na panel użytkownika, czyli pole do wyszukiwania. Tworzymy w tym celu folder "public files" i tam plik search.php.

Kod: Zaznacz cały
[b]plik public_files/search.php[/b]
<?php
// do³±czenie kodu wspó³u¿ytkowanego
include '../lib/common.php';
include '../lib/db.php';
include '../lib/functions.php';

// przyjêcie wyszukiwanych s³ów zawartych w przes³anym zapytaniu
$words = array();
if (isset($_GET['query']) && trim($_GET['query']))
{
    $words = explode_items($_GET['query'], ' ', false);

    // usuniêcie z zapytania s³ów do zignorowania
    $query = sprintf('SELECT TERM_VALUE FROM %sSEARCH_STOP_WORD',
        DB_TBL_PREFIX);
    $result = mysql_query($query, $GLOBALS['DB']);
    $stop_words = array();
    while ($row = mysql_fetch_assoc($result))
    {
        $stop_words[$row['TERM_VALUE']] = true;
    }
    mysql_free_result($result);

    $words_removed = array();
    foreach ($words as $index => $word)
    {
        if (isset($stop_words[strtolower($word)]))
        {
            $words_removed[] = $word;
            unset($words[$index]);
        }
    }
}
// wygenerowanie formularza HTML
ob_start();
?>
<form method="get"
 action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>">
 <div>
  <input type="text" name="query" id="query" value="<?php
   echo (count($words)) ? htmlspecialchars(join(' ', $words)) : '';?>"/>
  <input type="submit" value="Szukaj"/>
 </div>
</form>
<?php

// rozpoczêcie przetwarzania zapytania
if (count($words))
{
    // sprawdzenie poprawno¶ci pisowni szukanych s³ów
    $spell_error = false;
    $suggest_words = array();
    $ps = pspell_new('pl');
    foreach ($words as $index => $word)
    {
        if (!pspell_check($ps, $word))
        {
            if ($s = pspell_suggest($ps, $word))
            {
                if (strtolower($s[0]) != strtolower($word))
                {
                    // pominiêcie b³êdów literowych wynikaj±cych z wielko¶ci znaków
                    $spell_error = true;
                    $suggest_words[$index] = $s[0];
                }
            }
        }
    }

    // sformu³owanie zapytania przeszukuj±cego indeks
    // z uwzglêdnieniem wpisanych s³ów i wykonanie zapytania
    $join = '';
    $where = '';
    $query = 'SELECT DISTINCT D.DOCUMENT_URL, D.DOCUMENT_TITLE, ' .
        'D.DESCRIPTION FROM MATEUSSSZ_SEARCH_DOCUMENT D ';
    foreach ($words as $index => $word)
    {
        $join .= sprintf(
            'JOIN MATEUSSSZ_SEARCH_INDEX I%d ON D.DOCUMENT_ID = I%d.DOCUMENT_ID ' .
            'JOIN MATEUSSSZ_SEARCH_TERM T%d ON I%d.TERM_ID = T%d.TERM_ID ',
            $index, $index, $index, $index, $index);
   
        $where .= sprintf('T%d.TERM_VALUE = "%s" AND ', $index,
            mysql_real_escape_string(strtolower($word), $GLOBALS['DB']));
    }
    $query .= $join . 'WHERE ' . $where;
    // usuniêcie czterech ostatnich znaków - s³owa ' AND'
    $query = substr($query, 0, strlen($query) - 4);
    $result = mysql_query($query, $GLOBALS['DB']);

    // wy¶wietlenie wyników
    echo '<hr/>';
    $num_rows = mysql_num_rows($result);
    echo '<p>Wynik wyszukiwania s³ów <b>' . htmlspecialchars(join(' ', $words)) .
        '</b> zawiera ' . $num_rows . ' dokument' .
        (($num_rows == 1) ? '' : (($num_rows < 4) ? 'y' : 'ów')) . ':</p>';

    // wy¶wietlenie sugrowanego zapytania, je¿eli stwierdzono b³êdy literowe
    if ($spell_error)
    {
        foreach ($words as $index => $word)
        {
            if (isset($suggest_words[$index]))
            {
                $words[$index] = $suggest_words[$index];
            }
        }
        echo '<p>Podejrzenie b³êdu. Czy chodzi³o o <a href="' .
            htmlspecialchars($_SERVER['PHP_SELF']) .'?query=' .
            urlencode(htmlspecialchars(join(' ', $words))) . '">' .
            htmlspecialchars(join(' ', $words)) . '</a>?</p>';
    }

    echo '<ul>';
    while ($row = mysql_fetch_assoc($result))
    {
        echo '<li><b><a href="' .
            htmlspecialchars($row['DOCUMENT_URL']) . '">' .
            htmlspecialchars($row['DOCUMENT_TITLE']) . '</a></b>- ' .
            htmlspecialchars($row['DESCRIPTION']) . '<br/><i>' .
            htmlspecialchars($row['DOCUMENT_URL']) . '</i></li>';
    }
    echo '</ul>';
}
$GLOBALS['TEMPLATE']['content'] = ob_get_clean();

// wy¶wietlenie strony
include '../templates/template-page.php';
?>

I tu kod zachowuje się jak Google, z czego jestem dosyć dumny - jeśli wykaże błąd, sprawdza go i podaje przypuszczaną frazę. A tak wszystko wygląda jak wyszukiwarka Brina i Page'a.

Czas na panel administratora: tutaj kod tworzy dwa formy: do wpisywania linków by przetworzyć słowa oraz do omijania słów, których nie chcemy, by zostały zapisane w bazach. Tzn. nie chcemy by po wyszukaniu słowa "że" pojawiła się setka linków.

Kod: Zaznacz cały
[b]plik public_files/admin.php[/b]
<?php
// do³±czenie kodu wspó³u¿ytkowanego
include '../lib/common.php';
include '../lib/db.php';
include '../lib/functions.php';

// aby uzyskaæ dostêp do strony, trzeba siê zalogowaæ
//include '401.php';

// przetworzenie danych wej¶ciowych z przes³anego formularza
if (isset($_POST['submitted']))
{
    // usuniêcie istniej±cych adresów
    $query = sprintf('TRUNCATE TABLE %sSEARCH_CRAWL', DB_TBL_PREFIX);
    mysql_query($query, $GLOBALS['DB']);

    // dodanie listy adresów do bazy danych
    $addresses = explode_items($_POST['addresses'], "\n", false);
    if (count($addresses))
    {
        $values = array();
        foreach ($addresses as $address)
        {
            $values[] = mysql_real_escape_string($address, $GLOBALS['DB']);
        }
        $query = sprintf('INSERT INTO %sSEARCH_CRAWL (DOCUMENT_URL) ' .
            'VALUES ("%s")', DB_TBL_PREFIX,
            implode ('"), ("', $values));
        mysql_query($query, $GLOBALS['DB']);
    }

    // usuniêcie istniej±cych s³ów ignorowanych
    $query = sprintf('TRUNCATE TABLE %sSEARCH_STOP_WORD', DB_TBL_PREFIX);
    mysql_query($query, $GLOBALS['DB']);

    // dodanie listy s³ów ignorowanych do bazy danych
    $words = explode_items($_POST['stop_words'], "\n", false);
    if (count($words))
    {
        $values = array();
        foreach ($words as $word)
        {
            $values[] = mysql_real_escape_string($word, $GLOBALS['DB']);
        }
        $query = sprintf('INSERT INTO %sSEARCH_STOP_WORD (TERM_VALUE) ' .
            'VALUES ("%s")', DB_TBL_PREFIX, implode ('"), ("', $values));
        mysql_query($query, $GLOBALS['DB']);
    }
}

// wygenerowanie formularza HTML
ob_start();
?>
<form method="post"
 action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>">
 <table>
  <tr>
   <td style="vertical-align:top; text-align:right">
    <label for="addresses">Adresy do uwzglêdnienia</label></td>
   <td><small>Wpisz adresy, które maj± zostaæ uwzglêdnione przez robota -
    jeden adres w wierszu.</small><br/>
    <textarea name="addresses" id="addresses" rows="5" cols="60"><?php

// odczytanie listy adresów
$query = sprintf('SELECT DOCUMENT_URL FROM %sSEARCH_CRAWL ' .
    'ORDER BY DOCUMENT_URL ASC', DB_TBL_PREFIX);
$result = mysql_query($query, $GLOBALS['DB']);
while ($row = mysql_fetch_array($result))
{
    echo htmlspecialchars($row['DOCUMENT_URL']) . "\n";
}
mysql_free_result($result);

   ?></textarea>
   </td>
  </tr><tr>
   <td style="vertical-align:top; text-align:right">
    <label for="stop_words">S³owa ignorowane</label></td>
   <td><small>Wpisz s³owa, które maj± byæ pominiête w indeksie, jedno s³owo w wierszu.</small><br/>
    <textarea name="stop_words" id="stop_words" rows="5" cols="60"><?php

// odczytanie listy s³ów ignorowanych
$query = sprintf('SELECT TERM_VALUE FROM %sSEARCH_STOP_WORD ORDER BY ' .
    'TERM_VALUE ASC', DB_TBL_PREFIX);
$result = mysql_query($query, $GLOBALS['DB']);
while ($row = mysql_fetch_array($result))
{
    echo htmlspecialchars($row['TERM_VALUE']) . "\n";
}
mysql_free_result($result);

   ?></textarea>
   </td>
  </tr><tr>
   <td> </td>
   <td><input type="submit" value="Zapisz"/></td>
   <td><input type="hidden" name="submitted" value="1"/></td>
  </tr><tr>
 </table>
</form>
<?php
$GLOBALS['TEMPLATE']['content'] = ob_get_clean();

// wy¶wietlenie strony
include '../templates/template-page.php';
?>

UWAGA! Każdy link należy wpisać pojedynczo i z "http://www" tzn.
Kod: Zaznacz cały
http://www.donrosa.pl/
http://www.donrosa.pl/informacje.php itd.


Teraz pora na pliki typowo "funkcyjne"; po wpisaniu nazwy pliku w pasku wyszukiwania w przeglądarce nic nie wyskoczy.

Kod: Zaznacz cały
[b]plik lib/common.php[/b]
<?php
// true, je¶li ¶rodowisko produkcyjne; w przeciwnym razie false
define ('IS_ENV_PRODUCTION', false);

// ustawienie opcji raportowania b³êdów
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', !IS_ENV_PRODUCTION);
ini_set('error_log', 'log/phperror.txt');

// ustawienie strefy czasowej, by uniknaæ ostrze¿eñ
// w przypadku u¿ycia funkcji czasu i daty
date_default_timezone_set('Europe/Warsaw');

// uwzglêdnienie "magic quotes" w razie konieczno¶ci
if (get_magic_quotes_gpc())
{
    function _stripslashes_rcurs($variable, $top = true)
    {
        $clean_data = array();
        foreach ($variable as $key => $value)
        {
            $key = ($top) ? $key : stripslashes($key);
            $clean_data[$key] = (is_array($value)) ?
                stripslashes_rcurs($value, false) : stripslashes($value);
        }
        return $clean_data;
    }
    $_GET = _stripslashes_rcurs($_GET);
    $_POST = _stripslashes_rcurs($_POST);
    // $_REQUEST = _stripslashes_rcurs($_REQUEST);
    // $_COOKIE = _stripslashes_rcurs($_COOKIE);
}
?>


Jak widać, są to ułatwienia dla użytkownika.

Kod: Zaznacz cały
[b]plik lib/db.php[/b]
<?php
// sta³e bazy danych i schematów
define('DB_HOST', 'localhost');
define('DB_USER', 'username');
define('DB_PASSWORD', 'password');
define('DB_SCHEMA', 'db_name');
define('DB_TBL_PREFIX', 'MATEUSSSZ_');

// ustanowienie po³±czenia z serwerem bazy danych
if (!$GLOBALS['DB'] = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD))
{
    die('B³±d: Nie uda³o siê nawi±zaæ po³±czenia z baz± danych.');
}
if (!mysql_select_db(DB_SCHEMA, $GLOBALS['DB']))
{
    mysql_close($GLOBALS['DB']);
    die('B³±d: Nie uda³o siê wybraæ schematu bazy danych.');
}
?>

Ten plik trzeba omówić: w miejscu localhost wpisujemy nazwę serwera mysql (dla cba.pl jest to mysql.cba.pl, ovh.pl to localhost, zwykle localhost będzie działać), USER nazwę użytkownika, PASS - hasło, a db_name nazwę bazy.

Reszta jest nie ważna.

Kod: Zaznacz cały
[b]plik lib/functions.php[/b]
<?php
// przekszta³cenie listy elementów (domy¶lnie oddzielonych znakiem nowego wiersza)
// do postaci tablicy
// pominiêcie wierszy pustych i warto¶ci zduplikowanych
function explode_items($text, $separator = "\n", $preserve = true)
{
    $items = array();
    foreach (explode($separator, $text) as $value)
    {
        $tmp = trim($value);
        if ($preserve)
        {
             $items[] = $tmp;
        }
        else
        {
            if (!empty($tmp))
            {
                $items[$tmp] = true;
            }
        }
    }

    if ($preserve)
    {
        return $items;
    }
    else
    {
        return array_keys($items);
    }
}
?>

W komentarzach jest wszystko opisane ;)

Najważniejsze kody mamy już opisane, teraz pora na wygląd, czyli pliki templates.

Kod: Zaznacz cały
[b]plik templates/template-page.php[/b]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />
  <title>
<?php
if (!empty($GLOBALS['TEMPLATE']['title']))
{
    echo $GLOBALS['TEMPLATE']['title'];
}
?>
</title>
  <link rel="stylesheet" type="text/css" href="css/styles.css"/>
<?php
if (!empty($GLOBALS['TEMPLATE']['extra_head']))
{
    echo $GLOBALS['TEMPLATE']['extra_head'];
}
?>
 </head>
 <body>
  <div id="header">
<?php
if (!empty($GLOBALS['TEMPLATE']['title']))
{
    echo $GLOBALS['TEMPLATE']['title'];
}
?>
  </div>
  <div id="content">
<?php
if (!empty($GLOBALS['TEMPLATE']['content']))
{
    echo $GLOBALS['TEMPLATE']['content'];
}
?>
  </div>
  <div id="footer">Copyright &#169;<?php echo date('Y'); ?> Skrypt by Mateusz Sobieski</div>
  </div>
 </body>
</html>

Ten plik można edytować bez problemu, nie ruszając kodu php (znając sam HTML), zmieniając wygląd wyszukiwarki.

I tak doszliśmy do końca!

Nasza wyszukiwarka ma wszystkie najpotrzebniejsze funkcje, a da się ją zamknąć w małym paseczku na górze strony.

Kod jest ogólnodostępny - można go rozpowszechniać za darmo i bez mojej zgody, prosiłbym jedynie o wspomnieniu o mnie i nie usuwaniu stopki (chyba że chcecie "zmniejszyć" pole wyszukiwania, to wystarczy na samym dole wyników).

Na końcu przydatne linki:
http://agerwebedytor.com/ - darmowy edytor stron www, wspierający html, js, php, mysql i css.
http://www.kurshtml.boo.pl/ - to jeśli chcielibyście zmienić wygląd, szczególnie przydatna jest kategoria css.

Jeśli macie jakieś pytania, piszcie na PW, email (mateuszsobieski@op.pl) oraz GG.

Pozdrawiam i połamania klawiatury przy kodowaniu!

P.S. Zauważyłem, że przy kopiowaniu kodu z mojego edytora WWW zanikły polskie znaki, więc trzeba je na nowo wstawić :? Bardzo mi przykro z tego powodu.

P.S.2 Jeżeli podobają się wam takie skrypty, mogę przedstawić ich tutaj więcej, wszystko zależy od was.
Avatar użytkownika
Mateusssz
Stróż prawa z Pizen Bluff
 
Posty: 1401
Dołączył(a): Wt gru 25, 2007 9:00 pm
Lokalizacja: Opole
Imię: Mateusz
GG: 0

Re: Projekt DP!: Densitas

Postprzez Semmko » Cz sie 27, 2009 10:37 pm

No proszę, nie spodziewałem się odpowiedzi i wkładu, stworzonych z takim rozmachem. Temat staje się coraz bardziej wymagający, ale aby nie odchodzić zanadto od tematyki tego forum, miałbym pewną propozycję.

Z tego, co udało mi się zaobserwować, wśród użytkowników duch indeksowania nie zaginął, przeciwnie, ma się całkiem dobrze i, w pewnym sensie, żądny jest wyzwań. Istnieje katalog komiksowych wydań Disneya, Inducks oczywiście, ale nie ma, chyba, indeksu disnejowskich fan artów. Oczywiście w porównaniu z kaczą bazą danych ten pomysł nie ma sensu, ale skoro mamy już wyszukiwarkę, miejsce na serwerze, co najmniej dwie osoby „od kodowania” oraz potencjalnie kilka innych „od uzupełniania”, pewność legalności przedsięwzięcia i właściwie nic do stracenia, można by to przemyśleć. Fan arty, concept arty i inne – w przeciwieństwie do komiksów, można byłoby je (zapewne) przechowywać* i udostępniać. Wiele zależy od... ech, możliwie korzystnej odpowiedzi na potencjalnie zadane pytanie, skierowane na umiarkowanie prawdopodobnie pozyskany adres e-mail do TWDC.
Może ktoś wpadnie na ciekawszy pomysł (tzn. zaproponowałem coś [z czym nie jestem w jakikolwiek sposób związany bardziej niż przez ten neutralny tekst], co kojarzyło mi się z działalnością aktywnych użytkowników DP!, taką, w którą chętnie się angażują; jestem przekonany, że możemy wszyscy „stworzyć coś istotnie niebanalnego”, tylko nie wiem jak Was do tego zmu... czym by to mogło być). Jak to zrobić, aby móc swobodnie rzucać pomysłami, a jednak pozostać bezkarnie wciąż dość poważnym...
(Chyba trzeba się zdecydować na proponowanie tylko tych rozsądnych pomysłów, ech.)

A wspomniana przez Mateusza wiadomość PW dotyczyła przede wszystkim innego niż ten tematu – nasza mała baza danych kontaktowych Disneya nieustannie (choć powoli) się rozwija.


* To naprawdę mogłoby być nierozsądne – w Internecie takich prac jest bardzo dużo, a ich magazynowanie i redystrybucja tylko marnotrawiłyby zasoby. A jednak – z czasem z sieci znikają (bezpowrotnie?) pewne wartościowe materiały. Nie przemyślałem gruntownie tego pomysłu, ale może (kiedyś) zainspiruje on kogoś do stworzenia czegoś istotnie niebanalnego. :-)
Avatar użytkownika
Semmko
 
Posty: 211
Dołączył(a): Śr lip 30, 2008 5:57 pm
Lokalizacja: Kraków
Imię: Ziemek
GG: 0

Re: Projekt DP!: Densitas

Postprzez Semmko » N sty 10, 2010 5:47 pm

Słowo się rzekło, moduł zapisu na serwerze.

Kiedy zastanawiałem się nad własną koncepcją gry (przed, w trakcie i po SimDuckburgu), zakładałem, że oparta byłaby przede wszystkim na grafice 2D. Obecnie jednak takie ograniczenie wcale nie wydaje mi się potrzebne. Gra mogłaby zostać złożona z tego, co udałoby się nam zgromadzić, po prostu.
Avatar użytkownika
Semmko
 
Posty: 211
Dołączył(a): Śr lip 30, 2008 5:57 pm
Lokalizacja: Kraków
Imię: Ziemek
GG: 0

Re: Projekt DP!: Densitas

Postprzez WDCmaniak » So lut 13, 2010 11:08 pm

Pomysł jak najbardziej dobry, ale jako aplikacja to się nie przyjmie. Na początku lat 90-tych, nawet może i XXI wieku to byłoby cudo. Ja przynajmniej szalałbym, gdybym miał takie zestawienia multitematyczne nt. hobby w jednym kawałku.
Trzeba postawić na formę i na interaktywność, czyli iść niestety-kotlety w internet. A można by stworzyć naprawdę coś zaciekawiającego, jak strony na geocities (było parę naprawdę świetnych, zwlaszcza pod względem merytorycznym stron tam, o tematach okołodisneyowskich również - nigdy nie wybaczę Yahoo zamknięcia serwerów).
Semmku, prosiłbym Cię o zdefiniowanie, co byś konkretnie widział w Densitas pod względem merytorycznym.
Sądzę, że we współpracy mogłoby nam pomóc narzędzie Google Wave :)

Poza tym pozostawałaby kwestia kompatybilności aplikacji, interfejsu, bibliotek, itp. - za dużo roboty, w sumie łatwiej będzie nam wszystkim bawić się w "te cholerne" PHP i HTML.
Avatar użytkownika
WDCmaniak
 
Posty: 509
Dołączył(a): So mar 22, 2008 5:42 pm
GG: 0

Re: Projekt DP!: Densitas

Postprzez Semmko » N lut 14, 2010 8:46 pm

Definiowanie zostawiłem sobie na przyszłość, a ma to swoje zalety i wady. Główna korzyść polega na tym, że każdy, kto chciałby dołożyć coś od siebie, może to zrobić natychmiast, bez przeszkód. Pojawiają się jednak pewne problemy – nie do końca wiadomo czym to przedsięwzięcie jest, niełatwo się w nim wykazać, a przede wszystkim można mieć uzasadnione obawy, że włożony wkład zostanie w jakiś sposób zawłaszczony. Z drugiej strony kto chciałby ograniczyć siebie koniecznością przeczytania długiego i dość nudnego tekstu, by poznać szczegóły projektu, skoro nie jest to konieczne. Ponadto każde zadanie wymaga pewnej pracy, więc uczestnictwo nie charakteryzuje się tu czymś szczególnym. Lęk przed wykorzystaniem danego materiału wbrew woli jego twórcy ma uzasadnienie, ale w bardzo elementarnym, niewielkim wymiarze. Bo przecież o to chodzi, by dana rzecz została wykorzystana, a z nadużyciem zawsze można walczyć. Poza tym, bądźmy szczerzy, to, co jesteśmy w stanie tu dodać, jest raczej niewielkie, łatwo osiągalne, a przez to wcale nie tak bardzo atrakcyjne dla potencjalnego uzurpatora. Poważniejsze osiągnięcia natomiast bronić się będą same.

„Projekt DP!: Densitas” zainicjowałem z uwagi na moje przeświadczenie, wynikające z kilku spostrzeżeń. DisneyPolska! stała się grupą, której członkowie mogli i chcieli tworzyć coś więcej niż tylko posty. Niestety, występowały poważne trudności w realizacji inicjatyw – a to pomysł był mało pociągający, a to zbyt poważny, czasem nadmiernie długotrwały. Poza tym, z oczywistych powodów, dotyczyły twórczości disnejowskiej, co wiązało się z kolejną przeszkodą - kwestiami prawnymi. Uznałem, że potrzebny jest projekt wspólnotowy, nieobarczający, legalny, elastyczny przedmiotowo. Tylko taki ma szansę. Dość naturalny wybór padł na „materiał o naturze aplikacji komputerowej”. Miałem na myśli każdą rzecz, której istnienie wiąże się w podstawowy sposób z komputerem. Program, skrypt, czcionka (nad stworzeniem której ostatnio pracuję), a także np. szablon e-magazynu (gdybyśmy wydawali fanzin DP!).

Czas na doprecyzowanie. Przede wszystkim Densitas, jak sama nazwa wskazuje, jest przedsięwzięciem neutralnym. Nie tworzymy żadnej drużyny, a celem jest tylko nagromadzenie materiału. Jeśli powstanie atrakcyjna jego baza, w przyszłości ktoś będzie mógł z tego skorzystać, z pożytkiem dla DP!. Jest to jednak tylko pewien możliwy scenariusz. Projekt ma trwać 10 lat, po upływie których może dalej istnieć; zastrzeżenie to ma na celu wyłącznie jego umocnienie, ustabilizowanie, uczynienie go konkretnym. Nie ma ograniczeń względem formy obiektu, będącego wkładem – może to być zarówno aplikacja windowsowa, jak też internetowy (pozostający w kręgu uniksowej kultury programistycznej) skrypt. Dzięki temu potencjał Densitas wykorzystywany jest w maksymalnym stopniu.

Pracy zawsze jest dużo. Nie wydaje mi się, aby obniżenie standardów już na samym początku miało przynieść lepsze rezultaty.
Pozostała jeszcze kwestia licencji. Projekt tworzony jest na DP!, przez członków DP! i dla DP!. Każdy może się wycofać. Zgromadzony materiał jest otwarty tylko w obrębie DisneyPolski!, tzn. nie można wykorzystywać go gdzie indziej bez zgody autora. Mam świadomość, że to wciąż bardzo ogólne, intuicyjne zasady, ale na razie, jak mi się wydaje, w pełni wystarczą.

Chciałbyś się włączyć, WDCmaniaku? Zachęcam. Jak widzisz, emocji ten temat został pozbawiony przeze mnie w maksymalnym stopniu, co go umocniło. Zawsze jednak można połączyć siły i funkcjonować jako mały zespół, choć byłoby to zasadne dopiero po zgromadzeniu dostatecznej ilości materiału, na(d) którym mielibyśmy pracować.
Zakładałem, że naprawdę szczegółowy opis Densitas stworzę, jeśli już, w dalekiej przyszłości, ale mógłbym dokonać tego szybciej, jeśli sam projekt zacząłby rozwijać się intensywniej.
Avatar użytkownika
Semmko
 
Posty: 211
Dołączył(a): Śr lip 30, 2008 5:57 pm
Lokalizacja: Kraków
Imię: Ziemek
GG: 0

Re: Projekt DP!: Densitas

Postprzez WDCmaniak » Pn lut 15, 2010 8:15 pm

Dopóki konkretnie nie zobaczę wyznaczonych założeń merytorycznych na pewno nie dołączę, zwłaszcza przez brak obiektywizmu... I IMHO technikę wypadałoby i tak zrzucić na dalszy plan ;)
Avatar użytkownika
WDCmaniak
 
Posty: 509
Dołączył(a): So mar 22, 2008 5:42 pm
GG: 0

Re: Projekt DP!: Densitas

Postprzez ShFil » Śr mar 10, 2010 4:50 pm

Dodam program przydatny zarówno dla użytkowników linuxa(lub unixa) a także Windowsa.Program owy to Super Grub Disc.Jak działa i po co jest?Opiszę w punktach.
1Troche o obu systemach i w czym się przydaje.
Zacznijmy od tego ,że zanim system się uruchomi włącza się program bootujący (uruchomiają,wybierający) system.W przypadku Windowsa jest to program o nazwie systemboot (nie pamiętam jak dokładnie, ale coś takiego) a w przypadku linuxa (lub unixa) Grub.Czasem przy usuwaniu linuxa zostaje grub i jest problem z uruchomieniem windowsa.Nie jest to jedyny przypadek kiedy musimy użyć SGD , czasem po prostu możemy mieć problem z grubem lub systembootem.
Przygotowanie do użycia
Jak sama nazwa nagrywa się ten program na płytę.Aby system zaczął czytać płytę, płyta musi być włożona w cd-romie przed czasem bootowania systemu(okres kiedy grub lub systemboot kiedy bootuje system ,czyli kiedy jest czarny ekran i jest napisane boot from cd.)
Podstawowe a zarazem ważne funkcje
Tu znowu nie pamiętam dokładnych nazw funkcji ale pamiętam elementy charakterystyczne w nazwie przez co nie da się pomylić ich z niczym innym.(... to fragmenty których nie pamiętam.)Oto najważniejsze funkcje:
... :) -Jednorazowe bootowanie linuxa
... :))))))))))))))))))))))))))))))))) -Bootowanie linuxa zawsze.Czyli zmiana programu bootującego na gruba
... :( -Jednorazowe bootowanie Windowsa
... :((((((((((((((((((((((((((((((((( -Bootowanie windowsa zawsze.Czyli zmiana programu bootującego na systemboot
NAleży pamiętać ,że program jest w angielskiej wersji językowej.
LInk do SGD
Avatar użytkownika
ShFil
 
Posty: 131
Dołączył(a): So lis 07, 2009 1:59 pm
Imię: Filip
GG: 0

Re: Projekt DP!: Densitas

Postprzez Semmko » N wrz 14, 2014 10:42 am

W pewnym sensie obiecałem Wam (czy sobie?) grę i ta myśl tkwi mi w głowie. Postanowiłem (w miarę mojego zaznajamiania się z technologiami i na tyle, na ile okoliczności pozwolą) budować i dostarczać narzędzia, dzięki którym owa myśl mogłaby się wreszcie zrealizować. Przesyłam zatem moduł tworzenia "kafelków". Jest to właściwie webowa aplikacja (HTML/CSS/JS), którą przez to można chyba nazwać cross-platformową. Uruchamia się ją lokalnie. Testowałem w Operze i na Firefoksie (w Internet Explorerze może nie działać).

Moją ideą jest uzyskanie czegoś na wzór klasyków gier z serii Pokemon oraz Zelda wydanych na Game Boya. Będzie to zatem gra dwuwymiarowa o prostej mechanice, ale, daj Boże, rozbudowanym i wciągającym świecie. Chciałbym się trzymać możliwie blisko dobrych i sprawdzonych rozwiązań, tzn. rozdzielczości (160x144 w Game Boy Color oraz 240x160 w Game Boy Advance przy proporcjach obrazu odpowiednio 10:9 i 15:10) oraz wielkości kafelka (kwadrat o boku 16 pikseli). Kafelek to mały obrazek, budujący stronę graficzną świata gry. Trawa, droga, budynki, a nawet postacie tworzone są z takich miniaturek.

Samą grę widziałbym jako zestaw lokacji, czyli miejsc, z których najważniejszym byłby oczywiście Kaczogród. Należałoby stworzyć wizerunki kluczowych postaci oraz scenariusz. Ale przyznam, że nie mogę się powstrzymać od wyobrażania sobie, że można by zwiedzać również miejsca z zupełnie innej bajki, na przykład posiadłość Bruce'a Wayne'a czy Café René. :-D

Chciałbym niniejszym zaprosić Was wszystkich do wzięcia udziału w tworzeniu tej gry. Jeśli ktoś miałby możliwość i chęci, niech działa. Obecnie sprowadzałoby się to do tworzenia kafelków, ale w przyszłości zaopatrzyłbym nas w narzędzia do ich grupowania (tworzenie postaci i lokacji) oraz animowania. Podlinkowany moduł z dużym powodzeniem można zastąpić programem do obróbki grafiki rastrowej (np. GIMP) i tam też tworzyć nawet lokacje, ale to zostawmy dla tych, którzy na takim programie się znają. ;-)

Przykład wzoru do naśladowania. A gdyby ktoś był ciekawy - VHGC to skrót od Virtual Handheld Game Console. Za wszelkie sugestie (w tym zgłaszanie usterek) będę niezmiernie wdzięczny. Za negatywne komentarze mniej. :-P

Na koniec drobne uwagi organizacyjno-techniczne. Istnieje ryzyko kradzieży efektów pracy, wykonanej w ramach tego projektu. Uznałem, że wystarczające będzie, przynajmniej na razie, z jednej strony zaciemnienie kodu JS, a z drugiej wprowadzenie hasła dla spakowanych plików. Jest nim pełna, dwuczłonowa nazwa niniejszego forum pisana łącznie, gdzie trzeba od dużej litery oraz ze znakiem interpunkcyjnym.
Jest jeszcze druga sprawa. Otóż wykonaną tu pracę ktoś może uznać za kradzież. Mam na myśli w szczególności Disneya i kwestię prawa autorskiego. No cóż, mogę powiedzieć tylko to, co zwykle, czyli że nikt nie będzie czerpał z tego projektu korzyści finansowych, że to twórczość fanowska jak fan arty, że to promowanie samego Disneya a nie szkodzenie mu, że nie ma tu nic obraźliwego, że to inicjatywa zorganizowanych i przedsiębiorczych fanów i tak dalej. Ale czy to wystarczy? Nikt nie chciałby mieć problemów przecież.

Ach, moduł graficzny jest w angielskiej wersji językowej. Chciałem, żeby wszystko było po polsku, ale JavaScript przemógł mnie w drugą stronę (dlatego proszę o poprawianie mnie w angielszczyźnie, bo kierowałem się bardziej intuicją niż słownikiem). Zresztą, kaczogrodzianie mówią po angielsku (niektórzy z wyraźnym, południowym akcentem ;-)).
Avatar użytkownika
Semmko
 
Posty: 211
Dołączył(a): Śr lip 30, 2008 5:57 pm
Lokalizacja: Kraków
Imię: Ziemek
GG: 0

Re: Projekt DP!: Densitas

Postprzez Semmko » Pn gru 14, 2015 12:55 am

Moi drodzy, jeśli ten projekt umrze, to na pewno nie przede mną. Wstawiłem na YouTube dwa filmiki instruktażowe (1 i 2). Pomogą one każdemu, kto byłby zainteresowany współtworzeniem gry. Bo tworzymy tutaj grę, między innymi. :-) Pomyślałem, że materiał wizualny najlepiej przemówi do wszystkich zaciekawionych tym przedsięwzięciem osób. Również do tych, które nie zamierzają się angażować. W dzisiejszym, dwuczęściowym odcinku, przygotowujemy jednolite środowisko pracy. W kolejnym chciałbym Wam zaprezentować oczekujący od roku moduł tworzenia kafelków (studio graficzne). Koniecznie włączcie napisy.
Avatar użytkownika
Semmko
 
Posty: 211
Dołączył(a): Śr lip 30, 2008 5:57 pm
Lokalizacja: Kraków
Imię: Ziemek
GG: 0

Re: Projekt DP!: Densitas

Postprzez Semmko » N sie 14, 2016 12:05 am

Dwa miesiące temu nadarzyła się okazja, abym przesunął próg postępów Densitas do przodu. Skorzystałem z niej i to obficie, ale bardzo szybko poszczególne wątki zaczęły tak obszernie się rozrastać i ewoluować, że całkowicie mnie zatkały. :?

Dziś chciałbym zaprezentować Wam dwa krótkie, chiptune'owe tematy muzyczne. Wydaje mi się, że z powodzeniem można by je wykorzystać w grze komputerowej o mocnym retro-charakterze. Pierwszy pasuje do lokacji mrocznych i niebezpiecznych, a drugi jest bardziej fabularny i nostalgiczny.

Szczerze zapraszam każdą i każdego z Was do zaznaczenia swojej obecności w tym przedsięwzięciu. :-)

----------------------------------------------
MAKE DISNEYPOLSKA! GREAT AGAIN
----------------------------------------------
Avatar użytkownika
Semmko
 
Posty: 211
Dołączył(a): Śr lip 30, 2008 5:57 pm
Lokalizacja: Kraków
Imię: Ziemek
GG: 0

Re: Projekt DP!: Densitas

Postprzez Semmko » Śr lis 29, 2017 5:25 pm

Z wielką przyjemnością chciałbym Wam niniejszym ogłosić, że tworzę pełnoprawną i samodzielną, konkretną grę komputerową. Zapraszam do obejrzenia zapowiadającego ją filmiku. :-)

To oczywiście mała, jednoetapowa gierka, a ja znajduję się dopiero w połowie drogi do jej wydania (no, przynajmniej w pierwszej połowie ;-)), ale informuję o niej ze szczególną radością. Wiedzcie tylko, proszę, że dużo się dzieje wokół tego, co z dystansu wygląda na malutki projekt, w dodatku niezakończony. Ta wiadomość zwiastuje pojawienie się w przyszłości (w tym wątku, ale nie tylko) rzeczy mocno wyróżniających się swoją pozytywnością na tle ostatnich 10 lat wspólnego wysiłku tworzenia gier (poczynając od projektu SimDuckburg), moich starań w temacie Densitas oraz ogólnego obrazu forum i społeczności DP!.

Wracając jednak do samej gry — nie ma jeszcze właściwego tytułu, roboczym jest „Gra 1”. Na czym polega? Cel zabawy to uzyskanie dostępu do wielkiego brylantu, który znajduje się w ekspozycyjnej gablocie. Chroni go system alarmowy, wykorzystujący światła laserów. By je wyłączyć, należy odkryć właściwą kombinację ruchów, wykonywanych szmaragdem.

Wszyscy jesteśmy fanami Disneya, publikujemy na forum, którego nazwa to Disney Polska!, przedmiotem naszego zainteresowania i działalności jest twórczość disnejowska, dlatego trudno, by tematem gry, którą tu przedstawiam, nie był zaczarowany świat Walta Disneya. A jednak być nie może, ponieważ prawo autorskie zabrania umieszczania nawiązań do uniwersum Disneya zarówno w samej aplikacji, jak też w oficjalnych materiałach, które jej dotyczą. Będę to respektował i pozostawię wyobraźni gracza budowanie kontekstu przedstawionej tam sytuacji. Ja mam na nią co najmniej jeden — mój prywatny — pomysł.

„Sknerus McKwacz udaje się do Klubu Miliarderów na ważne spotkanie. Chce dobrze wypaść, dlatego planuje zaprosić bogatych znajomych na krótką wycieczkę po Skarbcu, by pochwalić się najcenniejszym brylantem świata, który — szczęśliwym losu zrządzeniem — znajduje się w jego kolekcji. Prosi zatem Donalda, aby dokładnie wypolerował ten klejnot. Czasu jest mało, więc za to specjalne zadanie płaci ekstra i podnosi swojemu siostrzeńcowi stawkę godzinową o całe 15 centów. Uprzedza, że Diodak wprowadził ostatnio nowe zabezpieczenie (laser kwantowy), które jednak może zostać dezaktywowane za pomocą szmaragdu — po czym w pośpiechu wychodzi z trzaskiem zamykając drzwi.”

Ba-dum tss! :-P

-----------------------------------------------
MAKE DISNEY POLSKA! GREAT AGAIN
-----------------------------------------------
Avatar użytkownika
Semmko
 
Posty: 211
Dołączył(a): Śr lip 30, 2008 5:57 pm
Lokalizacja: Kraków
Imię: Ziemek
GG: 0


Powrót do Inne

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości

cron