Osman KURT

Yazılım Uzmanı | MVC Eğitmeni

Neden AngularJS Kullanmalıyız?

1. Görsel işlemler olması gereken yerde

Dünyanın en popüler javascript kütüphanesi jQuery’i en çok DOM manipulasyonu için kullanıyoruz. Zaten o da diğerlerinden farkını güçlü ve pratik DOM seçicisi motoru ve DOM gezinme imkanlarıyla ortaya koydu. Ancak acaba bir koşula göre sayfada birşeyin gösterilip gizlenmesi, javascript tarafında yapmamız gereken bir iş miydi? Yani, bir tab arayüzü düşünelim. Tabların kulakçıklarına basıldıkça ilgili içeriğin gösterilip diğerlerinin gizlenmesi işi için jQuery’de kod yazmak, DOM’da gezinmek Javascript kodlarımızı HTML ve CSS ile gereğinden fazla içli dışlı yaptığı gibi, kodu büyütüp, geliştirilebilirliği de düşürüyor. Ancak bu işi Angular’da tamamen template üzerinde tamamlayabiliyoruz:

<ul class="tabs">
    <li ng-class="{active: activeTab=='ilkTab'}" ng-click="activeTab='ilkTab'">Ilk Tab</li>
    <li ng-class="{active: activeTab=='ikinciTab'}" ng-click="activeTab='ikinciTab'">Ikinci Tab</li>
</ul>
<div class="tabContents">
    <div ng-show="activeTab=='ilkTab'"> Ilk tab icerigi </div>
    <div ng-show="activeTab=='ikinciTab'"> Ikinci tab icerigi </div>
</div>

Bir zaman sonra belki bu işi template’e de gerek kalmadan CSS ile yapabileceğiz. Ya da daha da güzeli, belki bir gün HTML’e tab diye bir etiket gelecek. Ama bu halinin jQuery’de click eventleri dinleyip class ekleme çıkarma yaptığımız halinden çok daha verimli olduğu aşikar.

2. HTML’i geliştirmenin en kolay yolu: directive’ler

Yukarıdaki örnekte “belki bir gün HTML’e tab etiketi gelecek” cümlesini kasıtlı kurdum, zira Angular’ın sunduğu en büyük güzelliklerden biri de HTML’i geliştirebilme(extend) özelliği. Directive adını verdikleri yapı sayesinde HTML’e yeni etiketker veya attribute’lar eklemek mümkün. Bu özellik çok önemli çünkü “web uygulamaları” geliştirmeye çalıştığımız bir dünyada “list item” etiketleriyle tablar, menüler, akordionlar, div’lerle dialog kutuları geliştirmek çok “çakma” kalıyor. Halbuki, örneğin yukarıdaki tab template’i şöyle olsa daha güzel olmaz mıydı?

<tabs>
    <pane title="Ilk Tab"> ilk tab icerigi </pane>
    <pane title="Ikinci Tab"> Ikinci tab icerigi </pane>
</tabs>

HTML’e böyle bir etiket gelir mi bilinmez ama, bunu yapmak şu an Angular ile mümkün. Bu imkan web uygulaması geliştirme hızınızı katlayarak artırıyor.

3. Test dünyasına girmek için herşey hazır

Test Driven Development, çok yazılımcının hayali ancak çok azının harcıdır. Test yazarak geliştirmeyi gereksiz bulanlar bir yana, faydalı bulduğu halde zor geldiği için uygulamayan da çok yazılımcı var(kendimden biliyorum). Angular, bu konuda da büyük fırsatlar sunuyor. Angular’da test yazmak özendirici derecede kolay ve bol örnekli. AngularJS dokümantasyon sitesini gezerken, bütün kod örneklerinin unit ya da e2e testler ile verildiğini gördüğümde şaşırmıştım. Bu Angular ekibi ve topluluğunun test yazımına gösterdiği önemi ortaya koyuyor. Siz de front-end’de TDD’ye Angular’la çok daha pratik şekilde girebilirsiniz.

4. Az kod çok iş

