The Way Of Life
Google

Tuesday, February 10, 2015

Power in the economy of code

 
Salah satu sub bab dalam buku jQuery in Action terbitan Manning, karya Bear Bibeault dan Yehuda Katz, mempunyai sub bab Power in the economy of code. Dimana framework jQuery menjadikan kita menulis kode jauh lebih irit / ekonomis.
Contoh di dalam buku tersebut yaitu, dari kode yang panjang seperti di bawah ini;

var checkedValue;
var elements = document.getElementsByTagName('input');
  for (var n = 0; n < elements.length; n++) {
   if (elements[n].type == 'radio' &&
       elements[n].name == 'someRadioGroup' &&
       elements[n].checked) {
     checkedValue = elements[n].value;
   }  
  }
menjadi kode jQuery yang singkat seperti di bawah ini:
var checkedValue = $('[name="someRadioGroup"]:checked').val();
Hal ini juga terjadi ketika saya dan rekan mulai belajar salah satu framework javascript yaitu ExtJS dari Sencha. ExtJS dibuat sebagai framework yang mempunyai banyak sekali object sehingga mirip sekali dengan aplikasi desktop. Dalam rangka proyek konversi dari aplikasi desktop ke web, otomatis kami mencari persamaan object di ExtJS. Salah satu object tersebut adalah form searching / pencarian. Setelah cukup lama browsing akhirnya kami menemukan caranya, yaitu di web mbahsomo. Awalnya kami tidak percaya dengan kode yang ditampilkan di web tersebut, form searching merupakan form yang cukup "kompleks" di aplikasi web, tapi mbahsomo hanya menampilkan kode yang kami rasa sangat singkat. Setelah kami pelajari ternyata benar, form tersebut bisa ditampilkan hanya dengan kode yang minimalis dan ekonomis, berkat framework ExtJS.
Sama juga seperti framework yang lain, fungsinya adalah mempersingkat pekerjaan, dan satu lagi yaitu standarisasi. Jika kita bekerja dalam team harus ada standarisasi, sehingga selain kode menjadi rapi juga gampang dipahami orang team yang lain.

Berikut tampilan form searching a la mbahsomo:


dan dibawah ini adalah form searching yang kami kembangkan dari form mbahsomo


related links:
Combo Multi Column with Grid
Framework Or Not Framework

Labels: , , ,

Sunday, February 08, 2015

Visual Basic with Ms Excel as Database

Belum lama ini, saya seorang rekan meminta bantuan dibuatkan sebuah program kecil, yaitu progam untuk membuat cetakan invoice dari file excel. Awalnya saya ingin membuatkan program kecil yang paten menggunakan Visual Basic dan MySQL sebagai database. Tetapi karena keterbatasan waktu saya memutuskan untuk memakai VBA, agar embedded langsung dengan file excel. Tiba - tiba punya ide untuk membuat program dari Visual Basic tetapi menggunakan file Excel ( .xls atau .xlsx ) sebagai database. Setelah browsing kesana kemari akhirnya menemukan caranya, berikut dasar - dasar pemrograman Visual Basic dengan Microsoft Excel.

Pertama yaitu membuat Connection String, yaitu menggunakan provider Jet OLEDB 4.0, pada Visual Basic - References ,saya menggunakan Microsoft ActiveX Data Object 2.6, berikut syntax connection string.


  
    Set Conn = New ADODB.Connection
    With Conn 
        .Provider = "Microsoft.Jet.OLEDB.4.0"
        .ConnectionString = "Data Source=" & App.Path &; _
         "\file.xls;Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1;"""
        .CursorLocation = adUseClient
        .Open
    End With 
Option HDR = Yes, artinya pada kolom pertama pada worsheet yang dipilih akan menjadi nama field / header.Kemudian Option IMEX=1 yaitu menerima data dari kolom excel dengan berbagai tipe data. Perlu diingat bahwa column di Excel berbeda dengan field pada table di file database dimana 1 field hanya mempunyai 1 tipe data, sedangkan di file excel bisa banyak tipe.
Kemudian untuk penggunakan Query / SQL standart, hanya perlu diingat pengganti table pada Excel adalah worksheet, contoh syntax penggunaan SQL ada di bawah ini :


 
    strquery = "SELECT * FROM [Sheet1$B1:B1124] WHERE COMPONENTS LIKE '%PANEL%'"
    oRS.Open strquery, oConn, adOpenDynamic, adLockReadOnly
    If Not oRS.BOF Then
        Do While Not oRS.EOF
        
        If Trim(oRS.Fields(0).Value) <> "" Then
            List2.AddItem vbTab & oRS.Fields(0).Value
        End If
        
        oRS.MoveNext
        Loop
    End If
    oRS.Close

