Tasarım Modelleri

Dur. Tasarım dediğin uygulamanın tasarımından ibaret değil. İçindeki kodun da bir tasarımı var. Kullandığın yöntemlerin de, kurduğun bağlantının da, bağlandığın servisin de…

Uzun uzadıya tasarım yok şöyle yapılmalı yok böyle yapılmalı demeyeceğim. Ki zaten tasarım experi değilim…

Şöyle yapalım; internette ilgimi çeken tasarım kaynaklarının linkini paylaşayım; bir bakın. Sonra ne – nasıl olmalı yaptığın işin neyi doğru neyi yanlış bunu siz sorgulayın.

Güzel yaz lan şu kodu diyen Liskov Substitution (LSP) disiplini Burak Selim Şenyurt’tan

Üç beş güzel tasarım sunan chrome eklentisi PANDA, Ahmet Sülek ve William Channer’dan

Patronu ikna ettikten sonra cidden güzel olan tasarımları nasıl yapacağını açıklayan ve örnekleyen site GoodUI

Tasarım yeteneğim yok, benden front-end developer olmaz diyenlere ‘Hıh! Salak beni kullansana’ diyen site BootStrap ayrıca utanmadan performansa yönelik optimizasyon sağlayan araçlar da sunuyor.

Yaptık ettik nerde saklıcaz da gerektiğinde bulucaz dersen al eline bir kova ve doldur. Ya da BitBucket (ve de sourceTree)

{Şimdilik bu kadar. Güncellenecek mi? -Tabiki de!}

Advertisements

Bu beyni nasıl kullanıcam?

Konumuz beyin. Öncelikle bu makalenin artımlı olarak düzenleneceğini belirteyim. eksik ve kopuk olarak yazmış olabilirim; fikirler kelimeler hazır değil…

Normalde ‘kız beyni’ – ‘erkek beyni’, ‘tasarımcı beyni’ – ‘zeki insan beyni’ gibi ayrımlar yapılır. Peki karşıt özelliklerin bir insanda buluştuğu beyin nasıl tanımlanır? Buna combo mu desek mesela? Hybrid ya da…

900-Paint-Brain-l
Bir kategori uyduramadım, gerek de yok zaten. Çünkü ikisine de sahip olduğunda yaptığın işe, işinin bölümüne göre beyninin ‘tasarımcı’ olan sağını, ‘fikir adamı’ olan solunu kullanıyorsun. Diğer adı koyulmuş düşünce fikirleri de önyargılarını aştığında sende; içinde buluşuyor… Önemli olan önyargıları bırakıp da bir fikri somutlaştırırken; yaptığın işin doğru olduğuna önce kendin inanman ve yolundan şaşmaman..

Arkadaşın eğer bir fikir söylüyor da senin fikrini komple değiştirmene sebep oluyorsa sende ciddi bir hata var demektir. Fikrine fikir katsın bakış açını genişletsin ama direkt olarak etki etmesin. Olayın doğrusu bu. Kim ne derse desin.

Aslında olayların birçoğu önyargı ve kendine güvenmekle ilgili. Kendine güvenmeyen insan otomatik pilotu olan önyargısına güveniyor -> arkadaşı birşey söylüyorsa hemen true cevabını atıyor ve… işte boka sardı… sonrası felaket. Eğer önyargını kontrol edebiliyor, karşındakinin asıl amacını anlayabiliyorsan beynini kontrolden çıkarmıyorsun ve felaketten o an içinde kurtulmuş oluyorsun.

Ek: özellikle de kurumsal bir şirkette çalışmaya başladıktan sonra bunların ciddi konular olduğunu gördüm.