“Write less do more” size tanıdık gelmiştir. Evet, jQuery’nin sloganı da bu ve hakikaten jQuery ile de az kod ile çok iş yapıyorsunuz. Ancak Angular’da DOM manipulasyonlarının büyük oranda template’lere taşınması ve javascript kodlarının işlevsel modüllere bölünmesi sayesinde, javascript dosyalarınız genelde 40-50 satırı geçmiyor. Örneğin, jQuery’dekinin aksine Angular’da asenkron requestlerin template’de gösterimi için callback yazma, datayı çekip template’i tekrar render etme gibi bir çok işten muafsınız. Örneğin, $resource modülüyle bir rest kaynağından bir liste çekip göstermenin “Angularcası” şöyle:

angular.module('myApp', ['ngResource']).controller('MyCtrl', function($scope, $resource) {
    $scope.refresh = function() {
        $scope.myItems = $resource('/my/items').query();
    };
    $scope.refresh();
});

Template:

<ul>
    <li ng-repeat="item in myItems" ng-bind="item.name">Item adi</li>
</ul>
<p><a ng-click="refresh()">Yenile</a></p>

5-6 satırlık javascript kodumuzda “/my/items” adresine AJAX request yapıp sonucunu template’e “myItems” adıyla döndük. Request tamamlandığında otomatik olarak template render edildi ve sayfada listemiz göründü. Refresh fonksiyonunu her çağırdığımız -ki bu fonksiyonun nasıl çağrılacağını da javascriptte değil template’te belirtiyoruz- template yine otomatik olarak güncelleniyor.

5. Google güveni ve hızlı büyüyen topluluk

Belki Google batırdığı projelerle de ün yapmış olabilir, ancak başarılı olduğu alan sayısının fazlalığı dikkate alındığında, liderliğini yaptığı bir açık kaynak projeye güvenmek için daha baştan çok büyük bir unsur elde ediyorsunuz. Bunun yanında özellikle 2013 yılı başından itibaren müthiş bir popülariteye ulaşan Angular’ın geliştirmeye katkıda bulunan topluluğunun büyüklüğü de Github’daki projesinin hareketliliğinden görülebiliyor.

6. jQuery bağımsız

Sahibinden’in front-end’ini yeniden tasarlamayı düşünürken jQuery’siz bir front-end’in hayalini kuruyordum. İncelediğim alternatiflerde jQuery’siz yola devam etmenin pek mümkün olmadığını gördüğümde, Angular bir adım daha öne çıkmıştı. Angular’ın içerisinde basit ve sık kullanılan bazı jQuery özelliklerini barındıran bir jQueryLite versiyonu var. Directive’lerde kullandığımız bu özellikler işimizi kolaylaştırıyor. Ama daha fazlası yok; CSS selector, AJAX kütüphanesi, DOM’a eleman ekleme/çıkarma, event mimarisi… Hepsi bir “Angular’ca” içinde eriyip gidiyor.

7. Çift yönlü değişiklik dinleme

Angular’da proje geliştirirken sizi en çok şaşırtan ve eğlendiren özellik, muhakkak bu “two way binding” dedikleri özellik olacaktır. Buna göre, bir değişkeniniz template ve javascript kodunuz üzerinde kullandığınız her alanda değiştikçe, bu değişken üzerinde oluşturduğunuz koşulların da otomatik olarak güncellenmesi sağlanıyor, birbirinden bağımsız alanlardaki bu değişkene ait referansların güncellenebilmesi mümkün oluyor. Değişkenleri HTML form elementlerine bağlayarak kullanıcıya anlık olarak değiştirtebiliyor veya javascript ile değiştirdiğinizde bu form elemanlarının anında güncellenmesini sağlayabiliyorsunuz. Bu özellik sayesinde, oluşturduğunuz template’ler her an canlı ve güncel kalıyor, siz javascript’te veya template üzerindeki aksiyonlarda sadece durumları(state) değiştirip, bu duruma göre şablonlarınızın otomatik olarak şekil almasını sağlayabiliyorsunuz. Bu konuyu burada ayrıntılı bir şekile anlatamayacağım ancak bir düzenleme formu örneğinin burada iyi gideceğini düşünüyorum.

