Linux – Debian Cron (Zamanlanmış Görev) Örnekleri

Crontab, bizim belirttiğimiz zamanlarda, yine bizim belirttiğimiz komutları çalıştırmak için kullanılan görevler bütünüdür. Hemen yazımın devamında sizlerle örnek zamanlanmış görev kodları paylaşıyor olacağım.

İlk olarak cronjob ayarlarına bir giriş yapalım ve alanları tanıyalım. Cronjob satırımız 5 adet zaman ayarı bölümü ve komut bölümünden oluşur. Örnek olarak:

1. *: Dakika (0 – 59)
2. *: Saat (0-23)
3. *: Ayın kaçıncı günü (1-31)
4. *: Ay (1-12)
5. *: Haftanın kaçıncı günü (0:7: Pazar, 1: Pazartesi, 2: Salı, 3: Çarşamba, 4: Perşembe, 5: Cuma, 6: Cumartesi)
Çalışmasını istediğimiz komut: Çalıştırılacak komut

Açıklamalarımızı bu şekilde vermiş olduk. Şimdi dilerseniz soru-cevap şeklinde bir işleyişe geçelim. Örnekler üzerinden devam edelim.

Her 5 dakikada bir çalışacak bir Cron Job yazımı

Cron komut satırımızı yukarıdaki gibi oluşturduğumuzda bu şu anlama gelir: Her 5dk da bir, cronTest.php dosyasını çalıştır. Eğer 5 dakikada değil de 30 dk da bir çalışmasını istiyorsak */5 yerine */30 yazmalıyız.

Her 2 saate bir çalışacak bir Cron Job yazımı

Cron komut satırımızı yukarıdaki gibi oluşturduğumuzda bu şu anlama gelir: Her 2 saatte bir, cronTest.php dosyasını çalıştır. Eğer 2 saat değil de 6 saatte bir çalışmasını istiyorsak */2 yerine */6 yazmalıyız.

Her 3 günde bir çalışacak bir Cron Job yazımı

Cron komut satırımızı yukarıdaki gibi oluşturduğumuzda bu şu anlama gelir: Her 3 günde bir, cronTest.php dosyasını çalıştır. Eğer 3 gün değil de 7 günde bir çalışmasını istiyorsak */3 yerine */7 yazmalıyız.

Her 2 ayda bir çalışacak bir Cron Job yazımı

Cron komut satırımızı yukarıdaki gibi oluşturduğumuzda bu şu anlama gelir: Her 2 ayda bir, cronTest.php dosyasını çalıştır. Eğer 2 ay değil de ayda bir çalışmasını istiyorsak */2 yerine */1 yazmalıyız.

Bonus: Sadece belirli saat aralıklarında çalışacak Cron Job yazımı

Yukarıdaki örnekte ise saat 6 ile 9 arasında her 2 saatte çalışacak bir komut tanımlıyoruz.

JSON Çıktısı Oluşturmak ve JSON Data Okumak {PHP – MySQL}

JSON (JavaScript Object Notation), veri alışverişi için kullanılan bir haberleşme formatıdır. JavaScript dilinin bir alt kümesine (nesnelerin JavaScript’te oluşturulması biçiminde) dayanmaktadır.

Daha detaylı bilgi için sizi buraya alabiliriz. JSON haberleşme mantığı günümüz dinamik web hizmetlerinde yaygın olarak kullanılmaktadır. Daha öncelerinde web hizmetleri, veri haberleşmesi için birincil veri biçimi olarak XML kullanırlardı, ancak JSON ortaya çıktıktan sonra JSON tercih edilen biçim oldu. Bunun nedeni ise XML formatından çok daha hızlı şekilde tepki vermesi. Sadece web için değil, mobil haberleşmelerinde de JSON haberleşme mantığı çok yaygın şekilde kullanılıyor.

Bugün sizlerle PHP programlama dilini kullanarak veritabanındaki verilerimizi JSON formatına dönüştürmeyi, dönüştürüğümüz JSON formatını okumayı öğreneceğiz. Dilerseniz başlayalım.

Veritabanındaki kayıtları alıp bir döngü halinde JSON çıktısı formatına nasıl dönüştürebilirim?

İlgili dosyayı çalıştırdığımızda aşağıdaki gibi bir çıktı ile karşılaşacağız.

