Jumat, 07 Oktober 2016

VnC Android-Linux

PC Tablet memang alat yang mobile, mudah dibawa, dan membutuhkan daya listrik yang lebih sedikit dari PC Laptop/Notebook apalagi PC Desktop. Hanya saja untuk hal pekerjaan yang profesional, tenaga PC Tablet tidak sekuat dan sehebat PC Laptop/Notebook apalagi PC Desktop. Tetapi dengan teknologi Remote Client, seperti VnC atau RDP, PC Tablet bisa mengoprasikan/mengendalikan PC yang lebih bertenaga itu dengan tetap bisa mobile.

Salah satu teknologi Remote Client yang terkenal dan sudah awam adalah VnC, yang teknologinya telah diadopsi oleh hampir seluruh Operating System PC. Tulisan ini akan mempraktekkan cara menghubungkan PC Tablet yang ber-OS Android dengan PC Desktop yang ber-OS Linux Mint.

Hal pertama yang harus dilakukan adalah menginstal VnC Viewer di PC Tablet. Di OS Android cukup mencari VnC Viewer di Google Play, bisa menginstall gratis. Hal berikutnya adalah menginstal VnC Server di PC Desktop, dalam tulisan ini OS yang digunakan adalah Linux Mint LTS 17 XFCE, dan VnC Server yang akan diinstal adalah x11vnc. Jalankan perintah-perintah berikut ini pada Terminal/Console.

sudo apt update
sudo apt install x11vnc

Sampai di sini server x11vnc telah terinstal, berikutnya kita buat file x11vnc.sh di home folder, lalu menjalankannya. Dalam tulisan ini username adalah asti, tolong disesuaikan dengan nama user masing-masing.

touch x11vnc.sh
echo "x11vnc -forever -loop -repeat -shared -noxfixes -noxdamage -dontdisconnect -rfbport 5900 -rfbauth /home/asti/.vnc/passwd" > x11vnc.sh
chmod ug+x x11vnc.sh
./x11vnc.sh&


Di tahap ini server VnC telah berjalan dan siap melakukan Remote Desktop. Tetapi server VnC belum berjalan secara otomatis ketika PC dimulai. Agar bisa start-up otomatis ketika PC dimulai, ada 3 jenis prosesnya dan pilih hanya satu saja.

Proses Pertama, start-up ketika login desktop.

Proses ini adalah yang paling mudah. Jalankan Session & Startup dari menu Settings, lalu isi pada tab Application Autostart klik tombol Add. Kemudian isikan seperti snapshot berikut. Ingat, ganti asti dengan nama user masing-masing.


Proses Kedua, start-up sebelum MDM memulai Greeter.

Edit file /etc/mdm/Init/Default, tambahkan sebelum baris yang berisi "exit 0" dengan satu baris baru, yaitu: /home/asti/x11vnc.sh

Sehingga baris-baris terakhir file /etc/mdm/Init/Default menjadi seperti berikut. Ingat, ganti asti dengan nama user masing-masing.

/home/asti/x11vnc.sh
exit 0

Proses Ketiga, start-up sesaat ketika Linux dimulai.

Proses yang ini adalah proses yang berbahaya, jangan dilakukan kecuali tahu resikonya dan tahu apa yang sedang dilakukan. Kesalahan bisa membuat Linux gagal proses startup.

Buat file baru, yaitu: /etc/init/x11vnc.conf. Dan berikut ini adalah isi dari file tersebut:

# description "Start x11vnc on system boot"

description "x11vnc"

start on runlevel [2345]
stop on runlevel [^2345]

console log

respawn
respawn limit 20 5

exec /home/asti/x11vnc.sh

Selasa, 20 September 2016

Ucapan Sintesis

Terkadang kita membutuhkan suara narator, seperti misalnya untuk mengisi presentasi dengan suara bacaan. Bisa saja dengan merekam suara sendiri, atau suara orang yang kira-kira lebih enak didengar. Tetapi yang jadi masalah, bagaimana jika ingin menarasikan bahasa asing yang mungkin kita belum baik mengucapkannya? Jika salah ucap, malahan orang yang mendengar jadi salah mengartikan.

Jika memiliki smartphone Android, bisa menggunakan Google Text-To-Speech untuk memproduksi suara narasi sintesis. Tetapi jika sedang di komputer dan hanya mempunyai sedikit aplikasi, bisa menggunakan browser yang ada dan berkunjung ke Google Translate dengan alamat translate.google.com. Google Translate menyediakan fasilitas pengucapan teks dengan berbagai bahasa yang lumayan lengkap. Yang disayangkan Google Translate tidak memberikan fasilitas untuk mendownload suara dari teks tersebut. Tetapi dengan sedikit ngoprek, kita bisa mengambilnya dengan trik yang mudah.