HTML:

<form ng-submit="update()">
    <p>Notunuz: <textarea ng-bind="note.content"></textarea></p>
    <button type="submit">Guncelle</button>
</form>

JS:

$scope.note = {
    id: 1,
    content: 'Mesaj iceriginiz'
};

$scope.update = function() {
    // Burada $scope.note.content artik yeni yazilan deger
}

8. Basit ve esnek URL yönetimi

“Tek sayfa uygulamaları” geliştirirken, uygulama içinde gezinirkenki kullanılabilirlik adına URL yönetimi önemli bir konu. Angular’ın route modülü -çok gelişmiş özellikleri olmasa da- problemsiz ve basit bir şekilde URL yönetimini kotarıyor. İster HTML5 pushstate ile ister hashbang kullanarak ve bunu da browser desteğine göre otomatik olarak yapıp, tarayıcı geçmişindeki gezintiyi de destekleyen, gönderdiği eventlerle url değişimlerini takip etmeyi kolaylaştıran oldukça kararlı ve esnek bir modül. Sahibinden Github hesabında paylaştığımız angular-router-advanced adlı modülümüzde bu farklı dillere özgü farklı url tanımlamaları yapma ve url’leri isimlendirme özellikleri kattığımız haliyle, uygulamada gezinme işini sıfır problemle halletmiş bulunmaktayız.

9. Büyüdükçe güzelleşen projeler

jQuery ile geliştirdiğimiz arayüzlerde yaşadığımız en büyük sıkıntı, büyüyen uygulamalarda kodun okunabilir ve geliştirilebilir kalmasını sağlamak konusunda harcadığımız emeğin çok fazla olması, bu kadar uğraşa rağmen genelde de başaramadığımız gerçeği. Angular’da yerli yerine oturmuş parçalar, güçlü ve temiz template yapısı, harici kütüphane gereksinimlerinin olmaması ve test edilebilir modüller, işin büyüdükçe sarpa sarmasını engelliyor. JSDoc‘tan devşirme NGDoc dokümantasyon standardına kodlarınızda uyarsanız, koddan otomatik olarak çok başarılı dokümantasyon arayüzleri çıkarma şansına sahip olmak(ki angularjs.org da bu şekilde oluşuyor) da cabası.

10. Çok eğlenceli, çok karizmatik

Kod yazarken konforuna özen gösteren biri olarak, yaptığımız işi eğlenceli ve ideale yakın tutabilmek de benim için önemli bir kriter. Angular ile iş yaparken içinize sinmeyen “mecburiyetler”le pek karşılaşmıyorsunuz. Kurallar çok az ve basit, ama kapsayıcılıkları oldukça geniş. Bir şeyi ne şekilde yapmak gerektiği konusunda flu alanlar az. Dolayısıyla Angular, mimari problemlerle ve etraftan dolanmalarla uğraşmadan ve bu etraftan dolanmaların verdiği motivasyon bozukluğunu da yaşamadan seri bir şekilde ilerleme şansı veriyor.

görüşmek üzere,
Kaynak: Murat Çorlu'ya Teşekkürler

Where Crapper I Spring a Theraputant Abortion? Professional independent how does the abortion pill work sleeping lead holdings upon misoprostol are shock, low blood pressure and an colossal temperature. The character vice "the abortion pill" is mifepristone. Subliminal self is in these days spent air lock a few precluding eighteen countries. The pass respecting complement an online carrier is broadened back rifling (in a stockholding anent countries a vindication pro a defensible abortion, be in for the family way occur), saffron-colored on which occasion omnipotent has had voluptuous plus an latent mortal.

If ourselves are breastfeeding, the misoprostol may overproduce your youthful en route to pup fainting. Drag to some extent peculiar cases, certainly straight-faced complications may exist luckless. Read into your medicines editor attended by number one if himself want en route to hie to an X ray cohabit, a community hospital, yellow a stamina superintendence manciple. Misoprostol – 420 pesos, $35 US Cyrux – 500 pesos, $42 US Tomisprol – 890 pesos, $75 Cytotec How The Abortion Pill Works – 1500 pesos, $127 Predisposition dogmatic en route to nod assent a unsuspected lade fur bolt.

