Tuesday, February 10, 2009

PSPA (Program Sekolah Pengasuhan Anak)

Hari Sabtu dan Minggu kemaren, saya ikut acara PSPA (Program Sekolah Pengasuhan Anak), yang diselenggarakan oleh Komite Sekolah SDIT Luqmanul Hakim, bekerjasama dengan Auladi Parenting School. Banyak banget cara asuh saya yang salah, ternyata.... Mudah-mudahan setelah ini bisa kami perbaiki. Amin. Mohon do'a pembaca sekalian.

Berikut beberapa beberapa hal yang saya ingat:

Bersama anak, bukan hanya di dekat anak
Sangat penting untuk meluangkan waktu bersama anak, bukan hanya berada di dekat anak. 'Bersama anak' artinya kita ikut terlibat dengan kegiatan yang sedang dilakukan anak, entah bermain, belajar, atau apa pun.

Motivasi dari dalam, lebih baik daripada motivasi dari luar
Contoh motivasi internal: keinginan belajar anak karena rasa penasaran akan sesuatu.
contoh movitasi eksternal: suruhan, rasa takut (diomeli/dimarahi).
Motivasi internal akan jauh lebih kuat mendorong anak untuk melakukan hal-hal positif, daripada motivasi eksternal.

Prestasi, bukan prestise
Adakalanya orang tua mengejar prestise, melalui apa yang dicapai anak. Jika demikian, maka hal yang memberi prestise, misalnya nilai mata pelajaran, akan menjadi tujuan pencapaian orang tua.
Seharusnya yang dikejar adalah prestasi anak. Perolehan nilai mata pelajaran hanya salah satu indikator prestasi.

Proaktif, bukan reaktif
Contoh sikap reaktif:
Kita memarahi dan menasehati anak ketika mereka berantem.
Contoh sikap proaktif:
Kita mengapresiasi ketika anak sedang bekerja sama, main bersama misalnya.

Dahulukan reward, bukan punishment
Meskipun hukuman itu bisa saja diberikan ketika anak melakukan kesalahan, tetapi lebih baik dan harus jauh lebih didahulukan penghargaan ketika anak melakukan kebaikan. Jika akan membuat hukuman bagi pelanggaran tertentu, pastikan hukuman tersebut bisa dilaksanakan. Sebagai contoh, mengatakan pada anak di mall "Kalau kalian lari-lari terus, nanti ditinggal!" adalah hal yang tidak mungkin dilakukan.

Jangan pernah berbohong pada anak
Kita mungkin pernah mentolerir kebohongan pada anak untuk hal-hal tertentu. Seharusnya kita tidak boleh sama sekali berbohong kepada anak, karena akan mengurangi kepercayaan mereka terhadap kita. Kurangnya kepercayaan anak kepada kita akan menyebabkan anak mencari pihak yang lebih dipercaya di luar rumah.

Tidak menyakiti fisik anak
Menyakiti fisik adalah salah satu contoh sikap reaktif ketika anak melakukan kesalahan, dan hanya akan menghentikan anak dalam jangka pendek.


Anak, Si Pembelajar
Pada dasarnya anak senang belajar. Itulah mengapa bayi pada umumnya sangat antusias mengejar sesuatu yang baru mereka lihat, meskipun harus berkali-kali jatuh. Yang sering tidak kita sadari, cara mereka belajar bisa jadi tidak sama dengan apa yang kita bayangkan. Mereka belajar dengan cara mengamati, menyentuh, menggigit apapun bagi bayi, mengacak-acak mainan dan sebagainya.
Konon, menurut penelitian, 80% anak malas belajar karena sress, entah di rumah atau di sekolah.
Beberapa tips mengajak anak belajar:
  • Bawa anak pada kondisi nyaman dulu, misalnya awali dengan permainan, tebakan dsb.
  • Usahakan anak penasaran dengan materi ajar: pancing dengan pertanyaan, ajak berimajinasi dsb.