Pada syntax SQL di atas, table digantikan dengan range baris data yaitu dari baris B1 s/d B1124, kemudian field COMPONENTS adalah salah satu kolom pada file Excel yang akan dicari datanya. Jika anda mendapatkan Error "No value given for one or more required parameters", maka kemungkinan adalah kolom / field yang anda cari setelah syntax WHERE, itu tidak termasuk dalam baris data setelah syntax FROM, jadi disini anda perlu lebih teliti.
Kemudian untuk membuat query dengan banyak nilai kosong / null, bisa menggunakan sintak seperti dibawah ini:
 
    sSQL = " SELECT [CODE], " _
           " IIF([COMPONENTS] is null, ' ', [COMPONENTS]) AS [COMPONENTS], " _
           " FROM [Sheet1$A1:L1124] " _
           " WHERE CODE = '" & Code_Components & "'"
    oRs.Open sSQL, oConn, adOpenStatic
    If Not oRs.BOF Then
        'statement
    End If
    oRs.close
Awalnya saya ingin membuat file Excel tersebut untuk  menyimpan data Invoice, tapi hal itu membuat file Excel menjadi bengkak ukuran-nya. Akhirnya saya memutuskan program ini hanya sebagai mesin pencetak invoice saja, sesuai dengan permintaan teman saya, jadi tidak menyimpan hasil transaksi invoice. Semoga Bermanfaat bagi rekan - rekan.

tools :
Microsoft Visual Basic 6.0
Microsoft Excel 2007

Labels: , , , ,

Thursday, February 05, 2015

Soto Sokaraja di Jakarta

Soto Sokaraja, Lanting dan Bumbu Kacang

Mendoan

Sebagai warga negara karesidenan Banyumas dan sekitarnya, tentu kangen akan makanan khas kampung halaman. Salah satunya Soto Sokaraja, kadang sering juga disebut Sroto. Mencari Soto Sokaraja di Jakarta bukan hal mudah. Tentunya mencari yang enak dan rasanya sama seperti di kampung halaman. Setelah berbagai tempat dijajaki dan belum juga menemukan Soto Sokaraja dengan rasa yang super akhirnya saya menemukan di sebuah jalan kecil di Jalan Pondok Kelapa Raya, tepatnya di  Jalan Pondok Kelapa Barat 6, Jakarta Timur. Yaitu Warung Soto "Inyong" Ibu Mamiek.





Meskipun warungnya kecil tapi rasa soto-nya rasanya luar biasa, ditambah ada aksesoris lanting dan mendoan. Jauh dengan penjual Soto Sokaraja dengan tempat yang megah dan besar dan tentu terkenal tapi rasanya jauh. Pernah saya makan di tempat yang cukup terkenal sebagai penjual Soto Sokaraja di Jakarta, tapi rasanya masih jauh dari harapan. Saya tidak etis menyebut lokasinya, lebih baik saya memberitahu yang enak saja. Sebenarnya saya menemukan warung ini pun tidak sengaja, ketika sedang mencari warteg, saya lihat ada jual Sroto Sokaraja, akhirnya saya mampir. Tapi memang rasa tidak bohong, ketika saya berbincang dengan pemilik, memang sudah banyak menyuplai langganan kelas atas dan perkantoran, khususnya untuk rasa ayam. Jika saya paling suka rasa sapi. Karena Soto Sokaraja paling khas adalah rasa sapinya dan tentu saja bumbu kacang. Ini merupakan varian soto paling khas dari soto yang ada di Indonesia  yaitu bumbu kacangnya. Semoga membantu rekan rekan dengan plat "R" untuk mengobati rasa rindu makanan khas di Ibukota.
Foto di atas adalah sepasang suami istri yang sudah berumur, yang hampir setiap hari makan siang di Soto Sokaraja Ibu Mamiek, dan mereka selalu makan soto di dalam mobil Toyota Kijang lawas mereka. Saya pernah hari Sabtu dan Minggu siang berturut turut mendapati mereka sedang makan siang di Warung Soto Ibu Mamiek.
Review ini saya buat atas nama pribadi, silakan mencoba dan  bandingkan, jika ada soto sokaraja yang lebih enak di Jakarta, beritahu saya :), pasti akan saya coba. Bandingkanlah dengan rasa Soto asli Sokaraja sebagai parameter, saya mempunyai langganan soto di Sokaraja, yaitu Soto Sokaraja Lama "Pak Mawardi" seberang Getuk Goreng Asli "Haji Tohirin" Sokaraja no 6, salah satu Soto Sokaraja asli dengan rasa orisinil. Saya pernah membaca tentang bagaimana agen FBI dilatih untuk mengecek uang palsu, yaitu dengan memahami sebaik - baiknya uang asli, sehingga ketika mendapatkan uang palsu maka agen FBI akan segera tahu. Sama seperti mengecek rasa soto Sokaraja, anda harus paham bagaimana rasa asli soto Sokaraja, sehingga anda tahu soto Sokaraja "palsu" :). Semoga membantu.