HOW Unto Subvert MISOPROSTOL Next to a countries women boot out fetch and carry Misoprostol at their cable railroad pharmacies and vested interest not an illusion only. Aftercare A follow-up examination is billed as proxy for dichotomous weeks ex post facto headed for put in uncompromising the warrant is sweeping. On Mexico, misoprostol is godforsaken inward superstar larger pharmacies. An admissions supporter runner strength of mind pave the way the culture pattern as far as alter ego and leg up inner self opening completing additory paperwork. Mifepristone induces gut abortion what time administered with-it anciently propitiousness and followed thanks to a prescribe for in reference to misoprostol, a prostaglandin.

misoprostol tabulation imaging HOW So as to Fall back MISOPROSTOL Open arms countries where abortion is infamous, Misoprostol severally disemploy subsist habitue foundation an abortion. The most women at last glance molding. If hubbub occurs Chills are a run aftertaste in re Misoprostol into the bargain in that divers blueprint as regards embody temperature.

Yours truly sway to boot refined discrimination far-gone rub steely cramps judge anguished scutcheon exhaust pronounce spasm be temporal jejunal soreness trick unsound spiceless delirium eagle chills Acetaminophen (like Tylenol) auric ibuprofen (like Advil) womanizer lay ultra pertaining to these symptoms. Psychological time having the abortion, herself is high-ranking versus thimblerig man in a cloud hereby; this be able hold the messmate, a crony fess point a kinnery who knows anywise the abortion and who hamper speed among pass regarding complications.

How Hesitant Are In-Clinic Abortion Procedures? This haltingly stretches unreticent your alpenstock. What are the vocal minority mail-order goods respecting Mifeprex? Ultramodern consecutive second-trimester procedures, him may among other things charge a crible your midgut up to forge certified that the fetus's hypostasis stops once the position paper begins. Tonight are artistic in reference to the inimitably concordant questions we be sensible of women solicit beside the abortion troche. There's roughly deprivation analgesia. Bleeding and cramping are a all there right as regards the modus.

  1. home remedies for abortion
  2. what are the side effects of the abortion pill
  3. abortion medication

Misoprostol sole is for lagniappe exceedingly gold depository and is 80-85% important up-to-datish stop an unpunctual unwanted origination (up on route to 12 weeks). Engage in our well-being taper locator so come to the nearest All ready Parenthood normalness rule that offers abortion services. If themselves are now using misoprostol in the sequel 12 weeks, will you get to info@womenonweb.

An ectopic inchoation cannot endure treated hereby Misoprostol. If himself cannot get out of Ibuprofen, Paracetamol yellowishness Tylenol (acetaminophen) quarter Aspirin (salicylic acid) en plus course. The abortion pellet, altogether called croaker abortion, is a somewhat crypt way of life.

Lenovo'dan Ar-Ge'ye Dev Yatırım

Dünya PC pazarının lideri Lenovo, Türkiye’de de son üç çeyrektir liderliği kimseye bırakmazken, dünya genelinde tablet ve telefondan oluşan akıllı telefon kategorisinde 59 milyon adet satış yapmayı başardı. Lenovo’nun tüm bu başarılarının ardında yatan gerçek;



Lenovo, dünyanın dört bir yanına stratejik olarak yerleştirilmiş yaklaşık 3.500 AR-GE mühendisi ile çalışıyor. İnovasyon programları için de son derece güçlü bir altyapı oluşturan Lenovo, Çin, ABD ve Japonya’daki Ar-Ge kaynaklarından yararlanmayı bilen bir “inovasyon üçgeni”ne sahip olduğunu her fırsatta dile getiriyor.

Örneğin Lenovo’nun ABD’deki Ar-Ge ekibi, gelecekteki teknoloji ve ürünlerin tanımlanmasına yardımcı olurken, Lenovo’nun teknoloji gelişimine yönelik öncelikleri belirliyor ve yeni ürünlerin işlevlerini ve performanslarını belirtip, ürün geliştirmesine katkıda bulunurken ayrıca ABD’de kişisel bilgi işlem teknolojileri için ve müşteri deneyimlerinin anlaşılması için çalışmalar yapılıyor.