Konuya dönüyorum, beyin yoğun durumlarda veya sakinlik içinde kendini hardcore çalışmaya veya rolantiye almaya müsait yapıda. Tek tek bunları yapıyorsan sorun yok. Ya işin her ikisini de aynı anda kullanmayı gerektiriyorsa!? İşte o duruma  ‘Yazılımcı beyni’ diye bir tabir buldum. Bu beyin tiptronik vitese sahip mercedesler (hem otomatik hem de manuel olarak vites değiştirebildiğin vites kutusu) gibi çalışır. Uygulamanın tasarımını yaparken beynin sağını, bitirdin kodu yaz solunu, kodu tasarıma uyarla sağını, test et solunu, bakış açını değiştir her iki tarafı da… Bunu yapabilen çok fazla insan göremedim. Yapabildiğini sandığım insanları da uzun süre sonra tekrar gördüğümde önyargılarına bağlandıklarını – bağımlı olduklarını gördüm; acıdım. Yazık.

Artık bu yazının devamı için örnek vermem gerekiyor. Hangisini versem bilemiyorum. Yazacağım….

Gelecek.

Github ile gizli yeteneklerini ortaya sermek

Github ile gizli yeteneklerini ortaya sermek

“Ben bunu düşünmüştüm” anlarından biri daha… Sene 2008 – 2009; daha lisedeyim. Projelerimi word e açıklamalı bi şekilde yazıp bi de bişey olmasın diye pdf formatına dönüştürüp flash belleğimde taşırdım. Gerektiğinde de oradan ilgili kodu bulup yerinde kullanmaya çalışırdım… İlerde internet sitem olursa oraya da koyarım gibisinden düşüncelerim beyin fırtınalarım vardı. Var da. Ama durun! Github daha iyisini, daha gelişmişini düşünmüş yapmış. Hemen okuyalım ne olduğunu.

(İşte bunlar hep deneyim. Öyle yok Yunanlar öğle aralarında uyuyor, yok İspanyollar 13:00te güne başlıyor diye diye yatıp uyursanız hiçbirini takip edemez, öğrenemezsiniz… Bi de yok mu okulu bitirme yıllarına gelmesine rağmen ben şunu öğrenicem ben bunu öğrenicem diyenler… Geç bile kaldınız!)

Doğum günümde Alınacaklar Listesi

Böyle bir listeyi en çok istediğim şeyleri yazmak için oluşturdum. Biri bunları almazsa kendim de almayacağım. Bunlara sahip olmamı istemiyorsanız almamanız yeterli. 😦

  • ilginç renkli pilot kalemler
    beautiful_1x
  • Macbook Pro
    macbook
  • 7 Mart ’14
    Benimle çektirdiğiniz bir fotoğrafı doğum günümde -çerçevelettirmeseniz de olur- hediye olarak vermeniz benim için çok anlamlı olur. Çok sevinirim.
    Polaroid-camera
  • IPod Touch-5     (01.01.2015) (Doğum günüm yarın)
    new-ipod-touch-32-go-blue-generation-5

SOA Nedir?

Yazılım dünyasında birçok şeyi bildiğimi zannediyorum. Bilmediğim diğer şeylerin ise aslında bana çok da uzak olmadıklarını SOA ile gördüm… CV’lerde, iş ilanlarında hep birşeylerin kısaltması yazılır. Ben bunların isimlerini (kısmen) bilmiyorum. Ama yaptıkları iş; evet onları biliyorum. Bunlardan biri SOA.
Serkan Yazıcıoğlu kaynaklı bir tanım buldum, sizlerle paylaşıyorum… Sizin de bu tanımı bildiğinizi, kullanıdığınızı, sadece adının ne olduğunu bilmediğinizi varsayıyorum değerli yazılımcı rakiplerim =)
SOA (Service Oriented Architecture) birbirlerinden farklı servislerin daha karmaşık yapılar oluşturabilmesi için bir harmoni içerisinde beraber çalışabilmesi yaklaşımıdır. Dolayısıyla servis tabanlı mimari yaklaşımı ile tasarlanmış bir sistemin alt sistemi ise doğal olarak servisin ta kendisidir. Servisler ise birbirleri ile iletişime geçebilen yapılardır.

