AFAID 2013: Mulai Dari Antrean Panjang, Mencari Tas, hingga Konser Anisong

Hari Sabtu, 7 September 2013. Hari yang ditunggu-tunggu pun akhirnya tiba. Pagi hari pukul 06.30 saya bersiap-siap pergi ke Jakarta Convention Center untuk mengikuti event Anime Festival Asia Indonesia 2013 (AFAID 2013). Pukul 07.15 saya tiba di JCC lalu mulai mengantre di antrean VIP untuk menukarkan voucher RajaKarcis dengan tiket konser AFAID.

Antrean sudah sangat panjang padahal saya sudah datang pagi-pagi, ticket box pun belum dibuka, karena baru akan dibuka jam 8 pagi. Itupun antrean VIP, belum lagi antrean tiket exhibition only/exhibition+stage itu lebih panjang lagi. Untungnya antrean bergerak lumayan cepat, pukul 8.35 saya sudah memperoleh tiket. Saya kemudian mengantre untuk masuk ke exhibition hall. Awalnya sih tidak mau masuk cepat-cepat tapi insting saya mengatakan bahwa saya harus segera masuk.

Saya mengantri di antrean khusus pelanggan Indosat. Anehnya saya cuma ditanya “Anda pelanggan Indosat?” Saya jawab ya, tanpa pemeriksaan apapun walau saya sudah menyodorkan handphone untuk dicek petugas. Kalau begitu sih berarti ngaku-ngaku pakai Indosat juga bisa dong, lumayan kan ngantrenya jadi lebih cepat, hehe. Pukul 10.00 saya masuk entrance untuk mengambil undian autograph Kalafina. Dan.. menang undian! Alhamdulillah. FYI, pemegang tiket VIP belum tentu mendapatkan autograph artist anisong. Untung saja saya memutuskan untuk cepat masuk, jika tidak kupon undian keburu habis. Yang datang sekitar jam 12 pun katanya sudah kehabisan kupon undian. Insting memang tidak logis tapi seringkali benar, hehe.

Karena hall baru dibuka, suasana saat itu belum begitu ramai, masih bisa wara-wiri dengan santai. Saya melihat-lihat stand di lantai satu, dua, dan basement, tapi tidak ada yang benar-benar menarik, maklum saya memang tidak mengoleksi model kit, action figure, artwork, maupun merchandise anime lainnya. Saya hanya menikmati film dan soundtracknya saja. Saya memutuskan untuk menonton di stage saja, dimulai dengan pemutaran anime Mahou Shoujo Madoka Magica the movie. Walaupun namanya movie, itu sebenarnya cuma rekap dari seriesnya saja. Jalan cerita tetap sama, namun yang jelas beda suasana, biasanya kan di depan laptop, hehe.

Pukul 12.15 movie pun selesai, saya keluar sejenak untuk ke restroom, lalu makan dan shalat dzuhur. Keluar dari restroom, betapa terkejutnya saya melihat antrean menuju food court di basement. Antreannya sangat parah layaknya kemacetan di puncak. Untuk turun ke basement pun nyaris tak bergerak. Bayangkan. Saya memutuskan putar balik ke arah stage untuk melihat artist anisong berdiri di panggung, bukan untuk menyanyi tapi untuk menyampaikan sepatah dua patah kata kepada penonton. Artist yang tampil ketika itu adalah semua artist yang tampil di konser, yaitu Eir Aoi, Aya Hirano, May’n, fripSide, BABYMETAL, dan Kalafina.

Sesi sambutan artist anisong berakhir sekitar pukul 13.30. Saya langsung ke basement untuk makan siang, untungnya antrean sudah mendingan. Selesai mengantre hotdog kira-kira pukul 14.15, saya bertemu dengan Rizal, teman saya sejak SMP. Kemudian saya menitipkan tas ke Rizal karena mau shalat dzuhur. Selesai shalat, saya terkejut karena Rizal sudah tidak ada di tempat kami berkumpul tadi. Saya pun menelepon Rizal untuk menanyakan dimana posisi dia namun tidak ada sinyal sehingga sangat sulit berkomunikasi. Saya harus keluar hall dulu untuk meraih sinyal. Namun ternyata tidak sesuai harapan, sinyal tetap tidak ada. Saya balik lagi ke basement mencari Rizal, kebingungan seperti anak hilang, tanpa membawa tas yang notabene ada laptop di dalamnya. Dua puluh menit berlalu,saat itu pukul 14.50 saya balik lagi keluar hall, untungnya ada sinyal sehingga saya akhirnya tersambung ke Rizal. Posisi dia ternyata sedang menunggu di meja resepsionis tepat pendaftaran autograph. Saya pun bergegas ke sana untuk mengambil tas seraya berkata, alhamdulillah tepat waktu. Tepat waktu karena saya harus mendaftar autograph pada pukul 15.15. Jadi istilahnya saya mencari Rizal dengan diberi time limit gitu, dengan kondisi sinyal handphone yang sangat sangat busuk, hehe. Saya tanya Rizal, kenapa tadi pindah posisi? Ternyata karena kondisi di basement dekat musholla saat itu sangat tidak kondusif. Terlalu padat, orang-orang pun duduk-duduk di pinggir lorong untuk istirahat dan makan. Karena menghalangi jalan, beberapa yang duduk ditertibkan, disuruh pindah ke tempat lain (termasuk Rizal juga). Oh, I see. Jadi begitu kejadiannya, untung berakhir dengan happy ending, yeeaay.

