Saturday, March 16, 2013

Uzun bir aradan sonra tekrar merhaba.Artık uzun uzun yazmaya çok vakit bulamıyorum,aslında yazacak çok şey de birikti ama inşallah bir ara yazacağım.Uzun uzadıya yazana kadar da kısa kısa hayat kurtaran kod parçalarını paylaşmak istiyorum.

Bu "Life Saver" kodlardan ilki bir SPUser ın belli bir gruba dahil olup olmadığını sorgulayan kod parçacığı.

private bool IsMemberOf(string groupName)

{

try {

return SPContext.Current.Web.CurrentUser.Groups[groupName] != null ;

}

catch {

return false;

}

}

Saturday, March 16, 2013 1:18:42 AM (GTB Standard Time, UTC+02:00)  #    Comments [0]  | 
Wednesday, January 16, 2013

Zaman zaman çooook uzun (satır sayısı bazında)dosyalarla işlemler yapmak zorunda kalırız, ancak bu fazla uzun dosyalar işimizi çoğu zaman zorlaştırır. Dolayısıyla bu uzun dosyaları parça parça bölüp çalışmak daha çok işimize gelir. İşte bunu Windows PowerShell ile yapmak isterseniz gereken kod şöyle :

$folder = "C:\split_test" $readerfilename = "a.txt" $linespersplitfile = 100000 [IO.Directory]::SetCurrentDirectory($folder) $reader = [System.IO.File]::OpenText($readerfilename) try { $counter = 0 $filecounter = 1 $writerfilename = $readerfilename + "_" + $filecounter + ".txt" $writer = [System.IO.File]::CreateText($writerfilename) for(;;) { $line = $reader.ReadLine() if ($line -eq $null) { break } if($counter -eq $linespersplitfile) { $counter = 0 $filecounter++ $writer.Close() $writerfilename = $readerfilename + "_" + $filecounter + ".txt" $writer = [System.IO.File]::CreateText($writerfilename) } $writer.WriteLine($line) $counter++ } } finally { $writer.Close() $reader.Close() }

Parametrelere dikkat, c nin altında bulunan split_test klasöründeki a.txt dosyasını 100.000 lik parçalara böl diyorum. Bu kadar basit...

Wednesday, January 16, 2013 11:58:34 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]  | 
Thursday, May 24, 2012

SharePoint i birçok yönden verimli bir şekilde kullanmanın bir yolu da, bize sağladığı sosyal özellikleri daha iyi anlamaktır. Her ne kadar 14.versiyon yani SharePoint 2010 bu konuda şu anki istekleri tamamen karşılayamasa da, gelecek yeni versiyonda bu konuda gelişmeler olduğunu da duyuyoruz. Sosyal paylaşım sitelerinin son yıllarda sükse yapması ve mikro blog olayının inanılmaz tutması dolayısıyla, benzer özelliklerin 15. versiyonda geleceğini de buradan bilmeyen arkadaşlara müjdeleyebiliriz. Yeni versiyon gelene kadar tabi ki beklemeyeceğiz ve elde mevcut olan özellikleri daha verimli kullanmanın yollarını araştıracağız.

Facebook sayesinde hayatımıza bir “Like” kavramı girdi. Artık facebook kullanan kullanmayan hemen hemen herkes bu kavramı benimsedi. Beğendiğimiz yazı, resim, vs. İçerikleri “Like” ediyoruz yani beğeniyoruz. SP 2010 da bu işlev mümkün. SP2010 da bunun dışında “Rating” ve “Comment” özellikleri de mevcut. Ben burada “Like”olayını yani sosyal tagleme kısmını anlatmaya ve bir örnekle işinize yarayacak bir webpart oluşturmayı hedefliyorum.

SP2010 kullanıcıların taglerini (etiketlerini) kullanıcı profilinde saklar. SP üzerindeki profil sayfanıza gidip “Tags and Notes” kısmına gelirseniz, etiketlediğiniz içerikleri görebilirsiniz. Ayrıca SharePoint veritabanını inceleyecek olursanız, User ProfileServiceApplication_SocialDB_... ile başlayan veritabanında bulunan veritabanı tablolarını ve SocialTags tablosunda ise de tag bilgilerinin tutulduğunu görebilirsiniz. Olayı daha iyi anlatabilmek adına ben Visual Studio 2010 da bir Visual Webpart projesi başlatıyorum ve adına da MyLikesWP diyorum.

Daha sonra şu referansları projeye dahil ediyorum:

  • Microsoft.Office.Server (UserProfile SpContext için gerekli)
  • Microsoft.Office.Server.UserProfiles (UserProfiles için gerekli)
  • Microsoft.SharePoint.Taxonomy (Term Store için gerekli)
  • Microsoft.SharePoint

Kod bloğumun başındaki usingler şu şekilde oluyor yani :

using System;
using System.Web.UI;
using Microsoft.SharePoint;
using Microsoft.Office.Server.UserProfiles;
using Microsoft.Office.Server.SocialData;

Daha sonra iş, asıl önemli konuya geliyor, yani kullanıcının taglediği içerikleri almaya. Bunun için şöyle bir metot yazıyoruz :

Metoda hızlıca göz atacak olursak, parametre olarak bizden tag i yani etiketi istiyor, bu herhangi bir string değer olabilir. Biz Like taglerini istediğimiz için bu metoda “I Like It” değerini gönderiyor olacağız.

UserProfile dan şu anki kullanıcı bilgisini aldıktan sonra,
UserProfile currentProfile = manager.GetUserProfile(false);
O kullanıcıya ait SocialTerm dizisini çekiyoruz.
SocialTerm[] terms = socialManager.GetTerms(currentProfile);

Şimdi sıra aradığımız SocialTermi bulmada, SocialTerm objesinin Term.Name kısmında ise aradığımız “I Like It” stringini arıyoruz, bulduğumuz anda işler daha da kolaylaşacak. Foreach döngüsünde bu yakalama işlemini gerçekleştirdikten sonra sıra bu Term e bağlı Url leri almaya geliyor ve metodumuz işini tamamlayarak geriye bir Uri dizisi gönderiyor.
return socialManager.GetUrls(favTerm.Term, currentProfile);
Visual Webpart imizin page loadinda bu metodu çağırdığımız takdirde, bize istediğimiz Url leri dönüyor olacak.
Uri[] urls = GetUserUrlsByTag(“I Like It”);

Webpartımıza da server side divlikes adında bir div ekliyorum ve bunu dönen sonuçlarla dolduruyorum :

Burada 2 düzeltme daha doğrusu güzelleştirme yapıyorum,

  • 1) Eklenen favori linkleri daha sonra silmem gerekebilir, bu fonksiyonaliteyi sağlayan bir “Sil” butonu. Burada yine SocialTagManager sınıfının DeleteTag metodunu kullanarak işlemimi gerçekleştiriyorum.

  • 2) Eklediğim linklerin Url lerinden ziyade, sayfanın başlığını göstermek daha şık olur, bu nedenle div i doldururken SocialTagManager a tekrar gidip SocialTag dizisinden sayfa başlıklarını alıyorum.

SocialTagManager m = new SocialTagManager(serviceContext);
SocialTag[] t = m.GetTags(url);

Bir kaç sayfayı like ettikten sonra webpart ın görünüşüşu hale geldi:

Daha sonra bir linki silmek istediğimde ekran görüntüm şu şekilde oluyor :

Sonuç olarak toparlamak gerekirse, webpartın page load ında çağıracağımız metot şu şekilede görünüyor artık :

Ve diğer gerekli metotlar :

Umarım işinize yarar bir yazı olmuştur...

Thursday, May 24, 2012 10:20:10 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]  | 
Thursday, February 02, 2012

Bu yazımızda SharePoint de kullanmamız için kendi özel alan tipimizi (custom field type) nasıl yaratacağımızı göreceğiz. Yine her zaman olduğu gibi örnek bir senaryo üzerinden, gerçek hayat örnekleriyle geliştirmemizi yapacağız.

Bir SPList üzerinde e-mail bilgisinin tutulması için özel bir alana ihtiyacımız olduğunu ve bu alanın mutlaka e-mail kriterlerine uyması gerektiğini daha önceden analist arkadaşlarımız bize bildirmişler ve bu konuda bizden birşeyler bekliyorlar.

İlk iş olarak Visual Studio 2010 ile boş bir (Blank Solution) SharePoint 2010 projesi açıyoruz. Daha sonra projemize, bu özel alanı tanımlayacağımız bir class ekliyoruz. Ben EmailField.cs dedim siz başka bir isim de verebilirsiniz. Bir class daha ekleyip bu sefer adına da EmailValidationRule.cs dedim, bu sınıf aracılığıyla da e-mail validasyonunu yapacağız.

EmailValidationRule.cs classımızın tek görevi validasyon, bu sınıfımızın görüntüsü şu şekilde oluyor :

Görüldüğü gibi, basit bir regex ile e-mail kontrolü yapılıyor. Sıra EmailField.cs ye geldi, bu class ımız da şu şekilde olacak :

Burada dikkat etmemiz gereken metod GetValidatedString metodu. Override ettiğimiz bu metod ile alanımızın gerçekten bir e-mail olup olmadığına bakıyoruz. Bu kontrolü de az önce yazdığımız EmailValidationRule.cs de bulunan kontrolle yapıyoruz. Eğer girilen değer geçerli bir e-mail adresi değilse, SPFieldValidationException fırlatarak son kullanıcıya bu hata hakkında bilgi veriyoruz. EmailField.cs de 2 adet constructor da kullandığımızı görmüşsünüzdür. Bu sınıf hakkında son olarak da default bir değer atayabilirdik, info@abc.com gibi, bunu da DefaultValue metodunu override ettiğimiz metotda return info@abc.com diyerek yapabilirdik. Ben yapmadım ama eğer size lazım olursa bu şekilde kullanabilirsiniz.

Projede yapmamız gereken son bir adım daha kaldı, o da projeye “mapped folder” eklemek. Bunun için projeye sağ tıklayıp Add -> SharePoint Mapped Folder diyoruz. Karşımıza çıkan ekrandan ise TEMPLATE altındaki XML i seçiyoruz.

Böylece projemize XML folderini maplemiş olduk. Şimdi de bu foldera yeni bir XML dosyası ekliyoruz.

Add -> New Item -> XML File, ben dosyanın adını fldtypes_customemail.xml dedim. Dosyanın adının fldtypes_ ile başlamasına dikkat edelim. XML dosyamızın içeriği de şu şekilde olacak :

Burada özel alan tipimiz hakkında bilgiler veriyoruz servera. Dikkat etmemiz gereken en önemli yer, FieldTypeClass kısmındaki verinin bizim projemizdeki doğru Namespace ve class ismini almış olması.

