Php7.1, anda akan disiplin menggunakan Type Variable!

jika PHP kita kenal sangat ramah dalam aturan penggunaan type data, maka anda mungkin akan sedikit merasa berbeda pada PHP7.1. ini juga terjadi pada salah satu code saya.

penjumlahan atau aritmatika lainnya, sangat beresiko terjadi kesalahan. untuk versi < PHP7.1, variable non number akan dianggap 0. namun berbeda pada PHP7.1, penjumlahan variable non number akan menghasilkan error. progress yang sangat waw sekali!

bayangkan saja, banyak sekali programmer PHP yang tidak disiplin untuk mengecek isi dari variable-nya ditambah lagi PHP bertipe varian(dalam sudut pandang penggunaan). Semua variable seakan dianggap sama. Yang membedakan adalah value-nya. Alhasil, ketika code-code ini diproduksi, maka sangat rentan menjadi error. Sebagai contoh, DomPDF. Library yang sangat banyak penggunanya inipun kena imbasnya. betapa mereka tidak disiplinnya mengecek value(karena memang hanya value-nya saja yg membedakan mana yang number mana yang bukan). Daaaan…, akhirnya malam saya menjadi malam yang panjang. 😀 LOL!

Solusi untuk yang bertemu dengan error “Non Number Encountered” di PHP adalah dengan 2 pilihan:

  1. ignore error dengan @. (unrecomended)
  2. lakukan casting! (pastikan variable adalah int atau float atau lainnya)
  3. tentukan sejak awal tipe datanya(recomended). 🙂 seperti programmer2 bahasa lainnya. (like C/C++ and Java) 😀
  4. untuk error yg diproduksi oleh Dompdf, update ke versi ^0.8.0! (begitupun pada library lainnya, coba cek repositorynya, apa sudah support php7.1)/
Advertisements

Algoritma Anti Bouncing

Interupt Rising

  1. set interupt rising.
  2. cek interupt apakah terjadi dalam rentang waktu cepat(ex. 20), jika iya, abaikan(close).
  3. increment event-counter.
  4. thread pengumpul, cek event-counter rising? jika tidak abaikan(close).
  5. delay beberapa saat(ex 20).
  6. cek apakah pin benar2 up? jika tidak abaikan(close).
  7. increment counter!.

 

berlaku juga untuk falling juga. ini digunakan apabila rangkaian sangat tidak stabil dengan frekuensi counter rendah. 🙂

Multithreading di C

assalamu’alaikum semuanya.

saya mau berbagi tentang multithreading di  bahasa C.

pertama include dahulu library-nya. saya menggunakan pthread.h.

selanjutnya beberapa hal yg mesti diperhatikan:

  1. fungsi pthread_create
  2. fungsi pthread_cancel

baru itu yg saya pelajari. hahaha…

 

sesi curhat:

sekarang saya sangat merasa nyaman dengan C/C++ tapi masih sangat bergantung dengan IDE. tapi, bisikan seorang kawan dengan kemudahan yg ditawarkan oleh node.js, saya kok jadi pengen belajar ya? hehe…

 

Post from Qt5

#include <QCoreApplication>
#include <QDebug>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QUrl>
#include <QUrlQuery>
void sendRequest();
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    sendRequest();
    return 0;// a.exec();
}
void sendRequest(){
   QByteArray data;
    QUrlQuery params;
    params.addQueryItem("param1", "value1");
    params.addQueryItem("param2", "value2");
    params.addQueryItem("param3", "value3");
    data.append(params.toString());
    qDebug()<<data;
    QEventLoop eventLoop;
    QNetworkAccessManager manager;
    QObject::connect(&manager, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit()));
    QNetworkRequest request(QUrl("http://mars.dev/test"));
    request.setHeader(QNetworkRequest::ContentTypeHeader,QStringLiteral("application/x-www-form-urlencoded"));
    QNetworkReply *reply = manager.post(request,data);
    qDebug()<<"tunggu";
    eventLoop.exec(); // tunggu hingga request finish
    if (reply->error() == QNetworkReply::NoError) {
        //success
        qDebug() << "Success" <<reply->readAll();
        delete reply;
    }
    else {
        //failure
        qDebug() << "Failure" <<reply->errorString();
        delete reply;
    }
    qDebug()<<"selesai";
}

 

Prosedure MySQL pertamaku.

fasilitas ini sebenernya fasilitas kuno yang tersedia di mysql. cuman kali ini aja kayaknya butuh prosedur untuk menginput datanya. so, belajar dulu. dan alhamdulillah berhasil sesuai dengan yang diinginkan. 🙂

 

