Yazılımın ilk 250 günü - Part 5
12 dk okuma
41. Gün
Bugün daha önce çalıştığımız ve Javascript’te kodladığımız bir programın PHP haline dönüşümünü inceledik, yaptık. Açıkçası PHP’ye dönüştürmek zor değildi. Aslında hiçbir şey zor değil(en azından gördüklerimiz kadarıyla). Sadece hâlâ yeni olduğumuz için ve ilk defa gördüğümüz terimlerden dolayı zorlandığımızı düşünüyorum. Bugünün en güzel noktası daha önce yaptığımız bir çalışmaya katkı yapmamızdı. Sil baştan bir yapı kurmamız beklenseydi daha zor olurdu evet. Bundan sonra zorlaşacağını düşünüyorum tabii ki, çünkü bu sadece alıştırma gibiydi. Terimlere, PHP’de yazmaya aşinalık olsun diye gibiydi sanki. Ne, ne işe yarıyormuş çalışması gibi. Server tarafı olduktan sonra (ne kadar optimize şaibeli olsa da), HTML-CSS-Javascript ile birleştirmeye çalıştım. Javascript kısmından önce form işlemlerinin nasıl yapıldığı konusunda biraz tıkandım. Sonrasında sizin de yardımınızla o problemi çözdüm. Server tarafında işlem yapınca hiç bir problemle karşılaşmasam da, client’tan veri geldiğinde işlerken bazı sorunlar oluyor. Onu kendime “future development” olarak koydum (future derken, yarın olursa da şaşırmam).Bugün ne mi öğrendim?
PHP’deki temel fonskiyonları öğrendim. Array_search()’ü, isset()’i, array_push()’u, in_array()’i, count()’u, array_diff()’i, unset()’i, array_values()’u,array_column()’u kullandım. Biraz fazla şey yapmak istediğim için hepsini tam öğrendim mi? Biraz daha tekrar yapmam gerekiyor. Ama kullanırken her şeyin neden, nerede , ne ile, nasıl kullanılacağını anlayarak yaptım.
Switch-case, if-else-else if, for, foreach yapılarının hepsini kullandım. Javascript’le tek fark foreach’te bulunuyor. Diğer yapılar tamamen aynı. PHP’de associative array, class, fonksiyonları oluşturdum.
Son olarak server tarafını client ile daha şık bir şekilde bağlamak için HTML kısmını koduma ekledim.
Asıl düşüncelerim: Çok daha fazla çalışmam ya da tekrar yapmam gerekiyor. Javascript ile yapabileceğim şeylerin sınırını bilmesem de hala çok sınırlı ve sığ bir noktadayım. PHP’de evet bir şeyler yapmaya çalıştım ama bunların tekrarını ve sonrasındaki çalışmalarımız için de iyi bir çalışmayı kesinlikle yapmam gerekiyor.
42. Gün
Bugün bazı şeylere çok takıldım. Kodun bir yerinde bir hata alıyordum, düzeltmeye çalışıyordum, çalıştım, ama orayı hâlâ düzeltemedim. Sanırım zinde bir kafa ile tekrar bakmam gerekecek ama onu yapmamak üzdü. Ne miydi? Kullanıcıdan verileri “POST” metodu ile aldık. Onu bir “.txt” uzantılı dosyaya yazdık. Dosyaya yazma ve dosyadan okuma işlemlerini yapabiliyorum. Dosyaya yazılan elemanların, her yeni eleman “takımı” girişinde yeni bir satıra atlaması; satırların her birinden yeni bir array olarak oluşturma(multidimensional oluyor tabii ki toplamda), ve oradan da istediğimiz kısmı array_column ve in_search ile çekilmesi kısmını tamamladım. Belki uzun bir yoldu ama oldu. Fakat işlemlerin devamında bazı mantıksal hatalar yaptım sanırım ki çalışmadı. Yarın ilk işim bunu çözmeye çalışmak olacak.Bugün öğrenilenler: GET ve POST metotları ile kullanıcıdan bir verinin çekilip, onun request’ine karşılık response gönderilir bunu öğrendim diyebilirim. HTML, CSS taraflarında pratiklerimin faydasını bugün hissettim. Çünkü en basitinden bir şeyleri hızlıca tasarlayabiliyorum (Amacımız PHP tarafı olduğu için sadece görünümde işimize yarayacak kısımları yaptım aslında).
43. Gün
Bu yazacaklarım sizin zamanınızı gereksiz alıyor olabilir, okumazsanız ya da içinizden/dışınızdan eleştirirseniz anlarım. Biraz daha bilgi ağırlıklı şeyler yazmak istedim fakat iş esnasında bilgi ve yoruma dayalı çıktıları sağladığımı düşünerekten ve yaptığımız görevlerde kullandığımız şeyleri özetleyen ya da örnekleyen “cheatsheet”lerimi tuttuğum için bugünlük de biraz fazla yorumlu bir gün sonu raporu yazıyorum. Bir de ilk başladığımızda SEO’ya günde bir saat bakın demiştiniz fakat ona da bakmayalı uzun süre oldu, kodlamaya kafa yorduğumuz için. O da hep aklımda duruyor.Öncelikle, bugün çok verimli geçti. Dün yaşadığım problemi sabah rahat bir kafayla çok daha basitçe halledebildim. PHP kısmında yapmam gerekenleri tamamladıktan sonra, sizin de yönlendirmenizle SQL, MySQL, PHP- Veritabanı arasındaki iletişim gibi konuları araştırdım. Açıkçası direkt üstüne kendi yazdığımız kod ile birleştirmeyi deneyecektim fakat yarına bıraktım. Bugünün tek kötü yanı dün gece biraz üşütmüş olmam ve gün içinde hâlsiz hissetmemdi. Enerjimi biraz düşürdü ama yapmam gerekenleri tamamladım. Veritabanından sorgu yapmayı, PHP’den veritabanına bağlanmayı, temel olarak PHPMyAdmin’i açmayı ve biraz kurcalamayı, kendime bugün görev edindim. Cookie nasıl oluşturulur ve tutulur, kullanıcı bilgileri gelen form bilgilerinden çekildikten sonra veritabanına nasıl kaydedilir örneklerine baktım. Konsepti biraz oturtabildiğimi düşünüyorum (okuyarak ve inceleyerek bir yere kadar tabii ki, yarın iş üstünde pratik vakti olacak). Şirkete gelmeden önce de az da olsa veritabanına bağlanma gibi konulara bakmıştım, daha çok youtube’tan izleyip kendim de bir şeyler deneyerek. Elbette o da işe yarıyordur fakat dokümanlardan ve yazılı kaynaklardan okumanın ve anlamanın, üstüne uğraşmanın da epey katkısı varmış. Üniversitede kitaplar ve çıkmış sorular olsa da bazen Hintli veya Batılı hocalar ya da bilgili kişilerden dinleyip de öğrendiğim de çok oluyordu. Direkt kitabı tarayıp istediklerimize de erişiyorduk. Bunu anlatmam gereksizdi sanki ama eklemek istedim. Şu an yaptıklarımızda bu şekilde olduğu için çok zorluk çektiğimi sanmıyorum, özellikle bu bilgi bolluğu içinde. Bazen kendimi biraz fazla kaptırıyor olabilirim ama bu da beni kamçılıyor. Açıkçası 1.5 aydır yaşadığım her şey beni kamçılıyor çalışma konusunda. Sanki kamçılanmak için yer arıyorum gibi hissediyorum. İş öncesi süreç, işteki süreç, insanlar, severek yaptığım iş(ki iş gibi de değil hobi gibi hissediyorum. Bu tabii ki sadece yazılım üstüne çalıştığımızdan değil, ortamın yani sizin de sunmuş olduklarınızla sağlanıyor), kazanılan para (aileye bağımlılığı ya da yükü bitiriyor), gelecek ve geçmiş üstüne düşünceler, çalıştığım alanda dünya çapında insanların katkıları ve onların yaptıklarını görünce gözlerimin içinin gülmesi, kendimi de geliştirip hem kendime, hem çalışıp para kazandığım ve sorumlu olduğum ve ayrıca bana yatırım yapan insanlara, hem de diğer konusunda uzmanlaşan geliştiriciler gibi bu “community”ye bir katkı sağlama ihtimalimin olması beni etkiliyor. Olumlu yönde tabii ki de.
Bugün gün sonuna doğru aklımda sadece “Buğra bugün bitmeden SQL sorgusu yazmayı kısa vadede işine yarayacak kadar öğrenmelisin ve PHP’den veritabanına bağlanıp, client’tan gelen veriyi tutmalısın. Bunun üstüne de client’a cookies gönderip onun da id’sini ya da session bilgisini tutmalısın” gibi düşünceler geçti. Ama acele edecek bir konu olmadığı için sakince yarın başlamak istedim.
Bugünlük bu kadardı.
44. Gün
Ben aslında yavaş öğrenen bir insan olduğumu düşünüyorum. Yani çok zeki olmadığımı, ama çok çalışarak istediğim sonuca ulaşacağıma inanıyorum. Neyse insan faktörü ile alakalı bir şey yazmadan konumuza geleyim. Çünkü işin içine insan girdiğinde çok fazla parametre oluyor ve bu şu an benim değil sosyologların, psikologların, ve diğer sosyal bilimcilerin uzmanlık alanları.Bugün genel olarak araştırma ile geçti. Aslında çok hızlı bir şekilde veritabanına PHP ile bağlanıladabilirdi ama biraz fazla okudum. Araştırdım. Veritabanından bir satır silence, sonra eklenecek satırların neden silinen satırın primary key’inden sonraki sayı oluyor ona pek anlam verememiştim. Hâlâ daha biraz mantıksız geliyor. Ben bir kullanıcı sildiysem onun yerine artık başka bir kullanıcı o id’yi alabilmeli düşününce. Ama sistem buysa, buna göre çalışıp çok da sorgulamamak lazım belki de.
Bugün en etkilendiğim konu veritabanı ya da PHP konusunda değil, mesai sonrası baktığım “metaverse” kavramı ile ilgiliydi. Ütopik mi yoksa Black Mirror gibi distopik bir evrene mi sebep olur bilinmez ama okuması keyifliydi üstüne yazılan yazıları, hayalleri, yatırımları.
Bugün en keyif aldığım konu ise veritabanına PHP’den ulaşıp dilediğim gibi işlem yapabilmemdi. SQL sorgusu da aslında biraz pratikle rahatça yapılabilecek bir şey çünkü her sorgu aslında bir cümle gibi. Çok basitleştirilmiş kullanıcı (bizim) için. O yüzden pek zorluk çekeceğimizi sanmıyorum. Kullanıcı verilerini kaydettim. Client’tan gelen veri ile database’dekini karşılaştırıp işlemler yapabildim. Sonrasında bilgi güncelleme gibi konulara girecektim ki kullanıcıya session id ya da genel anlamda cookies göndermem gerektiğini fark ettim. Sonra onun üstüne de biraz araştırma yaptım, sebeplerini, nasıl kullanıldığını, ve örneklerini. Daha önce de baktığım şeylerdi aslında ama aşırı hızlı tempoya şu an ihtiyaç olmadığı için ağırdan almak istedim.
Bugün en rahatlatan konu ise şuydu: İki gün önce yaptığımız “.txt” uzantılı dosyayı veritabanı gibi kullanıp veri kaydetme işleminden çok çok daha kolaydı bugün yapılanlar. Arasında bu kadar fark olduğunu bilmiyordum. “.txt” dosyasından bir veriyi almak biraz daha uğraştırıcıydı. Oysa burda uğraştıracak bir şey yoktu. SQL sorgusu zaten basit bir cümle olduğu için yazımı çok daha kolaydı.
Yarın farklı bir görev verilmezse, client’a cookie (daha doğrusu session id) gönderip, onu tanıyıp (stateless kavramını esneterek) veritabanı ile işlemler yapmaya çalışacağım.
46. Gün
Bugün de veritabanı ve PHP ile ilgili çalışmalarla geçti. Ürün bilgilerini ve ürünlerin ait olduğu kategori bilgilerini veritabanına ekledik ve onlar ile ilgili işlemler yaptık. Switch-case konusunda gerçekten over-engineering denilen kavramı sonuna kadar yaşatmışım. Bunu görememem bir hataydı. Hem object oriented hem de procedural şekilde veritabanı ile ilişki kurmam da hatalıydı. Kullanıcıdan veri alışverişinde sadece prepare ve object-oriented yapı kurmam gerekli olur diye öyle yapmıştım fakat bundan sonrasında buna kesinlikle dikkat edip aynı hataya düşmemeye çalışacağım. Bunlar dışında bugün verilen görevi yerine getirebildiğimi düşünüyorum. Kod okur yazarlığımın da geliştiğini düşünüyorum ayrıca. Üniversitede dersler genelde sadece dersi verip geçme üstüne kurulu olduğu için ve çıkmış sorular çalışarak konuya özel bir ilgi duymuyorsa insan sadece ezber yaptığı için genelde bir şey öğrenmeden ya da edinmeden tamamlıyor süreci. Oysa şu 2 ayda birçok şey öğrendiğimi düşünüyorum. Çünkü ne çıkmış soru vardı, ne de ders geçme derdi. Görevler verildi. Gerekli bilinmesi gerekenler anlatıldı. Ve ben de üretmeye çalıştım. Elbette copy-paste’ler ve başka insanların yaptıklarından yaralanmak vardı bu süreçte. Tekerleği yeniden icat etmedim fakat tekerleğin hangi arabaya nasıl takıldığını, hangi tekerlek takıldığını, tekerleğin ne işe yaradığını öğrendim. Ve ben bundan çok memnunum. Umarım bir ilüzyon değildir yaşadığım çünkü verilen emek ve çalışmanın gerçekten bir karşılığı olduğunu hissediyorum.47. Gün
Bugün gerçekten de en verimsiz geçen gündü. Aklıma takılan sorunlardan dolayı. İyi ki konuştuk. Gün içinde ne yaptım dersem. Görev olmadığı için genel olarak bol bol bir şeyleri araştırdım, karşıma PHP ile ilgili bilmediğim çıkan ve anlayabileceğim ne varsa. Mesela veritabanına kullanıcıların şifrelerini eklerken password_hash() yapısı ile şifreledim. Sonrasında kodumun her yerinde şifre ile ilgili kullanılan her kısmı buna göre düzelttim. Neden bunu kullandın derseniz onca hyapı arasında; sha1,sha2, md5, crypt() gibi ve daha birçok yapıyı araştırdım. Hashing ile oluşturulan kriptografi ile alakalı farklı kütüphanelerin de yine PHP için kullanılabileceğini öğrendim. Fakat en genel manada md5 veya sha1’in içerdiği hash yapısının çözülmesi çok daha kolay olduğu için günümüz teknoloji ve ekipmanları ile, hash yapısına ayrıca “salt” diye bir şey eklendiğini öğrendim. Bunu manuel olarak girmek veya oluşturmak mümkün olsa da PHP için konuşacak olursak, built-in olarak PHP içinde bulunan password_hash()’in otomatik olarak rastgele bir salt yapısı atayıp kullandığını öğrendim. Ve gerek PHP manual’ında gerek farklı sitelerde de en çok tavsiye edilen şifreleme yöntemlerinden biri olduğu için bunu kullandım. Başta farklı hash yapılarını iç içe kullanırsam çok daha güvenli olur diye düşünmüştüm fakat bunun zararları olduğu söylenilmişti birkaç iyi kaynakta. Doğruyu söyleyeyim o zararları da okumuştum ama biraz havada kalmış.Günün bir kısmında ise MVC yapısını araştırayım dedim. Ama konu hakkındaki okuduklarım ve anlayabildiklerim tam oturmadığı için bu konuya sonra tekrar bakıp güzelce yazacağım.
Günün başka bir kısmında da PHP aracılığı ile ismini veritabanına, kendisini bir dosyaya kaydettiğim fotoğrafı, client’a göstermeye çalışmaktı. Bunu yapamadım. Biraz denedim olmadı fakat yine deneyeceğim.
Tekrar teşekkür ederim, aslında hiç de ihtiyacınız olmasa da bugün bizimle aklımıza takılan konularda ilgilendiğiniz ve detaylı olarak konuştuğunuz için toplantı odasında.
48. Gün
Günün ilk kısmında tekrar hash metodlarına, ve veritabanına adı eklenen dosyanın nasıl client’a gösterileceğine bakmıştım. Bunları tamamladım. Sonrasında kendime bir görev vermek istedim. Kullanıcı bir ürünü seçip sepetine eklemek isterse, sepetteki ürünleri sepetim.html dosyası ile gösterip bir de toplam tutarı ve sepetteki ürünler üstüne işlemlerin nasıl yapılacağına bakacaktım. Biraz araştırdım ve konu hakkında çok güzel bir örnek buldum. Class-object yapısı içinde işlemlerin yapıldığı bir örnekti. Konsepti oturtup o örneği inceleyecekken yeni görev verildi. Sonrasında ne yapacağım üstüne bol bol düşündüm. Daha önceki ödevlerde yapmış olduğum header’ı çok beğenmediğim için tekrar düzenledim. Yine içime tam sinmedi fakat şimdilik yeterli diye düşünüyorum. Yarın content kısmına giriş yapıp html ve css kısımlarının ana konseptini çıkarabilmek istiyorum. Beğenmediğim kısımları tekrar düzenlerim böylece. Bir iskelet oluşturduktan sonra, ve tasarım iyi görünürse sonrasında javascript ile bir şeyler eklemeyi sonraki güne bırakacağım. Kısacası yarınki en büyük amacım, genel manada istediğim yapının iskeletini çıkarmak. Sonrasında o iskelet üstünde iyileştirmeler yapmak.Genel olarak tasarımı nasıl yapacağımı ve farklı sitelerde nasıl yapıldığına bakarak geçti aslında bugün. Şeye çok şaşırdım. Dünyanın en büyük e-ticaret sitesi olan Amazon’un tasarımı belki iyi olabilir fakat içeriği aşırı karışık. Hem amazon.com hem de amazon.com.tr sanki artık pr, güvenilirlik ve tanınmışlıktan ekmek yiyor gibi geldi. Farklı sitelerde en beğendiğim tasarım açıkçası hepsiburada’nınki oldu. Fakat bazı yerlerde trendyol’un yaptıkları da güzeldi. Açıkçası genel kullanıcı kitlesine hitap etmek gerektiği bariz ortada. Sanatsal bir yaklaşımla mükemmeliyetçiliği yakalamaktan çok, kullanıcı nasıl rahatça “bizden alışveriş” yapacak ve hiç zorlanmayacak onu anlamalıyım aslında.
Bugünlük bu kadardı.
49. Gün
Bugün sadece iki tane karosel yapmaya çalıştım. Birincisi oldu çünkü o sadece yön okları, alt tarafında bulunan yer imleci tarzı noktalar ve tabii ki fotoğraflardan oluşuyordu. Bunu birkaç kez yaptığım için zorlanmadım. Ama ikincisinde farklı bir şey denemek istedim. Sürüklenebilir bir karosel hiç yapmamıştım ve bu sefer denedim. Yapabildim mi? Kısmen evet, ama hâlâ tam çalışmıyor. Süre kısıtı olduğu için şimdilik orayı bırakıp sayfanı geri kalan kısımları yapacağım.Kısaca bugün yapılanlar: Birinci karosel ile güncel ve ilgi çekecek ürünleri, markaları, ya da listelemek istediklerimizi göstermek istedim. İkinci karosel ile kullanıcıya indirimli ve popular ürünleri gösterebileceğimizi düşündüm. Ve son olarak da sadece markaların logolarının bulunduğu bir ‘div’ oluşturdum. Hiçbir geçiş ya da başka bir özelliği olmasa da en popular, en çok bize kazandıran, en trend olan veya kullanıcının en sık aradığı markaları listelemek istedim.
Yarın ne yapılacak?
Kategori, fiyat, marka gibi filtre araçlarını ekleyeceğim. Sonrasında da tabii ki ürünlerimizi. Birçok şey öğrendiğimiz için ve Google devasa bir kaynak sağladığı için; nasıl bir tasarım olmalı sorusuna araştırdıkça farklı yanıtlar alıyorken, daha da aklımın karışmaması için basitçe bir şeyler tasarlamaya çalışacağım. En temel iskeleti oluşturduktan sonra üstüne eklemeler, düzeltmeler yapmaya çalışacağım.
50. Gün
Bugün ürünleri filtrelemek için olan kısımların tasarımını tamamladım. Bazı yerlerdeki ufak sorunlar fazla zamanımı aldı fakat gün sonunda ortaya çıkan sonuçtan şahsi olarak memnun kaldım. Flex yapısını kullanmam gereken neredeyse her yerde kullandım. Bazı yerlerde ‘position’ attribute’ünü kullanmam gerekti. Ürünlerin gösterildiği “card”ların birinin iskeletini oluşturdum. Yarın onun üstünden ilerleyip görselin bütününü ve eksik olan her şeyi toparlamak istiyorum. Dün carousel’de çok uğraşıp tam istediğim sonucu alamamış olsam da bugünkü kısımlar daha kolay olduğu için daha çabuk bitti.Filtreleme kısmının tasarımında sadece bir yerde Javascript kullanıldı. O da çok karışık olduğu için açıkçası copy paste aldım. Fakat geri kalan hepsi kendi emeğim diyebilirim. Header kısmını tekrar yazmıştım ilk görev verildiği gün. Fakat footer kısmını eskiden yazdığım kod ile oluşturacağım. O kısımda gereksiz çok ayrıntı olabilir çünkü ilk CSS HTML örneklerimizdendi. Fırsat bulabilirsem orayı da düzelteceğim fakat önceliğim bizden asıl istenen kısım.