Artık herşey tamam, projemize sağ tıklayıp “Deploy” diyoruz ve SharePoint sitemizi açıp yeni bir custom list oluşturuyoruz (ya da var olan bir liste üzerinde de deneyebiliriz)

Listemizin ayarlar (settings) kısmından yeni bir kolon eklemeye çalışıyoruz,

Gördüğünüz gibi, az önce XML dosyasından “TypeShortDescription” kısmına yazdığımız değer burada yeni özel tipimizi gösteriyor. Yeni tipimizle yeni bir kolon ekleyip gerçekten de çalıştığını siz de görebilirsiniz.

Umarım işinize yarar bir yazı olmuştur.

Thursday, February 02, 2012 2:33:01 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]  | 
Sunday, November 13, 2011

Web geliştirmede yaşanan klasik sorunlardan biri CSS veya JS güncelleme durumlarında browser cache ine takılmadır sanırım. Her ne kadar büyük çapta projeler olsa bile css & js güncelleme durumlarında çoğu zaman versiyonlama gözden kaçabilmektedir.

Versiyonlamadan kısaca bahsedecek olursak, bir .aspx dosyaya veya MVC için bir .cshtml e css&js dosyalarını include ederken (ben örneğimi MVC 3 Razor üzerinden göstereceğim )

olarak belirtiriz.

Genel olarak versiyonlamayı da şu şekilde yaparız

Yani css & js dosyalarımıza manuel olarak versiyon veririz. Amacımız da bu versiyonlama işini otomatize edip artık versiyonlama derdinden kurtulmak.

Gelelim bu işi nasıl yapacağımıza ;

Visual Studio 2010 da bir ASP.NET MVC 3 projesi açıyorum Razor view ile. “Common” isminde bir klasör ekliyorum projeme ve bu klasöre de “HtmlExtensions” adında static bir class ekliyorum. Namespace olarak da System.Web.Mvc yazıyoruz. Class ımız da 2 adet static metod ekliyoruz.

Metodlarımızı inceleyecek olursak,

serverFilePath değişkenine dosyamızın full path ini alıyoruz, artık elimizde css & js dosyamızın tam adresi var, version değişkenine de bu dosyanın son güncellenme tarihini alıyoruz. Yani css & js dosyası en son ne zaman değiştiyse bunu kimseye birşey sormadan aldık. Son olarak da bize parametre olarak gelen dosyamızın versiyonlanmış halini geri döndürüyoruz. Buraya kadar bir sorun yok. Peki bu extension class ını projede nasıl kullanacağız ?

Şimdi de cs & js dosyalarımızı çağırdığımız view e gidiyoruz. Ben projemde Views/Shared/_Layout.cshtml de kullanıyorum.

Extension metodlarında ilk parametre, extensionu nereden kullanacağımı belirttiğinden @Html helperi vasıtasıyla metodlarımızı kullanabiliyoruz. İşlem tamam, artık browser css & js dosyalarımızı kendi cacheine alsa da dosyalar değiştiğinde otomatik olarak versiyonunu güncelleyecektir.

Siz de kendiniz deneyerek görebilirsiniz.

Sunday, November 13, 2011 10:56:30 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]  | 
Sunday, October 30, 2011

Bazı senaryolarda dış kaynaklardan gelen verileri SharePoint ortamında bir listede tutmamız gerekebilir, bazen de birtakım denemeler yapmak için dolu listelere ihtiyacınız olabilir benim gibi. Bunu bazen bir WCF servisi ile bazen belki de bir FileSystemWatcher kullandığımız basit bir konsol uygulaması olarak bile düşünebiliriz. Ben çok basit bir konsol uygulaması üzerinde bu işi nasıl yapabilirizi anlatmaya çalışacağım.

Önce Visual Studio 2010 da bir konsol uygulaması projesi başlatıyoruz. Uygulamayı Framework 3.5 a çekelim ve 64 bit modda çalışacak şekilde ayarlayalım. Test projesi olduğundan ben daha önce yarattığım “largelist” adında önemsiz bir listeye kayıtlar atacağım ve atacağım bu kayıtları oluşturması için random string üreten bir metod ekliyorum kodlarıma.

Daha sonra asıl işi yapacak kısıma geliyoruz yavaş yavaş. Projemize Microsoft.SharePoint dll ini referans eklememiz gerekiyor. Kullanıcının hangi listeye kaç adet gireceğini kendi belirlesin istedim ve şöyle bir görüntü çıktı karşımıza.

Gördüğünüz gibi gayet basit, ben burada sadece “Title” kolonunu kullandım, siz birden fazla kolonu olan bir listeyi deneyebilirsiniz. Dilediğimiz kadar ListItem ları listemize programmatik olarak ekleyerek işimizi kolaylaştırabiliriz.

Sunday, October 30, 2011 8:27:37 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]  | 
Wednesday, September 14, 2011

Business Connectivity Services yani kısaca  BCS yi SharePoint Server 2007 de Business Data Catalog olarak tanıyorduk. CRM (Customer Relationship Management)  ve ERP (Enterprise Resource Planning) gibi sistemler, SharePoint ile kolay kolay çözülemediğinden, bu sistemlerin özel rolleri vardır. Sonuç olarak,  farklı görevleri olan bu sistemler ve SharePoint server arasında ortak çalışabilir yapıların sağlanabilmesi gerekebilir. BCS bize, SharePoint tabanlı verilerimizin dışarıya açılmasına olanak veriyor, bu özellik sayesinde dış kaynaklardaki verileri okuyabiliyor ve direk SharePoint siteleri veya webpartlar aracılığıyla düzenleyebiliyoruz. BCS nin standart özelliği olan SharePoint Search ile artık ilişkisel veritabanlarınızdaki verileri alıp SharePoint sitenizin güçlü arama modülleri ile de kullanabilirsiniz.

BCS Servisleri,  BDC (Business Data Connectivity Service) ile yönetilir. Buradaki BDC yi, yukarıda bahsettiğim “Business Data Catalog” olan BDC ile karıştırmayın lütfen. BDC diyince artık BCS servislerini konfigüre etmemize yarayan servis aklımıza gelsin.

Biraz BCS terimlerini açalım :

·         External System : BCS nin bağlanabileceği herhangi bir veri kaynağı

·         External Content Type (ECT) : Dış bir sistemle bağlanabilmek için alanların ve operasyonların tanımı

·         External Data : Dış bir sistemle birlikte kullanılan veri

·         External List : Dış veriyi baz alan, SharePoint üzerinde bir liste

·         External Data Column : Kaynağı dış bir sistem olan standart bir library ya da list de bulunan bir kolon

·         External Data Web Part : Dış veriyi gösterebilen herhangi bir web part

BDC yi kullanarak External Content Type ları, External Sistemleri (SQL Server vs.) ve BDC modellerini yönetebiliriz. BDC 2 tip XML tanımını destekler,

1.       Application Models

2.       Resource Files

Application Model (Uygulama Modeli) , ECT nin XML tanımlarını içerir, Resource File (Kaynak Dosya) ise dışarınan alınan veya dışarıya verilen özellikleri ve izinleri tanımlar.

BCS şu aşağıda bulunan External Data tiplerine bağlanabilir :

  • SQL Server Veritabanı
  • SAP Uygulamaları
  • Web Servisleri (WCF de dahil )
  • SharePoint tabanlı web siteleri
  • 3rd Parti uygulamalar

Şimdi bir örnek üzerinden giderek somut birşeyler görelim. Ben BDC servisini bir SQL Server veritabanına bağlayacağım.

Deneme yapmak amacıyla “bcs_test” adında bir veritabanı oluşturdum ve “arabalar”  adından bir tablo yarattım. “marka”, ”model”  ve “ulke” varchar(50) tipinde 3 alan ekledim tabloya. İçini de dummy verilerle doldurdum. Yani dış veri kaynağımızı oluşturdum aslında.

Sırada SharePoint Designer 2010 ile yapacaklarımız var. SPD yi açıyoruz. Soldaki navigasyon menüsünden “External Content Types” a tıklıyorum.

Yukarıda bulunan ribbon üzerinden, yeni bir ECT yaratmak için “External Content Type” a tıklıyorum. Daha sonra açılan ekranda da “Name” ve “Display Name” alanlarını “arabam” olarak düzenliyorum.

Daha sonra “Click here to discover external data sources and define operations” yazan mavi linkli yazıya tıklıyorum.

 Gelen ekranda “Add Connection” ı tıklıyorum ve External Data Type olarak da SQL Server seçiyorum ve Ok diyorum.

 

Ve karşımıza yarattığımız tablomuz geliyor.

Bu ekranda “arabalar” tablomuza sağ klikliyoruz ve “Create All Operations” diyoruz. Bu sihirbaz yardımıyla, CRUD işlemlerimiz için gereken bütün operasyonları gerçekleştireceğiz.

Burada tek dikkat etmemiz gereken, tablomuzda unique bir alanımızın olması. Ben burada “marka” alanını unique varsaydım ve “marka” alanı seçili iken “Map to Identifier” kutusunu seçip devam ettim. Eğer herhangi bir sorun yaşamazsanız şu şekilde birşeyler görmeniz gerekiyor :

Herşey yolundaysa, ribbondan “Create Lists & Form ” u tıklayıp devam ediyoruz. Yeni gelen ekranı dolduruyoruz. Liste ismini “arabalarim” yaptım, screen shot u aldığım esnada “arabalarım”di, tekrar screen shot almaya üşendim J

 İşlem tamam ! External Listemiz SharePoint e  deploy oldu bile !

Şimdi SharePoint sitemize gidip listelere baktığımızda “arabalarim” adlı bir liste  görmelisiniz. Yani SQL  Server veritabanınızdaki verileri  BCS kullanarak SharePoint 2010 da gösteriyorsunuz artık !

Bir ihtimal “Access Deny” hatası almış olanlarınız olabilir, bunun için :

1.       Central Administration ı açıyoruz

2.       Application Management altındaki Manage Service Applications a gidiyoruz

3.       Business Data Connectivity Service e tıklıyoruz

4.       Burada benim yarattığım ECT nin adı “arabam” idi. Onu görüyorum ve sağ tıklıyorum üzerine, siz de kendi ECT nizi görüyor olmalısınız

5.       Set Permissions ı seçiyorum ve gerekli kişilere haklarını veriyorum.

Artık tek bir satır kod yazmadan, arabalar tablosu üzerinde edit/delete/create  işlemlerimizi yapabiliyoruz. Tek ihtiyacımız olan SPD .

Listeye bir eleman eklediğinizde, aynı zamanda bunun veritabanına da eklendiğini kendiniz de test edebilirsiniz.

