IEEE TRSB Computer Society Web Development 101 Canlı Yayını

Herkese Selamlar ! 23.10.2020 tarihinde saat 21:00 de IEEE TRSB Computer Society youtube kanalinda Web Development 101 konusu ile canli yayinda olacagim ! Vaktiniz varsa beklerim, linke tiklayarak erisebilirsiniz. Katılan arkadaşlara şimdiden çok teşekkürler.

0  

Microservice Mimari Nedir ? Neden Önemlidir ?

Herkese Selamlar ! Bugün sizler ile beraber son zamanlarda ciddi anlamda herkes tarafından merak edilen, hatırı sayılır sayıda şirketin şu an aktif olarak kullandığı microservice mimari nedir ? Neden önemlidir ? bir bakalım istedim bu yazı içerisinde. Yavaş yavaş başlayalım o zaman !

Microservice Mimari Nedir ?

Microservice, service oriented architecture (SOA) yapısının bir çeşididir aslında. Bir uygulama içerisinde ki o uygulamanın çalışmasını stabil bir sekilde götürebilen, belirli hizmet, tek bir amaç ve en önemlisi birbirinden bağımsız olarak çalışan alt hizmetlerdir. Aslında ben en çok bunu SOLID principles içerisinde yer alan Single Responsibilitye benzetiyorum. Tek bir sorumluluk alacak kurguladığımız yapı ve tamamen buna dayalı olarak yoluna devam edecek. Normalde kullandığımız yapı ise monolithic. Tam olarak aşağıda ki resimde yer aldığı gibi.

Monolithic yapıyı şu an hali hazırda herkes kullanıyordur zaten. Çok büyük projelerde ise bu yapı sorun olmaya başladı. Mesela Amazon tamamen bu yapı üzerindeydi fakat proje ciddi anlamda çok büyüdü. Amazon mühendisleri ortalama olarak her 11.7 saniyede bir kod gönderirler proje içerisine yani production ortamına kod pushlamaktan ve ardından deploy almaktan bahsediyorum. Büyük bir proje içerisinde çalışıyorsanız ve bu büyük projeyi yönetmek için büyük bir ekibiniz var ise monolithic yapı size uygun değildir. Sebebi ise katmanlar üzerinde birbirine bağımlı çok fazla alt hizmetler vardır. Yapmış olduğunuz basit bir değişiklik diğer katmanları gereksiz yere etkileyebilir ve sürekli birbirini ezmeye çalışan kodlar üzerinde ki problemleri çözmeye harcayabilirsiniz vaktinizi. Şu an ise Amazon, Netflix, Google, PayPal ve Uber bu mimariyi oldukça benimsemiş durumda. Ülkemiz içerisinde de büyük, orta ölçekli ya da küçük geliştirmenlik firmaları projelerinde bu mimariyi uygulamak için ellerinden geleni yapıyorlar.

Microservice mimarisini daha detaylı bir çizim ile gösterecek olursak ise;

Esneklik (Flexibility)
Microserviceler iç yapısında birbirinden bağımsız olduğu için farklı servisler kullanmaya ihtiyaç duyduğumuz da en uygun teknolojinin kullanımına izin verir. Bunu biraz daha detaylı olarak incelemek istersek; belirli bir servisi oluşturan her ekibin bağımsız olarak çalıştıkları için tercih ettikleri programlama diline ve frameworke karar verebileceği anlamına gelir. Bu bağımsızlık kolaylıkla birbirleri arasında iletişimin sağlanmasının yanı sıra servislere kolay bir şekilde bakım yapılmasını da olanak tanır. Aynı zamanda bir web uygulamasının işlevselliğini etkilemeden ona ek bir özellik eklemek ya da artık kullanılmayan bir özelliği ortadan kaldırmak anlamına da gelir.

Yeniden Kullanılabilirlik (Reusability)
Bir şirket mikroservice mimarisini bir proje için geliştirip uyguladığında, diğer projeler için genişletilebilir bir referansa yani en azından şematik diyagrama sahip olur. Farklı projelerde programlama dili, geliştirme araçları farklı olsa bile çekirdek mimarinin çoğunu koruyabileceği ve yeniden kullanabileceği anlamına gelir.

Riski Azaltmak (Reduces Risk)
Yazının başından itibaren sürekli bağımsızlık diyorum ya aslında her bir servis microservices içerisinde yer alan ayrı bir servis ayrı bir nesnedir. Bu sebeple birbirinden bağımsız çalışırlar. Bağımsızlık sebebi ile herhangi bir bileşen, diğer bir ismiyle component kendi problemini tüm uygulamaya yayamaz. Diğer componentler başarılı bir şekilde çalışmaya devam ederler. Tabi bu hatayı gidermek ya da yeniden yazmak kolaylaşır. Problemi tüm yapı üzerinde aramak yerine sorumlu olan componente gidersiniz ve çözersiniz. Uygulamanın tamamen durması sorununu ortadan kaldırmış olursunuz.

Ölçeklenebilirlik (Scalability)
Bu madde benim favori maddem diyebiliriz. Monolithic mimari üzerinde ölçeklendirme yapmak isterseniz eğer ihtiyacınız olsa da olmasada istemsizce tüm uygulama üzerinde yapmanız gerekir tabi ona göre bir maliyet çıkar ya da en azından ona göre vakit harcarsınız fakat microservice içerisinde istediğiniz component üzerinde istediğiniz oranda ölçekleme yapabilirisiniz.

Continuous Delivery
Microserviceler, bir uygulamanın tüm yaşam döngüsünü yönetmek için sabit bir delivery model kullanır. Bu cümle kısa olmasına rağmen biraz anlamsız gelebilir ama demek istenilen geliştirmenler ve test ekipleri tek bir servis üzerinde birlikte çalıştığında, test süreci kolay ve hızlı bir şekilde tamamlanır. Üzerinde çalıştığımız mikroservice belirli bir amaca yönelik hizmet verdiği için kolay test edilebilir hale gelir. Bu da genel anlamda süreci hızlandırır.

Çeşitli Veri Depolama (Various Data Storage)
Yukarıda yer alan resimde de görebileceğiniz gibi microservice mimari monolithic mimarinin aksine uygulama içerisinde kullanacağınız verilerin farklı konumlarda depolanmasını sağlar. Bazı durumlarda iş yaptığımız şirketler büyük veri kümeleri ile ilgilenir ve bu verilerin kendine has özellikleri olabilir. Bu nedenle bazı sorunlara ortaya çıkabilir. Buna rağmen microservice mimari her servisin ihtiyaç duyduğu en uygun depolama yöntemini kullanarak bu sorunu da çözebilir.

Ekip İşbirliği (Easy Team Collaboration)
Bir servis üzerinde çalışan ekip üyeleri yeteneklerine göre o servise atanır. Aynı amaca hizmet eden ekip üyeleri odaklanma problemi yaşamaz ve servis kısa sürede tamamlanır. Netflix’in microservice mimarisi kullanmasının ana sebeplerinden bir tanesi budur. 25 mühendisleri aynı proje üzerinde çeşitli sorunlar ile karşılaşırken birlikte ve uyum içerisinde çalışmak zorundaydılar. Tabi bu biraz zor. Microservice mimarisine geçtikten sonra ise bir sürü küçük mühendislik ekibi kurdular ve sorunlarda ekip işbirliğide ekiplere özgü olarak güncellendi.