Pukul 15.15, antrean autograph  dibuka. Saya menyerahkan kupon undian autograph dengan senang hati kemudian saya menerima poster yang sudah ditandatangani Kalafina, diserahkan langsung oleh mereka! Saya dan mereka saling meng-arigatou-kan. Maksudnya, saya bilang “arigatou” (terima kasih), mereka juga bilang “arigatou.” Singkat hanya beberapa detik tapi rasanya sangat memuaskan. Kalau pernah ngefans sama artist/idol pasti ngerti lah ya rasanya gimana.

Kemudian saya dan Rizal masuk stage lagi untuk menonton penampilan para cosplayer yang turut mengisi acara AFAID, dengan Danny Choo sebagai host. Jujur saja kalau perihal cosplay saya sama sekali tidak up to date, saya tidak kenal satupun dari mereka, hahaha. Tapi lumayan lah untuk mengisi waktu sebelum bersiap-siap nonton konser anisong yang akan dimulai pukul 18.30. Cosplayer di AFA jumlahnya sangat banyak, seliweran dimana-mana sampai seringkali menghalangi jalan gara-gara banyak yang minta foto bareng. Dari sekian banyak cosplayer yg hadir, hanya beberapa saja yang berhak berdiri di stage. Selain bintang tamu yang notabene cosplayer kondang, cosplayer yang menang lomba pun diberi kesempatan tampil di stage. Itu dari segi kuantitas, dari segi kualitas pun bermacam-macam, mulai dari yang cantik dan keren hingga yang seakan minta didorong ke jalur busway (saking parahnya), ahahaha.

Sekitar pukul 17.00 acara cosplay sudah selesai, kami (saya dan Rizal) pun membeli makanan di food court, yaitu bento. Akhirnya makan nasi juga, haha maklum orang Indonesia. Lalu kami melihat-lihat keadaan sekitar stage ternyata yang memegang tiket standing dan GA sudah mengantre masuk stage. Hmm, itu kan menjelang maghrib, apa gak pada shalat dulu ya?. Tapi harusnya sih bisa masuk lagi setelah keluar asalkan tiket tetap di tangan. Kalau kami karena sama-sama beli tiket VIP jadinya shalat maghrib dulu sebelum masuk stage, toh di tiket ada nomor kursi jadi pasti kebagian tempat.

Selesai shalat maghrib kami masuk stage dan langsung mencari tempat duduk masing-masing. Nomor tempat duduk yang tertera di tiket saya adalah N-19, sedangkan Rizal saya agak lupa tapi seingat saya sih dia lebih depan dari saya. Beberapa menit duduk, akhirnya artist pertama tampil di stage, merekalah fripSide! Mereka menyanyikan lagu-lagu soundtrack anime, sebagian besar dari anime To Aru Kagaku no Railgun. Saya tidak hapal lagu-lagunya, animenya pun belum nonton jadi saya lebih sering duduk daripada berdiri pegang glowstick. Lagu mereka aliran pop dengan nuansa techno dan electronic. Tipikal soundtrack anime yang catchy. Setelah mereka selesai tampil, BABYMETAL muncul. Sesuai namanya, genre musik mereka keras, kental unsur metal walaupun menurut saya masih banyak unsur pop dan electronic. Beberapa lagu sangat menggoda untuk headbanging layaknya menonton konser metal. Yang menarik adalah, para personel BABYMETAL tidak berparas seram tetapi justru lucu dan imut karena mereka adalah gadis remaja. Mereka menyanyi diiringi live band yang memainkan instrumen musik metal tentunya. Kadang saya lebih tertarik melihat mereka menabuh drum dan memainkan gitarnya karena memang terlihat skillful dan menjiwai.