Peki JSON çıktı üreten bir dosyadaki veri çıktılarını bir döngü içerisinde nasıl okuyabiliriz?

İşlemler bu kadar. Eğer bağlantılarınız doğru ise PHP yardımıyla JSON veri oluşturma ve JSON veri okuma örneklerini birlikte yapmış olduk. Soru, görüş ve önerilerinizi iletişim bölümünden benimle paylaşabilirsiniz.

Bir sonraki makalemizde görüşmek üzere, hoşçakalın.

Javascript veya PHP ile Android İşletim Sistemini Algılamak

Tarafıma son dönemde gönderilen sorular arasında bir iki tanesinin diğerlerine nazaran daha popüler olmaya başladığını fark ettim: Bunlardan biri: JavaScript veya PHP ile Android cihaz algılama.

Androrid gelişimini düşündüğümüzde bu soruların neden geldiğini düşünmemiz zor değil. İşte iOS ana rakibini algılayabilmeniz için birkaç yöntem:

JavaScript yardımıyla nasıl algıayabilirim?

PHP yardımıyla nasıl algıayabilirim?

Bonus! .htaccess ile nasıl algıayabilirim?

Artık kullanıcının mobil platformu hakkında bilgi sahibi olabileceğiniz 3 yöntem öğrendiniz! Yaşasın mutlu yeni dünya!

 

Bir Proje İçin Doğru Programlama Dilini Seçmek

Jesse Farmer, “Motivasyon, hayal kırıklığı, hoşgörü, sosyal destek ve uzmanlığa erişim, bir programcı olmaya çalışırken ham dilden daha önemlidir” diyor. Ancak, o aşamayı geçtiğinizde ne olacak? İlk işinizi almanızın yolunda portföyünüzü oluşturmak istediğinizi veya dördüncü sınıfın özelliklerini değiştirmek istediğinizi varsayalım. Belki güzel bir başlangıç yaptınız, yada yalnızca harika şeyler ortaya çıkarmak istiyorsunuz.

Birkaç çeşit programlama paradigması vardır. Bunları: Dinamik, Statik, Yorumlayıcı ve Derlenmiş paradigma olarak sıralayabiliriz. Bir taraftan statik olarak derlenmiş, güçlü bir şekilde yazılmış olanlar diğer tarafta dinamik ve yorumlayıcılar. Eski, geleneksel kurumsal diller genellikle eski gruba uyar. Statik olarak derlenmiş diller geliştiricilere zaman hataları yerine derleme zamanı hataları sağlar ve böylece daha güvenli, iyi belgelenmiş kodlar temiz arayüzlerle sağlanır. Swift, her iki kabiliyeti birleştirmeye yönelik bir girişimdir ve popülerliği hızla artmaktadır.

Aynı zamanda entelektüel mücadele için yeni paradigmalardan dil öğrenmekte bir seçenektir, ayrıca bu yeteneklerinizi göstermenin harika bir yoludur.

Bu konuda son dönemde tarafıma iletilen sorular genellikle şu şekilde geliyor. Şu konuda uzmanlaşmak istiyorum. Ne yapmalıyım, hangi programlama diline yönelmeliyim, yada hangisini öğrenmeliyim? Bu sorulara yönelik aşağıdaki gibi bir bilgi bankası hazırladım. Umarım sorunuzun cevabını burada bulabilirsiniz.

Hızlı sonuç almak istiyorum

  • Ruby on Rails
  • Python Django

Veri görselleştirmeleri hazırlamak istiyorum

  • Javascript -> D3.js
  • ChartJS
  • Chartkick

Otomasyon ve komut dosyası hazırlamak istiyorum

  • Python
  • Ruby
  • Bash
  • Powershell
  • AutoHotKey
  • Perl

Büyük masaüstü uygulamaları yazmak istiyorum

  • Java
  • C / C ++
  • C#

Statik sitemi biraz hareketli hale getirmek istiyorum

  • JavaScript ve jQuery
  • CSS

Animasyonlar hazırlamak istiyorum

  • Processing

Müzik üzerine çalışmalar gerçekleştirmek istiyorum

  • Chuck

Değişen verileri depolamak istiyorum, şuan için tek kullanıcı benim

  • SQLite

Yoğunluğu yüksek bir ortamda büyük miktarda değişen veri depolamak istiyorum, çok sayıda sorgu yapacağım

  • SQL
  • NoSQL

