Memperbaiki file video yang rusak

Berawal dari kecerobohan saya mengutak utik handycam teman saya sehingga secara tidak sengaja saya menghapus semua file movie dalam handycam tersebut. Kebetulan media penyimpanan berjenis SD Card sehingga langsung saya amankan SD Card tersebut dan saya coba untuk mengembalikan file yang terhapus tadi.

Beberapa software saya cobakan untuk mengembalikan  file tersebut, akhirnya pilihan saya jatuh pada Wondershare Data Recovery.

ws

Bukan promosi, karena beberapa software yang lain gagal dalam mengembalikan file yang terhapus, pada software ini ada fasilitas untuk merecover dengan mode raw data recovery. Dengan mode ini file movie sukses terdeteksi dan kemudian saya selamatkan.

Namun demikian muncul permasalahan baru yaitu file movie (kebetulan formatnya avi) tidak dapat dijalankan dengan player apapun seperti VLC, Med Player Classic bawaan Codec Pack dsb, padahal besarnya file terbaca normal. Dari beberapa pesan error saya simpulkan bahwa file movie tersebut tidak jelas mana awal dan akhirnya.

Kemudian saya googling, ada beberapa saran dan dari hasil rekomendasi untuk memperbaiki file avi yang rusak menggunakan software DivFix++. Setelah saya download (kebetulan free) saya uji cobakan. Namun hasilnya sama saja!! Software tersebut tidak bisa mengenali mana awal sama akhir file hasil recover tsb.

Pemecahan permasalahan muncul secara tidak sengaja, manakala saya berfikir bagaimana kalo format avi coba saya ubah ke format yang lain dulu. Kebetulan yang saya punya di kompie adalah HD Video Converter Factory.

hd

Saya setting dulu output filenya, ternyata proses convert berjalan lancar. Dan saya putar di beberapa jenis player sukses dan lancar.

Sekian sharing saya  :)

Integrasi dreamweaver dan mysql untuk membuat grafik menggunakan amchart

Bukan promosi amchart lhooo….tapi ini semata-mata hanya karena saya biasa menggunakan dan mudah dimodifikasi menggunakan dreamweaver. Saya asumsikan pembaca sudah familier menggunakan dreamweaver, maksudnya tau cara create site, create recordset dsb.

Ok langsung saja buat page di dreamweaver, dan kita create recordset, dalam kasus ini recordset kita beri nama statkunjungan_rec. Sedangkan amchart dalam kasus ini saya gunakan versi 1.5. Chart yang saya pilih adalah tipe amline untuk menampilkan grafik jumlah kunjungan per-tanggal kedatangan. Contoh perintah dari situs amchart untuk memanggil chart line adalah sbb

  <script type="text/javascript" src="../amline/swfobject.js"></script>
	<div id="flashcontent1">
		<strong>You need to upgrade your Flash Player</strong>
	</div>

	<script type="text/javascript">
		// <![CDATA[		
		var so = new SWFObject("../amline/amline.swf", "amline1", "260", "200", "8", "#FFFFFF");
		so.addVariable("path", "../amline/");
		so.addVariable("settings_file", escape("amline/amline4/amline_settings1.xml"));
		so.addVariable("data_file", escape("amline/amline4/amline_data1.txt"));
//	so.addVariable("chart_data", "");
		so.addVariable("preloader_color", "#000000");
		so.write("flashcontent1");
		// ]]>
	</script>

pada listing script diatas, data yang dipanggil dalam bentuk amline_data1.txt. Setelah dicek ternyata isinya berupa looping data yang dipisahkan tanda titik koma untuk memisahkan antara axis dan ordinat chartnya. Sehingga apabila kita ingin integrasikan dengan recordset bawaan dreamweaver perlu ada sedikit modifikasi. Tahapannya adalah sbb :

