#JuliNgeblog Der dritte Tag : Ramadhan in Wien

Tulisan kali ini ditulis setelah sahur. Jam di pojok layar menunjukkan pukul tiga lewat lima menit. Pertanda sudah masuk waktu mulai puasa hingga nanti buka jam sembilan sore.

Ya, puasa di belahan bumi eropa yang sedang dalam musim panas memang sedikit lebih panjang ketimbang puasa di tanah air. Tahun ini adalah tahun ke-empat sejak saya menjejakkan kaki di tanah yang penuh cerita sejarah masa lampau ini. artinya, ini kali keempat saya menikmati puasa dengan durasi sekitar 18 jam. Enam jam lebih lama dibanding biasanya.

Setelah kemarin menulis hal yang terlalu teknis sehingga mungkin sulit dinikmati oleh khalayak. Kali ini saya akan mencoba membuat tulisan yang lebih santai. Walaupun hari ini masuk tanggal ke-28 ramadhan, Sepertinya masih belum terlalu basi untuk membahas tentang bulan yang sering dikenal sebagai “bulan puasa”. Read More

Iklan

#JuliNgeblog Der zweite Tag : Delegate Mouse Event Signal on QLabel

Selamat datang kembali!

Tulisan hari kedua sudah mulai masuk ke topik yang teknis. Persoalannya adalah ketika mau menangkap sinyal tetikus (press, release, move) untuk menggambar. Ketika menggunakan delphi dulu, prosedur untuk menangani event tetikus bisa dibuat terpisah dari komponen yang menjadi tempat terjadinya event. Misalnya, ketika ada event mouse di atas komponen Image, maka prosedur penanganannya bisa dibuat sebagai method dari objek Form. Salah satu contoh skenarionya adalah ketika terjadi sesuatu di komponen ini, maka akan disimpan perintah menggambar dan proses penggambaran di komponen yang bisa menggambar bisa didekorasi dengan penunjuk objek apa yang akan digambar tanpa mengganggu kondisi yang sudah ada (misal. rubberband).

dip

Masalah muncul ketika mau menerapkan cara serupa pada konteks Qt di python (PyQt atau PySide). Pada konteks ini, kelas yang memiliki buffer untuk menggambar ada di QImage. Agar gambar di objek ini dapat ditampilkan, Objek QImage perlu dipasang di Objek QLabel. Penanganan event mouse dilakukan di QLabel. Pendekatan untuk menangani proses semacam ini adalah dengan membuat kelas turunan QLabel atau QWidget untuk kebutuhan yang berbeda yang tentu saja merepotkan. Saya perlu satu komponen kecil yang bisa dipakai untuk beberapa konteks penggambaran yang berbeda tapi memiliki mekanisme yang sama (prosedur penanganan ada di objek lain).

Setelah membaca manual, ternyata membuat sinyal event cukup mudah:

  1. deklarasikan objek sinyal internal
  2. lempar sinyal sesuai dengan keadaan yang diinginkan (dalam hal ini, setiap terjadi mouse event)

Penjelasan lebih lanjut dapat dilihat di kode berikut :

class QMLabel(QtGui.QLabel):
	mousePressed = QtCore.Signal(QtGui.QMouseEvent)
	mouseMove = QtCore.Signal(QtGui.QMouseEvent)
	mouseReleased = QtCore.Signal(QtGui.QMouseEvent)

	def __init__(self, parent):
		super(QMLabel, self).__init__(parent)
		self.setMouseTracking(True)

	def mousePressEvent(self, event):
		self.mousePressed.emit(event)
		super(QMLabel, self).mousePressEvent(event)

	def mouseMoveEvent(self, event):
		self.mouseMove.emit(event)
		super(QMLabel, self).mouseMoveEvent(event)

	def mouseReleaseEvent(self, event):
		self.mouseReleased.emit(event)
		super(QMLabel, self).mouseReleaseEvent(event)