Sabit (değişmeyen) verileri saklamak istiyorum

  • JSON
  • YAML
  • XML

Matematik üzerine çalışmalar gerçekleştirmek istiyorum

  • R
  • Python
  • Haskell
  • OCAML
  • Lisp

Bilim üzerine çalışmalar gerçekleştirmek istiyorum

  • Erlang

Gerçek zamanlı, istemci tarafında etkileşimli çalışmalar gerçekleştirmek istiyorum

  • React
  • Angular
  • sockets.io

Statik web siteleri oluşturmak istiyorum

  • HTML ve CSS

Dinamik etkileşimli web siteleri oluşturmak istiyorum

  • PHP
  • ASP.NET
  • JAVA Web

Web siteleri için oyunlar geliştirmek istiyorum

  • JavaScript

Konsollar ve masaüstü uygulamaları için oyunlar geliştirmek istiyorum

  • C ++
  • C #

Mobil uygulamalar yapmak istiyorum

  • C ++ / Objective C / C #
  • Apple: Swift
  • Android: Java

IoT (Internet of Things) üzerine kendimi geliştirmek istiyorum

  • JavaScript
  • Python
  • Java
  • C / C ++ / C #

Soru, görüş ve önerileriniz için iletişim bölümünü kullanabilirsiniz. Bir sonraki makalede görüşmek üzere hoşçakalın.

Organize Bir Web Projesinde Düzenli Yapı Nasıl Kurulmalıdır?

Her türde organizasyon kodun verimli çalışmasını sağlamak için anahtardır ve bu özellikle web uygulamaları için geçerlidir. Birçok web geliştiricisi, CodeIgniter gibi önceden oluşturulmuş kodlama frameworklerini kullanarak belirli bir yapıya sadık kalırlar ve diğer alanlarda organizasyon sağlayarak  uygulamanın daha hızlı kodlamasına yardımcı olurlar. Bir fremawork ile olsun veya olmasın, web uygulamalarının organize oluşturulmuş yapılara ihtiyacı vardır.

Her geliştirici bir web uygulamasının organizasyonunu nasıl düzenleyeceği konusunda kendi standartlarına sahip olabilir, ancak bu makalede en iyi uygulamaları, yaygın uygulamaları ve bazı web uygulamalarının belirli yönlerinin belirli bir şekilde düzenlenmesinin nedenini daha ayrıntılı olarak ele alacağız. Son olarak, bir uygulama oluştururken organizasyon yapısının neden bu kadar faydalı olabileceğini de inceleyeceğiz.

Dizin Yapısı

Projenizi hazırlarken ve çalıştırma aşamasında bir numaralı kriterin birden fazla proje için yeniden kullanabileceğiniz sağlam bir dizin yapısına sahip olmanız olduğunu söyleyebilirim. Bir framework kullanıyorsanız, genellikle sahip olduğunuz hazır bir yapı mevcut olacak, ancak bu senaryoda basit bir site veya uygulama üzerinde çalışıyoruz.

 

Analiz

Muhtemelen public_html yapısını çok iyi biliyorsunuzdur. Bu, tüm genel dosyalarınızın erişildiği belge kök dizinidir. (/public_html/page.php = fatihsoysal.com/page.php anlamına gelir.)

img – Tüm görüntü dosyalarınız, içerik resimleriniz bu dizinde.
css – Tüm css dosyalarınız.
js – Bütün javascript dosyalarınız.
resources dizini, tüm üçüncü parti kütüphaneleri, özel kütüphaneleri, yapılandırmaları ve projenizde bir kaynak görevi gören diğer tüm kodları tutmalıdır.

config.php – Ana yapılandırma dosyası. Site çapında ayarları burada saklamalıyız.
library – Tüm özel ve üçüncü parti kütüphaneleri için merkezi konum burası olmalı.
templates – Düzeni oluşturan, tekrar kullanılabilir bileşenler.

Yapılandırma Dosyası (Config)
Tasarımcılar ve geliştiriciler olarak asıl amacımız olabildiğince kısıtlı zamanda olabildiğinde çok iş yapmaktır. Bu hedefe ulaşmanın bir yolu da yapılandırma dosyalarındadır. Yapılandırma dosyasının nasıl olması gerektiğine dair daha iyi bir fikir edinmek için lütfen aşağıdaki örneği gözden geçirin.