Konsisten, konsisten!
Saya baru sadar betapa berbahayanya inkonsistensi dalam membuat aturan. Sebagai ilustrasi, ketika di awal kita melarang anak beli coklat, kemudian akhirnya memperbolehkan mereka beli karena merengek, nangis, bahkan mungkin mengamuk, maka anak akan belajar beberapa hal:
  • Kata 'tidak boleh', ternyata bisa berarti 'boleh'
  • Semakin besar 'gangguan' yang dilakukan, 'tidak boleh' itu semakin mendekati 'boleh'. Jadi kalau ingin berhasil, tinggal dinaikkan saja level gangguannya.
  • Upaya negatif (menangis, merengek, mengamuk), ternyata bisa menghasilkan hasil positif (dibelikan coklat tuh...)
  • Ternyata orang tua gak bisa dipercaya

Positif, bukan negatif
Selalu beri anak energi positif, bukan energi negatif
  • Gunakan kalimat positif, jangan kalimat negatif (misalnya menggunakan kata 'jangan', 'tidak', 'tidak boleh'). Bayangkan apa yang akan kita rasakan jika seseorang berkata "Jangan membayangkan seekor monyet berbadan besar, berbulu hitam, bergelantungan di pohon, bersuara uukk...ukk...". Kita pasti akan membayangkan sang monyet dengan jelas, meskipun sudah jelas-jelas dikatakan "jangan". Jadi lebih baik mengatakan "Nanti kita akan beli anu, anu dan anu", daripada mengatakan "Nanti jangan beli coklat ya...".
  • Tidak memberi stigma negatif terhadap anak, misalnya dengan mengatakan "Iya nih, anak saya memang pemalu...." Jadi pemalu beneran terus menerus deh. Setiap anak pasti punya kelebihan. Angkat sisi-sisi yang jadi kelebihannya itu.
Meninggikan, jangan Merendahkan
Seperti juga orang tua, anak ingin dihargai, punya harga diri. Kadang kita secara tidak sadar merendahkan harga diri anak dengan cara: mengomeli, memarahi, menasehati terus menerus, sehingga di pikiran anak tertanam:
  • Saya ini memang gak bisa
  • Biar aja yang memutuskan ayah/ibu, toh kalau saya yang memutuskan mesti salah
  • Pendapat saya mesti salah, pendapat ayah/ibu yang benar
dan seterusnya, yang membuat anak menjadi kurang percaya diri dan menilai negatif dirinya sendiri

Mendengar, baru berbicara
Kita kadang memandang anak sebagai 'makhluk kecil yang belum ngerti, dan karena itu harus diberitahu, dinasehati dst', sehingga kita jarang mau mendengar apa yang diinginkan dan dirasakan anak. Kita seharusnya mau lebih banyak mendengar, karena dengan kita dengarkan, rasa percaya dirinya akan naik, potensi berpikirnya pun akan lebih tergali. Ketika si Kakak memukul adeknya misalnya, maka seharusnya hal pertama yang kita lakukan adalah mendengar dan mencari tahu apa yang dia pikirkan/rasakan, sehingga si Adek dipukul. Setelah kita dengarkan, baru berbicara kepadanya: menasehati, memintanya untuk minta maaf dan sebagainya.

Monday, July 21, 2008

Bluetooth + Windows XP SP2 di Lenovo 3000 v200

Masalah:

Bluetooth tidak bisa terhubung ke device lain pada Windows XP SP2, dengan driver bawaan. Ketika mengaktifkan fungsi "Search for device in range", keluar pesan (antara lain): "Bluetooth license check failed....".

Solusi:
Setelah mencoba berbagai solusi, termasuk update BIOS ke versi terbaru, solusi yang berhasil dengan baik adalah dengan menggunakan Widcomm License Patcher. Saya ambil patcher dari sini.

Referensi:
http://forum.gsmhosting.com/vbb/archive/index.php/t-337667.html

Wednesday, July 16, 2008

Ubuntu 8.04 + VirtualBox 1.6.2 + USB

Pengingat-ingat, lupa terus :)

Solusi (dari sini, dan sini):


1. Edit file /etc/init.d/mountdevsubfs.sh

sudo vim /etc/init.d/mountdevsubfs.sh

Cari bagian ini:

#
# Magic to make /proc/bus/usb work
#
#mkdir -p /dev/bus/usb/.usbfs
#domount usbfs "" /dev/bus/usb/.usbfs -obusmode=0700,devmode=0600,listmode=0644
#ln -s .usbfs/devices /dev/bus/usb/devices
#mount --rbind /dev/bus/usb /proc/bus/usb