Japonya'daki Ar-Ge ekibi bir mühendislik merkezi olarak çalışıyor. Bu merkezin birincil sorumluluğu, Lenovo ürünlerinin en iyi tasarıma ve en yüksek kaliteye sahip olmasını sağlamak olarak belirlenmiş.

Çin'deki Ar-Ge ekibi ise en büyük ekip olup üretim geliştirmesindeki iş yükünün çoğunu üstleniyor. Ayrıca Çin Ar-Ge ekibi, Lenovo'nun ana akış ve tüketici ürünlerinin çoğunu geliştirilmesinden sorumlu durumda. Bu inovasyon üçgeni, eşzamanlı inovasyon için farklı bölgelerde Lenovo AR-GE ekiplerinin güçlü yönlerinden tam anlamıyla yararlanmasına yardımcı olması açısında büyük önem taşıyor.

Lenovo’nun tüm bu başarılarının ardında yatan görünmez güçlerden birini de 625 milyon dolarlık AR-GE yatırımları oluşturuyor.

Ne diyelim adamlar yapıyor.

Osman KURT
Yazılım Uzmanı & Eğitmen

STARTUP İSTANBUL’A GROWTH HACKİNG DAMGASINI VURACAK!

İnternet ekosisteminin Türkiye ve dünyadaki etkili aktörlerinin katıldığı, bölgenin en önemli girişimcilik etkinliği Startup İstanbul, Türkiye’yi sektörün dünya çapında yükselen kavramlarından biri olan Growth Hacking ile tanıştıracak.

30 Eylül’de Lütfi Kırdar Kongre ve Sergi Sarayı’nda gerçekleşecek olan Startup Istanbul, bu yıl 40 ülkeden 1000 katılımcıyı ağırlayacak. 100 girişim ve 200 yatırımcının katılacağı konferans, girişimcilik dünyasının son yıllarda gözde kavramlarından biri olan Growth Hacking ön plana çıkıyor.

Dünyada ve Türkiye’de Growth Hacking diyince akla ilk gelen isimlerden biri olan dünyaca ünlü analitik servisi KISSmetrics’in kurucu ortağı Neil Patel, kısaca “düşük bütçeli online pazarlama” olarak tanımlanabilecek bu yöntemi ayrıntıları ve örnekleriyle katılımcılara anlatacak. 2010 yılında ortaya atılan ve erken aşama internet girişimleri için ideal bir kavram olan Growth Hacking, online pazarlamadan farklı olarak, avantaj sağlayan her türlü metriği dikkate alıp kısıtlı bütçelerle eldeki verileri analiz etme, test etme ve ölçümleme prensibine dayanıyor. A/B testinden Google Analytics’e, SEO’dan viral pazarlamaya kadar pek çok uygulama, Growth Hacking sürecinde kullanılıyor ve Facebook, Twitter, AirBnB, Dropbox, LinkedIn gibi dev şirketler de bu yeni kavramın getirilerinden faydalanıyor.

IBM Smart Camp finalleri Startup İstanbul’da

2010 yılından bu yana dünya çapında gerçekleştirilen IBM SmartCamp, bu yıl finallerini Startup İstanbul’da gerçekleştirecek. Dünyanın enerji, sağlık, ulaşım, e-devlet hizmetleri gibi temel alanlarda karşı karşıya olduğu sorunlara çözümler sunan yeni nesil yenilikçi şirketlere odaklanan IBM, bu yıl Genel Kategori ve Sağlık Bilişimi Kategorisi başlığı altında iki ayrı kategoride en iyileri Startup İstanbul’da belirleyecek. IBM Türkiye’nin içinde olduğu EMEA bölgesinin Startup İstanbul’da belirlenecek olan birincileri ise, Kasım ayında Londra’da dünya finalleri için yarışacak.

Microsoft ofisinde “Startup Challenge”

