29 Aralık 2009 Salı

Reklamlar

Önemli bir haber kanalımızda, önemli bir konu üzerine, önemli insanların konuştuğu, tartıştığı konunun önemli noktasında sunucu araya girer ve "kısa bir reklam arasından sonra kaldığımız yerden devam edeceğiz" der.

Aklıma hemen şöyle bir sahne geldi: Önemli bir çatışma içerisindesin düşman ile karşı karşıyasın ve araya birisi girip "durun bir dakika reklamlardan sonra savaşa devam ederiz" gibi bir durum gözümün önünde canlandı.

Bu kadar önemli bir konuya verdiğiniz değer ve hassasiyetiniz sizin işte bu kadar; "İki reklam arası"...

18 Ağustos 2009 Salı

Görünmezlik Pelerini

Bilkent Üniversitesi Nanoteknoloji Araştırma Merkezi (NANOTAM) araştırmacıları, cisimleri belli frekanslarda görünmez kılan nanoteknoloji tabanlı malzeme geliştirdi.

Gururlandırıcı bir haber...


video

Ben burada bir tanesini paylaştım
Bu haber ile ilgili bir kaç video aşağıdaki linklerde mevcuttur.

Özellikle Bilkent Üniversitesi'nin sitesindeki Şubat 2009'da hazırlanmış videoda
Türkiye'nin tek Descartes bilim ödülü sahibi olan Bilkent Üniversitesi NANOTAM Başkanı Prof. Dr. Ekmel Özbay'ın anlattıklarını izleyin.

http://podcast.bilkent.edu.tr/?p=episode&name=2009-02-04_gorunmezlik_pelerini.mp4

http://www.aa.com.tr/tr/arastirmacilardan-gorunmezlik-pelerini.html

http://www.trt.net.tr/Haber/HaberDetay.aspx?HaberKodu=6148e2a1-f0db-465a-b487-ab72d2292b5c

26 Haziran 2009 Cuma

Sharepoint Recycle Bin

Sharepoint üzerinde recycle bin ayarlarını
Central Administration > Application Management > Web Application General Settings sayfasının en altında yer alan kısımda seçili olan web applicationımız için yapabiliyoruz.

tercih edilmese de kapalı konuma getirerek silinen öğelerin recycle bin’e değil de tamamen silinmesini sağlayabiliriz :)



resimde de görüldüğü üzere default ayarlar bu şekilde.Bunu ister web application ayarlarında, ister Timer Job yazarak her gece, recycle bin içerisindeki tüm dosyaları silebiliriz.Aşağıda nasıl silineceği ile ilgili örnek kod mevcuttur.


Yukarıdaki kodda SPSite ile yaptığımız için root ve subsite'lar altındaki tüm recycle bin öğelerini getirmekte bize.

ilk foreachden önce tüm öğeleri silmekteyiz.
ilk foreachde öğeleri iki farklı şekilde tek tek silmekteyiz.
ikinci foreachde ise yalnızca ListItem'ları silmekteyiz ki neleri silmek istediğimizi bunun gibi özelleştirebiliriz.

23 Haziran 2009 Salı

Application ve w3wp.exe eşleştirmesi

Production ortamında yalnızca tek application kurarız ancak test ortamımızda birden fazla application oluşturur ve çalışmalarımızı bu applicationlar üzerinde yaparız.
Applicationlarımızın task manager'da hangi w3wp.exe'ye karşılık geldiğini bilemeyiz.

Ancak aşağıdaki adımları uyguladıktan sonra Process ID ile IIS üzerinde Application Pool IDlerin eşleşmelerini sağlayarak w3wp uygulamalarının bizim applicationlarımızın hangisi ile eşleştiğini öğrenebiliriz.

Ben 3 adet application açtım (browser internet explorer veya firefox fark etmiyor)

1. Task Manager -> View -> Select Columns...

2. PID (Process Identifier) seçiyoruz ve Ok diyoruz.



Task Manager böyle gözükmekte.



4. Command Prompt açıyoruz.

5. Command Prompt’a yapıştırıyoruz.

%systemroot%\system32\cscript.exe %systemroot%\system32\iisapp.vbs

Birde Central Administration açarak scriptleri çalıştırıyorum.Ekran görüntüsü aşağıda yer almakta.