Setelah BABYMETAL selesai perform, saya kira Kalafina bakal langsung tampil ternyata ada artist lain yang tidak saya lihat di line up. Saya lupa mereka siapa, yang jelas mereka dari Akihabara. Bukan, bukan AKB48, tapi semacam idol group juga sepertinya. Mereka membawakan lagu-lagu yang saya tidak tahu itu lagu apa, haha. Sepertinya mereka memang tergolong artist baru. Maka saya hanya duduk-duduk saja tanpa mengayunkan glowstick. Sesekali menguap.

Mereka pun selesai perform, saya dan semua penonton konser menunggu-nunggu tampilnya Kalafina. Namun 15 menit berlalu, belum muncul juga. Tiga puluh menit, belum juga. Sedikit lewat 30 menit, akhirnya backsound yang diulang-ulang terus pun dihentikan. Penonton bersorak. Benar saja, di layar tertulis “Coming up Next. Kalafina.” Penonton lanjut bersorak memanggil-manggil nama personil Kalafina. “KEIKO!” “WAKANA!” “HIKARU!” Begitulah kira-kira suasana venue saat itu. Stage seketika gelap, di layar ditampilkan video pembuka konser, diiringi overture khas Kalafina. Tentunya beda dengan overture ala AKB48. Overture Kalafina lebih kalem, sesuai dengan genre musik mereka.

Overture selesai. Kalafina berdiri di stage. Lagu pertama yaitu “oblivious,” soundtrack Kara no Kyoukai episode 1. Lagu yang epic seperti biasa, menariknya adalah, waktu single oblivious diluncurkan ke pasar, Hikaru belum bergabung dengan Kalafina. Jadi, ada warna tersendiri ketika live performance. Yang saya rasa agak kurang adalah choir Wakana agak menurun dibanding waktu dulu. Saya juga kurang tahu pasti sebabnya tapi sejak single Hikari Furu sudah terasa. Lanjut lagu berikutnya, “Consolation.” Lagu tersebut bukan soundtrack anime tapi lagu baru yang ada di album terbaru mereka dengan judul sama, “Consolation.” Lagu ketiga adalah “ひかりふる” (Hikari Furu). Lagu melankolis yang merupakan soundtrack Mahou Shoujo Madoka Magica the movie. Lagu ini semacam “vocal version” dari salah satu lagu di OST Madoka Magica yang di-compose oleh Kajiura Yuki: “Sagitta Luminis.” FYI, Kajiura Yuki adalah composer ternama asal Jepang yang mendirikan Kalafina, membuat lirik, serta mengaransemen semua lagu Kalafina.

Dua lagu selanjutnya adalah soundtrack anime Fate/Zero yaitu ” 満天” (Manten) dan “to the beginning”. Penonton langsung beramai-ramai berdiri dan nge-chant ketika lagu “to the beginning” dimulai. Maklum lagu tersebut adalah opening song Fate/Zero, wajar kalau banyak yang tahu lagunya. Tempo lagunya juga lebih cepat jadi lebih enak untuk chant. “Oy oy oy.” Yah begitulah kira-kira. Lagu keenam adalah “音楽” (Ongaku) yang juga bukan soundtrack anime, jadi tidak banyak yang tahu. Namun karena lagunya cathcy, easy listening dan bertempo cepat, penonton jadi mudah mengikuti sambil nge-chant. Terakhir, adalah lagu “未来” (Mirai), salah satu soundtrack Madoka Magica the movie juga. Merupakan “vocal version” dari “Credens Justitiam” karya Kajiura Yuki.

Itulah ketujuh lagu yang dinyanyikan Kalafina. Konser yang sangat indah dan epic, membuat merinding. Aransemen musik dan vokal yang indah. Suasana venue yang semarak. Belum lagi, sesi MC dari mereka untuk berinteraksi dengan penonton. Walaupun pakai bahasa Jepang dan saya tidak mengerti mereka ngomong apa, tetapi saya tetap menikmati. Benar-benar pengalaman berharga yang tidak akan terlupakan. Priceless. Walaupun tetap perlu uang untuk bayar tiket, tetapi pengalaman menonton mereka secara langsung adalah priceless.

