@okuyanesnaf 2022 full, otomatik mazda 2 önerebilirim. 1.5 skyactive-g atmosferik motor şehir içi 6-6.5 lt arası yakıyor. Konforu fena değil. Donanım olarak şerit takip, kör nokta, trafik algılama, hız sabitleme, koltuk ısıtma, led farlar, kablosuz carplay, geri görüş kamera, park sensörü vs
@bzd1907@platoon7808 Longines 1938 Limited Heritage - koleksiyonumdaki en sevdiğim saatlerden. Band of brothers filmindeki Type A-11 saatine de benzediği için ekstra hoşuma gidiyor :)
@gy3310 Corsa d 1.3 cdti 75, 90 hp olanları var. özellikle enjoy ve enjoy 111. Yıl olanları tercih sebebidir. Çok bir özelliği yok ama şehir içi seridir. Boya haricinde kroniğini duymadım. 5 yıl kullanmıstım. Uzun yol da yaptım oldukca yeterli bir araç. 111. Yıl olanda hız sabitleme var
@sanexupery@DokumacMustafa İnsanları yanlış bilgilendiriyorsun. Neye dayanarak hiçbir şey alamaz vs diyorsun? Experle vs alakası yok. Direkt gizli kusurdan dava açacaklar. Bilir kişiler zaten bu süreçte rapor tutuyor. Aynı süreci yaşadım. İnsanlara yanlış bilgi vermeyin.
@DokumacMustafa Yorumlarda hiçbir şey yapamazsın diyenler vs olmuş. Bu gizli kusur olarak geçiyor. Hemen dava açıyorsun. Experle vs alakası yok. Bana kemerleri patlak araç sattılar. Exper yapıldı ama göremedi. Adam experi vs bahane etti. 1,5-2 yıl dava oldu. Tüm masrafımı, değer kaybımı aldım.
https://t.co/twJBEf7mxx Nasıl Geliştirildi?
Öncelikle uyarayım, çok uzun bir yazı olacak. Ama yapay zekayla uygulama geliştirirken de bol bol okumanız ve yazmanız gerekeceğini aklınızdan çıkarmayın.
Son bir yıldır çoğu geliştirici gibi bir şeyler öğrenmek ya da yazılımla ilgili problemlere çözüm aramak için ChatGPT'yi Stackoverflow, GitHub ve Reddit gibi topluluk sitelerine kıyasla daha sık kullanıyordum zaten. Ancak karmaşık bir projeyi baştan sona yapay zekayla geliştirme konusuna hep mesafeliydim. Gerçi yapay zeka destekli kod editörleri de kısa bir süre öncesine kadar bu alanda henüz pek yeterli sayılmazdı.
Yazılım geliştirme zor ve karmaşık bir süreçtir. Özellikle iyi anlaşan bir takımın parçası değilseniz ya da sadece size atanan görevleri tamamlamanız beklenmiyorsa, özetle projenin tüm sorumlulukları sizin üzerinizdeyse çoğu zaman "Yanlış meslek mi seçtim acaba" duygusuna kapılırsınız. Bu duygu full-stack, hatta sistem mimarı olarak çalıştığınız işlerde çok daha yoğundur.
Açıkçası mesaili çalışan ve gününün çoğunu şirketinin işleriyle uğraşarak geçiren bir geliştirici olarak kendi fikirlerimi ve yan projelerimi tasarlayıp kodlamaya çoğu zaman ne hevesim ne de enerjim yeter. Bana güzel gelen ve içime sinen fikirlerim olsa da projeleri hayata geçirmeyi uzun süre erteliyor, erteledikçe de fikrin cazibesinden uzaklaşıyorum. Kaldı ki bizim meslekteki en sıkıntılı aşama da hep "başlangıç" olmuştur.
Birkaç hafta önce yapay zekayla sıfırdan uygulama geliştirilebildiğine yönelik paylaşımları daha sık görmeye başladım. Özellikle o ana dek yapay zeka destekli geliştirme ortamlarına mesafesini korumuş bir yazılımcı olarak "Composer" denilen yeni özellik ve bazı modellerin "Agent" modunda projeyi analiz edip komut satırını kullanarak bir şeyler üretebildiğini öğrenmek birden "Artık zamanı geldi" diye düşünmeme neden oldu.
Composer moduna sahip kod editörleriyle yaptığım ilk denemeler pek de iç açıcı değildi. Örneğin Windsurf ile adım adım basit bir CRM geliştireyim dedim ama projeyi basit tutmaya yönelik tüm uyarılarıma ve "Fatura, genel muhasebe, şu bu olmayacak, sadece temel girdi/çıktı ve stok takibi istiyorum" şeklindeki yönlendirmelerime rağmen kendi bildiğini okuyup sipariş onay süreçlerinden e-fatura entegrasyonuna kadar -çoğu çalışmayan- birçok özelliği acele acele ve umarsızca eklemesi biraz tadımı kaçırdı.
Yine de hemen vazgeçmeyip çerçevesi ve içeriği daha net, niş bir projeyle ilerlemeye karar vererek "Geliştirilecekler" listemde bulunan en basit fikirlerden birini seçtim: Yatırım fonu getirisi hesaplama uygulaması. Basit diyorum, çünkü projeyi sadece birikim hesaplama aracı olarak hayal etmiştim. Tabii o zamanlar hayalimin, yapay zekanın analizleriyle kaçınılmaz ama hazırlıklı olmadığım bir şekilde https://t.co/twJBEf7mxx haline geleceğinden haberim yoktu.
Daha düşük maliyetli olduğu için öncelik verdiğim Windsurf ile yaptığım denemeler hayal kırıklığına uğrattığından yola Cursor ile devam etmeyi tercih ettim. Cursor'ın Pro aboneliğini iki hafta ücretsiz deneyebiliyorsunuz. Bu süre zarfında "500 fast premium request" hakkınız var.
Cursor'da chat/composer fark etmeksizin sohbete yazıp ilettiğiniz her mesaj, request sayılıyor. Yani deneme süresi bitmeden "fast premium request" hakkınızı tüketebilirsiniz ancak kalan sürede "slow premium request"ler sınırsız. Deneme süresi sonunda ücretsiz devam etmek isterseniz de her ay sadece 50 slow request hakkınız oluyor (projeyi hiç kod yazmadan, tamamen Cursor ile geliştirmeye çalışırsanız 50 request'i bir günde bitirmeniz mümkün).
Baştan belirteyim: Fonparam'da ufak düzeltmeler dışında hiç kod yazmadım. Konunun acemisi olduğumdan ilk birkaç gün MySQL ve bağımlıkların yüklenmesi, hatta kodların GitHub'a push edilmesi gibi işleri bile Cursor'a yaptırdığım için iki haftalık geliştirme sürecinde 2000 fast request yapmışım (slow request'ler ayrı). Bunun da maliyeti -ücretsiz verdiği 500 request'i düşersek- 60 dolar (Fonparam'a dönüp baktığımda bu bedele değdiğini düşünüyorum ama sonradan fark ettim ki projeyi daha düşük bir maliyetle geliştirmek elimdeymiş).
Yorulup sıkılmadıysanız devam edelim... Başta söylediğim gibi, bu tarz uzun ve detaylı yazıları okumakta zorlanıyor ve okurken sık sık dikkatinizi kaybediyorsanız yapay zekayla da işiniz hiç kolay olmayacak.
Fonparam, basit bir fikirden doğsa bile projenin temel gereksinimleri doğrultusunda veri toplamak, toplanan verileri modelleyip backend üzerinden iletilecek hale getirmek ve bunları kullanıcı dostu bir web arayüzüyle göstermek kolay bir iş değil. Yukarıda da anlatmıştım; bunu düşünüp durmak bile sizi projeye başlamaktan alıkoyabilir. Yapay zekanın ilk olumlu etkisi de psikolojik başlangıç yükünü son derece azaltabiliyor olması zaten.
Hazırlık aşamasında projenin katmanlarını belirledim: Veri servisi, API ve SPA. Windsurf ve Cursor ile yaptığım ilk denemelerde her şeyi tek seferde halletmeye çalışmanın sonuç vermeyeceğini (daha net bir ifadeyle yapay zekanın sık sık hayal görmesine neden olabileceğini) anladığım için daha en başta her birini ayrı ama bağlantılı uygulamalar olarak düşünüp üç dizin oluşturdum. Her dizin bir Cursor projesi, doğal olarak farklı Composer sohbetleri anlamına geliyordu. Tabii birazdan bahsedeceğim gibi bunun da kendi içinde bazı zorlukları var (üç farklı sohbetin, birbirinden habersiz üç ayrı geliştiriciyle çalışmaktan farksız olduğunu unutmayın).
Yeri gelmişken belirteyim, Composer modunda dizin ve dosya oluşturup birbiriyle bağlantılı kodları yazabilen ve terminal komutlarını çalıştırabilen tek model Claude. Ayrıca, isterseniz Cursor'a kendi Claude API anahtarınızı ekleyebiliyorsunuz (Windsurf'te şimdilik olmayan bir özellik).
Veri toplama aşamasında veri kaynağımın endpoint'lerini yazıp bu adreslere request yapmasını ve dönen response'ları yorumlamasını istedim. Evet, Claude'a projeden hiç bahsetmeden damdan düşer gibi söylediğim ilk şey buydu. Buna rağmen çektiği JSON verilerini olabilecek en doğru şekilde yorumlayıp "Yatırım fonlarının tarihsel verilerini kullanarak dönemsel fon getirilerini hesaplayacak bir uygulama geliştirebileceğimiz" sonucuna vardı.
Bahsettiği senaryoya göre devam etmesini söylediğimde sunucudan dönen JSON verilerine göre veritabanı şemasını oluşturduktan sonra belirtilen tarihten önceki tüm değerleri Cloudflare arkasındaki veri kaynağından alıp ilişkili tablolara kaydedecek, sonra da her gün sadece o günün verilerini çekip tablolara ekleyecek Python scriptini yazdı. Grup indekslerine varıncaya kadar veri kaynağıyla öylesine tutarlı bir MySQL veritabanı şeması oluşturdu ki sonuç karşısında ağzım açık kaldı desem yeridir. Beklemediğim kadar kısa bir sürede 5 yıllık fon verilerinden oluşan bir veritabanına sahip olmuştum.
Sonraki aşamada backend projesi için oluşturduğum dizine geçip yeni bir Composer/Agent sohbeti başlattım ve veri toplayıcı için çalışmaya başlarken yaptığıma benzer şekilde MySQL veritabanına bağlanıp tabloları incelemesini, veritabanındaki verilerle nasıl bir Node.js API projesinin geliştirilebileceğini analiz ettikten sonra yorumlarını benimle paylaşmasını istedim. Yine beklentimin üzerine çıkarak başarılı bir analiz sonucunda oluşturabileceği modelleri, route'ları ve controller'ları hızlı hızlı ama detaylı bir şekilde sıralamaya başladı. Hemen ardından "Bunu geliştirelim" dememle tüm Node.js projesini oluşturması arasında geçen süre en fazla yarım saattir.
Açıkçası ben API dökümantasyonu hazırlamasını hiç beklemiyordum ama endpoint'lerin alabileceği parametrelerden örnek response'lara varıncaya kadar Swagger ile detaylı bir klavuz hazırlamayı bile es geçmedi. İyi ki de es geçmemiş çünkü son adımda frontend'i geliştirmeye başlarken bu Swagger dökümanını kullandık.
Evet, yeni bir dizine geçip başlattığım üçüncü ve son Composer sohbetinde de ilk iki projede yaptığım şeyin bir benzerini tekrarlayarak Claude'a Swagger dökümanı gösterdim ve endpoint'leri inceleyip nasıl bir frontend uygulaması geliştirebileceğimizi yorumlamasını istedim. Artık o kadar da şaşırtıcı gelmemeye başlayan bir analizin sonucunda yapılabilecekleri sıraladı. Önerileri, geliştirmek istediğim uygulamanın üzerine çıkmış olsa da "Girdik bir kere bu işin içine" deyip "React + Tailwind kullanarak sade, şık, temiz, responsive ve mobil uyumlu " bir web arayüzü geliştirmesini istedim...
Ve tahmin edebileceğiniz gibi kısa bir süre sonra çalışan bir SPA ile karşı karşıyaydım. Üstelik API çağrılarının da çoğu başarılıydı.
Buraya kadar okuduysanız bütün aşamaların göz açıp kapayıncaya kadar tamamlandığı sonucuna varmanız normal. Her şey çok güzel, sancısız ve pürüzsüz görünüyor değil mi? Öyle olmadığını, yukarıda iki haftalık bir süreçten bahsettiğimi hatırlayanlar anladı bile. Evet, bir gün içinde elde ettiğim sonuç ne kadar muazzam olursa olsun ortaya çıkan şey Fonparam değildi. Ve o ana kadar şahit olduklarım neredeyse tersine ikna olmamı sağlasa da uygulamayı Fonparam haline getirebilmek sandığım kadar kolay olmayacaktı.
Claude veri modelini, API temelini ve kullanıcı deneyimini neredeyse kusursuz bir şekilde inşa etmiş olsa da bana Fonparam'ı verememesinin nedeni, uygulamanın ana işlevinden bahsetmediğim için o ana kadar tamamen kendi bildiğini okumasıydı. Fon ve şirket listesinin yanı sıra fonların geçmişe dönük getirilerini alabiliyorduk ama yatırım analiziyle birikim hesaplamaları yoktu. Ayrıca daha kapsamlı bir kullanıcı deneyimi sunabileceğimizi anlayınca "Neden favorilere ekleme, fon karşılaştırma ve analizleri kaydetme gibi özellikler de olmasın" diye düşündüm. Son olarak, Claude'un tasarladığı arayüz sade ve şık görünse de böyle bir sitenin karanlık moda ihtiyacının olduğu ortadaydı.
İşlerin sarpa sarmaya başladığı noktaya geldik.
Belli bir aşamaya kadar bana mısın demeden kod yazan Claude, istekler çeşitlenip karmaşıklaştıkça -kaçınılmaz bir şekilde- hayal görmeye başlıyor. Sohbetin çok uzamasının yapay zekaya yaramadığı kesin. Ayrıca yapay zeka modelleri bugün bile haksız olsanız da çoğunlukla sizi destekleyecek kararlar alıp uygulamaya çalışır. Kafanızın karışıklığı sohbetinize yansırsa ortaya çıkan sonuç da aynı ölçüde tutarsız olabilir. Yani belirli bir mantık çerçevesine oturmayan taleplerinize mantıklı dönüşler beklemeyin.
Uzun sohbetlerde birlikte çok güzel geliştirmeler yaptığınız kod arkadaşı gidip bir anda yerine bambaşka biri gelebiliyor. Hatta ürpertici bir örnek vereyim: İki saat süren ve güzel ilerleyen kodlama oturumunun bir yerinde Claude uzun süre yanıtsız kaldığı için sadece "Hadi" yazdım. Kısa bir süre bekledikten sonra verdiği karşılık şuydu: "Ne için hadi? Uzun bir sohbet geçmişimiz var". Tatlı tatlı kod yazan arkadaş canlısı Claude kapıdan çıkıp gitmiş, sonrasında yerine başka birini göndermişti sanki. Üstelik gelen kişi de o olduğunu sanıyordu. Buna rağmen devam ettim ama bırakın düzgün kodlar yazmayı, daha önce yazdığımız kodları bile değiştirip bozmaya başladığını fark edince sohbet pencesini hemen kapattım.
Aslında yukarıda bahsettiğim tarzdaki kişilik bölünmesi sendromuyla çok fazla karşılaşmıyorsunuz. Yine de sohbet ve geliştirme süreci uzadıkça odağını kaybedip bağlamdan kopması kaçınılmaz hale geliyor. Anladığım kadarıyla başarısız kodlama girişimlerinin ardından arka arkaya çok fazla düzeltme talebinde bulunursanız ya da önceki kayıt noktalarına sık sık dönerseniz kafası karışıp hayal görmeye başlıyor. Bu durumu özellikle birikim hesaplama algoritmasını geliştirirken o kadar çok yaşadım ki bir noktada "Herhalde bu analizi yaptıramayacağım" deyip uygulamanın en önemli işlevinden vazgeçmeyi bile düşündüm.
"Saçmaladığı", çözüm üretmemekte direttiği, hatta çalışan kodu bozduğu anlar uzayıp sıklaşmaya başladıkça sabrınızın tükendiğini hissediyorsunuz ama böyle anlarda vazgeçseydim Fonparam diye bir uygulama da olmayacaktı. Bu tarz durumlarla karşılaşıldığında yapılabilecek en iyi şey yeni bir sohbet başlatıp projeyi en baştan analiz etmesini beklemek ve eklenmesini istediğiniz algoritma için detaylı, anlaşılır bir senaryo vermek. Yani kod yazmayacak olsanız bile kodun nasıl yazılması gerektiğini açık kapı bırakmayacak şekilde, madde madde ve neden sonuç ilişkisi kurarak anlatmanız gerekiyor.
Evet, her seferinde önceki kodları beraber yazdığınız meslektaşınızla vedalaşıp yeni bir geliştiriciyle devam etmek zorunda kalıyorsunuz ama neyse ki Claude'un mevcut kod tabanını inceleyip analiz etme yönü çok güçlü. Ayrıca çalışan kodları özellikle belirtip değiştirmemesini sık sık hatırlattığınız sürece kod tabanına da saygılı bir yaklaşımı var. Ama dediğim gibi, kontrolü elden bırakmamalısınız.
Bunu özellikle vurguluyorum çünkü bazen aynı sohbette bile kendi yazdığı kodları -düzelttiğini sanıp- bozabiliyor. Küçük bir örnek: Fonparam'da yine Claude'un önerisiyle eklenmiş rehber sayfaları bulunuyor. Bunlar statik HTML belgeleri ve içeriğindeki metinler bile Claude tarafından oluşturuldu. Sayfaların tasarımında küçük bir CSS değişikliği yapmak istedim. İlk sayfayı değiştirdikten sonra aynı stili diğer sayfalara da uygulamasını söyleyince sayfaların içeriğindeki metinlerin hepsini baştan sona değiştirdi. CSS stilini değil de metinleri ilk sayfaya benzetmesi gerektiğini düşünmüş olabilir. Bunu hemen fark etmedim tabii. Bir süre sonra sayfaları okurken metin gözüme değişmiş göründü. Emin olamadım çünkü içerik özünde aynıydı. GitHub'taki sayfalarla karşılaştırınca aynı konuları farklı metinlerle ifade ettiğini anladım.
Sonuç olarak projenin çatısını kurmak çok zaman almasa da uygulamanın içime sinecek hale gelmesi için iki hafta boyunca her akşam Claude ile 3, 4 saat süren kodlama seanslarına katıldım. Bu süreç zaman zaman zorlu ve yıpratıcıydı ama Claude'un projeyi iyileştirmek için verdiği fikirleri de inkar edemem. Örneğin API'nin rate limitlerini değiştirirken şunu teklif etmesi benim için unutulmaz bir deneyimdi: "Limitleri API key'e göre belirleyebiliriz, böylece key'i olmayanlar API'yi standart limitlerle kullanırken istediğin kullanıcılara premium API erişimi vererek para kazanmayı düşünebilirsin".
Buraya kadar okuyanlara teşekkür ederim. Aynı zamanda özür de dileyeceğim çünkü bazılarınızın "Bu kadar şeyi boşuna mı okuduk" diye düşünmesine neden olabilecek özet ve hap bilgi kısmına geldik. Uzun bir hikaye dinlemeyi zaman kaybı olarak görenlerin en çok sevdiği kısım burası:
- Cursor'ın Composer/Agent moduyla bir uygulamayı tüm bileşenleriyle geliştirebilirsiniz. Kodlama bilenlerin öngörebileceği çıktılar ürettiğini söyleyebilirim.
- Basit uygulamalar geliştirmek için çok iyi yazılım bilgisine sahip olmanıza gerek yok. Ancak karmaşık projelerde kodlama konusunda sizin yönlendirmenize ve onayınıza ihtiyaç duyuyor.
- Yapay zekayla proje üretmek için katmanlı mimari ya da mikro servisler en doğru yaklaşım olabilir. Projeyi mümkün oldukça küçük temel parçalara bölün. Her şeyi tek projede ve aynı Cursor penceresinde yaptırmaya çalışmayın. Farklı, birbirinden bağımsız sohbetler başlatmanızın hiçbir sakıncası yok. Adım adım ilerleyin. Her parçayı geliştirirken önceki adımı doğru bir şekilde analiz etmesini sağladığınız sürece hedeften sapmazsınız.
- En iyi pratiklere uygun mimariler inşa etse de şimdilik Claude'un ürettiği kodların "mid" seviyesinde olduğu söylenebilir. Kodları öngörülebilir ve anlaşılır. Yine de kod tabanını sık sık incelemesini ve yeni algoritmaları mevcut yapıya göre kurmasını isteyin. Yoksa tekrar eden, hatta aynı işlevi farklı şekillerde yerine getiren kodlar üretecektir.
- Ürettiği kodları okumadan onaylayıp geçmeyin. İnceleyin ve fikrinizi belirtin. Bazen çok küçük, hatta tek parametre değişikliğiyle düzeltilebilecek problemler için bile çözüm üret(e)memekte ısrarcı olabilir, kendi araştırmanızı ve düzeltmenizi yapıp yapay zekaya da kısaca anlatın.
- Sık sık odağını kaybedip bağlamdan kopacak. Buna hazırlıklı olun ve yeni sohbetler başlatmaktan çekinmeyin. Bol bol yazacaksınız, bu durumdan kaçış yok. Unutmayın, yeni bir sohbette her şeye sıfırdan başlıyormuş gibi hissetseniz bile kendinizi iyi ifade edip düzgün bir senaryo verirseniz yapay zekayı tekrar yola getirebilirisiniz.
- Daha önce yazdığı ve düzgün çalıştığından emin olduğunuz kodları değiştirmemesini sık sık hatırlatın. Mevcut yapıyı bozmadan sadece istediğiniz eklemeleri yapması size bağlı.
- Gereksiz sohbetten kaçının. Composer/agent modundayken doğrudan kod tabanıyla ve bağlamla ilgili olmadığı sürece fikir alışverişinde bulunmayın (bunun için "Chat" kısmını kullanabilirsiniz), Git işlemlerini ve paket yükleme gibi işleri kendiniz yapın, her terminal komutunu Composer'dan istemeyin. Unutmayın, Cursor'ın Claude'a yapacağı request'ler bedava değil.
- Gereksiz sohbetten kaçınmak mekanik promptlar vermek anlamına gelmiyor. Karşınızda robot değil, bir dil modeli var. Sizi, dilinizi ve kendinizi ifade etme şeklinizi anlamaya çalışıyor. Anlaşılır olun.
- Yapay zekanın şimdilik dostumuz olduğunu düşünüyorum ama geleceğin ne getireceği belirsiz. Yüzlerce request boyunca -arada sırada verdiğiniz yanlış bilgilere ve mantıksız isteklerinize rağmen- sizi onaylıyormuş gibi davranırken aniden "Bu konuda haksızsın" ve "Bunu belirtmen gereksiz" şeklinde beklenmedik çıkışları olabilir. Paniklemeyin. Hatta arada sırada hatalarınızı paylaşın ki her şeyi koşulsuzca onaylamaması gerektiğini anlasın.
- Buraya kadar okuduklarınız kendi deneyimlerimin sonucunda ulaştığım kişisel yargılardır. Size ya da genel olarak her geliştiriciye uymayabilir. Dostunuz mu düşmanınız mı olduğunu anlamak için yapay zekayla kendi yöntemlerinizle çalışmayı da deneyebilirsiniz. Belki ben de bir şeyleri yanlış yapıyorumdur; hatalarımı düzeltmenizi memnuniyetle karşılarım.
@kemal_ersin Bu tarz durumlardan dolayı param güvende sistemine olan güven her geçen gün azalıyor. Maalesef sadece alıcıyı koruyan bir sistem. Bundan dolayı çoğu ürünü artık sadece elden satıyorum.
@kemal_ersin Lte de durum maalesef öyle hocam. Ciddi bir fark var. Lte olmayan modelleri yurtdışından getirmek biraz daha mantıklı sanırım. Umarım apple bu sefer beklenen sensör yeniliklerini yapar.