Senin, 01 Maret 2010

MYSQL Fulltext Search

MYSQL Fulltext Search

Untuk sebuah website yang memiliki banyak data, menyediakan fasilitas search merupakan hal yang tepat untuk mempermudah user mencari dengan "keyword" yang spesifik. Untuk membuat search engine ini, ada beberapa metode yang bisa digunakan, dan pada pembahasan kali ini, kita akan fokuskan kepada Full-text search pada MySQL.
Sebelum memulai, ada beberapa hal yang perlu diketahui, sbb:
  1. Sebuah full-text index pada Mysql adalah index dengan tipe FULLTEXT.
  2. Full-text index hanya dapat digunakan pada table MyISAM, dan dapat di buat untuk kolom dengan tipe CHAR, VARCHAR, atau TEXT.
  3. Full-text index dapat dibuat ketika kita membuat table "CREATE TABLE", atau dibuat kemudian menggunakan statement "ALTER TABLE" atau "CREATE INDEX"
  4. Untuk table dengan data yang besar, sebaiknya insert semua data terlebih dahulu pada table tanpa "FULLTEXT" index, kemudian baru buat "FULLTEXT" index setelah itu.
Sebelum kita masuk pada pembahasan mengenai cara pembuatan FULLTEXT search, terlebih dahulu perlu diketahui bahwa FULLTEXT search mempunyai 3 tipe yaitu "Boolean" , "Natural Languange" dan "Query Expansion".

Untuk memulai, kita perlu membuat sebuah table yang akan kita gunakan terus menerus dalam pembahasan ini.
#buat table dengan nama `article`
CREATE TABLE IF NOT EXISTS `article` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `title` varchar(150) NOT NULL,
  `body` text NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

Setelah table di buat, kita masukan data dengan statement "INSERT INTO"
#insert data ke table `article`
INSERT INTO `article` (`id`, `title`, `body`) VALUES
(1, 'PHP & Mysql : Tutorial Dasar', 'Pada tutorial kali ini, kita akan mencoba melakuka...'),
(2, 'MySQL - Pengenalan', 'Tutorial MySQL di situs ini memang buat kamu-kamu ...'),
(3, 'Mysql', 'Tutorial penggunaan database masa kini...'),
(4, 'Mysql & Oracle Database', 'Database masa kini...'),
(5, 'Implementasi Oracle', 'Bagaimana menggunakan oracle...'),
(6, 'SqlLite Database', 'Penggunaan SqlLite dan cpanel...'),
(7, 'let it be', 'by The Beatles...');

Sebenarnya, pencarian dapat menggunakan tipe yang konvensional seperti:
SELECT * FROM article WHERE title like'%mysql%';
Tetapi pencarian kata/keyword menggunakan "LIKE" sangatlah tidak baik untuk data yang besar. Untuk itulah fulltext search dapat penjadi pilihan dalam melakukan fungsinya sebagai search feature dari MYSQL.
Seperti yang telah dijelaskan di point atas, untuk menjalankan FULLTEXT Search diperlukan index dengan tipe FULLTEXT pada field field yang ingin kita search. Di sini, saya akan menambahkan 2 FULLTEXT indexing pada 2 field yaitu `title` dan `body`.
ALTER TABLE article ADD FULLTEXT(title);
ALTER TABLE article ADD FULLTEXT(body, title);

Penggunaan Fulltext Search
1. Implementasi tipe "Natural Language"
Secara default, penggunaan Fulltext Search masuk kedalam tipe ini.


mysql> SELECT * FROM article WHERE MATCH (title) AGAINST ('tutorial');
+---+----------------------------------+-------------------------------------------------------------+
| id | title                                     | body                                                                     |
+---+----------------------------------+-------------------------------------------------------------+
|  1 | PHP & Mysql : Tutorial Dasar | Pada tutorial kali ini, kita akan mencoba melakuka... |
+---+----------------------------------+-------------------------------------------------------------+
1 row in set

Query di atas akan selalu mengembalikan result id dimana pada field `title` mengandung kata 'tutorial'.


Contoh lain penggunaan (1):


mysql> SELECT * FROM article WHERE MATCH (title) AGAINST ('tutor');
Empty set

Kenapa Empty set? karena tutor tidak sama dengan tutorial.


Contoh lain penggunaan (2):
mysql> SELECT * FROM article WHERE MATCH (title, body) AGAINST ('tutorial');
+----+---------------------------------------+----------------------------------------------------------------------------+
| id  | title                                 | body                                                                     |
+----+---------------------------------------+----------------------------------------------------------------------------+
|  1 | PHP & Mysql : Tutorial Dasar | Pada tutorial kali ini, kita akan mencoba melakuka...      |
|  3 | Mysql                                | Tutorial penggunaan database masa kini...                  |
|  2 | MySQL - Pengenalan           | Tutorial MySQL di situs ini memang buat kamu-kamu ... |
+----+---------------------------------------+----------------------------------------------------------------------------+
3 rows in set

Pada query diatas, pencarian dilakukan pada 2 field. Yaitu `title` dan `body`. Dan mengembalikan 3 result


Contoh lain penggunaan (3):
SELECT *, MATCH (title, body) AGAINST ('tutorial') as Score FROM article WHERE MATCH (title, body) AGAINST ('tutorial');
+----+---------------------------------------+----------------------------------------------------------------------------+----------------------------+
| id  | title                                  | body                                                                    | Score                     |
+----+---------------------------------------+----------------------------------------------------------------------------+----------------------------+
|  1 | PHP & Mysql : Tutorial Dasar | Pada tutorial kali ini, kita akan mencoba melakuka...      | 0.40983861684799 |
|  3 | Mysql                                | Tutorial penggunaan database masa kini...                  | 0.26911327242851 |
|  2 | MySQL - Pengenalan           | Tutorial MySQL di situs ini memang buat kamu-kamu ... | 0.22223679721355 |
+----+---------------------------------------+----------------------------------------------------------------------------+----------------------------+
3 rows in set

Makin besar Score makin relevant resultnya. Pada result di atas, bisa di ambil kesimpulan bahwa MySQL selalu sort by relevansi dari yang paling relevan ke yang kurang relevan.



Contoh lain penggunaan (4):
mysql> SELECT * FROM article WHERE MATCH (title) AGAINST ('mysql');
Empty set

Contoh query di atas tidak mengembalikan result. Kenapa? Padahal mysql juga terdapat pada field `title` maupun `body`? Ini dikarenakan MySql mengimplementasi "Stop Word" atau "Skip Word" untuk setiap keyword yang tampil pada 50% atau lebih dari total data.
2. Implementasi tipe Boolean
Tipe boolean mengijinkan kita untuk menambahkan operator operator pada keyword pencarian seperti + atau -.
Berikut List completenya:

Operator
Arti

Secara default, ini operator yang di pakai yang mempuyai arti "atau" / "or"
+
Tanda plus berarti keyword tersebut harus terdapat pada semua result yang didapatkan.
-
Tanda minus berarti keyword tersebut tidak boleh ada pada result yang didapatkan.
< >
Keyword yang diberikan tanda > atau < akan mempengaruhi relevansi. Pemberian tanda > pada awal kata mengakibatkan nilai relevansi/score menjadi
( )
Untuk melakukan grouping kemudian bisa menambahkan operator lain untuk menambah tingkat relevansi/score.
~
Operator ini berfungsi sebagai operator negasi. Jadi ketika sebuat keyword di berikan tanda ini, mengakibatkan relevansi/score minus (bukan 0).
*
Merupakan wildcard operator.

