The largest and the best home page
Olmazmi search
tr
en
home page sites rsses
   
 There are thousands of mobile phones in Telefonvarmi.com Click here to go Telefonvarmi.com.

Technology - Oguzhan - Kendi Çapında Programcı RSS

Windows Server 2008 R2 Notlarım @ 22-05-2012 00:00

Windows sistemler üzerinde Shared Hosting ile uğraşırken kendime aldığım notları blog'a yazayım dedim malum bilgisayarımda bir yerde unutulup gider ve bende her seferinden amerikayı yeniden keşfetmek zorunda kalırım. Bundan sonra sunucu kurmadan önce aşağıdaki ayarlara bir göz atıp ona göre ayar çekeceğim buda bana referans olsun ;)

Sunucu Geneli

Shared Hosting için bazı servislere ihtiyaç yok boşu boşuna çalışmasınlar.

net stop <servis-ismi> ile kapatılabilir.

Alerter, ClipBook, DHCP Client, DHCP Server, Fax Service, File Replication, Infrared Monitor, Internet Connection Sharing, Messenger, NetMeeting Remote Desktop Sharing, Network DDE, Network DDE DSDM, NWLink NetBIOS, NWLink IPX/SP, Print Spooler, Telephony, Telnet, Uninterruptible Power Supply

Ekran Kouyucusunu kaldır.

Sunucu adını mantıklı bir şeyler koy. Değiştir.

Sunucu saatini kontrol et.

Sunucuya login olunduğunda direkt "Server Manager" consolu açılıyor bunu en alttan."Do not show me console at logon" seçeneğini işaretle. Çıkmasın.

Server Manager console'unda "Security" kısmında "Configure IE ESC" diye bir link var ona tıkla. Administrator için Security Configurasyonu "Off" yap. Yoksa Ekplorer kabusa dönüşüyor. User için açık kalsın ama.

"Notification Area Icons" her zaman tüm iconları göstersin. Her zaman try-icon'ları görmek lazım.

Shared Hosting sunucularında "Sound"'a gerek yok disale et control panel'den.

File Explorer'da Display file size information in folder tips check'ini kaldır. Dosya listelenmesini yavaşlatıyor.

File Explorer'da Show hidden files seçeneği işaretli olsun.

File Explroer'da Hide empty drives işaretini kaldır. Lazım olur.

File Explorer'da Hide extensions for known files types işaretini kaldır yoksa çok yanıltıyor. Birde neyin ne olduğunu görmek lazım.

File Explorer'da Show pop-up description for folder and desktop items seçeneğini kaldır. Gerek yok.

Internet Explorer'dan Show friendly HTTP error messages seçeneğini kaldır Classic ASP hatalarını görüntüleyemiyorsun yoksa.

Disk üzerindeki "Write Caching" özelliğini aktifleştir. Disk > Özellikler > Hardware > Policies altında.

Sunucunun http protokolünde nasıl davranacağını belirleyen registry-key'i.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP altındaki ayarlardan değiştirilebiliyor.

UriEnableCache: Sunucu çok yoğun http isteği altındaysa 1 yapılmalı.

UriMaxCacheMegabyteCount: 0 ise boyutu işletim sistemi ayarlar. 0 kalsa iyidir.

UriMaxUriBytes: http.sys her url'yi cache almasın diye kullanılır. Yüksek boyutlu URL'ler her zaman olmayacağından düşük tutmakta fayda var. 256KB uygundur.

UriScavengerPeriod: Cache' alınan url'lerin çalışmayanlarını cache'den siler. Saniye cinsinden değer alıyor. 120sn'de bir kontrol et gibi. Ben 300 yaptım.

NTFS

NtfsDisableLastAccessUpdate
HKLM\System\CurrentControlSet\Control\FileSystem\

Bu değer bir dosya veya dizinin son erişim tarihini tutar. Aslında bir çok şey için gereklidir (öreğin: incremental backup veya butür olaylar.) fakat kapatıldığında sağlam bir I/O performansıda elde edilebilir. Sunucusuna göre değişebilir sadece loglama yapan dummy bir sunucu ise kapatılabilir. Shared Hosting'de kapatılması pek doğru değil. Bir hacklenme olayında dosyanın sonerişim tarihini bilmek gerekebilir.


NtfsDisable8dot3NameCreation
HKLM\System\CurrentControlSet\Control\FileSystem\
Bu ayar biraz tehlikeli. Windows bir dosya veya klasör yaratıldığından aynı zamanda MS-DOS isminide açıyor yani 8.3 ile tabir edilen olay. Bu değer 1 yaptığında dosya işlemlerine 8.3 kuralı sokulmadan devam edliyor normal olarakda daha performanslı oluyor fakat bazı uygulamalar 8.3 kuralına göre dosya işlemleri yapabiliyor. Bilemedim ne yapalım? fsutil  aracı ile ayar çekiliyormuş ayrıca.

AsynchronousCredits
HKLM\System\CurrentControlSet\Services\LanmanServer\Parameters\(REG_DWORD)
IIS için iyi bir şey varsayılan olarak 512 ama duruma göre arttılabilir. Ben 1024 yaptım.

AdditionalCriticalWorkerThreads
HKLM\System\CurrentControlSet\Control\Session Manager\Executive\(REG_DWORD)

Sunucu güçlüyse arttırılabilir. Önbellekteki dosyaların işlenmesi ile alakalı, ne kadar arttırılırsa o kadar iyi tabi sunucu kaynaklarını göz önüne alarak. Microsoft amca 16 öneriyor fakat 64 iyi gibi oldu testlerde. Burdan baktım: http://msdn.microsoft.com/en-us/library/cc615012(v=bts.10).aspx

MaxThreadsPerQueue
HKLM\System\CurrentControlSet\Services\LanmanServer\Parameters\(REG_DWORD)

Varsayılan 20. Eşzamanlı isteklere cevap verirken açılan threadlere ayar veriyor. Kapasiteye bağlı arttırılabilir. Ne olur ne olmaz Shared sunucularda 64 yaptım. Duruma göre arttırılır ama azaltılması yavaşlatır.

Windows System Resource Manager'ı kur servislerin kullanabileceği CPU ve RAM limitlerini zorlayabilirsin. ApplicationPool bazında bir türlü çalıştıramadım. Çalıştıran olursa haberim olsun.

IIS 7.5

IIS 7.5 için genelde ayarlar %SystemRoot%\system32\inetsrv\config\applicationHost.config altından yapılabilir.

system.webServer/caching
Eğer http istekleri az ise bunu kapatmakta fayda var fakat web server yoğun şekilde kullanılıyorsa açmak lazım. Restart gerekmez.

system.webServer/httpCompression
Sunucuda kullanılan bandgenişliğini azaltabilir fakat CPU kullanım oranınıda yükseltir.
Directory özelliği %SystemDrive%\inetpub\temp
\IIS Temporary Compressed Files
. değerini alıyor. Bunu her siteye özgü ayarlamak lazım.

doDiskSpaceLimiting: Shared hostinglerde kullanılması gereken bir özellik. Müşteriye verilen disk kapasitesinin yanı sıra compression limitininde verilmesi lazım. True yap değerini.

maxDiskSpaceUsage: Siteye göre ayarlamak lazım. Default 100MB geliyor.Sunucu CPU'su ortalamanın altındaysa direkt httpcompression özelliğini kapat.

system.applicationHost/log
Sunucuya en çok yük getiren IIS modülü log modülüdür. Hem CPU, hem disk I/O'su hemde disk boyutu kaynaklarına etkisi vardır.

En az kaynak tükeden loglama yolu Binary olarak tek bir log dosyası tutmak ve günün sonunda onu işlemek oluyor. IIS üzerinden log modülümü "Site" değerinden "Server" değerine çekip ayarlanabilir. Böyle olunca shared hosting'de siteye özel loglar müşteriye verilemez. ek olarak üçüncü party bir log parse aracı gerekiyorki logları anlamlandırabilsin.

system.applicationHost/log/centralBinaryLogFile altındaki değer enabled = "True" olması gerekiyor.

system.applicationHost/applicationPools/applicationPoolDefaults

queueLength: applicationpool'a ne kadar istek geleceğini belirlersin. 1000'den sonra 503 hatası veriyor. Standart web sitesi için 1000 fena değil. Shared hosting'de en fazla 5000 en az 2000 yapılmasını öneririm.

enable32BitAppOnWin64: Tamamen 64bit çalışan bir web uygulaması varsa False yapılması lazım. Fakat hem 64bit, hem 32bit çalışan bir web uygulamasında True yapılması lazım. Bu durumdaki dez avantaj ise True olduğunda en fazla 4GB bellek kullanabilir 64bit olsa bile.

allowSubDirConfig: Bu web sitesinin çalışmasına bir maliyet daha getiriyor. Gerekli olmayan web sitelerinde kaldırmak lazım. IIS her path isteğinden web.config dosyası arıyor bulursa işletiyor. Bence kapatılması lazım.

system.webServer/asp/cache

diskTemplateCacheDirectory:  Default %SystemDrive%\inetpub\temp
\ASP Compiled Templates olarak geliyor. Shared Hosting'de siteye özel path tanımlamak lazım.

maxDiskTemplateCacheFiles: Cache dizininde kaçtane dosya tutulacağını belirler. Bazı kaynaklarda sıfıtr değeri girin hiç tutmasın asp daha performanslı çalışır diyor. Bazısıda 0x7FFFFFFF değerini yani 2147483647 değerini verin diyor. Cache'in Asp performansını arttırdığı kesin en yüksek değer verilirse bol, bol cachelensin derim. Sıkınyı yok.

