[Visual Foxpro] Mendapatkan Info/Tag Media File (MP3, WMA dll)

Info Media File FoxPro

Hoahmmm..  kayaknya sudah lama saya tidak posting catatan di blog. OK, sambil menunggu partai Inggris vs Swedia (*semoga Inggris menang) saya akan post yang berhubungan dengan Visual Foxpro.

Catatan ini adalah cara mendapatkan informasi atau tag dari file media seperti MP3, WMA, MPG dll dengan menggunakan bahasa pemrograman Visual Foxpro. Code berikut menggunakan Ole Control Windows Media Player bawaan Windows. OK, berikut code simplenya, silahkan tambahkan error hadle jika diperlukan.

*// author: thesuhu
*// date: 15-06-2012 23:17

#Define CR Chr(13)
oWMP = Newobject([WMPlayer.ocx.7])

&& cari file media
lcMediaFile = Getfile([mp3|mpg|wmv|wma])

oMediaCol = oWMP.MediaCollection
oMedia = oMediaCol.Add(m.lcMediaFile)

lcMediaInfo = []
With oMedia
	lcMediaInfo = ;
		[Judul: ] + .getItemInfo([Title]) + CR + ;
		[Artis: ] + .getItemInfo([Artist]) + CR + ;
		[Album: ] + .getItemInfo([Album]) + CR + ;
		[Durasi (detik): ] + .getItemInfo([Duration]) + CR + ;
		[Bitrate (bps): ] + .getItemInfo([Bitrate]) + CR + ;
		[Type: ] + .getItemInfo([FileType]) + CR + ;
		[Media Type: ] + .getItemInfo([MediaType]) + CR + ;
		[Size (byte): ] + .getItemInfo([FileSize]) + CR + ;
		[Genre: ] + .getItemInfo([WM/Genre]) + CR + ;
		[Track: ] + .getItemInfo([WM/TrackNumber]) + CR + ;
		[Tahun: ] + .getItemInfo([WM/Year])
Endwith

MessageBox(m.lcMediaInfo, 0, [Media Info])

Silahkan dimodifikasi sesuai keinginan, mungkin bisa ubah biar lebih informatif misalnya durasi diganti dengan format hh:mm:ss, Size diubah ke KB dll.

Sebaliknya, untuk menuliskan info tag dengan method setItemInfo contoh berikut adalah saya akan menuliskan info artis pada mp3 di atas.

oMedia.setItemInfo([Artist],[Ratna Antika feat Sodiq])

Sekian dulu, semoga bermanfaat.

[PHP dan MySQL] Membuat File Koneksi Terpisah

mysql dan php

Saya ingin berbagi catatan tentang PHP dengan database MySQL, ke depan jika ada waktu luang Insya Allah saya akan coba sambung catatan saya tentang PHP dan MySQL. Di sini saya tidak akan banyak membahas fungsi-fungsi dalam PHP, untuk referensi lengkapnya bisa di pelajari di http://www.w3schools.com/php/. Catatan saya akan lebih banyak tentang contoh-contoh penggunaanya saja. Contoh kali ini adalah bagaimana membuat file koneksi untuk koneksi ke database MySQL.

Let’s start, untuk bisa mengakses ke database MySQL kita perlu membuat dulu koneksi ke server. Artinya setiap kali kita akan mengolah data, kita perlu melakukan koneksi. Nah, script koneksi ke database sebaiknya dibuat terpisah dalam file tersendiri. Kenapa? karena jika kita berpindah-pindah server dengan user dan password database yang berbeda, kita cukup merubah user dan password pada file ini. Sebagai contoh jika kita upload ke web hosting yang mungkin user dan password database ditentukan oleh web hosting. Oke, saya akan membuat file dengan nama koneksi.php, scriptnya adalah sebagai berikut:

<?php
$server = 'localhost';
$username = 'root';
$password = 'toor';
$database = 'db_latihan';

//koneksi ke database
mysql_connect($server, $username, $password) or die('koneksi gagal');
mysql_select_db($database) or die('unknown data base');
?>