Tuesday, February 03, 2015

Hidup tanpa Ponsel


Belum lama ini saya membaca artikel tentang Sutradara Batman ( The Dark Knight Rises ) dan Interstellar yaitu Christoper Nolan yang hidup tanpa ponsel / telepon genggam. Juga di Tanah Air ada komposer ternama Erwin Gutawa yang juga tidak punya ponsel. Mungkin sedikit "naik level", seperti empunya JavaMusikindo yaitu Andrie Subono yang hanya punya HP Nokia jadul. Ada juga gembong narkoba di luar negeri yang menggunakan Nokia 8210 karena sudah dilacak dan batere-nya tahan berhari hari.

Semua hal di atas, bisa saja kita lakukan jika memang kondisi dan lingkungan kita memungkinkan.
Bagi saya mempunyai sebuah smartphone cukup membantu hidup saya. Saya list beberapa hal dari kegiatan saya yang bisa disupport oleh smartphone.

  1. Dengan aplikasi m-banking saya bisa membayar berbagai macam tagihan, transfer dana, informasi saldo, membeli pulsa, membeli token PLN dan sebagainya yang berhubungan dengan uang.
  2. Dengan Google Map bisa mencari lokasi suatu tempat yang baru ketika janjian dengan seseorang atau client.
  3. Ketika ada masalah jaringan PLN di rumah, browsing di smartphone call center PLN, kemudian telpon datang dah petugas PLN.
  4. Membaca berita di smartphone ketika manyun menunggu.
  5. Mendengarkan musik.
  6. Dokumentasi moment penting yang mendadak, tanpa perlu repot membawa kamera DSLR, cukup dengan kamera 8 Megapixel milik iPhone 4s.
  7. Telepon murah via BBM Voice dengan teman dari luar negeri.
  8. "Meprediksi" cuaca beberapa jam kedepan dengan YahooWeather via iPhone.
  9. Mengecek e-mail.
  10. Membeli tiket kereta via KAI Access.
  11. Mengecek kemacetan lalu lintas via Waze.
  12. Workout dengan aplikasi Seven dan Fitness Buddy.
  13. Denger musik yang bagus, segera nyalakan Shazam untuk mencari judul lagu, kemudian downl..eh beli di iTunes :)
  14. dan masih banyak lagi.
Demikian bagaimana smartphone membantu hidup saya yang sekarang. Bagaimana dengan anda?

gambar diambil dari sini.



Labels: , , ,

Saturday, January 31, 2015

