TSBOARD (TypeScript ile yazılmış açık kaynaklı topluluk oluşturucu)
(github.com/sirini)TSBOARD nedir?
- TSBOARD, Type Safety BOARD'un kısaltmasıdır; TypeScript ile yazılmış bir topluluk oluşturucu ve forum yazılımıdır.
- Daha önce burada GeekNews'te tanıtılan Bun runtime'ını kullanır ve backend'i ElysiaJS adlı web framework'ü ile oluşturulmuştur. Bu sayede genel forum motorlarına kıyasla daha hızlı çalışır.
- Frontend tarafında Vue ve Vuetify kullanıldı. Ancak geliştiricinin estetik anlayışı pek iç açıcı seviyede olmadığından, ileride değerli tasarımcıların da yardımını alabilirim umuduyla bu yazıyı burada paylaşıyorum. (+ Elbette değerli geliştiricilerin desteğine de ihtiyaç var!)
Neden yaptım?
- Web programlamaya
PHPile başladım; Zeroboard ve Gnuboard dönemlerini yaşamış (artık yaşını almış) bir geliştiriciyim. - Kafamdaki son JavaScript anısı,
jQueryolmadan çöp gibi bir dil olduğuydu (...). - Ancak standartların sürekli gelişmesi,
Node.js'in ortaya çıkışı ve Microsoft'un TypeScript'ine geç de olsa hayran kaldım. (Aslında galiba gerçekten çok geç kaldım.) - Bu yüzden tekrar bir web uygulaması yapmak istedim ve her zaman yaptığım forumu sadece TypeScript ile yazmayı denemek istedim.
- Ayrıca (madem yapıyorum) kullanımı kolay, daha hızlı ve daha güvenli çalışan bir şey olsun diye geliştirdim.
TSBOARD'un kendine özgü avantajları
- TSBOARD'un hem frontend'i hem de backend'i TypeScript ile yazıldığı için tip güvenliğini mümkün olduğunca garanti eder. (Elbette hiçbir şey kusursuz değil ama en çok özen gösterdiğim kısım tip güvenliğiydi.)
Node.jstabanlı full-stack geliştirme yapmış olanlar için anlaşılması kolay ve hemen kullanılabilecek bir tasarıma sahiptir. Ben de bunu sıfırdan öğrenerek geliştirdiğim için başkalarının iyi örneklerinden bolca yararlandım.- Küçük ve orta ölçekli topluluk siteleri oluşturmak için gereken tüm işlevler dahili olarak gelir. Geliştirirken Clien, Quasar Zone, Giggle Hardware ya da yakın zamanda açılan Damoang gibi Kore'nin öne çıkan topluluk sitelerini referans almıştım.
Dezavantajları da var
- Bun runtime'ı sanal CPU üzerinde düzgün çalışmıyor. Uygun fiyatlı sanal sunucu hosting ortamlarında verimli şekilde kullanmak zor. TSBOARD da Bun'a dayandığı için aynı durum burada da geçerli.
- TSBOARD, Client Side Rendering yaklaşımını kullanır. Ben hâlâ PHP'yi seven biri olarak, Server Side Rendering terimi bana hatta daha yabancı geliyordu. Bunun çeşitli artı ve eksileri var ama öncelikle (benim için) yeni bir yaklaşımı denemek istedim ve TSBOARD'u sunucu yükünü azaltma amacıyla geliştirdiğim için bu durum bazıları için açık bir dezavantaj olabilir.
- Aslında geliştirmeye başlayalı yaklaşık yarım yıldan fazla oldu, ama ancak şimdi tanıtım yapabilecek kadar bir noktaya gelebildim; hâlâ pek çok eksiği var. Umarım bu eksikleri ileride karşılaşacağım değerli insanların yardımıyla giderebilirim.
Kapanış: Bir gün ünlü topluluk sitelerinin TSBOARD'u benimseyeceği günü hayal ederek
- Gnuboard'un PHP'den Python'a geçtiğini görünce, web programlarının da sürekli yeni denemeler yaptığını hissettim. XE'den doğan Rhymix de öyle. Web hâlâ dinamik ve geliştirme dünyası da aynı şekilde öyle.
- Ben de küçük de olsa TSBOARD projesi aracılığıyla web ekosistemine katkı sunmak istediğim için bu tanıtım yazısını bırakıyorum.
- Bir gün yeni kurulacak bir topluluk sitesinin TSBOARD'u benimseyeceği günü hayal ediyorum. hehe
Uzun yazıyı okuduğunuz için teşekkür ederim!
21 yorum
Yaklaşık 2 hafta önce paylaştığım yazıya ek bir yorum bırakmanın faydalı olup olmayacağını bilmiyorum ama :)
GeekNews'ten aldığım SEO ile ilgili geri bildirimleri nasıl yansıtacağımı düşünürken,
sitemap.xmluygulayarak arama motoru optimizasyonunu yansıttım; içeriği paylaşmak adına bunu yorum olarak bırakıyorum!Kısaca söylemek gerekirse, arama motorları son olarak
robots.txt>sitemap.xmlerişimi üzerindenhttps://tsboard.dev/tsapi/seo/main.html (örnek sayfa) yolunda verileri topluyor.
Kullanıcılar arama üzerinden gelirse, bu sayfadaki bağlantılar aracılığıyla yeniden asıl siteye yönlendirilmelerini sağladım.
Ayrıntıları aşağıdaki bağlantıdan inceleyebilirsiniz!
https://tsboard.dev/board/free/18
Ben de hobi olarak geliştirdiğim projeyi bun ile çalıştırmayı düşünüyordum ama sanal CPU’da düzgün çalışmaması gerçekten şaşırtıcı. Bir de üyelik kaydı sırasında parola koşulunda büyük harf yazdığı için küçük harf eklemem gerekmiyor sanmıştım ama ters köşe oldum :) Sanırım büyük-küçük harf diye yazmanız daha doğru olur.
Olur da lazım olur diye bir yanıt bırakıyorum. Bun runtime’ını düşünenlerin artık sanal CPU’daki çalışma sorunları konusunda endişelenmesine gerek yok...! 1.1.31 sürümünde test ettim ve sorunsuz çalıştığını doğruladım. :)
Ah, yorumunuz için teşekkür ederim; bahsettiğiniz parola koşulu kısmındaki düzeltmeyi de mutlaka yapacağım. haha
Bun’ı ben de açıkçası çok derinlemesine kullanmış değilim ama kullanırken birçok açıdan şaşırtıcı deneyimler yaşadım. Node.js’te doğal olarak çalışan özelliklerin, nedense Bun’da çalışmadığı durumlarla da sık karşılaştım (örneğin klasör oluştururken
recursive: trueseçeneğinin desteklenmemesi gibi bir sorun da vardı). Bir yandan da hıza inanılmaz derecede takıntılı bir yaklaşımı vardı; bu yüzden ona daha çok bağlanmam kaçınılmaz oldu.Şimdi adına Bundows deniyor sanırım; artık Windows’ta Bun runtime’ı resmen destekleniyor ama 1.1 öncesinde desteklenmediği için WSL2 üzerinde çalıştırmak gerekiyordu. Bahsettiğiniz sanal CPU’da çalışma konusu ise Bun’ın ileride de desteklemeyebileceği bir şey gibi görünüyor. AVX2 komut setini desteklemeyen CPU’lar için bir dağıtım (baseline) sunuluyor ama sanal CPU desteğinin olmaması, bunun Bun’ın geliştirildiği dil olan Zig’in bir sınırı olup olmadığını bilmiyorum, yine de birçok açıdan üzücü bir durum. Kısacası kullanırken hissettiğim şey, hız uğruna Bun’ın da bazı tavizler vermiş olduğu oldu.
Belki gelecekte bu yorumu görecek Bun kullanıcıları olur diye biraz daha ekleyeyim: Çeşitli kısıtları olmasına rağmen Bun cazip bir seçenek. Özellikle web framework olarak ElysiaJS’i seçerseniz, hız açısından en azından hayal kırıklığı yaşayacağınızı sanmıyorum. Ben tekrar en başa dönüp runtime seçmem gereken bir noktaya gelsem... biraz daha düşünürdüm ama sonuçta yine çeşitli sorunlara rağmen Bun’ı seçerdim gibi geliyor. İşleme hızına neredeyse takıntı düzeyinde odaklanması ve zaten yerleşik bir doğruya sahip JS runtime ekosistemine meydan okuyan tavrı, insana bir şekilde dokunuyor. haha
GitHub koduna bakarken merak ettiğim birkaç nokta olduğu için bir soru bırakıyorum.
Kişisel olarak, görmek istediğim TS tabanlı bir board türünün çıkmış olması beni çok etkiledi!
v0.8.40 güncellemesinde yabancı anahtar ayarı eklendi!
https://tsboard.dev/board/free/18
Ah, yorumunuz için teşekkürler!
İlişki tanımları derken yabancı anahtarların ayarlanmamış olmasını kastediyorsunuz sanırım! Bunun için özel bir neden yoktu; tablo yapısı belli bir ölçüde netleşince ayarlamayı denerim diye düşünmüştüm ama arada başka işlerle uğraşırken hâlâ yansıtamadım. TSBOARD tabloları arasındaki bağımlılık ilişkileri ve referans verilen sütunlar artık belli ölçüde oturduğu için, bundan sonra yabancı anahtar ayarlarını da ekleyip bütünlüğü daha iyi garanti eden bir yapıya dönüştürmeye çalışacağım!
NoSQL’i bir ara düşündüm ama... öğrenmem gereken yeni şeyler olarak öncelikle TypeScript dili, Vue, Node.js/Bun gibi çok fazla şey vardı; bu yüzden değiştirmemeye karar verdim. İlişkisel veritabanları uzun tarihleri kadar artık epey eski sayılır, ama yine de hâlâ birçok yerde faydalı şekilde kullanılmalarının bir nedeni vardır diye de düşündüm. Bu yorumu yazdığım şu anda durum böyle; ama ileride bir ihtiyaç doğarsa MongoDB gibi bir şeyi değerlendirebilirim. :)
TypeScript tabanlı bir forum/board sisteminin hâlâ olmaması açıkçası beni kişisel olarak şaşırtıyor, ama bunun da sadece bir zaman meselesi olduğunu düşünüyorum. TSBOARD’dan farklı tarzlarda başka projelerin de bolca ortaya çıkmasını isterim! :) Yorumunuz için teşekkürler!
Açıkçası eski PHP tabanlı forumları düşünerek pek bir beklentim yoktu ama demo siteyi (https://tsboard.dev) görünce fikrim değişti. Kalitesi gerçekten çok iyi.
Bence böyle özellikler gerekli olabilir!
Editörü kendiniz mi geliştirdiniz? Vay be. Sanırım bir editör motoru(?) kullanmışsınızdır ama yine de inanılmaz bir ustalık hissi veriyor.
Yorumunuz için teşekkürler! tsboard.dev sitesinin kalitesini beğenmeniz için ayrıca teşekkür ederim. :)
Bahsettiğiniz SSR desteği için yol haritasını iki aşamaya bölerek hazırlamayı denedim; önce geçici çözümü uygulayıp, ardından sonraki sürümlerde CSR ile SSR yöntemlerini uygun şekilde harmanlayarak geliştirmeyi düşünüyorum. Performansı yeterince korurken SEO açısından daha iyi optimize edebilmek için her şeyden önce benim de daha çok şey öğrenmem gerekiyor, bu yüzden biraz daha zamana ihtiyacım olacak gibi görünüyor. Vazgeçmeden istikrarlı biçimde devam edersem, ben de başka değerli geliştiricilerle tanışıp daha hızlı öğrenebilir ve belki yardım da alabilirim diye umut ediyorum. :)
Giriş yapmamış kullanıcılar konusu ise, TSBOARD'u yaparken geliştirme süresini kısaltmak ve tasarımdaki sadeliği korumak için başlangıçta değerlendirilmemişti; ama bunu biraz daha düşüneceğim! Bu yanıtı yazdığım şu noktada, misafir kullanıcıları desteklemek için çok fazla değişiklik gerekiyor gibi göründüğünden şimdilik zor görünüyor. ^^;;;
Editörü tiptap editörü temel alarak adım adım oluşturdum ama düşündüğümden çok daha fazla zaman aldı. Eski hatırladığım kadarıyla CKEditor muydu neydi...? Öyle bir şeyi alıp doğrudan kullanmak mümkün gibi geliyordu, ama bugünlerde işler böyle tek tek Lego dizer gibi ilerliyor. T_T Buna bir de TSBOARD işlevlerini entegre etmeye çalışınca daha da çok uğraştım. Yaparken hissettiğim şey şu oldu: keşke biri şu editörü hazır yapsa. :) Eğer tiptap tabanlı, işe yarar bir editöre ihtiyaç duyan biri olursa, TSBOARD'da uyguladığım kodlara bakarak daha hızlı ve daha kolay geliştirme yapabilirsiniz diye düşünüyorum.
Beklediğimden daha çok kişinin olumlu bakması, tanıtım yazısını yazarken "yazsam mı yazmasam mı" diye düşündüğüm zamanların boşa gitmiş gibi hissettirecek kadar sevindirici oldu. TSBOARD'un eksiği çok, ama yine de desteğinizi bekliyorum!
Geliştirmeye PHP ile başlamıştım; ben de TypeScript’e kapılıp pek çok şey denediğim bir dönemdeydim.
Bir şekilde bir yakınlık hissettim, bu yüzden memnun oldum.
Memnun oldum! Ben de benzer bir yolculukta bir şekilde ilerliyorum. haha PHP dili hâlâ orada burada epey eleştiriliyor, bu da şahsen beni üzüyor; ama TypeScript kullanınca biraz eleştirilse de sorun olmayabileceğini düşünüyorum. haha Umarım siz de TypeScript ile bol bol eğlenceli projeler yaparsınız. :)
Gerçekten çok harikasınız 👍
Teşekkür ederim!! Eksikleri olan bir proje olsa da güzel görmeniz beni de mutlu ediyor. haha
Bir gün TSBOARD'a ihtiyaç duyduğunuzda onu güvenle önerebilmek için daha da çok çalışıp geliştirmeye devam edeceğim. :)
Böyle bir eksiklik hissediyordum.. teşekkürler.
Yorum bıraktığınız için teşekkür ederim! Belki bir gün TSBOARD’a benzer bir web programına ihtiyacınız olursa, lütfen bizi hatırlayıp bir test ederseniz çok sevinirim. İhtiyacınız olduğunda daha rahat kullanabilmeniz için geliştirmeye var gücümle devam edeceğim!
Oo...! PHP dönemindeki sirini board’u hatırlıyorum, gerçekten çok uzun zaman olmuş.
O zamanlar ben de Siriniboard skin’leri geliştirir, güvenlik açıkları bildirirdim; umarım iyisinizdir :)
Koda bakarken hissettiğim şey şu oldu: sunucu tarafı kodları bir şekilde epey PHP hissi veriyor haha (PHP hissiyatlı JS kodu?)
Başka birinin de söylediği gibi, CSR ise SEO vb. açısından dezavantajlı olma gibi bir eksisi olacaktır.
Bu noktaların iyi şekilde tamamlanması güzel olur diye düşünüyorum haha
Ah, demek ki geçmişte bana yardım eden iyiliksever kişi sizmişsiniz! Böyle yeniden karşılaşmak çok sevindirici haha
Ayrıca o zaman da şimdi de herkesin aklına gelebilecek sıradan şeyler yapıyormuşum gibi geliyor, bu yüzden biraz utanıyorum. ^^;;
Backend kodunda, dediğiniz gibi, PHP tarzı izler var haha Ben de bazen PHP'de kullandığım fonksiyonlar JS'te yok mu diye her seferinde aratıyorum; sonra da benzer isimlerle fonksiyon adı verip kullanabiliyorum. JS/TS koduna daha çok alışıp refactoring yaptıkça daha da iyileşmez mi diye düşünüyorum. haha
SEO kısmını da söylediğiniz gibi geliştirmem gerekecek. Kısa düşünceme göre RSS gibi başka statik sayfalar eklemek olabilir; çeşitli şeyler denemeye çalışacağım.
Bu arada, PHP4 dönemindeki beni hatırlayan birilerinin olması gerçekten şaşırtıcı ve minnet verici! Aslında bu yazıyı yazıp yazmamak konusunda çok düşündüm. haha;; Daha fazla insana küçük de olsa yardımcı olabilmek için çabalamaya devam edeceğim. TSBOARD'a da bol bol sevgi gösterin!
Yazıyı görünce merak ettiğim birkaç şey oldu, o yüzden yorum bırakıyorum. (Koda bakmadım)
Backend'i neden Node.js compatible olarak geliştirmediğinizi merak ediyorum (bahsettiğiniz dezavantajları dengelemeye yetmeyecek kadar performans mı vermiyor?)
CSR ise SEO'yu nasıl ele almayı planlıyorsunuz? Topluluk tarafında arama kaynaklı trafiği de düşünmek gerekir gibi geliyor.
Merhaba! Yorum bıraktığınız için teşekkür ederim. (Aslında ilgisizlik içinde kaybolur diye düşünmüştüm, o yüzden gerçekten duygulandım)
Sorduğunuz konular benim de çok kafa yorduğum şeylerdi; sadece "demek böyle bir bakış açısı da varmış" diye okursanız sevinirim.
Bu arada, referans olması açısından söyleyeyim: PHP’den sonra gerçek hayatımda web geliştirmeyi bir kez bile sürdürmedim. Node.js devrimi yaşanırken de, React web dünyasını değiştirirken de pek ilgilenmemiştim; o yüzden bakış açım size biraz yabancı gelebilir. :)
TSBOARD’u ilk geliştirmeye başladığımda, Node.js tabanlı, benim bilmediğim ama zaten meşhur olan bir forum ya da blog ya da her neyse benim yapmak istediğime benzer bir şey mutlaka vardır diye peşin peşin varsaydım. Girişte de söylediğim gibi, gerçek hayatımda web geliştirme yapmam gerekmiyordu ve ayrıca ayrı bir side project de hiç yapmamıştım; sanırım bu yüzden daha da öyle düşündüm. Doğal olarak, "Node.js tabanlı bir şey zaten vardır; benim yeniden yeni bir şey yapmamın çok da anlamı olmaz" diye düşündüm. Madem yeni bir şey öğreneceğim, o zaman bunu Bun tabanlı yapayım dedim; bugünlere kadar gelen karar da bu oldu.
Performans açısından bakarsak, aslında benim hedeflediğim küçük ölçekli topluluk sitesi için (aynı anda 10’dan az kullanıcı) Node.js’in fazlasıyla yeterli olacağını düşünüyorum. Bun’ı değerlendirmeden önce Node.js + Hono tabanlı testler de yapmıştım ve açıkçası bence orada da bir sorun yoktu. Ama Bun’ın sunduğu ezici performans ve buna ek olarak Bun tabanlı ElysiaJS’in performansı gerçekten çok etkileyiciydi; bundan vazgeçmek istemedim. Zaten birilerinin Node.js tabanlı çok iyi bir forum sistemi yapmış olduğunu düşündüğüm için, o hayali forumla rekabet edeceksem daha yüksek performansa ihtiyacım var diye düşündüm ve sonuçta Node.js uyumluluğunu bırakıp Bun’a bağımlı bir tasarıma yöneldim. (Şimdi biraz pişmanım. Node.js tabanlı, GNUBoard ya da Rhymix ya da XE gibi meşhur forum sistemleri yokmuş... galiba. Ben mi bulamadım acaba??)
Söylediğiniz şey tamamen doğru. Arama trafiği almak istiyorsanız, sonuçta Google botunun içeriği okuyabilmesi ve arama eşleşmesi yapılabilmesi gerekiyor. Bu kısmı henüz uygulamadım ama kullanıcı isterse, sanki bir RSS feed sunuyormuş gibi en güncel içerikleri ayrıca statik biçimde paylaşmak nasıl olur diye düşünüyorum. Dışarıya JSON formatında açarsak, toplayıcıların veriyi daha rahat güncelleyebileceğini de düşünüyorum. Bunu biraz daha değerlendireceğim. (Önce RSS düşünmüştüm ama artık çoğu kişi bunu kullanmıyor gibi görünüyor?? Galiba web’den çok uzun süre uzak kalmışım T_T)
SEO için alınacak önlemlerden ayrı olarak, CSR’ye gitmemin nedeni sunucu yükünü daha agresif biçimde azaltmak istememdi. Yakın zamanda ortaya çıkan Damoang sitesinde de (bu topluluğun adını böyle açıkça yazmak sorun olur mu bilmiyorum) trafik yükünün ve sunucu maliyetinin oldukça yüksek olduğunu biliyorum. Bir community builder düşündüğümüzde SEO da önemli ama önce maliyetle doğrudan bağlantılı sorunları çözmem gerektiğini düşündüğüm için önceliği CSR’ye verdim. PHP’yi hâlâ seven biri olarak aslında SSR bana daha tanıdık geliyor; ama istemci tarafı biraz daha aktif biçimde işlem gücü kullanırsa sunucu da biraz daha rahatlar diye düşündüğüm için bu seçimi yaptım diyebilirim.
Umarım merak ettikleriniz biraz olsun açıklığa kavuşmuştur. Ayrıca benim yaptığım seçimlerin artıları ve eksileri oldukça net; o yüzden TSBOARD’un tek doğru cevap olduğunu düşünmüyorum. Çeşitli trade-off’ları hesaba kattım ve bunlar benim sınırlı düşüncemle verdiğim kararlar oldu diyebiliriz. İleride TSBOARD daha yaygın kullanılırsa, elbette fikrimi değiştirip başka denemeler de yapabilirim. :)
Tasarım zaten CSR’a uygun yapıldığı için, bunu SSR’a çevirmek neredeyse yeniden geliştirme düzeyinde bir çalışma gerektirecek gibi görünüyorT_T
Son dönemde arama tarayıcılarının JS tarafında da bir miktar iyileştiği söyleniyor ama... yine de plain HTML’in yerini tutabileceklerini sanmıyorum.
Normal tarayıcılar için CSR kullanıp, arama botları (GoogleBot, Yeti vb.) söz konusu olduğunda SSR uygulama yöntemi de olabilir.
Bana göre ise böyle bir yöntem geçici bir çözüm gibi duruyor; sonuçta SEO’yu iyi desteklemek için doğru cevap yine SSR olabilir.
CSR olsa bile, istek miktarı sonunda arttığında backend tarafında yük oluşacaktır; bu yüzden cache tasarımı ve çeşitli mekanizmalarla backend yükünü azaltmak daha doğru bir yaklaşım gibi geliyor ^^;
TSBOARD için, belirttiğiniz gibi her şey CSR kriterine göre yapılmış durumda; bu yüzden en azından v1.y.z sürümünde yalnızca CSR kriteriyle ilerlememiz gerekecek gibi görünüyor. Biraz iyileştirme düşünürsek, yapı gereği tüm gönderiler ilk ekranda göründüğü için yalnızca ilk ekrana SSR uygulayabiliriz ya da söylediğiniz gibi botların plain HTML tarafını crawl edebilmesi için ayrı bir sayfa ekleyebiliriz sanırım! Bu iyileştirmeleri v0.9.z sürüm bandında yansıtmaya çalışacağım!
Ah, bir de TSBOARD CSR yöntemiyle olduğu için aramalarda çıkmıyor! diye düşünebilecek kişiler olur mu diye biraz endişelendiğim için şunu da belirtmek isterim: Googlebot tarafında, CSR yöntemiyle oluşturulmuş web sitelerinin içeriğini de alabilecek kadar artık epey gelişme sağlandığı söyleniyor! (Google olunca mümkün...?) SEO açısından dezavantajlı bir yöntem olduğu kesin, ama hiç olmuyor demek değil; bu yüzden fazla endişe etmenize gerek yok gibi görünüyor.
CSR ve SSR'nin yanı sıra ikisinin arasında bir yerde duran yöntemler de olacaktır; bu yüzden biraz daha düşünüp SEO'yu iyileştirme hedefiyle v2.0.0 yol haritasını da oluşturmaya çalışacağım. (Şimdilik daha uzak bir konu tabii haha) Tavsiyeniz için teşekkür ederim; eksikleri olan bir proje olsa da TSBOARD'u iyi karşılamanızı rica ederim!