Membuat Daemon di Raspberry Pi

Buka terminal lalu ketik:

hciconfig
hcitool scan

Nama perangkat biasanya bernama: hci0
Misalkan hasilnya adalah:

66:12:13:EE:D1:76 Bluetooth Printer

Test printer dengan perintah:

sudo rfcomm bind /dev/rfcomm0 66:12:13:EE:D1:76 1
echo “Test” > /dev/rfcomm0

Jika printer berhasil mencetak maka koneksi sudah berhasil

Selanjutnya tambahkan file untuk daemon service

sudo leafpad /etc/systemd/system/rfcomm.service

Ketik kode berikut dan simpan:

[Unit]
Description=RFCOMM service
After=bluetooth.service
Requires=bluetooth.service

[Service]
ExecStart=/usr/bin/rfcomm bind hci0 66:12:13:EE:D1:76 1

[Install]
WantedBy=multi-user.target

Ganti nama hci0 dengan nama hasil hciconfig dan ganti 66:12:13:EE:D1:76 dengan hasil hcitool scan

Aktifkan daemon, ubah preferensi printer dan booting

sudo systemctl enable rfcomm
sudo systemctl start rfcomm
Sudo reboot

Menambahkan autorun pada linux raspberry

buka direktori ~/config/autostart, buat jika belum ada dengan mkdir

buat file berektensi .desktop, misalnya chrome.desktop

lalu isikan script berikut

[Desktop Entry]
Type=Application
Name=Clock
[Desktop Entry]
Type=Application
Name=Clock
Exec=chromium-browser --kiosk --app=http://localhost/

Chrome akan berjalan setelah GUI terbuka, fullscreen tanpa notifikasi dengan sempurna. Namun jika ingin autorun saat booting, maka gunakan cara berikut:

sudo leafpad /etc/rc.local

sebelum bagian  exit 0 tambahkan kode berikut:

python /home/pi/blink.py &

Penting: Ampersand (&) dibutuhkan agar proses autorun tidak memblokir proses yang lain, dangan kata lain proses yang lain juga akan terbuka walaupun proses autorun ini belum sepenuhnya selesai. Jika tanpa tanda ampersand, maka proses autorun ini akan ditunggu hingga selesai baru proses lain dibuka. Akan menjadi masalah jika pada proses ini loop, maka tidak akan pernah bisa login.

Untuk menghentikan proses loop pada autorun, gunakan:

sudo ps -ax | grep python
sudo kill <PID>

ganti <PID> dengan nomor proses. Hati hati jangan keliru, komputer bisa hang!

sumber: https://learn.sparkfun.com/tutorials/how-to-run-a-raspberry-pi-program-on-startup/all

Autoplay Video pada HTML

bagian html, isikan:

<html>
<head>Video playlist</head>
<body>

<video autoplay id="myVideo" width="480" height="326" style="object-fit: fill;">
Browser tidak mendukung video
</video>

<script src='video/list.php'></script>

<script type="text/javascript">
var videoSource = new Array();
for(var x=0; x<=files.length; x++){
    videoSource[x]='http://localhost/antrian/video/'+files[x]+'.mp4';
}

var videoCount = videoSource.length;

document.getElementById("myVideo").setAttribute("src",videoSource[0]);

function videoPlay(videoNum)
{
    document.getElementById("myVideo").setAttribute("src",videoSource[videoNum]);
    document.getElementById("myVideo").load();
    document.getElementById("myVideo").play();
}

document.getElementById('myVideo').addEventListener('ended',myHandler,false);

var i=0;
function myHandler() {
    i++;
    if(i == (videoCount-1)){
        i = 0;
        videoPlay(i);
    }else{
        videoPlay(i);
    }
}

</body>
</html>

lalu buat file list.php pada direktory video, dengan mengisikan script berikut:

var files = <?php $out = array();
foreach (glob('*.mp4') as $filename) {
$p = pathinfo($filename);
$out[] = $p['filename'];
}
echo json_encode($out); ?>;

selanjutnya taruh file video dengan format mp4 ke direktori video

Mengaktifkan modul mod_rewrite pada Apache2

Pasang symbolic link di /etc/apache2/mods-enabled untuk file rewrite.load
cd /etc/apache2/mods-enabled
sudo ln -s ../mods-available/rewrite.load
atau cara cepat dengan aktifkan melalui
sudo a2enmod rewrite
buat file konfigurasi rewrite
sudo leafpad /etc/apache2/conf-available/rewrite.conf
isikan dengan
<IfModule mod_rewrite.c>
<Directory /var/www/html>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
</IfModule>
buat symbolic link di /etc/apache2/conf-enabled
cd /etc/apache2/conf-enabled
sudo ln -s ../conf-available/rewrite.conf
jalankan ulang atau set baca ulang konfigurasi apache2
sudo service apache2 reload