Bitnami WAPP Stack PostgreSQL login failed

 
Database PostgreSQL jarang digunakan dalam pembuatan aplikasi berbasis web, biasanya pada pengembang menggunakan database MySQL, dan begitu juga biasanya saya. Belum lama ini saya dan teman mendapatkan pesanan untuk membuat "celana pendek" ( baca : program kecil, "gaun": untuk program besar ). Yaitu membuat program tambahan untuk aplikasi berbasis web yang kebetulan menggunakan database PostgreSQL. Program tersebut terdiri dari aplikasi yang ada di server pusat dan di lokasi - lokasi yang tersebar di seluruh indonesia. Pada dasarnya program yang ada di server pusat dan lokasi sama, hanya memerlukan sinkronisasi untuk menyamakan data. Aplikasi di lokasi bisa berdiri sendiri artinya jika tidak ada koneksi internet maka aplikasi berjalan dalam mode offline, ketika sudah terkoneksi internet diperlukan sinkronisasi untuk menyamakan data. Permasalahnya adalah tidak semua lokasi bisa terhubung dengan internet dengan mudah, dan itu hampir 50% dari jumlah total lokasi yang ada. Salah satu cara-nya adalah membawa PC mereka ke warnet yang lokasinya cukup jauh, kemudian melakukan sinkronisasi. Cara yang menurut saya agak aneh dan sangat merepotkan. 
Pesanan "celana pendek"-nya adalah membuat aplikasi sinkronisasi data yang bisa dikemas dalam bentuk file, kemudian dari file tersebut bisa dibawa ke warnet atau pc yang sudah terhubung dengan internet untuk diupload dan disinkronisasi ke server. Begitu pula sebaliknya, file dari server di-download kemudian diupload ke lokal dan disinkronkan. Kemudian pesanan kedua adalah membuat single installer yang simple untuk menginstall aplikasi web, web server dan database PostgreSQL dalam beberapa klik saja. Karena aplikasi  yang selama ini ketika PC client rusak maka cara instalasinya sangat rumit, yang tidak mungkin dilakukan oleh user di lokasi. Akhirnya harus membawa PC tersebut ke pusat ( Jakarta ) untuk diinstall kemudian dikirim balik ke lokasi.
Ketika aplikasi sinkronisasi menggunakan file sudah jadi lalu untuk single installernya saya memilih Bitnami WAPP Stack untuk menginstall Apache Web server, PHP, PostgreSQL, dan untuk setting aplikasi dan sebagainya saya buatkan program kecil dari Visual Basic 6. Sebenarnya saya sudah mencari berbagai aplikasi bertajuk "Single Click Installer" yang ada di internet. Semisal Silent Installer Builder, yang dari fitur-nya terdapat fitur yang lumayan keren, yaitu bisa me-record pengetikan keyboard dan gerakan mouse, tetapi ketika  saya coba fitu tersebut tidak ada, dan ketika saya tanyakan ke bagian "Contact" tidak ada respon. Akhirnya saya berinisiatif untuk membuat sendiri Single Installer tersebut, tentu dengan cara yang lebih "silent" tanpa me-record keyboad dan mouse :).
Masalah timbul ketika WAPP Stack diinstall di komputer ujicoba milik client, selalu login failed. Padahal username password sama ketika diisikan pada instalasi WAPP Stack. Berulang kali saya coba hasilnya selalu sama, yaitu Login failed.
Cara - cara yang saya lakukan antara lain adalah :
menggubah method pada file pg_hba.conf dari md5 ke trust, dan hasilnya sama saja error.

host    all             all             127.0.0.1/32            md5

menggubah opsi listen_address pada file posgresql.conf ke localhost atau * , dan hasilnya tetap saja error.

listen_addresses = '127.0.0.1'

kemudian melihat valid date user dengan query

select * from pg_user where usename='postgres'
 
menghasilkan
 
usename     | postgres
usesysid    | 10
usecreatedb | t
usesuper    | t
usecatupd   | t
userepl     | t
passwd      | ********
valuntil    | infinity
useconfig   |


user postgres valid date-nya : infinity yang artinya tidak bermasalah dengan valid date untuk user : postgres

Akhirnya setelah cukup lama berjibaku, solusinya adalah Install Ulang Windows 7 pada PC tersebut :)), dan instalasi Bitnami WAPP langsung lancar tanpa hambatan, kemungkinan pada instalasi windows sebelumnya masih ada sisa instalasi PostgreSQL yang lama yang menyebabkan anomali. Semoga membantu rekan - rekan.

Tools :

Windows 7 Ultimate
Bitnami WAPP Stack
pgAdmin III

 

Labels: , , ,

iTunes download error. Tap to retry