Baiklah, yang paling pertama kita butuhkan adalah browser Firefox, karena browser Firefox untuk PC menyediakan peralatan ngoprek yang banyak. Buka tab baru, lalu buka perangkat network dengan mengklik menu Tools -» Web Developer -» Network, atau bisa juga dengan menekan pada keyboard tombol Ctrl+Shift+Q. Lalu sebagai contoh kita akan mengambil suara 'Alhamdulillah', kunjungi alamat urlberikut:

https://translate.google.com/#ar/id/%D9%B1%D9%84%D9%92%D8%AD%D9%8E%D9%85%D9%92%D8%AF%D9%8F%20%D9%84%D9%90%D9%84%D9%91%D9%8E%D9%87%D9%90%20%D8%B1%D9%8E%D8%A8%D9%91%D9%90%20%D9%B1%D9%84%D9%92%D8%B9%D9%8E%D9%B0%D9%84%D9%8E%D9%85%D9%90%D9%8A%D9%86

Jika telah selesai loading, pada sisi kiri terdapat ikon speaker, klik saja maka akan terdengar suara. Seiring proses loading suara, maka pada daftar di Tab Network di panel Firefox Developer Tools akan muncul file suara yang diambil oleh Google Translate dari servernya. File suara tersebut memiliki format file mpeg, klik kanan, lalu akan muncul popup menu, klik Open In New Tab, maka file tersebut akan dibuka oleh Firefox di tab yang baru. Jika telah terbuka, maka file tersebut bisa disimpan dengan menekan tombol Ctrl+S, atau dari menu File -» Save Page As.

Demikianlah trik yang mudah untuk mengambil suara ucapan sintesis dari Google Translate. Tidak perlu instal aplikasi tambahan, hanya cukup menggunakan browser Mozila Firefox.


Senin, 15 Desember 2014

KA Cerdas V:1.0


Alhamdulillah..., Kumpulan Aplikasi Cerdas versi 1.0. Berikut ini beberapa aplikasinya: mengenal alfabet, membaca suku kata, membaca kata, membaca kalimat, mengenal angka, mengenal jumlah, menghitung penambahan, menghitung pengurangan. Dilengkapi dengan gambar, suara, dan musik.

Senin, 12 Agustus 2013

Linux - Adhoc Wireless - Modem Internet Sharing

Sehari-hari selalu pakai laptop Linux dengan koneksi internet via smartphone Android. Tapi ada sedikit kendala, yaitu baterai smartphone jadi cepat habis. Lalu terbesitlah ide untuk mengganti koneksi hanya dengan menggunakan modem 3G biasa, dan koneksinya di-share ke laptop istri. Tapi bagaimana caranya ya? Ngoprek-ngoprek... dan ditambah sedikit informasi dari om google, maka selesailah walau agak sedikit mumet karena awalnya tak seperti yang diinginkan, tapi dengan sedikit iseng maka kelarlah.

Modem:
GSM (ttyUSB0)
AXIS Default

Laptop saya:
Linux Mint 15 "Olivia" XFce
Acer Aspire One 725

Laptop istri:
Linux Mint 15 "Olivia" XFce
Acer Aspire One D-150

Langkah-langkah:

1. Hubungkan modem, lalu sambungkan koneksi internetnya.

2. Dari ikon applet network connection (biasanya ada di dekat jam, ikon status baterai, ikon volume audio, dll), klik kanan dan klik "Edit Connections". Lalu muncul window "Network Connections" berikut:


3. Klik tombol Add, maka akan keluar window untuk memilih settingan tipe koneksi. Pilih: Wi-Fi dan klik tombol "Create".


4. Berikutnya muncul window Edit Connection. Masukkan nama jaringan yang akan dibuat pada "Connection Name" dan "SSID", untuk memudahkan sebaiknya gunakan nama yang sama. Pilih mode Ad-hoc pada "Mode", lalu pilih alamat hardware wifi yang terdeteksi di laptop pada "Device MAC address".


5. Selanjutnya klik tab "Wi-Fi Security", masukkan jenis tipe keamanan wifi disertai dengan passwordnya. Untuk menjaga kompatibilitas dengan M$ Win jika suatu saat nanti akan ada komputer dengan OS tersebut, pilih "WPA & WPA Personal" pada pilihan "Security", dan "Password" diusahakan berjumlah 13 karakter.