Çeviklik (Agility)
Yukarıda da söylediğimiz gibi, microservice mimarisinde ki her bir servis sadece bir işlev üzerinde çalışır. Üzerinde değişiklik yapmış olduğunuz kod parçacığını ölçeklendirme yapmak (scalability), test etmek ve release etmek çok daha kolaydır. Amazon sadece bu yüzden monolithic mimarisini microservicelere taşıdı. Karmaşık ekip yapılarının ve kod mimarisinin yerine daha küçük, daha verimli ve yapılar arası işlevliği olan bir mimari yer aldı.

Bildiğim kadarıyla ve elimden geldiğince sizlere microservice mimarinin önemini 8 madde ile açıklamaya çalıştım.Bu yazılıkta bu kadar ! Vakit ayırıp yazımı okuduğunuz için çok teşekkür ederim. Bu yazıyı post ederken dinlediğim şarkı ise: Mike WiLL Made-It, Nas, Rick Ross – Check Sonra ki yazılarda görüşmek üzere hoşçakalın !

0  

Bilişim Sektöründe Sertifikaların Önemi

Herkese Selamlar ! Bugün sizler ile beraber tarafıma abartmıyorum yüzlerce kez sorulmuş bir soruyu cevaplamak istiyorum. Aranızda özel ya da devlet, mühendislik ya da ilgili benzer bölümlerden mezun olmuş ama sertifikası olmayan yüzlerce kişi var ve özellikle şu sıralar pandemi dönemindeyiz ve evde vakit geçiren kişi sayısı arttığı için herkes sertifika almaya başladı. Bu yüzden olduğunu düşünüyorum ki sosyal medya hesaplarımdan tarafıma çok fazla bunun üzerine soru geldi. Sizinle çeşitli amaçla alabileceğiniz ya da almayı planladığınız sertifikaları ayrı başlıklar altında inceleyelim şimdi.

  1. Katılım Sertifikaları
    Yeni mezunsanız ve cvnizde aslında gerçekten de ben ilgilendiğim bu meslek adına bir şeyler yapıyorum ya da yenilikçiyim, sürekli bir öğrenme durumu söz konusu diyorsanız katılım sertifikaları sizin için işe yarayabilir. Şunu unutmayınız yalnız. Katılım sertifikalarının somut tek faydası budur. Teknik anlamda donanımlı olduğunuzu göstermez. Katıldığınız bir eğitim ya da konferansta bulunduğunuza dair belge, bir nevi yoklama diyebiliriz aslında peki katıldığınız o eğitim size ne kadar faydalı oldu ? İşte bu gerçekten tam bir muamma o yüzden katılım sertifikalarınızı yeni mezunsanız cvnize ekleyiniz onun haricinde pek tavsiye etmiyorum açıkçası.
  2. Özel Bir Kurum Tarafından Verilmiş Başarı Sertifikaları
    Aslında bu nokta cidden çok önemli. Herkes herhangi bir kurumua gidip onun maddi karşılığını ödedikten sonra eğitimi alabilir. Başarı kısmında ise o alan özgü kuruma ait sertifika bulunduğunuz şehirde ya da çalışmayı planladığınız şehirde ne kadar biliniyor. Çok biliniyorsa ve gerçekten az kişide varsa her şey çok güzel demektir. Peki aksi senaryoyu düşünecek olursak yani sertifika bilinmek ile beraber herkeste varsa ? İşte bu gerçekten iyi bir durum olmaz sizin açınızdan. Sebebi ise o kurum sertifikaları kolay veriyor demektir. Bu sizin cvnizde yer alsada kendinizi ispatlamak için çaba sarfetmenize sebep olablir. İspatlamaktan kasıt ise herhangi bir iş görüşmesine gittiğinizde o sertifikayı gerçekten hak ederek aldığınıza dair eğitim süreniz boyunca yaptığınız ciddi çalışmaları gösterebilirsiniz. Mülakatı yapan kişi açısından etkileyici olacaktır.
  3. Uluslararası Firmalardan Alınan Sertifikalar & Ünvanlar
    Daha önce yurtdışında bir firmada yazılım geliştirmeni pozisyonunda çalışmış biri olarak şunu söyleyebilirim ki herhangi bir ülkede almış olduğunuz eğitim ya da eğitim sonunda almış olduğunuz diploma (bir üniversite eğitiminden bahsediyorum) başka bir ülkede geçerli olmayabilir. Mesela ben Ege Üniversitesi mezunuyum eğer ki değişmediyse America’da bulunduğum dönemlerde bazı eyaletlerde diplomam geçerli iken bazılarında kabul edilmiyordu. İşte tam olarak bu noktada uluslararası çapta bir sertifikanınızın olması sizi kurtaracaktır. Çünkü o tarz bir belgenin elinizin altında olması sizin mülakata davet edilmenizi sağlayabilir. Bu tarz sertifikalar almanın bir diğer avantajı ise çalışmak istediğiniz firma ile sertifikasına sahip olduğunuz firma arasında ortaklık ( partnerlik ) sözleşmesi olabilir. O tarz durumlarda bazı firmaların belirli sayılarda sertifikalı personel çalıştırması gerekmekte ve sizde eğer ki o sertifikaya sahipseniz biraz değerli olabilirsiniz.
  4. Çok Fazla ve Farklı Alanlarda Sertifikalar Almayın !
    Çok samimi bir şekilde söylüyorum ki bu yazının en can alıcı noktası burası diyebilirim. Neden derseniz sertifika almak iş görüşmelerinde etkiler karşı tarafı fakat şunu unutmayınız ki çok fazla ve farklı alanlarda sertifika almanın gerçekten somut bir zararı vardır. Bu tarz sertifikaları almak zordur ve vakit ayırıp çalışmanız gerekir. Eğer ki çok fazla varsa bu sertifikalardan mülakatı yapan kişi muhtemelen “Bu aday ne zaman proje geliştirdi acaba ?” diye bir düşünecektir.

    Farklı alanlarda sertifika almak ise sizin uzmanlaşmak için kararsız kaldığınızı bir uzmanlığınız olmadığı için kariyerinizde ilerleme konusunda problem yaşayacağınızı gösterir ki bu tarz bir şey yaşamanızı hiç istemeyiz.

  5. Bonus !
    Diploma ya da sertifika neye sahip olursanız olun. Bunlar sadece sizi mülakat masasına kadar götürecektir. İçeriye esas girmenizi sağlayacak olan bilginiz, proje tecribeniz kısacası iş hayatında tam olarak neler yaptıklarınızdır. Daha önce de dediğim gibi eğer ki iş tecrübeniz yoksa karar verdiğiniz bir uzmanlık alanınıza yönelik sertifikaları alarak cvnizde yer almasını sağlayabilirsiniz. Vermiş olduğum her seminerde, webinerde ya da eğitimde sürekli dile getirdiğim bir söz var ve burada bir kez daha söylemek istiyorum. İş, işte, iş yaparak öğrenilir.  Siz kariyeriniz için elinizden geleni yapın gerisi kendiiliğinden gelecektir. Bu yazılıkta bu kadar ! Vakit ayırıp yazımı okuduğunuz için çok teşekkür ederim. Bu yazıyı post ederken dinlediğim şarkı ise: Michael Kiwanuka Love & Hate Sonra ki yazılarda görüşmek üzere hoşçakalın !
