Blogengine yazılarını WordPress’e aktarma

Merhabalar, Server arızaları nedeniyle Linux’a taşınmak zorunda kaldık. Bunun sonucunda WordPress ile daha çok uğraşma fırsatı edindim.

Daha önceki blogum Blogengine olduğu için ve WordPress’te de Blogengine yazılarını içeri aktaracağım bir düzgün bir eklenti bulamadım. Fakat içe aktar seçenekleri arasında “RSS” i kaynak olarak alan bir seçenek vardı. Bu sayede eğer eski bloğun RSS kayıtlarına erişebilirsem yazıları ekleme fırsatım olacağını anladım.

Şu adımları izledim :

  1. Localhost’a bir blogengine yükleyerek önceden aldığım xml verilerini localde yükledim.
  2. Localdeki blogdan RSS linkini kullanarak tüm yazılara eriştim. ( Bunu yapabilmek için ayarlarda RSS kayıt sayısını yeterince büyük atamak gerekiyor)
  3. Blogengine dosyalarımı FTP den bir klasöre attım. (Blogengine için App_Data/files klasörünü aldım )
  4. Çıktı bir xml olacaktır yine, bu xml içerisinde,  öncelikle Visual Studio’nun IIS e port ettiği “http://localhost” adreslerini “saidaydogan.com” ile değiştirdim,
  5. ikinci olarak “image.axd?picture=”  ifadelerini eski dosyalar nereye atıldıysa onun linkini vererek değiştirmek gerekiyor, Ör: “wp-content/pictures/2013/11/kj1.PNG” gibi. ( Not: Sonradan farkettim “file.axd?file” ifadelerini dönüştürmeyi unutmuşum 🙂 )
  6. Daha sonra WordPress içe aktarda bulunan “RSS” i kullanarak tüm yazıları içeri aktardım.

Süreç böyle işledi, temasal sorunlar oldu ama onlar da çok önemli şeyler değil gibi duruyor.

Yazıların etiketlerini içe aktaramadım, zaten RSS kayıtlarında  da etiketleri göremedim.

KnockoutJS Nedir?

KnockoutJSSteven Sanderson  tarafından geliştirilmiş bir JavaScript kütüphanesidir. Bu kütüphane ile kullanıcı etkileşimini artırmak amaçlanmıştır. Knockout Modelleri kullanılarak oluşturulan Dinamik (özellikleri değişebilen) elemanlar gelişmiş bir etkileşim desteği sunuyorlar. Kütüphane MVVM kalıbını(pattern) uygulamaktadır.

MVVM(Model View ViewModel):

MVVM, Model, View ve ViewModel adında 3 yapıdan oluşmaktadır.  Amaçları arasında arayüz yapan kişinin arka tarafta nasıl bir iş geliştirildiğini bilmeden işini yapabiliyor olması, daha çabuk genişlemeye müsait bir yapıyı ortaya çıkarması sayılabilir. Model, verileri temsil etmektedir. View kullanıcıya sunulan görüntü, ViewModel ise asıl işin geliştirildiği yapıdır. View’ın Model i bilmesine gerek yoktur. ViewModel aracılık yapmaktadır.

knockoutjs.com adresinden .js dosyasını indirebileceğiniz gibi cdn’leri de kullanabilirsiniz. Enson sürüm olan knockout-3.0.0.js ‘i Asp.net MVC projesinde kullanımını bakacak olursak.

Öncelikle boş bir MVC projesi açıyoruz. 

 

Daha sonra “KnockoutJSController” adında bir controller ekliyoruz ve Index view’ini oluşturuyoruz. “RouteConfig”  sınıfından Default olarak tanımladığımız “KnockoutJSController” controllerini ve “Index” view adını veriyoruz ki controller adı ve view adı verilmezse buralara yönlendirsin.

Projede knockout.js kullanabilmek için doğrudan indirilen dosya kullanılabileceği gibi “Nuget Package Manger” sayesinde de projeye eklenebilmektedir. “Install-Package knockoutjs” komutu ile projeye KnockoutJS i ekliyoruz.

 