Konser selesai. Penonton bertepuk tangan lalu meninggalkan stage. Saya kemudian menghampiri stand Sony yang ternyata sedang menjual CD Kalafina: Consolation. Wah, saya sangat beruntung ternyata Kalafina sudah resmi menjual albumnya di Indonesia! Saya pun membeli satu CD seharga 85 ribu rupiah tersebut. Saya bertemu dengan Rizal lagi lalu berjalan ke pintu keluar. Alangkah terkejutnya saya melihat hujan turun dengan cukup deras. Karena saya ke JCC naik motor dan tidak membawa jas hujan, maka mau tidak mau saya harus menunggu hingga hujan reda. Entah kapan redanya. Rizal sudah lebih dulu pulang, jadi saya menunggu sendirian. Sekitar pukul 22.15, hujan akhirnya reda. Saya berangkat pulang, lalu tiba-tiba hujan mulai deras lagi. Saya lanjut berkendara saja, alhamdulillah hujannya reda lagi. Saya sampai kamar dengan celana cukup basah, sepatu juga. Tapi untungnya poster yang ditandatangani Kalafina tidak basah. Alhamdulillah.

Selesai shalat Isya, saya “tepar” langsung tidur. Setelah capek wara-wiri dan berdesak-desakan akhirnya bisa guling-guling di kasur lagi. Very tiring, but was worth it. Really. Totally worth it.

Changed!

Okay, putting only technical things into a blog is actually boring. So from now on, I will post everything on this blog. Not really everything actually, since I have another blog. I will also use Bahasa Indonesia here.

In short, more general and.. bilingual! :v

Templating

Yes, this article is still about Django. In this short article, I will explain about templating. Django uses a templating language that differs from Python itself. Why? Because, this language is intended for web designers. Thus, web designers don’t have to understand “real programming” with Python. And also this is also useful to make clear difference between application logic and user interface. With this simple templating language, Django can prevent developers from using too much programming logic in a template.

Things you should remember about this templating language are:

  1. The language is PURELY for displaying data
  2. You can’t declare variables or functions in a template
  3. Operators are basic and limited
  4. Only support basic programming logic like looping or operator
  5. The language consists of template tags, template filters,  and context variables
  6. Template tags are in {% %} bracket. Examples: {% for %}, {% endfor %}
  7. Template filters are for simple data processing, like formatting or basic computation. Filters are identified by “|”. Examples: users|last, users|element:5
  8. You can define custom template tags and template filters
  9. Variables in a template are called context variables
  10. You can define context processors in each Django app. Context processors are like “pre-loaded” context variables that will be loaded every time a template being rendered. This is perfect for displaying data that must be displayed on every page. Examples: is_logged, username

Another interesting thing about templating in Django is: template inheritance. Template inheritance is powerful for layouting your template. You can define a basic layout containing header, content, and footer called layout.html. Then you can create a template that extends layout.html, with different content than another template which is also extending layout.html. In short, those two templates have same layout, but different content. Thus, you don’t have to write header & footer on every template.

For example, this is the layout.html


<html>

<head><title>Title</title></head>

<body>

    {% block header %}

        This is header

    {% endblock %}

    <div class="content">

         {% block content %}

         {% endblock %}

    </div>

    {% block footer %}

        This is footer

    {% endblock %}

</body>

</html>

And this is a template that extends layout.html (page1.html):


{% extends "layout.html" %}

{% block content %}

    This is content of page 1

{% endblock %}

So, page1.html will display a complete web page with “This is content of page 1” as the content.

Simple and pretty neat :p

Model Inheritance

Model Inheritance is one of the interesting features of Django. With this feature, you can define “base” models to be extended. For example, you may want to create some models that have timestamp or “logical delete” attribute (i.e is_deleted). Defining timestamp & is_deleted attributes in every model would be time-wasting. So, in Django you can define abstract models.

Abstract models are different with ordinary models. When syncdb command is executed, Django will not create database tables for those abstract models. Django will only create database tables for  explicit models that extend abstract models. This is useful. Very useful. Take a look at these code for example:

This is an abstract model.

#file: blog/core/models.py

from django.db import models

import datetime

class BaseModel(models.Model):

    timestamp = models.DateTimeField(auto_now_add = True)
    is_deleted = models.BooleanField(default = False)

    def save_upd(self):
        self.timestamp = datetime.datetime.utcnow()
        self.save()

    def delete_soft(self):
        self.is_deleted = True
        self.save_upd()

    class Meta:
        abstract = True

This is an example of a model that extends BaseModel.

#file: blog/user/models.py

from blog.core.models import BaseModel

class User(BaseModel):
    id_user = models.AutoField(primary_key = True)
    username = models.CharField(max_length = 200)
    password = models.CharField(max_length = 128)

    class Meta:
        db_table = 'user'