0  

Asp .Net Core MVC üzerinde Tekli ve Çoklu Resim Yükleme

Herkese Selamlar ! Bugün sizler ile beraber asp.net core mvc üzerinde tekli ve çoklu resim yükleme işlemlerine bakacağız. Web uygulamalarında artık dosya yükleme işlemi olmazsa olmaz duruma geldi. Herhangi bir web uygulamasına girdiğinizde kariyer sitesi, sosyal medya, kamu işlemleriniz için kullanabileceğiniz ya da günlük hayatta girdiğimiz sıradan web uygulamasında bile resim yükleyebileceğimiz bir alan ciddi bir ihtiyaç haline geldi. Bugün ise sizler ile beraber Core MVC üzerinde bu işlemi tam olarak nasıl gerçekleştiriyoruz bir ona bakacağız. İlk aşamada uygulamamız bir core mvc uygulaması olduğu için Startup.cs sınıfımızı aşağıda ki gibi düzenliyoruz.

 

    public class Startup
    {

        public void ConfigureServices(IServiceCollection services)
        {
            services.Configure<CookiePolicyOptions>(options =>
            {
                services.AddMvc();
            });


            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
        }

        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            app.UseMvcWithDefaultRoute();
        }
     }

Uygulamamızı tam olarak açıklamaya başlamadan önce daha önce bahsetmiştim ama bir kez daha kısa bir şekilde açıklamakta fayda var ViewImports. Birden fazla view içerisinde ortak olarak kullanılmasını beklediğimiz directiveleri topladığımız bir yer var orası da ViewImport . Ayrı ayrı eklemek zorunda kaldığımız bir takım directivelari sadece bir adet ViewImport içerisine ekleyerek tüm viewlar tarafından kullanılmasını sağlayabiliriz. _ViewImports.cshtml dosyamızın gövdesine ise aşağıda ki tek satırı ekliyoruz.

 

@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

@addTagHelper sayesinde eklediğimiz viewlar üzerinde ihtiyaç duyduğumuz helperlara rahatlıkla erişip kullanabileceğiz. Şimdi ise tek bir görsel nasıl upload edilir buna giriş yapabiliriz. Uygulamamızın Controllers klasörüne bir adet “HomeController” isminde controller ekliyoruz ardından ise aşağıda yer alan tanımlamalarımızı yapıyoruz.

 

IHostingEnvironment _env;
Random rnd = new Random();
string directory;

Bu yazıyı okuyanlar arasında klasik asp.net ya da asp.net mvc üzerinde çalışmış olanlar vardır diye düşünüyorum. Bu tarz eski platformlar arasında sunucu ile ilgili bir işimiz olduğunda “Server” propertysi ile işlermizi yürütüyorduk. Özellikle söz konusu resim ya da bir dosya yükleme işlemi olduğunda Server.MapPath her zaman bize yardımcı olmuştur. .Net Core mimarisi geldikten sonra ise sunucu ortamı ile ilgili işlemlerimizi yürütebilmemiz için IHostingEnvironment geldi. IhostingEnvironment üzerinde çalıştığı sunucu hakkında bize ortamsal bilgileri getiren bir interfacedir. Sunucu üzerinde resimlerimizin kayıt altında tutulması için ihtiyacımız olan dizini bu interface sayesinde gerçekleştiriyor olacağız.
String tipinde olan directory ise yolun kendisini , random nesnemiz ise resmimize rastgele bir isim vermemizi sağlayacaktır.

 

        public HomeController(IHostingEnvironment env)
        {
            _env = env;
            directory = _env.ContentRootPath + "/Images/";
        }

Yukarıda yer alan kod bloğumuzda ise bir adet yapıcı method içerisinde değerlerin doğrudan atanmasını sağladık. _env.ContentRootPath kendi uygulamamızın dizinini verir bize. Ben ise doğrudan dizin içerisinde değil “Images” klasörü altında toplanmasını istediğim için uygulamamıza bir adet “Images” isminde klasör açıyorum. Ardından sayfamızı göstereceğimiz sıradan bir IActionResult tipinde Index isminde bir methodumuz var.

 

        public IActionResult SingleFile(IFormFile file)
        {
          
            using (var fileStream = new FileStream(Path.Combine(directory,rnd.Next(0,99999).ToString()+".png"),FileMode.Create,FileAccess.Write))
            {
                file.CopyTo(fileStream);
            }
                return RedirectToAction("Index");
        }

Resim yükleme işlemlerimizi gerçekleştirecek olan esas methodumuz ise ;

 

        public IActionResult SingleFile(IFormFile file)
        {
          
            using (var fileStream = new FileStream(Path.Combine(directory,rnd.Next(0,99999).ToString()+".png"),FileMode.Create,FileAccess.Write))
            {
                file.CopyTo(fileStream);
            }
                return RedirectToAction("Index");
        }

Bu method aslında gayet kolay. Arayüz üzerinden gelecek olan resmi yakalayan IFormFile tipinde file isminde bir parametremiz var. Using içerisinde ise resmin kayıt altına alacağı directory dizini ona verdiğimiz rastgele bir isim (dosya altında isimler çakışmasın diye ) ve bir adette dosyamızın uzantısı yer almakta. Dosya modumuzun create ve bir adette yazma iznini vermemiz gerekmekte. Takiben fileStream sayesinde kişisel bilgisayar içerisinde bir dizinde yer alan resmi kendi sunucumuz içerisinde kopyalıyor ve yine kendi viewimiz üzerine yönlendiriyoruz. Bu işin back-end kısmıydı. Front-end tarafında ise ;

 

<div>
    <h4>Single file Upload</h4>
    <form asp-controller="Home" asp-action="SingleFile" enctype="multipart/form-data" method="post">
        <input type="file" name="file" value="" />
        <button type="submit">Submit</button>
    </form>
</div>

Hangi controller üzerinde ve hangi action sayesinde bu form koşacak onu belirtiyoruz. Tabi ki de söz konusu bir dosya olduğu için encryption type ve methodun post zamanında tetikleneceğinide söylememiz gerekmekte. Uygulamamızı çalıştırınca karşımıza gelecek olan ekran gayet sade.

Çalıştırıp denediğimizde ise “Images” klasörümüz altında bu resimlerin yüklendiğini görebiliriz.

Tekli dosya yükleme işlemi bu kadar kolay. Sıra geldi çoklu dosya işlemine aslında o da bir öncekine ciddi anlamda benzer. Sadece ufak tefek farklılıklar söz konusu. “MultipleFiles” isminde ayrı bir IActionResult daha ekliyoruz.

 

        public IActionResult MultipleFiles(IEnumerable<IFormFile> files)
        {
            foreach (var file in files)
            {
                using (var fileStream = new FileStream(Path.Combine(directory, rnd.Next(0, 99999).ToString() + ".png"), FileMode.Create, FileAccess.Write))
                {
                    file.CopyTo(fileStream);
                }
            }
            return RedirectToAction("Index");
        }