Bu, temel açılır bir yapılandırma dosyasıdır. Çok boyutlu bir dizi, veritabanı kimlik bilgileri gibi çeşitli yapılandırma öğelerine erişmek için esnek bir yapı sağlar.

db – Veritabanınıza ait olan veritabanı kimlik bilgilerini saklayın.
paths – Siteniz için çeşitli kaynaklara yaygın olarak kullanılan yollar. (log dosyaları, upload dizinleri, kaynaklar)
urls – Sitenizde uzak kaynaklara başvururken URL’leri saklamak gerçekten kullanışlı olabilir.
emails – Hataları işlerken veya iletişim formlarında kullanmak için hata ayıklama veya yönetici e-postalarını saklayın.

Birden Fazla Ortam İçin Farklı Yapılandırma Dosyalarını Kullanma
Birden fazla ortam için farklı yapılandırma dosyaları kullanarak mevcut çevreye bağlı olarak ilgili ayarları alabilirsiniz. Bunun anlamı, eğer her bir ortam için farklı veritabanı kimlik bilgileri veya farklı yollar kullanırsanız, ilgili yapılandırma dosyalarını ayarlayarak, kodunuzun canlı yayındaki sitenizi güncellerken güçlük çekmeden çalışmasını sağlayabilirsiniz. Bu ayrıca mevcut çevreye dayalı farklı hata raporlama ayarlarına sahip olmanızı sağlar. Asla canlı yayındaki sitenizde hataları göstermeyin!  Hataları canlı sitede görüntülemek, hassas verileri kullanıcılara gösterebilir (örneğin, şifreler gibi). Bu konuda ayrıntılı bilgi almak isterseniz daha önce yazmış olduğum Güvenli PHP Uygulamaları Oluşturmak İçin Yararlı İpuçları makaleme göz atabilirsiniz.

Tasarım
Yeniden kullanılabilir şablonlar büyük bir tasarruf sağlayıcısıdır. Şablon oluşturmak için harika kütüphaneler (Smarty gibi) vardır ve genellikle tekerleği yeniden icat etmek yerine böyle bir kütüphaneyi kullanmak daha akıllıca olandır. Bu kütüphaneler geliştiricilere oldukça çok işlevsellik sunar (para birimini biçimlendirmek veya e-posta adreslerini gizlemek için yardımcı yöntemler gibi). Ancak örneğimiz basit bir site olduğundan, kütüphaneyi kurmak için zaman ayırmak istemiyoruz bundan dolayı en temel temel şablonları kullanıyor olacağız.

Sitemizin sayfalarına ortak bölümler veya modüller ekleyerek organize yapıyı tasarım anlamında kurmayı başarabiliriz.

Peki bu bize nasıl bir esnek yapı sunar?

Örneğin, header modülünde bir şey değiştirmek istiyorsanız, genel gezinme bağlantısını ekleme gibi, bu güncelleme tek dosyadan site geneline yayılır.

Bunu örnek bir uygulamada açıklayalım.

header.php

rightPanel.php

footer.php

index.php

Daha İleriye Götürmek

Bu temel şablon sistemi size harika bir başlangıç yaparken sizi daha da ileri götürülebilir. Örneğin, tüm şablon dosyalarını içeren bir sınıf veya fonksiyonlar oluşturabilir, bir içerik dosyasını mizanpaj içinde oluşturulacak argüman olarak kabul edebilirsiniz. Bu şekilde, şablon dosyalarını sitenizin her sayfasına eklemenize gerek yoktur. Size hızlı bir örnek göstereceğim.

/resources/library/templateFunctions.php

index.php

Şablon dizininizde bir içerik şablonu görevi gören home.php adlı bir dosyanız olduğunu varsayıyorum.

home.php

Bu Metodun Avantajları:
Mantık ve görünüşün daha fazla ayrılması (php ve html). Şablon mantığını bir işleve dahil etmek, şablonun sitenizin her sayfasında güncellenmeden nasıl gösterildiğini değiştirmenize olanak tanır.

Semboller
Unix tabanlı sistemler (os x, linux) üzerinde sembolik bağlar olarak adlandırılan ufak bir özellik taşır. (Sembolik Bağlantıları). Simge bağlantıları, dosya sistemindeki gerçek dizinlere veya dosyalara yapılan atıflardır. Birden fazla proje arasında kullanılan bir kitaplık gibi paylaşılan bir kaynağınız olduğunda bu gerçekten harika olur. Sembolik bağlarla yapabileceğiniz birkaç somut şey:

Kaynak dizininizin iki sürümü var. Canlı sunucunuzu güncellerken en son dosyalarınızı keyfi bir dizine yükleyebilirsiniz. Sembolik bağlantınızı, kod tabanımızı anında güncelleyen bu yeni dizine yönlendirin. Bir şeyler ters giderse, anında önceki (çalışan) dizine geri dönebilirsiniz.

Paylaşılan kaynaklar, sembolik bağlarla kolayca yönetilir. Üzerinde üzerinde çalışmakta olduğunuz özel bir kütüphaneniz olduğunu ve bir projede yaptığınız kitaplıktaki güncellemelerin başka bir kütüphanede derhal bulunabileceğini düşünün.

Sembolik Bağları Kullanma
Symlink’ler vs Hardlink’ler

Symlink’ler veya softlinkler, dosya sistemindeki tam yollara referanslar gibi davranırlar. Birden fazla lokasyonda sembolik bağları kullanabilirsiniz ve dosya sistemi, başvuru yaptıkları gerçek dosya veya dizinmiş gibi davranır. Diğer yandan Hardlinkler disk üzerindeki bir dosyaya işaretçilerdir (pencerelerdeki kısayolları düşünün); Sizi dosyanın gerçek konumuna götürürler.

Sembolik bağları kullanırken göz önüne almanız gereken birkaç şey var. Sunucu yapılandırmanızın sembolik bağları izleyecek şekilde ayarlanmış olması gerekir. Apache için bu işlem httpd.conf dosyasında yapılır. Dizin bloğunu bulun ve Options FollowSymLinks‘in orada olduğundan emin olun. Ekleme işlemini yapın ve Apache’yi yeniden başlatın.

Sonuç
Bu ipuçları, yeni başlayanla, basit siteler veya uygulamalar oluşturanlar içindir. İdeal olarak büyük uygulamalar veya siteler için MVC mimarisi ve Nesne Yönlendirmeli programlama gibi daha gelişmiş bir şey düşünmek zorundasınız. Tek başına oldukça geniş bir konu olduğu için kaynak denetimini kapsamamaya karar verdim, ancak bu ipuçları dosyalarınızı daha kolay kaynak denetimi için organize etmenize yardımcı olacak.Tüm projeleriniz için git gibi kaynak denetimi kullanmaya kesinlikle dikkat edin.

Bir sonraki PHP Projenizi başlatırken bu ipuçlarını göz önünde bulunduracağınızı umut eder, buraya kadar okuduğunuz için teşekkürlerimi sunarım.

Bir Geliştirici Olarak Kişisel Markanızı Nasıl Oluşturabilirsiniz?

Bana göre bu soruya en güzel yanıt zaten verilmiş. Jeff Atwood‘un da söylediği gibi, “Başınızı suyun üstünde tutabilirseniz bu sizin için yeterlidir” Bir geliştirici olarak internet ortamında nasıl davranmalısınız, neler yapmalısınız? Bu blog yazısında cevap vereceğim sorular işte bunlar.

Neden kişisel bir marka oluşturma gereği duyarsınız?
Artık günümüzde bir teknik disipline sahip olmak o iş yeteliliği için çoğu zaman yeterli olmuyor. Başınızı su üstünde tutabilmek işte bu yüzden çok önemli. Sizi diğerlerinden ayırmalı. Gerçekten parlamak için dikkat çekici bir şey yapmalısınız. Öncelikle ne yapmanız gerektiğine karar vermekle işleme başlayabilirsiniz.

Ne tür bir şirket için çalışmak istiyorsunuz? Büyük bir şirket için mi? Bir başlangıç için mi? Kendin için mi? Bu sizin kişiliğiniz hakkında kariyerinizde nasıl ilerleyeceğinizi belirleyecektir.

Adım adım ilerleyelim
Benzersiz bir kullanıcı adı bulun. Bunu her yer için kullanın. Bu, kendinizi web üzerinde tanınabilir kılmanın basit bir yoludur. Sosyal medya hesaplarınız, hatta e-mail hesabınız için bile geçerli bir durum bu. Ama buradaki gibi olmasın.