Operator ini digunakan pada awal dan akhir keyword yang terdiri dari 2 atau lebih kata.
Untuk mengetahui lebih jelas mengenai operator operator ini, kita akan test dengan beberapa contoh:

Contoh Boolean (1)
mysql> SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('+mysql -database' IN BOOLEAN MODE);
+----+-----------------------------------+---------------------------------------------------+
| id  | title                             | body                                             |
+----+-----------------------------------+----------------------------------------------------+
|  2 | How To Use MySQL Well | After you went through a ...            |
|  3 | Optimizing MySQL           | In this tutorial we will show ...          |
|  4 | 1001 MySQL Tricks         | 1. Never run mysqld as root. 2. ...     |
|  6 | MySQL Security              | When configured properly, MySQL ... |
+----+-----------------------------------+----------------------------------------------------+
4 rows in set

Result harus mengandung kata "mysql" dan tidak boleh mengandung kata "database" pada field title dan body.


Contoh Boolean (2)
mysql> SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('tutor*' IN BOOLEAN MODE);
+----+-------------------------+----------------------------------------------+
| id  | title                    | body                                       |
+----+-------------------------+----------------------------------------------+
|  1 | MySQL Tutorial     | DBMS stands for DataBase ...      |
|  3 | Optimizing MySQL | In this tutorial we will show ...     |
+----+-------------------------+----------------------------------------------+
2 rows in set

Penambahan asterik pada awal ataupun akhir keyword menjadikannya seperti "LIKE 'tutor%'"


Contoh Boolean (3)
mysql> SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('+mysql +(>tutorial
+----+----------------------------+--------------------------------------------------------+
| id  | title                       | body                                                 |
+----+----------------------------+--------------------------------------------------------+
|  1 | MySQL Tutorial        | DBMS stands for DataBase ...                |
|  3 | Optimizing MySQL    | In this tutorial we will show ...              |
|  5 | MySQL vs. YourSQL | In the following database comparison ... |
+----+-------------------+-----------------------------------------------------------------+
3 rows in set

Penggunaan seperti ini mengakibatkan data yang mengandung kata mysql dan tutorial akan lebih tinggi score relevansinya dibandingkan data yang mengandung mysql dan database. Dan semua result harus mengandung kata mysql+tutorial atau database.


Contoh Boolean (4)
mysql> SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"mysql tutorial"' IN BOOLEAN MODE);
+----+---------------------+------------------------------------------+
| id  | title                | body                                  |
+----+---------------------+------------------------------------------+
|  1 | MySQL Tutorial | DBMS stands for DataBase ... |
+----+---------------------+------------------------------------------+
1 row in set

Result harus mengandung kata "mysql" yang kemudian diikuti oleh kata "tutorial"
3. Tipe Query Expansion
Query Expansion merupakan salah satu fitur yang bisa digunakan ketika pencarian pencarian hanya mengandung keyword yang sedikit. Ex: cuman satu kata.
Ketika user mencari dengan keyword "database", kemungkinan result yang diinginkan user adalah yang berkaitan dengan Mysql atau Oracle atau SqlLite dll. Dengan pengimplementasian query expansion, result yang dihasilakan diproses 2 kali dengan mempelajari result pencarian pertama kemudian digabungkan dengan result pencarian kedua dengan tambahan keyword yang paling relevant terhadap pencarian pertama.
Untuk lebih jelasnya, bisa kita coba dengan contoh.


Contoh penggunaan dengan tipe Natural Language


mysql> SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('database');
+----+-------------------+------------------------------------------+
| id | title             | body                                     |
+----+-------------------+------------------------------------------+
|  5 | MySQL vs. YourSQL | In the following database comparison ... |
|  1 | MySQL Tutorial    | DBMS stands for DataBase ...             |
+----+-------------------+------------------------------------------+
2 rows in set

Contoh penggunaan dengan tipe Query Expansion
mysql> SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('database' WITH QUERY EXPANSION);
+----+----------------------------+--------------------------------------------------------+
| id  | title                       | body                                                 |
+----+----------------------------+--------------------------------------------------------+
|  1 | MySQL Tutorial        | DBMS stands for DataBase ...                |
|  5 | MySQL vs. YourSQL | In the following database comparison ... |
|  3 | Optimizing MySQL    | In this tutorial we will show ...              |
+----+----------------------------+--------------------------------------------------------+
3 rows in set

Disini kita lihat bahwa pada result pertama keyword "mysql" selalu muncul, maka dianggap keyword "mysql" merupakan keyword dengan relevansi tinggi pada pencarian "database" sehingga result juga memunculkan semua data yang mengandung kata "mysql"
Note:
Penggunaan tipe ini pada keyword yang panjang mengakibatkan penambahan result yang tidak relevan.

Minggu, 28 Februari 2010

Regular Expression (Regex)

Regular expression atau sering disingkat jadi regex ato regexp, bukanlah bahasa pemrograman. regex adalah sebuah pattern atau pola dari suatu string. regex sering digunakan untuk pencarian string dengan cara menentukan pattern string tersebut.
pekerjaan system administrator, programmer dan bioinformatic tidak akan lepas dari pengunaan regular expression.
sejarah:
tahun 1950an, Stephen Cole Kleene seorang ahli matematika membuat sebuah model pattern string menggunakan notasi matematika, yang disebut regular sets. Ken Thompson mengimplementasikan notasi tersebut ke dalam text editor buatannya, QED, untuk pencarian string dengan pola tertentu. dia jg menambahkan fitur tersebut ke dalam ed, sebuah editor text dalam sistem operasi unix. untuk pencarian string dalam ed menggunakan pattern, perintahnya: /g /re /p (/g : globally, /re : regular expression, /p : print) yang maksudnya adalah pencarian global baris2 dalam sebuah file yang memiliki pola tertentu, dan ditampilkan/cetak/print. istilah grep akhirnya digunakan sebagai nama sebuah program/tool dalam sistem operasi unix untuk fungsi yang sama, pencarian string. semua sysadmin pasti tau grep :)
*jadi dasarnya adalah set theory (teori himpunan), di matakuliah matematika diskrit!! hehehe*
saat ini hampir semua bahasa pemrograman tingkat tinggi sudah
mendukung regex. kalo memang ga ada, tinggal cari library/komponennya aja, banyak tersebar di internet dan ada untuk berbagai bahasa pemrograman. Perl menggunakan library regex yang ditulis oleh Henry Spencer, yang kemudian menambahkan banyak fitur baru dalam regex Perl. PHP ikut mengadaptasi regex dari Perl. :)
dalam dunia bioinformatic (biologi & informatika), DNA2 makhluk hidup dapat dikodekan menjadi string2. kode DNA2 tersebut masing2 memiliki pola2 string tertentu. sayangnya konfersi DNA2 mengasilkan file text/string yang sangat besar, sehingga susah untuk dianalisa (dna 1 manusia lengkap bisa berukuran beberapa puluh MB, isinya text semua). penggunaan regex sangat membantu pekerjaan menganalisa DNA, protein, gen, dll dalam bidang bioinformatic. bahasa pemrograman yang populer dalam bidang ini adalah Perl dan python karena kemampuan regexnya :)
sumber:
* http://en.wikipedia.org/wiki/Regular_expression
* http://www.regular-expressions.info
* http://blindscientist.genedrift.org/2007/09/12/bioinformatic-perl-or-python
* http://arglist.com/regex
* chatting via YM dengan popollz, praktisi bioinformatic

Sabtu, 20 Februari 2010

Password Hashing

Password Hashing

by James McGlinn