Command Prompt ile çalışmam olacağı zaman genelde .bat dosyası oluşturarak bir klasörde tutuyorum ve script çalıştırmam gerektiği zaman ilgili klasöre gidip bat dosyası çift tık ile scriptleri çalıştırmayı tercih ediyorum.

12 Mayıs 2009 Salı

SharePoint Server 2010 Sistem Gereksinimleri

SharePoint Server 2010'u beklediğimiz şu günlerde önemli gelişmeler oldu.
2 hafta önce "Service Pack 2 for Office SharePoint Server 2007 and Windows SharePoint Services 3.0" duyurulmuştu.

Ondan önce ise Nisan ayının başlarında Sharepoint Designer ücretsiz indirip kullanılabilir hale getirilmişti.

Ayrıca Sharepoint sitelerimizi Visual Studio 2010 ile beraber düzenleyebilir hale gelececeğimiz, gelecek yeniliklerden birisi olarak konuşulmakta.

İşte bugün bir madde daha eklendi: SharePoint Server 2010 için sistem gereksinimleri
  • SharePoint Server 2010 yalnızca 64-bit olacak.
  • 64-bit Windows Server 2008 veya 64-bit Windows Server 2008 R2
  • 64-bit SQL Server 2008 veya 64-bit SQL Server 2005


benim gibi 32-bit ile yoluna devam edenler için gelsin : 64-bit dünyasına hoşgeldiniz :)

kaynak : MS SP Team Blog

23 Nisan 2009 Perşembe

Kelebek ve Knowing

"Derler ki…
Burada bir kelebek kanat çırpsa, Atlantik’te fırtınaya sebep olabilir…
İşte biz, her birimiz tıpkı o kelebek gibiyiz; fakat bir farkla…
Bizim kelebeğimiz fırtınaya sebep olmaz!
O, kanatlarını açar fırtınaya karşı koyar…"

İlginç olduğunu düşündüğüm ve merak ettiğim 1 Mayıs'da vizyona girecek Kelebek filmi için şimdiden geri sayıma geçtim.

Yukarıda ki paragraf; filmde Mesnevi Dede'nin söylediği bir sözdür.

Bu hafta sonu ise fragmanını izlediğim ve beni etkileyen Nicolas Cage'in oynadığı Knowing filmine gitmeyi düşünüyorum.

30 Mart 2009 Pazartesi

401 Unauthorized

sharepoint web servislerine bağlanış şeklimi "Sharepoint Web Service ile kullanıcı profil bilgilerini okuma" başlığı altındaki yazımda


MyUserProfileWebService.UserProfileService myUserService = new
MyUserProfileWebService.UserProfileService();
myUserService.Credentials = System.Net.CredentialCache.DefaultCredentials;

şekilde göstermiştim.

Bu noktada bağlanmaya çalıştığımda 401 Unauthorized hatası aldım.
Aynı hatayı ilgili siteme "u2u caml query builder" da "Connect via SharePoint Web Services" şeklinde bağlanmaya çalıştığımda da almaktaydım bu sebeple yalnızca "Connect via Object Model" ile bağlantı kurup CAML sorgularımı oluşturabiliyordum.

Çözüm için yaptıklarım :

- web.config'de <identity impersonate="true"/>
- myUserService.Credentials = new NetworkCredential("userName", "password", "domain");
admin hakkına sahip kullanıcı belirttim.

Fakat hala hata almaktaydım.
Araştırmalarım ve soruşturmalarım bir netice vermiyor ve tüm denemelerimde 401 hatasını aşamıyordum.
Biraz dinlenip bi çay içdikten sonra son çabalarımda bir çıkış yolu bulmuştum.

- Start -> Run regedit yaz ve OK.
- Aşağıdaki anahtara gittim.
- HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0
- MSV1_0'e sağ tık -> New -> Multi-String Value.
- BackConnectionHostNames olarak isim verdikten sonra ENTER diyoruz.
- BackConnectionHostNames'e sağ tık -> Modify tıklıyoruz.
- webservisiyle bağlanmaya çalıştığım domaini yazdım.(Blue ve http://Blue)

domain adlarım renklerden oluşmakta :)