Detaylar:

Klasik mimari bize katmanların birbirleri ile konuşmasını ve üst katmanın alt katmanı çağırmasını söylemektedir. Katmanlı mimari dediğimiz bu yapının oluşturulabilmesi için belirli işleri yapan katmanların bölünmesi ve düzgün bir hiyerarşi ile birbirleri ile konuşabilmeleri şarttır. SOA ise en basit haliyle bu katmanların servis olarak oluşturulmasıdır. Tekrar basit mantık ile devam edecek olursak normal şartlarda oluşturduğumuz data katmanını bir servis haline getirdiğimiz taktirde aslında bir servis yapısına adım atmış oluruz. Bu sayede data katmanımız sadece tek bir uygulamaya değil içeriden ve dışarıdan birden fazla uygulamaya hizmet verebilir hale gelir. Anlıyacağınız üzere SOA bir framework veya kütüphane gibi elle tutulabilir bir altyapı değil, mimari bir yaklaşımdır.

SOA’nın S’si

İlk başta “servis tabanlı mimari” yaklaşımının tanımına bakıldığında servis kelimesinin web servisler (XML Web Services, WCF vs.) ile bağdaştırılması çok olası olmakla birlikte hatalı bir düşüncedir. Tabi ki özellikle WCF teknolojisi SOA yaklaşımı için çok uygun bir altyapı olsa da sadece IIS üzerinde host edilmediğini düşünmemiz gerekir. Örnek vermek gerekirse bir WCF servisini Windows servisi üzerinde host edebildiğinde ve tcp üzerinden connection kurulduğunda makinenin hiçbir internet veya intranet bağlantısı olmayabilir. Sadece windows servislerinin kullanılması da farklı bir yaklaşımdır. Bus servis olarak tasarladığınız bir windows servisi veritabanındaki kayıtları devamlı kontrol ederek işlem yapabilir. Veya hiç windows veya WCF servislerine girmeden direk MSMQ altyapısı da bu yaklaşım için kullanılabilicek bir diğer teknolojidir. Saydığım teknolojiler tabi ki hep MS ürünleri, bir de işin MS olmayan kısmı var ama buranın üzerinde şimdilik çok fazla odaklanmayalım.

Neden SOA?

Tekrar Kullanılabilirlik

Sebeplerden ilkine ve belki de en önemlisine aslında az önce değinmiş olduk. SOA’nın temelinde birden fazla uygulamaya veya kullanıcıya (client) ulaşabilme ihtiyacı bulunmaktadır. Yani tanımlama yapmak gerekirse amaç tekrar kullanılabilirliktir. Biraz işin pratiğine bakalım. Örnek olmak gerekirse bir adet ASP.NET web sitesi geliştirildi fakat müşteriden bir de IOS uygulaması talebi geldi. Bu isteğin ardından IOS için web servisler yazılır ve bundan sonra yapılacak tüm güncellemeler iki taraf için de ayrı ayrı yapılır. Sonuç olarak tekrar kullanılabilirliği göz ardı etmiş, geliştirme maliyetini ve hata çıkma ihtimalini de ikiye katlamış olduk. Bu gibi sıkıntılara yol açmamak için baştan servis mimarisine uygun bir tasarım işlerimizi çok kolaylaştıracaktır.

SOA1

Benzer bir durumda sizin kontrolünüzde geliştirilmeyen (3rd Party) uygulamaların sisteminize entegre olma isteğidir. Bu gibi durumlarda önceden yazılmış servisler işimizi kolaylaştıracaktır.

SOA2

Heterojen Sistemleri Bağlayabilme

Günümüz yazılım dünyasında ortak bir altyapının oluşması mümkün değildir. Sistemlerin teknolojisinin farklı olabileceği gibi aynı teknolojide farklı versiyonda sistemler ile de karşılabiliriz.

Bağlılığı Azaltma (Loose Coupling)