With that, User model will have id_user, username, password, timestamp, and is_deleted as attributes. That’s all. Very simple & useful, indeed.

How Django Works

We already know that Django is a web framework. But now, how it works? It’s useless if you randomly develop a Django application without understanding about its concepts. The first question is: Where should I start?

To answer that question, let’s take a look about a Django application’s request flow:

web browser address bar -> urls.py -> views.py -> models.py -> database

As stated on Django documentation, a Django project consists of applications. Each of application has Python modules. Each Python module has classes or functions. The structure is like this:


Project_Name
    templates
        app1
             index.html
        app2
             index.html

    App1

        models.py

        views.py

        urls.py

    App2

        models.py

        views.py

        urls.py

    settings.py

    urls.py

You can place the templates folder outside or inside the apps, depending on your TEMPLATE_DIRS on settings.py.

So, the answer is, start with settings.py, and then urls.py, models.py, views.py, and the last is templates. Django will first check settings.py file to verify that your Django project is configured properly. After that, Django will dispatch request on urls.py. That urls.py contains URL Patterns that constructed in regex (Regular Expression). For example:

#urls.py
from django.conf.urls import patterns, url
from blog.news import views

urlpatterns = patterns('',
    url(r'^news/(?P<id_news>\d+)$', views.news, name='news'),
)

That URL Pattern will dispatch HTTP Requests and reply with HTTP Responses from views.news() function.  The function will return News with id = id_news, and then render a template to display data. For example, if you used localhost:8000 as your host & port, url http://localhost:8000/news/3 will display a page containing a news with id = 3.

What is inside that views.py module? For example, here it is:

from blog.news.models import News
from django.shortcuts import render_to_response
from django.template.context import RequestContext, Context

def news(request, id_news)
    news = News.objects.get(id_news = int(id_news))
    context = Context({
       'news':news,
    })
    return render_to_response('templates/news/view.html', context, context_instance = RequestContext(request))

You can see that views.py get data from blog.news.models module a.k.a models.py file, right beside views.py. This is how models.py file looks like:

from django.db import models

# Create your models here.

class News(models.Model):
    id_news = models.AutoField(primary_key = True)
    text = models.TextField()
    timestamp = models.DateTimeField()

    class Meta:
        db_table = 'news'

That models.py file of course, get data from database via Django’s built-in ORM (Object-Relational Mapping). You can define the table name with Meta class, and the column names are exactly the same as News class properties.

Pretty simple, right? Those are just basic concepts, I will explain concepts of templating later. Once you know about these basic concepts, getting started with Django will be easy. Hope this helps 🙂

Installing Django

What is Django? Django is a powerful and fully-customizable web framework written in Python. Some websites like Instagram used it. Django  has a rather unique concept: MTV (Model-Template-View), unlike most web frameworks. As you can see, there is no “controller” in Django. Django provides “View” to help developers implementing the controller’s jobs. “View” is the place for retrieving data from “Model” to be displayed on “Template”. What is “Template”, anyway? Templates are simply the front-end component. They used a templating language, a language that differs from Python itself. It is very simple, with basic programming logic like operator or loop. For example, you can make HTML files as templates, with template language on them.

So now, how to install Django? Quite simple. The steps are just simply:

  1. Install Python
  2. Install pip
  3. Install Django

Installing Python

Installing Python is very simple. But which version? I recommend version 2.7 since it worked perfectly on running Django.

On Windows, you can get the installer from here.

On ubuntu, you can run these commands:

sudo apt-get update
sudo apt-get install python2.7

Once Python have been installed, you can install “pip” now.

Installing pip

Pip is a tool for installing and managing Python packages, including Django. Installing pip on ubuntu is very simple, just run this command:

sudo apt-get install python-pip

For windows, first you must add these paths into your environment variables “PATH”:

C:\Python27\
C:\Python27\Scripts\

And then, run python-distribute script to install easy_install

python distribute_setup.py

Install pip with easy_install

easy_install pip

Installing Django

The command for installing Django with pip is very simple:

pip install django

To install Django with specific version, run this command:

pip install django==1.4.2

You can replace 1.4.2 with any Django version, such as 1.3.1 or 1.5.0.

Remember that you must use sudo for installing python packages with pip on UNIX-based operating systems.

Verify Django Installation

To make sure if Django is properly installed, you can simply import Django and then view the version, like this:

$ python
>>> import django
>>> django.VERSION
(1, 4, 2, 'final', 0)

Congratulations! Now you can start making your Django projects!

Hello World!

It works!

This is the default web page for this server.

The web server software is running but no content has been added, yet.