Sewaktu membeli lagu di iTunes, saya kesulitan untuk mendownload 2 lagu pada Album PeterPan "Sebuah Nama Sebuah Cerita". Mengapa saya membeli album ini, yaitu karena album ini berisi 30 lagu terbaik PeterPan di masa lalu :). 2 Lagu yang error ketika saya download adalah Bintang di Surga dan Jauh Mimpiku. Berulang kali saya download melalui jaringan wifi tetapi selalu gagal, sampai akhirnya tagihan iTunes sudah masuk ke e-mail saya.
Sebenarnya saya ingin me-replay email tagihan tersebut atas kegagalan download 2 lagu yang sudah saya beli, tetapi dalam tagihan tersebut terdapat link Report a Problem yang akhirnya saya klik link tersebut.


Dan saya pilih item masalahnya adalah "Item didn't download or can't be found". Ternyata iTunes menyarankan untuk mendownload via iTunes yang sudah terinstall di laptop saya. 


Setelah beberapa kali retry akhirnya 2 lagu tersebut terdownload juga dan langsung saya Syncronize ke iPhone. Akhirnya lengkap sudah 30 lagu PeterPan dalam Album Sebuah Nama Sebuah Cerita yang sudah saya beli. Terima Kasih iTunes.

Labels: , ,

Saturday, January 03, 2015

The Other Secret Project


Bulan Februari  2013, DKI Jakarta di bawah kepemimpinan Jokowi - Ahok berencana mengadakan proyek Sistem Online Rumah Sakit. Dengan sistem yang akan dibangun tersebut maka masyarakat DKI Jakarta dapat mengetahui informasi kamar kosong di setiap rumah sakit di Jakarta. Yang mana sebelumnya banyak masyarakat DKI Jakarta yang kesulitan untuk mencari kamar kosong di rumah sakit ketika dirinya, atau keluarganya sedang sakit dan butuh perawatan segera di rumah sakit terdekat. Akhirnya saya bersama beberapa teman mencoba untuk membuat prototype aplikasi tersebut dan proposal yang tentu saja untuk kami kirimkan ke bagian terkait di pemerintahan DKI Jakarta. Meskipun kami tahu kemungkinan sangat kecil karena kami saat itu belum berbadan hukum tapi hanya sekelompok hacker lokal yang hanya bisa menginstall windows saja :). Dan benar saja sampai sekarang kami tidak tahu proposal kami sudah sampai mana.
Berikut gambaran proyek rahasia kami, yang sudah kami "peti es"-kan karena sudah tidak revelan lagi dan apakah saat ini Sistem Informasi Online Rumah Sakit di DKI Jakarta apakah sudah berjalan atau belum kami tidak tahu. Dan juga akhirnya program yang dibangun sistem-nya seperti apa dan dibuat oleh vendor / programmer mana kami juga tidak tahu. Mungkin jika anda berdomisili di DKI Jakarta bisa mencoba sendiri dengan men-dial nomor telepon 119 untuk mengecek sistem online tersebut.

Gambaran singkat aplikasi yang kami bangun adalah di setiap rumah sakit kami akan pasang aplikasi kecil yang kami sebut Uploader Agent. Aplikasi ini berfungsi untuk menghubungkan dengan database SIMRS di masing masing tersebut, kemudian meng-query data kamar kosong dengan format tertentu kemudian dikirim melalui jaringan internet ke server pusat.
Server Pusat akan melayani user / masyarakat dengan aplikasi web atau dengan SMS Gateway dengan keyword tertentu. Misal keyword "RS" maka sms server akan mengirimkan semua informasi kamar kosong di rumah sakit terdekat dengan user / anggota masyarakat tersebut.

 Untuk aplikasi yang kami buat baru dalam tahap prototpye meskipun semua fungsi sudah bisa berjalan dengan baik.

relatend links:



Labels: ,

Ternyata Gratis


Dengan adanya iPhone 4s, tentu saja saya migrasi file musik yang sudah saya punya di PC untuk ditransfer ke iPhone, selain juga membeli album via iTunes Music Store. Suatu kali saya mentransfer file lagu dari album U2 - Songs of Innocence yang sudah saya "punya" :). Nah keanehan terjadi ketika lagu tersebut sudah masuk ke iPhone terlihat ada icon download, yang tentu saja aneh bagi saya. Saya sudah punya lagu-nya kok iTunes begitu baik-nya memberi opsi download atau ini adalah "jebakan batman" dari iTunes jadi ketika saya sudah mendownload nanti tagihan menyusul :). Setelah browsing di internet, ternyata memang group band U2 membagi - bagikan album terbaru-nya secara gratis melalui iTunes. Bahkan ketika tulisan ini ditulis saya belum mendownload-nya, nanti harus cari sinyal wifi  dulu agar lancar download-nya. Memang group U2 sudah sejak lama sering berkolaborasi dengan Apple, salah satunya adalah dahulu Apple pernah meluncurkan iPod U2 Edition. Memang untuk saat ini iTunes masih menjadi tempat terbaik untuk jual beli musik online dan tentu saja tempat promosi seperti yang dilakukan group band besar seperti U2.