Bu sefer ise parametre olarak IEnumerable tipinde parametremizi hazırlıyoruz. Sebebi ise belli birden fazla resim gelecek çünkü. Aynı tekli dosya içerisinde kurguladığımız yapıyı ise foreach döngüsü ile tekrarlanmasını sağlıyoruz. Bu sayede her bir resim için aynı işlem tekrarlanmış oluyor.

Front-End tarafında da tahmin edeceğiniz gibi sadece küçük bir detay söz konusu.

 

<div>
    <h4>Multiple file Upload</h4>
    <form asp-controller="Home" asp-action="MultipleFiles" enctype="multipart/form-data" method="post">
        <input type="file" multiple name="files" value="" />
        <button type="submit">Submit</button>
    </form>
</div>

Bu detay ise file tipindeki input parametremizın multiple olduğunu belirtiyoruz. İşte bu kadar. Artık sizlerde ihtiyacınız olması durumunda core mvc web uygulamalarınıza resim yükleme işleminizi kolayca gerçekleştirebileceksiniz. Örneği ise github hesabımdan tam olarak görebilirsiniz. Bu yazıyı post ederken dinlediğim şarkı ise: Metallica – Sad But True
Yazımı okuduğunuz için teşekkür ederim. Sonra ki yazılarımızda görüşmek üzere !

0  

Asp .Net Core MVC üzerinde Sayfalama (Pagination) Nasıl Yapılır ?

Herkese Selamlar ! Bugün sizler ile beraber sayfalama yani pagination nasıl yapılır ona bir bakacağız . Özellikle bir sayfa üzerinde çok satırlı veri göstermek durumunda kaldığımız da bazen hem kullanıcı taraflı hem de yazılım geliştirmeni taraflı problemler ortaya çıkabiliyor. Bir sürü veriyi tek bir sayfa üzerinde göstermek demek aslında kullanıcının aramak istediği veriyi bulması için sayfa üzerinde dakikalarca aşağı inmek zorunda kalması anlamına gelebilir. Yazılım geliştirmeni tarafından baktığımız da ise çok satırlı verileri veri tabanı üzerinden çektikten sonra tek bir sayfa üzerinde göstermeye çalışmak ciddi performans sorunlarına sebep olabilir. Bu tarz durumlarda sayfalama kullanmak gerçekten başarılı bir çözüm yolu olacaktır. Yazımız içerisinde .net core mvc ve entity framework core kullanarak hazırladığım örnek üzerinden ilerleyeceğiz.

İlk olarak PaginationDB isminde bir veritabanı , içerisine ise Product isimli bir tablo yaratıyorum. Tablonun sütunları ise ProductID, ProductName , ve Discontinued isimli. ProductID tipi int , primary key ve otomatik artan . ProductName nvarchar(50) ve son olarak Discontinued ise bool tipinde . Bu aşamayı geçtikten sonra ise bir .net core mvc projesi başlatıyoruz. StartUp.cs in içerisnde ConfigureServices methodunun gövdesine ise 2 farklı kod satırı ekliyoruz. Bunlarda ilki ;

Services.AddMvc( ) methodu . Bu method aracılığı ile projemizi tam olarak bir MVC seklinde kullanmak ya da bir diğer şekli ile mvc hizmetini kullanmak istiyorsanız bu methodu ConfigureServices isimli methodun gövdesine ekliyoruz.

Ardından eklememiz gereken method ise Services.AddSingleton() fakat bu method tam olarak giriş yapmadan önce IActionContextAccessor tam olarak ne işe yarıyor bir onu açıklayalım sizlere. Bu görmüş olduğumuz nesne Context bilgilerimizin Controller tarafında tam olarak kullanılmasını sağlar Services. AddSingleton methodu sayesinde ise kullanacağımız nesneye her ihtiyac duyduğumuzda değil sadece bir sefer instance alınarak kullanılmasını sağlar.

 

public void ConfigureServices(IServiceCollection services)
{
            services.AddSingleton<IActionContextAccessor,ActionContextAccessor>();
            services.AddMvc();
}

Takiben ise Configure methodunun içerisine uygulamamızın standart routin kısmını ayarlıyoruz ve Startup.cs içerisinde işimiz bitiyor.

 

app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Product}/{action=Index}/{id?}");
            });

Projemize appsettings.json dosyasını ekleyerek yolumuza devam ediyoruz. Dosyamız içerisinde veri tabanına bağlanmamızı sağlayacak olan bağlantı ifademizi yazıyoruz.

 

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=.;Database=PaginationDB;user id=sa;Password=YourPasswordMustBeHere"
  }
}


Yavaş yavaş uygulamamız şekilleniyor. Models klasörünün içerisine Product isimli bir sınıf ekliyoruz ve gövdesini veri çekeceğimiz tabloya göre oluşturuyoruz.

 

[Table("Product")]

    public class Product
    {
        public int ProductID { get; set; }

        public string ProductName { get; set; }

        public bool Discontinued { get; set; }
    }

Sınfın üzerinde görmüş olduğunuz [Table(“Product”)] veri tabanı içerisinde özellikle belirtilmiş olan bir tabloya map edilecek ise yani eşitlenecek ise kullanıyoruz . Bu sınıfı da tamamladıktan sonra DataContext isimli ayrı bir sınıf daha ekliyoruz. DataContext sınıfımıza DbContext sınıfımızdan kalıtım alıyoruz ki problemsiz bir şekilde Entity Framework Core yapısını kullanabilelim . DataContext sınıfımızın esas amacı ise daha önceden uygulamamıza eklemiş olduğumuz appsettings.json dosyamızda yer alan connection strings yani bağlandı ifadesini okumak ve doğru bir şekilde veri tabanı ile haberleşebilmektir. DataContext sınıfımızın gövdesini ise aşağıda ki gibi doldurabiliriz.

 

public class DataContext:DbContext
    {
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            var builder = new ConfigurationBuilder()
                                .SetBasePath(Directory.GetCurrentDirectory())
                                .AddJsonFile("appsettings.json");

            var configuration = builder.Build();

            optionsBuilder.UseSqlServer(configuration["ConnectionStrings:DefaultConnection"]);
        }

        public DbSet<Product> Product { get; set; }

    }

Controller tarafına tam olarak geçmeden önce sayfalama işlemini kolay bir şekilde yapmamızı sağlayan 3. Parti bir araç olan “PagedList.Core.Mvc” aracını Manage Nuget Packages üzerinden kuruyoruz projemize.

Uygulamamızda ihtiyaç duyduğumuz altyapıyı neredeyse tamamladık. Bir adet Product isminde controller ekliyorum ve gövdesini aşağıda ki gibi kodluyorum.

 

using Microsoft.AspNetCore.Mvc;

using PagedList.Core;

using PaginationWithASPNETCoreWithEF.Models;

namespace PaginationWithASPNETCoreWithEF.Controllers
{
    [Route("Product")]
    public class ProductController : Controller
    {
        private DataContext _db = new DataContext();

        [Route("index")]
        [Route("")]
        [Route("~/")]
        public IActionResult Index(int page = 1, int pageSize = 3)
        {
            PagedList<Product> model = new PagedList<Product>(_db.Product,page,pageSize);

            return View("Index",model);
        }
    }
}