uygulayıp Server2003 kurulu makinemi yeniden başlattım ve 401 Unauthorized sorunu ortadan kalkmış web servisine bağlanabilmiştim.

25 Mart 2009 Çarşamba

Teknoloji ve Çevre

Bugün sizlerle 3 tane haber paylaşmak istemekteyim.
  • Haberlerde izlediğim "robot balık" yüzümde tebessüme neden oldu.
    Üzerindeki kimyasal alıcılar ile suyun kirlilik oranını ölçen ve oran yüksek çıktığı zamanda kablosuz bağlantı ile bulunduğu noktayı merkeze haber vermesiyle o bölgenin temizlenmesiyle robot balığımız çevreye katkı sağlamakta.
    1 tanesi için yaklaşık 50.000 lira harcanan bu balıklardan şu an sadece 5 adet bulunmakta.Eğer testlerde istenilen sonuçlar alınırsa seri üretime geçileceği bildirildi.


  • 28 Mart 2009 Cumartesi 20:30 da 1 saat süre ile ışıklarımızı söndürüyoruz.
    Neden söndüreceğiz peki?
    Cevabı basit: iklim değişikliği ile ilgili "Earth Hour" (Dünya Saati) eylemine katkı.





  • Bir diğer haber de;
    Akçokoca'da deniz dalgalarından elektirik üretimine başlamışız.
    Günaydın ve hayırlı olsun derim.Temiz ve sessiz bir elektrik üretimi.
    Şu an günde, bir evin bir günlük elektrik ihtiyacı kadar elektrik üretimi var.En azından güzel bir başlangıç oldu.


Bu haberleri neden sizlerle paylaştım?
Daha önce Enerji etiketiyle göreceğiniz üzere enerji ile ilgili yazılar yazmıştım.
Bu yazımda onlardan biri olmakla birlikte teknolojiden de faydalanıldığı ve bizim de buna ayak uydurmamız gerektiğine inancım olduğu için.

ilk haberi incelersek : robot, bir balık gibi deniz içerisinde gezinmekte.Üzerindeki kimyasal alıcılar ile bulunduğu suyu ölçmekte ve merkeze haber vermekte.
Ayrıca şarjı azaldığında bitmesine yakın kendisine en yakın adaptöre gidip kendini şarj edebilmekte.
Bu proje Avrupa Birliği tarafından da desteklenmekte ve oradaki fonlar ile yapıldığı söylenmişti haberde. Bu proje için ister AB fon desteğiyle ister özel bir firma desteği ile yapılsın bir önemi yok.
Önemli olan neden bizler güzel bir proje ortaya sunup, buna destek aramıyoruz.Görüyoruz ki yapmak istedikten sonra AB fonları gibi fonlar bizleri beklemekte :)

ikinci haber için fazla diyecek birşey yok maksat insanları uyandırmak ve dikkat çekmek.

üçüncü haberi incelersek : kullanılan aletler tamamen Türk yapımı olması bizi gururlandıran nokta.

20 Mart 2009 Cuma

Sharepoint Web Service ile kullanıcı profil bilgilerini okuma


aşağıdaki kod blogu ile sharepoint web servislerini kullanarak
kullanıcı profil bilgilerine erişebilmekteyiz.


Sharepoint Web Service'lerinden http://DomainAdı/_vti_bin/userprofileservice.asmx referans olarak eklememiz gerekmekte.





private string UserProfile(string pAccountName, string pFieldName)
{
string FieldValue = null;
MyUserProfileWebService.PropertyData[] userProps = null;
MyUserProfileWebService.UserProfileService myUserService = new MyUserProfileWebService.UserProfileService();
myUserService.Credentials = System.Net.CredentialCache.DefaultCredentials;

try
{
userProps = myUserService.GetUserProfileByName(pAccountName);
if (userProps != null || userProps.Length > 0)
{
for (int i = 0; i < userProps.Length; i++)
{
MyUserProfileWebService.ValueData[] values = userProps[i].Values;

if (userProps[i].Name == pFieldName)
{
if (values.Length > 0)
{
FieldValue = values[0].Value.ToString();
}
}
}
}
}
catch (Exception ex)
{
// exception anında yapılacak işlemler yapılır.
}

return FieldValue;
}