Labels: ,

Tuesday, December 02, 2014

Printing to Dot Matrix Printer from Web Apps


Jika anda pernah melihat film Jurassic Park, disitu diceritakan bahwa para ilmuwan dapat menciptakan dinosaurus dari DNA yang terdapat di darah dinosaurus yang dihisap oleh seekor nyamuk. Kemudian nyamuk tersebut terperangkap dalam getah pohon. Akhirnya pada masa sekarang ketika dinosaurus sudah punah,mereka dapat diciptakan kembali dengan mengambil darah dinosaurus yang ada di dalam tubuh nyamuk tersebut. Kali ini saya akan membahas "DNA" yang lain yaitu "DNA" untuk aplikasi web agar bisa mencetak direct print ke printer dot matrix.
Salah satu kendala dalam membuat aplikasi web adalah ketika akan mencetak ke printer dot matrix. Kebanyakan di internet hanya membahas cetak dari php ke pdf, html dan sebagainya yang memang bagus dicetak pada printer non dot matrix. Setelah lama mencari teknik yang simple dan mudah dalam mencetak ke printer dot matrix melalui aplikasi web, akhirnya saya menemukan applet gratis dan open source yaitu jzebra. Applet ini memerlukan Java terinstall di komputer anda, anda bisa mendownload installer offline-nya di sini. Langkah - langkah untuk mencoba jzebra adalah sebagai berikut :

1. Download applet jzebra di sini, saya menggunakan versi 1.7.0
2. Install atau download installer offline java di sini lalu install. Sesuaikan dengan sistem operasi yang anda pakai.
3. Install xampp atau bitnami sebagai web server di komputer lokal anda.
4. Extact file jzebra di directory ..\apache2\htdocs\
5. Jalankan sample.html di direktori \dist


Jika muncul tampilan di atas pilih I accept the risk and want to run this application, dan klik Run
6. Jangan lupa juga masuk ke Control Panel, pilih Java, kemudian pilih tab Security, pada bagian Exeption Site List, pilih Edit Site List kemudian tambahkan alamat lokal web site anda agar tidak terblokir.


7. Idealnya printer dotmatrix sudah terpasang pada komputer anda atau anda telah terhubung dengan printer dot matrix dari komputer lain yang di-sharing. Set sebagai default printer anda agar mudah mencoba applet jzebra ini.
 8. Buka browser  yang menjalankan sample.html, kemudian klik tombol default printer, kemudian untuk mencoba cetak Raw Printer, klik tombol Print dan Print Base64. Dan hasilnya IT WORKS!


Print Base64
Raw Print

Saya menggunakan printer Epson LX-310, yang merupakan printer dot matrix yang sangat umum dipakai.

Dari semua langkah di atas yang saya tulis, seharusnya rekan - rekan sudah bisa membuat aplikasi berbasis web baik itu dengan PHP atau bahasa pemrograman lainnya untuk bisa mencetak di printer dot matrix, source code bisa anda pelahari lengkap di dalam sample jzebra. Jzebra ini seperti "cetak biru DNA" tentang cara mencetak dari browser atau aplikasi web ke printer dot matrix yang selama ini sulit dilakukan. Artinya dengan "cetak biru DNA" ini, anda bisa mengembangkan dengan mengkombinasikan dengan framework PHP misal CodeIgniter, YII, Zend dikombinasikan dengan ExtJS dan lain sebagainya. Saya pikir coder lokal paling jago untuk urusan mengkombinasikan berbagai bahasa pemrograman. Semoga bermanfaat.

Tools:
Mozilla Firefox

Hardware :
Printer EPSON LX-310

related links:
Show PDF in ExtJS
PHP Direct Printing Dot Matrix LX-300

Labels: , ,