In this article I'm going to cover password hashing, a subject which is often poorly understood by newer developers. Recently I've been asked to look at several web applications which all had the same security issue - user profiles stored in a database with plain text passwords. Password hashing is a way of encrypting a password before it's stored so that if your database gets into the wrong hands, the damage is limited. Hashing is nothing new - it's been in use in Unix system password files since long before my time, and quite probably in other systems long before that. In this article I'll explain what a hash is, why you want to use them instead of storing real passwords in your applications, and give you some examples of how to implement password hashing in PHP and MySQL.

Foreword

As you read on you'll see that I advocate the use of a hashing algorithm called Secure Hashing Algorithm 1 (or SHA-1). Since I wrote this article, a team of researchers - Xiaoyun Wang, Yiqun Lisa Yin, and Hongbo Yu - have shown SHA-1 to be weaker than was previously thought. This means that for certain purposes such as digital signatures, stronger algorithms like SHA-256 and SHA-512 are now being recommended. For generating password hashes, SHA-1 still provides a more than adequate level of security for most applications today. You should be aware of this issue however and begin to think about using stronger algorithms in your code as they become more readily available.
For more information please see Bruce Schneier's analysis of the issue at http://www.schneier.com/blog/archives/2005/02/cryptanalysis_o.html

What Is A Hash?

A hash (also called a hash code, digest, or message digest) can be thought of as the digital fingerprint of a piece of data. You can easily generate a fixed length hash for any text string using a one-way mathematical process. It is next to impossible to (efficiently) recover the original text from a hash alone. It is also vastly unlikely that any different text string will give you an identical hash - a 'hash collision'. These properties make hashes ideally suited for storing your application's passwords. Why? Because although an attacker may compromise a part of your system and reveal your list of password hashes, they can't determine from the hashes alone what the real passwords are.

So How Do I Authenticate Users?

We've established that it's incredibly difficult to recover the original password from a hash, so how will your application know if a user has entered the correct password or not? Quite simply - by generating a hash of the user-supplied password and comparing this 'fingerprint' with the hash stored in your user profile, you'll know whether or not the passwords match. Let's look at an example:

User Registration And Password Verification

During the registration process our new user will provide their desired password (preferably with verification and through a secure session). Using code similar to the following, we store their username and password hash in our database:
Figure 1. Our user enters their preferred access details
/* Store user details */

$passwordHash = sha1($_POST['password']);

$sql = 'INSERT INTO user (username,passwordHash) VALUES (?,?)';
$result = $db->query($sql, array($_POST['username'], $passwordHash));

?>
The next time our user logs in, we check their access credentials using similar code as follows:
Figure 2. Logging back in
/* Check user details */

$passwordHash = sha1($_POST['password']);

$sql = 'SELECT username FROM user WHERE username = ? AND passwordHash = ?';
$result = $db->query($sql, array($_POST['username'], $passwordHash));
if ($result->numRows() < 1)
{
    /* Access denied */
    echo 'Sorry, your username or password was incorrect!';
}
else
{
    /* Log user in */
    printf('Welcome back %s!', $_POST['username']);
}

?>

Types Of Hashes

There are a number of strong hashing algorithms in use, the most common of which are MD5 and SHA-1. Older systems - including many Linux variants - used Data Encryption Standard (DES) hashes. With only 56 bits this is no longer considered an acceptably strong hashing algorithm and should be avoided.

Examples

In PHP you can generate hashes using the md5() and sha1 functions. md5() returns a 128-bit hash (32 hexadecimal characters), whereas sha1() returns a 160-bit hash (40 hexadecimal characters). For example:
$string = 'PHP & Information Security';
printf("Original string: %s\n", $string);
printf("MD5 hash: %s\n", md5($string));
printf("SHA-1 hash: %s\n", sha1($string));

?>
This code will output the following:
Original string: PHP & Information Security
MD5 hash: 88dd8f282721af2c704e238e7f338c41
SHA-1 hash: b47210605096b9aa0129f88695e229ce309dd362
In MySQL you can generate hashes internally using the password(), md5(), or sha1 functions. password() is the function used for MySQL's own user authentication system. It returns a 16-byte string for MySQL versions prior to 4.1, and a 41-byte string (based on a double SHA-1 hash) for versions 4.1 and up. md5() is available from MySQL version 3.23.2 and sha1() was added later in 4.0.2.
mysql> select PASSWORD( 'PHP & Information Security' );
+------------------------------------------+
| PASSWORD( 'PHP & Information Security' ) |
+------------------------------------------+
| 379693e271cd3bd6                         |
+------------------------------------------+
1 row in set (0.00 sec)

mysql> select MD5( 'PHP & Information Security' );
+-------------------------------------+
| MD5( 'PHP & Information Security' ) |
+-------------------------------------+
| 88dd8f282721af2c704e238e7f338c41    |
+-------------------------------------+
1 row in set (0.01 sec)
Note: Using MySQL's password() function in your own applications isn't recommended - the algorithm used has changed over time and prior to 4.1 was particularly weak.
You may decide to use MySQL to calculate your hash rather than PHP. The example of storing our user's registration details from the previous section then becomes:
/* Store user details */

$sql = 'INSERT INTO user (username, passwordHash) VALUES (?, SHA1(?))';
$result = $db->query($sql, array($_POST['username'], $_POST['password']));

?>

Weaknesses

As a security measure, storing only hashes of passwords in your database will ensure that an attacker's job is made that much more difficult. Let's look at the steps they'll now take in an effort to compromise your system. Assuming that they've managed to access your user database and list of hashes, there's no way that they can then recover the original passwords to your system. Or is there?
The attacker will be able to look at your hashes and immediately know that any accounts with the same password hash must therefore also have the same password. Not such a problem if neither of the account passwords is known - or is it? A common technique employed to recover the original plain text from a hash is cracking, otherwise known as 'brute forcing'. Using this methodology an attacker will generate hashes for numerous potential passwords (either generated randomly or from a source of potential words, for example a dictionary attack). The hashes generated are compared with those in your user database and any matches will reveal the password for the user in question.
Modern computer hardware can generate MD5 and SHA-1 hashes very quickly - in some cases at rates of thousands per second. Hashes can be generated for every word in an entire dictionary (possibly including alpha-numeric variants) well in advance of an attack. Whilst strong passwords and longer pass phrases provide a reasonable level of protection against such attacks, you cannot always guarantee that your users will be well informed about such practices. It's also less than ideal that the same password used on multiple accounts (or multiple systems for that matter) will reveal itself with an identical hash.

Making It Better

Both of these weaknesses in the hashing strategy can be overcome by making a small addition to our hashing algorithm. Before generating the hash we create a random string of characters of a predetermined length, and prepend this string to our plain text password. Provided the string (called a "salt") is of sufficient length - and of course sufficiently random - the resulting hash will almost certainly be different each time we execute the function. Of course we must also store the salt we've used in the database along with our hash but this is generally no more of an issue than extending the width of the field by a few characters.
When we validate a user's login credentials we follow the same process, only this time we use the salt from our database instead of generating a new random one. We add the user supplied password to it, run our hashing algorithm, then compare the result with the hash stored in that user's profile.
define('SALT_LENGTH', 9);

function generateHash($plainText, $salt = null)
{
    if ($salt === null)
    {
        $salt = substr(md5(uniqid(rand(), true)), 0, SALT_LENGTH);
    }
    else
    {
        $salt = substr($salt, 0, SALT_LENGTH);
    }

    return $salt . sha1($salt . $plainText);
}