Çok basit bir girişle BCS yi anlatmaya çalıştım, umarım işinize yarar bir yazı olmuştur.

Wednesday, September 14, 2011 10:45:25 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]  | 
Friday, August 26, 2011

Bildiğiniz gibi SharePoint üzerinden gerçekleşen iş akışı, görev atanması, kitaplıklara döküman eklendiğinde alarm verme gibi durumlarda, ilgili kişi yada kişilere SharePoint mail ile bilgilendirme yapabiliyor.Bunu yapabilmemiz için, SharePoint in üzerinde çalıştığı server a bir smtp server tanımlanması gerekmekte. Bu yazıda da bu konfigürasyon işini bir Gmail hesabı üzerinden nasıl yaptığımızı göreceğiz.

1. Öncelikle Control Panel e gidip Turn Windows Features on or off dan smtp server yüklüyoruz.

Add features den next next diyerek bu adımı kolayca bitiriyoruz.

2. Administrative Tools altındaki IIS 6.0 Manager i açıp, bilgisayar adının yazdığı düğümü açtığımızda altta SMTP Virtual server linkini göreceğiz. Burada sağ tıklıyoruz. Access tabında, Relay e tıklıyoruz, “All except the list bellow” i seçip OK diyoruz. Delvery tabında “Outbound Security” yi tıklıyoruz. Yeni açılan pencerede de Basic Authentication i seçiyoruz ve Gmail mail adresimizi ve şifremizi giriyoruz. TLS Encryption u da seçmeyi unutmayalım.

3. Delivery tabında “Outbound connections” tıklıyoruz ve yeni açılan pencerede TCP portunu 587 olarak ayarlıyoruz. Yine delivery tabında “Advanced” e tıklıyoruz ve smart host alanına “smtp.gmail.com” yazıp OK diyoruz.

Apply deyip pencereleri kapatıyoruz.

4. Sıra SharePoint Server ı konfigüre etme kısmına geldi, SharePoint Central Administration ı açıyoruz ve System Settings den Configure outgoing e-mail settings e tıklıyoruz. “Outbound SMTP server” kısmına bilgisayarımızın ismini yazıyoruz. From address kısmına da Gmail adresimizi yazıyoruz ve OK diyoruz.

Bu kadar !

Burada ben Windows Server 2008 R2 Ingilizce kullandığım için menü isimlerini olduğu gibi yazdım, diğer diller için karşılık gelen isimlendirmeler konusunda sıkıntı yaşamayacağınızı umuyorum.

Artık SharePoint server inizdan Gmail hesabınız aracılığıyla bildirim e-mailleri almaya başladınız. Umarım işinize yarar bir yazı olmuştur.

Friday, August 26, 2011 12:56:47 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]  | 
Tuesday, August 16, 2011

“SharePoint 2010 u dosya paylaşım ortamı olarak da kullanıyoruz” diyen birçok IT elemanı görmüş olabilirsiniz. “Nasıl kullanılır, neler yaparız ?” diye sorarsanız ilk sayacakları özelliklerden biri de Excel dosyalarını browser (tarayıcı) üzerinden açıp dosya üzerinde değişiklik yapabildikleri olur tahminen.

Biz de bu senaryo üzerinden giderek kendi senaryomuzu gerçek hayata yakın bir şekilde değiştirelim, SharePoint 2010 ortamında her gün rapor paylaşan bir test ekibiniz olduğunu düşünün. Bu adamlar her sabah, bir önceki güne dair test sonuçlarını SharePoint üzerinde bir Form Library (Kitaplık) üzerinden yayınlıyor olsun. Bu test sonuçlarını merak eden ve izleyen de bir grup IT ekibinizin olduğunun varsayın. Normal şartlarda bir form library yaratmak ve excel dosyalarını buradan dağıtmak/paylaşmak çok çok basit bir iş ancak bizim senaryomuzda IT ekibimiz, görmek istediği excelleri kendi bilgisayarına indirmeden, browser üzerinden görmek istiyor

Eğer standart bir kurulum yaptıysanız, normal şartlar altında bir form library de bulunan excel dosyasını “View In Browser (Tarayıcıda Görüntüle)” dediğinizde,

Şu şekilde bir hata alırsınız :

Bu hatanın çözümü ise şu şekilde :

  • 1) Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\XML\ e gidiyoruz ve serverfilesExcelServer.xml dosyasını açıyoruz.
  • 2) xls ya da xlsx uzantılı mappingleri commentliyoruz, yani şöyle bir hale gelecek dosyamız

    şeklini alıyor.
  • 3) IISRESET
  • İşlem tamam :)

Tuesday, August 16, 2011 5:19:32 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]  | 
Thursday, June 30, 2011

SharePoint i hayatımızı daha fazla kolaylaştırmak için kullanmaya bir örnek yapacağız. Senaryomuz ise çoğumuzun şirketlerde yaşadığı tatil organizasyonu hakkında. Yaz aylarının gelmesi ile personelimiz sırayla tatile gidecek ama kalabalık bir ekibin tatil organizasyonunu yapmak bazen sıkıntılı süreçlere sebep olabilir. Tam bu sırada devreye SharePoint Calendar (Takvim) giriyor. 10 kişilik bir IT ekibinizin tatil haftalarını kolayca SharePoint Calendar ile organize ederek hem işinizi kolaylaştırmış hem de bütün ekibin tek bir noktadan görebileceği bir alan yaratmış olacağız. Böylece yaşanabilecek olası organizasyonel sorunları da minimuma indirmiş olacağız. Kişilerin birbiri ile beraber çalıştığı projelerde hayati önem taşıyabilen durumlarda, kim, kimin ne zaman şirket dışında olduğunu görebilecek ve kendi proje planlarını bu takvime bakarak revize edebilecek. Zaten SharePoint in ana görevlerinden biri de bu ortak çalışmaları sağlıklı bir şekilde yönetebilmek(Collaboration).

Böyle kalabalık bir IT ekibinin proje yöneticisi olduğunuzu düşünün ve hemen SharePoint Team Site ımızı açalım. Burada hazır gelen Calendar ı da kullanabiliriz veya sadece tatil zamanlarını yönetmek için yeni bir calendar oluşturabiliriz. Ben yeni bir calendar oluşturuyorum ve bu calendara da “IT_Holiday” ismini veriyorum. (Sol menüden Lists e tıklayıp gelen sayfada Create -> List tabından Calendar seçiyoruz)

Calendar ımız hazır. Şimdi nasıl kullanacağımızı görelim.
Tatile gidecek ilk 3 kişi tatil planlarını şu tarihlerde yapmışlar :

  • Can : 4 Temmuz 2011 – 11 Temmuz 2011
  • Berk : 25 Temmuz 2011- 3 Ağustos 2011
  • Ayşe : 1 Ağustos 2011 – 15 Ağustos 2011

Daha önceden bu tarihleri ekibinizden almış olduğunuzu varsayıyoruz. Can ın tatil planını calendara girmek için 4 Temmuz 2011 tarihinin üzerine mouse u getirdiğimizde

“+Add” linkinin çıktığını göreceğiz. Bu linke tıklayınca açılan pop-up menüden Can ın tatil tarihlerini aşağıdaki gibi gireceğiz ve Save diyerek kaydedeceğiz.

Calendar ımızın Temmuz ayına gittiğimizde net bir şekilde Can ın olmadığı tarihleri herkes tek bir noktadan görebilecek.

Diğer ekip üyelerini de buradan girerek olayımızı tamamlayacağız. Gördüğünüz gibi birkaç adımda, karmaşalara neden olabilecek bir vakayı engellemiş olduk. Umarım işinize yarar bir makale olmuştur.

Thursday, June 30, 2011 7:52:31 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]  | 
Wednesday, June 22, 2011

Wednesday, June 22, 2011 4:59:53 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]  | 
Friday, June 17, 2011

Bu makalede, SharePoint üzerinde bir SPList yaratan minik bir windows uygulaması yapacağız. Bu işlemi yaparken SharePoint içinde hazır gelen Web Servis altyapısını kullanacağız. Visual Studio 2010 ile yeni bir windows uygulaması projesi başlatalım. Formumuza bir textbox bir label ve bir button koyalım. Benim formum şöyle oldu.

Daha sonra projemize Add Service Reference diyerek, WebService URL imizi giriyoruz. Bu url genel olarak http:///_vti_bin/Lists.asmx yani benim için http://ty-suleymanpete/_vti_bin/Lists.asmx idi. Burada karşımıza gelen “AddList” metodunu kullanacağız. Textboxa, yaratacağımız listenin adını yazıp, butona tıkladığımızda, listemiz yaratılacak. Buton un onclick kısmına ise şu kodları yazacağız ;

Burada AddList metodunu inceleyecek olursak, ilk parametre olarak Liste Adı, ikinci parametre olarak Liste Tanımı ve son olarak da integer bir değer olan Template Id istiyor. Template ID kısmına neden 100 yazdık diye soranlar için şöyle bir tablo vereceğim.

Son olarak, app.config de ki security ayarlarımızı da

Şekline getirmemiz gerektiğini belirtelim, aksi takdirde authentication hatalarına maruz kalabilirsiniz.

Görüldüğü gibi gayet kolay, umarım yararlı bir makale olmuştur.

Friday, June 17, 2011 9:28:28 AM (GTB Standard Time, UTC+02:00)  #    Comments [0]  | 
Wednesday, May 11, 2011

Eğer 64 bit bir Windows 7 işletim sisteminiz var ve kendi lokal makinenizde SharePoint çalışmak istiyorsanız, hemen Easy Setup Script i deneyin derim . Bu minik exe size, kendi geliştirme ortamınızı yaratmak için çok yardımcı olacak ...

Easy Setup Scripti İndir

Wednesday, May 11, 2011 10:49:08 AM (GTB Standard Time, UTC+02:00)  #    Comments [0]  | 
Wednesday, April 27, 2011

Merhaba,

SharePoint 2010 makalelerine vakit buldukça kendimce önemli olan konulardan devam etmek istiyorum.

Bu sefer anlatmak istediğim konu “Event Receivers” yani Türkçesi ile “Olay Algılayıcıları” dersek sanıyorum çok yanlış olmaz. SharePoint in ne kadar güçlü bir altyapıya sahip olduğunu tekrar söylememe gerek yok diye düşünüyorum ki Event Receiver lar da SharePoint e güç katan önemli bir özelliktir diyebiliriz.Ayrıca SharePoint in barındırdığı bu Event Receiverlar çok geniş bir yelpazeye sahiptir. Bir Event Receiverı,  SharePoint List, ListItem ya da Site için kullanabilirsiniz. Kabaca özetleyecek olursak, SharePoint ekosisteminde bir olay meydana geldiğinde, bu olayı yakalayıp başka aktiviteleri tetiklemeye yarar. Örneğin, şirketinizin İK departmanı, personeli ilgilendiren dökümanlarını Custom bir SharePoint List üzerinde paylaşıyor olsun ve siz de bir çözüm geliştirici olarak personelin hayatını kolaylaştırmak adına, her yeni döküman eklenildiğinde personele e-mail atarak yeni döküman eklendiği bilgisini vermeyi düşünüyorsunuz. Bu işlemi otomatize etmek için imdadınıza EventReceiver lar koşacaktır.

