14 Aralık 2015 Pazartesi
Cannot insert the value NULL into column 'columnName', table 'dbo.Table'; column does not allow nulls. INSERT fails. The statement has been terminated.
Veri tabanında içinde veriler olan tablonuz var ve siz bu tabloya yeni bir kolon eklemek istiyorsunuz.'Allow Nulls' seçeneğini kapatmak istiyorsunuz.Yani kolonun değerinin null olmasına izin vermek istemiyorsunuz.Bu sırada "Unable to modify table.Cannot insert the value NULL into column 'columnName', table 'dbo.Table'; column does not allow nulls. INSERT fails. The statement has been terminated." hatasıyla karşılaşacaksınız.Bu hatanın meydana gelme sebebi o an tablomuzda kayıtlı bulunan diğer verilere bu kolonun eklenmesi ve bunlarda ki değerlerin null olmasından kaynaklanıyor.Bundan kurtulmak için kolonun default value kısmını doldurabilirsiniz.Amacımız örneğin o an tablomuzda 100 adet kayıt varsa onların ilgili kolonunu(sonradan eklediğimiz) null olmayan bir değerle doldurmak.Benim örneğimde guid adında text tipinde veri tutan bir kolon ekliyorum.Allow nulls seçeneğini işaretliyorum ki bu hata ile karşılaşmayayım ve tablomu öncelikle bu haliyle kayıt etmiş olayım.Sonra bütün tablomun kayıtlarının guid kolonunu default bir değerle manuel olarak güncelleyeceğim.Bu işlemden sonra tablonun design modundan ilgili kolonun null değer alabilme iznini kapatabilirim.
9 Aralık 2015 Çarşamba
Breadcrumb (navigation,ekmek kırıntısı) Nedir?
Genellikle web sayfalarında kulanıcılara bulundukları sayfaya ulaşmak için hangi yollardan geçtiklerini hatırlatmaya yönelik bilgi linkidir.Aslında ana dizinden ilgili sayfaya ulaşmak için gezilmesi gereken sayfaları gösterir.Yazılımcılar bu işi meşhur Hansel ve Gretel kardeşlerden öğrenmiştir diyebiliriz.Eski toprak bu iki kardeşin web sayfalarında navigasyon konularına yönelik yaptıkları hizmetleri anmadan geçemeyeceğiz.(Tamam abartıyorum)Annelerinin veya üvey annelerinin yokluk yüzünden aç kalma tehlikesine karşı bulduğu dahiyane fikir sonucu iki kardeş kendilerini babaları tarafından ormana bırakılmış şekilde bulurlar.Ama kardeşler yol boyunca eve(ana sayfaya) dönüş yolunu bulabilmek için cakıl taşları ve ekmek kırıntıları(aha breadcrumbs) ile işaret bırakmışlar.(1)Burada masumların hesaba katmadıkları şey ise ormanda ki masum hayvanların masum bir şekilde kırıntılardan nasiplenmesidir.Tabi kardeşler dönüş yolunu kaybederler ve değişik maceralar yaşarlar.(2)Şaka bir yana bizler bu yapının benzerinin yapımı konusunda kafa yoruyor olacağız.
Breadcrumb(Ekmek kırıntısı) örneği aşağıdaki resimde göründüğü gibidir.Değişik kullanımları mevcuttur.(Genellikle e-ticaret sitelerinde karşılaşabileceğimiz bir yapıdır)
Son zamanlar artık SEO dostu tasarımlar ortaya koyma noktasında yarışa girişen yazılımcılar sayesinde zaten tarayıcımızda gördüğümüz linklerde nerede olduğumuz hakkında bizlere yeterli kırıntıları sunulmaktadır.
Örnek olarak,Dota 2 oyunuyla ilgili istatistik sunan bu sitede(3) Herolar/WitchDoctor/Items kısmından nerede olduğumu anlayabiliyorum.
Benim değinmek istediğim konu ise şu şekilde,elimde bir kategori sistemi var ve buna kategoriler eklemek istiyorum.Her kategorinin üst kategori(Parent Category,bir tane) ve alt kategoriler(Child Categories,birden fazla olabilir) diye alanları mevcuttur.Eğer bir kategorinin üst kategorisi null ise yani yoksa bu kategorimiz saygı değer üst kategoridir.Bunların ekleme veya ilişkilendirilme durumlarına değinmeyeceğim.Bunları hallettiğinizi varsayarak elinizde bir kategori listesinin bulunduğunu ve bu listenin her bir elemanının altında bulunduğu üst kategorisine doğru gezinti menüsünü oluşturmaya çalışacağız.
Elimizde 4 adet kategorinin olduğunu varsayalım.Heroes isimli kategori üst kategorimiz(parent category) olsun.Witch Doctor ve Timbersaw diyede alt kategoriler(child categories) olsun.Bu iki kategorinin parent i Heroes kategorisi olsun ve Witch Doctor bir adet alt(child) kategoriye sahip olsun.Onun adıda Items olsun.
Almamız gereken sonuç :
Heroes kategorisinin breadcrumb linki = Heroes
WitchDoctor kategorisinin breadcrumb linki = Heroes>>WitchDoctor
Timbersaw kategorisinin breadcrumb linki = Heroes>>Timbersaw
Items kategorisinin breadcrumb linki = Heroes>>WitchDoctor>>Items
Biz bu aldığımız sonuçları oluşturacağımız Category nesnelerimizin BreadCrumb(String) alanında saklayacağız.Her nesne kendi ekmek kırıntısıyla eve dönüş yapısını içnide saklayacak.Bunlarıda örnek olarak kategorilerimizin listelendiği tabloda veya diğer aklımıza gelen uygun yerlerde kullanabiliriz.Bunu oluşturan bir fonksiyon tasarlıyoruz.Recursive(4) olarak çalışacak olan bu yapı kategori listemizin her nesnesini dolaşıp o nesnenin üst kategorisini bulana kadar yani üst kategorisi null olan kategoriye denk gelene kadar ekmek kırıntılarını takip etmek olacaktır.Bu işlemi her bir liste elemanı için tekrar edeceğiz.
public class Category : BaseObject
{
string breadcrumbLink;
public Category Parent
{
get
{
return parent;
}
set
{
parent = value;
}
}
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
public string BreadcrumbLink
{
get
{
return breadcrumbLink;
}
set
{
breadcrumbLink = value;
}
}
List<Category> childList;
public List<Category> ChildList
{
get
{
return childList;
}
set
{
childList = value;
}
}
public string GetBreadcrumbLink(ref int counter, List<Category> categoryList, Category category)
{
if (counter == 0)
{
if (category.Parent == null)
{
BreadcrumbLink += "<strong>" + category.Name + "</strong>(" + category.ChildList.Count + ")";
}
else
{
if (category.ChildList.Count > 0)
BreadcrumbLink += category.Name + "(" + category.ChildList.Count + ")";
else
BreadcrumbLink += category.Name;
}
}
counter++;
if (category.Parent != null)
{
BreadcrumbLink = category.Parent.Name + ">>" + BreadcrumbLink;
GetBreadcrumbLink(ref counter, categoryList, category.Parent);
}
return BreadcrumbLink;
}
}
{
Category parent;
string name;string breadcrumbLink;
public Category Parent
{
get
{
return parent;
}
set
{
parent = value;
}
}
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
public string BreadcrumbLink
{
get
{
return breadcrumbLink;
}
set
{
breadcrumbLink = value;
}
}
List<Category> childList;
public List<Category> ChildList
{
get
{
return childList;
}
set
{
childList = value;
}
}
public string GetBreadcrumbLink(ref int counter, List<Category> categoryList, Category category)
{
if (counter == 0)
{
if (category.Parent == null)
{
BreadcrumbLink += "<strong>" + category.Name + "</strong>(" + category.ChildList.Count + ")";
}
else
{
if (category.ChildList.Count > 0)
BreadcrumbLink += category.Name + "(" + category.ChildList.Count + ")";
else
BreadcrumbLink += category.Name;
}
}
counter++;
if (category.Parent != null)
{
BreadcrumbLink = category.Parent.Name + ">>" + BreadcrumbLink;
GetBreadcrumbLink(ref counter, categoryList, category.Parent);
}
return BreadcrumbLink;
}
}
Örnek Category sınıfımız yukarıda göründüğü gibidir.İçeriğinde Category sınıfından bir Parent,alt kategoriler için ChildList adında Category Listesi,String tipinde Name alanı(kategori adı) ve BreadcrumbLink adında String tipinde ekmek kırıntısı linkimiz mevcuttur.
foreach (var category in categoryList)
{
int counter = 0;
category.GetBreadcrumbLink(ref counter, categoryList, category);
}
{
int counter = 0;
category.GetBreadcrumbLink(ref counter, categoryList, category);
}
Sistemimizde bulunan bütün kategorilerin geldiği listede her bir kategori nesnesi için yukarıda görüdüğümüz şekilde breadcrumblink alanını doldurabiliriz.
Ben benzer sistemin iki değişik kullanımını örnek vereceğim.ASP.NET MVC kullananlar için tanıdık gelecek bu Controller sayfasında elimde bulunan kategorileri tablo halinde listelenmesini istiyorum.BreadcrumbStyleTable fonksiyonumuz bizlere tablonun satır bilgilerini döndürmektedir.View sayfamızda Html.Raw ile alacağınız bu kısımda tablomuzda kategori adları yerine ilgili kategorinin kategori hiyerarşisindeki konumunu yazdırıyoruz.(Örnek : Futbol>>Takımlar>>Bursaspor).TreeMenu fonksiyonu ise aynı kategori hiyerarşisine ağaç görünümü ile bakmamıza olanak tanıyor.
public class PanelCategoryController : Controller
{
// GET: Category
public ActionResult Index()
{
var categories = Category.CategoryList;
string table = "";
int counter = 0;
BreadcrumbStyleTable(ref counter,ref table,categories);
ViewBag.table = table;
return View(categories);
}
public string BreadcrumbStyleTable(ref int counter,ref string table, List<Category> categoryList, int? parentId = null)
{
if(counter!=categoryList.Count)
table += "<tr>";
counter++;
foreach (var category in categoryList)
{
int? categoryParentId = null;
if (category.Parent != null)
{
categoryParentId = category.Parent.Id;
}
if (categoryParentId == parentId)
{
table += "<td><a href='Category/Details/"+category.Id+"'>" +category.BreadcrumbLink + "</a></td>";
table += " <td><a href='Category/Edit/"+category.Id+"'>Düzenle</a>/<a href='Category/Delete/"+category.Id+"'>Sil</a></tr>";
BreadcrumbStyleTable(ref counter,ref table, categoryList, category.Id);
}
}
return table;
}
public string TreeMenu(ref string table,List<Category> categoryList,int? parentId=null)
{
table += "<ul>";
foreach (var category in categoryList)
{
int? categoryParentId = null;
if(category.Parent!=null)
categoryParentId=category.Parent.Id;
if (categoryParentId == parentId)
{
table += "<li>" + category.Name;
TreeMenu(ref table, categoryList,category.Id);
table += "</li>";
}
}
table += "</ul>";
return table;
}
{
// GET: Category
public ActionResult Index()
{
var categories = Category.CategoryList;
string table = "";
int counter = 0;
BreadcrumbStyleTable(ref counter,ref table,categories);
ViewBag.table = table;
return View(categories);
}
public string BreadcrumbStyleTable(ref int counter,ref string table, List<Category> categoryList, int? parentId = null)
{
if(counter!=categoryList.Count)
table += "<tr>";
counter++;
foreach (var category in categoryList)
{
int? categoryParentId = null;
if (category.Parent != null)
{
categoryParentId = category.Parent.Id;
}
if (categoryParentId == parentId)
{
table += "<td><a href='Category/Details/"+category.Id+"'>" +category.BreadcrumbLink + "</a></td>";
table += " <td><a href='Category/Edit/"+category.Id+"'>Düzenle</a>/<a href='Category/Delete/"+category.Id+"'>Sil</a></tr>";
BreadcrumbStyleTable(ref counter,ref table, categoryList, category.Id);
}
}
return table;
}
public string TreeMenu(ref string table,List<Category> categoryList,int? parentId=null)
{
table += "<ul>";
foreach (var category in categoryList)
{
int? categoryParentId = null;
if(category.Parent!=null)
categoryParentId=category.Parent.Id;
if (categoryParentId == parentId)
{
table += "<li>" + category.Name;
TreeMenu(ref table, categoryList,category.Id);
table += "</li>";
}
}
table += "</ul>";
return table;
}
1)Sefaleti yaşarken ekmek kırıntısından navigasyon olayı iyimiş.Acaba anneleri,"ben sadece pirzola yemek istiyorum kuru ekmek benim yaşam tarzıma uygun değil" diyerek mi çocukları evden kovmayı düşünmüş diye insan kendi kendine sormuyor değil.Yani sorun burada açlık değilde pirzola yiyememek miydi?Çünkü götürüldükleri yerin eve uzaklığı boyunca bırakacakları ekmek kırıntıları için belkide fırın arabasıyla seyahat etmeleri daha makul görünen birşey.
2) https://tr.wikipedia.org/wiki/Hansel_ve_Gretel
3)http://www.dotabuff.com
4)https://en.wikipedia.org/wiki/Recursion_(computer_science) (Özyineleme)
29 Kasım 2015 Pazar
SQL Server: Invalid Column Name
Microsoft Sql Server Management Studio üzerinde çalışırken bazen sinir bozucu şekilde sorgu satırlarımızın altında kırmızı çizgilerin belirdiğini görürürüz.
Sql Server : Invalid Column Name
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near 'S'.
Benzeri mesajlar görünür ama anlamadığımız kısım budur zaten.Bunun olma durumlarından iki tanesinden bahsedeceğim.Birincisi sorgu yazdığımızda sql de bizim hangi veritabanı üzerinde işlem yapacağımızı bildirmemiş olabiliriz.Bunu aşmanın yolu veritabanını seçmek.Üstteki resimde sol üst kısımdan NBA veritabanını seçtiğimizde sorunumuz çözülecektir.Diğer yol ise sql sorgularımızdan önce bir kere Use DatabaseName; dememiz yeterlidir.
İkinci durumda ise bir veritabanı üzerinde çalışırken seçtiğimiz tablomuzda,join yaptığımız tablolarda bir değişiklik olmuş olabilir veya bağlantılı sonuç getireceğimiz tablomuz bizim sorgu sayfamız açıldığında başlangıçta son halini almamış veya hiç varolmamışta olabilir.O yüzden sql Management Studio'yu kapatıp tekrar açabiliriz veya aşağıda ki yolu izleyerek sql sorgularımızda ki intellisense özelliğine bir yenileme komutu yollayabiliriz.İşlemin dizini Microsoft SQL Server Management Studio içerisinde Edit>>Intellisense>>Refresh Local Cache.
25 Kasım 2015 Çarşamba
Error : String or binary data would be truncated. The statement has been terminated.
Bir tablo oluşturmuşunuz ve Name isimli string alanını tutmak için VarChar(20) tipinde bir kolon eklediğinizi varsayalım.Veritabanına insert işlemi yaparken kullanıcının,sizin belirtiğiniz Size(20) değerinden fazla karakterli bir giriş yapmasına izin verdiğinizi varsayalım.Bu durumda 'String or binary data would be truncated. The statement has been terminated.' hatasıyla karşılaşırsınız.Kurallarınızı gözden geçirmenizde fayda var.Örneğin ilgili alana 20 karakterden fazla giriş yapılmamasını sağlayabilir veya ilgili alanın daha uzun karakterleri tutabilmesini sağlamak için ilgili tablodan ilgili kolonun Size ını artırabilirsiniz.
DevExpress XAF kullanıyorsanız,sınıfınızda örneğin String alanını oluşturup programı derlemeye geçtiğinizde tablolar çoktan oluşacağından dolayı ilgili kolonun boyutunu düzenlemek için sil-tekrar yükle işlemi veya tabloyu silip projemizi yeniden derleme yoluna gidebiliriz.(2.adım eğer tablo boş ise daha rahattır.) Yeniden oluşturma işleminden önce tabi ki gerekli ayarlamaları alanımız için yapmayı unutmayalım.
DevExpress XAF kullanıyorsanız,sınıfınızda örneğin String alanını oluşturup programı derlemeye geçtiğinizde tablolar çoktan oluşacağından dolayı ilgili kolonun boyutunu düzenlemek için sil-tekrar yükle işlemi veya tabloyu silip projemizi yeniden derleme yoluna gidebiliriz.(2.adım eğer tablo boş ise daha rahattır.) Yeniden oluşturma işleminden önce tabi ki gerekli ayarlamaları alanımız için yapmayı unutmayalım.
[Size(50)]
public string MyProperty
{
get { return _myProperty; }
set { SetPropertyValue("MyProperty", ref _myProperty, value); }
}
[Size(SizeAttribute.Unlimited)]
public string MyProperty
{
get { return _myProperty; }
set { SetPropertyValue("MyProperty", ref _myProperty, value); }
}
[DbType("nvarchar(max)")]
public string MyProperty
{
get { return _myProperty; }
set { SetPropertyValue("MyProperty", ref _myProperty, value); }
}
public string MyProperty
{
get { return _myProperty; }
set { SetPropertyValue("MyProperty", ref _myProperty, value); }
}
[Size(SizeAttribute.Unlimited)]
public string MyProperty
{
get { return _myProperty; }
set { SetPropertyValue("MyProperty", ref _myProperty, value); }
}
[DbType("nvarchar(max)")]
public string MyProperty
{
get { return _myProperty; }
set { SetPropertyValue("MyProperty", ref _myProperty, value); }
}
9 Kasım 2015 Pazartesi
DXDIAG Nedir?
Windows işletim sistemi için ekran kartımızın özelliklerinden tutunda bilgisayarımızın sistem özelliklerine,DirectX sürümünden ses aygıtına,klavye veya mouse gibi girdi-çıktı birimleri hakkında bilgi edinebileceğimiz DirectX Tanı Aracına Başlat->Çalıştır->dxdiag yazarak ulaşabiliyoruz.
DirectX Tanı Aracı başlık ismiyle açılan pencerede 'Sistem','Ekran','Ses' ve 'Giriş' isimli bölümler karşımıza çıkıyor.
Sistem bölümünden bilgisayarımızla ilgili sistem bilgilerini elde edebiliriz.Geçerli tarih veya saat,bilgisayar adı,işletim sistemimiz,kullanılan dil,sistem üreticisi,sistem modeli,bios,işlemci,ram(bellek),disk belleği dosyası ve directx sürümünü öğrenebiliriz.
Ekran bölümünden ekran kartımızla ilgili 'Aygıt','Sürücüler' ve 'DirectX Özellikleri' bilgilere ulaşabiliyoruz.Aygıt kısmında ekran kartı aygıt adı, üretici firma,yonga türü,DAC türü,yaklaşık toplam bellek,geçerli görüntü modu ve monitör bilgilerini öğrenebiliriz.Sürücüler kısmından ana sürücü,sürüm,tarih,WHQL,DDI sürümü ve sürücü modeli bilgilerini öğrenebiliriz.Directx kısmından örnek olarak DirectDraw,Direct3D ve AGP hızlandırmalarının etkin olup olmadığına bakabilirsiniz.
Ses bölümünden ses aygıtı ile ilgili bilgiler,Giriş kısmından ise DirectInput aygıtlarını(örn.Fare,Klavye)görebilirsiniz.
Özetle bu araç,sisteminizde yüklü DirectX bileşenleri ve sürücüleri hakkında detaylı bilgi raporlar.
- See more at: http://mayhemcorporation.com/mayhem/index.php?topic=26
8 Kasım 2015 Pazar
Sql Server 'Saving changes is not permitted' error
Sql Server Management Studio'da genellikle tasarlamadan oluşturduğumuz tablolar olmuştur.Bunlarla ilgili değişiklik yapmak istediğimizde ve değişikliklerin kaydedilmesini istediğimizde şöyle bir uyarı ile karşılaşmaktayız.
"Saving changes is not permitted. The changes you have made require the following tables to be dropped and re-created. You have either made changes to a table that can’t be re-created or enabled the option Prevent saving changes that require the tables to be re-created.”
Uyarıda kaydedilen değişikliklere izin verilmediği,değişikliklerin geçerli olması için tablonun silinmesi veya yeniden oluşturulması gerektiği veya tablonun yeniden yaratılmasının gerektirecek değişikliklerin kaydedilmesini engelleyen seçeneğin değiştirilmesini söylüyor.
Bu seçeneği kaldırarak biz tablomuzu yeniden oluşturma işlemlerinden kurtulmuş olacağız.
"Saving changes is not permitted. The changes you have made require the following tables to be dropped and re-created. You have either made changes to a table that can’t be re-created or enabled the option Prevent saving changes that require the tables to be re-created.”
Uyarıda kaydedilen değişikliklere izin verilmediği,değişikliklerin geçerli olması için tablonun silinmesi veya yeniden oluşturulması gerektiği veya tablonun yeniden yaratılmasının gerektirecek değişikliklerin kaydedilmesini engelleyen seçeneğin değiştirilmesini söylüyor.
Bu seçeneği kaldırarak biz tablomuzu yeniden oluşturma işlemlerinden kurtulmuş olacağız.
Sql Server Management Studio içerisinde yukarıda ki menüden Tools>Options>Table and Database Designers kısmından 'Prevent saving changes that require table re-creation' seçeneğindeki seçimi kaldırıyoruz.(Yalnız yeniden tablo oluşumu gereksinimi yaratan bu durumların kaydedilmesinin engellenmek istemesinin sebeplerini bir kenara not almakta fayda var( https://support.microsoft.com/tr-tr/kb/956176 ) Biz en iyisi bu seçeneği aktif halde bırakıp projemize devam edelim.)
6 Kasım 2015 Cuma
Microsoft Açık Akademi
Microsoft Açık Akademi
Açık Akademi,Microsoft'un www.acikakademi.com adresinde ücretsiz olarak uygulama geliştirme üzerine eğitimler verdiği sanal okuldur.Temel programlama eğitimlerinden ileri düzey uygulama geliştirmeye yarayacak konuların anlatıldığı derslerde değişik cihazlarda ve değişik sistemlerde üretime yönelik eğitimler verilmektedir.Aklınızda ki projeniz ister web ortamında olsun ister masaüstü ister mobil isterseniz bulut uygulaması olsun açık akademi üzerinden alacağanız dersler ve üzerine yapacağınız pratikler ile adım adım projelerinizi gerçekleştirmeye başlayacağınızı söyleyebilirim.Tabi ki programlamanın kendi başına bir derya olduğunu unutmamak gerekir.Sürekli gelişen teknolojiyle paralel bir şekilde artan yeni çözüm önerileri yüzünden programcılar bir çok alternatif sistem konusunda bilgi sahibi olmak zorundadırlar.Buda anca büyük bir tutkuyla yürütülebilecek meslek icrası olabilir.Açık Akademi orta seviye olanları bir adım öteye ulaştırabilir ancak yeni başlayanlar için sadece başlangıç ateşini yakabilir.Zaten buda çok önemli bir şey diye düşünüyorum.Gerisi ilgili konularlarda bol miktarda pratik ve araştırmadan geçiyor.Üzerine yoğunlaşmadığımız sürece hayatımızda ki çoğu şeyin zaten öğrenilmesinin zor olduğunu biliyoruz.
Siteye Microsoft hesabımızla giriş yapabiliyoruz.Giriş yaptıktan sonra artık bu akademinin bir öğrencisi olarak dilediğimiz derse girip çıkabiliyoruz.Eğer belli bir proje tipi üzerinden eğitim görmek istiyorsanız yukarıda gördüğünüz kısımlardan maceranıza devam edebilirsiniz.(Unity ile oyun geliştirme kısmı bile mevcut)
Tüm dersler kısmından ise sistemde mevcut olan bütün derslerin listesine ulaşabiliriz.Yukarıda ki fotoğrafta bir kısmı görüntülenmektedir.Derslerin yaklaşık olarak ne kadar süreceği ve sizin bu dersleri tamamlama oranlarınızı ilgili kolonlarda görebilirsiniz.
Bunlardan başka Kütüphane kısmı(belli konularda dokümanlar içerir),derslere katılanların Başarı Bilgileri (büyük ihtimalle dersler sayesinde uygulama geliştirmiş veya kariyerlerini şekillendirmiş kimseler),Açık Akademi Tv(açık akademide yapılmış olan kariyer söyleşileri,sanal sınıf etkinlikleri ve canlı yayımlara bu bölümden erişebilirsiniz),Soru-Cevap kısımı inceleyebileceğiniz kısımlar.
Ayrıca Kodu diye bir kısım mevcut ki bunu belki ilerleyen yazılarımda inceleyebilirim.Kodu için basit olarak şunu söyleyebiliriz ki,çocuklar için özel olarak tasarlanmış bilgisayar oyunu oluşturmaya yönelik görsel bir programlama dilidir.Benim önerim incelemekte fayda var.Çünkü programlama,bütün insanlar için kendi bünyesinde barındırdığı düşünme biçimi geliştirme yöntemlerinden dolayı çok faydalı ve gereklidir.Bu sebeple programlamaya erken yaşlarda başlayan çocukların ileride yazılım dünyasında kariyer sahibi olmayacak olsalar bile(belki büyüdüklerinde istemeyebilirler) bir çok anlamda yeteneklerinin gelişeceğini söyleyebiliriz.
Açık Akademi sayfasının Microsoft tarafından desteklenmesinin nedenleri üzerine fazla kaotik sorgular yapmamak gerekiyor diye düşünüyorum.Doğal bulacağınız gibi Microsoft kendi teknolojileri üzerinden ilgili cihazlara ve ortamlara yönelik uygulamalar geliştirmenize yardımcı olmaya çalışıyor.Bizler bireysel olarak böyle şirketlerin sadece gösterdiği yollarla ilgilenmeliyiz.Keşke etrafımızda var olan bütün programlama dilleri,veri tabanı yönetim sistemleri,geliştirme ortamları vs için geniş kapsamlı kaynaklar mevcut olsaydı.Benim şahsi görüşüm bu konuda fazla zaman kaybetmeden bir konuda sizi sonuca götürenlerle yol almanız.Microsoft teknolojileri benim için artı olur diyorsanız buyrun derslerde ki yerinizi alınız.Yalnız eleştirmeden edemeyeceğim.Bazı ders sonu sınavlar aşırı zorlayıcı olabiliyor ve klasik Türk tipi okullarda ki gibi anlatılmayan kısımlardan sorular gelebiliyor.Buda konuyla ilgili bizlere ekstra araştırma yapma ihtiyacını yaratıyor.(Hevesi olan daha fazlasınıda yapar,yetinmez,ilgili konuyla alakalı Youtube video serileri bitirir,kaynak kodlar inceler....)
Kaydol:
Kayıtlar (Atom)














