Rabu, 07 Desember 2011

Interfacing the PHP world

I have done a few tweets in the past weeks hinting at wanting to create a set of common interfaces for things like logging, caching etc. Now I pondered this some more and there are a couple of problems which I am not yet sure how to overcome them. Obviously the goal would be to make it easier to drop in components from one library/framework into another. If you want to see a concrete case where such interfaces could help just have a look at the recently created Doctrine Search project which needs anHTTP client.
So one problem is that it just feels strange to have these interfaces flying around as separate repositories. Of course this can be solved by eventually bringing them into PHP core itself. Until then they could be provided similar to how PHP_Compat provides forward compatibility. That being said I again want to stress that I think these interfaces should be first defined and tested in user land. If the interfaces do not make it into core, they could simply also be copied into the various projects. After all these interfaces should not change often. So first problem sort of solved.
Another issue is that not all frameworks are using PHP 5.3 yet, for example CakePHP 2.0 was just released targeting PHP 5.2. One solution to make things compatible would of course be to place these interfaces into the global namespace. However this runs the risk of collisions with PHP. So another approach could be to simply let those older frameworks "namespace" using the old PEAR style naming convention. Of course this would still prevent real compatibility between PHP 5.3 and PHP 5.2 frameworks. But it would at least help that the API's would be fundamentally the same, making it easier to write adaptors and also ensure that eventually things could grow together.
Now the third problem is much bigger. Most frameworks these days are using PSR-0 for autoloading and class naming, which is great. The reason why adoption is so good is that PSR-0 is already fairly old and. It always takes a while until frameworks can actually adopt these kinds of standards. Right now this time quite long as we just had a flurry of new major versions: FuelPHP, CakePHP, FLOW3, Symfony2. Of course there are still other frameworks that are not stable yet like Lithium and Zend Framework 2. Now if we start to talk among all of these frameworks I am guessing that it will be quite unproductive since all the frameworks that just went stable will likely want to push their specific method names.
Of course they could also add adaptors or simple duplicate methods, but who wants to do that if that means your framework gets more ugly while the other frameworks don't need to change anything? I have not really studied the various interfaces of the stable frameworks, let alone those of the non stable ones. Maybe we get lucky, but more likely we will run into minor differences. So this could be the killer for the entire idea and so in the end maybe the only solution would be for one framework to try and come ahead by convincing other frameworks and application to simply adopt theirs. My personal favorite Symfony2 seems like in a strong position to come ahead in this area given how many libraries and frameworks are adopting Symfony2 components. But it feels iffy to try and compete on interface adoption. We should compete for implementation adoption!

Sumber : http://pooteeweet.org/blog/2008

Kamis, 13 Oktober 2011

Antarmuka


Dalam penggunaan umum, sebuah antarmuka atau interface adalah sebuah titik, wilayah, atau permukaan di mana dua zat atau benda berbeda bertemu; dia juga digunakan secara metafora untuk perbatasan antara benda. Kata interface kadangkala (biasanya dalam bidang teknik) disingkat menjadi "i/f".

Bentuk kerja dari interface berarti menghubungkan dua atau lebih benda pada suatu titik atau batasan yang terbagi, atau untuk menyiapkan kedua benda untuk tujuan tersebut.

Kata interface juga memiliki arti khusus:
antarmuka pengguna adalah fungsi dan atribut sensor dari suatu sistem (aplikasi, perangkat lunak, kendaraan, dll) yang berhubungan dengan pengoperasiannya oleh pengguna.
Dalam elektronik dan teknik komputer, sebuah antarmuka dapat berarti:
Batasan fisik dari dua subsistem atau alat.
Sebuah bagian atau sirkuit di beberapa subsistemyang mengirim atau menerima sinyal ke atau dari subsistem lainnya: antarmuka jaringan, antarmuka video, kartu network.
Sebuah standar yang menjelaskan sebuah himpunan karakteristik yang berfungsi, karakteristik interkoneksi fisik umum, dan karakteristik signal untuk pertukaran data atau signal; antarmuka USB, antarmuka SCSI.
Dalam telekomunikasi, sebuah titik interkoneksi antara pengguna peralatan terminal dan fasilitas komunikasi komersial.
Dalam teknik software, ia adalah sebuah spesifikasi dari properti sebuah komponen software yang komponen lainnya dapat bergantung kepadanya: lihat antarmuka (ilmu komputer).
Dalam kimia, ia adalah permukaan antara dua fase yang berbeda dalah campuran "heterogeneous".
Dalam geologi, ia mungkin juga sebuah permukaan atau lapisan "anomalous" antara dua "epoch" geologikal yang berbeda atau jenis batuan.