Servisler birbirlerine sınıflar ile değil şema ve kontratlar ile bağlıdırlar. Dolayısıyla da bağlılık azdır. Bir servisin yerine aynı şemaya uyan başka bir servis çok daha rahatlıkla getirilebilir. Örnek vermek gerekirse bir Java servisininin yerine .NET servisi konulabilir veya aynı şemada ama farklı bir iş akışında başka bir servis ile değişiklik yapılabilir.

Ayrıca bağlılığı azaltmak sistemde oluşabilecek darboğazları da azaltır. Örnek vermek gerekirse E-mail gönderme servisindeki bir hatadan dolayı iletişim sayfası yavaşlamaz.

Basitleştirme ve Gizleme (Facade)

Karmaşık yapıların ve karmaşık servislerin daha basit bir arayüz üzerinden sunulması için bu tarz bir mimari kullanılabilir. Bu tarz bir yaklaşım daha çok farklı yazılımcılara servis açtığınızda teknik karışıklıktan ve iş akışlarından uzak tutmak için tercih edilir. Arka taraftaki sistemlerin ve kullanılan teknolojilerin neler olduğu gibi kapsamlı bir bilgilendirmeden ziyade sadece servis hakkında bilgilendirme tüketici (consumer) için yeterli olacaktır. Burada tüketiciden kastım servisi kullanan diğer sistem, servis veya uygulamadır.

Bazı durumlarda tüketcinin rolüne, yetkisine vs. göre farklı verilerin gösterilmesi gerekebilir. Bu gibi durumlarda servis üzerinde filtrelenmiş bir veri iletimi ideal güvenliği sağlayacaktır. Bkz: DTO

Soyutlama

Her servis kendi işinden sorumludur. Şifreleri üretmesini istediğiniz servisiniz sadece şifreleri üretirken login işlemini yapan servis sadece kullanıcı adı ve password bilgilerini kontrol eder. Her bir parça birbirinden ayrı ayrı tasarlandığı için uygulama daha basit parçalara bölünmüş olur. Bu da kodun okunabilirliği arttırırken, bakım süresini kısaltır.

SOA Yaklaşımı Nerelerde Kullanılmalı

SOA yaklaşımı daha çok heterojen, birden fazla sistemin (işletim sistemi gibi), tüketicinin (consumer), uygulamanın (client) yer aldığı yapılarda tercih edilmelidir. Aksi taktirde fazladan bir esneklik sağlamanın karşılığı fazladan bir maliyet olarak karşımıza çıkacaktır. Basit, tek client üzerinden çalışan uygulamalarda klasik katmanlı mimari tercih edilmeye devam edilebilir.
Teşekkür ederim.

Api Oluşturmak

Öncelikle api nedir bunu bir anlayalım.
Api, Application Programming Interface kelimelerinin baş harflerinden oluşan bir kısaltmadır. Uygulama Programlama Arayüzü anlamına gelen Api, herhangi bir uygulamanın belli işlevlerini diğer uygulamalarında kullanabilmesi için oluşturulmuş bi modüldür. Google translate api, twitter api, instagram api, facebook gibi örnekleri vardır.

Soru: Ben nasıl yapacağım?
Cevap: Şimdi şöyle bir problemim vardı, kendi yöntemlerimle çözdüm. Sonra baktım ki ben burada api yazmışım ve kullanıyorum! Biraz daha açıklıyorum;

Android uygulamamda kullanıcı metin kutusuna bir yazı yazıyor, butona tıkladığında o metin birkaç ‘karakter replace’ işleminden geçtikten sonra (burada encode işlemi yapıldı) JSON ile http://www.siteadi.com/get_data.php sayfasına POST ediyorum. Ardından sunucuya gelen metin tekrar ‘replace’ ediliyor (burada decode işlemi yapıldı). Bu metin birkaç ‘php işleminden’ geçiyor, veritabanına kaydedilip POST cevabı olarak farklı bir metin veya değişken olarak ve de SUCCESS değişkeni ile android uygulamama geri dönüyor. Ben gelen metni farklı amaçlara hizmet etsin diye kullanıyorum ve işlem tamamlanmış oluyor.