ini dia prosedure buatan saya:

DELIMITER $$

DROP PROCEDURE IF EXISTS `save_state`$$
CREATE
/*[DEFINER = { user | CURRENT_USER }]*/
PROCEDURE `kang_aep`.`save_state`(id_line VARCHAR(10),
fg_qty INT,
ng_qty INT,
er_qty INT)
/*LANGUAGE SQL
| [NOT] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
| COMMENT ‘string’*/
BEGIN
DECLARE last_id INT(11) DEFAULT 0;
DECLARE last_fg INT(11) DEFAULT 0;
DECLARE last_ng INT(11) DEFAULT 0;
DECLARE last_er INT(11) DEFAULT 0;
DECLARE newNG BOOL DEFAULT FALSE;
SELECT MAX(t_counting_id)
INTO last_id
FROM t_counting
WHERE t_counting.`line_id` = id_line;

SELECT t_counting_id,
COALESCE( fg_quantity,0),
COALESCE(ng_quantity,0),
COALESCE(e_quantity,0)
INTO last_id, last_fg, last_ng, last_er
FROM t_counting
WHERE t_counting.`line_id` = id_line
AND t_counting_id = last_id;

WHILE last_fg < fg_qty DO
SET last_fg := last_fg + 1;
INSERT INTO t_counting(line_id,ng_quantity, fg_quantity,e_quantity, TYPE)
VALUE(id_line, last_ng, last_fg, last_er, “FG”);
END WHILE;

WHILE last_ng < ng_qty DO
SET last_ng := last_ng + 1;
INSERT INTO t_counting(line_id,ng_quantity, fg_quantity,e_quantity, TYPE)
VALUE(id_line, last_ng, last_fg, last_er, “NG”);
SET newNG := TRUE;
END WHILE;

WHILE last_er < er_qty DO
SET last_er := last_er + 1;
INSERT INTO t_counting(line_id,ng_quantity, fg_quantity,e_quantity, TYPE)
VALUE(id_line, last_ng, last_fg, last_er, “ER”);
END WHILE;
IF newNG THEN
INSERT INTO `t_message`(`number`, `message`)
(SELECT `telp`, CONCAT(“Telah terdeteksi metal di line (“, `linename` ,”), plan (“, `planname`, “) sejumlah “, `ng_quantity`, “pcs dengan klaim error sejumlah “, `e_quantity`, “pcs.”) message
FROM `v_pre_sms` WHERE `v_pre_sms`.`line_id` = id_line);
INSERT INTO outbox(`DestinationNumber`, `TextDecoded`)
(SELECT `telp`, CONCAT(“Telah terdeteksi metal di line (“, `linename` ,”), plan (“, `planname`, “) sejumlah “, `ng_quantity`, “pcs dengan klaim error sejumlah “, `e_quantity`, “pcs.”) message
FROM `v_pre_sms` WHERE `v_pre_sms`.`line_id` = id_line);
END IF;
END$$

DELIMITER ;

alhamdulillah berjalan dengan baik sekali. 🙂

Tutorial Integrasi C++/Qt5 dengan QML.

pagi ini saya bermain-main dengan QML untuk menampilkan data. mungkin sebagian belum familiar dengan QML. yang tidak tahu, boleh cari info di google. gak apa-apa. bukan ilmu agama yang mengharuskan bersanad. cayoo…

QML itu semacam css3. cuman gak pake div-div-an.  kalau mau belajar, sedikit saja. saya kira yang suka ngoprek tampilan akan jatuh cinta.

kali ini saya hanya mau membahas bagaimana untuk mengintegraskan antara QML dan C++. mainset utamanya adalah, C++ menngontrol QML, QML memberikan signal pada C++. jadi bukan signal-slots secara penuh layaknya antar object di C++.

tahap persiapan. buat project untuk membuat qwidget. buat file resource/qrc. lalu buat file qml baru, masukkan ke qrc.

tahapan selanjutnya:

QQuickView * qml = new QQuickView();

QWidget * wid = QWidget::createWindowContainer(qml, this);

qml->setSource(QUrl(“qrc/namaqmlnya.qml”));

QObject * rootQml = qml->rootObject();

QVBoxLayout *ly = new QVBoxLayout(this);

ly->addWidget(wid);

this->setLayout(ly);

nah, kita sudah punya objek qml, wid, dan rootQml. rootQml inilah yang nantinya akans sering kita pakai. cayoo…

saya ngoding dulu ya. saya tinggal dulu. nanti semoga sempat dan “kenceng” saya update lagi. 😀