Lafı fazla uzatmadan, basit bir örnek üzerinden giderek icraate geçelim.

Öncelikle boş bir SharePoint 2010 projesi oluşturuyorum ve ERTest olarak adlandırıyorum.Proje tipini de Deploy as a Farm Solution olarak seçiyorum.
Daha sonra SharePoint sistemim üzerinde IKDocs adında bir Document Library oluşturuyorum.
Tekrar Visual Studio tarafına geçiyoruz ve projemize Add New Item diyerek bir EventReceiver ekliyoruz, ben bu EventReceiver in ismine IKDocsER dedim. Karşımıza bir ekran gelecek, buradan Event Receiver ımızın nereleri ve neleri izleyeceğini belirliyoruz. “What type of Event Receiver do you want?” sorusuna “List Item Events” diyoruz, “What item should be the event source?” sorusuna “Document Library” diyoruz, Handle the following events yani hangi olayları izlememi istiyorsun kısmında ise “An item was added” i seçiyoruz sadece. (Siz bu kısımda birden fazla seçenek seçebilirsiniz ama hepsi için ayrı ayrı handle eden kodları da yazmanız gerek)

public override void ItemAdded(SPItemEventProperties properties)
       {
           base.ItemAdded(properties);
 
       }

 

Yukarıdaki şekilde hazır gelen kodumuzu şu şekilde değiştiriyoruz.

         public override void ItemAdded(SPItemEventProperties properties)

       {

           base.ItemAdded(properties);

           if (properties.ListTitle == "IKDocs")

           {

               //your logic ...

               //properties.ListTitle

           }

       }

Burada şunu yapıyor kodlarımız,  doküman eklenen Document Library miz “IKDocs”  mü değil mi kontrolü öncelikle. Daha sonra istediğimiz işi yapabiliriz, burada mail atma ve buna benzer işlemler tamamen size kalıyor. ItemAdded metoduna gelen SPItemEventProperties tipindeki properties değişkeninden size gereken bilgileri de alabilirsiniz...Burada birsürü şey yapılabilir, örneğin bu Document Library ile ilişkilendirilmiş bir workflow start edilebilir, announcements olarak başka yerlere de bildirimler yapılabilir vs. Gerisi tamamen sizin ihtiyaçlarınıza ve hayal gücünüze kalıyor. Özetle, IKDocs adlı document library mize yeni bir eleman eklendiğinde kodlarımız tetikleniyor.

Event Receiver lar konusuna da böylece değinmiş olduk. Umarım işinize yarar bir makale olmuştur.

Wednesday, April 27, 2011 10:15:21 AM (GTB Standard Time, UTC+02:00)  #    Comments [0]  | 
Friday, April 22, 2011

Bu makalede SharePoint in önemli parçalarından olan WebPart ların birbiri ile nasıl konuşabileceğine dair bir örnek geliştireceğiz.

Öncelikle örneğimizde kullanmak için bir custom SPList oluşturalım. Site Actions > More Options > List > Custom List. Custom Listemize ben “Dersler” dedim. Siz istediğiniz gibi isimlendirebilirsiniz. Bu listeye elemanlar ekleyeceğim.(Matematik, Fizik, Geometri, Kimya...)

Listemi oluşturduktan sonra Visual Studio 2010 da yeni bir Empty SharePoint projesi oluşturuyorum ve proje ismini de “ConnectedWP” olarak belirliyorum.

Projeme bir Interface ekliyorum. IDers.cs (Add > New Item, Visual C# altından Code sekmesinden Interface seçiyorum)

namespace ConnectedWP { public interface IDers { int Id { get; } string Name { get; } } }

Daha sonra projemize, Provider WebPart ımızı ekliyoruz. (Add > New Item > WebPart), ismini ProviderWebPart olarak belirliyorum.

public class ProviderWebPart : WebPart kısmını, yeni interface imi kullanacak şekilde değiştiriyorum, yani şöyle oluyor : public class ProviderWebPart : Microsoft.SharePoint.WebPartPages.WebPart, IDers

Daha sonra, sınıfımızın içerisini şu şekilde dolduruyoruz :
DropDownList _projectPicker = null; int IDers.Id { get { return int.Parse(_projectPicker.SelectedValue); } } string IDers.Name { get { return _projectPicker.SelectedItem.ToString(); } }

Ardından da CreateChildControls metodunun içini şu şekilde değiştiriyoruz.

base.CreateChildControls(); try { _projectPicker = new DropDownList(); using (SPSite spSite = new SPSite(SPContext.Current.Web.Url)) using (SPWeb spWeb = spSite.OpenWeb()) { SPList projectsList = spWeb.Lists["Dersler"]; foreach (SPListItem project in projectsList.Items) { _projectPicker.Items.Add(new ListItem(project.Name, project.ID.ToString())); } } _projectPicker.AutoPostBack = true; this.Controls.Add(_projectPicker); } catch (Exception ex) { this.Controls.Clear(); this.Controls.Add(new LiteralControl(ex.Message)); }

Son olarak da WebPartlarımız arası bağlantı noktasını oluşturacak kodumuzu ekliyoruz,
[ConnectionProvider("Ders Adi ve ID")] public IDers HerhangiBisey() { return this; }

Sıra şimdi Consumer WebPartımıza geldi, ilk WebPartımızı eklediğimiz gibi bunu da aynı şekilde ekliyor ve adını “ConsumerWebPart” koyuyorum. WebPart ın kod kısmına geçip class tanımının hemen altına şunları ekliyorum (Dikkat ederseniz burada, WebPartımızın türediği kısma dokunmadık)

IDers _provider = null; Label _lbl = null;

Yine CreateChildControls metoduna gidip şu şekilde değiştiriyoruz :

base.CreateChildControls(); try { _lbl = new Label(); if (_provider != null) { if (_provider.Id > 0) { _lbl.Text = _provider.Name + " seçildi."; } else { _lbl.Text = "Henüz hiçbirşey seçilmedi."; } } else { _lbl.Text = "Provider WebPart bağlantısı yok."; } this.Controls.Add(_lbl); } catch (Exception ex) { this.Controls.Clear(); this.Controls.Add(new LiteralControl(ex.Message)); }

Ve yine son olarak WebPart lar arası bağlantıyı kuracak kod bloğumuzu da ekliyoruz :
[ConnectionConsumer("Ders Adi ve ID")] public void BurasininIsmıFarkEtmez(IDers providerInterface) { _provider = providerInterface; }

Artık WebPartlarımızı deploy edebiliriz. Deploy ettikten sonra bir WebPartPage oluşturup (SiteActions > More Options > Page > WebPartPage), bu sayfada , deploy ettiğimiz WebPartları kullanıp test edebiliriz. Ben sayfama “ConnectedWPTest” adını verdim ve SitePages in altına koydum. Daha sonra WebPart larımı bu sayfaya eklemek için herhangi bir yerden “Add a Web Part” seçtim ve Custom kategorisi altında bulunan ConsumerWebPartımı sayfaya yerleştirdim.

Aynı şekilde Provider WebPartımı da ekliyorum. En son adım olarak da, WebPartları birbirine bağlama işlemi için, ProviderWebPart ın “Connections” kısmına gidip, “Send Ders Adi ve ID to Consumer Web Part” ı seçiyorum.

İşlem tamam, sayfama gidip test ediyorum, DropDownList de bulunan dersler (ilk adımda yarattığımız SP Custom List den doluyor) den birini seçtiğimde, ConsumerWebPart ımda bulunan Label değişiyor.


Umarım işinize yarar bir makale olmuştur.
Friday, April 22, 2011 11:05:11 AM (GTB Standard Time, UTC+02:00)  #    Comments [0]  | 
Tuesday, March 29, 2011

SharePoint üzerindeki döküman kütüphaneleri (document library) ve bazı tip listelerin e-mail özelliği etkinleştirilerek, kullanıcı arayüzü kullanmadan bu listelere ve döküman kütüphanelerine eleman eklenebileceğini biliyor muydunuz ?

Tuesday, March 29, 2011 8:36:21 AM (GTB Standard Time, UTC+02:00)  #    Comments [0]  | 
Monday, February 21, 2011

Adaptör teknolojisini kullanarak ayrık varlıkların veri, olay, işlem ve servislerini entegre eden bir middleware dir diyebiliriz özetle. Burada varlıktan kastımız, bir uygulama, departman ya da veri paylaşımı yapmamız gereken tamamen ayrı bir organizasyon da olabilir.Bir yazılım adaptörü, mevcut (native) halde iken aralarında iletişim kuramayan iki bileşen arasında iletişim kurulması gerektiğinde kullanılır. BizTalk server adaptörleri de ortak bir framework çatısı altında konfigürasyon yapılarak entegrasyonun gerçeklenmesini sağlarlar.

Genel olarak, BizTalk Server 3 ana problemi çözer :

1) BizTalk Server Enterprise Application Integration gibi davranarak, native olarak birbiriyle konuşamayan uygulamaları birbirine bağlar. Bu problemi, her uygulama için ayrı (custom code) yazarak çözebilirsiniz.


Ancak bu çözüm uzun vadede çok karmaşık bir hale gelebilir.

Birçok şirket, bu karmaşık yapı yerine, aşağıdaki gibi merkezi yönetimli yapıyı tercih eder.



Bu yapının temel avantajları ;

  • Loose coupling (Uygulamalar birbirlerine bağımlı değildir)
  • Mesaj dağıtımı garantisi : Mesaj alıcının devre dışı olması durumunda queue yapısı sayesinde
  • Sistem entegrasyon noktalarının tek merkezden yönetimi

2) Business-To-Business (B2B) rolünü üstlenerek, farklı organizasyonlar arasında iletişim gereklerini yerine getirir. Internet dostu adaptörleri, bir endüstri standardı olan EDI mesaj şemaları ve kanal &mesaj bazlı güvenlik sistemlerini destekleyen sağlam yapısıyla B2B senaryolarını destekler.