IActionResult içerisinde sayfalama içerisinde ihtiyaç duyacağımız 1 sayfa içerisinde kaç adet satır bulunacak kısmını ise Index methodunun içerisinde parametre olarak barındırıyoruz . Methodun gövdesinde ise PagedList üzerinden instance alıyoruz ve hangi nesne üzerinde çalışması gerektiğini 1 sayfa üzerinde kaç satır veri gözükmesi gerekiyor pagedlist nesnesi içerisine bunları parametre olarak giriyoruz.Methodun dönüş tarafında ise View kısmına yönlendirirken model ile beraber gönderiyoruz ki sayfalama yaptığımız her veriyi taşıyabilelim. Tüm bu aşamaları geçtikten sonra bir adet view eklememiz gerekmekte fakat View eklemeden önce son bir kısım daha var o da ViewImport . Uygulama içerisinde aslında uygulama yerine birden fazla view içerisinde ortak olarak kullanılmasını beklediğimiz directiveleri topladığımız bir yer var orası da ViewImport . Ayrı ayrı eklemek zorunda kaldığımız bir takım directivelari sadece bir adet ViewImport içerisine ekleyerek tüm viewlar tarafından kullanılmasını sağlayabiliriz. Şu an pek ihtiyacımız yok ama yine de bu yazı içerisinde bahsetmek istedim. Proje içerisine bir adet Razor View Import ekliyoruz ve gövdesini ise aşağıda ki gibi düzenliyoruz .

 

@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@addTagHelper *,PagedList.Core.Mvc

Geriye sadece tek bir iş kaldı o da View tarafını düzenlemek . View alanında sayfalamayı zaten harici bir araç üzerinden gerçekleştirdiğimiz için sadece veriyi uygun formatta ve bootstrap kullanarak göstermek kalıyor o kadar .

View kısmını ise aşağıda ki gibi düzenliyoruz.

 

@{
    Layout = null;
}

@model  PagedList.Core.IPagedList<PaginationWithASPNETCoreWithEF.Models.Product>

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
    <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-wp-preserve="%3Cscript%20src%3D%22https%3A%2F%2Fajax.googleapis.com%2Fajax%2Flibs%2Fjquery%2F1.11.3%2Fjquery.min.js%22%3E%3C%2Fscript%3E" data-mce-resize="false" data-mce-placeholder="1" class="mce-object" width="20" height="20" alt="&lt;script&gt;" title="&lt;script&gt;" />
    <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-wp-preserve="%3Cscript%20src%3D%22https%3A%2F%2Fmaxcdn.bootstrapcdn.com%2Fbootstrap%2F3.3.5%2Fjs%2Fbootstrap.min.js%22%3E%3C%2Fscript%3E" data-mce-resize="false" data-mce-placeholder="1" class="mce-object" width="20" height="20" alt="&lt;script&gt;" title="&lt;script&gt;" />
</head>
<body>

    
<table class="table table-hover">

        
<tr>
            
<th>ProductID</th>

            
<th>ProductName</th>

            
<th>Discontinued</th>

        </tr>

        @foreach (var product in Model)
        {
        
<tr>
            
<td>@product.ProductID</td>

            
<td>@product.ProductName</td>

            
<td>@product.Discontinued</td>

        </tr>

        }
        
<tr>
            
<td colspan="3" align="center">
                <pager list="@Model" asp-controller="Product" asp-action="Index"/>
            </td>

        </tr>

    </table>

</body>
</html>

Şu an her şey hazır . Uygulamamızın ekran görüntüsü ise aşağıda ki gibi;

 

Bu yazılıkta bu kadar uygulamayı github adresimden indirebilirsiniz. Yazımı okuduğunuz için teşekkür ederim .Bu yazıyı post ederken dinlediğim şarkı ise: Aerosmith – Crazy Sonra ki yazılar da görüşmek üzere.

0  

17 Nisan 2020 IEEE Yaşar Üniversitesi Discord Oturumu

Herkese Selamlar ! Başlıktan da anlaşılacağı gibi 17/04/2020 tarihinde saat 20:00 de Yaşar Üniversitesi IEEE öğrenci topluluğunun düzenlediği discord oturumunda konuşmacı olacağım. Vaktiniz varsa dinlemenizi tavsiye ederim. Oturuma linke tıklayarak erişebilirsiniz. Şimdiden herkese teşekkür ederim…

0  

Mustafa KEMAL

Herkese Selamlar ! Yakın arkadaşlarım ve sosyal medya üzerinden arkadaş olduğumuz kişiler var ise aranızda elimden geldiğince çok okumaya çalıştığımı hemen hemen herkes bilir . Okumak güzel şey gerçekten . Oturduğunuz koltuktan çok uzaklara gidebiliyorsunuz üstelik sadece sayfaları çevirerek. Bugün sizler ile düşüncelerimi paylaşmak istediğim kitap ise 2018 yılında piyasaya çıkmış olan Mustafa Kemal . Yazarı ise Yılmaz ÖZDİL .

Her ne kadar tasvip etmesem de kitabın farklı versiyonları çok uçuk meblağlara yayın evinin kendi sitesinden satıldı ve her ne kadar herkes tasvip etmediğini söylese de dakikalar içerisinde o uçuk meblağlı kitap tükendi. Ben ise karton kapaklı olanından bir adet edindim . Yukarıda ki cümle de yer alan kısmı bir kenara bırakırsak kitap gerçekten etkileyici şekilde güzel . Ulu Önder Mustafa Kemal ATATÜRK‘ün doğumundan ölümüne kadar her detayı büyük bir tarafsızlıkla okuyorsunuz. Öğrencilik yıllarında ki hedeflerini oluşturması , bulunduğu koşullar dahilinde bahane üretmeden hedeflerine nasıl gittiğini , günümüzde yaşayan bizler için büyük bir ders niteliğinde . O dersi almazsak rakı sofralarında ülkeyi kurtarmaya devam ederiz tabi o konu çok ayrı. Kitabı genç – yaşlı demeden her meslek grubundan herkesin okuması gerekmekte . O devirde ki vizyonerliği , askeri stratejilerinin başka komutanlar tarafından nasıl kullanıldığı okuyarak nerelere gelinebileceğinin somut kanıtı . Kararlı duruşu , insanları kırmadan onlara karşı nasıl tavır takınarak istediklerini yaptırdığı , ileri görüşlülüğü ….. ve daha bir çok kişisel özelliği . Şu tarz bir soru sorabilirsiniz bana bu kitabı diğer Atatürk kitaplarından ayıran fark ne ? Aslında bende o farkı merak edip kitabı alanlardanım. İçerisinde verilen örnekler ve anlatılan tüm anılar belgeler ile ispatlanmış . Kötü özelliklerine de yer verilmiş . Bu da yazarın objektif davrandığını ve kitabın samimiyetini gösteriyor , dili çok yalın. Kadın , erkek yediden yetmişe herkesin sıkılmadan okuyacağı bir kitap . Özellikle eğitiminiz ve kariyeriniz anlamında siz de ne yapacağınızı bilmeyenlerdenseniz size de müthiş bir şekilde bu kitap yardımcı olacaktır . Bu arada daha önce paylaşmıştım ama okuduğum diğer kitaplara ise: goodreads.com üzerinden erişebilirsiniz. Bu yazılıkta bu kadar . Bu yazıyı post ederken dinlediğim müzik ise : Metallica: One Sonra ki yazılarda görüşmek üzere hoşça kalın ….