Yukarıdaki senaryoda android tarafında sadece bir link gördüm. Bu linke metin post edip cevabını aldım. İçeride neler dönüyor neler bitiyor {android tarafında} hiç bir şey görmedim. Bu sunucu üzerindeki yapı API oluyormuş. Eğer bu linklin sonuna http://www.siteadi.com/get_data.php?API_KEY=DRstH36RPrdp1qrkahc3t yazsaydım ve o keyi sunucu üzerinde kontrol etseydim public olarak değil de bir kullanıcıya yönelik işlem yaptırmış olurdum. Ve o key sayesinde kullanıcıyı kısıtlamış, izlemiş ve loglamış olurdum…

Not: Durumlar henüz olgunlaşmadığı için site adını, yapılan işlemlerin detaylarını, metin gönderip alma olayının sebebini – ne işe yarayacağını şimdilik yazamıyorum. İnanın ki süper birşey oluyor….
Yakın zamanda herşeyi resimlerle ve dil seçenekleriyle açıklayacağım.

Şunu da inceleyin, ben hemen geliyorum. https://developers.google.com/google-apps/app-apis

JSON Nedir Nasıl Kullanılır?

Native olarak yazılmış mobil uygulamadan web sunucum üzerine veri göndereceğim. Bunu ister mail atarım. İster veriyi işler, geri getiririm. İster veritabanına yazarım… Peki bunu nasıl yapacağım? JSON ile!
JSON kelime anlamı olarak JavaScript Object Notation manasına gelmektedir.Yapı olarak XML e çok benzeyen JSON tipinin ana amacı veri alış verişi yaparken daha küçük boyutlarda veri alıp göndermektir. Ayrıca kullanımı da çok kolaydır. Sadece 3-5 elemanlı örneklerde bir performans göremesenizde 1000-2000 elemanlı örneklerde performans oldukça farkedecektir. JSON sadece mobil uygulamada değil; xml’in kullanılabileceği her yerde kullanılır. (jquery, c#, php ve diğer dillerle diğer ortamlarda kullanabilirsiniz.)

Not: Burada bir json uygulama örneği bulunmaktadır. Veri yazma, okuma anlatılmıştır. Detaylıca incelemek isterseniz tıklayın.

Push Notification Nedir

Android, IOS veya Blackberry cihazlara yazdığımız uygulamalarda bildirim çubuğuna bildirim bırakmamızı sağlayan yapıdır. Arkaplan servisi (background service) kullanılarak yapılır. Uygulama kapalı olduğunda bile, uygulamanın içeriğine dair kullanıcı bilgilendirmesi yapmak için kullanılır. Örneğin mail geldiğinde telefon titrer, bildirim ışığı yanar ve bildirim çubuğunda 1 yeni posta yazar. Bu, push notification servisi sayesinde yapılır.

Google dökümantasyonda şöyle yazmış: “Google Cloud Messaging for Android (GCM) is a service that helps developers send data from servers to their Android applications on Android devices”.
… diyor ki; “Google Bulut Mesajlaşma servisi, uygulama geliştiricilere sunucudan android cihaz üzerindeki uygulamalarına veri gönderimi yapmayı sağlar.”
Bu servis ile -anlık olarak- yeni veri kullanılabilir olduğunda, sunucudan mobil uygulamanıza istek gönderilir. Böylelikle telefon üzerinde sürekli veri giriş çıkışı kontrolü yapılmaz. Pil, ram, işlemci tasarrufu sağlanır.

Buradan resmi dökümantasyona erişebilir, buradan da geliştirici örneğini inceleyebilirsiniz.

Mobil Uygulama Geliştirme Yöntemleri

Mobil uygulama geliştirirken izlemeniz gereken 3 farklı yol vardır. Geliştireceğiniz uygulamaya göre gereklilikleri de göz önünde bulundurarak bu yolu kendiniz belirlemelisiniz. Bu yollar;

  1. Mobil Site Development
  2. Hybrid Application Development
  3. Native Application Development

1. Mobil Site Development

Mobil cihazınızın kütüphanelerine, sistem ayarlarına, background processlerine ve diğer telefon ile ilgili bir şeye ihtiyaç duymuyorsanız mobil site geliştirerek uygulamanızı yayınlayabilirsiniz. Bunun artısı kolay olması, css ile (css trick) tüm boyutlara tasarımların kolayca uyarlanmasıdır. Eksisi ise sadece sunucu tabanlı çalışıyor olmanız, telefonun hiçbirşeyine erişemiyor olmanızdır.

2. Hybrid Application Development

Bu yöntemde örneğin iphone’a yazdığınız bir mobil program olmalı. İçine web intent koyup uygulama arayüzünü web üzerinden tasarlamalısınız. Aynı zamanda telefon kaynaklarına, background process’lerine erişebilirsiniz. Facebook’un uygulması bir hybrid uygulamadır. Web intent ile tasarlanmış olup aynı zamanda push notification özelliği de kullanılabilmektedir.

3. Native Application Development (Gerçek Uygulama Geliştirme)

Bir şirket için uygulama geliştirdiniz. İçerikleri internetten JSON ile çekip listview veya tableviewgrup’da listelediniz. push notification kullandınız. Android manifest dosyasında internet, telefon kaynakları, sd kart erişimi, telefon bilgisi izinlerine erişip kapsamlı bir uygulama yazdınız. İşte bu native (gerçek) uygulamadır. Telefon üzerindeki C kütüphanelerini ve diğer bahsettiğim kaynakları kullanabilirsiniz.

Mvc Nedir?

Mvc, Model view controller kelimelerinin baş harflerinden oluşan, 1979 yılında Trygve Reenskaug tarafından tanımlandıktan sonra yazılım alanında kullanılmaya başlayan, yazılım mühendisliği’nde kullanılan bir “mimari desenidir (Architectural pattern).” Kullanıcıya yüklü miktarda verinin sunulduğu karmaşık uygulamalarda veri ve gösterimin soyutlanması esasına dayanır. Böylece veriler (model) ve kullanıcı arayüzü (view) birbirini etkilemeden düzenlenebilir. Model view controller(Mvc), bunu controller adı verilen ara bileşenle, veri gösterimi ve kullanıcı etkileşiminden, veri erişimi ve iş mantığını çıkarma suretiyle çözmektedirmvc

Mvc kavramları nelerdir?

1- Model: Veritabanı ile bağlantı işlemleri burada yapılıyor.

2- View: Sitenin tasarımı controllerdan alınan verilerle view sayfalarında yapılıyor.

3- Controller: Bir nevi model ile view arasında köprü görevi görüyor.

Mvc mimarisinin faydaları nelerdir?

1- Kodların daha düzenli, anlaşılır ve sistematik olması,

2- Projenin geliştirilebilirliğini eski yapılara göre çok daha hızlı kılması,

3- Kodlar olması gerektiği yerde, kod karmaşasını önleyeceği için performans arttıracaktır,

4- web projesi şeklinde kullanılabilmektedir.

5- url Routing ile seo dostu Url’ler yaratmak daha kolaylaşmıştır.

6- MVC’nin Ajax kütüphanesi (System.Web.Mvc.Ajax) sayesinde json kullanımı çok kolay hale gelmiştir.

7- Ekip olarak çalışılan projelerde görev paylaşımını ve kodların okunabilirliğini arttırarak takım çalışmasına olanak sağlar.

8- Hata ayıklamayı ve kodu test etmeyi kolaylaştırır.

9- /controllerName/functionName şeklinde sayfalara ulaşma imkanı sunar.
Kaynak: http://mvc.nedir.com/#ixzz2sjV3XzYV