system.webServer/asp/limits

processorThreadMax: Default 25 geliyor ama tam değeri belirlemek çok zor uygulamaya bakarak optimum değer verilebilir. Bu değer kısaca ASP'nin çalıştırabilceği Thread sayısını belirliyor. Shared hosting için sunucu daki CPU Sayısına göre değer yükseltebilir. Örneğin : 8 Core varsa 50 yapılabilir.

system.webServer/asp/comPlus

executeInMta: Default olarak False geliyor. Shared Hosting veriyorsanız True olması gerekli her ASP uygulaması için ayrı bir Multithread yapı oluşturarak kendi içindeki COM +hatalarınıdan diğer ASP uygulamalarının etkilenmemesini sağlar. Stabilite için True yap.

Asp.Net için Registry Ayarları:

.Net 2.0
HKEY_LOCAL_MACHINE\Software\Microsoft\ASP.NET\2.0.50727.0\Parameters

.Net 4.0
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\4.0.30319.0\Parameters
anahtarının altından yapılabilir. Böyle bir anahtar yoksa yarat.

MaxConcurrentRequestPerCpu: Bu değer ASP.NEt isteklerinin aynı anda kaçtanesinin işletilebileceğini belirler. Varsayılan olarak 12 dir Shared Hosting'de arttırmakta fayda var. 32 yaptım. Şu yazıyı oku ona göre karar verirsin http://haidersabri.com/2008/06/05/scalable-rest-services-in-wcf/

system.applicationHost/applicationPools/ApplicationPoolDefaults/recycling/periodicRestart
Shared Hosting'de çerçevelerinin belirlenmesi gereken bir özellik. ApplicationPool'un hangi durumlarda yeniden başlatılacağını belirler. Genelde değerleri bol keseden vermek lazım ki oto, boka recycle olup müşterinin sessionları kaybolmasın.

memory: KB cinsinden değer alıyor. Shared Hostinglerde sunucuda Ram  sıkıntısı yoksa 2GB yapılabilir (AppPool'da 32bit enable yapmıştık ya) . Fakat site sayısı fazla ise 600MB yapıyorum. Shared Hosting'de bir site 600MB'dan fazla ram kullanıyorsa zaten VPS'e yönlendirmek lazım.

requests: memory az kullanabilir fakat uygulamaya gelen istekler çok fazla olabilir. Bu durumda da CPU kullanımı veya bandwidth kullanımı normalin dışında olabiliyor. Shared Hosting için 2000 request olunce recycle etmesi sunucu stabilitesi için iyi olur.
(queueLength ile bir alakası var mı incele)

time: bu zamana bağlı recycle işlemi sağlıyor fakat Shared Hosting için pek kullanışlı değil. Default 29:00 demişler hiç elleme.

IIS 7.5 için IIS 6.0 bileşenlerini kesinlikle yükleme http protokolünde veya handling'de kötü performansa neden oluyor.


Kaynaklar:

Windows Server Performance Team Blog
http://blogs.technet.com/winserverperformance/

Windows Sysinternals
http://technet.microsoft.com/sysinternals/default.aspx

10 Tips for Writing High-Performance Web Applications
http://go.microsoft.com/fwlink/?LinkId=98290

How to disable the TCP autotuning diagnostic tool
http://support.microsoft.com/kb/967475



C# Refaktoring Ipuçları @ 25-12-2011 00:00

Yazılım sektöründe ve hatta BT gezgeninde genel olarak söylenen bir söz vardır "Çalışıyorsa Elleme".
Bazı sistemlerde doğru olsada yazılım geliştirme prensipleri çerçevesinde bu çok iyi bir şey değildir. Çünkü çalıştırdığınız sistemi her zaman için daha iyi, daha hızlı ve stabil hale getirme şansınız vardır.
Diğer taraftan bir işi çözmek için ilk geliştirdiğiniz algoritma genelde ileride probleme yol açabilecek (Code Smell) potansiyele sahiptir ki görüp geriye dönüp gereğince düzeltmek gerekir. İşte bu düzeltme, toparlama yaparken geçirdiğiniz zamana ve kodlarda yaptığınız iyileştirmelere, değişikliklere de yazılım aleminde "Code Refactoring" deniyor.

Kavramlar ve işin teorik tarafı ile Yazılım Mühendisleri ve Bilgisayar Bilimcileri uğraşa dursun biz direkt koda'a dalalım;

Not: Daha fazla örnek, teori ve derine inmek isterseniz "anti pattern, code smell, code stink" gibi şeyleri aratabilirsiniz.

 

Örnekleri verirken yukarıdaki mantıkta ilerleyeceğim. Önce şişman, yavaş koda bakacağız, daha sonrada seksi kod'a bakacağız böylece aradaki fark yukarıda olduğu gibi daha çarpıcı görünecek. Tabi seksi kod'a bakıp, yukarıda ki bayana baktığınızdaki etkiyi alıyorsanız da bilgisayarın başından kalkma vaktinizin geldiğini hatırlatmak isterim.

İnceden başlayalım;

Aynı değişken tipleri, aynı değeri alacaksa kullanabileceğimiz bu yazım seçeneği bir kaç değişkende pek kullanışlı olmasada bazı durumlarda onlarca değişken tanımlamanız gerekdiğinde uzun kod yığınlarında sizi kurtaran bir etki yapar. Aklınızda olsun.

Yukarıda ki örnek aslında çok sık karşılaştığımız bir olay. String'in veya objenin belirlie bir değerde olup olmadığını en rahat if ile buluruz ve koşulları işletiriz fakat programcı dostu if her zaman işinizi kolaylaştırmaz bazende uzatır. Özellikle bool tipi dönüşlerinde kodları kısaltmamızı sağlayan bir düşünce tarzı diyebiliriz.

Başka bir örnekde try..catch kullanımı ile ilgili. Herkesin bildiği gibi bu bloğu kullanmak CLR için oldukça maliyetli o nedenle try...catch blog'unu bir koşul olarak kullanan programcıyı dövseniz kimse ses çıkarmaz. .Net zaten try-catch kullanmayalım diye bize bir sürü method sunuyor. Örneğimizde dosyanın var olup, olmadığını kontrol etmek için kolaylıkla File.Exists() methodunu kullanabiliriz. Böylece try..catch kullanmamıza gerek kalmaz ve kodumuz daha hızlı çalışır.

Diğer taraftan FileStream disposable bir class olduğundan using içinde kullanmak daha doğru olacaktır, ki işimiz bittiğinde otomatik olarak GC'nin ellerine emanet edilsin.

 

Ve tabiki string işlemleri. En çok can çekiştiğimiz ve takla attığımız konulardan biride string işlemleri. Neyse ki .Net bize string üzerinde işlemler yapabilmek için bir ton araç sunuyor. Sol tarafta gördüğünüz string birleştirme işlemi (concatanate derler) her ne kadar dil kurallarına uygun olsada çalışması yavaş, yazılması ve okunmasıda zordur. Daha hızlı, okunması ve yazması kolay hali ise sağ tarata string.format kullanılarak gerçekleştirilmiştir. Tabi string birleştirmeden söz ediyorsan StringBuilder'dan da söz etmemiz gerekir ki aşağıda bir örnek mevcuttur.

Başka bir kötü if örneği. Her ne kadar süslü parantezlerle kodu uzun gösterip "oha, arbiden kısalmış" dedirtmeye çalışamda burda şairin demek istediği şey "refaktoring faydalı bir şey" mesajı dır. Yine burda doğru yerde, doğru koşulun kullanımın yapmış olduğu etkiyi görebilirsiniz. Teşekkürler :?

Yine doğru zamanda ve doğru yerde kullanılan bir koşul operatorü "??". Bir class'ın null olup olmadığını kontrol eder ve null ise koşulu işletir. If burda yine yapacağını yapmış ve işleri zorlaştırmış fakat aynı imdadımıza ?? koşarak işleri yoluna sokmuş.

Bu sefer işler biraz değişik gerçek hayata daha yakın bir method ile karşı karşıyayız fakat kod harabe! En baştaki array'ın elemanı olup olmadığı daha sağlıklı bir yolla kontrol edilebilirdi, ek olarak yine string birleştirme işleminde .Net'in nimetleri kullanılmamış.

Refaktoring sonrası String'imizi StringBuilder yaptık ki string birleştirme işlemlerinde maksimum performansı alalım, sonra Array'ın bir elemana sahip olup, olmadığınız Linq'in Any() Extension methodu ile kolay bir şekilde öğrendik, arkasındanda AppendFormat() methodu ile de okunaklı bir şekilde stringimizi oluşturduk.

Bu sefer şişman olan sağ taraf oldu. Neden? çünkü kod'u her inceleyen tarafından ne yaptığının anlaşılması gerekiyor bu nedenle biraz daha pseudo'ya kaçırdık. ExecuteTask() methodundan errorCode'a bir değer atanıyor ve o değere görede methodlar çalışıyor fakat sağdaki kodda bir sıfır değerinin ne olduğunu bilmiyoruz. Halbuki bilmek gerekiyor ki bir şey değiştireceksek ilgili methodda değiştirelim. Bizde gittik class'ın başına bu değişkenleri const tipinden ekledik ve condition'a tekrar verdik. Şimdi neyin ne olduğu dahada anlaşılır oldu.



.Net ile PowerShell Module Geliştirme @ 13-12-2011 00:00

Powershell geçtiğimiz yıllarda hayatımıza girdi ve Windows üzerinde scripting'e yeni bir boyut kazandırdı. Arkasındaki güçlü .Net Framework desteği sayesinde de Powershell ile hayal ettiğiniz her hareketi yapar hale geldik. Eskiden Batch Scripting ile 30 satırda yapılabilen işler Powershell kullanılarak tek satırla indirgenebiliyor. Tabi her zaman tam ihtiyacınıza uygun komut bulunmadığından genişletmek veya uygulamanızı command line ile de yönetmek isteyebiliyorsunuz.

(Aga, laga luga yapma hepsini okuyacak vaktim yok, bana kodu ver modundaysan proje dosyasına burdan ulaşabilirsin.)

İşte bunun için PowerShell yazılım geliştiricilere genişletilebilir özellikler sunuyor. Bakalım bu özelliği .Net üzerinde nasıl kullanabiliyormuşuz.

PowerShell Modülümüz Ne Yapacak?

Bir alanadının (domain) bilgilerini alıp ekrana basan basit bir Whois modülü yazacağız. Bunu Powershell üzerinden de yapabilirz tabiki fakat konu PowerShell modülü nasıl yazılır olduğudan .Net tarafına değineceğiz ;)