0  

Yeni Başlayanlar İçin 10 Yapay Zeka Kitabı

Herkese Selamlar ! Özellikle yapay zeka üzerine ücretli olarak çok fazla eğitim var . Aynı zamanda ücretsiz olarak bir çok video yayın sitelerinde yine benzer eğitimler var . Ben her zaman yazılı yayınlardan yanayım. Sebebi ise elimin altında güvenilir bir kaç kaynak olması hep hoşuma gitmiştir. Hem sıkıldığımda okumak hemde okurken bir çok şeyi düşündürmesi cidden güzel bir olay bence. Özellikle son bir kaç yılda yapay zekanın tırmanışa geçmesi ile programlama dünyasına sırf bu sebepten dolayı giriş yapanlar ya da uzun süredir programlama ile ilgilenip yavaş yavaş yapay zeka tarafına geçmek isteyenler söz konusu. Yani kitapların hepsi başlangıç seviyesine hitap etmekte . Onları da düşünerek popüler yapay zeka kitaplarını sizler için topladım . Yalnız hepsi ingilizce şimdiden sizlere söylüyorum .

Artificial Intelligence: A Modern Approach (3rd Edition)
By Stuart Russell & Peter Norvig

Bu kitap yapay zekaya doğrudan bir bakış açısına sahip , lisans ya da yüksek lisans içerisinde yapay zeka ile ilgili bir ders alıyorsanız bu kitabu kaynak olarak kullanabilirsiniz . İçerisinde ise arama algoritmaları , doğal dil işleme ve oyun teoremleri üzerine bilinmesi gereken konulara ağırlık verilmiş .

Artificial Intelligence Basics: A Non-Technical Introduction
By Tom Taulli

Tom Taulli’nin yazmış olduğu kitap içerisinde standart yapay zeka konularına hakim olursunuz . Yapay zeka , derin öğrenme , makine öğrenimi, robotik ve daha bir çok alan . Kitabı diğerlerinden farklı kılan nokta ise yapay zekanın ve yapay zekanın ihtiyaç duyduğu veriler üzerinde çalışılırken etik durumu ile sosyal problemlere de değinilmiş olmasıdır .

Machine Learning For Dummies
By John Paul Mueller and Luca Massaron

Machine Learning yani makine öğrenimi üzerine yazılmış olan bu kitapta ise temel örneklerin yanı sıra fraud detection , credir scoring ve automation alanları üzerinde durulmuş . Makine öğreniminin yanı sıra büyük veriyede değinilmiştir .

Neural Networks: A Visual Introduction for Beginners
By Michael Taylor

Açıkçası benim aralarında favorim bu kitap diyebilirim . Sebebi ise yapay zeka, makine öğrenimi , derin öğrenme gibi alanların temeli aslında yapay sinir ağlarıdır . Yapay sinir ağları makine ve derin öğrenme ile nasıl alakalı , makine ve derin öğrenme yapay zeka ile nasıl alakalı bunların arasında büyük veri nerede kalıyor bunu güzel bir şekilde açıklamış .

Artificial Intelligence: Foundations of Computational Agents, 2nd Edition
By David L. Poole and Alan K. Mackworth

Poole ve Mackworth bilgisayar bilimleri içerisinde gerçekten saygı duyulan iki hoca . Yazdıkları kitap içerisinde ise yapay zeka içerisinde kullanılabiliecek akıllı hesaplama etmeni konseptinden ( intelligent computational agents ) başarılı bir şekilde bahsedilmiş.

Artificial Intelligence: An Essential Beginner’s Guide to AI, Machine Learning, Robotics, The Internet of Things, Neural Networks, Deep Learning, Reinforcement Learning, and Our Future
By Neil Wilkins

2019 yılında yayınlanan bu kitap gerçekten güncel bilgilere sahip . Klasik yapay zeka konularının yanı sıra insan beynini bilgisayar simülasyonu gibi nasıl davranması gerektiği de ele alınmıştır .

Artificial Intelligence By Example
By Denis Rothman

Denis Rothman tarafından yazılan bu kitap diğer bir favorim diyebilirim. Sebebi ise kitaplara baktığımız da özellikle eski kitaplara bakıyorsak içerisinde gerçek hayata uyarlanmış örnekler ciddi anlamda az . Bu kitapta ise yapay zekanın , block chain ve nesnelerin interneti içerisinde nasıl kullanıldığına dair güzel örnekler söz konusu .

Artificial Intelligence for Humans
By Jeff Heaton

Jeff Heaton tarafından yazılmış bu kitap ise yapay zeka içerisinde kullanılan ileri düzey matematiksel hesaplamalardan bahsetmektedir . Aynı zamanda doğrusal regresyon , hata hesaplama , kümeleme ve daha bir çok konudan bahsetmektedir .

Machine Learning for Absolute Beginners: A Plain English Introduction
By Oliver Theobald

Theobald tarafından hazırlanmış bu kitap içerisinde genelde teknik terimlere ve bu alanda ilerlemek isteyenlere tam olarak jargon içerisinde yer alan ifadeler ne anlama geliyor güzel bir şekidle açıklanmış .

The Quest for Artificial Intelligence: A History of Ideas and Achievements
By Nils J. Nilsson

“Ben herhangi bir konuya başlamadan önce tarihini okurum” diyenlerdenseniz Nilsson tam olarak sizi düşünerek yazmış bu kitabı . Yapay zeka , makine öğrenimi , derin öğrenme ortaya nasıl çıktı?

İlk ortaya çıkışından bu zamana kadar evrimi nasıl gerçekleşti ? Bu tarz sorulara cevap vermekte . Aynı zamanda ise yapay zeka modern günümüz teknolojisine yüz ve ses tanıma , robotik alanlarına yön veriş şekliylede ele alınmakta .

Bu yazılıkta bu kadar . Yazımı okuduğunuz için teşekkür ederim . Sizlerinde favori kitaplarınız varsa türkçe ya da yabancı dilde yazılmış olanlar yoruma eklemeyi unutmayınız lütfen. Bu yazıyı post ederken dinlediğim şarkı ise: Metallica: Mama Said Sonra ki yazılarımız da görüşmek üzere….

Not : Bu yazı https://www.goodreads.com/shelf/show/artificial-intelligence adresi altında yer alan kitaplar arasından seçilerek derlenmiştir.

0  

Temiz Kod Yazmak için 8 İpucu ?

Herkese Selamlar ! Bugün sizlere hemen hemen tüm yazılımcıların ortak derdi olan “Temiz Kod” yazmak için 8 ipucu vermeye çalışacağım . Aslında her yazılımcı temiz kod yazmak ister . Kim daha kısa şekilde yazılabilecek bir işi daha da uzatmak ister ki ? Yalnız bir problem söz konusu . O işi tamamlamak için bir süreniz ve ciddi bir müşteri baskısı altında olduğunuzu varsayarsak kimsenin umrunda olmaz temiz kod yazmak . Herkesin tek derdi o işi en kısa surede tamamlamak ve müşteriye mahçup olmadan çalışır hale getirmek ister . Daha sonra uygun bir anımda bakarım der aynı yazılımcı fakat öyle bir vakit yoktur . Her daim üzerinde çalışılması gereken bir takım sorunlar ortaya çıkacaktır. Birde üzerine baska birinin kodu üzerinde düzenleme yapmamiz istenirse işte o zaman çok daha dikkatli olmamız gerekir. Bir de o kod ne kadar güzel yazılmış olursa olsun hep kötü olduğunu iddia edenler vardır ki o tarz kişilerin yanından geçerken iyi bir kulaklık takmanızı öneririm . Şimdi ise basit gözüken fakat alışkanlık edindiğimiz takdirde işimizi çok kolaylaştıracak olan 8 ipucuna bir bakalım .