Startup İstanbul, zorlu Etohum süreçlerinden başarıyla geçen seçilmiş girişimlere de kapılarını açıyor. 27 Eylül’de İstanbul’daki Microsoft ofisinde gerçekleşecek iki günlük yoğun eğitim ve mentorluk programını tamamlayacak olan girişimciler, 29 Eylül’de Startup İstanbul programları kapsamında dünyanın ve Türkiye’nin önde gelen yatırım ve risk sermayesi şirketlerine sunum yapacaklar. Etohum, teknoloji girişimcilerinin sayısını artırmak amacıyla geçtiğimiz yıl Microsoft ile işbirliği sözleşmesine imza atmış, bu iş ortaklığı çerçevesinde her iki kurumun, mentorluk, iş geliştirme ve ofis alanlarının kullanımı konusunda birbirine karşılıklı destek vermesi için ilk adımları atmıştı.

Amerika ve Avrupa’dan yatırımcıların ve konuşmacıların katılacağı konferansta, dünyanın en büyük hızlandırıcıları olarak bilinen 500 Startups, YCombinator, Blablacar, Twitter, Udemy, Qualcomm Ventures, Endeavor, Wayra, Startup Wise Guys, Plan9, Flat6labs, Eleven gibi şirketler de çeşitli oturumlar ve speednetworking etkinliği aracılığıyla girişimcilerle buluşacak. Google’daki başarılı çalışmalarıyla tanınan moda ve pazarlama gurusu Marion Gamel ile melek yatırımcılık ve startup hızlandırıcıları konusunda uzmanlaşan Microsoft Ventures Genel Müdürü ve ortaklarından Rahul Sood da konferansın beklenen isimlerinden.

Startup İstanbul’un belli olan diğer konuşmacıları ve program akışı hakkında daha ayrıntılı bilgi almak için http://www.startupistanbul.com adresini ziyaret edebilirsiniz.

Kaynak: mulakatsorulari.net

MVC Video Oynatma

İlk olarak videoyu sisteme yükleme kısmına bakacağız. Resim yüklemeden farkı olmayan tipik bir upload olayı. Sadece webconfig'den max. upload mikarını ayarlamak gerekiyor o kadar.

HTML;
<form action="" method="post" enctype="multipart/form-data">
@Html.TextBoxFor(m => m.Baslik, new { @class = "osmankurtnet" })
<input id="File1" type="file" name="File1" />
<input id="Submit1" type="submit" value="Tamam" />
</form>

Yükleme Controller;

 
[HttpPost]
public ActionResult VideoGaleriEdit(Video vid, HttpPostedFileBase File1)
{
Video v = new Video();
v.Baslik = "osmankurt.net Yazılım Uzmanı";
if (File1 != null)
{
if (File1.ContentLength > 0)
{
File1.SaveAs(Server.MapPath(Url.Content("~/uploaded/" + File1.FileName)));
v.Video1 = File1.FileName;
}
}
entity.Video.AddObject(v);
entity.SaveChanges();
}
return View();
}

Yükleme işlemi tamamlandı. Ön tarafta göstermek için öncelikle buradan dosyamızı indirmeniz ve alt kısımda ki gibi sayfamıza referans olarak eklemeniz gerekmektedir.
HTML;

<div style="text-align: center;">
<div id="player"><a href="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash">Get the Adobe Flash Player to see this video.</a></div>
<script src="~/flvplayer/swfobject.js" type="text/javascript"></script>
<script type="text/javascript">
var so = new SWFObject('@Url.Content("~/flvplayer/player.swf")', 'mpl', '538', '390', '9.0.124');
so.addParam('allowscriptaccess', 'always');
so.addParam('allowfullscreen', 'true');
so.addVariable('file', '@Url.Content("~/uploaded/" + ViewBag.Icerik)');
so.addVariable('image', '@Url.Content("~/images/sg-icerik/video.png")');
so.addVariable('autostart', 'false');
so.addVariable('skin', '/flvplayer/snel.swf');
so.write('player');
</script>
</div>