3) Business Process Automation (BPA), manual iş akışı prosedürlerini alıp çalıştırılabilir modüller haline getirir. Örneğin, siparişlerini e-posta üzerinden alan bir organizasyon düşünelim. Satış elemanın stok miktarlarını manual kontrol ettiğini de ilave edelim. Eğer stok miktarı çok az ise satış elemanı, tedarikçiyi uyararak sistemdeki stok miktarının güncellenmesi bekleyecek. Burada ne gibi problemlerle karşılaşabiliriz ?

  • Sipariş sayıları arttığında oluşacak kötü ölçeklenebilirlik
  • Sipariş durumlarının ve tedarikçi isteklerinin gözden kaçabilme ihtimali
  • Gereğinden fazla data girişi ve dolayısıyla hatalara sebep olma

Göründüğü üzere, BizTalk Server senaryolarının ortak özelliği, gerçek zamanlı ve olay yönelimli ayrık mesajların işlenmesidir. Bu da BizTalk serverin SOA mimarisi içerisinde kuvvetli bir araç olmasının kısmi bir göstergesidir.

Monday, February 21, 2011 3:56:20 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]  | 
Tuesday, February 15, 2011

SharePoint makaleler dizisine kurulum kısmından başlamayı düşünmüştüm ilk önce, daha sonra bu konuda yazılmış MSDN kaynaklarının olduğunu düşününce kurulum ile ilgili tekrar benzer bir yazı yazmaktan vazgeçtim, ancak kurulum konusunda sıkıntısı olanlar önce buraya bir göz atarlarsa, daha sağlıklı ilerleyebilirler.

SharePoint kurulan bir makinede default bir site collection da otomatik olarak yaratılmış olur, bu genellikle http://makineadı şeklinde olur. Site collection da nereden çıktı, nedir bu site collection diyenler olabilir, kendi içinde top level bir site barındıran ve buna ilave olarak birden fazla child SharePoint site barındırabilen bir barınak diyebiliriz kabaca. Neden site collectionları kullanırız dersek, örneğin, satış departmanınız kendi işleriyle ilgili bir site collection kullanırken, pazarlama departmanınız başka bir site collection kullanmak isteyebilir. Bu yapı bize, her departmanın kendi kullanıcılarını belirleyip kendine özel güvenlik seviyeleri belirlemesine ve kendi yapısına uygun olarak alt sitelere de yetki verip vermeme olanağını sağlamaktadır.

Benim makinemin ismi SULEYMAN_PC olduğu için top level SharePoint sitemin adresi de http://suleyman_pc .SharePoint Foundation , 64 bit Windows 7 üzerine kurulduktan sonra otomatik olarak bu site de yaratıldı. Şu aşağıdakine benzer bir ekran görüntüsü almanız gerekiyor eğer SharePoint i düzgün olarak kurabildiyseniz.

Sol üstte görülen Site Actions kısmından siteyle ilgili işlemlere erişebiliyoruz. Tabi eğer site için gerekli yetkilendirmeleriniz yoksa bu menüyü görmeniz münkün olmayacaktır.

SharePoint içerisinde yaratılabilen 4 ana eleman var, bunlar ;

  • List
  • Library
  • Page
  • Subsite

Bu elemanlara hızlıca bakacak olursak,

List SharePoint in temelidir diyebiliriz. Bir SharePoint site listelerin listelerinden meydana gelir dersek yanlış olmaz. Announcements, Calendar, Contacts, Custom List, Tasks vs. gibi çeşitli list tipleri mevcuttur. List ler konusunda, ilerleyen zamanlarda çok daha detaylı örneklere gireceğim.

Library, döküman yönetimini kontrol etmek amacıyla özelleşmiş bir list olarak tanımlanabilir. Dökümanlarınızı saklayıp,yönetip , başkalarıyla paylaşabilmenize olanak sağlar. Document, Form, Picture gibi Library tipleri mevcuttur.

Page elemanına gelirsek, MOSS 2010 (Bundan sonra SharePoint yerine kısaca MOSS u kullanacağım) üzerinde yaratılabilen 2 tip Page vardır; WikiPage ve WebPart page. Bilindiği üzere wiki sayfaları tarayıcı üzerinden editlenebilir, web part sayfaları da isminden de anlaşılacağı üzere içerisinde web partlar bulundurur.

Son olarak Subsites ise, (Bazen subsite yerine Workspace de kullanırlar, boş bir MOSS sitesinin bir kaç ilk özelliği set edilmiş olanıdır sadece) SharePoint in yarattığı alt (child) sitedir. Blog Site, Blank Site,Team Site, Document Workspace gibi örnekleri vardır.

Tuesday, February 15, 2011 11:56:54 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]  | 
Sunday, November 21, 2010

System.Threading Namespace inde bulunan Interlocked sınıfını hızlıca inceleyelim.

Lock kullanmak aslında pek de istenilen bir durum değildir. Mümkün olduğunca Lock lardan kaçınmak istesek de zaman zaman mecbur kaldığımız olur. Multithread uygulamalarda paylaşmamız gereken ortak değişkenler olabilir, böyle durumlarda Lock kullanmak gerçekten maliyetli olabiliyor. E hal böyleyken de uygulamanın büyüklüğüne göre ciddi performans sorunları ile boğuşmak zorunda kalabiliyoruz. Uzmanların tavsiyesi ise Lock yerine Interlocked kullanmak :)

Şunu da hatırlatmadan geçmeyelim, çok iterasyonlu bir döngüde Interlocked kullanmak, tek bir Lock içindeki döngüden daha az verimli olabilir.

Performans testi kodlarımız ise şöyle :

Gerçekten de Interlocked ın daha kısa sürede işini bitirdiğini görebiliyoruz. Interlocked in kullanımına dair birkaç örnek kodcuk da şöyle idi :

Basit bir konsol uygulaması üzerinde uygulayıp siz de test edebilirsiniz.

Sunday, November 21, 2010 3:28:24 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]  | 
Wednesday, November 17, 2010

Hem WPF e minik bir başlangıç yapmış olmak hem de Web in dışında bir ortamda AutoComplete TextBox özelliğini görmek amacıyla basit bir uygulama yapalım.

Öncelikle Visual Studio 2010 da yeni bir WPF projesi açalım ve sonra da bir TextBox ve bir ListBox ekleyelim.

Benim ekran görüntüm şu şekilde oldu.

Uygulamamızda, bir .txt dosyada bulunan kişi isimlerini textBox a autocomplete olarak getireceğiz. Bu nedenle uygulama ilk çalıştığında , bu txt dosyası içindeki isimleri bir List e alıp saklayalım.(Dileyenler burada cache de kullanabilir ama ben kullanmadım). Txt dosyanın ismini App.Config dosyamızdan okuyalım ki ileride olabilecek olası bir değişiklikte koda müdahale etmeden yolumuza devam edebilelim.Bu yüzden projeye Add NewItem diyerek yeni bir application configuration file ekliyorum ve içine de dosya ismimi tutacak olan key-value pair değerlerini giriyorum.

Uygulama ilk açıldığında çalışacak kodlar şu şekilde oldu ;

Reflection ile exe nin çalıştığı path i alıp daha sonra config den okuduğumuz dosya ismini bu lokasyon bilgisine ekleyerek, okuyacağımız dosyanın tam path ini StreamReader a veriyoruz. Burada Encoding 1254 e dikkat, Türkçe isimlerde problem çıkarmaması açısından , StreamReader a 1254 kodlu Encoding ile açmasını söylüyoruz. Son olarak da autocomplete yapacak textboxumuza bir event tanımlıyoruz.

Bu olayda çalışacak kodlar da şöyle :

Görüldüğü üzere çok basit bir mantıkla, autocomplete textboxa a girilen değeri, txt dosyamızdan okuduğumuz List içinde arıyoruz, eğer varsa ListBox ta bunları gösteriyoruz.

Son olarak da, autocomplete textbox a suggest edilen (önerilen) değerlerden biri seçildiğinde olması gereken olaylar için, ListBox a da bir olay tanımlıyoruz.

F5 e bastığımızda şu şekilde çalışan bir uygulama görebiliyor olmalıyız.

Kodların tamamını da aşağıdan indirebilirsiniz. WPF tabi ki bu kadar değil, sadece WPF kullanarak uygulama geliştirmeye bir giriş olması açısından faydalı olur umarım.

WpfDeneme1.rar (50,01 KB)
 | 
Wednesday, November 17, 2010 3:08:38 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]  | 
Sunday, November 14, 2010

.NET ile programlama aşamasında çoğumuzun XML ya da HTML dökümanlarıyla uğraşması gerekmiştir sanırım. Bir şekilde bu dökümanları okumamız ve içinden bir takım bilgiler alıp, bazen replace etmek bazen tamamen silmek bazen o veriyi alıp başka bir yerde kullanmak vs. gibi ihtiyaçlar hissetmişizdir.

XMLReader ile XML parse işlemlerini çok rahat yapabiliyoruz ancak HTML için aynı derecede rahat mıyız ? Bence XML kadar değiliz, yani ya oturup kendi parserimizi yazacağız ki aslında buna da gerek yok yazılmışı var, tıklayınız Ya da daha güzel bir alternatif olarak süper bir HAP kullanacağız. HAP dan kastım Html Agility Pack, yanlış yanlış anlaşılmasın. XPATH ya da XSLT ile hiç uğraşmadan kolayca HTML parse edebilen bu library ile aklınıza gelebilecek bir çok HTML parse işlemini de rahatlıkla halledebiliyorsunuz.

Örnek bir senaryo uyduralım kafamızdan, mesela şöyle bir şey olsun, benim bir web portalim var ve bu portalde bir çok link var, hani olur ya bazen bu linkler kırık olabilir, bir şekilde bozulmuş olabilir, e ben de koskoca portalin bütün sayfalarını tek tek elimle kontrol edemeyeceğime göre (aslında ederim ama bu tarz bir yaklaşım mühendis adama yakışmaz), bu durumda ne yapmak gerek ? Şöyle birşey nasıl olur mesela, ben HTML i elime alsam ve “a” taglarının href attributelarını bir yerde toplasam (örneğin bir List) ve daha sonra bu href attributelarına yani linklere WebRequest atsam da link bozuk mu sağlam mı kontrol etsem ? Bence fena bir çözüm olmaz, alternatif başka çözümler de olabilir tabi, her türlü olumlu eleştiriye de açığız...Burada sitenin bütün sayfalarını tek tek indirip parse eden bir yol da kullanabilirdik, ben tek bir HTML üzerinden örnekledim, dileyenler o şekilde kodu modifiye edebilir.