Boş proje açtığımız için bundles ile ilgili bir ayar sınıfı gelmemiş fakat istenirse ayrıyeten de yazılabilir. Knockoutjs, <script> etiketleri kullanılarak da eklenebilir.

 Örnek ViewModel:

Örnek ViewModel yukardaki gibi tanımlanıp “ornek1Model.js” adında oluşturuldu.  Bu bildiğimiz JavaScript fonksiyonu şeklindedir.

Bunu View’e aşağıdaki şekilde eklersek.

Yukarıda görüldüğü üzere KnockoutJS ve ViewModel scriptleri harici olarak dahil edilmektedir. “<span>” elemanlarında ise “data-bind=” ve bunun eşitliğindeki “text:”  dikkati çekmektedir. Bunlar knockout ‘un yönettiği parametler olarak karşımıza çıkıyor. Yani “data-bind” gördüğü zaman o elemanı viewmodel ile ilişkilendirmesi gerektiğini anlıyor. Eşitliğinde bulunan özellikleri ViewModel’a uygun şekilde isteneni gerçekleştiriyor.

Kısaca yukarda “text:isim” ile “data-bind” niteliği verilmiş elemanın “text” özelliğini ViewModel’de bulunan “isim” değişkeniyle oluşturmasını istiyoruz. Bunun sonucunda da aşağıdaki görüntüyü elde ederiz. 

İsim ve soyisim değerini “input” elemanında göstermek istersek de “text” yerine “value” kullanılır.

Eğer değişkenleri “Observable” olarak tanımlarsak knockout bizim için bu değişkenleri izler ve değişiklik olduğunda aynen yansıtır. Bunu aşağıdaki örnekte görebiliriz.

ViewModel’i şu şekilde güncellersek:

View’ı da şu şekilde güncellersek:

Farklılık olarak “valueUpdate: ‘afterkeydown’ “ ve “computed” göze çarpanlar olarak karşımıza çıkıyor. “valueUpdate: ‘afterkeydown’” bizlere adında da anlaşılacağı üzere tuşa basıldıktan sonra ViewModel’a git ve ilgili değişkeni yeni değeriyle güncelle demektedir. Bu sayede aynı anda diğer ilişkili yerler de güncelleme gerçekleştirilecektir.

“computed” bir fonksiyon olarak karşımıza çıkmaktadır. Bu sayede ViewModel’da bulunan değişkenlerle ilgili işlemler gerçekleştirebiliriz. Üretilen bir değer olduğu için kullandığı değerler değiştiğinde otomatik olarak ilgili yeri güncellemektedir.

 

Uygulama görüntüsü: 

Görüldüğü gibi aynı anda güncelleme gerçekleştirilebilmektedir. 

Proje Dosyası: KnockoutJS-OrnekProje.rar (1,29 mb)

Webrazzi Startup’13

Etkinlik için 200 öğrenci kontenjanı açılmıştı bu sayede yatırımcı – girişimci buluşmasını bir öğrenci olarak görme şansı ettim bunun için Webrazzi’ye teşekkürler.

Etkinlikte şuan yatırımcı olan aynı zamanda girişimcilik tecrübeleri de olan bir çok değerli isim konuştu.

Varılmak istenen nokta Türkiye ‘de girişimcilere destek miktarları oldukça ilgi çekici boyutlara ulaşmış düzeyde tabi bunu değerlendirmeyi becerebilmek gerekli. Üniversite öğrencileri açısından baktığımda bir çok yatırımcı henüz yeni mezun olan girişimcilere sıcak bakmamakta ama istisnai durumları da yok değil. İş süreç planları yatırım almada çok büyük etkiye sahip ve ayrıca takımın kendi arasında ilişkisi ve yetkinliği de yatırımcıların kararlarında en büyük rol alan etkenlerden biri olmakta.

 