?>
Note: The function above is limited in that the maximum salt length is 32 characters. You may wish to write your own salt generator to overcome this limit and increase the entropy of the string.
Calling generateHash() with a single argument (the plain text password) will cause a random string to be generated and used for the salt. The resulting string consists of the salt followed by the SHA-1 hash - this is to be stored away in your database. When you're checking a user's login, the situation is slightly different in that you already know the salt you'd like to use. The string stored in your database can be passed to generateHash() as the second argument when generating the hash of a user-supplied password for comparison.
Using a salt overcomes the issue of multiple accounts with the same password revealing themselves with identical hashes in your database. Although two passwords may be the same the salts will almost certainly be different, so the hashes will look nothing alike.
Dictionary attacks with pre-generated lists of hashes will be useless for the same reason - the attacker will now have to recalculate their entire dictionary for every individual account they're attempting to crack.

Summary

We've seen now what hashes are and why you should store them instead of the plain text passwords they represent in your database. The examples above are a starting point and will get you on the right track with using hashes in your PHP applications. A little bit of work now may well mean much less of a headache further down the track!

About The Author

James McGlinn is a developer and project manager for Nerds Inc. where he provides application design, development and auditing services for a range of clients in New Zealand and abroad. PHP has been his language of choice since 1999. He is a Zend Certified Engineer and founded and facilitates the NZ PHP Users Group.
For more information he can be reached through Nerds Inc. at http://nerdsinc.co.nz/.

Selasa, 16 Februari 2010

Inside Netmedia Solutions


The People

Netmedia Solutions is dedicated to finding and retaining people who can make a difference to our clients and our company. People are our key assets. We are a group with widely diverse professional disciplines and interests who share the experience of superior academic background, professional training, high personal standards, and creative thinking. Because we constantly rely on one another in our approach to client engagements, we have worked hard to build a group of people who respect others ideas and integrity, and who value one another as colleagues and friends. In addition, to optimize our human resource potential, we are transforming leadership structure, designing programs for professional development and building a personnel infrastructure to facilitate growth and change.

The Organization
We recognize that our success as a company depends not only on finding the best people, but also on providing them with an environment in which they can reach their highest potential. Netmedia Solutions cultures are dynamic, smart working, practical and friendly. We place a high value on individual energy, creativity, self-confidence, and willingness to learn new technology, high motivation, openness to critiques and constructive feedback, and perception to threats as opportunities. We strive to minimize hierarchy and maximize individual autonomy. Our organization is designed to encourage close working relationships and a free flow of ideas.

Minggu, 14 Februari 2010

Info istilah akuntansi ( D ) debit note

Untuk kali ini kembali, saya dapat informasi kembali seputar istilah akuntansi dengan awalan huruf ( D ) atau sering di sebut dengan ( delta ) hal ini dimaksudkan agar para pembaca yang membutuhkan informasi istilah akuntansi ini dapat dengan mudah untuk mencari dan sekaligus mengetahui arti dari istilah tersebut. atau kita dapat mengtahui istilah akuntansi yang sebelumnya dalam kumpulan istilah akuntansi .
Dan berikut ini info istilah akuntansi dengan awalan hurup ( D ) :
  • DEBIT NOTE = Nota debet
  • DEBIT BALANCE = saldo debet
  • DEDUCTION = Pengurangan
  • DEFECTIVE GOODS = Produk rusak
  • DEFERRED GROS PROFIT ON REALIZATION = Laba kotar yang belum direalisasikan
  • DELIVERY EXPENSE = Biaya pengankutan
  • DEPOSIT SLIP = Bukti setoran
  • DEPRECIATION = Penyusutan
  • DEPRECIATION EXPENSE = Biaya penusutan
  • DETERMINING DEPRECIATION = Penetapan penyusutan
  • DIRECT COSTING = Penetapan biaya langsung
  • DIRECT DEPARTMENT OVERHEAD EXPENSE = Beban/biaya overhead departemen lansung
  • DIRECT EXPENSE = Biaya langsung
  • DIRECT LABOR COST BUTGET = Biaya anggaran buruh langsung
  • DIRECT TAXES = Pajak langsung
  • DIRECT WRITE OFF = Penghapusan langsung
  • DISCOUNT = Potngan ( harga )
  • DISSOLUTION = Pembubaran
  • DIVIDEND STOCK = Deviden saham
  • DOUBLE ENTRY SYSTEM = Sistem pembukuan berpasangan
  • DRAFT ( info ) = Wesel
  • DUE DATE = Tanggal jatuh tempo
Semoga info ini dapat bermanfaat dan membnatu kita dalam memahami istilah-istilah akunansi yang kita jumpai.

Kamis, 11 Februari 2010

Lowongan CodeIgniter Programmer dan Mobile Programmer

CodeIgniter Programmer

Requirements:- Pengetahuan dasar yang baik dalam pemrograman berbasis web.
- Memiliki pengalaman mengembangkan aplikasi dengan CodeIgniter/CakePHP dan database MySQL minimal 1 tahun (memiliki pengalaman development dengan SQLServer merupakan nilai tambah).
- Menguasai javascript, css dan html (menguasai AJAX merupakan nilai tambah).
- Menguasai extjs merupakan nilai tambah.
- Mempunyai kemauan untuk mempelajari teknologi baru.
- Dapat bekerja sama dalam suatu team.

2. Mobile Application Programmer

Requirements:- Pengetahuan dasar yang baik dalam pemrograman mobile application.
- Memiliki pengalaman mengembangkan aplikasi dalam platform J2ME/BB/iPhone minimal 1 tahun.
- Mempunyai kemauan untuk mempelajari teknologi baru.
- Dapat bekerja sama dalam suatu team.


How to apply:- Kirimkan CV/resume ke julius.liman@dyvia.com dengan subject "[CI]Programmer" atau "[Mobile]Programmer", tolong cantumkan juga expected salary
- Penerimaan lamaran paling lambat pada tanggal 28 February 2010
- Hanya kandidat yang terpilih akan dihubungi untuk interview

Sabtu, 06 Februari 2010

Project Schedule

Project Schedule ( Jadwal Proyek )