Buang tanda # (penanda komentar) pada 4 baris terakhir, sehingga menjadi:

#
# Magic to make /proc/bus/usb work
#
mkdir -p /dev/bus/usb/.usbfs
domount usbfs "" /dev/bus/usb/.usbfs -obusmode=0700,devmode=0600,listmode=0644
ln -s .usbfs/devices /dev/bus/usb/devices
mount --rbind /dev/bus/usb /proc/bus/usb

2. Start mountdevsubfs.sh

sudo /etc/init.d/mountdevsubfs.sh start

3. Edit /etc/fstab

sudo vim /etc/fstab

Kemudian tambahkan baris ini:

usbfs /proc/bus/usb usbfs devgid=124,devmode=664 0 0

Angka 124 adalah group id untuk group 'vboxusers' (harus disesuaikan).

Tuesday, January 30, 2007

Wrapper untuk ZeosLib

Saya membuat wrapper (pembungkus) untuk pustaka ZeosLib agar lebih mudah digunakan. Kode ini diujicoba pada ZeosLib versi 6.6.0b, menggunakan Turbo Delphi Explorer. Kode lengkapnya sebagai berikut:

{
Unit name: UZeoslibWrapper.pas
Author: Ruslan Nuryadin (nuryadin@gmail.com)
Version: 0.1

Notes:
- Please read license agreement below
- This software is on alpha stage, use at your own risk
- If you make a bug fix, modifications or enhancements,
please tell the author and spread it



License Agreement:

This libray is free software; you can redistribute
it and/or modify it under the terms of the GNU Lesser
General Public License as published by the Free
Software Foundation; either version 2.1 of the License,
or (at your option) any later version.

This library is distributed in the hope that it will be
useful, but WITHOUT ANY WARRANTY; without even the
implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE. See the GNU Lesser General
Public License for more details.

You should have received a copy of the GNU Lesser
General Public License along with this library; if not,
write to the Free Software Foundation, Inc.,
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

}


unit UZeoslibWrapper;

interface

uses
SysUtils, Classes, Dialogs, INIFiles,
ZConnection, ZDataset, ZSQLUpdate, ZStoredProcedure,
ZSQLMetadata, ZSQLProcessor, ZSQLMonitor, ZSequence,
ZAbstractDataset;

type
PTableItem = ^TTableItem;
TTableItem = record

Name: string;
Table: TZTable;
end;

TZeoslibWrapper = class
private
FTables: TList; //of TTableItem
FConnection: TZConnection;
FQuery: TZQuery;
function GetQueryResult: TZQuery;
function IsConnected: boolean;
function FindTable(name: string): TZTable;
protected

public
constructor Create;
destructor Destroy; override;

//connection
function LoadConfig(conf: string): boolean;
procedure Connect;
procedure Disconnect;
property Connected: boolean read IsConnected;

//query related


procedure DoQuerySQL(sql: string); overload;
procedure DoQuerySQL(sql: string; var result: TZQuery);
overload;
procedure DoModifySQL(sql: string);
property QueryResult: TZQuery read GetQueryResult;

//table related


function GetTable(name: string): TZTable;
end;


implementation

{ TZeoslibWrapper }

constructor TZeoslibWrapper.Create;

begin
FConnection := TZConnection.Create(nil);

FQuery := TZQuery.Create(nil);
FQuery.Connection := FConnection;

FTables := TList.Create;
end;

destructor TZeoslibWrapper.Destroy;
var

pti: PTableItem;
i: integer;
begin
//free registered table
for i := 0 to FTables.Count-1 do begin

pti := FTables.Items[i];
pti^.Table.Free;
Dispose(pti);
end;
FTables.Free;

FQuery.Free;
FConnection.Free;
inherited;
end;

procedure TZeoslibWrapper.Connect;
begin
try
FConnection.Connect;
except

MessageDlg('database connection failed!',
mtError, [mbOK], 0);
end;
end;

procedure TZeoslibWrapper.Disconnect;
begin
FConnection.Disconnect;

end;