İsimlendirme Standartınız Olmalı
Bunu her söylediğimde çok yanlış anlaşılıyor . O yüzden olabildiğince detaylı bir şekilde burada açıklamak istiyorum . Tabiki de sizin de bir standardınız vardır elbette fakat her kod yazdığınız ya da her geçici olarak geldiğiniz proje içerisinde kendi standartlarınızı kullanamazsınız . O projeye ait olan bir standart kullanmanız gerekmekte . Proje çok yıllık ise o proje içerisinde çok fazla geliştirmen bulunmuştur . Her gelen kendi standartını uygulamaya kalkarsa o uygulama içerisinde ki standartı olduğu gibi öldürmüş oluruz . Dediğimiz gibi sizlerde kendi standartınızı değil o projede varolan standartı uygulayın , proje uzun soluklu ve çok fazla geliştirmen yer almış ise en azından yer aldığınız modül içerisinde ki standartı yakalamaya çalışın . Bu sayede sizden sonra gelecek olan geliştirmenin biraz işini kolaylaştırmış olursunuz .

Lojik Her Zaman Gözden Geçirilmeli
Yeni bir özellik eklenmesi için müşteriden talep geldiğini varsayalım . Az çok hemen fikir oluşur sizde . Veriyi çekeceğiniz katman , nerede veri üzerinde değişiklik yapacağınız vesaire bunların hepsi bellidir . Kesinlikle hemen kod yazmaya başlamayın . Sözde Kod (Pseudo – code) , akış diagramı yada kullanım örnekleri hepsini incelemelisiniz . Ardından ise yapmanız gereken şey şu olmalı . Bu talebe benzer bir talep daha önce proje içerisinde kullanılmış mı ? Eğer ki kullanılmış ise tamamen oraya benzeterek yazmaya çalışın . Bu sayede o kod bloğu içerisinde karşılaşacağınız bir problem orada çözülmüş olabilir !

Büyük Methodlardan Kesinlikle Kaçının
S.O.L.I.D. principles içerisinde yer alan S harfinin temsil ettiği Single Responsibility Principles der ki bizlere “Bir method ya da sınıfın sadece tek bir görevi olmalıdır.” Aynen bunu gerçekleştirmelisiniz arkadaşlar . İlerlerken kurguladığınız mantık ise çok basit iki farklı kural söz konusu .

1- Kod tekrarı yerine method oluşturmalısınız .

2- Bir method içerisinde birden fazla görev olmamalı .

Sizin yazmanız beklenen yeni özelliğin tamamını bir method içerisine sığdırmaya kesinlikle kalkmayın. O zaman çok fazla method olacak belki de . Bırakın çok fazla olsun . Kod okurken olabildiğince kolaylaşacak işiniz . Bir kod kolay okunuyorsa onun standartı cidden iyidir .

Indentation Kullanmak
Bu biraz tartışmaya açık bir konu olsada sürekli yan yana ve her bir parantezin hemen yanına yazılmış olan kodu okumak mı yoksa yeteri kadar boşluk bırakılmış , alt alta yazılmış kodu okumak mı kolay ? Siz o tarz bir şey hazırlamasanız bile sonradan o kodu okumaya çalışacak olan kişi o boşlukları hazırlayıp ondan sonra okuyacaktır. Derleyicinin tabiki de böyle bir şeye ihtiyacı yoktur . Nasıl yazılırsa yazılsın doğru yazıldığı müddetçe bir problem yok . Buna biraz dikkat edersek fena olmaz sanki.

Açıklayıcı Yorumlar Kullanın
Çoğu projede ki en önemli sorunların başında gelen problemlerden biridir bu. Eğer ki yeni özellik ekliyorsanız kodun amacını kısaca açıklamanız , ne zaman yaptığınız (aslında bu versiyon kontrolden bulunur) son olarak ise kim tarafından yapıldığını söylemeniz yeterli . Bazı firmalara eğitime gittiğimde bundan bahsediyorum ama genelde herkes o projeden sanki hiç ayrılmayacakmış gibi biz anlasak ne yazdığımızı yeter mantığı ile çalışıyorlar ki bu da durumu daha da içinden çıkılmaz hale getiriyor .

Kod İçerisinde Aşırı ve Gereksiz Yorumlar Yazmayın
En Başta şunu söylemek istiyorum ki yukarıda ki ile bu madde tamamen birbirinden farklı . Bir değişiklik yaptıktan sonra /*Bunu ozhan yaptı*/ ya da tamamlayamadığınız bir iş için /*Sonra devam ederim*/ gibisinden yorumlar bırakmayın . Komik gelebiliri ama inanın bana çok fazla bunların sayısı. Geçici olarak yazabilirsiniz tabi ama kodunuzun ürün içerisinde yer almadan önce bunları kesinlikle silmelisiniz . Uzun uzun yorum yazın ama kodunuzun içerisine değil. Çok fazla yorum yazacak bir durumunuz var ise kodun bulundugu satı rile beraber farklı bir not aracında saklayın . Bu sayede çalışmanızı da bir parka daha düzenlemiş ve yorumlarınızı control altına almis olursunuz .

Eski ve Kullanılmayan Kodları Temizleyin
Aslında bu hemen gerçekleştirilmeli fakat ya ileride lazım olursa ya da başka bir özellik konusunda o kod bloğu bana yardımcı olabilir belki diye yorum satırına dönüştürüp basit bir açıklama ile saklıyoruz. Bunun en büyük dezavantajlarından biri ise o kod çok değiştirilmiş ve üzerinde çok oynanmış bir kod bloğu bize nasıl yardımcı olabilir ? Aynı zamanda üzerinden çok zaman geçtikten sonra ya da ekibe yeni bir üye gelince de kafa karışıklığı yaratabilir . Silmenizde fayda var ama . Eğer ki çok ihtiyaç duyarsanız source control üzerinden geriye gidip alma imkanınız söz konusu .

Lojik Her Zaman Kod İçerisinde Olmalı
Eğer ki veri çekiyorsanız bir yerden ki bu neredeyse küçük ölçekli bir proje için bile olması gereken bir şey artık az bir iş yükü bile olsa veritabanı içerisinde o işi yapmayın . Her şey kodunuz içerisinde aksın . Bu sayede her şeyi kontrol altında tutarsınız ve değişikliklerinizi daha kolay gerçekleştirirsiniz.

Bu tarz ifadeleri sizler ile ne kadar paylaşırsak paylaşalım en güzeli ise iş , proje ortamında tecrübe edince gerçekleşmekte. O yüzden şu an bu ipuçlarına uymaya çalışın ama zamanla hepsini çok daha iyi anlayıp , çok faha iyi bir sekilde uygulamaya başlayacaksınız zaten. Okuduğunuz için çok teşekkür ederim. Bu yazıyı post ederken dinlediğim şarkı ise: Kurban – Yine Sonra ki yazılarımız da görüşmek üzere….