1. Ubah dengan benar alamat link lokasi setting, misalnya link ke swfobject.swf, amline_settings1.xml dsb
2. Nonaktifkan pemanggilan “data_file” dengan memberi tanda komentar (//) di sebelah kiri
3. Aktifkan “chart_data” dengan menghilangkan tanda komentar di sebelah kiri
4. Panggil perulangan data dari recordset dreamweaver dengan do….while….. sbb:

<?php do {
echo date(‘d-m-Y’, strtotime($row_statkunjungan_rec['tgl'])); ?>;<?php echo $row_statkunjungan_rec['jml_kunjungan'].’\n’;
} while ($row_statkunjungan_rec = mysql_fetch_assoc($statkunjungan_rec)); ?>

Perintah ini akan menghasilkan looping data tgl;jml_kunjungan dan perbaris dipisahkan dengan ‘\n

Sehingga listing lengkapnya adalah sbb :

<script type="text/javascript" src="path_to_file/swfobject.js"></script>
<!-- this id must be unique! -->
<div id="flashcontent_cari" style="position:relative">
</div>

<script type=”text/javascript”>
// <![CDATA[
var so = new SWFObject("path_to_file/amline.swf", "amline1", "650", "300", "8", "#FFFFFF");
so.addVariable("path", "path_to_file/amline/");
so.addVariable("settings_file", encodeURIComponent("path_to_file/amline_kunjungan.xml"));
//so.addVariable("data_file", encodeURIComponent("amline_data1.txt"));
so.addVariable("chart_data","<?php do {
        echo date('d-m-Y', strtotime($row_statkunjungan_rec['tgl'])); ?>;<?php echo $row_statkunjungan_rec['jml_kunjungan'].’\n’;
        } while ($row_statkunjungan_rec = mysql_fetch_assoc($statkunjungan_rec)); ?>”);
so.write(“flashcontent_cari”);  // this id must match the div id above
// ]]>
</script>

Mudah-mudahan membantu :)

Menampilkan semua tanggal pada hasil query mysql

Sebelumnya saya bingung mau memberi judul apa yang pas untuk tulisan saya berikut ini. Penjelasan kasusnya misalnya kita ingin membuat statistik kunjungan sebuah puskesmas. Puskesmas biasanya hanya buka pada jam kerja dari Senin sampai Jum’at belum termasuk libur Nasional. Artinya tidak setiap hari data kunjungan pasien ada. Ilustrasinya tabel kunjungan adalah sebagai berikut

id : integer, tgl_periksa : datetime

Kasusnya, kita ingin menampilkan semua tanggal yang tidak tercantum didalam kolom tgl_periksa dan menjumlah berapa pasien yang berkunjung dalam hari tersebut,contohnya pada tanggal 30-03-2012 seharusnya berjumlah 2 kunjungan, dan pada tanggal 27-03-2012 seharusnya baris tersebut muncul (walau tidak ada input data pada tanggal tersebut) dengan jml kunjungan 0.

Setelah ber-googling ria beberapa solusi didapatkan. Diantaranya ada yang membuat stored procedure untuk membuat tabel baru berisikan data tanggal antara tahun yang telah ditentukan. Namun bagi saya hal ini aga menyusahkan, yang pertama saya kurang memahami stored procedure dan yang kedua tabel yag dibuat tadi mempunyai rentang. Apabila rentang habis harus dibuat manual atau kalau rentangnya terlalu besar akan membebani tabel (CMIIW).

Solusi yang saya rasa cocok untuk kasus ini saya dapatkan dari stackoverflow.com dengan title masalah : “wanted to get all dates in mysql result”. Ini yang akan saya kupas di topik ini.

Hasil output query yang kita inginkan adalah seperti ini
result

Seperti hasil yang dilihat, maka pada tanggal tidak ada kunjungan akan otomatis di generate dengan jml = 0. Querynya adalah sbb :