Untuk file php lain yang membutuhkan koneksi ke database, kita cukup sisipkan script ke dalam file php tersebut sebagai berikut:

include "../config/koneksi.php"; //contoh saya simpan di folder config

Sekian dulu, thanks for reading.

Mendapatkan Properti / Informasi File dengan Visual Foxpro

no run like fox

Terkadang saya membutuhkan informasi dari sebuah file, misalnya versi dari aplikasi kita, tanggal modfikasi dan lain-lain. Sepertinya ada banyak cara untuk mendapatkan properti dari sebuah file. Berikut adalah salah satu cara yang menurut saya sangat lengkap, untuk mencobanya silahkan save as ke prg atau bisa download prg nya di sini.

Clear
strComputer = "."
objWMIService = Getobject("winmgmts:{impersonationLevel=impersonate}!\\" + strComputer + "\root\cimv2")
colFiles = objWMIService.ExecQuery("Select * from CIM_Datafile Where name = 'C:\\nsisportable2\\NSISPortable.exe'")
For Each objFile In colFiles
	? "Access mask: " + Str(objFile.AccessMask)
	? "Archive: " + Transform(objFile.Archive)
	? "Compressed: " + Transform(objFile.Compressed)
	? "Compression method: " + objFile.CompressionMethod
	? "Creation date: " + objFile.CreationDate
	? "Computer system name: " + objFile.CSName
	? "Drive: " + objFile.Drive
	? "8.3 file name: " + objFile.EightDotThreeFileName
	? "Encrypted: " + Transform(objFile.Encrypted)
	? "Encryption method: " + objFile.EncryptionMethod
	? "Extension: " + objFile.Extension
	? "File name: " + objFile.FileName
	? "File size: " + objFile.FileSize
	? "File type: " + objFile.FileType
	? "File system name: " + objFile.FSName
	? "Hidden: " + Transform(objFile.Hidden)
	? "Last accessed: " + objFile.LastAccessed
	? "Last modified: " + objFile.LastModified
	? "Manufacturer: " + objFile.Manufacturer
	? "Name: " + objFile.Name
	? "Path: " + objFile.Path
	? "Readable: " + Transform(objFile.Readable)
	? "System: " + Transform(objFile.System)
	? "Version: " + objFile.Version
	? "Writeable: " + Transform(objFile.Writeable)
Next

Di atas adalah contoh untuk mendapatkan informasi dari file NSISPortable.exe, silahkan dimodifikasi.
Semoga bermanfaat.

Berbagai Cara untuk Mendapatkan IP Address Lokal dengan Visual Foxpro

ip address

Berikut ini adalah berbagai cara untuk mendapatkan alamat IP lokal dengan visual foxpro. Cara pertama menggunakan MSWinsock, menurut saya ini adalah yang paling simple, untuk mencobanya silahkan save as ke prg code berkut:

IPcomp = CREATEOBJECT('MSWinsock.Winsock.1')
MESSAGEBOX("IP Address Computer Anda : "+CHR(13)+IPcomp.LocalIP,64+0,"IP address")

Cara kedua masih mirip dengan cara pertama yaitu menggunakan wsock32, code programnya cukup panjang dibandingkan cara pertama di atas, tapi return hasilnya sangat cepat. untuk mencobanya silahkan save as ke prg code berikut:


#Define WSADATA_SIZE          398
#Define WS_VERSION            514
#Define HOSTBUFFER_SIZE       256
#Define HOSTENT_STRUCT_SIZE   16

Do DeclareAPIs

Local lcBuffer, lnResult, lcHostname, lcMessage, lcHostentStruct
lcBuffer = SPACE(WSADATA_SIZE)
lnResult = WSAStartup(WS_VERSION, @lcBuffer)
lcMessage = ""
If lnResult = 0
    lcBuffer = Replicate(CHR(0),HOSTBUFFER_SIZE)
    lnResult = gethostname(@lcBuffer,HOSTBUFFER_SIZE)
    If lnResult = 0
        lcHostname = STRTRAN(lcBuffer,CHR(0),"")
        lcMessage = "HOST: " + lcHostname + Chr(13)
        lnResult = gethostbyname(lcHostname)
        If lnResult != 0
            lcHostentStruct = MemoryBuffer(lnResult, HOSTENT_STRUCT_SIZE)
            lnResult = buf2dword(Substr(lcHostentStruct, 13,4))
            If lnResult != 0
                lcMessage = lcMessage + "LOCAL IP ADDRESS: " + IPPortion(lnResult)
            Endif
        Endif
    Endif
    If Empty(lcMessage)
        lcMessage = "Sorry, unable to retrieve Local Host and IP"
    ENDIF

    Messagebox(lcMessage,64,"Local Host & IP")

    =WSACleanup()