Project  Schedule  atau  jadwal  proyek  dibuat  oleh  project  manager  untuk  mengatur  manusia  di
dalam  proyek  dan  menunjukkan  kepada  organisasi  bagaimana  pekerjaan  (proyek)  akan
dilaksanakan.  Ini  adalah  alat  untuk  memantau  (bagi  project  manager)  apakah  proyek  dan  tim
masih terkendali atau tidak.
Project schedule berbentuk kalender yang dihubungkan dengan pekerjaan yang harus dikerjakan
dan daftar resource yang dibutuhkan. Sebelum jadwal dibuat, WBS harus terlebih dahulu ada, jika
tidak maka jadwal tersebut akan terkesan mengada-ada.
Untuk  membuat  project  schedule,  ada  beberapa  software  yang  bisa  dijadikan  pilihan.  Pilihan
software  yang  gratis  dan  open  source  antara  lain: Open Workbench,  dotProject,  netOffice  dan
Tutos. Beberapa hal perlu diperhatikan ketika membuat project schedule, seperti:
1.  Alokasi resource pada tiap pekerjaan,
Resource  bisa  berupa  berbagai  hal  seperti  manusia,  barang,  peralatan  (komputer,
proyektor,  dll),  tempat  (ruang  rapat,  misalnya)  atau  layanan  (seperti  training  atau  tim
pendukung  out  source)  yang  dibutuhkan  dan  mungkin  ketersediaannya  terbatas.
Bagaimanapun juga resource yang utama adalah manusia.
Pertama,  project  manager  akan  mengalokasikan  orang(-orang)  tertentu  untuk  suatu
pekerjaan.  Kemudian,  selama  pekerjaan  tersebut  berlangsung,  orang  tersebut  mungkin
menjadi terlalu sibuk sehingga tidak bisa dialokasikan untuk pekerjaan lainnya. Perhatikan
bahwa  pemilihan  pelaku  perlu  disesuaikan  dengan  kemampuan  dan  berbagai  hal  lain
karena ada pekerjaan  yang dapat dilakukan oleh  siapa  saja,  tetapi umumnya pekerjaan
hanya dapat dikerjakan oleh satu atau beberapa orang saja.
2.  Identifikasikan setiap ketergantungan,
Sebuah pekerjaan disebut memiliki ketergantungan jika melibatkan aktivitas, resource atau
work  product  yang  dihasilkan  pekerjaan/aktivitas  lain.  Contoh:  test  plan  tidak  mungkin
dilaksanakan selama software belum diimplementasikan/ditulis, program baru dapat ditulis
setelah class atau modul dibuat dan dideskripsikan pada tahapan desain.
Tiap  pekerjaan  pada WBS  perlu  diberi  nomor,  dengan  angka  tersebut  bergantung  pada
nomor pekerjaan syaratnya. Berikut ini adalah sedikit gambaran tentang bagaimana suatu
pekerjaan menjadi tergantung pada pekerjaan lainnya.
Gambar 1
Gambar 1
3.  Buat jadwalnya
Tiap  pekerjaan  juga  memiliki  jangka  waktu  pekerjaan.  Dengan  demikian  jadwal  bisa
dibuat, contoh:
Gambar 2
Gambar 2
Tiap  pekerjaan  ditunjukkan  dengan  kotak,  sedangkan  ketergantungan  antar  pekerjaan
ditunjukkan  dengan  gambar  panah. Kotak  hitam  berbentuk wajik  antara D  dan E  (pada
gambar di atas) disebut milestone atau pekerjaan tanpa durasi. Milestone digunakan untuk
menunjukkan kejadian penting pada jadwal. Sedangkan kotak hitam panjang antara C dan
D  yang  juga  mengandung  potongan  wajik  menunjukkan  summary  task  atau  dua  sub
pekerjaan yang memiliki induk yang sama.
Jadwal bisa dibuat dalam bentuk Gantt Chart, PERT atau diagram semacamnya.
Contoh Gantt Chart yang dibuat dengan sebuah tool manajemen proyek:
Gambar 3
Gambar 3
Risk Plan
Risk  plan  adalah  daftar  resiko/masalah  yang  mungkin  terjadi  selama  proyek  berlangsung  dan
bagaimana  menangani  terjadinya  resiko  tersebut.  Bagaimanapun  juga  ketidakpastian  adalah
musuh  semua  rencana,  termasuk  rencana  proyek.  Terkadang  ada  saja  waktu-waktu  yang  tidak
menyenangkan  bagi  proyek,  banyak  kesulitan  terjadi  misalnya  suatu  resource  tiba-tiba  tidak
tersedia. Oleh karenanya risk plan adalah persiapan terbaik menghadapi ketidakpastian.
Langkah-langkah berikut dapat menjadi acuan untuk mendapatkan Risk Plan:
1.  Pembahasan resiko potensial
Project manager akan memimpin  sebuah  sesi/rapat  untuk mengidentifikasikan masalah-
masalah yang mungkin akan muncul. Anggota  tim akan dipancing untuk mengemukakan
resiko-resiko yang  terpikirkan. Project manager akan menuliskannya di papan  tulis setiap
ada yang mengemukakan pendapat yang relevan. Sedikit pendapat mungkin akan muncul
pada  awalnya,  kemudian  berlanjut  dengan  tanggapan  yang  susul-menyusul  hingga
akhirnya suasana mendingin sampai akhirnya pendapat terakhir diutarakan.
Resiko  yang  dimaksud  di  sini  adalah  resiko  spesifik.  Jika  suatu  resiko  dirasa  belum
spesifik maka project manager akan memancing agar permasalahan disampaikan secara
lebih spesifik. Sumber masalah yang baik lainnya adah asumsi-asumsi yang muncul ketika
membuat Vision and Scope dan melakukan estimasi dengan metode Wideband Dephi.
2.  Estimasi dampat tiap resiko/masalah
Tim akan memberikan rating untuk setiap resiko. Nilainya berkisar dari 1 (masalah dengan
resiko  kecil)  hingga  5  (masalah  dengan  resiko  besar,  kemungkinan  munculnya  besar,
mungkin menghabiskan biaya besar dan sulit untuk membereskannya).
3.  Buat sebuah risk plan
Tim akan mengidentifikasi langkah-langkah yang akan di ambil untuk mengatasi masalah-
masalah yang akan muncul tersebut, dimulai dari resiko bernilai 5.
Penjadwalan Proyek
PERT  adalah  suatu  alat  manajemen  proyek  yang  digunakan  untuk  melakukan  penjadwalan,
mengatur  dan mengkoordinasi  bagian-bagian  pekerjaan  yang  ada  didalam  suatu  proyek. PERT
yang memiliki kepanjangan Program Evalution Review Technique adalah suatu metodologi yang
dikembangkan  oleh  Angkatan  Laut  Amerika  Serikat  pada  tahun  1950  untuk mengatur  program
misil.  Sedangkan  terdapat  metodologi  yang  sama  pada  waktu  bersamaan  yang  dikembangkan
oleh sektor swasta yang dinamakan CPM atau Critical Path Method.
Metodologi PERT divisualisasikan dengan suatu grafik atau bagan yang melambangkan  ilustrasi
dari sebuah proyek. Diagram jaringan ini terdiri dari beberapa titik (nodes) yang merepresentasikan
kejadian  (event)  atau  suatu  titik  tempuh  (milestone).  Titik-titik  tersebut  dihubungkan  oleh  suatu
vektor  (garis  yang memiliki arah)  yang merepresentasikan  suatu pekerjaan  (task) dalam  sebuah
proyek. Arah dari vektor atau garis menunjukan suatu urutan pekerjaan.
Gambar 4
Gambar 4
Dari gambar 1 dapat diamati bahwa setiap arah panah akan menunjukan suatu urutan pengerjaan.
Seperti pekerjaan 1 dilakukan  terlebih dahulu  (start), kemudian bisa dilanjutkan oleh pekerjaan 2,
3, 4, setelah  itu pekerjaan 5,6. Titik 7 adalah  titik  finish dimana pekerjaan  terakhir dilakukan dan
merupakan akhir dari sebuah proyek. Selain menunjukkan suatu urutan pengerjaan diagram PERT
juga menunjukan  suatu  keterikatan antar pekerjaan yang  tidak dapat dipisahkan. Keterikatan  itu
dapat  dilihat  dengan  contoh  pekerjaan  2,  3,  4  hanya  dapat  dilakukan  jika  pekerjaan  1  sudah
selesai dilakukan.
Sebuah pekerjaan yang dapat dilakukan bersamaan dengan pekerjaan  lain disebut  juga sebagai
pekerjaan  pararel  (pararel  task  atau  concurrent  task).  Selain  itu  terdapat  juga  sebuah  aktivitas
yang diwakili oleh garis putus-putus yang disebut dengan dummy activities. Dari sebuah diagram
PERT  dapat  digunakan  untuk mengetahui  suatu  urutan  aktivitas  kritis  atau  aktivitas  yang  harus
dilakukan  sebagai  prioritas  utama  (critical  path),  penjadwalan  dengan  aktivitas  lain,  dan  jumlah
pekerja yang dibutuhkan.
KARAKTERISTIK PERT
Dari langkah-langkah penjelasan metode PERT maka bisa dilihat suatu karakteristik dasar PERT,
yaitu sebuah jalur kritis. Dengan diketahuinya jalur kritis ini maka suatu proyek dalam jangka waktu
penyelesaian yang lama dapat diminimalisasi.
Ciri-ciri jalur kritis adalah:
  Jalur yang biasanya memakan waktu terpanjang dalam suatu proses.
  Jalur yang tidak memiliki tenggang waktu antara selesainya suatu tahap kegiatan dengan
