An error occurred when processing your request.

Working On Wikidot Theme

31 Oct 2008 19:40

Today, we've been working on the new theme for Wikidot. It's mainly Łukasz work:

preview.png

I hope you like it.

Comments: 1

Doctrine PHP

30 Oct 2008 19:48

A few days ago, I found Doctrine Project which is an object-relational mapping (ORM) solution for PHP. It seems really powerful and actually very similar to Wikidot DB Layer (especially one in Wikidot 2).

Doctrine is a really cool project and has features of:

  • Wikidot DB
  • Zend Framework DB
  • Hibernate (ORM for Java)
  • Ruby on Rails DB

Let's start from the beginning of the list.

Doctrine is most similar to Wikidot DB, because both:

  • are ORM implementations for PHP
  • use abstract (non-PHP, non-SQL) data definition language
    • for Wikidot it's XML-based format
    • for Doctrine it's YAML-based one

It's similar to Zend Framework DB, because of:

  • using magic PHP methods for accessing objects properties

Hibernate and Doctrine shares:

  • completeness of the DB layer
  • higher abstraction than other DB layers

Ruby On Rails concepts in Doctrine:

  • using YAML as a model definition language
  • independence of database engine

Example of model definition:

User:
  columns:
    id:
      type: integer
      primary: true
      autoincrement: true
    login:
      type: string(64)
      unique: true
      notnull: true
    realname:
      type: string
    password:
      type: string(64)
      notnull: true
    im:
      type: string(64)
    token_active:
      type: string
    token_created:
      type: timestamp

Bet:
  columns:
    id:
      type: integer
      primary: true
      autoincrement: true
    brand:
      type: string(100)
      notnull: true
    qty:
      type: integer
      default: 1
      notnull: true
    unit:
      type: string(100)
      notnull: true

BetUser:
  columns:
    bet_id:
      type: integer
      primary: true
    user_id:
      type: integer
      primary: true
    wins_if:
      type: string
      notnull: true
  detect_relations: true

Doctrine comes with a CLI tool, that offers the following things:

Doctrine Command Line Interface

./doctrine.php create-tables
./doctrine.php rebuild-db
./doctrine.php generate-models-db
./doctrine.php generate-models-yaml
./doctrine.php generate-yaml-db
./doctrine.php load-data
./doctrine.php build-all-load
./doctrine.php generate-migrations-models
./doctrine.php build-all
./doctrine.php create-db
./doctrine.php migrate
./doctrine.php generate-yaml-models
./doctrine.php dump-data
./doctrine.php dql
./doctrine.php generate-migrations-db
./doctrine.php compile
./doctrine.php generate-sql
./doctrine.php drop-db
./doctrine.php generate-migration
./doctrine.php build-all-reload

The tool can be used to generate PHP files from YAML files, generate SQL files (for given DB engine), drop and create the database and more.

The dql seems to be an interesting option. Doctrine supplies its own backend-independent SQL-like language for querying and updating the DB. These operations can be done with the dql option. Although I haven't tested it yet, it seems perfect for some cronjobs or other automatic tasks that don't need to be coded in PHP.

<OFF-TOPIC>
Now, I'm converting my nuclear project — opiwo.com (bet a beer in Polish) to Doctrine ORM (from Zend Framework's one) to see how it works in reality. The project uses also other nice technologies like JSON-RPC.

I'm willing to minimize the work needed to launch it soon, by using bleeding edge technologies and web service programming concepts. The whole user interface part is programmed in JavaScript, jQuery (with many plugins) and static HTML files. Only pure data is fetched from server (with JSON-RPC). This gives more power to the server and user more responsive interface to the user. On the other side, the website may be more CPU-intensive (I hope not too much).
</OFF-TOPIC>

Please forgive me I'm now quite excited about the Doctrine. It's just how I react to some really cool (well-designed) things. I hope it's really that cool :).

Comments: 2

Knight Rider Mania

30 Oct 2008 15:15

Comments: 2

Aplikacja Do Facebooka

27 Oct 2008 23:23

Napisanie aplikacji Facebooka jest momentami proste ("kurcze, ale to proste") a momentami bardzo trudne ("cholera, dlaczego to jeszcze nie działa, o co biega?").

  1. Aby napisać aplikację Facebooka, trzeba mieć konto na Facebooku
  2. Trzeba się zapisać jako developer pod adresem: http://www.facebook.com/developers/
  3. Tam można stworzyć swoją pierwszą aplikację