Else
    Messagebox("Error returned: " + Transform(lnResult))
ENDIF

**************************
PROCEDURE DeclareAPIs
**************************
    Declare Integer WSAStartup In wsock32 Integer wVerRq, String @lpWSAData
    Declare Integer WSACleanup In wsock32
    Declare Integer gethostname In wsock32 String @Name, Integer namelen
    Declare Integer gethostbyname In wsock32 String HostName
    Declare RtlMoveMemory In kernel32 As Heap2Str String @, Integer, Integer
Endproc

**************************
Function IPPortion(nPointer)
**************************
    Local lnAddress, lcResult
    lnAddress = buf2dword(MemoryBuffer(nPointer, 4))
    Return Iif(lnAddress <> 0, JustIP(MemoryBuffer(lnAddress, 4)), "")
Endfunc

**************************
Function JustIP(cBuffer)
**************************
    Local lcResult, lnCounter
    lcResult = ""
    For lnCounter=1 To 4
        lcResult = lcResult + Ltrim(Str(Asc(Substr(cBuffer, lnCounter)))) + Iif(lnCounter=4, "",".")
    Endfor
    Return lcResult
Endfunc

**************************
Function buf2word (cBuffer)
**************************
    Return Asc(Substr(cBuffer, 1,1)) + Asc(Substr(cBuffer, 2,1)) * 256
Endfunc

**************************
Function buf2dword(cBuffer)
**************************
    Return Asc(Substr(cBuffer, 1,1)) + ;
        BitLShift(Asc(Substr(cBuffer, 2,1)),  8) +;
        BitLShift(Asc(Substr(cBuffer, 3,1)), 16) +;
        BitLShift(Asc(Substr(cBuffer, 4,1)), 24)
Endfunc

**************************
Function MemoryBuffer(nAddress, nBuffersize)
**************************
    Local lcBuffer
    lcBuffer = SPACE(nBuffersize)
    = Heap2Str (@lcBuffer, nAddress, nBuffersize)
    Return lcBuffer
Endfunc

Cara ketiga berbeda dengan cara pertama dan kedua, cara berikut menggunakan ping biasa dengan command prompt yang dijalankan lewat visual foxpro. Untuk mencobanya silahkan save as ke prg code berikut:

Lparameters lcPcName
lcPcName = Getenv("COMPUTERNAME")
cTmp = Getenv("TEMP")
! ping -n 1 &lcPcName -4 >&cTmp\ip.txt
cPing = Filetostr(cTmp + '\ip.txt')
cIp = ''
Delete File cTmp + '\ip.txt'
If At('Reply from',cPing) > 0
	cPosisi=At('Reply from',cPing)+11
	cIp = Substr(cPing,cPosisi,15)
	cIp = Left(cIp,At(':',cIp)-1)
	Messagebox('Your IP Addess is : ' + cIp)
Else
	Messagebox('Failed !',16)
Endif
Return cIp

Kalau mau download semua prg nya di sini. Barangkali teman-teman punya cara lain silahkan ditambahkan, sekian.

Program untuk Mencari Bilangan Prima dengan Visual Foxpro

bilangan prima visual foxpro

Hmmm, baru saja saya membaca status teman di facebook yang isinya adalah deret bilangan prima dari 1 sampai 1000. Jadi tertarik saya untuk mencobanya, dan hasilnya seperti gambar di atas. berikut program dalam Visual Foxpro untuk menghasilkan deret bilangan prima dari n ke n:

silahkan save as dengan nama prog_bilangan_prima.prg

