Windows Phone Emulator Tuşları

İstanbul’a döndüğüm gün, aynı zamanda yazılım geliştirme için kullandığım cihazın Unlock yıl dönümüydü. Cihazım, yeniden kilitlendi ve bir sorun nedeniyle kilidini açamıyorum. Bu nedenle emulatore mahkum oldum. İşin komik yanı, 14 aydır Windows 8 kullanıyorum. Emulator Windows 8’de çalışmadığından açıp bakma fırsatım olmamıştı.

Sonunda yeni çıkan güncellemeyle emulator artık Win8’de de çalışıyor. Açtım. İlk farkettiğim şey, emulator’de Ses açma / kapama, kamera ve kilitleme tuşlarının olmamasıydı. Projem gereği bir AudioPlayerAgent üzerinde çalıştığımdan bu tuşlara ihtiyacım vardı. Biraz araştırma sonucu bu tuşların ve daha fazlasının klavye kısayolları sayesinde kullanılabildiğini farkettim.

Bu kısayollar:

  • [F1]: Cihaz üzerindeki geri tuşu.
  • [F2]: Cihaz üzerindeki Windows Tuşu. Bu tuşu bir süre basılı tutmak sesle kontrol ve arama arayüzünü açar.
  • [F3]: Cihaz üzerindeki arama tuşu. Bing Search’ı açar.
  • [F6]: Cihaz üzerindeki kamera tuşu yarı basılı. Visual Studio 2010 Express for Windows Phone tarafından desteklenmez.
  • [F7]: Cihaz üzerindeki kamera tuş tam basılı. Visual Studio 2010 Express for Windows Phone tarafından desteklenmez.
  • [F9]: Sesi arttırma tuşu.
  • [F10]: Sesi azaltma tuşu. Ses arttırma ve azaltma tuşlarına basıldığında ekranın üst tarafında o anda çalan müziği durdurabileceğiniz, ileri ve geri alabileceğiniz; telefonu sesliye ya da titreşime alabileceğiniz bir arayüz açar.
  • [F11]: Müziği durdur / başlat tuşu. Bu tuşun cihaz üzerinde bulunması zorunlu değildir.
  • [Print Screen]: Cihaz üzerindeki aç/kapat tuşu. Visual Studio 2010 Express for Windows Phone tarafından desteklenmez.
  • [Page Up]: Donanımsal klavyeyi kullanıma açar.
  • [Page Down]: Donanımsal klavyeyi kullanıma kapatır. Donanımsal klavye, bazı telefon modellerinde bulunan bir klavye türüdür. Daha detaylı bilgi için ilgili MSDN makalesini okuyabilirsiniz.
  • [Sol CTRL]: FN tuşu. Bilgisayarınızdaki SHIFT tuşuna benzer bir işlem yapar. Donanımsal klavyenin tuşlarındaki ikincil tuşa geçer.
  • [Sağ CTRL]: Sembol klavyesini açar.
  • [Sol ALT]: Aksan tuşu. Üzerinde “ÄÉ” sembolu olan tuş.
  • [Sağ ALT]: Gülümseme klavyesini açar. Donanımsal klavyede üzerinde “:)” sembolu olan tuştur.

Bir sonraki yazıma kadar kendinize iyi bakın…

Sürüklenedururken

İstanbuldayım. İstanbul'da olmaktan ziyade artık yeniden bir İstanbulluyum. Artık buluşma planlarımı İstanbul içerisinde yapıyorum. Son yazı yazdığım günden bu yana dört ay geçmiş. Dört ay bir insanın hayatında büyük değişikler olması için yeterli sanırım.

Uludağ Üniversite'sini bıraktım. Artık öğrenci değilim. Bazı arkadaşlarım benle liseli diye alay etmeye bile başladı. İstanbuldayım ya, üniversite bakıyorum kendime. Bilgisayar Mühendisliği okuyacağım inşallah. Ufukta Fatih Üniversitesi gözüküyor; ama Özyeğin ya da Bahçeşehir de olabilir...

Uludağ Üniveristesi öğrencisi olarak son tatilime bismillah diyecetim ki tam; Osman hocam aradı. Tatil iyi değildir gel bizde çalışalım dedi; o günden beridir TCM'deyim. Ofis ortamını çok beğendim, bir önceki ofisimden sonra burası cennet gibi. Tabii hiçbir şey mükemmel değildir, Windows 8 ve Windows Phone geliştirme güzel ama Kinect, Kinect'i sormayın...

Artık İstanbulda olduğuma göre, daha sık yazacağım, bekleyin ;)

Windows Phone’da Bir DependencyProperty Değiştiğinde Haberdar Olma

WPF’de bir DependencyProperty’nin PropertyMetadata’sı üzerinde işlem yapmak istediğimizde DependencyPropertyDescriptor sınıfı hayatımızı kurtarırdı. Ancak bu sınıf Windows Phone’da yok. Bu çoğu zaman bunu hissetmezsiniz. Ancak ya bir DependencyProperty değiştiğinde haberdar olmanız gerekiyorsa?