6. Terakhir klik tab "IPv4 Settings", pilih "Shared to other computer" pada "Method". Lalu klik tombol "Save", maka koneksi wifi baru telah dibuatkan.


7. Setelah wifi berjalan lancar, berikutnya share koneksi internet dari modem agar bisa diakses oleh komputer lain melalui wifi tersebut. Caranya masuk ke modus terminal melalui "Terminal Emulator", atau "Xfce Terminal", atau "XTerm", atau juga dengan terminal console. Lalu jalankan perintah-perintah berikut ini:

sudo iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
sudo iptables -t mangle -A PREROUTING -j TTL --ttl-inc 1

Lalu edit file /etc/sysctl.conf menggunakan vi atau vim atau nano atau mcedit.

sudo nano /etc/sysctl.conf

Kemudian cari baris yang berisi teks berikut:

net.ipv4.ip_forward=1

Jika di depan baris terdapat karakter comment seperti "#" atau ";" maka dihapus, jika teks tidak ada maka buat baru saja di bagian awal atau akhir file.

Okeh ..., langkah-langkahnya sudah semua dilaksanakan. Supaya lebih mulus, coba restart network, jika selalu gagal restart atau tak tahu caranya ya restart saja komputernya. Jika sudah, coba hubungkan komputer lain untuk masuk kedalam jaringan wifi yang baru saja dibuat, ingat setting mode dan security agar sama. Pada proses menghubungkan komputer lain ini saya beberapa kali gagal yang ternyata tipe mode wifi dan securitynya tidak sama, dan juga di komputer tersebut networknya tidak mau sepenuhnya restart jadi ya saya restart komputernya. Alhamdulillah... berhasil juga.

Jumat, 02 November 2012

Serial Com Access

Sejak kemarin coba mencari cara untuk mengakses port serial com dari PHP. Berhasil sih, tetapi untuk membaca data dari port masih tidak sinkron, karena timingnya tidak sesuai dengan sinyal RtS dari hardware. hardware yang sedang coba di akses adalah Magnetic Card Reader/Writer. Lalu kecurigaan muncul, dan beberapa cara pemecahan dijalani, salah satunya dicoba dengan native apps.

Lalu dibuatlah program percobaan sederhana menggunakan FPC 2.6.0 dan beberapa function dari Windows API. Awalnya sama saja dengan ketika melakukan percobaan di PHP, yaitu timing untuk membaca tak bisa sinkron dengan RtS dari device. Diselidiki... dicari... dan terus mencari hingga seharian. Ternyata masalahnya harus menggunakan teknik overlapped reading/writing. Tetapi masih saja belum saja berhasil, selidiki lagi..., selidiki lagi..., selidiki terus...., dan ketemu juga. Overlapped harus menggunakan timeout, kalau tidak maka percuma saja karena ketika reading dari port tidak akan menunggu input masuk.

Hehehe... setelah setting overlapped dan timeout, JRENG.... berhasil deh. Data masuk dan bisa diolah. Di bawah ini adalah sourcenya, atau bisa download di: http://sites.google.com/site/karuniaprojects/documents/magread.pas

Berikutnya coba porting ke PHP, pastinya menggunakan library Windows dan command linux stty. Hmm... tantangan.


uses crt,windows;

const
 bfsize=4096;

var
 comhnd:handle;
 evtwr:toverlapped;
 evtrd:toverlapped;
 tmo:_commtimeouts;
 dcb:_dcb;

procedure comwrite(st:string);
var
 ln:dword;
 written:dword;
begin
 setcommmask(comhnd,ev_rxchar);
 ln:=length(st);
 written:=0;
 writefile(comhnd,st[1],ln,written,@evtwr);
 repeat until getoverlappedresult(comhnd,evtwr,written,true);
end;

function comread:string;
type
 tbuffer=array[0..bfsize-1] of char;
var
 buffer:^tbuffer;
 readed:dword;
 st:string;
begin
 purgecomm(comhnd,purge_rxclear);
 setcommmask(comhnd,ev_rxchar);
 getmem(buffer,bfsize);
 write('data buffer: ');
 writeln(sizeof(buffer^));
 readfile(comhnd,buffer^,bfsize,readed,@evtrd);
 repeat until getoverlappedresult(comhnd,evtrd,readed,true);
 write('data readed: ');
 writeln(readed);
 readln;
 setlength(st,readed);
 move(buffer^,st[1],readed);
 freemem(buffer);
 comread:=st;
end;