Di kode tersebut, saya membuat tiga event yang akan dilempar (didelegasikan). Pada setiap kode penangan event, saya lempar sinyal internal (prosedur emit).

Cara menggunakan kelas ini sama seperti ketika menggunakan komponen lain. rinciannya bisa dilihat di kode berikut :

class PickWidget(QtGui.QWidget):
	postAction = QtCore.Signal()
	def __init__(self, parent):
		super(PickWidget, self).__init__(parent)

		#offline buffer
		self.trackimage = QtGui.QImage(660, height, QtGui.QImage.Format_RGB32)

		self.tracklabel = QMLabel(self)
		self.tracklabel.setPixmap(QtGui.QPixmap.fromImage(self.trackimage))
		self.tracklabel.adjustSize()

		self.tracklabel.mousePressed.connect(self.mousepress)
		self.tracklabel.mouseReleased.connect(self.mouserelease)
		self.tracklabel.mouseMove.connect(self.mousemove)

	def mousepress(self, event):
		pass

	def mouserelease(self, event):
		pass

	def mousemove(self, event):
		pass

Sekian dulu catatan kali ini. Mudah-mudahan bermanfaat bagi saya sendiri kalau sewaktu-waktu lupa atau untuk anda kalau bertemu dengan persoalan yang sama.

Wassalam,

#JuliNgeblog Der Erste Tag

Hari ini secara tidak sengaja saya melihat twit dari omari dan petra tentang tantangan menulis blog setiap hari di bulan Juli. Setelah melihat arsip blog ini, ternyata tulisan terakhir dibuat di tahun 2014. Sudah lebih dari satu tahun blog ini tidak terbarukan. Saya pikir ini momen yang baik untuk kembali memakmurkan blog ini dengan tulisan-tulisan yang mungkin diwarnai kode program, opini dengan argumen yang masih mentah, galauan mahasiswa doktor yang sudah masuk tahun ke-empat, atau sekadar selentingan acak.

Sebagai pengantar, saya akan menceritakan kondisi saya saat ini. Saya masih tinggal di Wina, Austria. Alhamdulillah, sejak Oktober tahun lalu anak dan istri sudah ikut menemani. Beasiswa DIKTI sudah terhenti sejak awal tahun, dan karena satu dan lain hal saya tidak sempat mendaftarkan perpanjangan beasiswa untuk semester ini (Sommer). Saya akan coba mengajukan lagi perpanjangan beasiswa semester musim dingin. Kabar terbaru yang saya terima, dua paper di lab kami di sini belum berhasil masuk jalur riset dan jalur resource di ISWC 2016. Kemungkinan akan dialihkan untuk dipublikasi di jalur workshop pada acara yang sama.

Saya cukupkan dulu tulisan ini mudah-mudahan jadi awal yang baik. Sampai jumpa di tulisan berikutnya (besok)! kalau hampir terlewat, mohon diingatkan 😀

 

On Big Data and me

Beberapa tahun yang lalu, Saya mendengar pertama kali istilah “Big Data”. Kala itu istilah ini bagi saya masih terasa seperti jargon marketing, ‘buzzword’, ‘hype’, atau euforia yang membuat definisinya terdengar menarik namun maknanya sulit dipahami. Teknologi pada waktu itu juga memang sedang ramai-ramainya dengan media sosial dan mungkin awal dari revolusi penyampaian ide dari yang konyol sampai yang luar biasa (konyol, eh maksudnya) serius.

Sekarang mungkin masih banyak ekspresi yang terdengar hiperbola namun setidaknya potongan puzzle-nya sudah semakin jelas. Dalam bidang informatika, topik yang saya pelajari lebih banyak menitikberatkan pada proses algoritmik untuk menganalisis data yang pada dasarnya kompleks seperti multimedia (misal peta, gambar, dan video). Istilah ‘big data’ sendiri saya dengar pertama kali dari area yang lebih banyak penekanan pada data dan bagaimana penanganannya. Sekarang Saya cenderung memahami istilah big data sebagai sebuah konvergensi teknologi.

Read More