yukarıdaki kodla anonim kullanıcıyla da kullanıcı profil bilgilerine erişim sağlamış oluyoruz.

19 Mart 2009 Perşembe

anonymous user ile kullanıcı profil bilgilerini okuma


Bir önceki yazımda "web partları anonim erişime uygun şekilde geliştirmeliyiz" demiştim.
Böyle dememin nedeni: Geliştirdiğimiz web partlardaki login olmamış kullanıcıların görmemesi gereken alanları göstermemektir ki
bunu da Context.User.Identity.IsAuthenticated ile kontrol edebiliriz.

Ayrıca eğer WebPartınızda kullanıcı profil sayfasına erişim varsa anonim kullanıcı ile erişmeye çalıştığınızda hata ile karşılacaksınız.

Hata ile karşılaşmayarak kullanıcı profilinden veri okumak
istediğimizde object model ve Sharepoint WebServiceleri karşımıza çıkmakta.

Burada hangisini kullanacağınız size kalmış bir durumdur.Altı çizilmesi gereken bir durum var ki o da web servislerinin daha hızlı olduğu ve tavsiye edildiğidir.

Object Model ile kullanıcı bilgilerine erişmek



private string GetUserProfileFieldValue(string pName, string pFieldName)
{
HttpContext currentContext = HttpContext.Current;
string FieldValue = null;

try
{
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite site = new SPSite(SPContext.Current.Site.ID))
{
using (SPWeb web = site.OpenWeb("/"))
{
ServerContext context = ServerContext.GetContext(site);
HttpContext.Current = null;
UserProfileManager profileManager = new UserProfileManager(context);
string[] n = pName.Split(';');
SPUser user = web.AllUsers.GetByID(Convert.ToInt32(n[0].ToString()));
UserProfile userProfile = profileManager.GetUserProfile(user.LoginName);
if (userProfile != null)
{
FieldValue = userProfile[pFieldName].Value.ToString();
}
}
}
});
}
catch (Exception ex)
{
// exception anında yapılacak işlemler yapılır.
}
HttpContext.Current = currentContext;
return FieldValue;
}


Yukarıdaki kod bölümü ile anonim kullanıcı ile profil bilgilerine ulaşabilmekteyiz.
Gelin satır satır kodumuzu inceleyelim.



private string GetUserProfileFieldValue(string pName, string pFieldName)
{
// o anki current context'i tanımladığımız context'e atıyoruz.
HttpContext currentContext = HttpContext.Current;

// geri donecek değerin tutulacağı değişkenimiz.
string FieldValue = null;

try
{
// Full Control sağlamak içib RunWithElevatedPrivileges kullandık.
// Bakınız
SPSecurity.RunWithElevatedPrivileges(delegate()
{
// current sitemızı Id ile kullanıma alıyoruz.
using (SPSite site = new SPSite(SPContext.Current.Site.ID))// Microsoft.Sharepoint.dll
{
// root webe erişiyoruz.
using (SPWeb web = site.OpenWeb("/"))
{
// kullanıcı profilinden veri okuyabilmemiz için gerekmekte.
// Microsoft.Office.Server.dll referans edilmelidir.
// C:\Program Files\Common Files\microsoft shared\web server extensions\12\ISAPI klasöründe bulabilirsiniz.
ServerContext context = ServerContext.GetContext(site);

// contextimizi null'a çekiyoruz.
HttpContext.Current = null;

// sitemize ait olan kullanıcı profiline erişim sağlıyoruz.
UserProfileManager profileManager = new UserProfileManager(context);

// Sharepoint'den SPListItem tipinden değer aldığınız takdirde kullanıcı bilgileri
// 1;#Adil ERKAN şeklinde kullanıcı Id'si ve adı ile birlikte size değer gelecektir.
// Burada Id'ye göre değer okuyacağımız için split ile ayırıyoruz.
string[] n = pName.Split(';');

// AllUser's altındaki parametre ile gelen kullanıcının id'sine göre bilgilerini alıyoruz.
SPUser user = web.AllUsers.GetByID(Convert.ToInt32(n[0].ToString()));
// GetUserProfile ile kullanıcının LoginName'ile bilgilerini UserProfile tipindeki değişkenimize atıyoruz.
UserProfile userProfile = profileManager.GetUserProfile(user.LoginName);

// kullanıcı profili varsa parametre ile gelen alanın değerini geri dönen değişkemize atıyoruz.
if (userProfile != null)
{
FieldValue = userProfile[pFieldName].Value.ToString();
}
}
}
});
}
catch (Exception ex)
{
// exception anında yapılacak işlemler yapılır.
}

// methodumuzun başında atadığımız context'i iade ediyoruz.
HttpContext.Current = currentContext;

// değeri döndürüyoruz
return FieldValue;
}