GitHub’da aktif kalın
GitHub kendi içerisinde birçok çevrimiçi yazılım projesi barındırıyor bildiğiniz gibi. Açık kaynak kodu için bir merkez, nasıl profesyonel kodlama yapabildiğinizi kanıtlamak için harika bir yoldur. Oluşturduğunuz betikleri yeniden kullanılabilir, bileşenleri veya bazı becerileri geliştirmek için üzerinde çalıştığınız projelerinizi yükleyebilirsiniz. Klişe projeleri yapmaya karar verirseniz, birkaç adım daha ileri gidin ve süper bir şey yaratın. Bir projeyi birçok farklı çerçevede hatta dillerde yazın. Açık kaynak koduna katkıda bulunun. Bir süre sonra bu, mülakatlarda konuşabileceğiniz şeyler olacaktır.

    Açık kaynak koduna katkıda bulunmak neredeyse her şey olabilir! Açık sorunları düzeltebilir, dokümantasyon yazabilir, özellikler ekleyebilir, mesajların gönderilmesinde bazı kütüphaneleri nasıl kullandığınız hakkında konuşabilirsiniz. Her zaman yapacak bir şeyler var.

    Uzmanlık seçimi yapın

    Neden bir uzmanlık seçmelisin? Uzman herhangi bir geliştirici yaklaşık iki hafta içinde yeni bir dile geçiş yapabilir. Bu sizi özel yapmaz. Çünkü Türkiye’deki firma sahipleri, bilgi sahibi olduğunuz dilin geçiş süresini düşünürler. Yani 1-2 haftalık bu süreç onlar için uzundur ve size 2 haftalık boşuna para vermek istemezler. (Bence boşuna değil) Neyse, bir uzmanlık seçtiğinizde, talep edilen teknolojilerin daima değiştiğini aklınızda bulundurun. Bir alan seçmek ve her zaman çözümler üretmek için kullanılan en yeni teknolojilerin önüne geçmek her zaman sizin için daha iyi olacaktır.

      Tek uzmanlık alanınız olsun mümkünse. Bazı geliştiriciler COBOL veya Haskell gibi dillerde bile uzmanlaşmışlardır; birkaç şirket tarafından dünya üzerinde yalnızca birkaç şirket tarafından talep edilmekle birlikte çok iyi para kazanırlar. Yani neyi anlatmaya çalışıyorum? Hangi dili seçtiğiniz değil, o dilde ne kadar uzmanlaştığınız önemli.

      Bir blog yazın

      Beceri setiniz ne olursa olsun, bir blog sayfasına sahip olursanız, çalışma şeklinizi, odaklarınızın ne olduğunu temsil edeceğiniz, dünyaya 7/24 açık, kendinize ait bir ortamınız olmuş olur. 

      Bir algoritma uzmanıysanız veya yazılım araçları ile çalışıyorsanız, nispeten sade bir blog sahibi olmak daha mantıklı olacaktır. Örneğin bir front-end geliştiriciyseniz tasarımınızla neler yapabildiğinizi herkese göstermelisiniz. Bazı harika konular, öğrendiğiniz bir konuda üzerinde çalıştığınız veya tamamladığınız bir projeye ilişkin süreci anlatmamız aslında iyi öğreticilerdir.

        Mümkünse düzenli olarak yazı yazmaya ve içeriği yüksek kalitede muhafaza etmeye dikkat edin. Yazı yazmış olmak için yazı yazmayın.

        Meetup’lara katılın

        Bu, diğer geliştiricilerin tanınması, arkadaşlıklar ve ağlar geliştirilmesi için harika bir fırsattır. Yakın zamanda üzerinde çalıştığınız bir proje hakkında yıldırım konuşmaları yapabilirsiniz, fikir alabilirsiniz.

        StackOverflow’da ilgili soruları yanıtlayın

        Evet. Artık başkalarına yardım edebilmek için yeterince iyi seviyede iseniz bunu yapabilirsiniz. Bu otorite kurmanın harika bir yoludur. Fakat bu konuda biraz cesaret gerekiyor.

          Mutlaka kendinize ait bir portfolyonuz olsun

          İnsanlar sizin neler yaptığınızı ve neler yapabildiklerinizi görmek isterler. Daha iyi bir seviyedeyseniz, insanlara yaptığınız projeleri listeleyebilirsiniz.

          Exit mobile version