- Untuk mengurangi kebiasaan menggulir tanpa henti berita ponsel dan media sosial setiap pagi, ia mencetak halaman depan kertas yang dipersonalisasi setiap hari dengan printer dot matrix
- Konfigurasinya sederhana: Star NP-10, Raspberry Pi Zero W, adaptor port paralel-ke-USB, dan catu daya; di Pi, printer diperlakukan sebagai perangkat
/dev/usb/lp0
- Printer lama tidak menerima Unicode umum, melainkan set karakter terbatas yang mirip Code Page 437; di PHP, nilai heksadesimal dikirim langsung untuk mencetak garis, kotak, dan simbol suhu
- Data diambil dari Open-Meteo, twelvedata, NYTimes, dan Reddit JSON, lalu cuaca, saham, headline berita, dan posting Reddit diformat agar sesuai dengan lebar kertas
- Dijalankan otomatis dengan cron sekitar pukul 08.00 setiap hari; satu lembar berita yang terbatas menggantikan infinite scroll di situs web dan aplikasi
Membuat halaman depan kertas alih-alih layar
- Ingin tetap mendapatkan informasi terbaru sambil mengurangi kebiasaan membuka ponsel pada pagi hari dan menggulir berbagai situs berita serta media sosial
- Diimplementasikan dengan memanfaatkan printer dot matrix yang dibeli di eBay untuk mencetak halaman depan khusus yang disiapkan setiap hari
- Seluruh kode sumber tersedia di repo GitHub
Pemilihan dan koneksi perangkat keras
- Komponen yang dibutuhkan relatif sederhana
- Printer yang digunakan adalah Star NP-10, yang tampaknya merupakan produk pertengahan 1980-an
- Printer dot matrix dengan port paralel kemungkinan bisa berfungsi
- Kisaran harga umumnya sekitar 80–120 dolar, tetapi karena berlabel “tidak pasti berfungsi”, printer ini dibeli dengan harga sekitar setengahnya
- Setelah sedikit dibersihkan dan kartrid pita tinta disesuaikan, halaman uji berhasil dicetak
- Raspberry Pi terhubung ke WiFi dan tersambung ke port paralel printer melalui adaptor USB
- Setelah masuk ke Pi lewat
ssh, dipastikan printer terdeteksi di /dev/usb/lp0
Mengirim data langsung ke printer
- Awalnya, keluaran diuji dengan mengirim teks mentah langsung dari shell
echo "Hello, world!" > /dev/usb/lp0
- Terjadi error akses file, sehingga masalah izin diakali dengan
chmod
sudo chmod 666 /dev/usb/lp0
- Setelah itu, teks yang dikirim ke
/dev/usb/lp0 tercetak di printer
- Di PHP, pendekatan ini diperluas dengan membuka file printer memakai
fopen() lalu menulis teks ke dalamnya
- Saat mencoba kalimat biasa, spasi, dan seni Unicode, terlihat bahwa cakupan dukungan karakter printer terbatas
Set karakter Star NP-10
- Manual pengguna Star NP-10 yang dipindai ditemukan untuk memahami cara kerja printer
- Printer ini hanya menerima set karakter yang sangat spesifik
- Secara longgar didasarkan pada Code Page 437 milik IBM PC
- Mencakup karakter alfanumerik standar serta sebagian simbol khusus, garis, dan karakter kotak
- Di PHP, nilai heksadesimal dapat dibuat sebagai string dan dikirim langsung ke printer
$horizontalDouble = "\xCD";
$deg = "\xF8";
echo str_repeat($horizontalDouble, 24);
echo '78' . $deg . 'F' . PHP_EOL;
- Dengan cara ini, bukan hanya teks biasa, tetapi juga karakter dekoratif seperti garis, kotak, dan simbol suhu bisa dicetak
Data yang diambil dan API
- Halaman depan pribadi berisi empat bagian
- Cuaca
- Saham
- Headline berita utama
- Posting Reddit teratas
- Karena ini proyek eksperimen, tujuannya adalah menekan biaya data dan sebisa mungkin memakai API gratis; API yang diperlukan ditemukan di repositori public-apis, yang mengumpulkan API publik gratis
- Sumber data yang digunakan adalah sebagai berikut
- Open-Meteo: data cuaca, tidak memerlukan kunci API
- twelvedata: data saham, menyediakan tier gratis yang cukup longgar
- NYTimes: headline berita, menyediakan tier gratis yang cukup untuk proyek ini
- Reddit JSON: posting Reddit, gratis tetapi perlu spoofing User-Agent
- Skrip PHP mengambil payload dari tiap endpoint API dan menggabungkan hanya data yang diperlukan ke dalam satu array besar
- Hanya saham tertentu, jenis berita tertentu, dan posting dari subreddit tertentu yang digunakan
- Jika salah satu bagian tidak memiliki data untuk ditampilkan, skrip berhenti lebih awal dan dijalankan lagi nanti
Cara memfilter data berita
- Data NYTimes dianggap gagal jika respons API tidak memiliki
results
- Dari artikel yang ada, hanya item yang memenuhi kondisi berikut yang dikumpulkan untuk dicetak
type adalah Article
section adalah salah satu dari U.S., World, Weather, Arts
- Ditambahkan hanya jika jumlahnya masih kurang dari maksimum
MAXNEWS
NEWS, NEWSKEY, dan MAXNEWS didefinisikan sebagai konstanta di bagian atas skrip agar mudah diubah
Format keluaran yang disesuaikan dengan kertas
- Alih-alih sekadar mencetak judul bagian, bagian atas dibuat sebagai kotak berbingkai yang berisi tanggal saat ini, hari, dan nama halaman depan
- Tata letak dihitung berdasarkan lebar halaman printer yang berukuran 80 karakter
- Karakter heksadesimal
str_repeat
- Nilai lebar halaman tetap
- Judul bagian dicetak dengan menggabungkan karakter garis dan teks
str_repeat($horizontalSingle, 3) . " WEATHER " . str_repeat($horizontalSingle, (PAGEWIDTH - 9)) . "\n";
- Cuaca dan saham cukup pendek sehingga dicetak dalam satu baris tanpa menyentuh tepi kertas
- Headline berita dan posting Reddit sering berisi teks panjang, sehingga memerlukan penanganan pemenggalan baris tersendiri
Menangani pemenggalan baris untuk teks panjang
- Printer dapat secara otomatis melanjutkan baris panjang ke baris berikutnya
- Namun, untuk menghindari kata terpotong di tengah saat pindah ke baris berikutnya, dibuat fungsi yang membagi string berdasarkan panjang baris maksimum
- Fungsi
splitString() memisahkan kata berdasarkan spasi dan mengembalikan array agar tiap baris tidak melebihi PAGEWIDTH
- Jika satu kata lebih panjang dari panjang maksimum, kata tersebut dipotong
- Posting Reddit ditulis ke printer dengan mengiterasi array baris yang dikembalikan
foreach (splitString($redditPost) as $line) {
fwrite($printer, $line) . "\n";
}
Eksekusi otomatis dan pengalaman penggunaan
- Eksekusi manual bisa dilakukan dengan
php print.php
- Penggunaan sebenarnya diotomatisasi dengan job cron
- Halaman depan yang dipersonalisasi dicetak setiap hari sekitar pukul 08.00
- Kertas yang tercetak disobek lalu dibaca sambil minum kopi
- Berita terbatas dalam satu lembar kertas terasa lebih baik dibanding menggulir situs web dan aplikasi sosial tanpa henti
- Proses menghubungkan perangkat keras fisik lama dengan teknologi baru juga menjadi bagian penting dari keseruan proyek ini
1 komentar
Opini Hacker News
Saya pernah mencoba hal serupa dengan printer struk; printer struk termal USB harganya sekitar 75 dolar dan mudah dikendalikan dengan Python
Mencetak gambar dan kode QR itu sederhana, dan fitur pemotong otomatisnya memudahkan pemisahan pesan
Bel internalnya juga bisa dibunyikan sehingga dapat dipakai seperti notifikasi tambahan, dan ada output untuk mengendalikan laci kas, jadi saya berpikir untuk menghubungkannya guna mengendalikan hal-hal seperti lampu
Saya menyiapkannya untuk email dan membuatnya mencetak jadwal setiap pagi
Kalau dipakai bersama kontrol fisik seperti tombol atau pembaca NFC, antarmukanya terasa cukup cocok. Misalnya, seperti memberi “perintah” dengan kartu NFC untuk mencetak jadwal, atau kartu NFC untuk mencetak email yang belum dibaca, lalu menerima outputnya
Ini cara yang menarik untuk mengurangi waktu menatap layar, tetapi ironisnya saya rasa saya malah menatap layar lebih lama untuk mengodekan dan mengaturnya daripada waktu yang berhasil dihemat
https://www.consumerreports.org/cro/news/2014/03/the-health-...
Hari ini tiba-tiba saya jadi penasaran
Salah satu hal yang dilakukan orang ini pada dasarnya hanya echo ke
/dev/lp0, dan dulu memang begitulah cara kerjanya. Kalau teks didorong masuk ke antarmukanya, printer akan mencetaknyaPrinter zaman sekarang jauh lebih canggih, tetapi tetap saja printer dengan warisan panjang. Printer laser HP awal pun, kalau data dikirim lewat kabel, akan mencetak dalam Courier 10, 66 baris per halaman. Saya rasa hanya Apple LaserWriter yang tidak seperti itu karena merupakan printer PostScript khusus; sebagai gantinya, PostScript yang didorong masuk
Seiring printer berkembang, bahasa yang dikirim menjadi lebih rumit, tetapi kompatibilitas mundur yang panjang tetap dipertahankan
Jadi kalau printer USB dicolokkan ke komputer lalu menjalankan
ls > /dev/usbXXX, apakah masih akan tercetak sampai hari ini? Apakah masih langsung berfungsi begitu saja?Kalau mengirim kode escape EPSON MX-80 ke EPSON, apakah masih bisa? Apa pun jawabannya tidak akan mengejutkan, tetapi printer modern terasa cukup seperti kotak hitam bagi saya, jadi saya penasaran apakah ada yang tahu
Sepertinya juga ada orang yang masih ingat betapa “menyenangkannya” berjuang agar laporan tercetak pas pada formulir NCR berlapis yang sudah dicetak sebelumnya
/dev/seperti cara yang dijelaskan. Sebagai gantinya, OS X juga punyalp, sehingga bisa dipakai sepertiecho "Hello printer" | lp -d, dan namanya bisa ditemukan denganlpstat -pSaya mengujinya pada printer baru dan ternyata memang berfungsi
printf 'hello\f' > /dev/usb/lp0printf 'hello\f' | nc -N $printer_ip 9100Ini pada printer laser Brother, dan ada tautan panduan pemrograman di samping manual online-nya. Bahasanya PCL, tetapi untuk output sederhana tidak perlu tahu banyak
Keduanya tidak memakai CUPS. Seperti komentar lain, jika ingin memakai executable
lp/lpr, printer harus didaftarkan terlebih dahulu di CUPSUntuk
ls >, printer mengharapkan baris baru gaya DOS.\nhanya pindah ke baris baru dan tidak melakukan “carriage return”, jadi perlu dipipe melaluised 's/$/\r/'atau memakainc -CPada koneksi USB, Anda bisa mencetak beberapa kali untuk membuat satu halaman, dan kertas tidak akan keluar sampai form feed dikirim. Pada koneksi TCP, halaman dicetak saat koneksi ditutup
/dev/usblp0, dan mengirimnya dengancatsaja juga berfungsiPelanggan yang membeli produk seperti ini dalam kondisi baru tentu ingin kompatibel dengan proses yang sudah mereka pakai selama 30–50 tahun terakhir, jadi sesuai dugaan printer ini mendukung ESC/P 2 dan juga kode escape IBM. Itu mengejutkan karena printer matrix lama yang saya pakai pada tahun 90-an sepertinya tidak mendukung kode IBM
Yang lebih mengejutkan lagi, MacBook punya driver bawaan untuk printer Epson generik dan driver itu berfungsi. Kualitasnya kurang bagus dan mencetak sebagai grafis, tetapi setidaknya memang ada
Saya kurang tahu soal printer inkjet dan laser modern. Printer inkjet Epson yang saya pakai sekitar 20 tahun lalu mendukung kode ESC/P mentah
https://retrohacker.substack.com/p/bye-cups-printing-with-ne...
Salah satu kesalahan pengguna yang umum adalah ketika seseorang mencoba mencetak dokumen Word, PostScript terkirim ke printer dot matrix, lalu printer dengan setia mencetaknya sebagai source PostScript mentah, menghabiskan kertas dan pita sampai seseorang menghentikannya
Printer matriks juga bisa melakukan cukup banyak hal, tergantung modelnya. Bisa mengganti font, cetak tebal, garis bawah, kadang miring, karakter dengan lebar/tinggi ganda, bahkan grafis. Hanya saja grafisnya biasanya beresolusi relatif rendah, seperti 90 atau 180 DPI.
Dulu saya pernah membuat sebuah kotak yang hanya memiliki konektor printer paralel untuk sesuatu yang mirip gim escape room. Saat disambungkan ke printer, mikrokontroler PIC yang sangat kecil mengambil daya parasit dari salah satu jalur kontrol port paralel, hanya memakai beberapa ratus µA, lalu mengirim petunjuk ke printer.
Awalnya program ini memanfaatkan mode grafis resolusi tinggi pada printer dot matrix Epson. Printer-printer ini bisa melakukan penyetelan mikro platen sekecil 1/3 jarak antar-pin kepala cetak, sehingga mampu menghasilkan resolusi vertikal 3 kali lebih tinggi daripada yang bisa dicapai kepala cetak saja.
Fancy Font merender teks di komputer lalu mengirimkannya sebagai grafis dalam mode resolusi tinggi khusus ini, sehingga dengan perangkat rumahan awal 1980-an hasilnya sedekat mungkin dengan typesetting.
Versi-versi berikutnya juga punya driver untuk printer laser awal seperti HP LaserJet asli, tetapi setelah Mac muncul, masa depan sistem semacam itu sudah jelas.
Namun setelah dicetak, kertasnya melengkung parah. Printernya masih ada, tetapi saya tidak tahu di mana bisa mendapatkan ribbon 4 warna.
figletdi terminal masa kini. Mungkin saja perintah itu masih mendukung output ke printer.Mungkin akan saya coba di versi 2.0.
Saya menghubungkan mesin ini ke feed berita selama beberapa tahun.[1] Mekanismenya adalah printer pita Teletype Model 14, masih ada di ruang keluarga, dan pitanya mengalir keluar ke keranjang kawat.
Dijalankan dengan program Python di subnotebook EeePC lama.
[1] https://aetherltd.com/refurbishing14.html
Nama EeePC juga sudah lama sekali tidak saya dengar, jadi terasa nostalgis.
Ini terlihat seperti ide produk yang benar-benar hebat. Gagasan menerima feed berita personal setiap pagi—dan bukan dari tempat seperti MSN, melainkan feed berita off-screen yang benar-benar saya pilih sendiri—itu keren.
Kalau bahkan jam alarm bisa diganti dengan printer dot matrix, itu lebih keren lagi.
Mengubah PHP agar sesuai dengan sumber berita saya mungkin mudah, tetapi saya tidak tahu harus mulai dari mana untuk sisi hardware sendirian. Sepertinya cukup banyak orang berada di posisi seperti ini.
Kalau tersedia di pasar, rasanya saya akan membelinya meski jauh lebih mahal daripada harga printer lama.
Bagian tersulit adalah koneksi printernya; mungkin perlu kabel adaptor.
Rapi. Ini mengingatkan saya pada masa singkat ketika dulu bekerja di stasiun radio. Detailnya hampir saya lupa, tetapi sepertinya sistemnya otomatis menelepon ke suatu nomor Associated Press, mengambil headline terbaru, lalu mengirimkannya ke printer dot matrix.
Itu akhir 90-an dan berjalan di MS-DOS.
Saat itu sebagian besar printer bisa mengatur font lewat kode kontrol, dan banyak printer juga memiliki font lebar variabel.
Bagus. Belakangan ini saya mempertimbangkan berlangganan koran kertas akhir pekan seperti FT Weekend. Alasannya karena saya terlalu sering membaca berita di ponsel.
Berita sering kali tidak terlalu berguna dan hanya menimbulkan emosi negatif. Membaca berita di kertas, apalagi hanya sekali seminggu, sepertinya akan terasa lebih tenang.
Cara mencetak berita di kertas setiap hari ini tampak bagus untuk mengisi celah di antaranya.
Selain itu, saya benar-benar suka printer dot matrix. Apakah ada printer open source yang cocok untuk di-hack seperti ini?
Saya mencoba berlangganan koran kertas, tetapi tidak pernah menerimanya. Setelah sekitar 3 kali menelepon dan 10 email, baru ketika saya meminta pembatalan langganan dan pengembalian dana mereka mengatakan akan menaikkan tiketnya ke level lebih tinggi. Saat itu sudah 3 minggu berlalu dan waktu saya juga sudah banyak terbuang.
Jadi saya juga sangat tertarik mencetak sendiri berita internet supaya tidak terus-menerus menatap layar.
Saya sudah beberapa waktu mencetak “kartu tiga sisi”. Satu sisi berisi gambar, sisi lainnya berisi kode QR yang mengarah ke dokumen.
https://mastodon.social/@UP8/111013706271196029
Sisi “ketiga” adalah situs web yang dituju kode QR tersebut.
Saya mulai bosan dengan foto, jadi saya menciptakan karakter yang membawa lensa murah, selalu menutup aperture ke f/18 atau lebih, melakukan post-processing dan koreksi warna yang kuat, serta memotret dengan aspect ratio yang standar tetapi terasa tidak standar. Konsepnya adalah membuatnya tampak seolah-olah memakai kamera aneh dari garis waktu alternatif.
Ketika mulai mencetak seri ini, saya menyimpulkan bahwa 4x5 bisa dibuat dengan mudah dengan memotong 4x6, tetapi alih-alih memotongnya, saya melihat bahwa ruang 1 inci bisa disisakan untuk menaruh kode QR dan dokumen di sisi depan. Demikian pula, jika 5x7 dipotong menjadi persegi 5x5, akan ada ruang untuk dokumen.
Saya punya beberapa kotak kertas glossy yang tidak bisa dicetak di sisi belakangnya, jadi saya berencana memakainya seperti itu. Belakangan saya juga mengetahui bahwa Instagram memiliki standar 4x5, dan foto olahraga yang diambil dengan lensa bagus terlihat sangat bagus dalam format itu.
Namun saya masih bingung bagaimana bentuk dokumennya sebaiknya. Saya terbelah antara mengubah sesedikit mungkin dari susunan sekarang, membuat efek dot matrix palsu yang terlihat seperti printer lama yang mungkin tertanam di kamera fantasi itu, atau memaksimalkan keunggulan printer inkjet.
Jika “karena ini proyek eksperimen, saya ingin menjaga biaya data ini sangat murah, kalau bisa gratis”, ada juga NewsCatcher. Gratis untuk proyek sampingan open source
https://docs.google.com/forms/d/e/1FAIpQLSejrsj4a1ZQkIasiKCt...
Sedikit terkait, saya memakai skrip kecil yang setiap pagi membuka halaman depan NYTimes di MacBook
d=$(date +%d)m=$(date +%m)y=$(date +%Y)wget -q [https://static01.nyt.com/images/$y/$m/$d/nytfrontpage/scan.p...](<https://static01.nyt.com/images/$y/$m/$d/nytfrontpage/scan.pdf>) && open ./scan.pdfhttps://nytonline.net/rss
rm todays_nyt.pdf; wget -q "[https://static01.nyt.com/images/$(date](<https://static01.nyt.com/images/$(date>) +%Y/%m/%d)/nytfrontpage/scan.pdf" -O todays_nyt.pdf && open todays_nyt.pdfdmy=$(date +%d/%m/%Y)