31 Mayıs 2013 Cuma

Architecture of AllMyListsLE List Management Software

AllMyListsLE Liste Yönetim Yazılımının Mimarisi

AllMyListsLE yazılımının kökenleri 2011 yılında geliştirmeye başladığım Windows Forms tabanlı AllMyLists yazılımına dayanmaktadır. Bu ilk geliştirmeyi WPF tabanlı AllMyListsWPF uygulaması izlemiş, ardından MVVM mimarisini denemeye çalıştığım AllMyListsWPFMVVM yazılımını geliştirmeye başlamıştım. Daha sonra 2012 yılında bir Windows 8 Store uygulaması olan AllMyListsMetro'yu bütünüyle yeni bir mimari üzerinde geliştirdim (https://meminmutlu.wordpress.com/personalis/pim-projects/).

2013 yılında "Yaşam Boyu Öğrenme Deneyimlerinin Yönetimi Amacıyla Bir Dijital Yaşam Günlüğü Sisteminin Geliştirilmesi ve Uygulanması" isimli projede yaşam ve öğrenme deneyimlerinin yönetimi için bir yazılıma gereksinimi duyulduğunda  AllMyListsWPFMVVM tasarımını temel alarak AllMyListsLE yazılımını geliştirmeye başladım.(http://personalinformationsystems.blogspot.com/2013/02/development-and-implementation-of.html)

AllMyLists yazılımı bir ana pencereye yerleştirilmiş birer ağaç, ızgara ve zengin metin kutusu denetimleri üzerinde çalışmaktaydı. Tüm kodlar ana sayfaya yerleştirilmişti ve sayfadaki denetimlere ait olaylar ana sayfada işlenmekteydi.

AllMyListsWPF'de denetimler Windows Forms yapısından XAML'e taşınmış fakat işleyiş aynı bırakılmıştı. Tüm kodlar ana sayfada yeralmaya devam etmişti. XAML teknolojisi Windows Forms'un rijid yapısına göre büyük tasarım esnekliği sağlamıştı.

AllMyListsWPFMVVM'de ise denetimlerin kendi kodlarını kendi içlerinde barındıracak şekilde düzenlenmeye çalışılmıştır. Bu amaçla ana sayfada bulunan ve denetimlerin altında çalışması daha mantıklı olan tüm kodlar denetimlere birer method olarak taşınmış ve denetimler de birer "UserControl" haline getirilerek birer kopyaları (ilgili "Grid" ler ve "GridSplitter" lar dışında boş olan) ana pencereye yerleştirilmişlerdir.

AllMyListsLE yazılımına başlandığında ise ilk yapılan işlem tüm veritabanı işlemlerinin ayrı bir sınıfa aktarılması olmuştur. Böylece bütün denetimlerin kullandığı ortak bir veri modeli oluşturulmuştur. Diğer taraftan yazılıma LifeLogging görüntülerinin görüntülenmesiyle ilgili yeni "UserControl" ler eklenmiştir. Bu denetimler görüntülerin yerleştirildiği bir görüntü listesi ile verilen bir güne ait görüntülerin hangi cihaza ait olduğunu belirtmek amacıyla kullanılan bir cihaz listesidir.Diğer taraftan yazılımın yapısı düğümleri kullanıcı tarafından oluşturulan "MyList" ve düğümleri kaydedilmiş görüntü klasörlerinden elde edilen "LifeLog" şeklinde iki ayrı ağaç yapısını işleyecek hale dönüştürülmüştür.

Bir süre sonra "MainWindow" ve kendisine yerleştirilmiş olan "UserControl" ler arasında yoğun bir bağımlılık bulunduğu, denetimlerden ana penceredeki değişkenlere ve yöntemlere erişildiği hatta denetimlerin ana pencere üzerinden diğer denetimlere eriştiği gözlenmiştir. Örneğin kullanıcı ağacın bir düğümünü seçtiğinde, ağaç nesnesi cihaz listesi nesnesine erişmekte, cihaz listesi nesnesinden bir cihaz seçildiğinde ise cihaz listesi nesnesi görüntü listesini etkinleştirmektedir.

Bu durum dolaşıklık oluşturmakta ve nesne yaklaşımlı programlama mantığıyla çelişmektedir. Bu sorunu aşmak amacıyla ayrıntılı bir tarama yapılmış ve yazılımın tümünde sadece ana pencereden üzerinde yerleşik bulunan kullanıcı denetimlerine erişimin bulunduğu, denetimlerden ana sayfanın ya da diğer denetimlerin çağrılmadığı duruma kavuşuncaya değin bir ayıklama işlemi gerçekleştirilmiştir. Bu amaçla denetimlere çok sayıda "Event", "Field" ve "Property" eklenmiştir. Böylece bir denetimin diğer bir denetime doğrudan erişmesi yerine kendisine ait özel bir "Event" ı tetiklemesi, bu "Event" ı yakalayan ana pencerenin hedefteki denetime erişmesi şeklinde bir geçişkenlik kullanılmıştır. Veritabanı nesnesinin ana pencere üzerinde çağrılması yerine denetimlerde gerekli olan yerlerde "Private" veritabanı nesnelerinin tanımlanması yoluna gidilmiştir. 

Yukardaki örnek bu durumda şu şekilde çalışmaya başlamıştır: Ağacın bir düğümü seçildiğinde bir olay tetiklenir. Ana pencere bu olayı yakalar ve cihaz listesini etkinleştirir. Cihaz listesi nesnesi bir öğe seçildiğinde bir olayı tetikler. Ana pencere bu olayı yakalar ve görüntü listesini etkinleştirir. Böylece alt denetimler kendi aralarında iletişimi ana pencere üzerinden sağlarlar.

Nisan sonu, Mayıs ortası arasında yapılan ayıklama sonucunda yaklaşık 450 dolaşık çağrı yazılımdan kaldırılmıştır. Böylece AllMyListsLE yazılımında karmaşıklık ortadan kaldırılmış, basit ve anlaşılır bir mimari elde edilmiştir. Gelinen aşamada denetimlerin veri modeline bağımlılığı dışında diğer nesnelere olan bağımlılığı kalmamıştır. Bir sonraki adımda denetimler ile veri modeli arasında bağımsızlık sağlanacak ve bu süreç yazılımda MVVM mimarisine tam anlamıyla geçilene kadar devam edecektir.

18 Nisan 2013 Perşembe

Transfer Images From SkyDrive Folders To Local Folders

Görüntüleri SkyDrive Klasörlerinden Yerel Klasörlere Taşıma

Önceki yayından günümüze geçen süre içerisinde bir Windows Store uygulaması olan LifeLoggingCC yazılımının masaüstü sürümünü geliştirdim. LifeLoggingCCDesktop olarak adlandırdığım bu yazılım Windows 7 ve Windows 8 masaüstünde çalışmakta ve yerel klasörlere erişebildiği için doğrudan SkyDrive klasörüne kayıt yapabilmektedir. Kamera görüntüsü kaydeden yazılımlar genellikle kamera görüntüsünü önce ekrandaki bir "image" nesnesine yansıtmakta ve bu nesne üzerinden kayıt gerçekleştirmektedirler. Bu durum kullanılan API'lere göre değişen çeşitli sorunlara neden olmaktadır. Bazı durumlarda "image" üzerin başka bir pencere geldiğinde "overlay" gerçekleşmekte ve kaydedilen resimde üstteki pencereye ait parça da görünmekte. Bazı durumda da "image" 'ı içeren pencere küçültüldüğünde görüntü alınamamakta. Bu nedenle LifeLoggingCCdesktop'u geliştirirken image kullanmayan bir çözüm aradım ve OpenCV'yi keşfettim. OpenCV'yi .Net ortamında kullanmak amacıyla EMGU.CV wrapper'inı kullandım. Sonuçta LifeLoggingSC şeklinde çalışan bir uygulama ortaya çıktı.



Bu arada LifeLoggingCC yazılımını LifeLoggingCCPhone'da olduğu gibi görüntüleri doğrudan SkyDrive'a "upload" yapacak şekilde yeniden düzenledim. Bu amaçla Live SDK 5.3 kullandım.

 "Capture" Ekranı

"Images" Ekranı

"Upload" Ekranı

4 Nisan'daki http://personalinformationsystems.blogspot.com/2013/04/data-gathering-from-lifelogging-devices.html sayfasında LifeLogging yazılımlarıyla oluşturulan ve SkyDrive'da biriken görüntülerin yerel klasörlere aktarılması amacıyla LifeLoggingTransporter  isimli bir uygulamanın geliştirilmesi gerektiğini belirtmiştim. Geçen süre içerisinde LifeLoggingTransporter programını tamamladım.

Program kullanıcıya üç seçenek sunmaktadır. Bunlardan birincisi LifeLoggingSC ve LifeLoggingCCDesktop uygulamalarının oluşturduğu ve SkyDrive altındaki Resimler\LifeLogging klasörüne kaydettikleri ekran görüntüleri ve kamera görüntülerinin buradan alınarak yerel Resimlerim\LifeLogging klasörüne taşınmasını sağlıyor. İkinci seçenek LifeLoggingCC ve LifeLoggingCCPhone Windows Store uygulamalarının oluşturduğu ve doğrudan SkyDrive'a "upload" yaptıkları kamera görüntülerinin yerel klasörlere taşınmasını sağlamaktadır. Üçüncü seçenek ise giyilebilir yaşam günlüğü kameralarının görüntülerinin yerel klasörlere aktarılması amacıyla rezerv edilmiştir.


 "Seçenekler" Ekranı


"Birinci Aşama" Ekranı


"İkinci Aşama" Ekranı

Taşıma işlemleri iki aşamadan oluşmaktadır. Birinci aşamada SkyDrive klasörlerindeki görüntüler belirlenmekte ve kullanıcıya raporlanmakta, ikinci aşamada ise görüntüler yerel klasöre aktarılarak SkyDrive'dan kaldırılmaktadır.

Bu düzenlemeler sonucunda proje kapsamında ihtiyaç duyulan yazılımların tümü temel işlevlerini yerine getirecek düzeyde geliştirilmiş oldu. Geliştirilen yazılımların genel durumu aşağıdaki tabloda verilmiştir:




Ortamlar
Programlar
 Kullanılan API
Windows 7
Windows 8 Masaüstü
Windows 8 Store
Windows Phone 8
LifeLoggingSC
.Net 4.0
X
X
1
2
LifeLoggingCC
.Net 4.5 & Live SDK 5.3
X
LifeLoggingCCDesktop
.Net 4.0
EMGU SDK (.Net Wrapper for OpenCV)
X
X
3
LifeLoggingCCPhone
.Net Phone 8 SDK & Live SDK 5.3
X
LifeLoggingTransporter
.Net 4.0
X
X
AllMyListsLE
.Net 4.0
X
X
AllMyListsMetro (Tercihe bağlı)
.Net 4.5
X
1 Windows 8 Store uygulamalarının ekran görüntüsü almaları OS düzeyinde engellenmiştir.
2 Windows Phone 8 uygulamalarının ekran görüntüsü almaları OS düzeyinde engellenmiştir.
3 LifeLoggingCCDesktop Windows 8 masaüstünde çalıştırıldıktan sonra Windows Store uygulamalarına geçildiğinde de ekran kaydetmeye devam etmektedir.

Bundan sonraki aşamada AllMyListsLE yazılımına ağırlık verilecektir. Gerçek görüntüler ile denemeler gerçekleştirilecek, yazılıma Öğrenme Deneyimlerini Betimleme Sihirbazı eklenecek, yazılımın öğrenme deneyimlerinin kaydedilmesi, planlanması ve değerlendirilmesi amacıyla kullanımı araştırılacaktır.

LifeLogging yazılımlarında ise çok kameralı bilgisayarlarda kamera seçimi olanağı sağlanacaktır. Görüntülere konum ve IP bilgisi gömülmesi araştırılacaktır. Ayrıca tüm yazılımların görsel yapısı üzerinde çalışılacaktır. Projenin uygulama aşamasına kadar geçecek sürede yazılımların ayrıntılı kurulum ve kullanım testleri gerçekleştirilecek, dokümantasyonu tamamlanacaktır.

4 Nisan 2013 Perşembe

Data Gathering from LifeLogging Devices with the Personal Cloud Storage Services

Yaşamgünlüğü Cihazlarından Bulut Depolama Hizmetleri İle Veri Toplama

"Yaşam Boyu Öğrenme Deneyimlerinin Yönetimi Amacıyla Bir Dijital Yaşam Günlüğü Sisteminin Geliştirilmesi ve Uygulanması" projesinde kullanıcıların yaşamgünlüğü cihazlarını kullanarak gerçekleştirdikleri günlük kayıtlarının  depolanması ve biraraya getirilmesi süreci yavaş yavaş olgunlaşmaya başladı. 

Proje kapsamında kullanıcıların tüm bilgisayarlarından 30 saniyede bir ekran görüntülerinin alınması, cep bilgisayarları ve taşınabilir yaşam günlüğü kameralarıyla da 30 saniyede bir fotoğraf çekilmesi öngörülmüştü. Gelinen aşamada aygıtların görüntüleri Microsoft SkyDrive bulut depolama hizmetini kullanarak biraraya getirmeleri sağlandı. 

Ekran görüntüsü kaydetmek amacıyla kullanılan LifeLoggingSC ve LifeLoggingSCWin7 yazılımları görüntüleri bilgisayardaki SkyDrive klasörü altındaki LifeLogging klasöründe oluşturulan yıl, ay, gün tarihli klasörlerin içerisinde açtıkları kendilerini tanımlayan klasörlere kaydetmektedirler. 

Fotoğraf çekmek amacıyla kullanılan LifeLoggingCCPhone yazılımı ise görüntüleri kullanıcının http://skydrive.live.com sitesine SkyDrive uygulamasını kullanmadan kendisi yüklemektedir. Kullanılan Microsoft Live SDK 5.3 ile kullanıcı SkyDrive'da kendisine ait oturum açabilmektedir. Bu aşamada henüz sadece SkyDrive'in bilinen klasörlerine kayıt yapılabilmektedir. Sorun çözüldüğünde resimler SkyDrive\Resimler\LifeLogging klasörü altında yıl, ay, gün, cihaz klasörleri altına kaydedilecektir.

Windows 8 uygulaması olarak geliştirilen LifeLoggingCC ise şu anda kullanıcının Resimlerim\LifeLogging klasörüne kayıt yapmaktadır, ama bu yazılımın da görüntüleri online olarak SkyDrive sitesine yüklemesi sağlanacaktır. Ayrıca Windows 7 ve 8 altında masaüstü uygulaması olarak çalışacak bir LifeLoggingCCWin7 programı da esneklik sağlayacaktır. "CC" programları şu aşamada sadece bir kamerayı kullanabilmektedirler. Programlara cihazdaki kullanılabilir bütün iç ve dış kameraların arasından seçim yapma olanağı eklenmesi gerekmektedir.

Gerçekleştirilen tasarımın daha genel amaçlı olması amacıyla ekran kaydedici ve kamera görüntüsü kaydedici cihaz sayısında bir kısıtlama yapılmamıştır.  Kullanıcılar bilgisayarlarını ve telefonlarını uygun bir şekilde isimlendirmeleri koşuluyla sınırsız cihaz tanımlayabilirler. Bu aşamada taşınabilir yaşam günlüğü kamerası henüz temin edilmemiş olduğundan dolayı bu aygıtların nasıl isimlendirileceği konusunda bir deneyim bulunmamaktadır.

Diğer taraftan aynı bilgisayarları birden fazla kullanıcının kullanılması durumunda, kullanıcıların birbirlerinden ayırt edilebilmeleri için her kullanıcının bilgisayarı kendisine ait ayrı bir oturumda kullanması gerekmektedir. Şu anda LifeLoggingSC ve LifeLoggingSCWin7 yazılımları cihaz adı ve kullanıcı adına göre kayıt yapmaktadırlar.



Bu yöntemle Memutlu-Fujitsu bilgisayarını kullanan Memutlu kullanıcısının 4 Nisan 2013 tarihine ait ekran görüntüleri
C:\Users\memutlu\SkyDrive\Resimler\LifeLogging\2013\2013.04\2013.04.04\MEMUTLU-FUJITSU-ScreenCapture
klasörüne kaydedilmektedir. SkyDrive uygulaması bu dosyaları kendiliğinden http://skydrive.live.com bulutuna yüklemekte ve kullanıcının SkyDrive uygulaması kurulu olan bütün bilgisayarlarına güncellemektedir. 

Denemelerde kullanmakta olduğum ve kullanmayı planladığım cihazlar için belirlediğim cihaz klasörlerinin isimleri aşağıdaki gibi olacaktır.


LifeLoggingSC & LifeLoggingSCWin7
MEMUTLU-LENOVO-ScreenCapture
MEMUTLU-FUJITSU-ScreenCapture
MEMUTLU-MACBOOK-ScreenCapture
MEMUTLU-HP-ScreenCapture
MEMUTLU-SAMSUNG-ScreenCapture
LifeLoggingCCPhone
MEMUTLU-NOKIA-CameraCapture
LifeLoggingCC & LifeLoggingCCWin7
MEMUTLU-LENOVO-CameraCapture
MEMUTLU-FUJITSU-CameraCapture
MEMUTLU-MACBOOK-CameraCapture
MEMUTLU-HP-CameraCapture
MEMUTLU-SAMSUNG-CameraCapture
            Autographer
                        MEMUTLU-AUTOGRAPH-CameraCapture
            Memoto
                        MEMUTLU-MEMOTO-CameraCapture


Bütün cihazların görüntü göndermek amacıyla bulut kullanmaları önemli miktarda veri trafiğine yol açacaktır. Herhangi bir anda bir cihazın kullanılması ve günde ortalama 16 saat aktif olunması durumunda günlük 1 GB mertebesinde veri aktarımı oluşacaktır. Sistemin optimizasyonunu daha sonraki aşamalarda ele almayı planlıyorum. Bu amaçla akla gelen  iyileştirmelerden birisi belirli bir limit içerisinde aynı içeriğe sahip görüntülerin ayıklanmasıdır. 

AllMyListsLE yazılımında yeni yaşam günlüğü listesi olarak SkyDrive\LifeLogging klasörü tanımlandığında sorunsuz çalışmaktadır. Dolayısıyla sistem, veriler sürekli SkyDrive'da tutularak kullanılabileceği gibi, SkyDrive\LifeLogging klasörünün içeriğini düzenli aralıklarla yerel diske kopyalanarak da kullanılabilir. Bu durumda görüntüler SkyDrive'dan silinerek SkyDrive'ın şu andaki kapasitesi olan 7 GB limiti altında kalınabilir. Veriler sürekli SkyDrive'da tutulacak ise yıllık 100 GB için 50$ ödenerek bu işlem gerçekleştirilebilir. Günümüzde 1 TB kapasitesindeki taşınabilir disklerin fiyatlarının 100$ civarında olduğu düşünülürse SkyDrive'ın sadece aktarım için kullanılması, görüntülerin büyük kapasiteli taşınabilir disklerde tutulması daha çok tercih edilebilir. Bu amaçla LifeLoggingTransporter isimli bir aktarım programı yazılmasında yarar vardır. LifeLoggingTransporter hem giyilebilir yaşam günlüğü kamerasına ait görüntülerin hem SkyDrive'ın kökündeki kamera görüntülerinin hem de SkyDrive'daki ekran görüntülerinin kullanım ortamına aktarımını gerçekleştirebilir. Bu yazılım bağımsız bir yazılım olabileceği gibi AllMyListsLE içerisinde de yeralabilir.

"SC" yazılımlarının Microsoft SkyDrive yerine Google Drive ya da DropBox kullanmalarını sağlamak son derece kolaydır. Bu amaçla yazılımlara bir "ayar" ekleyerek masaüstü Google Drive ya da masaüstü DropBox uygulamalarının klasörlerini kullanmalarını sağlamak yeterli olacaktır. "CC" yazılımlarında ise "online upload" amacıyla Google Drive SDK ve DropBox SDK'larının kullanılması gerekmektedir. Bu nedenle "CC" yazılımlarının GoogleDrive ve DropBox bulutlarına kayıt yapabilmelerini bu proje kapsamının dışında tutuyorum.



21 Mart 2013 Perşembe

LifeLoggingCCPhone - A Windows Phone 8 Based LifeLogging Application

LifeLoggingCCPhone - Windows 8 Tabanlı Bir Yaşamgünlüğü Uygulaması

"Yaşam Boyu Öğrenme Deneyimlerinin Yönetimi Amacıyla Bir Dijital Yaşam Günlüğü Sisteminin Geliştirilmesi ve Uygulanması" isimli projede Windows Phone 8 ortamında çalışan bir yaşamgünlüğü uygulaması tasarlamaya başlamıştım. Sözkonusu uygulama çalıştırıldığında telefonun arka kamerasından 30 saniyede bir görüntü almakta ve bu görüntüleri telefonun yerel Resim Rulosu klasörüne kaydetmekteydi. Elimde bir Windows Phone 8 telefon olmadığından dolayı uygulamayı sadece Emülatör üzerinde test edebiliyordum. 12 Mart 2013 tarihinde proje kapsamında istenen Nokia Lumia 920 cep bilgisayarları geldi. Böylece LifeLoggingCCPhone yazılımını gerçek telefon üzerinde deneyerek geliştirmeye başladım.


Uygulamayı gerçek telefon üzerinde çalıştırabilmem için önce kendime bir Windows Phone Developer Account oluşturdum. Bu amaçla Microsoft’a kredi kartı ile bir yıllık hesap ücreti olarak 180 TL ödeme yaptım. Windows Phone uygulamalarımı aynı anda 3 telefona yükleyebilirim. Kendi telefonumu “Mehmet Emin Mutlu Windows Phone” olarak tanımladım. Daha sonra kendi telefonumu "https://dev.windowsphone.com/en-us/dashboard" sitesinde "remove" yaparak projedeki uygulayıcılara ait olan "Ayşe Peri Mutlu Windows Phone", "Ilker Kayabas Windows Phone" ile "Buket Kip Kayabas Windows Phone" oluşturacağım. Bu amaçla Windows Phone SDK 8.0 altındaki Developer Phone Registration uygulaması kullanıldı.

LifeLoggingCCPhone uygulamasını “Mehmet Emin Mutlu Windows Phone”’a yüklemek için Windows Phone SDK 8.0 altındaki  Windows Phone Application Deployment uygulamasını kullandım. Bu amaçla önce uygulamayı Release klasörüne Build yaptım. Daha sonra Device seçeneği ile Release klasöründeki XAP dosyasını tanıtarak telefona deployment işlemini gerçekleştirdim.

Geliştirme ortamında esneklik sağlandığından dolayı uygulamayı daha fazla geliştirmeye karar verdim. Öncelikle sadece bir sayfadan oluşan uygulama yapısını terkederek Panorama yardımıyla üç sayfalık bir yapıya geçtim. Birinci sayfada resim kaydetme işlemi gerçekleştirilecek, ikinci sayfada kaydedilen görüntüler listelenebilecek, üçüncü sayfada ise kayıtlı resimler kullanıcının SkyDrive sitesine gönderilebilecek.

SkyDrive'a gönderme yapabilmek için Microsoft Live SDK 5.3'ü yükledim. Geliştirilen telefon uygulamalarının SkyDrive'a erişebilmesi için uygulamanın Live Connect Developer Center sitesinde Windows Live ile ilişkilendirilmesi gerekmekte. Windows Phone uygulamaları için http://manage.dev.live.com/ sitesinde bu işlem yapılabilmekte. Windows Store uygulamaları ise önce Windows Store Dev Center Dashboard (https://appdev.microsoft.com/StorePortals/en-us) sitesinde tanıtılmalı, sonra Windows Live ile ilişkilendirilmelidir.

Live SDK 5.3 Windows Phone 8'i desteklemesine rağmen Phone 7.1 için çalışan pek çok API Phone 8'de çalışmamakta. LiveConnectClient'a ait UploadCompleted, GetCompleted gibi "event"'lar kaldırılmış durumda. Bu durumdan dolayı dosyaların SkyDrive'a yükleme işleminin sona ermesini kontrol edemiyorum. Bu sorun gönderilen dosyaları gönderim tamamlandıktan sonra silmemi engelliyor. Gönderilen dosyaların silinmesi işlemi gönderme tamamlandıktan sonra uygulamadan çıkıp tekrar girerek gerçekleştirebiliyorum. Bu sorunu çözmek için uygun örneklerin yayınlanmasını bekleyeceğim.

Bir başka sorun ise SkyDrive'da klasör açabiliyor olmama rağmen, resimleri bu yeni klasör yüklemeyi sağlayamamış olmam. Örneklerin çoğu REST yapısındaki örnekler. "me/skydrive" üzerinde açılmış bir klasöre dosya yüklemeyle ilgili C# ya da VB.Net ile yazılmış bir örneğe rastlamadım. Bu nedenle şu aşamada görüntüleri SkyDrive klasörünün köküne yüklüyorum. İlgili örneklere rastladığımda alt klasöre yükleme özelliğini ekleyeceğim.





Windows Phone uygulamalarının ekran görüntüleri Visual Studio üzerinde Windows Phone Emulator ile alınabilmektedir. Emulatör Windows Phone işletim sistemini büyük ölçüde gerçeğe uygun olarak simule edebilmesine rağmen telefonun device'ları için zayıf destek sunmaktadır. Bu nedenle kamera uygulamalarında kameradan gelen görüntü için yapay bir görüntü oluşturmaktadır. 

LifeloggingCCPhone uygulamasının  Windows Phone üzerinde sürekli çalışması için kilit ekranının zaman aşımı değeri "Asla" yapılması gerekmektedir. Çekim esnasında gelen telefonlar ve diğer bildirimler çekimi engellemememektedir. Çekim esnasında kullanıcı telefon etmeye çalışırsa "Başlangıç" ekranına dönmesi gerektiğinden dolayı uygulama çalışmasını sona erdirecektir. Ayrıca çekim esnasında tuşları kullanarak fotoğraf çekilmek istendiğinde fotoğraf çekimi devreye girmeyecektir.

20 Mart 2013 Çarşamba

Development of LifeLogging Applications - Progress Report

Yaşamgünlüğü Uygulamalarının Geliştirilmesi - Gelişim Raporu

"Yaşam Boyu Öğrenme Deneyimlerinin Yönetimi Amacıyla Bir Dijital Yaşam Günlüğü Sisteminin Geliştirilmesi ve Uygulanması" isimli projeye devam ediyorum. 20 Şubat 2013' tarihinden bu güne geçen bir aylık sürede gerçekleştirdiğim çalışmalar şu şekildedir:

Yaşam günlüğü uygulamalarından elde edilen görüntüleri öğrenme deneyimlerinin yönetimi amacıyla değerlendirmek amacıyla kullanacağım AllMyListsLE yazılımını geliştirmeye devam ettim. Bir cihazdan bir gün içerisinde kaydedilecek görüntü sayısı 2880. Yazılım ekrana aynı anda 200'den fazla görüntüyü yüklemekte zorlanıyor. Sorunun kaynağı kullanılan StackPanel'de Virtualizing yapılamaması. Bu sorunu aşmak amacıyla bir saat çubuğu oluşturdum ve görüntülerin birer saatlik dilimler halinde yüklenmesini sağladım. Kullanıcı saat çubuğunda ayrıca o güne ait saat dilimlerinde kaç görüntü bulunduğunu da görebilmekte. 

Bu çubukta aynı zamanda görüntülerin "Döşeme" ya da "Liste" şeklinde olmasını sağlayan düğmeler de bulunmakta. Liste şeklindeki görüntülemede görüntüler yatay bir taşıyıcıda sıralanmakta ve seçilen resmin büyütülmüş hali altta görüntülenmekte. Döşeme şeklindeki görüntülemede görüntüler ekrana ızgara şeklinde yerleştirilmekte, kullanıcı çift tıkladığı resmi bir pop-up pencerede büyük boyda görüntüleyebilmekte.


Kullanıcı görüntüler üzerinde seçim gerçekleştirerek bu seçimle ilişkili kayıt oluşturabilmekte  ya da seçili görüntüleri seçili bir kayıtla ilişkilendirebilmekte. Böylece küçük zaman dilimlerine yönelik kayıt girişi daha anlaşılır hale geldi.

Saat bazında görüntülemenin yanısıra 6 dakikada bir görüntü olmak üzere tüm güne ait görüntülerin listelenmesi sağlandı.



AllMyListsLE yazılımı aynı zamanda genel amaçlı bir liste yönetimi aracı olduğundan dolayı yeni liste oluşturulurken kolayca "LifeLog" ya da "MyList" türü liste oluşturulmasına olanak sağlandı.Böylece kullanıcılar yaşam günlüğü  listeleri (LifeLog) ve kullanıcı tarafından oluşturulan listeler (MyList) olmak üzere iki farklı yapıdaki listeleri yönetebileceklerdir.

Yazılım geliştirmeye paralel olarak informel öğrenme deneyimlerinin yönetimi amacıyla  bir uygulama yaklaşımı geliştirmeye başladım. Bu amaçla öğrenme deneyimlerinin betimlenmesini sağlayacak bir sihirbaz (Wizard) tasarımı üzerinde çalışmaya başladım. Bu çalışmaları "Yaşam Deneyimlerini Kaydetme ve Öğrenme Deneyimlerini Betimleme Süreci" isimli bir belgede topladım. Uygulama sürecine ait taslak çalışmaya http://kisiselogrenmeortamlari.blogspot.com/2013/03/the-process-of-learning-experiences.html sayfasından erişilebilir.

Uygulama sürecinin zaman boyutuna göre yapısı aşağıdaki gibi verilebilir:

Yaşam Deneyimlerini Kaydetme ve Öğrenme Deneyimlerini Betimleme Süreci
  1. LifeLoggingCC, LifeLoggingCCPhone, LifeLoggingSC ve giyilebilir lifelogging kameralarla 30 saniyede bir sürekli olarak kamera görüntüsü ve ekran görüntüsü yakala ve çalışma bilgisayarına senkronize et (Eş zamanlı)
  2. AllMyListsLE yazılımında bir LifeLog listesi ile günlük görüntüleri tara ve günlük eylemleri detaylı olarak kaydet (Birkaç gündebir) (Bu işlem bir görüntü düzeyinden başlayarak birden fazla görüntü, bir saat, birden fazla saat, bir gün, bir ay, bir yıl düzeylerinde olabilmektedir. (Birden fazla gün, birden fazla ay ve birden fazla yıl seçimi bulunmamaktadır. Bu zaman aralıkları için gün, ay ve yıl düğümlerine kayıt ekleyerek bilgi girişi yapılabilir.)
  3. Günlük kayıtları tarayarak yerler, kişiler, olaylar, varlıklar, duygular, özellikler ve davranışlara ait bilgileri ilgili MyList listelerine gir. (En geç haftada bir)
  4. LifeLog listeleri ile yaşam deneyimlerinden günlük öğrenme deneyimlerini sihirbaz yardımıyla çıkart ve geçmiş, güncel ve geleceğe ait kayıtlar oluştur. (Birkaç günde bir)
  5. Günlük kayıtları tarayarak yaşam boyu öğrenme projesine ait MyList listesinde geçmiş, güncel ve gelecekle ilgili başlıklara işlenmiş kayıtları gir. (En geç haftada bir)
  6. Yaşam boyu öğrenme projesine ait MyList listesini kullanarak geleceği planla ve geçmişi değerlendir (Haftalık, aylık, dönemlik, yıllık)
Her iki liste türü AllMyListsLE yazılımı kullanarak yönetilebileceği gibi, LifeLog için AllMyListsLE yazılımı, MyList listeleri için ise AllMyListsMetro yazılımı ayrı ayrı kullanılabilir.

Geliştirilen yazılımlarla burada açıklanan süreci şu anda gerçekleştirmek mümkün olabilmekte. Projenin bundan sonraki aşamasında günlük görüntü kaydedilmesinin ve görüntülere ait veri akışının daha esnek olması, AllMyListsLE yazılımının daha kullanıcı dostu hale getirilmesi gibi işlemler geliştirmeler yapılacaktır. Tüm kodların gözden geçirilmesi, açıklamalarının  oluşturulması, sınıf diyagramlarının çıkartılması, sınıfların, alanların, özelliklerin, yöntemlerin ve olayların standartlaştırılması gibi yazılım mühendisliği işlemleri gerçekleştirilecektir. Diğer taraftan LifeLog uygulamaları ile AllMyListsLE yazılımının paketlenmesi, dağıtımı, temin edilmesi, kurulması, birbiriyle bütünleştirilebilmesi, veri güvenliğinin sağlanması, yazılımların kaldırılabilmesi, ve dokümantasyon gibi süreçler de ele alınacaktır. Yazılımların ortak bir grafik kimliğine kavuşturulması, kullanıcı arayüzlerinin bir örnek hale getirilmesi, yerelleştirme ve küreselleştirme özelliklerinin gözden geçirilmesi, hakkında ve yardım içeriklerinin oluşturulması, projeye ait bilgi verilmesi gibi detaylar da zaman alacaktır.

12 Mart 2013 tarihinde proje kapsamında istenen Nokia Lumia 920 cep bilgisayarları geldi. Bu tarihten sonra daha önceleri Visual Studio içerisinde emülatör kullanarak yazdığım LifeLoggingCCPhone yazılımını gerçek telefon üzerinde deneyerek geliştirmeye başladım.

20 Şubat 2013 Çarşamba

"Development and Implementation of A Digital Lifelogging System for Management of Lifelong Learning Experiences" Project

"Yaşam Boyu Öğrenme Deneyimlerinin Yönetimi Amacıyla Bir Dijital Yaşam Günlüğü Sisteminin Geliştirilmesi ve Uygulanması" Projesi

Önermiş olduğum "Yaşam Boyu Öğrenme Deneyimlerinin Yönetimi Amacıyla Bir Dijital Yaşam Günlüğü Sisteminin Geliştirilmesi ve Uygulanması" projesi 15 Şubat 2013 tarihinde Anadolu Üniversitesi Bilimsel Araştırma Projesi (Proje No:1301E014) olarak kabuıl edildi.

Projede Şubat ayı içerisinde LifeLoggingSC, LifeLoggingCC ve LifeLoggingCCPhone yazılımları ile elde edilen görüntülerin değerlendirilmesi amacıyla kullanılacak olan LifeLoggingLE yazılımını geliştirmeye devam ettim. 20 Ocak 2013 tarihinde http://personalinformationsystems.blogspot.com/2013/01/management-of-learning-experiences-with.html yayınında yayınlamış olduğum tasarımda önemli değişikler gerçekleştirdim.


İlk tasarımda görüntülerin bulunduğu klasörlere erişen ve bu klasörlerdeki görüntüleri ekranda görüntüleyen bir program geliştirmeye başlamıştım. Bu program verilen bir tarihe ait klasörlere erişerek bu klasörlerdeki görüntüleri listeleyebiliyordu. İkinci aşamada bu görüntülere kullancıların bilgi girmesini sağlamak amacıyla bir veri tabanı tasarlamaya başladım. Bu noktada kullanıcıya sınırsız esneklik sağlamak amacıyla daha önce geliştirmiş olduğum AlMyListsWPFMVVM yazılımını kullanmaya karar verdim. Bu yazılım 2011 yılında geliştirmiş olduğum AllMyListsWPF yazılımının üzerinde MVVM mimarisi denemeleri yaptığım tamamlanmamış bir sürümüydü (https://meminmutlu.wordpress.com/personalis/pim-projects/). 

Bu yazılımda bir ağaç yapısını kullanarak, ağacın herhangi bir düğümü için sınırsız kayıt oluşturmak ve her kayıt için basit bir metin editörü ile açık uçlu bilgi girmek mümkün oluyordu. Bu programda ağaç yapısına yaşam günlüğü görüntülerinin bulunduğu klasör yapısını yükleyerek, kullanıcının seçtiği bir güne ait görüntüleri programda inceleyebilmesi ve o güne ait yorum, düşünce, not, değerlendirme vb. bilgilerini sınırsız kayıtlar halinde girmesi mümkün olabilecekti. 

Bu amaçla 2011 yılında Visual Studio 2010 ile geliştirmiş olduğum AllMyListsWPFMVVM yazılımını VS 2012’ye dönüştürdüm. Bu yükseltme işlemi esnasında yazılımın kullandığı SQL CE 3.5 sürümlü SDF dosyası da SQL CE 4.0’a dönüştü.

Yeni tasarımda LifeLoggingSC, LifeLoggingCC ve LifeLoggingCCPhone yazılımdlarında gelen görüntülerin biraraya getirildiği klasör yapsı değiştirildi. Eski yapıda 
...\LifeLogging\<Bilgisayar Adı1>\2013.01.17\ScreenCapture
...\LifeLogging\<Bilgisayar Adı1>\2013.01.17\CameraCapture
...
...\LifeLogging\<Bilgisayar AdıN>\2013.01.17\ScreenCapture
...\LifeLogging\<Bilgisayar AdıN>\2013.01.17\CameraCapture
şeklinde olan klasör yapısı yeni yapıda yıllar, aylar ve günlere ait alt klasörlerden oluşan 

…\LifeLogging\
2012
2013.12
2013.12.20
MEMUTLU-CameraCapture\
MEMUTLU-ScreenCapture\
Giyilebilir Lifelogging Camera\
...

şekline dönüştürüldü. Böylece görüntülere ait klasör yapısı herhangi bir ek dönüştürme yapmadan programın ağaç nesnesine kolayca aktarılabilmektedir. 

Programa Ocak ayında yaptığım denemelerde yazdığım klasör görüntüleme kodlarını ekledim.  Klasör içeriği "Liste" şeklinde ya da "Döşeme" şeklinde olabilmekte.

Diğer taraftan kişisel bilgi yönetimi aracı olan AllMyListsWPFMVVM yazılımının bu niteliğini değiştirmeden korumaya karar verdim. Yazılım yeni düzenlemelerle kişisel bilgi yönetimi aracı olmanın yanısıra bir yaşam günlüğü aracı haline de gelmiş olacak. Kullanıcılar kişisel bilgi yönetimi türü projeleri kullanabilirken, aynı zamanda yaşam günlüğü projelerini de sürdürebileceklerdir.

Yazılımın bu yeni sürümünün adını AllMyListsLE olarak değiştirdim. Zaten Aralık 2012'de proje önerisinde bulunurken geliştirilecek yazılımın adını da AllMyListsLE olarak belirlemiştim.

AllMyListsLe yazılımının yaşam günlüğü uygulaması olarak kullanıldığı durumdaki yapısına ait ekran görüntüsü aşağıdaki görüntüye benzeyecektir. "Öğrenme Deneyimlerinin Yönetimi" amacıyla kullanılabilmesi için bir yaklaşım geliştirildiğinde yazılımın ekran görüntüsü farklılaşabilecektir.


Resim 1. AllMyListsLE yazılımının yaşam günlüğü amacıyla kullanıldığı durumda "Döşeme" yapısındaki görünümü. 

29 Ocak 2013 Salı

Management of Learning Experiences with Lifelogging

Yaşam Günlüğü ile Öğrenme Deneyimlerinin Yönetimi

Ocak ayı içerisinde LifeLoggingSC, LifeLoggingCC ve LifeLoggingCCPhone yazılımlarını geliştirmeye devam ederken bir yandan da bu yazılımlarla elde edilen görüntülerin değerlendirildiği LifeLoggingLE yazılımını da tasarlamaya başladım.

LifeLoggingLe yazılımı kullanıcının kamera görüntüsü ve ekran görüntülerine ait kayıtlardan yararlanarak yaşamış olduğu öğrenme deneyimlerine ait etkinlik, olay ve öykülere ait not, yorum ve gözlemlerini girmesine ve daha sonra bunları inceleyerek değerlendirebilmesine  olanak sağlayan bir yazılımdır. 

Ekran ve kamera görüntüleri kullanıcının yaşadığı öğrenme deneyimlerine ilişkin birer hatırlatıcı (hatırlamayı destekleyici) öğelerdir. Bu görüntüler  etkinlik, olay ve öykülere ait birer içerik (content) olmayıp, etkinlik, olay ve öykülere ait birer bağlam (context) durumundadırlar.

Veritabanı seçimi

Daha önceleri Windows Phone 7.1 için yazdığım AllMyListsPhone programında LINQ to SQL kullanmıştım. Bu nedenle LifeLoggingLE için de .NET 4.5 üzerinde SQL LocalDB ve LINQ to SQL kullanmayı planladım. Ama daha sonra SQL Local DB için SQL Server Express kurulması gerektiği, bu yazılımın da120 MB olduğu ortaya çıktı. Kolay taşınabilirlik için SQL CE 4.0 kullanmaya karar verdim. SQL CE 4.0 64 bit için hem geliştirici hem de kullanıcı için en fazla 2.5 MB büyüklüğünde bir yükleme gerektiriyor. Fakat incelemelerim sonucunda SQL CE 4.0 üzerinde LINQ to SQL kullanılamadığı ortaya çıktı. En son SQL CE 3.5 SP2'de bu özelliğin olduğunu (AllMyListsPhone'da bunu kullanmıştım) ve SQL CE 4.0'a taşınmadığını belirledim. Sonuç olarak LifeLoggingLE yazılımını WPF 4.5 üzerinde ve SQL CE 4.0 veritabanını geleneksel System.Data.SqlServerCE API'si kullanarak yazmaya başladım. 

Bu konuda http://erikej.blogspot.com/2011/01/comparison-of-sql-server-compact-4-and.htmlhttp://erikej.blogspot.com/2012/04/using-linq-to-sql-with-sql-server.html ve http://blogs.msdn.com/b/jerrynixon/archive/2012/02/26/sql-express-v-localdb-v-sql-compact-edition.aspx kaynaklarına başvurulabilir.

SQL CE 4.0 ortamında LINQ to SQL kullanmak için SQL Server Compact Toolbox isimli bir Extension bulunmakta  http://visualstudiogallery.msdn.microsoft.com/0e313dfd-be80-4afb-b5e9-6e74d369f7a1. Bunları kullanmak yerine Microsoft'un bir çözüm geliştirmesini bekleyeceğim.

Ekran tasarımı

Programda üst panelde "Capture" klasörlerinden gelen görüntülere ait bant bulunacak, ortada seçili görüntünün büyük görüntüsüne yer verilecek, alt bantta ise seçili resim(lere) yönelik olarak veritabanına girilecek yorumlar için bir bant bulunacaktır. En altta ise bir zaman çizgisi şeklinde yıl-ay-gün bilgisinin seçilebildiği bir takvime yer verilecektir. LifeLoggingLE programında klasörlerden görüntüleri alarak bir bant şeklinde görüntülemek amacıyla Microsoft PhotoStore Sample'dan yararlandım (http://code.msdn.microsoft.com/windowsdesktop/Photo-Store-Demo-2777188e). 



Yaşam günlüğü görüntüsü yakalama yazılımlarından elde edilen görüntüler, bu yazılımların çalıştığı bilgisayarda bu amaç için belirlenmiş bir klasörün altında aşağıdaki alt klasörler şeklinde gün bazında biriktirilecektir (Windows Phone 8'de görüntüler henüz CameraRoll'da saklanmakta, tablet ve masaüstünde çalışan Windows 8 için bu özellik hazır) :


\LifeLogging\<Bilgisayar Adı>\2013.01.17\ScreenCapture
\LifeLogging\<Bilgisayar Adı>\2013.01.17\CameraCapture

LifeloggingLE yazılımı şu andaki aşamada bu klasörler arasında takvimde seçilen bir güne ait olan klasördeki  görüntüleri ekrana yükleyebilmekte ve kullanıcının bu görüntüler üzerinde veri panelindeki hücrelerle senkronize bir biçimde gezinmesine olanak sağlamaktadır. Kullanıcı ayarlardan ScreenCapture ya da CameraCapture seçimi yapabilmektedir. 

İzleyen aşamalarda veri girişi, çoklu görüntü seçimi ve bu seçime yönelik veri girişi gibi özellikler eklenecektir. Veri panelinde Kayıt (log), Etkinlik (Activity), Olay (Episode) ve Öykü (Story) gibi değişik düzeyde temel verilerin girilebilmesine olanak sağlanacaktır. Bunların dışında kullanıcıya ayrıca öğrenme deneyimlerine ait bilgileri girebileceği bir veri katmanı da sunulacaktır. 

Öğrenme deneyimlerinin yönetimi için yararlandığım kuramsal altyapıya ait yayınları kisiselogrenmeortamlari.blogspot.com'da yayınlayacağım. LifeLoggingLE programının sadece öğrenme deneyimlerinin yönetimi için değil, kişisel bilgi yönetimi için de geliştirilmesi mümkündür. Bu yöndeki düşüncelerimi bu blogta yayınlamaya devam edeceğim.

Görüntü verilerini birleştirme

Projede telefon, tablet ve masaüstü bilgisayarlarda elde edilen kamera ve ekran görüntülerinin bir ana bilgisayarda bir araya getirilmesi ve görüntülerin bu bilgisayarda çalışan LifeLoggingLE yazılımı ile değerlendirilmesi öngörülmektedir.

Görüntülerin diğer aygıtlardan ana bilgisayara aktarılması amacıyla bulut depolama yaklaşımı uygulanabilir mi? Bulut çözümü için aşağıdaki senaryoyu geliştirdim. 

  • Microsoft Skydrive, Google Drive ve Dropbox’da Selective Sync özelliği bulunmakta.
  • Client bilgisayarlarda (Tablet, Phone, İş bilgisayarı) “Bu bilgisayara yalnızca bazı klasörleri senkronize et” seçeneğinde sadece client bilgisayardaki \LifeLogging\ klasörü  seçilecek. 
  • Ana bilgisayarda ise tüm client bilgisayarların klasör isimleri seçilecek. Böylece dosyalar client bilgisayardan buluta, buluttan da ana bilgisayara doğru akacak. 
  • Ana bilgisayardan client bilgisayar klasörlerine herhangi bir dosya yazma/silme işlemi yapılmayacağı için veri akışı sadece client bilgisayarlardan buluta, buluttan da ana bilgisayara doğru olacak. Tersi yönde bir veri akışı oluşmayacak. 
  • LifeLoggingLE yazılımının veri dosyası ana bilgisayarda tutulacak ve bu bilgisayardaki görüntü klasörlerine erişilecek. 
  • Ana bilgisayarda aşağıdaki gibi bir klasör yapısı ortaya çıkacaktır.
...\LifeLogging\<Bilgisayar Adı1>\2013.01.17\ScreenCapture
...\LifeLogging\<Bilgisayar Adı1>\2013.01.17\CameraCapture
...
...\LifeLogging\<Bilgisayar AdıN>\2013.01.17\ScreenCapture
...\LifeLogging\<Bilgisayar AdıN>\2013.01.17\CameraCapture
  • Kullanıcının zaman çizgisi boyunca herhangi bir anda sadece bir aygıtı kullandığı varsayılacaktır. Böylece herhangi bir anda sadece bir aygıt üzerinde ekran ya da kamera görüntüsü elde edilecektir. Diğer bir deyişle yukarıdaki klasörlerin çoğu günlük deneyimde oluşturulmayacaktır. Ya da bir klasörde çok sayıda dosya varken diğer klasörlerde az sayıda dosya bulunacaktır.
  • Kullanıcı LifeLoggingLE yazılımı ile sadece ekran görüntüsü - kamera görüntüsü klasörü ve tarih seçimi değil aynı zamanda blgisayar seçimi de yapmak zorundadır.
  • Bu yaklaşım ile aktarılacak dosya sayısı, toplam depolama alanı büyüklüğü ve depolama maliyeti hesaplamaları yapılmalıdır.

Bu senaryonun uygulanabilirliği test etmek amacıyla çalışmalar yapacağım.