SELECT tgl, COUNT(psid) AS jmlpasien FROM ( SELECT adddate((select min(date(tgl_periksa)) from tb_periksa), row-1) as tgl FROM ( SELECT @row := @row + 1 as row FROM (select 0 union all select 1 union all select 3 union all select 4 union all select 5 union all select 6 union all select 6 union all select 7 union all select 8 union all select 9) t, (select 0 union all select 1 union all select 3 union all select 4 union all select 5 union all select 6 union all select 6 union all select 7 union all select 8 union all select 9) t2, (SELECT @row:=0) r ) n WHERE n.row <= (select datediff(max(date(tgl_periksa)), min(date(tgl_periksa))) from tb_periksa) + 1 ) dr LEFT JOIN tb_periksa u ON dr.tgl = date(u.tgl_periksa) GROUP BY dr.tgl

Untuk penjelasan querynya bisa anda rujuk dari sumbernya di stackoverflow.com. Kemudian pertanyaanya bagaimana bila kita hanya ingin menampilkan data bulan atau tahun tertentu saja. Maka kita perlu sedikit melakukan modifikasi pada querynya. Misal kita hanya ingin menampilkan data pada bulan Maret 2012, maka querynya kita modifikasi sbb :

SELECT tgl, COUNT(psid) AS jmlpasien
FROM ( SELECT adddate((select min(date(tgl_periksa)) from tb_periksa WHERE month(tgl_periksa)=3 AND year(tgl_periksa)=2012), row-1) as tgl
FROM ( SELECT @row := @row + 1 as row
FROM (select 0 union all select 1 union all select 3 union all select 4 union all select 5 union all select 6 union all select 6 union all select 7 union all select 8 union all select 9) t,
(select 0 union all select 1 union all select 3 union all select 4 union all select 5 union all select 6 union all select 6 union all select 7 union all select 8 union all select 9) t2, (SELECT @row:=0) r ) n
WHERE n.row <= (select datediff(max(date(tgl_periksa)), min(date(tgl_periksa)))
from tb_periksa WHERE month(tgl_periksa)=3 AND year(tgl_periksa)=2012) + 1 ) dr LEFT JOIN tb_periksa u ON dr.tgl = date(u.tgl_periksa)
GROUP BY dr.tgl

Hasilnya adalah sebagai berikut

result2

Anda juga bisa bereksperimen dengan elemen GET untuk perintah mamanggil data dari form, atau memakai operasi BETWEEN untuk memanggil rentang data pada perintah SQL.

Selamat mencoba :)

Ternyata port e-sata bisa untuk usb

Laptop kesayangan-ku ternyata termasik kedalam kategori fakir usb. Port usb cuman ada 2, 1 port hdmi, 1 port e-sata. Berawal dari ketidak sengajaan teman dalam memasukkan port usb ke e-sata, ternyata port tersebut bisa tersambung. Kemudian aku coba memasukkan usbdrive ke port e-sata ternyata juga tidak ada masalah. Terakhir aku coba modem smart di colokan e-sata, eh ternyata sukses juga. Saat update blog ini, menggunakan modem smart yang dicolokkan ke port e-sata. Jadi sekarang sudah tidak fakir usb lagi he3

Jquery : Show Hide Div menggunakan combo box

Tulisan kali ini akan mengulas mengenai Jquery. Pada dasarnya saya tidak mahir tentang jquery, hanya end user saja. Ada banyak sekali teknik yang terkait dengan show/hide sebuah tag div menggunakan jquery, tetapi setelah 2 hari surving ternyata belum menemui jawaban memuaskan untuk show/hide tag div dengan trigger dari combo box, sehingga dengan sedikit trial error, akhirnya bisa juga :)