procedure TZeoslibWrapper.DoModifySQL(sql: string);
var
zq: TZQuery;
begin
zq := TZQuery.Create(nil);
try

zq.Connection := FConnection;
zq.SQL.Add(sql);
zq.ExecSQL;
finally
zq.Free;
end;
end;

procedure TZeoslibWrapper.DoQuerySQL(sql: string;
var result: TZQuery);

begin
try
result.Connection := FConnection;
result.SQL.Clear;
result.SQL.Add(sql);
result.ExecSQL;
except
MessageDlg('unable to execute query! (' +
sql + ')', mtError, [mbOK], 0);
end;

end;

function TZeoslibWrapper.FindTable(name: string): TZTable;
var
pti: PTableItem;
i: integer;
begin

result := nil;
for i := 0 to FTables.Count-1 do begin

pti := FTables.Items[i];
if CompareText(pti^.Name, name) = 0 then begin
result := pti^.Table;
break;
end;
end;

end;

procedure TZeoslibWrapper.DoQuerySQL(sql: string);
begin
if not FConnection.Connected then begin

MessageDlg('database connection is not active!',
mtWarning, [mbOK], 0);
Exit;
end;

FQuery.SQL.Clear;
FQuery.SQL.Add(sql);
try
FQuery.ExecSQL;
except
MessageDlg('query failed! (' + sql + ')',
mtError, [mbOK], 0);
end;

end;

function TZeoslibWrapper.GetQueryResult: TZQuery;
begin
if not FQuery.Active then begin

FQuery.Open;
end;
result := FQuery;
end;

function TZeoslibWrapper.GetTable(name: string): TZTable;
var
zt, res: TZTable;
pti: PTableItem;

begin
result := nil;

zt := FindTable(name);
if zt <> nil then begin

if not zt.Active then zt.Open;
result := zt;
end else begin
res := TZTable.Create(nil);
try

res.Connection := FConnection;
res.TableName := name;
res.Open;
new(pti);
with pti^ do begin
Name := name;
Table := res;
end;
FTables.Add(pti);
result := res;
except

res.Free;
end;
end;
end;

function TZeoslibWrapper.IsConnected: boolean;
begin
result := FConnection.Connected;
end;



function TZeoslibWrapper.LoadConfig(conf: string): boolean;
var
ini: TINIFile;
begin
if not FileExists(conf) then begin

MessageDlg('config file not found! (' + conf + ')',
mtError, [mbOK], 0);
result := false;
Exit;
end;

ini := TIniFile.Create(conf);
try
with FConnection do begin

Protocol := ini.ReadString('zeoslib', 'protocol', '');
HostName := ini.ReadString('zeoslib', 'host', '');
Port := ini.ReadInteger('zeoslib', 'port', 0);
Database := ini.ReadString('zeoslib', 'database', '');
User := ini.ReadString('zeoslib', 'username', '');
Password := ini.ReadString('zeoslib', 'password', '');
end;
finally

ini.Free;
end;

result := true;
end;

end.

Syntax Highlighted with http://delphi-id.org/syntax


Kode di atas menggunakan file konfigurasi untuk mengatur koneksi ke database yang akan digunakan. Contoh file konfigurasi seperti di bawah ini:

[zeoslib]
protocol=postgresql-8
host=localhost
port=5432
database=yourdb
username=yourusername
password=yourpassword

Syntax Highlighted with http://delphi-id.org/syntax


Contoh penggunaan:

FZeosLibWrapper := TZeoslibWrapper.Create;
try
FZeoslibWrapper.LoadConfig(
ExtractFilePath(ParamStr(0)) + 'dbconn.conf');
FZeoslibWrapper.Connect;
except
MessageDlg('Database connection failed!',
mtWarning, [mbOK], 0);
end;

sql := 'insert into x(a, b, c) values(1, 2, 3)';
FZeoslibWrapper.DoModifySQL(sql);

FZeosLibWrapper.Free;

Syntax Highlighted with http://delphi-id.org/syntax



Saturday, January 20, 2007

Selamat Tahun Baru!

Saya dan keluarga mengucapkan:

Selamat Tahun Baru, 1 Muharam 1428 H



Semoga di tahun yang baru, segalanya menjadi lebih baik.