Neler Lazım

  • Genelde Windows 7 ile birlikte Powershell'in 1.0 sürüm yeterli fakat 2.0 sürümüde yükleyebilirsiniz. Sürümlerle ilgili burdan detaylı bilgi alabilirsiniz
  • Visual Studio 2010'un herhangi bir sürümü.
  • PowerShell modülü geliştirebilmek için Powershell Referansları.
  • .Net Framework 2.0 ve üzeri.

PowerShell Referansları

Genelde;

C:\Program Files\Reference Assemblies\Microsoft\WindowsPowerShell\v1.0

dizini altındadır. Burda gerekli olan dosya System.Management.Automation.dll ve Native olarak gelen System.Management referansınıda projenize eklemeniz gerekir.


Başlangıç

Powershell modülü geliştirmek içn ortamı tedarik ettikten sonra Visual Studio üzerinden New > Project > Class Library komutunu veriyoruz. PowerShell modülü için .Net 2.0 CLR versionu gerekli olduğundan .Net Framework 3.5 seçiyoruz.


.Net 4.0 neden seçmedik diyebilirsiniz. Modülü .Net 4.0 ile de geliştirebiliriz fakat bunun için Powershell.exe.config'e bir talimat vermemiz gerekir. Yeri gelmişken verelim.

C:\Windows\system32\WindowsPowerShell\v1.0 dizininde yani $pshome (Bunu powershell içinde çağırırsanız aynı klasörü döndürecektir) powershell.exe.config dosyasını bulun. Yoksa da yaratın. Daha sonra aşağıda ki tanımlamayı gerçekleştirin.


Bundan sonra .Net 4.0 altında PowerShell geliştirebilirsiniz. Fakat bu projede gerek olmadığından ben .Net 2.0 ile idare ediyorum.

Kod

Açıklama

Kod'a baktığımızda ilk dikkatimizi çeken Cmdlet tipinden WhoisCommand classımızı türetiğimiz dir (inheritance olayı).
Standart bir Powershell komutu şeklinde hareket etmesini sağlamak için Cmdlet'den türetiyoruz. Yine Cmdlet sınıfının kurallarından CmdletAttributes'ini deklare etmemiz gerekiyor ki Powershell modülü çalıştırırken hangi maksatla çalıştırıldığını bilsin.

Burda biz veri çağıracağımız için VerbsCommon.Get enum'unu kullandık fakat herhangi bir değer tanımlayacak olsaydık VerbsCommon.Set de diyebilirdik. Bu konu ile ilgili ayrıntılı bilgiyi buradan alabilirsiniz. Uzun uzun hepsini saymak 5 sayfayı alır :)

NounName

CmdletAttribute'nin diğer bir parametreside NounName. NounName Powershell ortamında komutun isminin ne olacağını belirler burda "Whois" dedik fakat Verbs'lerden Get'i seçtiğimiz için Powershell ortamında komutu çağırmak için "Get-Whois" şeklinde kullanmamız gerekiyor.

Parametereler

Bu ortamda parametere oluşturmak için basitçe ilgili class'da property oluşturup ParameterAttribute vermeniz yeterli. Burda dikkatinizi çekmiştir, Parameter özelliğinin Mandatory parametresi true. Bu demektir ki, parametre Powershell ortamında zorludur. Bizim senaryomuzda da zaten girilmezse Whois çalışmayacağından bunu "true" olarak verdik. ParameterAttribute'sinin full referansı için buradan kastırabilirsiniz.

Tanımlaraları yaptıktan sonra hemen ProcessRecord() methodnu override edip içini dolduruyoruz. Bu method Powershell'in giriş methodu olduğundan herşey burda çalışıyor dolayısıyla bizim methodlar çalışıyor ve whois bilgisini, whois serverdan talep ediyor. Herşey yolunda gidersede aldığımız string değeriniz WriteObject(); methodu ile ekrana basıtırıyoruz.

Import-Module

Geliştirdiğimiz modülü PowerShell ortamında kullanabilmek için Import-Module komutunu kullanıyoruz. Şöyle ki;


Modülümüzü kontrol etmek istersek de Get-Module komutu işimizi görüyor.

 

Yukarıda gördüğünüz gibi Name Projemizin ismi, ExportedCommands ise Get-Whois olarak PowerShell ortamına yansımış durumda.

Bundan sonra "Get-Whois domain.com" komutu vererek istediğimiz alanadının whois bilgilerine ulaşabiliriz.


Hepsi bu kadar. Umarım yardımcı olmuştur.

Vs.Net 2010 Proje Dosyası : PoshWhois.zip



Windows Azure'u Yönetmek @ 30-11-2011 00:00
MaestroPanel'in Azure'da çalışacak olan versionunu düzenlerken düzgün çalışması için bir kaç özel ayar yapmak gerekti. Fakat Azure kontrol panelinde IIS ile ilgili ayar yapılabilecek arayüz bulunmuyordu.

Biraz araştırdıktan sonra Windows Azure için "Startup-Task" konfigurasyonunun olduğunu öğrendim.

Projenizde ki ServiceDefinition.csdef dosyası web uygulamanızı Azure'a yüklendikten sonra nasıl hareket edeceğini hangi portu ve hangi protokolü dinleyeceğini belirleyen tanımlalar için vardır.

Bu dosyanın içinde ki konfigurasyon node'larından bir taneside projemiz çalıştırılırken işletilecek komutları tanımlamamızı sağlayan "Startup" node'u.

Bu node'un içine tanımladığınız Windows Command dosyası yani batch dosyasını aynı Command Prompt gibi düşünün. Girdiğiniz komutlar windows'da çalışıyormuş gibi Azure tarafından işletilecektir.
Daha sonra projenize bu dosyayı dahil ediyorsunuz tanımlıyorsunuz ve Startup nodunu düzenliyorsunuz.

Ayarla.cmd
REM queueLength arrtır %windir%\system32\inetsrv\appcmd set config  -section:system.applicationHost/applicationPools /applicationPoolDefaults.queueLength:"5000"  /commit:apphost  REM Timeout'u düşür. %windir%\system32\inetsrv\appcmd set config  -section:system.applicationHost/webLimits /connectionTimeout:"00:01:00"  /commit:apphost  REM Process'i arttır %windir%\system32\inetsrv\appcmd set config  -section:system.applicationHost/applicationPools /applicationPoolDefaults.processModel.maxProcesses:"4"  /commit:apphost  REM 64bit uygulamalara izin ver. %windir%\system32\inetsrv\appcmd set config  -section:system.applicationHost/applicationPools /applicationPoolDefaults.enable32BitAppOnWin64:"False"  /commit:apphost 
Ayarla.cmd dosyasını ben şu şekilde projeme ekledim.

Bundan sonra ServiceDefinition.csdef dosyamızıda aşağıdaki gibi düzenliyoruz.



Kaynaklar:


Microsoft FTP 7.5 için İpucu (useDomainNameAsHostName) @ 29-11-2011 00:00

MaestroPanel için Windows Server 2008 R2 ile birlikte gelen Microsoft FTP 7.5 desteği verdik fakat Hoster'ların çok alışık olmadığı bir authentication yöntemi var.

Microsoft FTP 7.5 ile birlikte Vhost desteği gelmiş yani FTP alanları birbirinden tamamen izole olacak şeklide çalışması sağlanmış. Bu Ms FTP'nin hem daha güvenli, hemde daha yönetilebilir olmasını sağlamış.

Bununla beraber IIS 6.0'da alışık olduğumuz kullanıcı adı ve şifre ile giriş yaptığımız kimlik doğrulaması yerine Domain|Kullanıcı adı ve Şifre şeklinde bir kimlik doğrulama mekanizması konulmuş.