Aby mieć aplikację, należy mieć własny serwer (lub kolegi) i przeznaczyć na aplikację pewną przestrzeń adresów, np. http://moj-server.com/aplikacja-facebooka/.

W Facebooku musimy wybrać Canvas URL, jest to adres w stylu: http://apps.facebook.com/moja-aplikacja/

Co ciekawe adresy http://apps.facebook.com/moja-aplikacja/COŚTAMDALEJ są automatycznie mapowane na http://moj-server.com/aplikacja-facebooka/COŚTAMDALEJ .

Facebook natomiast nie wyświetla dokładnie tego, co zaserwuje moj-server.com tylko jeszcze trochę obrabia wynik zapytania.

Schemat jest taki:

  1. Użytkownik wchodzi na http://apps.facebook.com/moja-aplikacja/coś
  2. Serwer Facebooka odpytuje http://moj-server.com/aplikacja-facebooka/coś przekazując zmienne HTTP POST zawierające dane autoryzujące użytkownika, listę jego znajomych i inne rzeczy
  3. Twój serwer może zweryfikować dane autoryzujące użytkownika łącząc się przez Facebook API z serwerem Facebooka. W kazdym połączeniu musi używać specjalnego klucza API (do pobrania ze strony Twoich aplikacji Facebooka).
  4. Twój serwer może odpytywać serwer Facebooka o potrzebne szczegóły lub korzystać z własnych zasobów, aby serwować treść
  5. Treść serwowana jest w specjalnym dialekcie HTML-a: FBML.
  6. Serwer Facebooka odbiera wygenerowany przez Twój serwer FBML, zamienia go na HTML (np. wstawiając imię osoby o facebookowym id 19394 zamiast <fb:name id="19394"/>) i wstawia go do swojego szablonu, np. do taba w profilu użytkownika, bądź tzn. canvasu — gdy aplikacja jest wołana z http://apps.facebook.com/moja-aplikacja
  7. Serwer Facebooka przesyła wygenerowany HTML (i Javascript) do przeglądarki.

Gdy jesteś na adresie http://apps.facebook.com/moja-aplikacja tuż nad paskiem stanu przeglądarki (czyli na dole) obok menu Applications i miniaturek kilku aplikacji, powinna pojawić się ikona Twojej aplikacji (jeśli ją ustawiłeś w ustawieniach) wraz z napisem Bookmark.

Kliknięcie tego napisu spowoduje dodanie aplikacji do zakładek i dodanie jej ikony obok istniejących. UWAGA: jakaś aplikacja może zniknąć z zakładek, gdyż na Facebooku można mieć tylko 5 ulubionych aplikacji. Aplikacja powinna być jednak dalej wyświetlana w menu Applications.

Jeśli ustawiłeś w ustawieniach aplikacji, że aplikacja zapewnia taba, to użytkownicy aplikacji bo zabookmarkowaniu aplikacji, będą mogli wejść w jej ustawienia (Applications > Edit > Bookmarks > Twoja aplikacja) i dodać sobie taba do swojej profilowej strony.

UWAGA: aby zadziałało dodanie taba, użytkownik musi autoryzować Twoją aplikację. Można to zrobić tak:

  1. Ustalić TOS URL w ustawieniach aplikacji
  2. w generowanym przez http://apps.facebook.com/moja-aplikacja/ FBML-u możesz zwrócić link
<a href="coś" requiredLogin="true">musisz mnie autoryzować</a>

Po kliknięciu na link, użytkownik zostanie zapytany o to, czy autoryzować aplikację. Po zautoryzowaniu aplikacji, dodanie taba będzie miało swój przewidywany skutek (w przeciwnym wypadku tab jest niby dodany ale nigdzie się nie wyświetla).

Podstawą do napisania aplikacji, jest zrozumienie architektury tego rozwiązania. Na stronach Facebooka Twój serwer jest nazywany klientem i nie powinno Cię to mylić. Pomimo, że to serwer Facebooka odpytuje Twój serwer — czyli ma ewidentną rolę klienta, dokumentacja upiera się, że jest to serwer. Należy o tym pamiętać.

Pozdrawiam i życzę miłego facebookowania :).

Comments: 3

page 1 of 3123next »
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License