mulainya suatu tahap kegiatan berikutnya.
  Tidak adanya tenggang waktu tersebut yang merupakan sifat kritis dari jalur kritis.
KARAKTERISTIK PROYEK
  Kegiatannya  dibatasi  oleh  waktu;  sifatnya  sementara,  diketahui  kapan  mulai  dan
berakhirnya.
  Dibatasi oleh biaya.
  Dibatasi oleh kualitas.
  Biasanya tidak berulang-ulang.
MANFAAT PERT
1.  Mengetahui ketergantungan dan keterhubungan tiap pekerjaan dalam suatu proyek.
2.  Dapat mengetahui implikasi dan waktu jika terjadi keterlambatan suatu pekerjaan.
3.  Dapat mengetahui  kemungkinan untuk mencari  jalur alternatif  lain  yang  lebih baik untuk
kelancaran proyek.
4.  Dapat mengetahui kemungkinan percepatan dari salah satu atau beberapa jalur kegiatan.
5.  Dapat mengetahui batas waktu penyelesaian proyek.

Jumat, 05 Februari 2010

ExtJs 2.1.0.

Finally it's there a new stable version of the new Gui Designer for ExtJs 2.1.0.

With this designer you can create you own GUI by just drag and drop of ExtJs elements. The result is saved in a JSON file which can be loaded outside the designer.

For download use this external link. The link contains code and documentation in one file. Because of limitations of the forum we decided to stop adding attachments to this thread. Please used the link provided.

There is a running version which can be found on http://www.webblocks.eu/designer/index.php.

The main features of the designer are:

  • Full support of drag and drop for all Ext xtyped elements
  • Eventhandler can be added containing JavaScript
  • Advanced options to connect Json design to caller
  • Embbeded documentation
  • Backend support to load and save json designs
  • External wizard support
Hope you like my changes and I will continue to make new changes. If you have an idea, question or bug/problem please drop a message in this thread.

Sierk

Release history:
2.1.0 Visual Resize and New JsonParser[22/11/08]
  • A compressed version of designer is added (Ext.ux.guid.plugin.Desginer-all.js)
  • Added a new json parser therefor begin and end tags are no longer needed in code
  • Visual resize added activated by context menu
  • Visual move of element in absolute layout activated by context menu
  • Added XType fallback to panel for unknown xtypes
  • All xtypes which are loaded before guidesigner is loaded are now selectable
  • Found a good solotion for property grid error
  • Split single javascript files containing multiple classes into files
  • Added "scope.!" in json object, so you can create local objects if they don't exist
  • Toolbox is forced to do a layout before showing.
  • Changed path ExtJs version can be changed, still using 2.0.1 as base because of stablility
  • You can now add you own property editors, by setting "editor" in properties.json
  • Undo and redo are now keeping track of selected element
  • Active item is now selected in code tree
  • Codetree can now also be used beside drag drop in designer to reorganize code elements.
  • Url options can now beused to configure designer window: window=1 (shows window mode) docked=1 (will dock designer) debug=1 (compression off)
  • A error statusicon and tab have been added to show errors. Click on error icon on statusbar to show or hide detailtab
  • A simple loader for javascript and stylesheets is added (require)
  • Third party design elements can be configured (componentFiles) to be added to Components tree
  • Components can be ExtJs version dependend, just set isVersion in component config.
  • Wizard are now stored in wizard directory in json format.
  • Added code to allow tabpanel selection
  • When adding a second form into a form, the second form is transformed into layout
  • ScriptEditor has been replace by CodeField this also resolves a number of bugs in this area
  • You can drag you saved code to the designer, which will be loaded through JSONPanel or in case when shift key pressed or Repository is not supporting url data is appended
  • Optionpanel added
  • Resize of show window is stored in json and will be used when showing again
  • Fixed a lot of small bugs
  • Updated documentation
2.0.6 PHP Backend support[15/08/08]
  • Added PHP File control thanks to Epsylon
  • index.php is added again to release, wraps index.html
  • Fixed problem with null values in json causing error message (layout wizards)
  • Fixed undo problem, changes made with grid could not be undone
  • Cleaned duplicated values from the propertyselection list
  • Drag element, pressing shift changes to clone mode
  • JsonInit is removed from redraw to increase performance
  • Made code override for Ext.FormPanel so it does not crash on a empty item list
  • Moved ExtJs to seperate folder, so you can choose your version of extjs
  • Cleaned old code from subversion
  • Workarround for error in property grid throwing error variable k
BugList/Open Issues see BugTracker

I will keep release history only for 3 release in this thread. Full history is within changes.txt which is include in the release download.

Because 2.1.0 is brand new and not allways compatible with 2.0.6 we left 2.0.6 as an forum download. Will be removed when i have made a zip file which will fit within forum limits.


For download use this external link. Attached version of 2.1.0 is compressed only


You can check out the version on subversion
svn://svn.webblocks.eu/GuiDesigner/
user : guid
password : guidesigner
Attached Files
File Type: zip GuiDesigner2.0.6.doc.zip (112.8 KB, 2123 views)
File Type: zip GuiDesigner2.0.6.code.zip (437.1 KB, 2161 views)
File Type: zip GuiDesigner2.1.0.Compressed.zip (476.0 KB, 2173 views)

Rabu, 03 Februari 2010

MASA

Pieter Tanuri – Corsa Sponsor Persib

BANDUNG – Prestasi Persib Bandung yang terus naik tajam rupanya diminati para sponsor. Setelah sebelumnya Bank Tabungan Pensiunan Negara (BTPN) menggelontorkan dana Rp500 juta bagi Persib, kini PT Multistrada Arah Sarana yang bertekad membantu finansial Maung Bandung.

Bahkan, tak tanggung-tanggung, perusahaan yang salah satunya memproduksi ban bermerek Corsa ini akan membantu Persib hingga tiga tahun kedepan. Perusahaan ini pun langsung mematenkan tagline Corsa Bannya Bobotoh.

Kesepakatan antara PT Persib Bandung Bermartabat (PBB) dan Corsa ini dilangsungkan di Cafe Persib Jalan Sulanjana, Kota Bandung, sore ini. Hadir langsung Presiden Direktur PT PBB Umuh Muhtar dan Presiden Direktur PT Multistrada Arah Sarana Pieter Tanuri yang juga anggota konsorsium Persib. Selain itu, turut hadir juga jajaran pelatih serta para pemain Maung Bandung.

Presiden Direktur PT Multistrada Arah Sarana Pieter Tanuri berharap, dengan adanya kerjasama nyata dengan Persib, maka finansial Persib pada musim kedepannya bisa terus membaik. Terlebih, hal ini juga akan meningkatkan prestasi pada skuad Persib untuk memenuhi ambisinya sebagai juara Liga Super Indonesia (LSI) musim ini. Sebagai komitmen kita menunjang prestasi Persib, maka kita bantu secara nyata dalam kerjasama kali ini, ungkap Pieter.