Örnek vermek gerekirse. oguzhan.info MS FTP 7.5 üzerinde çalışıyor diyelim ve FTP kullanıcı adımda ogzftp olsun, şifremde p@sssw0rd olsun. Login olabilmem için
Kullanıcı adı: oguzhan.info|ogzftp Şifre: p@ssw0rd 
girmem gerekiyor. | pipe karakterini domain ile kullanıcı adınız arasına koymalısınız. Bunu kaldırabilirmiyiz diye biraz araştırırken, kaldırılamdığını öğrendim fakat biraz daha son kullanıcıya yakın hale getirebilmemiz mümkün. Aşağıdaki script ile | pipe karakteri yerine "@" veya "\" karakteride kullanabilmeniz mümkün.
appcmd.exe set config  -section:system.ftpServer/serverRuntime /hostNameSupport.useDomainNameAsHostName:"True"  /commit:apphost 

C# Kodunu vermek gerekirse.

using System; using System.Text; using Microsoft.Web.Administration;  internal static class Sample {      private static void Main() {                  using(ServerManager serverManager = new ServerManager()) {              Configuration config = serverManager.GetApplicationHostConfiguration();                          ConfigurationSection serverRuntimeSection = config.GetSection("system.ftpServer/serverRuntime");                          ConfigurationElement hostNameSupportElement = serverRuntimeSection.GetChildElement("hostNameSupport");             hostNameSupportElement["useDomainNameAsHostName"] = true;                          serverManager.CommitChanges();         }     } } 

Bu işelmlerden sonra son kullanıcıya domain.com@username veya domain.com\username şeklinde kullanıcı adı verebilirsiniz.

Bu şık olmayan kullanıcı adından tamamen kurtulmak için FTP 7.5 için geliştirme yapabileceğiniz programlama arayüzleri mevcut. Örneğin FtpAuthenticationProvider kullanarak ayrıca kendiniz bir kimlik doğrulama yazabilirsiniz veya IIS 7.5 üzerinde yine IIS 6.0'ın FTP serverını kullanabilirsiniz.



IIS 8 @ 16-09-2011 00:00
Microsoft'un Build konferansı ile birlikte ortalık bir hayli hareketlendi ve her zaman olduğu gibi hayatımıza yeni kavramlar girdi.

Bunlardan en önemlisi sanırım Windows 8'de görmeye alışacağımız Metro UI. Bu yeni nesil Windows'unun masaüstü temelini oluşturuyor ve developer'a çok esnek bir yapı sunuyor. Konumuz bu değil ama şunu önemle vurgulamak isterimki HTML + JavaScript ile Metro UI uygulaması yazabiliyorsunuz! Ayrıca MetroUI'nin altında çalışması için eski Win32 benzeri bir API sisteminde WinRT (Windows Runtime) olacağını belirteyim.

IIS 8

MaestroPanel projesine başladığımdam beri IIS ile çok içli dışlıyım. Windows 8'in Developer sürümünde ilk baktığım şey IIS versionu oldu ve direkt IIS 8 olarak geldiğini gördüm.

İlk dikkatimi çeken IIS isminde yeni bir Management Console'un geldiği (mmc) klasik InetMgr.exe var fakat IIS.mmc ile açarsanız bunu sarmalayıp açılışta Web Platform Installer'la beraber ek özelliklerde geliyor.

Şimdilik arayüzde çok büyük değişiklikler görmeyi beklemedim çünkü IIS 7.0 ile beraber zaten arayüz radikal biçimde değişmişti. IIS 8 sürümü, 7.0 ile gelen konseptin daha oturmuş hali, yani yeni özelliklerden ziyade iyileştirmeleri ve düzeltmeleri içeren bir sürüm olacağa benziyor.

Neler Yeni?

Tabi arayüzde gözle görülür bir şey olmadığından UI tarafında herşey aynı diyebilirim. Fakat yenilik olarak şu maddeleri sıralayabiliriz.

  • Şu andaki sisteme göre SSL sertifikalarını Windows yönetiyordu ve site ile ilişkilendirme içini IIS yapıyordu. IIS 8 ile beraber SSL yönetimide IIS'e verildi ve böylece Windows'un SSL sınırlamalarından kurtulmuş olduk. Bu hoster'ların seveceği bir özellik lakin Windows 500 sertifika ile sınırlıydı.
  • IIS8 ile gelen diğer bir iyileştirme ise NUMA (Non Uniform Memory Access) bu iyileştirme hafıza kullanımını daha performanslı hale getiriyor dolayısıyla IIS daha verimli çalışıyor.
  • Sonunda derdirtecek bir özellkle CPU limitlemesi ile ilgili. IIS'in en başından beri CPU limitleme özelliği mevcuttu fakat bir türlü düzgün çalışmıyordu ve bizde çeşitli mekanizmalarla limitlemeler yapma gereği duyuyorduk. IIS 8 ile birlikte bu özellik gerçekten sağlanmaya başlanacakmış. Özellikle cloud sistemlerde çok işe yarayacak bir özellik diyebilirim.
  • Güvenlik alanında Dynamic Access Control diye yeni bir yaklaşım geliyormuş. Bu özellik sayesinde kullanıcılar dosya sistemine aldıkları etiketlere göre erişebileceklermiş henüz denemedim ama ilgi çekici bir özellik.

İlk duyduklarımız ve gördüklerimiz bunlar. Windows 8'in Server sürümünü test etme fırsatı bulursam daha detaylı inceleyip yeni IIS'in neler yapabileceini göreceğiz bakalım.



MaestroPanel Screencast Serisi @ 16-08-2011 00:00
MaestroPanel'in özelliklerini anlatan screencast serisine başladım. Hedefim haftada bir video yayınlamak. Bunlardan ilk ikisini geçen hafta ve bu hafta yayınladım. Ekstradan duymayanlar içinde buraya yazıyorum. ;)

MaestroPanel Screencast #1 - Sunucu Yönetimi http://bit.ly/ru1SYv
Panel'de sunucular nasıl yönetiliyor, ne şekilde ekleniyor gibi sorulara cevap bulabileceğiniz video.

MaestroPanel Screencast #2 - Plan Yönetimi http://bit.ly/nHXuMS
Panel'de dağıtık yapıdaki modulleri nasıl yönetebileceğiniz, bayi ve domain planları nasıl oluşturabileceğinizi ve limitlemeyi nasıl gerçekleştirebileceğiniz anlatan videomuz.

Proje ile ilgili son durumu belirtmek gerekirse,
MaestroPanel RC seviyesine geldi, hosting firmaları ile kapalı beta testlerimiz devam ediyor. Penetration testlerinden sonra Release etmeyi düşünüyoruz.

Yakın zamanda bir Sistem Yöneticisi, Bir Front-End developer ve birde Back-End developer olmak üzere ufak bir ekip kurmayı planlıyoruz. Bu geniş kapsamlı proje ile ilgilenen arkadaşlar ping @ maestropanel.com adresine e-mail gönderirlerse şimdiden adayları belirleyebiliriz.

Projeye destek veren herkese burdan teşekkürlerimi sunarım.

Takipte kalmak için:


Razor Ninja'sının El Kitabı @ 09-07-2011 00:00

MVC3 ile birlikte Razor ViewEngine geldiğinde tamda yeni bir projeye başlıyordum fakat Spark ile devam etmeyi düşünüyordum. Spark ile Razor arasında ufak bir kararsızlıktan sonra hem ekosistemi hemde devamlılığı olacağını düşündüğümdem Razor'u seçtim. Alışana kadar biraz sıkıntılıydı çünkü bazı temel işlemleri yapmak için ufak tefek ipuçlarını bilmek gerekiyordu araştırırken öğrendiğim bu ipuçlarını derleyip böyle bir Tutorial hazırladım. Okuyun ;)

String atraksiyonlarında <text/>

Razor direkt HTML ile iç, içe kullanılabildiğinden bazı durumlarda C#'ın içinden string çıktısı vermek gerekebiliyor. Böyle durumlarda başvurabileceğiniz akıllı bir kaçış tag'ı olarak <text> işe yarıyor

Çıktı:

$('#1').text('Deneme 1');
$('#2').text('Deneme 2');
$('#3').text('Deneme 3');
$('#4').text('Deneme 4');
...

@: Blok'u

Akıcı bir Razor sytax'ı için kullanılabilecek bir özellikte @: işaretlemesi. Bu işaretleme <text> ile eşdeğerdir tek farkı tek satır olarak kullanılmaktadır. <text> ise birden fazla satırda string çıktısı vermek için kullanılır ve bu tagların arasındaki işaretlemeler ViewEngine tarafından render edilmez. @: kullanımına örnek;

Çıktı:

İşlem Gerçekleşti

Comment'ler nasıl olacak peki?

Razor'da da her ViewEngine'de olduğu gibi kod içine açıklama eklemek için kullanabileceğiniz işaretlemeler vardır, tabi klasik olarak bildiğimiz \\ veya ' olarak değil onun yerine @* ... *@ şeklinde. Bu işaretlemeyi kullanılarak sunucu taraflı kod yorumları ekleyebiliryorsunuz.

Tek satır için

gibi. Burda ki güzellik hem tek satır hemde çoklu satırda aynı işaretlemeyi kullanıyor oluşumuz.

Strongly-Typed View

Klasik ASP.NET ViewEngine'inde View'i belirli bir Model ile kullanmak istediğimizde sayfanın en üstünde attributes'lerden oluşan uzunca bir tag eklemek gerekiyordu. Razor'da bu @model işareti ile kolayca gerçekleştirebileceğiniz bir işlem.

Örneğin:

@Html.Raw

HTML'i Encode ederek ekrana veren güzel bir özelliktir. Klasik ASP.NET'de ki Server.HtmEncode() fonksiyonuna benzer. Aynı işi gören diğer bir yardımcı komut ise HtmlString().

Kullanımı basittir:

Çıktısı:

<h1>Deneme</h1>

olacaktır.

Namespace'leri nasıl kullanabiliyoruz?

Örneğin Razor sayfasının içinde System.IO namespace'i altından bir Class kullanmak istiyoruz. Bunun için sayfasnın @model çağrısının altına @using çağrısını yapmanız yeterli.

@using System.IO

gibi.

Sayfa içinde @function

Kullanışlı özelliklerden bir taneside Razor sayfası içinde sadece o sayfaya özel fonksiyonlar üretip, kolaylıkla kullanabilmemiz. Örneğin: Verdiğiniz string'i ekrana kırmızı yazan bir sayfa içi function yazmak istersek.

şeklinde yazabiliriz. IHtmlString döndürdüğüne dikkat etmişsinizdir Razor bunu render edilecek html string'i olarak algılayacak ve browser'a yorumlaması için gönderecektir.

Koşullar (Conditions) nasıl yazılyor?

Razor içinde ?:, switch, if.. koşulları yazmak doğal olarak mümkün bunun için @() işaretlemesi kullanılıyor.

Örneğin ?: condition'ına örnek vermek gerekirse.

Model.Status değeri true olduğu için ekrana direkt Tamam yazılacaktır.

If konuşulu için ise;

Burda dikkat edilmesi gereken nokta @: kullanıldığı için satır atlamalarının zorunlu olduğu. Diğer bir If koşulu örneği ise;

Burda HTML tag'ı ile string'i yazıdıryoruz fakat bu her zaman istenen bir durum değil o nedenle <text> ile'de kullanılması mümkün.

text ile kullandığınızda sadece "Tamam" string'i ekrana basılır.

Razor Delegate

Razor Delegate'leri kullanarak daha temiz, okunaklı kodlama yapılması mümkün. Bazı durumlarda ise karmaşıklığı ve işleri oldukça kolaylaştırıyor. Hemen örnek vereyim;

İhtiyacınıza göre genişletmeniz mümkün, parametre dynamic olduğu için kendi tipleriniz içinde çeşitli fonksiyonlar geliştirip daha kullanışlı fonksiyonlar üretebilirsiniz tabi.

@Helper

Razor bünyesinde bir çok yardımcı method barındırmasına rağmen ihtiyacınıza uygun Helper methodları yazmanız kaçınılmazdır. Bu methodlarıda sadece Razor sayfas içerisinde oluşturup, diğer sayfalarda da kullanabilmek isteyebilirsiniz işte bunun için @Helper işaretlemesi ile oluşturacağınız method'ları kullanabilirsiniz. Şöyle ki;

Çıktısı:

118,00 TL

Burdaki trick ise KdvDahil fonksiyonunu yazdığınız Razor sayfasını Projenizde ki App_Code sayfasının altına gönderdiğinizde KdvDahil fonksiyonuna her Razor sayfasından ulaşabiliyor olmanızdır. Örneğin KdvDahil fonksiyonunun yazılı olduğu Razor dosyasının ismi Fiyatlar.cshtml olsun. KdvDahil fonksiyonuna diğer Razor sayfalarından ulaşmak için Fiyatlar.KdvDahil() şeklinde kullanabilmeniz mümkün.

HTML data-* ve Class Attributes

@Html.ActionLink methodu içinde HTML5 ile birlikte gelen data-* attributes'ini kullanmak isteyebilirsiniz MVC3 bunun için Anonymous Type'lerden yararlanıyor fakat HTML'e göndereceğiniz attributes syntax'ı Anonymous Type'larda kullanılan cinsten değil. Örnekle açıklayalım.

<a href="/Home/Delete" data-id="45">Database</div>

çıktısını ActionLink kullanabilmek için aşağıdaki şekilde yazmalısınız.

dikkat ederseniz data_id olarak yazdık fakat HTML'e data-id olarak yansıdı buda ActionLink methodunun akıllı özelliklerinden bir tanesi.

ActionLink için verebileceğimiz diğer bir ipucuda class kullanımı. class .Net'de bir özel bir kelime olduğundan, herhangi bir değişkene'de class ismini verirken bunun değişken olduğunu belirtmelisiniz;

<a href="/Home/Delete" data-id="45" class="shadow-text">Database</div>

çıktısını alabilmeniz için ActionLink aşağıdaki şekilde olmalıdır.

@ burda bir çeşit escape karakter olarak kullanılabiliyor.

@section

Section'lar genel şablonlar oluşturulmasında kullanılan son derece yararlı bir Razor fonksiyonudur. MasterPage'de belirleyeceğiniz ve isimlendirdiğiniz section'ı herhangi bir Razor sayfasında özel olarak kullanabilirsiniz.

Önce _Layout.cshtml içinde bir section tanımlamalısınız.

Daha sorna Layout eklenmiş bir sayfada bu section'ı çağırabilirsiniz.

@section jquery{
    $('#body').append('Section Çağırıldı');
}

gibi. Burdaki örneğimizde Razor sayfamıza jquery'i tekrar initialize etmeden _Layout üzerinden çalıştıdık.

@Html.RenderPartial

Kendi oluşturduğunuz kontrolleri veya PartialView'leri Razor içinden çağırmanız mümkün. Aşağıdaki şekilde;

Burda dikkat etmeniz gereken ";" noktalı virgül. Çünkü {..} parantezleri açtığnızda C# moduna girmiş oluyorsunuz. Menu.cshtml, PartialView'imiz ~/Views/Shared/ dizini altında olmak zorunda çünkü Razor ViewEngine'inde bu path'ler default olarak aranıyor. Fakat bu Path'lerin dışında da PartialView'lerinizi Render etmeniz mümkün,

PartialView'inizi herhangi bir Model ile kullanacaksanız bu Model'i parametre geçmek için aşağıdaki syntax'ı kullanabilirsiniz.

İki @@, Bir @ eder

Bazı durumlarda Razor'dan string geriye döndürürken @ işareti geçen string'ler döndürmeniz olası bu durumda @@ olarak verirseniz Razor bunu algılayıp normal string gibi işleyecektir.

Normal string olarak algılanır.

@Deneme String@

Razor Syntax'ı olarak algılanır.

Ek olarak e-posta adreslerini Razor otomatik algılar ve ona göre davranır yani email adreslerinde böyle bir harekete gerek yok, direkt yazabilirsiniz.

@Url.Action

Url.Action, Controller'de oluşturduğunuz Action'ların sadece adresini verir. Ben genelde JavaScript'in içinde ajax çağrılarında kullanıyorum.

Burda çıktı /Home/Index/1 şeklinde geliyor.

Razor içinden SQL

Şimdiye kadar hiç kullanmadım fakat aklımızda bulunsun. Razor'da @{..} blogu içinde C# moduna geçtiğimizi daha önce söylemiştik, e madem C# moduna geçiyoruz o halde class içinde kullandığımız tüm atraksiyonlarıda kullanabilmemiz normal. Aşağıda Razor sayfasından sql sorgusunun çalıştırılmasına dair bir örnek var.

bildiğimiz PHP gibi...

Şimdilik bu kadar, yeni fonksiyonlar tecrübe ettikçe buraya ekliyor olacağım...

Kolay Gelsin ;)



MaestroEx - Hosted Exchange Control Panel @ 17-05-2011 00:00

Herkese Selamlar,

Heyecanla belirtmek isterim ki, MaestroPanel'in Beta 1 sürümünün çıkmasına çok az kaldı! Yoğun bir şekilde takvimimizi tutturmaya çalışıyoruz ve heyecanla geliştirmeye devam ediyoruz ancak şimdi size başka bir haberimiz var.

Bilindiği üzere MaestroPanel moduler yapısı sayesinde ihtiyacınıza uygun modulleri zahmetsizce kullanabileceğiniz bir platform haline getirmeye çalışıyoruz. Bu bağlamda da hoster’ların sık kullandığı ve servis verdiği yazılımların modüllerini MaestroPanel'e kendimiz eklemeye öncelik veriyoruz.

Bulardan bir taneside Microsoft Exchange Server 2010.

Microsoft radikal bir kararla Exchange 2010 yönetimi için grafiksel arayüzler yerine Powershell scripting mantığını getirdi. Bu bir çok windows sistem yöneticisi için büyük bir sıkıntı yarattı çünkü bir çok komut seti öğrenip Exchange 2010'u o komut setleri ile yönetmek gerekecekti, tabi bunun esaslı bir öğrenme süreci olduğu açık ve büyük sunucu farm'larında da tekrar eden işleri sunuculara girerek teker teker yapmanızda işleri çok zorlaştıracaktı.

Sistem yöneticilerinin bu ızdırabını gidermek, Exchange 2010 üzerinden hosted hizmetler verebilmek, bunları etkili bir biçimde yönetebilmenizi sağlamak için MaestroPanel Exchange modülümüzü ayrı bir ürün haline getirdik.

Ürünümüzün adı MaestroEx ve sadece Exchange 2010 üzerinden hosted exchange hizmeti vermenize yardımcı oluyor. Lafı fazla uzatmadan erişim bilgileri ve ilgili sayfaların adreslerini aşağıda veriyorum. Umarım Beğenirsiniz.

MaestroEx'e ulaşmak için ex1.maestropanel.com (user: admin/pass: password) adresini ziyaret edebilirsiniz. Biz demo için bir exchange sunucusu kurduk fakat kendi exchange sunucunuz varsa maestropanel.com/hostedexchange adresinden MaestroEx Agent’ı çekip kurmanız yeterlidir.