Dikkat edilmesi gereken bir nokta, portalimiz içinde internal linkler olabilir, yani sadece /Anasayfa/Haberler gibi, bu URL lerin internal link olduğundan çalıştığını kabul ederek sadece external URL leri kontrol etmemiz gerekecek, bu nedenle de linklerin valid URL ler olduğunu kontrol edecek bir Regex e ihtiyacımız olacak. Hatta internal linkleri de küstürmeyelim, onlara da bir güzellik yapıp onları da kontrol edelim, madem bir iş yapıyoruz tam olsun değil mi ? Bir de bu href taglerindeki linkler javascript linkleri olabilir, bu javascript linklerini de temizlemek gerekecek yani. (a href=”javascript::dosomework();” gibi)

Kodları da aşağıda ekliyorum, merak edenler inceleyip kendi ihtiyacına göre modifiye edebilir, tepe tepe kullanabilir. Html Agility Pack dll i ve daha detaylı bilgiler için codeplex sayfası tıklayınız

HAP.rar (149,88 KB)

Sunday, November 14, 2010 1:05:54 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]  | 
Wednesday, November 10, 2010

Microsoft tarafından geliştirilen kod frameworku olan All-In-One, birçok developera ilaç gibi gelecek :) Tamamen ücretsiz olan frameworkde developerlar tarafından sıkça sorulan sorulara yönelik kod örnekleri bulabilirsiniz.

1code.codeplex.com

Wednesday, November 10, 2010 10:17:19 AM (GTB Standard Time, UTC+02:00)  #    Comments [0]  | 
Tuesday, October 19, 2010

c# 4.0 la beraber gelen yeni tiplerden biri de Tuples.
Yapı olarak Anonymous typelara benzese de, kullanırken dikkatli olmak gerek. Gereksiz kullanımlarda kodun karmaşık bir görünüm almasına neden olabilir.
Tuples özetle N adet eleman saklayabilen objelerdir. .NET framework 1 den 8 e kadar eleman saklama desteğini veriyor fakat iç içe Tuple lar kullanarak N adet eleman saklayabiliriz.

Anonymous tipleri üzerinden örnek vererek gidecek olursak,

var anyobject={ name="michale", id=7, birthDate=DateTime.Now()} ;

gibi tanımladığımız nesnelerdi. Ayrıca anonymous type ların Read Only olduklarını ve anonymous tipleri metodlara parametre olarak gönderemeyeceğimizi, aynı şekilde metod geri dönüş değeri olarak kullanamayacağımızı da unutmayalım.
Programın fonksiyonel olarak kullanımını kolaylaştıran bu anonymous tipler varken neden Tuples kullanıyoruz peki ? Şu yüzden diyebiliriz mesela; Tuples i metodlardan geri dönüş değeri olarak kullanabiliyoruz, ancak burada şöyle bir trade off var, Tuples, yazılım geliştiriciler pek anlamlı isimler taşımaz. Tuple property leri Item1 Item2 gibi isimler alırlar genelde. Tuples, ne barındırdığı hakkında bilgi içermez.
Eğer iki tuple aynı veri tipinden değerler saklıyorsa, bu Tuple lar birbirine eşittir diyebiliriz. Örneğin, bir noktanın koordinatlarını tutan bir Tuple ile bir popülasyondaki kadın-erkek oranını tutan ik tuple. Bunları Tuple objesinde saklayabiliriz.
Anonymous type larla kıyaslarsak, Tuple yerine Anonymous type kullanmak daha mantıklı olabilir, tabi eğer işimizi görüyorsa, çünlü anonymous typelarla veri hakkında daha çok bilgi tutabiliyoruz. Anonymous type larda bulunan propertyler bize az da olsa bir fikir verebilir. Metoda parametre göndermek ve geri dönüş değeri almam gerekmiyorsa kullanmamam daha faydalı olacaktır.

var testTuple = Tuple.Create(1, 4, 9, 16, 25, 36, 49, Tuple.Create(64, 81, 100, 121, 144));

iç içe geçmiş bir Tuple örneği

Anonymous typeların aksine, Tuples sealed değildir, yani gelişime ve kalıtıma açıktır. Tuples aynı zamanda .NET 4.0 la gelen iki yeni interface i destekler :IStructuralComparable and IStructuralEquatable. IStructuralEquatable Equal() adlı bir metodu işaret eder, bu sayede IEqualityComparer kullanarak tuple daki bütün elemanlar eşit mi kontrolü yapabiliriz. StructuralComparable ve StructuralEquatable ise sıralama ve eşitlik kıyaslama kontrollerinde kullanılır.Aynen bir LINQ sorgusu gibi "orderby ıtem1,Item1" şeklinde kullanıma müsaittir.

Sonlandırırken şunu söyleyebiliriz, Anonymous Types, Tuples a göre daha anlamlı bilgiler taşır ancak metodlara parametre değeri olarak gidemez ve return değeri olarak kullanılamaz da.



Kaynak : MSDN

Tuesday, October 19, 2010 12:46:09 AM (GTB Standard Time, UTC+02:00)  #    Comments [0]  | 
Tuesday, June 29, 2010

Yazdığımız kodların analizini yapması için bir tool a ihtiyacımız var diyenlere FxCop iyi bir alternatif olabilir. Tesadüfen karşıma çıktı ansızın, denedim sevdim, özellikle .net dünyasına yeni girişmiş arkadaşlarımızın çok işine yarayabilir...

Daha fazlası için tıklayalım

Tuesday, June 29, 2010 10:27:58 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]  | 
Monday, May 10, 2010

Bu haftasonu Bilgi Üniversitesi' nde bir dizi Pazarlama Seminerlerine katıldım. Sektörden çok değerli konuşmacılar vardı. (Turkcell, Garanti Bankası, Arçelik, Abdi İbrahim ... vs.) Kendi adıma birçok şey öğrendim(4p, 360 derece, Gerilla Pazarlama vs.) ama bazı yerlerde zaten Yazılım Mühendisliği disiplininden bildiğim konular da vardı. (SWOT Analysis)
Geliştirilen ürün ne olursa olsun, PAZARLAMA departmanınızın başarısı her zaman çok önemli, bu vesileyle Marketing camiasına da bir giriş yapmış bulunuyorum. Hatta seminerde kim nereden geldi gibi bir soru sorduklarında Yazılımcı bir adamın bu seminerlere gelmesine şaşıran ve "Hayatımda ilk defa bir yazılımcıyı böyle seminerlerde görüyorum" diyenler de vardı... Artık yeni sloganımız Rock & Code & Market olabilir :)

Monday, May 10, 2010 4:41:38 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]  | 
Saturday, April 24, 2010

Birçoğumuz stored procedure yaratırken, stored procedure isimlerinin önüne  sp_ ön ekini koyarız. Tabi farklı isimlendirmeler tercih edenlerimiz de olabilir, ancak sp_ ön ekini kullandığımız zaman SQL server bu stored procedure ü, her ne kadar siz sp nin yerini ve ismini tam olarak belirtmiş olsanız da sistem stored procedure ü olarak algılar ve çağrıldığı zaman da master database de arar. Bu da açıkçası ciddi performans kayıplarına neden olur. Bu sebeple sp_ yerine usp_ kullanırsak SQL server bunun kullanıcı tarafından oluşturulmuş bir sp olduğunu anlar...

Saturday, April 24, 2010 5:58:21 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]  | 
Saturday, April 17, 2010

Compile zamanında hata vermeyen ama eğer yanlış ya da mantıksız kullanılırsa run-time da hata veren yepyeni bir tipimiz var artık.
Örneğin;

dynamic x= 7;
x.SayHello(); // gibi bir durumda run-time hatası alırız...

ama mesela şöyle aritmetik ortalama yapan bir program parçası için düşündüğümüzde ise gayet kullanışlı olabilir;

static dynamic ortalama(dynamic x, dynamic y)
{
return (x + y) / 2;
}
static void Main()
{
int x = 3, y = 4;
Console.WriteLine (ortalama(x, y));
}

burada kazancımız nedir ? açıkça görebiliriz ki er sayı tipi için ayrı bir metot yazmamıza gerek kalmıyor...

dynamic ve object tipleri aslında birbirlerine çok çok benzerler, öyle ki run-time da
typeof(dynamic)== typeof(object) size true değerini verir, hata almazsınız. Aynı şekilde

typeof (List<dynamic>) == typeof (List<object>)
typeof (dynamic[]) == typeof (object[])

ifadeleri için de geçerlidir...

Object referansında olduğu gibi, dynamic tipini de herhangi bir object tipine refere edebiliriz;

dynamic x = "selam";
Console.WriteLine (x.GetType().Name); // String
x = 123; // hata vermez !
Console.WriteLine (x.GetType().Name); // Int32

Gördüğünüz gibi yapısal olarak object referanslamadan hiçbir farkı yok... Bu şekilde dinamik operasyonlara müsade eden yapılar kurabiliriz ;

object o = new System.Text.StringBuilder();
dynamic d = o;
d.Append ("selam");
Console.WriteLine (o); // selam !

Bir diğer konu da,

public class Test
{
public dynamic Foo;
}

metodunun aşağıdaki metotla aynı olması,

public class Test
{
[System.Runtime.CompilerServices.DynamicAttribute]
public object Foo;
}

Buradaki avantajımız, dynamic tipini desteklemeyen dillerde, kullanıcılar/developerlar object nesnesi kullanarak yollarına devam edebilirler...

Peki bizim var diye bir tipimiz de var, onunla arası nasıl bu dynamic in diye bakacak olursak;

• var şöyle der, “tipin değerlendirmesini derleyiciye(compiler) bırakalım”
• dynamic de şöyle der, “yokabi gerek yok,tipin değerlendirmesini biz çalışma zamanına bırakalım(run-time)”

dynamic x = "selam"; // Static tip dynamic, runtime tipi ise string
var y = "aleykum selam"; // Static tip  string, runtime tipi de string
int i = x; // run-time hatası
int j = y; // compile-time hatası alırız...