Etkinlikte 6 tane girişim yer aldı bunlar ;

Sopsy , Selldigi ,mobikasaba, prisync , plate.im , markadas.com

Detaylar : http://www.webrazzi.com/2013/05/22/demorazzinin-gelecek-vaadeden-6-girisimi-sopsy-selldigi-mobikasaba-prisync-plateim-markadas/

2. Sınıf 2. Dönem

Dönem sonu yaklaşırken aldığım 11 ders ve uğraşlarından bahsedeceğim : 

Ödev ve Proje İstekleri : 

Veri yapıları ve algoritmalar –> 2 ödev verildi. 1 dönem projesi verilecek. 

Nesneye dayalı programlama –> 1 dönem projesi verildi.  

Sayısal analiz –> 1 dönem projesi verildi.  

Elektronik devreler –> 2 ödev verildi. 

Sistem analizi ve tasarımı –> 1 ödev verildi. 1 dönem projesi verildi. 1 sunum yapılacak(projenin). 

Bilgisayar semineri –> IEEE formatında rapor yazılacak raporun sunumu yapılacak.

Mesleki İngilizce –> 1 sunum verildi. 

İş hayatı için İngilizce  –> 1 sunum verildi.

Ayrıca bu derslerden bazıları(veri yapıları , nesne , sayısal analiz , istatistik , ekonomi , aiit )  * 2 vize + birkaçı (elektronik,iş hayatı ing.,sistem analizi,mesleki ing. ) * 1 vize + hepsinin(11 ders) finali var  =  27 sınav eder. Derste yazı bile yazmadan kalem ucu bitiren kişileriz! 

Dönem boyunca uğraşmak isteyip de uğraşamadım şeyler : 

– Windows 8 programlama. 

– Windows Phone geliştirme ortamı. 

– REST ve SOA  mimarileri. 

– Haskell.

 

Uğraştıklarım  : 

– Visible analyst(Sistem analizi ve tasarımı). 

– MS Project(Sistem analizi ve tasarımı). 

– Multisim(elektronik devreler). 

– PHP(Sistem analizi ve tasarımı). 

– Java(Nesneye dayalı programlama). 

– Bir sürü garip(!) matematik işleri (Sayısal Analiz). 

– MySQL(Sistem analizi ve tasarımı). 

– Kuyruk,Yığın,Bağlı liste, Ağaçlar,Sıralama algoritmaları vs (Veri yapıları ve algoritmalar). 

Java’da Serileştirme(Serialization)

Object Serialization(Nesneleri Serileştirme) kullanarak nesneler byte dizisi haline getirilebilir bu sayede nesneler program kapatıldığında dahi kalıcı olmuş olacaklardır. 

Serileştirilmiş nesnelerin  tekrar belleğe yüklenmesi için de Object Deserialization kullanılır. Deserialization işleminden sonra nesneler kullanılabilir halde olurlar.

 

Bu 2 işlem için gerekli olanlar :

  • Serializable Arayüzü(Interface) –> Bu arayüzü sağlayan(implements) sınıflar serileştirilebilir olduğunu söylemektedir.

  • ObjectOutputStream,FileOutputStream –> Bu sınıflar bir nesnenin serialization işleminde kullanılır. Nesnenin nereye yazılacağının bilgisini FileOutputStream ile belirlenir. ObjectOutputStream ise FileOutputStream sınıfının örneğini kullanarak nesneyi yazar.

  • ObjectInputStream,FileInputStream –> Bu sınıflar bir nesnenin deserialization işleminde kullanılır. Nesnenin nereden okunacağının bilgisini FileInputStream ile belirlenir. ObjectInputStream ise FileInputStream sınıfının örneğini kullanarak nesneyi okur.