procedure init();
begin
 clrscr;
 evtwr.offset:=0;
 evtwr.offsetHigh:=0;
 evtwr.hevent:=createevent(nil,true,false,nil);
 if(evtwr.hevent=0) then begin
  writeln('failed create write event');
  halt;
 end;
 evtrd.offset:=0;
 evtrd.offsetHigh:=0;
 evtrd.hevent:=createevent(nil,true,false,nil);
 if(evtwr.hevent=0) then begin
  writeln('failed create read event');
  closehandle(evtwr.hevent);
  halt;
 end;
 comhnd:=createfile(
  pchar('\\.\COM2'),
  generic_read or generic_write,0,nil,open_
  existing,file_attribute_normal or file_flag_overlapped,0
 );
 setcommmask(comhnd,ev_rxchar);
 setupcomm(comhnd,bfsize,bfsize);
 purgecomm(comhnd,
  purge_txabort or purge_rxabort or purge_txclear or purge_rxclear
 );
 // timeout
 tmo.readintervaltimeout:=300;
 tmo.readtotaltimeoutmultiplier:=1000;
 tmo.readtotaltimeoutconstant:=300;
 tmo.writetotaltimeoutmultiplier:=2;
 tmo.writetotaltimeoutconstant:=0;
 setcommtimeouts(comhnd,@tmo);
 // comm state
 dcb.dcblength:=sizeof(dcb);
 getcommstate(comhnd,@dcb);
 dcb.baudrate:=9600;
 dcb.bytesize:=8;
 dcb.parity:=noparity;
 dcb.stopbits:=1;
 setcommstate(comhnd,@dcb);
 // okeh
 escapecommfunction(comhnd,setdtr);
end;

procedure done();
begin
 comwrite(#27#48);
 setcommmask(comhnd,0);
 escapecommfunction(comhnd,clrdtr);
 purgecomm(comhnd,purge_txabort or purge_rxabort or purge_txclear or purge_rxclear);
 closehandle(comhnd);
 closehandle(evtwr.hevent);
 closehandle(evtrd.hevent);
 exitcode:=0;
end;

procedure run();
begin
 //comwrite(#27#48);
 comwrite(#27#66#84#27#106);
 writeln('read track command sended, hit return!');
 readln;
 writeln('waiting input...');
 writeln(comread);
 readln;
 //comwrite(#27#66#84#27#106);
 //readln;
end;

begin
 init;
 run;
 done;
end.

Selasa, 31 Juli 2012

Simple Language Selector


Ada beberapa cara agar membuat halaman web bisa memberi layanan multi language. Diantaranya adalah dengan: Server side script (PHP, ASP, JSP, dll), Client side script (Javascript), dan CSS. Cara paling mudah adalah dengan menggunakan CSS. Berikut ini adalah contoh scriptnya:

<!DOCTYPE html>
<html>

<head>
<title>Simple Language Selector</title>
<style>
body:lang(id) *:lang(en),body:lang(en) *:lang(id) { display:none; }
</style>
</head>

<body lang="id">

<div>
<a href="#" onclick="document.body.setAttribute('lang','en'); return false;">English</a> | <a href="#" onclick="document.body.setAttribute('lang','id'); return false;">Bahasa</a>
</div>
<h3><span lang="id">Contoh</span><span lang="en">Example</span></h3>
<div><span lang="id">Ini adalah halaman contoh dalam menyediakan fasilitas multi bahasa</span><span lang="en">This is a sample page in supporting of multi-lingual</span>.</div>

</body>

</html>

Download script: http://sites.google.com/site/karuniaprojects/documents/multi-lang.html

Rabu, 11 Juli 2012

The Programmer's Code - 27 Rules to Code By


Daily Disciplines

  1. Be consistent.
  2. Fail fast and hard.
  3. Never write the same code twice.
  4. Be explicit.
  5. Code for the maintainer.
  6. Adapt and adopt.
  7. Simplify, simplify, simplify. Or I just say, simplify.
  8. Minimize scope.


Design Disciplines

  1. Beware the BSOD (Bright Shiny Object of the Day).
  2. Layers, levels, loops and bubbles.
  3. Make decisions at the lowest level possible.
  4. Favor composition over inheritance.
  5. Minimize dependencies.
  6. Names matter.
  7. Don't design the future.
  8. Functional first.
  9. Everything is an API.
  10. Minimize UI code.


Attitudes

  1. Humility happens.
  2. Never say *should*, *impossible* or *it works for me*.
  3. Everything is possible with enough time and money.
  4. Think like a user.
  5. The Missouri Mind (Show Me)


Precepts

  1. Assess often.
  2. If it's not demoed, it's not done.
  3. If it can be forgotten, it will be.
  4. Rules are best broken by those who have mastered them.