Saturday, April 17, 2010 4:51:40 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]  | 
Sunday, February 28, 2010
ISO/IEC 42010 standartlarına göre, bir yazılım mimarı (takım ya da kişiler) sistem mimarisinden sorumlu olan kişilerdir; şöyle ki Yazılım mimarı, analistlerle ve proje yöneticisi ile irtibatta olur, sistemi değerlendirir, yeni seçenekler önerir ve yazılım geliştirici takımıyla koordine olur. Yazılım mimarı, geliştirme sürecinin bütün evrelerinde bulunur yani gereksinim analizleri ve mimari tasarım, gerçeklenme aşaması, test edilmesi,entegrasyonu ve yayına alınması gibi. Bir yazılım projesinde, mimar devreye girmeden önce, analistler, IT müdürleri ve yöneticiler toplanır, tartışır, değerlendirir ve ortak bir karara varırlar. Yeni bir sisteme ihtiyaç olduğu veya varolan sistemin güncellenmesi gerektiği sonucuna varıldığında ve gerekli bütçe sağlandığında analistler, iş tecrübelerine,şirket süreçlerine, mevcutşartlara ve son kullanıcılara bakarak sistem gereksinimlerini çıkarmaya başlarlar. Gereksinimler listesi hazır olduğunda, proje yöneticisi yazılım mimarı ile toplanır ve elindeki koca listeyi mimara iletir. Mimar da gereksinimleri doğrular ve bu gereksinimleri tasarımda eksiksiz olarak yerine getirmeye çalışır. Unutmadan da söyleyelim, yazılım mimarisinde, kesin ve katı doğrular yoktur ve matematiksel kurallarla karar vermek mümkün değildir.A firmasının çok başarılı bulduğu bir mimari, B firması tarafından hiç beğenilmemiş ve uygulanmamış olabilir. Güzel olan, her iki mimarinin de tamamen doğru olabilme ihtimali. Peki kaç çeşit mimar olabilir ? ISO/IEC ye göre tek tip mimar vardır. Ama Microsoft kendi bünyesinde 4 tip mimar çeşidi oluşturmuş.Bunlar * Enterprise Architect * Infrastrcutre Architect * Technology-Specific Architect * Solution Architect Bu listeyi Microsoft Certified Architect Program da tanınan rollerde görebilirsiniz. MCA hakkında daha fazla bilgi için http://www.microsoft.com/learning/mcp/architect/specialties/default.mspx
Sunday, February 28, 2010 10:56:19 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]  | 
Sunday, February 07, 2010
Tuesday, January 12, 2010

Çok mu gerekliydi, işe yarar bişey midir ? Yoksa gereksiz datalar yığını mıdır ? Nedir bu Twitter ? Girmem girmem dedim inat ettim ama sonunda ben de girdim. Şu an vaktimi çalmaktan başka bir işe yaramıyor... Birileri bu dataları paraya çevirirken biz de günü kurtarıyoruz. Sanırım kıskandım bu saçma sapan işleri yapıp köşe olanları...

Don't follow me, cause i'm lost too dicem ama illa ki de takip ederim diyen olursa http://twitter.com/suleymanpetek

Tuesday, January 12, 2010 9:49:02 AM (GTB Standard Time, UTC+02:00)  #    Comments [0]  | 
Thursday, December 24, 2009

Geçenlerde bir arkadaşımdan duydum, yurt dışında iken almış hediye olarak. Bizim eski Furby' nin biraz daha gelişmişi. Dinozor yavrumuz oldukça gelişmiş yazılımı ile yapay zekanın sınırlarında geziyor. İlgimi çekti, belki de gerçekten iyi bir hediye olabilir ama belirtmeden de geçmeyeyim gerçek bir evcil hayvan gibi ilgi gösterip sevebileceğiniz bu yavrucak aynen gerçek bir evcil hayvan gibi günün birinde ölüyor. Merak edenler için ...

 | 
Thursday, December 24, 2009 9:15:29 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]  | 
Tuesday, December 08, 2009
Tuesday, December 08, 2009 8:05:42 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]  | 
Tuesday, November 24, 2009

Torunlara İthaf Olunur ...

Kısa Dönem askerliğini yapan biri olarak asker adayı arkadaşlarımla bazı tecrülerimi paylaşmak isterim; herşey askerimizin rahatı için. Rahata çok ihtiyacınız olacak. İşte başlıyoruz.

- Yedek subay sınavı ile duyacağınız şeylerin hepsine inanmayın. Yok 1. gün girilirse uzun çıkıyor, 3. gün girilirse kısa çıkıyor diye bir şey yok. Bunun garantisi yok. Kuralı da yok. Ama şu var; mesleğiniz askeriyenin işine yarayacak bir meslekse örneğin elektronik/elektrik mühendisiyseniz yedek subay olma riskiniz var. Bu nedenle Aralık celbi gibi yoğun dönemlerde giderseniz bu riski en hafife indirgersiniz. En riskli celp ise Nisan celbi. Bir çok arkadaşıma uzun dönem çıktı. Burdaki mantık şu; Nisan celbinde başvurular az, risk çok. Aralık celbinde başvurular çok, risk az. Ağustos celbi orta yoğun bir celp, risk de orda düzeyde.

- Sınava Tuzlada girmiştim. Mümkünse çok erken gidin. Sıra numaranızı alın. Tuzla'ya 07:00'da gitmiştim. İçeri girdiğimizde saatler 10:00 idi. 16:00'da işi bitirip çıkmıştım. En iyisi 06:00'da Tuzla'da olup sıra numarası almak. İçeride prosedürel çok iş var. Bu nedenle uzun saatlere hazırlıklı olun. Sınavdaki soruları yapmaya çalışın. Ne hepsini sallayın ne de hepsini yapın derim. Çok göze batmamak lazım :)

- Sınavlar malesef belirsiz bir gün ve saatte açıklanıyor. Acaba açıklandı mı diye site karşısında saatlerce heba olmuştum. Son anda http://www.askeroldum.com'u buldum. O tarihte farklı bir sayfada hizmet veriyorlardı. Bir ücret karşılığında kayıt oldum. Adamlar sonuçlar açıklandığı anda, uyarı smsi attılar. O esnada Metrocitydeydim. Arkadaşa baktırdım. Ve uçak biletini aldırdım. 90 milyona uçtum. Forumda bir arkadaşla yazışmıştım. Benden 1-2 saat sonra 200 milyona aynı yöne bilet bulabilmiş.

- Sınava giderken sakalınızı kesip gidin. Beraber giden bir arakadaşımı top sakalı var diye almadılar. Traş oldu ve 1 saat gecikmeli içeri girdi. Bazı arkadaşlar da sorun yaşamamışlar. Bence risk almayın sakalınızı kesin. Nasıl olsa 10 güne kadar kesilecek. Sonradan bu yazıyı hatırlarsınız :)

- Nasıl olsa askerde keserler demeyin, saçınızı da kestirin. 3 numara yeterliydi sanırım. Ne daha fazla kestirin ne de daha çok. Aza da laf ederler çoka da. Oralarda kestirmeyi de denemeyin. Kuyruk, laf işitmek, bunlara değer mi ? :)

- Giderken mutlaka alınması gerekenler listesinde en önemlilerini yazacağım. Bunlar tecrübeyle oluşturuldu. Hepsinin bir anısı olup, son anda laf işitmekten kurtuldum. Bazıları gereksiz gibi gelse de, düşünmeden alın derim.

1) İçlik. Hele ki soğuk bir yere gidiyorsanız hayatınızı kurtaracak.
2) Bot için kaliteli tabanlık/keçe (Soğuk mekan ise yünlü olmasında fayda var). Bot vurmasına karşı vatka alın. Hayatımı kurtarmıştı. Çok işe yarıyor.
3) Yeşil yün eldiven. İçtimadan önce komutanlar gelene kadar soğukta saatlerce dikilirken ellerinizi korur gitmeden mutlaka alın. Ona rağmen soğuk nedeniyle parmağımda çatlak oldu. Eldiven olmasa kim bilir nolurdu.
4) Bulaşık eldiveni. Oha nasıl yani dediğinizi duyar gibiyim. Acemi birliğine teslim olduktan sonraki gün, 300 kişinin tabildotunu yıkama şerefine nail oldum. 6 saat boyunca suyun içinde olmak hoş bir duyguydu. Bu tür birliklerde temizleme işi sırayla size gelir. Kaçış yok. Kaçmaya kalkarsanız çok göze batarsınız. Bu nedenle bir paket bulaşık eldivenini atın valizinize. Kafanız rahat olsun. Hayat size gol atmasın, size hayata gol atın :)
5) Bol iç çamaşırı ve çorap götürün. Eşofman ve spor ayakkanızı da alın yanınıza. Spor saati için verilen eşofmanlar uymayabiliyor. Hatta tayt gibi duruyor. Birlikte öyle gezmek de hoş olmaz :). Bu tür eşofman ya da kıyafetlerde öle acaip renkler tercih etmeyin. Hatta valiziniz bile göze batmayacak bir renge sahip olsun. Bavulum kırmızı diye az kalsın İstanbul'a gönderiliyordu. Mavi, koyu yeşil gibi renkler yani koyu renkler mantıklı olur.
6) Sarı ve garip görünümlü yastıklara denk düşebilirsiniz. İçim rahat etmez diyorsanız yastık üzerine sermek için ufak bir el havlusu işinizi görecektir.
7) Temiz poşeti & Kirli poşeti. Askeriyede kirli ve temizleri bu poşetler içerisinde saklıyorsunuz. Birliğinizin kantininden de alabilirsiniz.
8) Telefon kartı. Götürüldüğümüz birliğe telefon kartı 2 gün sonra gelmişti. Gitmeden alsaydım 3 gün boyunca telefon kuyruğu olmadan konuşabilecektim. Askeriyede telefon yasak. Acemi birliğine telefon gotürmek hayli riskli. Arama tarama olabilir olmayabilir. Şans. 30 gün ankesörlü telefonlarla işinizi göreceksiniz ve malesef çokça sıra olacak başka şansınız yok.
9) Terlik. Verilen terlik uymayabilir ya da ben rahat edemem derseniz, özel aldığınız terlik yardımınıza koşacaktır.
10) Tırnak makası. Gittiğiniz yerden de alabilirsiniz ama ne gerek var. Alın koyun valizinize. Olur da bulamazsanız artık nasıl kesersiniz onu da bi hayal edin.
11) Ufak bir dikiş seti. Son anda bir düğmenizin olmadağını farkettiğinizde ve içtimaya 5 dk kaldığında hayattan bir gol daha yememiş olacaksınız :)

- Eğer doğu tarafında erişimi zor bir yere düşerseniz, KTM'lerde 1-2 gün belki de daha fazla konaklamak durumunda kalırsınız. En iyi durumda 1-2 güne acemi birliğinize sevk edilirsiniz. Açılımı Kabul Toplama Merkezidir. Geçici konaklama yerleri olduğundan konforlu yerler değildir. Bu durumda yastık için havlu devreye girecektir :)

- Denetlemeler bir asker için en zor günlerdir. Burada sizden ziyade karakol ya da birlik üst makamlarca denetlenir. Bu nedenle stresli günlerdir. Bu günlerde etrafta fazla gezinmeyin (iş kitlenir) komutanlarınızı fazla yormayın. Onlar da sizi yormasın. Bu lafımı hatırlayacaksınız.