buat file .htaccess

sudo nano /var/www/html/.htaccess

isikan contoh rule

<IfModule mod_rewrite.c>
RewriteEngine on

RewriteRule ^beranda$ main.php?page=beranda [L]

ErrorDocument 404 http://localhost/error-404.html
ErrorDocument 403 http://localhost/error-403.html

Options All -Indexes
</IfModule>

Dari rule di atas, setiap mengarah ke http://localhost/beranda maka akan membuka http://localhost/main.php?page=beranda dan jika ada error, maka akan mengarah ke halaman error yang ditunjuk

^beranda$ adalah kalimat yang akan dicocokan.

  • ^ menyatakan awal dari URL, dimana localhost/ diabaikan.
  • $ menyatakan akhir dari URL
  • beranda string yang dicocokkan

main.php?page=beranda adalah tujuan dari file sesungguhnya.

[NC] ignores capitalization dan [L] menyatakan lowercase

set permision dari .htaccess ke mode read only

sudo chmod 644 /var/www/html/.htaccess

Set agar mata bor CNC berada pada titik Nol dengan ketinggian tepat diatas PCB

Brikut cara menset agar mata bor CNC berada pada titik Nol. Jika menggunakan software Mach3 maka cukup aktifkan CNC lalu pindah mata bor ke tempat yang diinginkan sebagai titik nol. Memindahkannya cukup menggunakan tombol panah kiri/kanan/atas/bawah pada keyboard. Tidak perlu mengiraukan ketinggiannya. Cukup sumbu X dan Y nya saja.

Ketinggian diatur dengan tombol PageUp dan PageDown. Pengturan harus hati hati agar tidak terlalu turun sehingga bor patah. Cukup di-tap (tekan sedikit demisedikit saja) jangan ditekan terus menerus. Jika sudah hampir menabrak media yang akan di-bor, maka hentikan pada kurang lebih ketinggian 10mm.

Pemasangan probe cukup mudah, namun butuh pengecekan dan mungkin pengaturan. Selanjutnya pasang probe yang biasanya dalan bentuk konektor jepit buaya. Jika tidak tersedia, bisa dibuat sendiri dengan munghubungkan panel probe-nya. Untuk meyakinkan bahwa probe berfungsi, maka buka bagian Diagnostics (Alt+F7) lalu tempelkan probe pada PCB. Jika pada pilihan Digitize berubah warna, maka probe telah berfungsi dengan baik. Namun jika belum berubah warna, coba cek bagian Config dan centang Probe dan Active Low.

Set semua menjadi titik Nol, biasanya cukup menekan tombol REFF ALL HOME, namun kadangkala ada sumbu X, Y, Z yang tidah mau berubah jadi 0. Maka tekan saja tombol tersebut. Selanjutnya buka file findzero.nc ini untuk memindah dan set ketinggian tepat diatas PCB.

G0 Z0  (Pindah ke posisi 0,0,0)
G31 Z-10 F100 (Cari probe dengan arah Z negatif atau turun 10mm dengan kecepatan 100mm/det)
G92 Z0 (Jika probe telah ditemukan, maka set Z=0)
G0 Z2 (Pindah ke posisi Z=2 atau naik 2mm)
G31 Z-1 F50 (Cari probe lagi dengan kecepatan 50 mm/det)
G92 Z0 (Set ulang ketinggian menjadi 0)
G0 Z1 (Pindah ke posisi naik 1mm)
M1 (Pause atau berhenti sejenak)

Selanjutnya tinggal lepas Probe dan CNC siap untuk digunakan.

Driver PL2303HX untuk Windows 10 64bit

Pernah beli alat USB to Serial Converter murah, dengan IC PL2303. Saat dipasang di komputer, ternyata butuh driver. Alhasil menemukan driver di situs produsen IC namun ada catatan :

Windows 8/8.1/10 are NOT supported in PL-2303HXA and PL-2303X EOL chip versions.

Untungnya ada situs yang baik hati (lupa dimana) memberikan file hasil modifikasi driver Windows 7 agar bisa dipasang di Windows 10.

Link: http://latiful.hayat.web.id/file/PL2303HX-edit.zip