HDMI

High-Definition Multimedia Interface (HDMI) adalah salahsatu antarmuka (interface) peralatan audio/video digital tanpa kompresi yang didukung oleh industri. HDMI menyediakan antarmuka antara beberapa sumber audio/video digital yang cocok, saperti set-top box, pemutar DVD atau penerima AV serta audio digital dan/atau monitor video yang cocok, saperti televisi digital (DTV).

HDMI mendukung video standar, yang lebih tinggi, ataupun definisi tinggi, ditambah dengan audio digital multi kanal pada kabel tunggal. Hal ini tak tergantung pada standar DTV seperti ATSC, dan DVB(-T,-S,-C), karena semuanya merupakan enkapsulasi stream data MPEG, yang dilewatkan pada dekoder, dan keluar sebagai data video tak terkompresi, yang bisa jadi berdefinisi tinggi. Data video ini kemudian dikodekan menjadi TMDS untuk transmisi digital melalui HDMI. HDMI juga mendukung 8 kanal audio digital tak termampatkan. Dimulai dengan versi 1.2, saat ini HDMI mendukung hingga 8 kanal audio satu bit. Audio satu bit digunakan pada CD Super Audio.

Konektor HDMI Tipe A standar mempunyai 19 pin, sedangkan versi resolusi yang lebih tinggi yang disebut Tipe B telah didefinisikan, walaupun belum digunakan secara umum. Tipe B mempunyai 29 pin, yang mampu membawa kanal video expanded untuk digunakan dengan tampilan beresolusi tinggi. Tipe B dirancang untuk mendukung resolusi yang lebih tinggi dari 1080p.

HDMI Tipe A cocok juga dengan Digital Visual Interface (DVI-D) hubungan tunggal yang digunakan pada monitor komputer modern dan kartu grafik. Hal ini berarti bahwa sumber DVI dapat menggerakkan monitor HDMI, atau sebaliknya, dengan adapter atau kabel yang sesuai, akan tetapi fitur audio dan pengendalian jarak jauh HDMI-nya akan tidak tersedia. Sebagai tambahan, tanpa dukungan untuk High-Bandwidth Digital Content Protection (HDCP) pada kedua ujungnya, mutu dan resolusi video dapat diturunkan dengan sumber sinyalnya untuk mencegah pengguna dari melihat atau lebih khusus lagi merekam isi yang dilindungi. (Hampir semua hubungan HDMI mendukung HDCP, sedangkan beberapa hubungan DVI tidak.) HDMI Tipe B cocok dengan DVI hubungan ganda yang terdahulu.

Pendiri HDMI adalah pembuat elektronika konsumen yaitu Hitachi, Matsushita Electric Industrial (Panasonic/National/Quasar), Philips, Sony, Thomson (RCA), Toshiba, dan Silicon Image. Digital Content Protection, LLC (cabang Intel) menyediakan HDCP untuk HDMI. HDMI telah pula didukung oleh produser film besar Fox, Universal, Warner Bros., dan Disney, serta operator sistem DirecTV dan EchoStar (Dish Network) seperti halnya juga CableLabs dan Samsung.

Spesifikasi

Kanal TMDS
Membawa audio, video dan data pendukung.
Metoda persinyalan: Sebelumnya merujuk pada spesifikasi DVI 1.0 spec. Single-link (HDMI Tipe A) atau dual-link (HDMI Tipe B).
Kecepatan piksel video: 25 MHz hingga 340 MHz (Tipe A, berdasarkan versi 1.3) atau hingga 330 MHz (Tipe B, berdasarkan versi 1.2A). Format video di bawah 25 MHz (misalnya 13.5 MHz untuk 480i/NTSC) ditransmisikan menggunakan skema pengulangan piksel. Hingga 48 bit per piksel dapat ditransmisikan, tanpa memperhatikan kecepatan.   Mendukung 1080p60[1].
Enkoding piksel: RGB 4:4:4, YCbCr 4:4:4 (8-16 bit per component); YCbCr 4:2:2 (12 bit per component)
Kecepatan sampel audio: 32 kHz, 44.1 kHz, 48 kHz, 88.2 kHz, 96 kHz, 176.4 kHz, 192 kHz.
Kanal audio: hingga 8.