Bentuk kerjasamanya, kata Pieter, akan lebih memberdayakan komunitas Bobotoh yang tergabung dalam Viking dan Bomber. Sehingga, keuntungan yang diterima kedua belah pihak pun bisa langsung dirasakan para pendukung fanatik Persib. Kerjasamanya sudah kita mulai. Kita akan terus cari ramuan terbaik agar kerjasama kedepannya bisa lebih menguntungkan kedua pihak, jelasnya.

Presiden Direktur PT PBB Umuh Muhtar menyambut baik kerjasama baru tersebut. Umuh berharap, penambahan sponsor bagi Persib akan memacu prestasi Persib sesuai targetnya menjadi juara LSI musim ini. Dia juga menambahkan, kerjasama tersebut akan memancing sponsor lainnya untuk membantu Persib berkiprah hingga beberapa tahun kedepan. Kita ingin ada kerjasama yang berkelanjutan. Sehingga, pada musim berikutnya, kita hanya fokus pada prestasi karena sudah ditunjang finansial yang mapan, bebernya.

Sumber: Okezone.com, 28 Jan 2010

Corsa adalah ban sepeda motor resmi Persib Bandung. Tagline tersebut yang coba dilempar kepada masyarakat pada acara konfrensi pers yang diadakan di Cafe Persib, jalan Sulanjana, Bandung, kemarin sore. Hadir dalam kesempatan tersebut, Presiden Direktur PT Multistrada Arah Sarana, Tbk, Pieter Tanuri, dan Presiden Direktur PT PBB, H. Umuh Muhtar, serta hampir seluruh pemain Persib.

“Kami memilih bermitra dengan klub sepakbola Persib Bandung karena klub ini disegani dan memiliki penggemar fanatik tapi tidak anarkis. Terbukti dalam setiap pertandingan ribuan penggemar setia berbondong-bondong datang ke stadion untuk mendukung Persib dengan tertib,” terang M. Zein Saleh, public relations PT Multistrada Arah Sarana, Tbk sebagai produsen ban sepeda motor merek Corsa.

Berbeda dengan sponsor-sponsor yang lalu, yang mencantumkan logo brand-nya di kostum pemain, Corsa memilih untuk tidak melakukannya. Hanya saja, Corsa akan hadir dalam setiap kegiatan yang berkaitan dengan Persib dan juga bobotohnya. Sebelumnya, Corsa juga pernah mencantumkan gambar logonya di dada pemain pada pre-season, yaitu ketika Persib mengikuti turnamen piala Jatim beberapa bulan lalu.

Corsa, sempat ada di kostum Persib

Saat ini, pihak Corsa mengakui sedang melakukan pembicaraan yang intensif dengan PT PBB untuk melirik peluang menjadi sponsor Persib dengan waktu yang lama. Namun sayang, M. Zein tidak bisa membuka nilai kontrak yang telah disepakati oleh kedua pihak.

Dalam kesempatan ini, Corsa juga memberikan kenang-kenangan kepada Suchao yang akan pulang kenegaranya.

Corsa Sponsor Persib

Prestasi Persib Bandung yang terus naik tajam rupanya diminati para sponsor. Setelah sebelumnya Bank Tabungan Pensiunan Negara (BTPN) menggelontorkan dana Rp500 juta bagi Persib, kini PT Multistrada Arah Sarana yang bertekad membantu finansial Maung Bandung.

BANDUNG – Prestasi Persib Bandung yang terus naik tajam rupanya diminati para sponsor. Setelah sebelumnya Bank Tabungan Pensiunan Negara (BTPN) menggelontorkan dana Rp500 juta bagi Persib, kini PT Multistrada Arah Sarana yang bertekad membantu finansial Maung Bandung.

Bahkan, tak tanggung-tanggung, perusahaan yang salah satunya memproduksi ban bermerek Corsa ini akan membantu Persib hingga tiga tahun kedepan. Perusahaan ini pun langsung mematenkan tagline Corsa Bannya Bobotoh.

Kesepakatan antara PT Persib Bandung Bermartabat (PBB) dan Corsa ini dilangsungkan di Cafe Persib Jalan Sulanjana, Kota Bandung, sore ini. Hadir langsung Presiden Direktur PT PBB Umuh Muhtar dan Presiden Direktur PT Multistrada Arah Sarana Pieter Tanuri yang juga anggota konsorsium Persib. Selain itu, turut hadir juga jajaran pelatih serta para pemain Maung Bandung.

Presiden Direktur PT Multistrada Arah Sarana Pieter Tanuri berharap, dengan adanya kerjasama nyata dengan Persib, maka finansial Persib pada musim kedepannya bisa terus membaik. Terlebih, hal ini juga akan meningkatkan prestasi pada skuad Persib untuk memenuhi ambisinya sebagai juara Liga Super Indonesia (LSI) musim ini. Sebagai komitmen kita menunjang prestasi Persib, maka kita bantu secara nyata dalam kerjasama kali ini, ungkap Pieter.

Bentuk kerjasamanya, kata Pieter, akan lebih memberdayakan komunitas Bobotoh yang tergabung dalam Viking dan Bomber. Sehingga, keuntungan yang diterima kedua belah pihak pun bisa langsung dirasakan para pendukung fanatik Persib. Kerjasamanya sudah kita mulai. Kita akan terus cari ramuan terbaik agar kerjasama kedepannya bisa lebih menguntungkan kedua pihak, jelasnya.

Presiden Direktur PT PBB Umuh Muhtar menyambut baik kerjasama baru tersebut. Umuh berharap, penambahan sponsor bagi Persib akan memacu prestasi Persib sesuai targetnya menjadi juara LSI musim ini. Dia juga menambahkan, kerjasama tersebut akan memancing sponsor lainnya untuk membantu Persib berkiprah hingga beberapa tahun kedepan. Kita ingin ada kerjasama yang berkelanjutan. Sehingga, pada musim berikutnya, kita hanya fokus pada prestasi karena sudah ditunjang finansial yang mapan, bebernya.

Sumber: msn.com, 28 Jan 2010
Bookmark It

Selasa, 26 Januari 2010

JS Framework Tutorial




Mootools Basic Tutorial

What is Mootools?
Stand for My Object-Oriented "JavaScript" Tools
Lightweight, modular, object-oriented JavaScript Framwork
created by Valerio Proietti - who originally intended it to be an extension to the Prototype JavaScript Framework
MooTools provides a cleaner, easier, and more elegant way to manipulate the object to our will
MooTools helps make the JavaScript code cross-browser compatible
Why Mootools?
JavaScript isn't perfect
JavaScript doesn't have a lot of native functions and methods to deal with modern user demands
Independent, open-source,and very robust JavaScript framework
Solid team of core developers and thousands of users who support, contribute
Where You can get it?
You can download a copy of MooTools from the offician MooTools website, http://www.mootools.net
How to use Mootools?
Downloading and Installing MooTools Core
Using MooTools Builder
To be continued...


jQuery Introduction



jQuery: Installation »


jQuery Introduction Step By Step Tutorial - Part 1: JQuery is a popular JavaScript library. With jQuery, you can build more interesting and interactive web page easy. jQuery automate common tasks and simplify complicated writing code. jQuery have ability to assist in wide range of task. This is one reason this library become popular choice.


What JQuery Does

Access parts of page. jQuery offers a robust and efficient selector mechanism for retrieving exactly the piece of the document that is to be inspected or manipulated.

Modify the appearance of a page. jQuery can bridge CSS browser standard gap.