- Askerde yazıcı olayım, böylece yatarım demeyin sakın. İnternet olur diye de ümitlenmeyin. Bazen geceleriniz kuru ekran başında geçerken, diğer askerler fosur fosur uyuyor olabilir. Ortamı kolacan edip öyle aday olun. Zaten gittiğiniz birlikte, usta birliğinden bahsediyorum, üniversite mezunu olduğunuzdan dolayı size zaten özel bir iş verilir :)

- Acemi birliğine gittiğinizde 30 gün boyunca eğitim verirler. Dışarı çıkartmazlar. Bu nedenle yanınıza yeterli miktarda para almış olduğunuzdan emin olun. Kabaca 200 YTL bana yetmişti. Gene de fazlasını alın yanınızda bulunsun. Bazen bir çokonat sizi kendinize getirir :)

- Acemi birliğinde herkes aynı saatte aynı işleri yapmaya başladağından dolayı muazzam kuyruklarla karşılaşacaksınız. Kahvaltı kuyruğu, traş kuyruğu hiç bitmeyecek. Sakalınız hızlı uzamıyorsa ve farkedilmiyorsa geceden traş olun. Botunuzu da gece boyayın. Sabah direkt kahvaltıyla başlarsınız, hayat size güzel olur :) Bu arada bot boyasına dikkat. Kirli bir botla asla dolanmayın, çok laf işitirsiniz benden sölemesi.

- Askerde künye, mendil vs. gibi şeyler verilir. Bunların sürekli üstünüzde olması beklenir ve de ara ara kontrol edilir. Bunları mümkünse hiç çıkarmayın. Kaybeden ya da yanında taşımayan arkadaşların çok başı ağrımıştı :)

- Asker malzemeleri alırken hiç masraftan kaçınmayın derim. Çünkü aldığınız o abidik gubidik şeyler sayesinde askerde çok ama çok rahat edeceksiniz. Arkadaşımın zoruyla ufak bir dikiş seti almıştım. Yaf dedim ne gerek var. Denetleme öncesi kopan düğmemi onun sayesinde dikmiştim. Yoksa yaka bağır açık çıkacaktık tümgeneral karşısına :)

- Güneşi bol olan bir yere düştüyseniz güneş kremini ihmal etmeyin. Nöbet esnasında güneşlenirsiniz :)

- Güzel kol saatinizi evde bırakın ve askerde çok moda olan casionun o efsane saatlerinden birini alın. 10-20 TL birşey. Asker malzemesi satan dükkanlar bilir.

- Askerde bir arkadaşım birliğine yedek bot alarak gelmişti. Kendisine oha demiştim. Ama haksız da çıktım. Verilen bot çocuğun ayağına uymadı. Ve yedek bot hayatını kurtardı. Sizin de ayağınız çocuk mezarı gibiyse bence iyi fikir. Asker malzemesi satan dükkanlarda bulunabiliyor. Ama sakın yandan açılan özel botlardan almayın. Komutanlar direkt fark eder :) Tüm bunlar para demek. Ama şunu da unutmayın. En az 5 ayınız bilmediğiniz bir yerde bilmediğiniz kişilerle geçecek. Rahatınız herşeyden önemli. Bazen aldığınız 1 TL'lik bir iğne bile işinizi kolaylaştıracak. Yoksa o askerlik bitmez :)

- Birliğinize zamanında teslim olun. 12 Ağustos, 12 Aralık ya da 12 Nisan 17:00'ye kadar teslim olmanızı beklerler. Siz siz olun en iyisi 14:00 gibi birliğinizde oldu. Sona kalmayın benim gibi de dona kalmayın :) (16:55 de teslim olmuştum, sivil hayat kar kardır demiştim)

Tüm asker adaylarına şimdiden başarılar ve hayırlı teskereler dilerim. Vatan size emanet !!!

 

http://askeradaylari.blogspot.com/ dan alınmıştır...

Tuesday, November 24, 2009 4:39:43 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]  | 
Friday, November 13, 2009


Microsoft yakın zaman önce bir oyun çıkardı. Server Quest 2

Tatilden dönen zavallı bir IT profesyonelinin durumunu, madalyonun diğer tarafından görmek için buradan  buyurun ...

 | 
Friday, November 13, 2009 10:29:52 AM (GTB Standard Time, UTC+02:00)  #    Comments [0]  | 
Friday, October 30, 2009
Friday, October 30, 2009 3:04:25 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]  | 
Tuesday, October 13, 2009
Türkçeye çevirmesine üşendiğim güzel bi yazı olmuş. Keşke vakit olsa da üzerinde yorum da yapabilseydim.
Link burada.7 adımda IT Strateji Testi
Linke tıklamaya üşenenler için de şöyle ;

Before formulating your company's IT strategy, there are a few questions that you should ask.

   1. Is the strategy too generic? IT organizations hardly cater to just one type of need, one kind of customer, or one market segment. The IT strategy must have an overall strategy, but it must also feature tactics that are specific to operating and market demands. Even the most successful enterprises know that one size hardly fits all. IT managers, therefore, should consider the unique needs of each business unit that makes up the entire organization - or they should consider each sample client that makes up the entire market segment.
   2. Is the strategy market-driven? Internal IT implementations are hardly the right starting points for new IT strategies. It is a truism that you cannot achieve the results that you want if you are doing the same things over and over. Step outside the corporate box, and try to look at the needs of your market. Instead of looking to top management for clues, ask the men and women on the ground about their needs as they might offer ideas that can improve the overall operating performance.
   3. Will the strategy be clearly communicated? Business strategies are usually understood by top management - usually in terms of paybacks and end-goals, but actual strategy implementations are usually lost in transmission. From the start, it is wise to document the strategy for wider distribution. Moreover, with this type of document, everyone at the organization can discuss the new policies, technologies, methods, and other possible changes.
   4. Is the strategy realistic? Your strategy must be developed with full regard for the resources needed to make a particular strategy work. Although a new strategy may sound promising, IT managers must think about practical aspects that include funds, technical competencies, and available technologies. Further, the new strategy must compliment – and not hinder – a company's culture.
   5. Does the strategy improve daily operations? Any new strategy must meet the operating and business goals of the company. Otherwise, it is a waste of effort and resources to formulate new policies, acquire new technologies, implement plans, or provide new sets of knowledge. If, at the end of the day, the new strategy does not result in more efficient operating procedures or greater market value, implementing a different strategy makes no sense whatsoever.
   6. Does the strategy have the right support system? By support system, we refer to the top and middle management support - as well as the general resource pool. After all, buy-in by the rank-and-file is just as important as the support of the strategy’s sponsors. Remember that in most change projects, failure is rooted within the people factor. In the same breadth, adoption by both management and the entire staff pushes the strategy towards a more successful path.
   7. Does the strategy adapt to changes in the business environment? Strategies must be dynamic enough to adapt to changes in the business environment. Assumptions must be validated as often as is necessary to either maintain the status quo or to trigger changes in the system.

Bu arada gözümden kaçmıyor, MS yetkilileri size sesleniyorum ! Daha Fr. 3.5 e bakamadan 4.0 la coşuyosunuz, ne bu acele ? Neyin peşindesiniz sorarım size ???

Tuesday, October 13, 2009 10:24:50 AM (GTB Standard Time, UTC+02:00)  #    Comments [0]  | 
Saturday, September 05, 2009

askerde entry girmek de böyle bişeymiş :)

Saturday, September 05, 2009 2:37:57 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]  | 
Tuesday, June 30, 2009

geçenlerde bişeyler ararken aniden karşıma SIP Server diye birşey çıktı.
ilk başta çok da umursamadım ama madem karşımıza çıktı bunu da bilelim dedim
ve az biraz araştırdım (ulu bilge kişilik olarak ben :))
aslında türkiyede nereler kimler kullanır bilmiyorum ama duyduğuma göre
askeriyede bazı yerlerde mevcutmuş.

(Session Initiation Protocol - Oturum Başlatma Protokolü) Server
özetle şöyle ;

İnternet merkezli çoğul ortam iletişim mimarisinin temelini oluşturmaktadır. SIP, haberleşmek isteyen kişiler için IP ağları üzerinden oturumlar açar. Bu kapsamda, bir oturum, IP ağı üzerinden iki veya daha fazla kişi arasındaki etkileşimli bir iletişimdir. Bu basit bir iki yönlü telefon çağrısı, anında mesaj alışverişi veya işbirliği yapılan çoğul ortam konferans oturumu olabilir. SIP IETF (Internet Engineering Task Force - İnternet Mühendislik Görev Gücü) tarafından standartlaştırılan bir Web değerler dizisi protokolüdür. İki büyük İnternet protokolü olan HTTP (World Wide Web) ve SMTP (e-posta) ile benzerlikler taşımaktadır, zira haberleşmek isteyen kişileri temsil etmek için simgesel adresler kullanmaktadır.

SIP; ses ile zenginleştirilmiş e-ticaret, Web sayfası tıkla-çevir, arkadaş listeleri ile anında mesajlaşma ve çok daha fazla özellik ile tümleşik ses ve çoğul ortam servislerini desteklemektedir. SIP oturum yönetimi cihazlar arasında değil, kişiler arasında IP temelli doğal iletişimin desteklenmesinin anahtarıdır. SIP kullanarak, ayrı bilgisayarlar, telefonlar, televizyonlar ve el cihazları vasıtası ile medya içeriği ve katılımcı sayısından bağımsız olarak kullanıcılar birbirlerini bulabilir ve temasa geçebilirler.

SIP çok değişken tipte oturumları açmak üzere bir mekanizma olarak geliştirildi. Bu yüzden SIP, oturum içerisindeki ayrıntıları dikte etmez, ama katılımcıların kapasitelerine dayalı olarak etkileşimi yürütür. Bu basit özellik SIP'ın ölçeklendirilebilir, genişleyebilir ve değişik mimari ve kurulum senaryosuna rahatça uyabilir olması anlamına gelmektedir.

kaynak: www.telepati.com


 

Tuesday, June 30, 2009 11:17:46 AM (GTB Standard Time, UTC+02:00)  #    Comments [0]  | 
Wednesday, June 03, 2009

Wednesday, June 03, 2009 2:32:19 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]  | 
Wednesday, May 20, 2009

Daha Fr. 3.5 ile çok bişeyler yapamadan Fr. 4.0 Betası çıkıverdi. Bu işin sonu nereye gider bilmiyorum ama Microsoftcu yazılımcılara sabır diliyorum... Jason Zander abi baya bi inceleyip bişeyler yazmış, yazıları türkçeye çevirip ben inceledim diyip kimseyi kandırmak istemiyorum, merak eden okusun oradan.. :)

Training kit i inceleyip kasıcam ben diyosan da buraya gel...

Wednesday, May 20, 2009 3:03:55 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]  | 

© Copyright 2009, Süleyman PETEK