Menurut pendapat saya, bahasa Ruby tidak lagi sepopuler tahun 2012 - 2014, jadi saya memiliki keinginan, sampai bahasa tersebut benar-benar dilupakan, untuk mencoba menyampaikannya kepada orang banyak lagi, karena Ruby, menurut saya, adalah bahasa yang paling nyaman dan praktis untuk pengembangan web.
Seminggu yang lalu, saya tergoda untuk membuat komunitas saya di telegram, menemukan programmer pemula dan membawa pengembangan Ruby ke sisi yang cerah.
Rencananya adalah membuat komunitas, tetapi tidak di mana setiap orang akan menulis tentang masalah dan bug mereka pada proyek (ada cukup banyak komunitas seperti itu), tetapi sebuah komunitas di mana informasi yang berguna dari dunia Ruby akan diposting.
Pertama-tama, saya ingin membuat posting dalam bentuk meme, tetapi dengan konten pendidikan.
Ketika saya membuat 10 gambar melalui situs generator meme, saya menyadari bahwa semuanya sangat lambat dan bermasalah, ditambah dengan semuanya, saya hanya membuat 10 metode ruby, dan sekitar 1.000 lebih dari mereka dapat diketik. Diputuskan untuk membuat generator meme Anda sendiri dan bahkan mengikat antarmuka untuk semua ini dan melakukan semuanya menggunakan bahasa Ruby.
Pembuatan Gambar dengan RMagic
Agar tidak terlalu repot dengan rendering, permata
`rmagick`
sudah ada diambil sebagai dasar. Berkat permata ini, kami dapat dengan mudah memodifikasi gambar.
Dalam kode di bawah ini, saya membuat objek baru (teks) dalam bentuk gambar dan menempatkannya pada gambar yang diambil sebagai dasar.
Kode logika utama img = Magick::ImageList.new("1.jpg") title = Magick::Draw.new title.pointsize = 126 title.font_weight = Magick::BoldWeight title.fill = 'white' title.gravity = Magick::CenterGravity title.annotate(img, 0, 0, 0, -400, first_text) descritpion = Magick::Draw.new descritpion.pointsize = 72 descritpion.font_weight = Magick::BoldWeight descritpion.fill = 'white' descritpion.gravity = Magick::CenterGravity descritpion.annotate(img, 0, 0, 0, 300, second_text) img.write("actual_mem/#{first_text}.jpg")
Setelah mengisi atribut dasar seperti ukuran font, keberanian, warna dan gravitasi teks. Selanjutnya, saya menyimpan gambar di folder actual_mem. Mengapa saya perlu folder ini akan kembali lagi nanti.
Antarmuka Web di Sinatra
Sekarang itu perlu untuk mengimplementasikan antarmuka. Agar tidak menyebarkan proyek Rails besar demi aplikasi kecil, saya memutuskan untuk menggunakan kerangka kerja Ruby lain yang disebut Sinatra
Hasilnya adalah file kecil dengan kode untuk menjalankan aplikasi
File Peluncuran Aplikasi Sinatra require 'sinatra' get('/') do haml :index end post('/') do if params[:title] && params[:description] require 'rmagick' b = params[:description].scan(/[-a-zA-Z-0-9_.,()—-]+/) second_text = "" b.each_with_index do |text, index| if index.modulo(4) == 3 second_text += text + "\n" else second_text += text + " " end end img = Magick::ImageList.new("../1.jpg") title = Magick::Draw.new title.font = '' title.pointsize = 126 title.font_weight = Magick::BoldWeight title.fill = 'white' title.gravity = Magick::CenterGravity title.annotate(img, 0, 0, 0, -400, params[:title]) descritpion = Magick::Draw.new descritpion.font = '' if b.size > 20 descritpion.pointsize = 48 else descritpion.pointsize = 72 end descritpion.font_weight = Magick::BoldWeight descritpion.fill = 'white' descritpion.gravity = Magick::CenterGravity descritpion.annotate(img, 0, 0, 0, 300, second_text) img.write("../actual_mem/#{params[:title]}.jpg") end haml :index end
Anda dapat menemukan dokumentasi tentang sinatra di situs web resmi, saya tidak akan menjelaskan banyak hal di sini.
Saya mengacaukan CSS Grid sedikit dan menggunakan haml saya membuat halaman entri data untuk membuat meme
Kode Haml: !!! 5 %html(lang="en") %head %title C %link{:rel => "stylesheet", :type => "text/css", :href => "/style/main.css"} %body %h1 %form{ :action => "/", method: "post"} %label %input{ name: "title" } %label %textarea{ name: "description" } %input{type: "submit"}
Kode CSS: form { display: grid; grid-template-columns: 200px 1fr; grid-gap: 16px; } label { grid-column: 1 / 2; } input, button { grid-column: 2 / 3; }
Saya tidak menambahkan keindahan pada tahap pertama, saya hanya membutuhkan implementasi fungsional yang jelas. Oleh karena itu, halaman hanya memiliki judul, dua label tag, input untuk teks atas dan textarea untuk yang lebih rendah. Dan juga input untuk mengirimkan formulir ke server.
Rencana masa depan
Di masa depan saya berpikir untuk menyelesaikan formulir - Saya akan menambahkan bilah geser untuk mengatur ukuran font teks atas dan bawah, bilah geser untuk memposisikan teks, dan Anda juga dapat membuat blok pratinjau.
Selain generator meme, saya juga menerapkan bot untuk grup, yang, berdasarkan perintah, mengirimkan gambar ke komunitas dan memindahkan gambar dari folder aktual_mem ke folder sended_mem. Bot juga dibuat di Ruby, tetapi jika menarik, saya akan membuat artikel tentang itu di lain waktu.
Artikel itu ditulis sehingga programmer pemula mengerti bahwa bahasa itu tidak rumit dan Anda dapat mewujudkan ide dan proyek Anda secepat mungkin dan tanpa situasi tegang hanya dalam beberapa jam.
Kode sumber
tautan githubPilih Ruby