0  

Teknik Konuşmalar Nasıl Eğlenceli Hale Gelir ?

Herkese Selamlar ! Bugün sizlere teknik ama teknoloji ile alakası olmayan bir yazı hazırladım . Bence hepimizin işine çok yarayacak neden mi ? Sebebi aslında şu aramızda gerçekten iyi kod yazan kişiler var fakat bu paylaşmaya gelince bazen zorlanıyor ya da aslında konuya gerçek anlamda çok hakim gayet de iyi anlatıyor fakat anlatırken sıkılıyoruz . Şunu gönül rahatlığı ile söyleyebilirim ki bu işin uzmanı değilim sizlerle yine gözlemlerimi paylaşmaya çalışacağım . Bu sefer gözlemler ise kendi oturumlarım ve o oturumlar da bulunmuş katılımcılar ile alakalı tamamen. Yanlış olmadığını düşündüğüm bir kaç öneri sadece .

Soruları En Sona Bırakmayın !

Bir konuyu anlatmaya başladınız ve her şey gayet yolunda gidiyor . Siz bu konuyu anlatırken ve dediniz ki “ Teorik olarak anlatacağım ve demodan sonra tüm sorularınızı yanıtlayacağım” bu tarz bir ifade ile yaklaşırsanız doğrudan seminerin ya da konferansın interaktif olmasını engellediniz demektir. Şunu kesinlikle unutmayın bir kişinin aklına gelen bir soru seminerin sonuna kadar unutulabilir . Ayrıca çok daha önemli bir durum var soru soruyu getirir. Etkinlik sonunda zaten kısıtlı vakit kalacağı için bunu bir de siz sınırlandırmış oluyorsunuz ve biraz da etkinliğin interaktif geçmesini engelliyorsunuz. Bırakın sorular o anda gelsin. Fazladan gelecek olan soruları etkinlik sonunda yine cevaplarsınız. Problem yok. Bu arada aklınızdan çıkarmamanız gereken en önemli şey siz oraya eğitim ya da seminer ne amaçla gitmiş olursanız olun temelinde orada ki insanlarla sohbet etmeye gittiniz. Bunu kesinlikle unutmayın ve sohbet ne kadar keyifli ise o kadar rahat hisseder herkes.

Her Zaman Kendinizi Tanıtmayın
Üniversite içerisinde öğrenciler ile beraber kariyer etkinliğindeyseniz kesinlikle kendinizi tanıtın . Onlar sizlerin anlatacaklarını kendilerinde bulmak için oradalar aslında bir parça. O yüzden güvendiğiniz , onların üzerinde etki yaratacak bir kariyeriniz ve zorlukları aştığınız hikayeleriniz varsa anlatmaktan çekinmeyin . Bunu paylaşırken ise nasihat şeklinde olmamalı . Unutmayın ki yaşı kaç olursa olsun kimse nasihat dinlemek istemez . Sadece bir önce ki başlıktada söylediğim gibi siz sohbet için oradasınız .

Şimdi ise senaryoyu değiştiriyorum . Bir firmaya eğitim için gittiniz , talep ettikleri konuyu anlatacaksınız . Kendinizi tanıtın ama isminiz , ne kadardır sektördesiniz , nerede çalışıyorsunuz söyleyeceğiniz ifadeler bunlar olmalı . Onlar zaten mesleğini eline almış çalışan kişiler. Sizin kariyerinizi merak etmiyorlar. Firmalarında ki eksik olan bir konuyu öğrenmek için sizinle beraberler . Uzun uzun kendinizi anlatırsanız karşılaşacağınız ilk soru “Eğitime ne zaman başlıyoruz ?” olacaktır ki bunu hiç birimiz istemeyiz.

Etkinlik Başlamadan Önce Salonda Olun !
Zaman zaman tabiki de şehir dışına çıkıyoruz bu tarz etkinlikler için ya da şehir içinde olsa bile trafik denilen bir problem söz konusu . Bunları da düşünerek etkinlik başlamadan önce salonda olmaya çalışın. Bunu bir kaç sebebi var . İlk sebebi ise sunum esnasında karşınıza çıkacak olan tüm teknik aksaklıkları ya da endişelerinizi salon görevlileri ile paylaşabilirisniz. Bunları çözdükten sonra ise katılımcılar ile ya da etkinliği organize eden kişiler ile sohbet edin bu hem sizin rahat hissetmenizi hem de onların etkinlik esnasında sizinle daha kolay iletişime geçmesini sağlar.

Meraklı Olun
Siz sunum yapmak için oradasınız . Anlatacağınız konu sizin de ilginizi çekiyor olmalı. Eğer ki çekmiyorsa ben neden dinleyeyim ki ? Orada bulunan kişilere en az onlar kadar sizin de bu konu ile ilgilendiğinizi , öğrenmek için çabaladığınızı hissetmeli . Aksi halde kitleyi kaybedersiniz . Vereceğiniz örnekler eğer ki çok yeni bir teknoloji değilse gerçek hayatta kullanılmış olan , yeni bir teknoloji ise yine gerçek hayat üzerinde nerelerde kullanabileceğini düşündüğünüz örnekler olmalı ve bunu yaparken aynı merak durumunu onlarla da paylaşmak için sizce nerelerde kullanılabilir ? gibi sorular yöneltin . Etkinlik ne kadar interaktif geçerse herkes için o kadar iyi .

Samimi ve Tarafsız olun
Bir teknoloji anlattığınızı varsayalım , avantajı ile dezavantajı ile paylaşmalısınız. Unutmayın ki siz pazarlamacı değilsiniz her teknolojinin kusurları vardır. O kusurları eleştirmekten çekinmeyin . Güzel tarafları çok fazla överseniz ve en önemlisi gereksiz yere , abartarak , tadını kaçırarak överseniz size geri dönüşü hoş olmayabilir .

 

Eğlenceli Olun
Oraya gittiniz ve bir şeyler paylaşıyorsunuz kesinlike şu tarz tavırlara girmeyin ben koskoca X firmasının yöneticisiyim sürekli gülemem ya da benim sahip olduğum ünvanlar var ciddi durmam lazım gibi düşüncelere katiyen müsade etmeyin . Basit bir denklem var siz de insansınız onlar da bu eşitliği kuvvetlendirecek olan ise diyalog içerisinde ki keyif katsayısıdır. Ne kadar güçlü olursa o kadar rahat ve güzel ilerler işler.

 

Özet Olarak
Kendinizi de onları da sıkmayın , konunuz üzerine yeterince bilgi edinin , ulaşılabilir olun saygıyı es geçmeyin ve en önemlisi gülümseyin. Bunları alışkanlık haline getirdikten sonra akışına bırakın . Geri kalanı kendiliğinden gelecektir

Kendi gözlemlerim doğrultusunda elimden geldiğince sizlere bu kavramları özetlemeye çalıştım. Bu yazımı burada sonlandırıyorum. Okuduğunuz için çok teşekkür ederim. Bu yazıyı post ederken dinlediğim şarkı ise: AWOLNATION – RUN Sonra ki yazılarımız da görüşmek üzere….

0  
EnglishGermanTurkish