Lparameters lnAwal,lnAkhir
Clear
hasil = ''
jumlah = 0
isPrima=.F.
For i = lnAwal To lnAkhir
	If i > 1
		isPrima = .T.
		If i = 2
			isPrima = .T.
		Else
			N = i - 1
			For k = 2 To N
				If Mod(i,k) = 0
					isPrima = .F.
					Exit
				Endif
			Endfor
		Endif
	Endif
	lcPrima = Iif(isPrima = .T.,Transform(i),'')
	hasil = Iif(Empty(lcPrima),hasil,hasil + ', ' + lcPrima)
Endfor
hasil = Substr(hasil,3)
Return hasil

sederhana kan ? kalo males copas bisa download prg nya. Untuk mencobanya, tes deret bilangan prima dari 1 sampai 1000 ? silahkan ketik di command window seperti berikut ?prog_bilangan_prima(1,1000) hasilnya seperti gambar di atas, monggo silahkan dimodifikasi untuk menghitung ada berapa jumlah bilangan prima tersebut ?

Perbedaan Sys(5)+Sys(2003) dan Sys(16) pada Visual Foxpro

no run like fox

Sys(5) = Default drive or volume, menghasilkan default drive misal C:, D: ,G:
Sys(2003) = Current directory, menghasilkan direktori sekarang pada default drive.

Kegunaan Sys(5)+Sys(2003) adalah agar program yang kita buat dapat berjalan meski dipindah pindah lokasinya. misalnya kita buat program di C:\sales , apabila program kita default secara absolut dengan SET DEFAULT TO C:\sales maka jika program kita pindahkan ke drive lain atau direktori lain maka program akan tidak jalan semestinya. Lain halnya jika kita default dengan SET DEFAULT TO Sys(5)+Sys(2003) , dimanapun kita pindahkan program kita, program akan tetap berjalan dengan semestinya. Artinya secara otomatis default direktori akan terset dimana program kita berada.

Sekarang bagaimana jika program kita jalankan bukan dari tempatnya? Misalnya, saat saya jalankan Microsoft Visual Foxpro default direktori terset di C:\Program Files (x86)\Microsoft Visual FoxPro 9. ketika saya coba jalankan program yang ada di C:\sales maka program tidak berjalan semestinya karena justru Sys(5)+Sys(2003) akan menhasilkan default direktori bukan C:\sales melainkan C:\Program Files (x86)\Microsoft Visual FoxPro 9.

Sys(16) = Executing program file name, file program yang dijalankan.

Dari contoh di atas program akan tetap berjalan semestinya jika kita menggunakan modifikasi dari Sys(16), sekarang pada program kita default direktori dengan SET DEFAULT TO JUSTPATH(Sys(16)). Maka, dari manapun kita jalankan program tersebut, default direktori akan terset dimana lokasi program itu, dari contoh di atas default direktori akan terset ke C:\sales.

Secara pribadi saya lebih memilih menggunakan Sys(16) dari Sys(5)+Sys(2003) untuk menentukan default direktori. Bagaimana dengan teman-teman pengguna Foxpro silahkan memilih sesuai gaya program kalian.

No Run Like Fox !

Bahasa Microsoft Visual Foxpro pada Notepad++

VFP dan Notepad++

Notepad++ adalah source code editor yang mendukung banyak bahasa program.
menurut saya wajib punya bagi seorang programer. sayangnya sampai saat ini notepad++
tidak menyertakan bahasa program Visual Foxpro. berikut adalah cara menambahkan bahasa Visual Foxpro
pada Notepad++:

1. Download file xml Visual Foxpro User Define di sini
2. Extract file xml di folder root Notepad++
3. Klik icon pada toolbar “Dialog Pilihan” (gambar 1), maka akan muncul form “Definisi dari User” (gambar 2);
4. Pilih tombol Import…
5. Arahkan ke file xml yang telah di extract tadi
6. Selesai, silahkan restart Notepad++, pada menu bahasa akan muncul Visual Foxpro (gambar 3).

OK, Notepad++ siap digunakan sebagai editor file prg Visual Foxpro.