Umarım Beğenirsiniz…



Hosting Zirvesi 2011 Ardından @ 05-05-2011 00:00

Geçen sene katılamadığım Hosting Zirvesi etkinliğine bu sene hem konuşmacı hemde ziyaretçi olarak katılma fırsatı elde ettim. Etkinlik gerçek anlamda sönük geçti fakat benim için iyiydi. Hosting sektöründen yeni kişilerle tanışma fırsatım oldu, yeni fikirler ve projelere vesile oldu, en önemlisi üzerinde çalıştığım MaestroPanel projesini sektöre tanıtma imkanım oldu. Üzerine bayağı konuşuldu tavsiyeler, destekler geldi. Tabi bu iyi niyetlerinde yanında, haksız yere eleştirilerde olmadı değil, fakat onlarda olmasa çekilmez olurdu zaten :)

Genelde iki yaklaşım oluyor birincisi "Süper. Türkiyeden böyle bir proje çıkabildiğine şaşırdım nasıl destek olabiliriz" şeklinde, İkinciside "cPanel, Plesk varken ne gerek var. Zamanını başka şeyler için değerlendir" şeklinde. Sanırım ikisininde dengeli olması gerek ki MestroPanel Projesinde böyledi.

Zirveye dönersek;

Öncelike Türkiye'de ilk ve tek olduğunu hatırlatmak isterim ve gördüğüm kadarıyla ekip olarak değil amatör bir ruhla Emre'nin mücadelesi ile gerçekleşen bir etkinlik. (Buarada Emre Bilgisayar Mühendisliğinde okuyan bir öğrenci). Burdaki garip olay DorukNet dışında hiç bir hosting firmasının katılım göstermediği (Duyduğuma göre Karegen ziyaretçi olarak katılım göstermiş). Hosting firmaları sektörden bir haber. Bir haber olduğu gibi her gelişmeye ve oluşuma burun kıvırıyor. Buda sektörün hangi aşamalarda olduğunun bir götergesi.

Asıl demek istediğim Hoster'ların kendi firmalarını tanıtabileceği, neler yapabildiklerini göstereceği bu gibi fırsatları değerlendiremiyor olması! Acaba yaptıkları bir şeyler yok mu? Deli gibi donanım alıp üzerine İşletim sistemi, onun üzerine Panellerini kurup satıyorlarmı hala? Onun için mi böyle etkinliklere katılmıyorlar? soruları aklıma takılıyor hep.

Konu hakkında konuşulacak çok şey daha var fakat uzatma gibi bir niyetim yok. Umarım önümüzdeki sene Hosting Zirvesi hak ettiği ilgiyi Hosting firmalarından görür.



Sunumdan bir kaç kare;

 



Bir başka Açık Kaynak proje MultiPosTR @ 16-03-2011 00:00

Her e-ticaret sitensinin böyle bir componenti vardır, tüm bankaları destekleyebilen, reusability'si yüksek, generic bir yapıda, her programa implemente edilen süper bir class library. Bunu herkes yazmıştır ama piyasada hiç görünmez böyle kodlar, gizlidir elletilmez kimseye. Birincisi buna tav olduğum için, ikincisi belki birileride diğer provider'ların ucundan tutarda güzel ve yararlı bir proje ortaya çıkar diye ücüncüsüde bankaların dökümanlarının berbat olmasından mütevellit başladım ufaktan yazamaya.
Ha sende sanalPOS api'lerine hakimsen aha bu provider'ı ben yazarım diyorsan da haberim olsun ki github'dan write permission vereyim.

Şimdilik yeni Garanti sanalPos API'si mevcut, EST'yide yakın zamanda ekleyeceğim. Aşağıdakilerde eklenmeyi bekleyenler.

  • Bank Asya
  • Vakıf Bank
  • Yapı Kredi
  • Türkiye Finans

MutliPosTR
https://github.com/c1982/MultiPosTR

Ek olarak aynı işi yapan ve Php projelerinizde kullanabileceğiniz Hasan Özgan'ın yazdığı vpos4php adında güzel bir araçın var olduğunuda belirtmeden geçmeyelim.



Pratik Structural Patterns Hilesi @ 06-03-2011 00:00

Eğer mesaj tabanlı dağıtık sistemler üzerine çalışıyorsanız sunucular arası gönderilen mesajları object tipinde veya belirli abstract yapıları destekler nitelikte tasarlıyorsunuzdur.
Hal böyle olunca aldığınız mesajı anlamlandırmak için bazı tasarım kalıplarını (design patterns) uygulamanızda kaçınılmaz oluyor. Gelen object tipindeki mesajı unbox etmek için bir çok pattern var (Adapter, Vistor, Abstract Factory gibi) fakat bu patternler bir türlü ihtiyacımı karşılamıyorlardı. Konunun biraz üzerinde düşündükten sonra aşağıdaki yapı ile bütün yükü .Net'in üzerine yıkıp sıyrıldım :)

Kodu açıklamaya çalışayım;

"RemoteServer.GetCommandItemFromRemoteServer();" herhangi bir sunucudan gelen, içinde herhangi bir Type barındıran nesneyi döndürüyor. Bu mesajı anlamlandırmak için .Net'in dynamic özelliğini kullanıyoruz. İşin püf noktasıda burda zaten dynamic bir nesne yaratıp Object türündeki Mesaj Nesnemizi tanımladığımızda .Net bizi object'i hangi Type ile unbox edeceğimiz zahmetinden kurtarıyor. Ardından esas işi yapacak olan sınıfımızda ise Overloading yöntemi ile çıkış noktamıza başlıyoruz.