Seperti biasa saya gunakan editor kesayangan dreamweaver, langkahnya

  1. Download jquery versi terakhir dan simpan dalam site direktori (terserah anda, dalam kasus saya, saya simpan file jquery di folder scripts).
  2. Buat sebuah combo box dengan id=menucombo. Selanjutnya tentukan value-nya dengan menekan tombol list value di property bar. Misal seperti ini
  3. Buat juga sebuah text area yang diapit tag div dengan id=area
  4. Buka source code view dan sisipkan script berikut di dalam tag <head>
  5. <script src=”../scripts/jquery-1.4.4.min.js”></script>
    <script>
    $(document).ready(function() {
    $(“#area”).css(“display”,”none”);
    $(“select#menucombo”).click(function() {
    if($(this).val() !== “tampil”){
    $(“#area”).hide(“slow”);
    }else{
    $(“#area”).show(“slow”);
    }
    });
    });</script>
  6. Selesai

Keterangan

$(“#area”).css(“display”,”none”); –> mengkondisikan textarea yang diapit tag div id=area untuk tidak ditampilkan.

$(“select#menucombo”).click(function() –> aktivasi perintah di menu combo box terjadi bila ada pemilihan dan trigger “click”

if($(this).val() !== “tampil”){
$(“#area”).hide(“slow”);
}else{
$(“#area”).show(“slow”);
}

–> menjelaskan bahwa jika value dari combo box TIDAK memiliki nilai “tampil” maka tag div id=area disembunyikan, bila tidak maka tag div id=area ditampilkan

Kode selengkapnya seperti ini

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”&gt;
<html xmlns=”http://www.w3.org/1999/xhtml”&gt;
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=iso-8859-1″ />
<title>Untitled Document</title>
<script src=”../scripts/jquery-1.4.4.min.js”></script>
<script>
$(document).ready(function() {
$(“#area”).css(“display”,”none”);
$(“select#menucombo”).click(function() {
if($(this).val() !== “tampil”){
$(“#area”).hide(“slow”);
}else{
$(“#area”).show(“slow”);
}
});
});

</script>
</head>

<body>
<form id=”form1″ name=”form1″ method=”post” action=””>
<select name=”menucombo” id=”menucombo”>
<option selected=”selected”>–pilih–</option>
<option value=”tampil”>tampil</option>
<option value=”hilang”>hilang</option>
</select>
<br />
<textarea name=”area” id=”area”></textarea>
</form>
</body>
</html>

Mudah-mudahan yang sedikit ini bermanfaat. Thx

Format tanggal (date) di PHP dan MySQL melalui Dreamweaver

Sebenarnya sudah banyak artikel seputar manipulasi format tanggal baik di PHP maupun MySQL, tapi tak apalah siapa tahu tulisan kecil inipun bisa membantu teman-teman. Secara default, MySQL menyimpan data ‘date’ dalam format ‘yyyy-mm-dd’. Untuk merubah format tanggal tersebut bisa kita lakukan dengan merubah format di MySQL, namun cara ini tidak saya bahas, karena menurut saya lebih fleksibel kalau kita menyiasati format tampilan di sisi client.

Misal kita sudah menyiapkan tabel dengan salah satu kolom bernama ‘tgl’ dengan format kolom ‘date’, dan kita membuat recordset misal dengan nama ‘panggiltgl_rec’. Untuk merubah format tgl tersebut, kita bisa menggunakan fungsi strtotime.

  1. Misal kita ingin menampilkan format ‘dd-mm-yyyy’ maka cara memanggilnya adalah <?php echo date(‘d-m-Y’, strtotime($row_panggil_rec["tgl"])); ?>
  2. Misal kita ingin menampilkan format ‘yyyy’ maka cara memanggilnya adalah <?php echo date(‘Y’, strtotime($row_panggil_rec["tgl"])); ?>
  3. Kalau kita ingin menampilkan format Indonesia, misalnya Minggu, 6 Maret 2011, maka kita menambahkan fungsi LC_TIME, strftime. Penggunaannya seperti ini <?php setlocale(LC_TIME,’in’);
    echo strftime(‘%A, %d %B %Y’, strtotime($row_panggiltgl_rec['tgl'])); ?>

Jika point nomor 3 masih bermasalah dalam menampilkan format tanggal indonesia (seperti yang saya alami, maka coba setting ini : setlocale(LC_ALL, 'id_ID.UTF8', 'id_ID.UTF-8', 'id_ID.8859-1', 'id_ID', 'IND.UTF8', 'IND.UTF-8', 'IND.8859-1', 'IND', 'Indonesian.UTF8', 'Indonesian.UTF-8', 'Indonesian.8859-1', 'Indonesian', 'Indonesia', 'id', 'ID', 'en_US.UTF8', 'en_US.UTF-8', 'en_US.8859-1', 'en_US', 'American', 'ENG', 'English');

Sekian dulu, semoga membantu

JOIN multiple table dengan operasi SUM beberapa kolom didalamnya

Tulisan ini mengawali tahun 2011 dimana saya punya permasalahan untuk menampilkan hasil query dari beberapa tabel dimana pada beberapa tabel membutuhkan operasi SUM (penjumlahan). Dari beberapa kali surfing, kita bisa melakukan operasi JOIN pada beberapa tabel. Namun demikian akan muncul permasalahan apabila dari beberapa tabel tersebut dibutuhkan operasi penjumlahan. Hasil yang kita peroleh terhadap penjumlahan tersebut adalah salah, saya tidak bisa menjelaskan secara panjang kesalahan tersebut, namun untuk mengetahui mengapa silahkan dicoba query secara terpisah.

Ok langsung saja dengan contoh saya memiliki 3 buah tabel

1. Tabel data_obat. Tabel ini memuat data kode dan nama obat dengan contoh seperti ini

2. Tabel supplier_obat. Tabel ini memuat pengiriman obat oleh supplier

3. Tabel pakai_obat. Tabel ini digunakan untuk menampung data pemakaian obat

Sekarang kita ingin menampilkan data rekap pemakain seluruh obat dengan kolom : kode, nama_obat, stok, pemakaian
Stok diambil dari jumlah obat berdasar kode dari supplier, sedangkan pemakaian diambil dari jumlah pemakaian obat berdasar jenis obat. Kita akan menggunakan LEFT JOIN untuk menampilkan semua data obat terhadap tabel lain.

Menampilkan data stok

SELECT data_obat.kode, data_obat.nama_obat, SUM(supplier_obat.jumlah) AS stok
FROM data_obat LEFT JOIN supplier_obat
ON data_obat.kode=supplier_obat.kode
GROUP BY data_obat.kode ASC

Menampilkan data pemakaian

SELECT data_obat.kode, data_obat.nama_obat, SUM(pakai_obat.jml_pakai) AS pemakaian
FROM data_obat LEFT JOIN pakai_obat
ON data_obat.kode=pakai_obat.kode
GROUP BY data_obat.kode ASC

Kita akan menggunakan 2 operasi LEFT JOIN
SELECT data_obat.kode, data_obat.nama_obat, SUM(supplier_obat.jumlah) AS stok, SUM(pakai_obat.jml_pakai) AS pemakaian
FROM data_obat
LEFT JOIN supplier_obat ON data_obat.kode=supplier_obat.kode
LEFT JOIN pakai_obat ON pakai_obat.kode=data_obat.kode
GROUP BY data_obat.kode ASC

Ternyata data stok menunjukkan hasil yang salah bila kita bandingkan dengan query secara terpisah. Kenapa demikian? Hal ini disebabkan transaksi penggunaan obat lebih dari 1x maka stok akan dikalikan dengan berapa kali obat tersebut dipakai.

SOLUSI

SELECT data_obat.kode, data_obat.nama_obat, SUM(supplier_obat.jumlah) AS stok, pemakaian
FROM data_obat
LEFT JOIN supplier_obat ON data_obat.kode=supplier_obat.kode
LEFT JOIN
(SELECT data_obat.kode, SUM(pakai_obat.jml_pakai) AS pemakaian
FROM data_obat, pakai_obat
WHERE data_obat.kode=pakai_obat.kode
GROUP BY pakai_obat.kode ASC) AS pakai
ON data_obat.kode=pakai.kode
GROUP BY data_obat.kode ASC

Semoga membantu :-)