referans : SharePoint User Profile Access Issues

Bir sonraki yazımda Sharepoint Web Service yardımı ile kullanıcı profil erişimini nasıl yapacağımızı yazacağım.

Bir Shapoint sitesini Anonymous Access (Anonim Erişime) Açmak



Sharepoint portal üzerindeki bilgileri anonymous access'e açmak için Central Administrator'da anonim erişime izin vereceğiniz web application'ın Authentication providers'da ilgili alanı işaretlememiz yeterli olacaktır.



Central Administration -> Application Management -> Authentication Providers burada sağ üst köşede yapacağıamız değişikliğin uygulancağı web applicatiın'ımızı seçiyoruz. -> Resim'deki altı çizili alan olan Enable anonymous access işaretliyoruz.



Geliştirmenizi bu doğrultuda yapmanız kullanıcı hakları ve güvenlik açısından önemli bir noktadır.
Giriş yapmış ve yapmamış kullanıcıların görebileği yerlerdeki ayarları ve web partları anonim erişime uygun şekilde geliştirmeliyiz.



12 Mart 2009 Perşembe

Xsl Date Format


Content Query Web Part(CQWP) kod veya custom webpart yazmadan, oluşturduğumuz Liste'lerdeki öğeleri göstermek için kullandığımız webpart'dır.

CQWP görselliği ayarlamak için;
Sharepoint Designer XSL Style Sheets altında yer alan ItemStyle.xsl içerisindeki xsl:template'ler


CQWP edit modda aşağıdaki gibi listelenmektedir.

Listeleme şeklimizi kendi istediğiz şekilde değiştirebiliriz.
ItemStyle.xsl'e kendi görselliğimize uygun olacak şekilde yazabiliriz.

xsl:template'in name alanına kendi template adımızı yazıyoruz.
Bu ad CQWP edit modda Presentation tabı, Styles başlığı altında Item style DropDownList'inde gözükecektir.

yukarıda kısaca CQWP'dan bahsettim.

Gelelim konumuz olan DateFormat'a.
Xsl içerisinde

<xsl:value-of disable-output-escaping="no" select="ddwrt:FormatDate(string(@Created), 1055, 5)" />

tagı ile Created öğemizi istediğimiz formatda gösterebiliyoruz.

xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime"

namespacemizi xsl dosyamıza ekliyoruz.

Ayrıca 1055 Locale ID (LCID) Türkçe'dir ve Türkçe tarih formatını göstermektedir.
Dil ayarlarınız Türkçe olsa dahi 1055 yazmak zorundayız.
Diğer Local ID'leri bu linkten bulabilirsiniz.



yaralandığım blog adresi : Sharepoint Tips And Tricks


1 Şubat 2009 Pazar

"Yazilim Uzmanlığı Üzerine" bir kitap

Takip ettiğim blogların başında gelen Gürkan "şöyle bir şey yaptım" diyor.
İyi de yapmış.

Teşekkürler

7 Ocak 2009 Çarşamba

Sharepoint 2007 Dispose

Sharepoint'de yazılım geliştirirken dikkat edilmesi gereken bir husus : disposable.

Bununla ilgili sharepoint team blogdaki makaleden yola çıkılarak buradaki makaleyi okumak faydalı olur.

Aşağıda ufak bir örnek koda yer verdim.

void SPListBreakRoleInheritanceBestPractice()
{
using (SPSite siteCollection = new SPSite("http://moss"))
{
using (SPWeb web = siteCollection.OpenWeb())
{
SPList list = web.Lists["ListName"];
list.BreakRoleInheritance(true);
list.ParentWeb.Dispose(); // Best practice
} // SPWeb object outerWeb.Dispose() automatically called
} // SPSite object siteCollection.Dispose() automatically called
}