Mikrotik .Net API (C#) @ 28-02-2011 00:00

Projeler'den bunalınca ve kafa dağıtmak için kendime hobi projesi olarak yeni ufak ve işe yarayabilecek projeler buluyorum (Bknz: Togi). İşte onlardan bir tanesine daha boş zamanlarımda geliştirmek üzere başladım Mikrotik için .Net API'si.

Ne yapar?

Kendi yazılımlarınız içinde Mikrotik ile haberleşip mikrotik'i reboot, shutdown edebilir. Static Firewall kuralları ekleyebilir, yeni bir kullanıcı yaratıp, silebilir, mikrotik'in identity'sini değiştirebilir ve backup alabilirsiniz. Boş zaman buldukça bir çok fonksiyon daha eklemeyi düşünüyorum.

Kodlar?

Proje'yi github'a gönderdim açık kaynak olarak dağıtıyorum. https://github.com/c1982/Mikrogi adresinden erişebilir ve kullanabilirsiniz.

Kullanımı?

Okuması ve anlaması kolay olsun diye Fluent Interface kullandım. Çeşitli kullanım şekilleri için aşağıda örnekleri sıraladım.

Örnekler :

IP Bloklama

Backup Alma, Giriş Yazısı Tanımlama, Reboot, Shutdown

Yeni Kullanıcı Ekleme, Kullanıcı Silme, Kullanıcı Pasifleştirme, Aktif kullanıcı listesi, Kullanıcı listesi

Zaman buldukça yeni fonksiyonlar ve özellikler ekliyor olacağım. Sizde projeye katkıda bulunmak istiyorsanız aspsrc -at- gmail.com adresinden iletişime geçebilirsiniz.

Kolay Gelsin.

Kaynak Kodlar : https://github.com/c1982/Mikrogi



Mikrotik Master Distributor'ü : kablosuzmarket.com @ 24-02-2011 00:00
Mikrotik ürünlerine kolayca erişebileceğiniz yeni bir mağaza açılmış kablosuzmarket.com Mikrotik'in Master Distribütörü olduğu için her türlü Mikrotik ürününü daha ucuza ve kolayca bulabileceğiniz bu mağazanın tanıtım yazısını paylaşmak isyiyorum.

Kablosuzmarket.com Mikrotik markasının Türkiye Master Distribütörüdür. Çok uygun fiyatlara mikrotik wireless ekipmanlar satışı yapılmaktadır. Ayrıca çoklu alımlarda fiyat kademeli olarak düşmektedir.

Diğer ürünlere göre daha profesyonel ,daha kolay ve daha az maliyetli kablolu - kablosuz internet sistemleri oluşturmak için kullanılan mikrotik ürünlerini ve ayrıca luxul , cyberbajt gibi markaların tüm ürünlerini kablosuzmarket.com sitesinde inceleyebilir ve satın alabilirsiniz.

Satışa sunulmuş olan Hazır set ekipmanlar yanında eğer isterseniz "Hazır Set Sihirbazı" ile kendi isteğinize göre set oluşturabilirsiniz. Ayrıca mikrotik kullanımına dair sorularınız için sıkça sorulan sorular sayfasını inceleyebilirsiniz.

Türkiye'nin her noktasına hizmet veren kablosuzmarket.com , kalitesini ISO 9001 ve 27001 belgelerini almaya hak kazanarak ispatlamış olup sorunsuz ve hızlı hizmet vermektedir. Aldığınız ürünlerde istediğiniz kargo seçeneğini seçebilir , ayrıca sipariş durumunu siteden izleyebilirsiniz.

kablosuzmarket.com
 


ASP.NET MVC3 Filters @ 17-02-2011 00:00

MVC tasarım kalıbı ile birlikte bir taşla 2 kuş değil, 1 taşla 10 kuş vurmaya alıştık bu alışkanlığı en bariz şekilde hissetiren özelliklerin başında ise MVC'nin Filters özelliği geliyor.

Filters'lar adından da anlaşılacağı gibi web uygulamanıza gelen her bir isteğin arasına girip belirli evrelerinde ihtiyacınıza göre işlemler yapabileceğiniz mekanizmalardan oluşuyor. Bu mekanizmalar bazen sayfanın çalışma zamanının alınması, bazen de güvenliği sağlayan kontroller olabiliyor. İsterseniz tüm uygulamanız için, isterseniz de belirli istekler geldiğinde filitre uygulayabiliyorsunuz.

Filters'lar method'un başına birer özellik (Attiribute) olarak kullanılmaktadır ve ActionFilterAttribute sınıfından türetilmesi gerekmektedir. Daha sonrada ihtiyacımız olan olayları override edip rahatlıkla kullanabilmektesiniz.
Yazı bir işe yarasındiye basit bir senaryo belirleyip ona göre hareket ettim, bakalım filters'lar ile neler yapabiliyoruz.

Belirlediğim gaddar senaryoya göre web uygulamama internet explorer ile girişi yasaklamak istiyorum ve bunun içinde en iyi yol Global Filters'i kullanmak olduğunu biliyorum ve aşağıdaki gibi kendi filter'imi  oluşturuyorum.

Gördüğünüz gibi ActionFilterAttribute sınıfından miras aldığım 4 adet olay var. Bu olayları uzun,uzun anlatmaya gerek yok sanırım isimlerinden hangi sıra ile çalıştığı belli. Biz Controller'ımızın içindeki kod çalışmaya başlamadan önce browser kontrolünü yapacağımız için OnActionExecuting olayına kodumuzu ekleyeceğiz.

OnActionExecuting olayında ziyaretçinin user-agent bilgisinden browser'ının ne marka olduğunu öğrendik ve içinde "MSIE" stringi geçiyorsa ContentResult'u kullanarak bir JavaScript uyarısı çıkarttık. Ziyaretçinin user-agent değerinin içinde aradığımız string'i bulamasaydık Context Resul normal bir ViewActionResult() olarak gelecekti buda bize sayfayı doğru görmemizi sağlayacaktı.

Şimdi bunu filitrenin tüm Action'larda çalışmasını sağlamak için MVC uygulamamızın Global ActionFilter koleksiyonuna eklememiz gerekli. Bununda Global.asax dosyasından tek bir satır ile yapabiliyoruz. Global.asax dosyasını açtıktan sonra ilgili satırı aşağıdaki gibi ekleyin.

Bu işlemden sonra artık web uygulamamıza internet explorer'dan girilemeyecektir.

Gördüğünüz gibi hayatı kolaylaştıran bir özellik. Filitrelerin başka bir kullanım şeklide Action'a özel bir Attribute şeklindedir. Bunada bir senaryo üretip örnekleyelim.

Senaryoyu yine kullanıcı üzerinden geliştirmeye devam edip ziyaretçinin oturum açıp, açamadığını kontrol eden bir filter yazacağız. Senaryomuza çok ugun çünkü web uygulamalarında herkesin görebileceği ve sadece üyelerin görebileceği yerler olmakta.

Burda görüldüğü gibi basit bir Session kotrolünden başka bir şey yapmıyoruz, esas olay Action'a eklediğim Attribute ile gerçekleşiyor.

        [LoginRequired]
        public ActionResult Users()
        {
            return View();
        }

Action'ın üzerine LoginRequired filitremizi koyduktan sonra bu action'a yapılan her istekte session kontrol edilecek, yoksa ziyaretçinin giriş yapması istenecektir. Ek olarak dikkat ederseniz .Net'te örf ve adetler gereği ile LoginRequiredAttribute yerine sadece LoginRequired yazabiliyoruz. tıpki Interface'lerin I ile başlaması geleneği gibi.

Burdaki uygulamayı https://github.com/c1982/oguzhan.info-Projects/tree/master/MvcApplication1 adresinden indirebilirsiniz.



Yeni hayat, Yeni projeler @ 02-02-2011 00:00
Yaklaşık 3 seneden beri çalıştığımı ve güzel günlerimin geçtiği Vargonen'den ayrıldım! Ayrılmamın sebebi kendi girişimimi hayata geçirmem ve hosting sektörüne yönelik çalışmalarımı hızlandırmak istememden kaynaklanıyor.
Bundan sonraki zamanımı ve mesaimi hosting sektörüne yönelik yeni ürünler geliştirmekte harcayacağım ve ilk projemde "MaestroPanel" olacak.

MaestroPanel bir web hosting kontrol panel yazılımı. Hoster'lara yönelik olarak geliştirdiğim bu panel ile sektörün çözülememiş bazı problemlerine çözüm üretmeye çalışacağım. Ufak çapta testlerimiz ve local denemelerimiz oluyor yakın bir zamanda da pilot firmalarla real-world senaryolar üzerinde denemelerimize başlayacağız. Eğer sizde bu panel ile ilgileniyorsanız site'de ki mail listimize katılabilir, güncellemeleri takip edebilirsiniz.

Son olarak bu proje için hosting sektöründe deneyimli, .Net Framework ve OOP'ye hakim, C# kullanabilen yazılım uzmanı veya uzmanlarına ihtiyaç olacak. Projede yer almak isteyenler ping@maestropanel.com adresi ile iletişime geçebilirler.

Proje için beni yüreklendiren ve destekleyen herkese teşekkürler.

Kullandığım .Net Library'leri. @ 14-01-2011 00:00
Eskiye nazaran , şimdilerde geliştirdiğim projelerin Assemblys klasörü bir çok *.dll ile dolmaya başladı. Bir projede en az 7 tane component (Bileşen) kullanmışım. Tabi bu .Net ekosistemi'nin gelişmesiyle doğru orantılı oldu. Bir çok kaliteli ürün, işimizi kolaylaştıran Framework (Programlama Çatısı) open-source (açık kaynak) olarak dağıtılmaya başlandı bu developer'ın çok büyük bir kolaylık ve zaman kazancı. Esas amacım projelerde sıklıkla kullandığım ürünlerin neler olduğunu ve ne işe yaradığını paylaşmak. Bakalım neler kullanıyorum :)

1. ASP.NET MVC Framework

Şu anda 3. Versionun yayınlandığı bu Framework web uygulamalarını Model View Controller mantığında bir istekeltle geliştirmemizi sağlıyor. Web Forms'a güçlü bir alternatif ve hatta bu Framework üzerinde uygulama geliştirmek çok daha eğlenceli benim için.

2. The Unity Application Block (Unity)

Microsoft'un patterns & practices takımı tarafından geliştirilen lightweight bir dependency injection container'ı IoC yaklaşımında providerlar geliştirmek için kullanıyorum.

3. SQLite

SQLite ufak bir SQL Database Engine'dir. Herhangi bir configurasyona, kurulma gerek duymaz ve transaction desteğide bulunur. Çoğu kişisel projemde bun motoru kullanıyorum henüz .NET 4.0 desteği çıkmadı ama .NET 2.0 runtime'ında kullanılabilyor. Ufak bir fikir vermesi açısında tweet.gen.tr projesinde SQLite kullandım, şuanda 540MB bir veritabanı var gerçekten performanslı çalışıyor.

4. Apache log4net

log4net developer'ın uygulama içinde bir çok şekilde log tutmasını sağlayan yararlı bir araç. Configurasyonu zahmetsiz bir çok database desteği ve Ağ protokolü desteği (UDP, TCP) ile loglarınızı değişik ortamlarda kaydedebilmenizi sağlayan bir üründür. Kullanın.

5. Facebook Connect Authentication for ASP.NET

Web uygulamalarında Facebook Connect'ı kullanarak kullanıcı doğrulaması yapmanızı sağlar. Bir kere kullandım .NET 2.0 desteği mevcuttu ama hala çalışıyor.

6. FluentCassandra

Evde NoSQL konseptini anlamaya çalışırken dağıtık sistemlerde çalışan Cassandra'yı keşfetmiştimtim. Bu yeni dağıtık database sistemini nasıl kullanabilirim diye araştırırken FluentCassandra'yı buldum.

7. iTextSharp

Esasen Java için yazılmış bu bileşen'ın .Net'e port edilmesiyle .NET dünyasına giren PDF dosyaları oluşturmamızı sağlayan açı kaynak bir araç. Projelerde PDF ile ilgili bir işlem olacaksa kullanıyorum.

8. Lucene.Net

Lucene çok özellikli bir test search engine'i. Statik bir sitenin arama motoru olarak çalıştırıp kullandım. Daha öncede bir data-mining projesinde kendi raporlarımı çıkarmak için kullanmıştım. Açık kaynak ve string'e bakış açısını değiştirebilecek bir ürün.

9. nvents

Fantastik bir publishing/subscribing olay yönetim sistemi. .NET 4.0 desteği olan bu araç WCF üzerinde çalışıyor, Events'ları serialize ederek network üzerinden gönderilmesini ve alınmasını sağlıyor. Kendi pub/sub framework'ünü geliştirdikren sonra keşfettiğim için çok kızıyorum kendime :)

10. Quartz.NET Open-Source camianın bize verdiği nitmetlerden bir tanesi daha. Quartz.NET. Uygulamanızda zamanlanmış görevler mantığından geliştirmeler yapabileceğiniz bir araç. Hem ufak, hemde büyük ölçekteki projelerde rahatlıkla kullanabilirsiniz. Buda Java dünyasından .Net dunyasına devşirilmiş uygulamalardandır.