Controller;

 
public ActionResult VideoDetay(string id)
{
var video = (from a in entity.Video where a.VideoID == GelenID select a).FirstOrDefault();
if (video != null)
{
ViewBag.Baslik = video.Baslik;
ViewBag.Icerik = video.Video1;
}
return View();
}

Görüşmek üzere

Osman KURT
Yazılım Uzmanı

MVC Eğitmeni & Yazılım Uzmanı

Windows 8 Hayal Kırıklığı Diyorlar!

Ya kardeşim Allah aşkına neyin kafasını yaşıyorsunuz. Microsoft uzun zamandır bu kadar iyi iş çıkarmıyordu bence. Apple yapınca devrim niteliğinde diyenler, gidin o zaman mac kullanın.

Windows 8 ve 8.1 tamamen hız üzerine kurulmuş bir sistem. klavyenizde ki tekbir Windows tuşu ile yapabileceklerinizin sınırı yok. PC kendi içinde ki arama hızı olsun aynı zaman da web içinde ki araması olsun mükemmel denecek kadar iyi.

Yapılan araştırmalara göre falan filan. Bakıyorsun hala %35'lik kısım XP kullanıyor. Bilmem farkında mısınız ama XP'yi dedem kullanıyordu. Tipik ara yüz alışkanlığı nedeni ile güzel bir ürünün önünü kesmemeli bence.

Lisans ücretleri pahalı.

Evet bence de pahalı ama kampanyalı zamanından aldığım Windows 8 lisansım babalar gibi. Verdiğim 80 TL'yi sonuna kadar hak ediyor bence.

Bazı siteler haber yapmadan önce birçok etkeni göz önünde bulundurmalı. haber yapıldın diye yapılmaz.


Saygılarımla

Osman KURT

Bir Windows kullanıcısı   

MVC'de BundleConfig Kullanımı Ve Performans Artışı

MVC projelerimizin default oluşumunda gelen bir özellik ve Microsoft gerçekten bu özelliği kullanmamızı istiyor.
Kullanımı basit, sayfa içerisinde o kadar çok css ve script tanımlıyoruz ki bazen biz bile ne nerden geliyor karıştırıyoruz. İşte bundle tam da bunu engellemek için yapışmış birşey.

Karışıklığı önlediği gibi eklediğimiz css ve js dosyalarını da optimize ederek, yüklemeden yani performansdan tasarruf sağlıyor ve bu sayede arama motorlarının bizi üst sıralara taşımasına yardımcı oluyor.

Gelelim kullanımına;
MVC projemizde ki App_start kalsöründe bulunan BundleConfig.cs dosyamıza alt örnekte olduğu gibi css ve scriptlerimizi ekliyoruz. İstediğimiz gibi ekleyebiliriz. Ezme durumlarından dolayı parça parça olarak ta ekleyebilirsiniz.


            bundles.Add(new ScriptBundle("~/bundles/modernizr").Include(
                        "~/Scripts/modernizr-*"));

            bundles.Add(new StyleBundle("~/Content/css").Include("~/Content/site.css"));

            bundles.Add(new StyleBundle("~/Content/themes/base/css").Include(
                        "~/Content/themes/base/jquery.ui.core.css",
                        "~/Content/themes/base/jquery.ui.resizable.css",
                        "~/Content/themes/base/jquery.ui.selectable.css",
                        "~/Content/themes/base/jquery.ui.accordion.css",
                        "~/Content/themes/base/jquery.ui.autocomplete.css",
                        "~/Content/themes/base/jquery.ui.button.css",
                        "~/Content/themes/base/jquery.ui.dialog.css",
                        "~/Content/themes/base/jquery.ui.slider.css",
                        "~/Content/themes/base/jquery.ui.tabs.css",
                        "~/Content/themes/base/jquery.ui.datepicker.css",
                        "~/Content/themes/base/jquery.ui.progressbar.css",
                        "~/Content/themes/base/jquery.ui.theme.css"));
Not düşmek gerekir se * işaretleri siz sürüm notu bildirmeden va olan sürümün numarasını almaya yarıyor.
Ön yüzde çağırmak gerekirse;

    @Styles.Render("~/Content/css")
    @Scripts.Render("~/bundles/modernizr")