Bunu bir hack yardımı ile yapabilirsiniz.

public static void Register(DependencyObject target, string propertyPath, DependencyPropertyChangedEventHandler dependencyPropertyChanged)
{
    Binding binding = new Binding(propertyPath) { Source = target };

    var property = DependencyProperty.RegisterAttached("_" + Guid.NewGuid().ToString("N"), typeof(object), typeof(DependencyObject),
        new PropertyMetadata
        (
            (o, e) =>
            {
                o.Dispatcher.BeginInvoke(() => dependencyPropertyChanged.Invoke(o, e));
            }
        )
    );

    BindingOperations.SetBinding(target, property, binding);
}

Örnek projeyi ve kodlara buradan ulaşabilirsiniz.

Bu yazı çok kısa oldu sanırım, daha sonra görüşmek üzere…

Windows Phone 7.5 ile AWS Kullanmak - Bölüm 3

Henüz okumadıysanız makalemin ilk kısmına buradan, ikinci kısmına ise buradan ulaşabilirsiniz.

PutAttributes

SimpleDb’ye Insert ve Update işlemleri PutAttributes aksiyonu ile yapılıyor. Bu işlem ile daha detaylı bilgiyi dokümantasyondan okuyabilirsiniz.

var data = new Dictionary<string, string>()
{
    { "Action", "PutAttributes" }, 
    { "DomainName", "domain_ismi" },
    { "ItemName", "Deneme Kaydi" },
    { "Attribute.1.Name", "1. atrribute" },
    { "Attribute.1.Value", "1. değer" },
};

Haplois.Cloud.AWS.Common.REST.Query(data, (o) =>
{
    var result = new Haplois.Cloud.AWS.ResponseBase(XDocument.Parse(o));         
});

Yukarıdakine benzer bir kod ile Insert işlemi yapabiliriz. Yukarıdaki kod, “domain_ismi” domaininde ismi “Deneme Kaydı” olan bir kayıt oluşturur (ya da varsa onu seçer) ardından ismi “1. attribute” olan bir nitelik yaratır ve ona “1. değer” değerini atar.

PutAttributes aksiyonu ile eklenecek ya da güncellenecek nitelikleri göndermek için “Attribute.N.Name”, “Attribute.N.Value” ve “Attribute.N.Replace” parametreleri kullanılır. Burada “N” herhangi bir doğal sayı olabilir.

  • Attribute.N.Name: Eklenecek ya da güncellenecek olan niteliğin ismi
  • Attribute.N.Value: Eklenecek ya da güncellenecek olan niteliğin değeri
  • Attribute.N.Replace: “false” olarak verildiğinde niteliği aynısı olsa bile yeniden ekler. “true” olarak verildiğinde ise aynısı varsa günceller, yoksa ekler. Varsayılan değeri: “false”

Insert ve Update işlemlerini kolaylaştırması için yazdığım metodları ekteki kodlardan inceleyebilirisiniz.

DeleteAttributes

Delete işlemlerini bu aksiyon ile yapılıyor. Bu işlem hakkında daha detaylı bilgiyi dokümantasyondan bulabilirsiniz.

var data = new Dictionary<string, string>()
{
    { "Action", "DeleteAtributes" }, 
    { "DomainName", "domain_ismi" },
    { "ItemName", "Deneme Kaydi" },
    { "Expected.1.Name", "1. atrribute" },
    { "Expected.1.Value", "1. değer" },
};

Haplois.Cloud.AWS.Common.REST.Query(data, (o) =>
{
    var result = new Haplois.Cloud.AWS.ResponseBase(XDocument.Parse(o));

    MessageBox.Show(result.BoxUsage.ToString());
});

Bu aksiyon ismi verilen domain’de silme işlemi yapar.  Eğer Expected.N.Name ve Expected.N.Value ikilisi ile belirli nitelikler verilmişse bu nitelikleri sağlayan öğeler silinir. Silme işlemi sırasında Parameter.N.Name ile parametre ismi verilmişse yalnızca isimleri verilen parametreler silinir. Eğer parametrenin çoklu değeri varsa Parameter.N.Value ile istenilen değeri de verilerek yalnızca istenilen parametrenin silinmesi sağlanabilir.

Eğer parametre ismi verilmemişse öğe ve tüm parametreleri silinir.

Update ve Delete işlemlerinde şartları sağlayan bir öğe bulunamazsa hata oluşmaz ve işlem başarılı mesajı döner.

Delete işlemi için yazdığım yardımcı metodu da  örnek kodlar içerisinde bulabilirsiniz.

SimpleDb ile ilgili yazacaklarım bu kadar. Daha sonra Amazon Simple Storage Service ile ilgili olarak da bir şeyler yazacağım. Ancak lütfen unutmayın, bu yazılarda verdiğim kodlar sadece örnek amaçlı, servilerin tüm özelliklerini içermiyor ya da en iyi çözümü sunmuyor olabilirler.

Bu yazının örnek kodlarını buradan indirebilirsiniz.