11. Spark View Engine

ASP.NET uygulamalarında HTML templateleri oluşturmanıza ve yönetmenize yarayan bu araç. Razor çıkana kadar bir kaç projede kullandım, kendine özgü syntax'ı var. Öğrendikten sonra html yazarak programlama yapmak zevkli oluyor. MVC3 ile birlikte gelen Razor'a bu ürüne alternatif oldu.

12. FluentValidation

Uygulamalarda girilen verilerin doğrulanması hem güvenlik açısından hemde uygulamanın stabilitesi açısından son derece önemlidir. FluentValidation'da tam burda devreye giriyor. Verileri doğrulamak için size kolay ve anlaşılır method'lar sunuyor validation için ek olarak bir geliştirme yapmanıza gerek kalmıyor.

13. NPOI

Başka bir Open-Source projede NPOI yine Java dünyasından devşirilmiş bu proje doc, ppt, xls gibi dosya uzantılarını açmanızı ve oluşturmanızı sağlıyor. Fakat sadece office 2003 desteği var ama yinede office 2010 bu dosyaları sorunsuz açabiliyor.

14. xmlrpcnet

Hosting firmasında çalıştığım için bir çok registrar ve diğer çözüm ortaklarımızla API'lerle haberleşiyoruz. Bu API'lerde genelde XMLRPC protokolünde haberleşiyor. Bu protokolü .NET üzerinde kullanmak için bu aracı kullanıyoruz.

15. FluentPath

FluentPath dosya işlemlerinizi (System.IO) Lambda kullanarak çok daha kolay gerçekleştirmemizi sağlayan bir araç. Path.Files(f => new[]{".aspx"}).Move( p => p.Parent()).Hide(); gibi.

16. Microsoft Web Protection Library (AntiXSS, SQLInjection)

Web uygulamalarında güvenliğe dikkat etmek lazım. Developer farkında olmadan XSS açıkları ve SQLInjection açıklarına neden olabiliyor. HTML , XML, CSS ve JavaScript bazında güvenlik açıkları vermemek için kullanabilirsiniz.

17. SharpZipLib

Uygulamanızda zip paketleri üretmenizi sağlayan açık kaynaklı bir araç. Zip, Gzip, Tar, Bzip2 desteğide gelmiş. 10 numara.

18. Altairis Mail Toolkit

Gelişmiş bir e-posta yönetimi yapabileceğinz bu araç işlerinizi gerçekten kolaylaştırıyor. Tek satır kodla e-mail gönderebiliyorsunuz, e-mail tamplate yapılarını kolayca oluşuturup bir çok alıcıya tek bir seferde gönderim yapabiliyorsunuz. Ek olarak Open-Souce.

19. Dynamic Expression API

Linq2Sql ile bir proje geliştiriyorsanız sorgulamaları dinamik hale nasıl getireceğinizi ilk etapta bilememişsinizdir. Şahsen ben dedim. "Nasıl dinamik query oluşturacağız bu Linq'de" diye ama arkasından Micsoroft beni duymuş olacak ki "Dynamic Expression API" yi çıkardı.

20. AE.Net.Mail

POP3 ve IMAP protkollerini kullanarak e-postalarınıza erişmeyi sağlıyor. En son baktığımda SSL desteğinide eklemişler. Lazım olunca başvuruyorum.

21. FluentNhibernate

Efsanevi Nhibernate'ın XML dosyalarına gerek kalmadan bir çok işi otomatize eden bir araç. Nhibernate'i herkes biliyor ve kullanıyor onun için listeye ayrıca bir madde eklemedim.

22. PayPal Helper

e-ticaret uygulamalarında ençok tercih edilen ödeme metodu olan paypal'ı .Net Web uygulamalarınızda kullanmanıza yardımcı olur. Kullanmadım ama kenarda bekletiyorum.

23. HTML Agility Pack

HTML parse etmek için Regex kullanmayın. Regex bu işin doğasına aykırı o nedenle adamlar oturmuş HTML Agility Pack'i kullanmanız için geliştirmiş, kodlarını açmış. Son versionunda Linq desteği gelmiş güzelde olmuş.

24. Json.Net

Artık ajax işlemlerinde istek ve cevapları Json ile konuşturuyorum. Hem okunması hemde yazması daha kolay oluyor, ama bazen server tarafındaki objeleri Json'a, Xml'e çevirimem gerekiyor o zaman Json.Net'in nimetlerinden faydalanıyorum.

25. TwitterVB - A .NET Twitter Library

Twitter üzerinde bir uygulama geliştirecekseniz sizin için biçilmiş kaftan. oAuth desteği ve bir çok API fonksiyonunu destekliyor. Twitter uygulamalarında sürekli kullanıyorum. Birde geo-location'i tam çalışsa süper olacak.



Powershell Database Backup Script'i @ 05-01-2011 00:00
.Net'in shell'e devşirilmiş hali powershell ile ufak bir veritabanı yedekleme script'i hazırladım. Biraz daha geliştirilebilir tabi ama şimdilik işimizi görüyor :)
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO") | Out-Null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SmoExtended") | Out-Null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.ConnectionInfo") | Out-Null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SmoEnum") | Out-Null

$server = New-Object ("Microsoft.SqlServer.Management.Smo.Server") ("DATABASE_SERVER")

$dbBackup = new-Object ("Microsoft.SqlServer.Management.Smo.Backup")
$dbBackup.Database = "DATABASENAME"
$dbBackup.Devices.AddDevice("C:\Yedek\BACKUP_DB_NAME.bak", "File")
$dbBackup.Action="Database"
$dbBackup.Initialize = $TRUE
$dbBackup.SqlBackup($server)
Arkasından "Write-zip" metodu ile zip'leyip new-object Net.Mail.SmtpClient("SMTP_SERVER") ile'de e-posta bildirimi yapabiliriz.

Kolay Gelsin.


Beta Fırtınası (for .Net) @ 17-12-2010 00:00

Pek duyuru haberleri vermeyi sevmiyorum ama önemli bir takım gelişmeler olunca hemde hareket olsun diye .Net dünyasında ki beklenen herşeyin Beta'sının yada RTM'e en yakın olan versionlarının haberlerini vereyim dedim. Akabinde...

VS.NET 2010'un SP1'in Beta'sı yayınlandı. Güzel gelişmeler var major maddeleri aşağıda listeledim.

  • ASP.NET MVC3 ile birlikte gelen Razor HTML engine'i için IntelliSense desteği sağlanmış.
  • IntelliTrace in beklenen x64bit deteği nihayet eklenmiş.
  • IntelliTrace için .iTrace file özelliği eklenmiş. Böylece trace'i bir dosyaya alıp saklayabiliyorsunuz. ( Tool > Option >IntelliTrace menüsüne bakın)
  • HTML5 Schema'sı eklenmiş.
  • IIS Express desteği gelmiş. (Sonunda SSL ve IIS 7.5'de çalışan bir çok özelliği local'de rahatlıkla test edip, geliştime yapabileceğiz)

Beni ilgilendiren özellikler bunlar olduğu için geri kalan ufak tefek fix'leri yazmıyorum.

Yıl sonu bitmeden bir çok aracın ve altyapının yeni version'ları yayınlanmaya başladı bunlarıda bir araya toplayıp ufak bir liste yaptım. Çoğu beta ve normal development ortamınıza kurmadan sanal ortamda test etmenizi öneririm.

Sonuç olarak developer'ın hayatını kolaylaştıran ve development'ımızı hızlandıracak araçlar kapıya geldi. Biraz daha piştikten sonra kullanıp yeni tartışma konuları başlatacağız. Örneğin Razor Engine mi hızlı? yoksa Spark Engine mı? MVC2 stabildi, MVC3 yavaş gibi yada EF5 mi Nhibernate mi? :)

Konu dışı: Hosting sektörü ile ilgileniyorsanız yada merak duyuyorsanız diğer blog'um webhostingturkey.com'a bir göz atabilrisiniz. Modaya uyup twitter profilimin reklamını da yapayım. @c1982



PDC 2010 İzmir @ 20-11-2010 00:00
Normalde böyle olayları yazmam ama PDC olunca bir başka oluyor. Tabi bu yerel etkinlik ne kadar PDC tadı verecek o başka bir blog yazısı olur ama yinede şükür İzmir'de böyle şeyler 10 senede bir olsada oluyor.

9 Aralık 2010 Perşembe günü - İzmir Yaşar Üniversitesinde Profesyonel Yazılım Geliştiriciler Konferansı yapılacakmış. İzmir böyle etkinlikler açısından oldukça kıt olduğundan (Belkide talep olmamasından) izmir'e Bono gelmiş gibi haber veriyorum.

Etklinlik tam gün sürecek 09:00 - 17:00'a kadar bir süre. Windows Azure'dan, HTML5'e ve hatta anlamsız bir şekilde IE9'dan bahsedeceklermiş. Umarım yararlı bir etkinlik olur.

Kayıt:


Oguzhan - Kendi Çapında Programcı

Date: 27.10.2007
Viewed: 1248
Category: Technology
Tag: oguzhan phyton plesk net oguzhan c programlama yazilim hosting asp sql karsiyaka izmir

Share
Report


Related RSSes
Technology - Teknomy.net
Date: 27.10.2007
Viewed: 379
Technology - Laydo
Date: 27.10.2007
Viewed: 402
Technology - Melih Bayram Dede
Date: 27.10.2007
Viewed: 257
   
Olmazmi.com