Alter the content a page. jQuery can modify texts, images,list, and entire of the HTML. All with a single easy-to-use API.

Respond to a user's interaction with a page. The jQuery library have an elegant way to intercept a wide variety of events without the need to clutter the html code itself with event handlers.

Add animation. Implementing such interactive behaviors.

AJAX support. Retrieve information from server without refreshing a page.

Simplify common JavaScript task.


We want to modify page in order to be like this:
 
 // JavaScript Document
$(document).ready(
function(){
$('.lyric-text').addClass('lyric-full');
}
);

What mean? The fundamental operation in jQuery is selecting a part of the document. This is done with the $() construct. In this case, jQuery find lyric-text class. Then, jQuery inject new class named "lyric-full". This job use .addClass() method. So, we must add new class in our css, like this:



.lyric-full {
font-style: italic;
background-color:#FFFFCC;
border: 1px solid #FF0000;
padding: 0.5em;
}

Thus, open your mycss.css. Update like this:

@charset "utf-8";


/* CSS Document */



body {

font: 75% Arial, Helvetica, sans-serif;

}



h1 {

font-size: 2.5em;

margin-bottom: 0;

}



h2 {

font-size: 1.2em;

margin-bottom: .5em;

}



h3 {

font-size: 1.0em;

margin-bottom:0;

}

.lyric{

margin: 0 2em;

}

.lyric-full {

font-style: italic;

background-color:#FFFFCC;

border: 1px solid #FF0000;

padding: 0.5em;

}

Point your browser to http://localhost/test/jquery/myfirstjquery.html.


jQuery: Using Event Handler

JQuery Introduction Step By Step Tutorial - Part 4:We know, JavaScript have event handlers. Many handlers are available for user-initiated events, such as mouse clicks, key presses, load. In this post, we will see how to apply it.


In this practice, we use onload event at body. Like this:


// JavaScript Document


$(document).ready();
function lyricstyle(){
$('.lyric-text').addClass('lyric-full');
}

We create new function: lyricstyle(). We don't put in $(document).ready(). What is impact? This causes our code to run after the page is completely loaded.


PHP XML Tutorial




PHP XML Tutorial


XML PHP Step By Step Tutorial. XML is a format for storing text and transporting data. The use of XML is very broad and flexible. Did you know, a lot of structure / format of the document based on XML language. For example, RSS, Atom, and XHTML.

Because the plain text format so it can be accepted by all platforms. XML allows you to store data information (like a database), but also you can use to store application configuration information, and so on. Many processor can handle XML document, such as PHP.

In this tutorial, you will learn how to use XML for your web applications. You will learn how to use PHP, you can communicate and manipulate data in XML. After completing this tutorial, we hope you will read about SimpleXML at here.

PHP - XML: Read from String
PHP - XML: Read from a File
PHP - XML: Retrieving Node Values
PHP - XML: Retrieving Attribute Values
PHP - XML: Processing XML
PHP - XML: Creating XML Document
PHP - XML: Adding XML Nodes
PHP - XML: Removing Node
PHP - XML: Replacing Node
PHP - XML: Filtering XML Nodes with XPath
PHP - XML: Filtering XML Nodes by Namespace

ADOdb: Introduction



ADOdb: Introduction

You can amaze your client by saying "It's no problem you will use mysql, mssql, oracle, etc. Our web application support all major database without change codes". Wow, it's advantage for your promotion. The magic secret is php ADOdb. PHP's database access functions are not standardised. This creates a need for a database class library to hide the differences between the different database API's (encapsulate the differences) so we can easily switch databases. ADOdb currently support MySQL, Oracle, Microsoft SQL Server, Sybase, Sybase SQL Anywhere, Informix, PostgreSQL, FrontBase, Interbase (Firebird and Borland variants), Foxpro, Access, ADO and ODBC. We have had successful reports of connecting to Progress and DB2 via ODBC. Unique Features of ADOdb (from manual):
Easy for Windows programmers to adapt to because many of the conventions are similar to Microsoft's ADO. Unlike other PHP database classes which focus only on select statements, we provide support code to handle inserts and updates which can be adapted to multiple databases quickly. Methods are provided for date handling, string concatenation and string quoting characters for differing databases.
A metatype system is built in so that we can figure out that types such as CHAR, TEXT and STRING are equivalent in different databases.
Easy to port because all the database dependant code are stored in stub functions. You do not need to port the core logic of the classes.
PHP4 session support. See adodb-session.php.
Now, we try test this library.
Download from sourceforge.
Extract zip file to a web directory.
Open a database manager (ex, phpmyadmin).
Create a simple database for test (ex, "inventory").
Create a simple table (ex, "products").
Now, Try simple test. Write code below. Put in the same directory with folder adodb. Give name "adodbtest.php":

<?php     
    include('adodb/adodb.inc.php'); 
    
    $databasetype = 'mysql'; 
    $server = 'localhost';
    $user   = 'root';
    $password = 'r0ot';
    $database = 'inventory';
    
    $db = ADONewConnection($databasetype); 
    $db->debug = true; 
    $db->Connect($server, $user, $password, $database); 
    $rs = $db->Execute('select * from products'); 
    print "<pre>"; 
    print_r($rs->GetRows()); 
    print "</pre>"; 
?>


  • Execute that file.
      Now, it's time to tell our client... "Don't worry, My web application support your database".



    1. PHP ADOdb Tutorial




      PHP ADOdb Step By Step Tutorial. a database class library.

      What is PHP ADOdb?

      A library for accessing various types of databases
      ADOdb Written in PHP Language.
      Use metatype system so can figure out eqivalent of different field types in different databases.
      Idea from Microsoft's ADOdb
      Official website at phplends

      Why PHP ADOdb

      Support various databases such as MySQL, Oracle, Microsoft SQL Server, Sybase, Sybase SQL Anywhere, Informix, PostgreSQL, FrontBase, Interbase (Firebird and Borland variants), Foxpro, Access, ADO and ODBC.
      Not only focus in select statement, this library also support insert, update, and delete statement
      Write one run anywhere
      Portable sql

      Where You can get it?

      Class library, you can download at here
      PHP ADODb documentation at here
      Whenever you need PHP ADOdb?
      Your PHP application support many databases.
      You dont want to write every line code at every kind database

      How to use PHP ADOdb?

      ADOdb: Introduction
      ADOdb: Connection Statement
      ADOdb: Advance Select Statement
      ADOdb: How to show tables
      ADOdb: How to show fields
      ADOdb: How to show databases
      ADOdb: Caching of Recordset
      ADOdb: Recordset to HTML
      ADOdb: Multi Database Connection
      ADOdb: Data Dictionary
      ADOdb: Quick Export Data
      ADOdb: Insert data style
      ADOdb: Replace Data
      ADOdb: Log Query
      PHP ADOdb: Understanding Pivot Table For Reporting

      Senin, 25 Januari 2010

      PHP & MYSQL





      PHP Mysql Database Step By Step Tutorial. Mysql is the most popular open-source database system.


      What is Mysql?


      Open source database system
      like most modern Database Management Systems is based on the relational model, RDBMS.
      Free
      Run on Linux, Windows, Netware, AIX, and so on.
      easily accessible through programming languages like PHP


      Why Mysql?




      Open source database
      consistent fast performance & high reliability
      ease of use High Availability Comprehensive Application Development


      Management Ease


      Lowest Total Cost of Ownership


      Where You can get it?


      You can download at mysql official website, mysql.com




      You can get mysql that packaged with php like in AppServ


      For portable application, you can try XAMPP