Kullanılan Sınıflar :

  •  Yukarda tanımlanan Calisan sınıfı görüldüğü üzere Insan sınıfından türetilmiş ve Serializable olarak işaretlenmiştir. Burda önemli olan nokta Serializable arayüzünü gerçeklemiş olmasıdır. Buna ek olarak eğer bir sınıfın üst sınıfı Serializable arayüzünü gerçeklemişse ondan türetilen sınıflar da Serializable işlemine tâbi olabilirler.

  • serialVersionUID, yazdırılan nesnelerin versiyon kontrolünü sağlamak için kullanılır.Eklenmediği durumda Eclipse uyarı verir. “@SupressWarning(Serial)” ile derleyici bilgilendirilirse uyarı mesajı vermez.

 

Serileştirme İşlemi :

 Konsol Çıktısı :

  •  Bu örnekte ObjectOutputStream sınıfının WriteObject metodu kullanılarak nesneler teker teker yazdırıldı. Duruma göre daha farklı şekilde de yazdırılabilirdi (Örneğin bir List’i direkt olarak WriteObject e parametre olarak vermek gibi.).

  •  ObjectOutputStream sınıfının WriteInt(int) vs gibi de metodları bulunmakta gerektiğinde kullanılmalıdır.
  • Bir başka konu ise “transient” anahtar kelimesidir. Bu anahtar kelimeyle birlikte kullanılan üye alanlar serileştirilmez.

Dosyadan Okuma İşlemi : 

 

Konsol Çıktısı : 

 

  •  Okuma işlemlerinde dikkat edilmesi gereken nokta, okunan nesnenin serileştirilen nesne’nin tipine dönüştülmesi gerekebilir. Çünkü readObject() metodu object döndürmektedir cast(tip dönüşümü) işlemi ile rahatlıkla serileştirilmeden önce kullanılabilen üye alanlara ve metodlara da erişim sağlanır.

Bilmök 2013

İlk gün katılabilmemize rağmen güzel bir etkinlik oldu. BMO nun kurulumundan sonra gerçekleştirilen ilk Bilmök etkinliği olmasına da denk gelmek güzeldi.

Konuşmalarda girişimcilere yönelik ivme kazandırıcı etkenler ve destek programları vurgulandı. 

 – Bilim , Sanayi ve Teknoloji Bakanlığı programları

 – Kosgeb programları

Kocaeli Üniversitesi ve tüm Bilmök ekibine teşekkürler.

Windows Store Programlamaya Merhaba

Windows Store eski adıyla metro stili uygulama tasarlamak için. Visual Studio 2012 gerekmektedir.

Visual Studio 2012 Ultimate, Premium, Professional ve Test Professional için:

Destekleyen İşletim Sistemleri:

  • Windows 7 SP1 (x86 / x64)
  • Windows 8 (x86 and x64)
  • Windows Server 2008 R2 SP1 (x64)
  • Windows Server 2012 (x64)

Donanım Gereksinimleri :

  • En az 1.6 GHz işlemci
  • En az 1 GB  RAM
  • 10 GB boş disk alanı
  • En az DirectX 9 destekleyen bir ekran kartı
 Not: Visual Studio 2012 i Windows 7 /Windows Server 2008 desteklese de bu işletim sistemlerinde normal şartlar altında Windows Store uygulaması geliştirilememektedir. Windows 8 yüklü olması gerekmekte.
 

Visual Studio 2012 den bir ekran görüntüsü :

 Proje Oluşturma :

Geliştirici Lisansı Alma : 

Kabul Ediyorum a tıkladıktan sonra :  

Microsoft Hesabınızla giriş yapıyorsunuz

Artık bir lisansınız var.

Bol Programlamalar.

 

 

 

EF5 WindowsForm Multithread Sorunsalı

Entityframework ü kullanmak gerçekten çok güzel.Fakat bazen verdiği hatalar çok anlamsız olabiliyor NULL olmayan Context e NULL demesi gibi.Halbuki o anda başka bir thread kullandığı için bayağı uğraşmama sebep olan hatanın çözümü çok basitmiş “Context instance per form”  adından da anlaşılacağı gibi formun işi bitince contex in de işi biter ve yok olur 🙂