Kanal DDC
Memberikan izin pada sumber untuk menginterogasi kemampuan perangkat tujuan.
Persinyalan I²C dengan clock 100 kHz.
Struktur data E-EDID merujuk pada CEA-861D dan VESA Enhanced EDID (V1.3).

Kanal Consumer Electronics Control (CEC)
Kanal ini opsional untuk diterapkan, akan tetapi wiring merupakan keharusan
Menggunakan protokol AV link standar industri.
Digunakan untuk fungsi kendali jarak jauh (remote control).
Bus serial dua arah dengan satu kabel.
Ditetapkan dalam Spesifikasi HDMI 1.0, diperbaharui dalam HDMI 1.2A.

Proteksi isi
Merujuk pada Spesifikasi High-bandwidth Digital Content Protection (HDCP) 1.10.


Interfacing


Common Gateway Interface atau disingkat CGI adalah suatu standar untuk menghubungkan berbagai program aplikasi ke halaman web.

CGI mirip sebuah program komputer yang menjadi perantara antara standar HTML yang menjadikan tampilan web dengan program lain, seperti basis data (database).[1] Hasil yang diperoleh dari proses pencarian dikirimkan kembali ke halaman web untuk ditampilkan dalam format HTML

Pendahuluan
Pada awalnya CGI adalah salah satu yang mendekati aplikasi server-side programming.[2] Program CGI yang sering digunakan adalah C++ dan Perl.[2] CGI merupakan bagian dari web server yang dapat berkomunikasi dengan program lain yang ada di server.[3] Dengan CGI web server dapat memanggil program yang dibuat dari berbagai bahasa pemrograman (Common).[3] Interaksi antara pengguna dengan berbagai aplikasi, misalnya database, dapat dijembatani oleh CGI (Gateway)[3] Kemampuan CGI ini dapat digunakan untuk Web Server IIS.

Sejarah CGI
CGI (Common Gateway Interface) merupakan skrip tertua dalam bidang pemrograman web.[4] Skrip bisa didefinisikan sebagai rangkaian dari beberapa instruksi program.[4] Untuk membuat skrip yang dapat dijalankan pada web diperlukan pengetahuan pemrograman.[4]

CGI sendiri telah muncul sejak teknologi web diperkenalkan di dunia pada awal tahun 1990, bersama dengan kemunculan CERN, web server pertama di dunia.[4] CGI disediakan sebagai tool, atau perlengkapan untuk membuat program web.[4] CGI digunakan untuk membuat program-program tampilan web yang lebih interaktif, koneksi ke basis data, bahkan membuat permainan (game).[4]

CGI pada masa-masa awalnya dibuat dengan bahasa C, bahasa yang juga digunakan untuk membuat web server pertama yaitu, CERN. CGI kemudian diadopsi oleh NCSA (National Central for Supercomputing Application) web server, dan hingga kini masih digunakan pada Apache Web Server, web server yang paling banyak digunakan oleh komunitas Internet saat ini.[4]

Walaupun demikian CGI bisa juga direalisasikan dengan banyak bahasa pemrograman lain. Mulai dari C, Perl, Python, PHP, Tcl/Tk, hingga skrip shell pada UNIX / LINUX.[4]

Keamanan Program CGI
CGI seringkali digunakan sebagai mekanisme untuk mendapatkan informasi dari user melalui fill out form, mengakses basis data (database), atau menghasilkan halaman yang dinamis. meskipun secara prinsip mekanisme CGI tidak memiliki lubang keamanan, program atau skrip yang dibuat sebagai CGI dapat memiliki lubang keamanan ataupun tidak sengaja). Potensi lubang keamanan yang digunakan dapat terjadi dengan CGI antara lain : [5]
Seorang pemakai yang nakal dapat memasang skrip CGI sehingga dapat mengirimkan berkas kata kunci (password) kepada pengunjung yang mengeksekusi CGI tersebut.
Program CGI dipanggil berkali-kali sehingga server menjadi terbebani karena harus menjalankan beberapa program CGI yang menghabiskan memori dan CPU cycle dari web server