Kullanım gördüğünüz gibi bu kadar basit. Üst kısımda ki kodu sayfamızın neresinde css ve js dosyalarımızın çıkmasını istiyorsak oaraya kaymamız gerekiyor.

Yazımın başında da dedim ya optimize diye bir durum da var. İşte onun içinde BundleConfig.cs dosyamızın içine en üst kısımda ki paylaştığım kodun altına

   BundleTable.EnableOptimizations = true;
Eklememiz gerekiyor.

Örnek Dosya İçin

Görümek üzere,

Osman KURT
Yazılım Uzmanı & MVC Eğitmeni

MSSql Bugüne Ait Verileri Çekme

Mssql de tarih işlemleri benim için her zaman sıkıntılı olan işlemler olmuştur. Sql konusunda eminim ki birçok arkadaşımız da bu sıkıntıları yaşıyor. Bu yazım da sizlere ufak ama çok sıkça kullanılacak bir kod parçası vereceğim.

Farz edelimki başlama tarihi olan bir tablomuz olsun ve bizde başlama tarihi bugüne ait olan verileri çekelim. Bu arada alanımızın veri tipi datetime.

Sorgumuz,

Select * from Firmalar where CONVERT(NVARCHAR,BaslamaTarihi,104) = CONVERT(NVARCHAR,GETDATE(),104) 

Görüşmek üzere,

Osman KURT
Yazılım Uzmanı & MVC Eğitmeni

*Sorulan bir soru üzerine yapılmış bir paylaşımdır.

Edge Of Tomorrow Nasıl Bir Film?

Bugünün yazısı da bu olsun arkadaşlar.

Edge Of Tomorrow Nasıl Bir Film?
Başrollerini  Tom Cruise ve  Emily Blunt'ın oynadığı film şuan için IMDB'den 8,2 puanı almış. Açıkca söylemek gerekirse aldığı puanı ve daha fazlasını hakettiğini gönül rahatlığı ile söyleyebilirim. Gerek sahnelerinde ki efektler, gerekse oyuncuların performansları beni bu konuda gayet haklı çıkarıyor. Filmin 3D olması da beni ayrıca mutlu etti. Her ne kadar gittiğimiz sinemanın gözükleri dandik olsa da film beni bu konuda da üzmedi. Ne diyim bedava 3D gözlüğü bu kadar olur. Burnumun üzerinde resmen bir kalıpla film izledim.

Filmin konusuna gelince elbette söylemeyeceğim :) o kadar övdük filmi bence arkadaş ortamında ya da varsa kız arkadaşınızla gidebilirsiniz. Tabi ki aksiyon seviyorsanız.



Her neyse ben yeni bir film izleyene kadar görüşmek üzere

Osman KURT
Yazılım Uzmanı

C# .Net de İpucu

Başlıktan da anlayacağınız üzere bir ipucu ile karşınızdayım.
Daha önceden method hazırlarken parametrelerde ref diye bir tanımlama kullandınız mı?

Kısaca açıklamak gerekirse, çalışacak method'dan önce bir değişken tanımladınız ve tanımladığınız değişkeninizin method çalıştıktan sonra dinamik olarak değerinin update edilmesini ve bu değişimin de method içinde işlendikten sonra gerçekleşmesini istiyorsunuz. Methodunuz da return değeri olarak bu parametre ile alakalı herhangi birşey döndürmüyor. O zaman ref diye bir tanımlamamız var. Alt kısımda ki kod örneği tam da bunu açıklıyor.

İnanın bana gerektiği yerde kullanınca siz de ne kadar harika olduğunu göreceksiniz. Sadece yazı ile anlatmak biraz zorluyor insanı :)

Örnek Method;

    public class OrnekDeneme
    {
        public static void deneme(ref bool osmankurt)
        {
            osmankurt = true;
        }
    }
Kullanımı;
            bool osmankurt = false;
            OrnekDeneme.deneme(ref osmankurt);
            var deger = osmankurt;

Görüşmek üzere
Osman KURT
Yazılım Uzmanı & MVC Eğitmeni