Semoga bisa bermanfaat

Enkripsi: Rfc2898DeriveBytes di C# dan hash_pbkdf2 di php

C#

    public string DecryptText(string input, string password)
    {
        String[] tempAry = input.Split('-');

        byte[] bytesToBeDecrypted = new byte[tempAry.Length];
        for (int i = 0; i < tempAry.Length; i++)
            bytesToBeDecrypted[i] = Convert.ToByte(tempAry[i], 16);

        byte[] passwordBytes = Encoding.UTF8.GetBytes(password);
        passwordBytes = SHA256.Create().ComputeHash(passwordBytes);

        byte[] bytesDecrypted = Decrypt(bytesToBeDecrypted, passwordBytes);

        return Encoding.UTF8.GetString(bytesDecrypted);

    }
    public byte[] Decrypt(byte[] bytesToBeDecrypted, byte[] passwordBytes)
    {
        byte[] decryptedBytes = null;
        byte[] saltBytes = new byte[] { 5, 7, 3, 5, 2, 6, 7, 8 };
        using (MemoryStream ms = new MemoryStream())
        {
            using (RijndaelManaged AES = new RijndaelManaged())
            {
                AES.KeySize = 256;
                AES.BlockSize = 128;
                var key = new Rfc2898DeriveBytes(passwordBytes, saltBytes, 1000);
                AES.Key = key.GetBytes(AES.KeySize / 8);
                AES.IV = key.GetBytes(AES.BlockSize / 8);
                AES.Mode = CipherMode.CBC;
                using (var cs = new CryptoStream(ms, AES.CreateDecryptor(), 
                                                 CryptoStreamMode.Write))
                {
                    cs.Write(bytesToBeDecrypted, 0, bytesToBeDecrypted.Length);
                    cs.Close();
                }
                decryptedBytes = ms.ToArray();
            }
        }
        return decryptedBytes;
    }

PHP

function DecryptText ($input, $password){
    $tempAry = str_replace("-", "", $input);

    $bytesToBeDecryptedbin = hex2bin($tempAry); 
    $bytesToBeDecrypted = unpack('C*', $bytesToBeDecryptedbin);
    $bytesToBeDecryptedbinstring = "";
    for($i=0;$i<count($bytesToBeDecrypted);$i++){
        $bytesToBeDecryptedbinstring=$bytesToBeDecryptedbinstring.chr($bytesToBeDecrypted[$i+1]);
    }


    $passwordhash = hash('sha256', $password); 
    $passwordbin = hex2bin($passwordhash); 
    $passwordBytes = unpack('C*', $passwordbin);
    $passwordBytesstring = "";
    for($i=0;$i<count($passwordBytes);$i++){
        $passwordBytesstring=$passwordBytesstring.chr($passwordBytes[$i+1]);
    }

    $saltBytes = array(5,7,3,5,2,6,7,8);
    $saltBytesstring = "";
    for($i=0;$i<count($saltBytes);$i++){
        $saltBytesstring=$saltBytesstring.chr($saltBytes[$i]);
    }
    
    $keySize = 256; $blockSize = 128;

    $key = hash_pbkdf2("sha1", $passwordBytesstring, $saltBytesstring, 1000, 48, true); 
    $aeskey = (  substr($key,0,$keySize/8) );
    $aesiv =  (  substr($key,$keySize/8,$blockSize/8) );

    $decrypted = mcrypt_decrypt
          (
              MCRYPT_RIJNDAEL_128,
              $aeskey,
              $bytesToBeDecryptedbinstring,
              MCRYPT_MODE_CBC,
              $aesiv
           );        

    $result = "";
    for($i=0;$i<strlen($decrypted);$i++){
        if($decrypted[$i]==chr(7)) break;
        $result = $result . $decrypted[$i];
    }
           
    $decryptedarr = unpack('C*', $result);
    return $result;
}

sumber:

http://stackoverflow.com/questions/43011612/porting-c-sharp-rfc2898derivebytes-in-php-using-hash-pbkdf2

 

Menghilangkan pop-up di semarpen

Saat browsing menggunakan mifi semarpen, rasanya agak kesal karena setiap membuka alamat web disuguhi iklan pop up. Jadi harus baca dulu baru halaman web yang tertuju dibuka.

Setelah install pop-up blocker dan no script (add on firefox), pop up ilkan tidk muncul lagi. Eh, ternyata yang muncul adalah halaman kosong. Misalnya buka http://latiful.hayat.web.id maka munculnya:

image-1

Jika dilihat page source (Ctrl + U) ternyata ada injeksi script

<script>
function go(w,u){xc=1;w.frames[0].location=u;}
var flag_lte=1;
var xu='http://192.168.185.20:8080/CustomerInfo/',lxu=xu+'Customer';
var xc=-1,d=document,w=window,ip='100.119.142.98',vid='348',md='628818533749',u=location.href,hs=location.hostname,lci='&lac=%l%&ci=%c%';
gd = d.createElement("script");gd.src=xu+"m.js";d.documentElement.firstChild.appendChild(gd);
var scr2=d.createElement("script");scr2.src=xu+"y.js";d.documentElement.firstChild.appendChild(scr2);
var scr=d.createElement("script");scr.src=xu+"x.js";d.documentElement.firstChild.appendChild(scr);
var s='http://192.168.185.20:8080/CustomerInfo/Customer?mdn='+md+'&user-agent=Samsung&url='+encodeURIComponent("http://latiful.hayat.web.id/")+'&lac=3101&ci=80686111';
var mp='<meta id="xvw" name="viewport" content="width=device-width,user-scalable=';
var httpRequest;
if (hs.indexOf("www.")==0)mp=mp+'yes">';else mp=mp+'no,initial-scale=1">';d.writeln(mp);
// var o=d.createElement("script");o.src=xu+"b.js";d.documentElement.firstChild.appendChild(o);
d.writeln('<meta charset="utf-8" />');
</script>
<body style="margin:0;height:100%;">
</body>

Browsing kesana kemari akhirnya menemukan Link dari situs favorit saat menemukan masalah (stackoverflow.com) ternyata ada solusi untuk menghilangkan iframe injeksi dari semarpen dengan mengganti konfigurasi lewat perintah about:config yang dituliskan di address bar. Ganti:

network.http.accept.default: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8

menjadi

network.http.accept.default: */*

Jika menggunakan google chrome:

Install header hacker dan buka setting. Isikan

title:NO IFRAME
Append/replace: replace with
String: */*
Match string: .*  lalu klik add.

Lalu buka pilihan permanent header (di bagian kiri), isikan

Domain: .* 
Header swicth: NO IFRAME

oleh Latiful Hayat

Sumber: http://www.nicois.me/2015/05/ada-apa-dengan-smartfren-dan-iframe.html

Belajar Bahasa Arab 03: laa, lam, maa, lan, laisa

LAM dan LAA ( لم لا )

hanya dipakai untuk Kata Kerja Sekarang, sedangkan ( ما ) maa biasanya dipakai untuk Kata Kerja Lampau

Secara kaidah grammar, LAA titerapkan yang huruf terakhirnya di dhommah. Misal:

Saya tidak faham : انا لا أفهم- ana laa afhamu

sedangkan sesudah LAM, huruf terakhir di sukun. Sehingga penulisannya:

Saya tidak faham: انا لم أفهم - ana lam afham

(menurut sebagian orang, LAM itu Tidak nya bersifat MUTLAK)

 

MAA

dipakai untuk Kata Kerja Lampau.

Saya sudah paham : فهمتُ - fahimtu
Saya tidak sudah paham : ما فهمتُ - maa fahimtu

Catatan bahasa Indonesia “Saya tidak sudah paham” agak membingungkan mungkin, padanan bahasa Inggrisnya: I have not understood.

 

LAN

adalah meniadakan peristiwa/pekerjaan akan datang

Tidak akan berhenti: لَنْ نَبْرَح - LAN NABROHA

LAISA (M) atau LAISAT (F)

digunakan untuk kalimat non verbal (bukan kata kerja):

Ceritanya tidak menarik: ليست القصة ممتعة - laisat al-kessatu momte'a

LAISA untuk kata keterangan orang ditambahi TA/NA, bisa menjadi LASTU (saya tidak), LASTA (kamu tidak – M), LASTI (kamu tidak – F), LASNA (kami tidak)

 

Sumber:

  • http://arabquran.blogspot.co.id/2007/10/topik-47-latihan-surat-al-ikhlas-ayat-3.html
  • http://www.everyday-arabic.com/2013/12/negation-in-arabic-language.html
  • https://nahwusharaf.wordpress.com/2012/04/13/fiil-mudhari-manshub-sebab-amil-nawashib-lan-kay-an-%D9%84%D9%86-%D9%83%D9%8A-%D8%A3%D9%86-alfiyah-bait-677-678/