spacer Unutmayaym diye yazdklarm...

C# Refaktoring Ipuçları

25.12.2011 tarihinde yazldktan sonra, 3 kii yorum yazm.

Yazlm sektöründe ve hatta BT gezgeninde genel olarak söylenen bir söz vardr "Çalyorsa Elleme".
Baz sistemlerde doru olsada yazlm gelitirme prensipleri çerçevesinde bu çok iyi bir ey deildir. Çünkü çaltrdnz sistemi her zaman için daha iyi, daha hzl ve stabil hale getirme ansnz vardr.
Dier taraftan bir ii çözmek için ilk gelitirdiiniz algoritma genelde ileride probleme yol açabilecek (Code Smell) potansiyele sahiptir ki görüp geriye dönüp gereince düzeltmek gerekir. te bu düzeltme, toparlama yaparken geçirdiiniz zamana ve kodlarda yaptnz iyiletirmelere, deiikliklere de yazlm aleminde "Code Refactoring" deniyor.

Kavramlar ve iin teorik taraf ile Yazlm Mühendisleri ve Bilgisayar Bilimcileri uraa dursun biz direkt koda'a dalalm;

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

 

spacer

Örnekleri verirken yukardaki mantkta ilerleyeceim. Önce iman, yava koda bakacaz, daha sonrada seksi kod'a bakacaz böylece aradaki fark yukarda olduu gibi daha çarpc görünecek. Tabi seksi kod'a bakp, yukarda ki bayana baktnzdaki etkiyi alyorsanz da bilgisayarn bandan kalkma vaktinizin geldiini hatrlatmak isterim.

nceden balayalm;

spacer

Ayn deiken tipleri, ayn deeri alacaksa kullanabileceimiz bu yazm seçenei bir kaç deikende pek kullanl olmasada baz durumlarda onlarca deiken tanmlamanz gerekdiinde uzun kod ynlarnda sizi kurtaran bir etki yapar. Aklnzda olsun.

spacer

Yukarda ki örnek aslnda çok sk karlatmz bir olay. String'in veya objenin belirlie bir deerde olup olmadn en rahat if ile buluruz ve koullar iletiriz fakat programc dostu if her zaman iinizi kolaylatrmaz bazende uzatr. Özellikle bool tipi dönülerinde kodlar ksaltmamz salayan bir düünce tarz diyebiliriz.

spacer

Baka bir örnekde try..catch kullanm ile ilgili. Herkesin bildii gibi bu blou kullanmak CLR için oldukça maliyetli o nedenle try...catch blog'unu bir koul olarak kullanan programcy dövseniz kimse ses çkarmaz. .Net zaten try-catch kullanmayalm diye bize bir sürü method sunuyor. Örneimizde dosyann var olup, olmadn kontrol etmek için kolaylkla File.Exists() methodunu kullanabiliriz. Böylece try..catch kullanmamza gerek kalmaz ve kodumuz daha hzl çalr.

Dier taraftan FileStream disposable bir class olduundan using içinde kullanmak daha doru olacaktr, ki iimiz bittiinde otomatik olarak GC'nin ellerine emanet edilsin.

 

spacer

Ve tabiki string ilemleri. En çok can çekitiimiz ve takla attmz konulardan biride string ilemleri. Neyse ki .Net bize string üzerinde ilemler yapabilmek için bir ton araç sunuyor. Sol tarafta gördüünüz string birletirme ilemi (concatanate derler) her ne kadar dil kurallarna uygun olsada çalmas yava, yazlmas ve okunmasda zordur. Daha hzl, okunmas ve yazmas kolay hali ise sa tarata string.format kullanlarak gerçekletirilmitir. Tabi string birletirmeden söz ediyorsan StringBuilder'dan da söz etmemiz gerekir ki aada bir örnek mevcuttur.

spacer

Baka bir kötü if örnei. Her ne kadar süslü parantezlerle kodu uzun gösterip "oha, arbiden ksalm" dedirtmeye çalamda burda airin demek istedii ey "refaktoring faydal bir ey" mesaj dr. Yine burda doru yerde, doru koulun kullanmn yapm olduu etkiyi görebilirsiniz. Teekkürler :?

spacer

Yine doru zamanda ve doru yerde kullanlan bir koul operatorü "??". Bir class'n null olup olmadn kontrol eder ve null ise koulu iletir. If burda yine yapacan yapm ve ileri zorlatrm fakat ayn imdadmza ?? koarak ileri yoluna sokmu.

spacer

Bu sefer iler biraz deiik gerçek hayata daha yakn bir method ile kar karyayz fakat kod harabe! En bataki array'n eleman olup olmad daha salkl bir yolla kontrol edilebilirdi, ek olarak yine string birletirme ileminde .Net'in nimetleri kullanlmam.

Refaktoring sonras String'imizi StringBuilder yaptk ki string birletirme ilemlerinde maksimum performans alalm, sonra Array'n bir elemana sahip olup, olmadnz Linq'in Any() Extension methodu ile kolay bir ekilde örendik, arkasndanda AppendFormat() methodu ile de okunakl bir ekilde stringimizi oluturduk.

spacer

Bu sefer iman olan sa taraf oldu. Neden? çünkü kod'u her inceleyen tarafndan ne yaptnn anlalmas gerekiyor bu nedenle biraz daha pseudo'ya kaçrdk. ExecuteTask() methodundan errorCode'a bir deer atanyor ve o deere görede methodlar çalyor fakat sadaki kodda bir sfr deerinin ne olduunu bilmiyoruz. Halbuki bilmek gerekiyor ki bir ey deitireceksek ilgili methodda deitirelim. Bizde gittik class'n bana bu deikenleri const tipinden ekledik ve condition'a tekrar verdik. imdi neyin ne olduu dahada anlalr oldu.



spacer Yorum

.Net ile PowerShell Module Geliştirme

13.12.2011 tarihinde yazldktan sonra, 0 kii yorum yazm.

Powershell getiimiz yllarda hayatmza girdi ve Windows zerinde scripting'e yeni bir boyut kazandrd. Arkasndaki gl .Net Framework destei sayesinde de Powershell ile hayal ettiiniz her hareketi yapar hale geldik. Eskiden Batch Scripting ile 30 satrda yaplabilen iler Powershell kullanlarak tek satrla indirgenebiliyor. Tabi her zaman tam ihtiyacnza uygun komut bulunmadndan geniletmek veya uygulamanz command line ile de ynetmek isteyebiliyorsunuz.

(Aga, laga luga yapma hepsini okuyacak vaktim yok, bana kodu ver modundaysan proje dosyasna burdan ulaabilirsin.)

te bunun iin PowerShell yazlm gelitiricilere geniletilebilir zellikler sunuyor. Bakalm bu zellii .Net zerinde nasl kullanabiliyormuuz.

PowerShell Modlmz Ne Yapacak?

Bir alanadnn (domain) bilgilerini alp ekrana basan basit bir Whois modl yazacaz. Bunu Powershell zerinden de yapabilirz tabiki fakat konu PowerShell modl nasl yazlr olduudan .Net tarafna deineceiz ;)

Neler Lazm

  • Genelde Windows 7 ile birlikte Powershell'in 1.0 srm yeterli fakat 2.0 srmde ykleyebilirsiniz. Srmlerle ilgili burdan detayl bilgi alabilirsiniz
  • Visual Studio 2010'un herhangi bir srm.
  • PowerShell modl gelitirebilmek iin Powershell Referanslar.
  • .Net Framework 2.0 ve zeri.

PowerShell Referanslar

Genelde;

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

spacer

dizini altndadr. Burda gerekli olan dosya System.Management.Automation.dll ve Native olarak gelen System.Management referansnda projenize eklemeniz gerekir.

spacer

Balang

Powershell modl gelitirmek in ortam tedarik ettikten sonra Visual Studio zerinden New > Project > Class Library komutunu veriyoruz. PowerShell modl iin .Net 2.0 CLR versionu gerekli olduundan .Net Framework 3.5 seiyoruz.

spacer

.Net 4.0 neden semedik diyebilirsiniz. Modl .Net 4.0 ile de gelitirebiliriz fakat bunun iin Powershell.exe.config'e bir talimat vermemiz gerekir. Yeri gelmiken verelim.

C:\Windows\system32\WindowsPowerShell\v1.0 dizininde yani $pshome (Bunu powershell iinde arrsanz ayn klasr dndrecektir) powershell.exe.config dosyasn bulun. Yoksa da yaratn. Daha sonra aada ki tanmlamay gerekletirin.

spacer

Bundan sonra .Net 4.0 altnda PowerShell gelitirebilirsiniz. Fakat bu projede gerek olmadndan ben .Net 2.0 ile idare ediyorum.

Kod

Aklama

Kod'a baktmzda ilk dikkatimizi eken Cmdlet tipinden WhoisCommand classmz tretiimiz dir (inheritance olay).
Standart bir Powershell komutu eklinde hareket etmesini salamak iin Cmdlet'den tretiyoruz. Yine Cmdlet snfnn kurallarndan CmdletAttributes'ini deklare etmemiz gerekiyor ki Powershell modl altrrken hangi maksatla altrldn bilsin.

Burda biz veri aracamz iin VerbsCommon.Get enum'unu kullandk fakat herhangi bir deer tanmlayacak olsaydk VerbsCommon.Set de diyebilirdik. Bu konu ile ilgili ayrntl bilgiyi buradan alabilirsiniz. Uzun uzun hepsini saymak 5 sayfay alr :)

NounName

CmdletAttribute'nin dier bir parametreside NounName. NounName Powershell ortamnda komutun isminin ne olacan belirler burda "Whois" dedik fakat Verbs'lerden Get'i setiimiz iin Powershell ortamnda komutu armak iin "Get-Whois" eklinde kullanmamz gerekiyor.

Parametereler

Bu ortamda parametere oluturmak iin basite ilgili class'da property oluturup ParameterAttribute vermeniz yeterli. Burda dikkatinizi ekmitir, Parameter zelliinin Mandatory parametresi true. Bu demektir ki, parametre Powershell ortamnda zorludur. Bizim senaryomuzda da zaten girilmezse Whois almayacandan bunu "true" olarak verdik. ParameterAttribute'sinin full referans iin buradan kastrabilirsiniz.

Tanmlaralar yaptktan sonra hemen ProcessRecord() methodnu override edip iini dolduruyoruz. Bu method Powershell'in giri methodu olduundan herey burda alyor dolaysyla bizim methodlar alyor ve whois bilgisini, whois serverdan talep ediyor. Herey yolunda gidersede aldmz string deeriniz WriteObject(); methodu ile ekrana bastryoruz.

Import-Module

Gelitirdiimiz modl PowerShell ortamnda kullanabilmek iin Import-Module komutunu kullanyoruz. yle ki;

spacer

Modlmz kontrol etmek istersek de Get-Module komutu iimizi gryor.

spacer

Yukarda grdnz gibi Name Projemizin ismi, ExportedCommands ise Get-Whois olarak PowerShell ortamna yansm durumda.

Bundan sonra "Get-Whois domain.com" komutu vererek istediimiz alanadnn whois bilgilerine ulaabiliriz.

spacer

Hepsi bu kadar. Umarm yardmc olmutur.

Vs.Net 2010 Proje Dosyas : PoshWhois.zip



spacer Yorum

Windows Azure'u Yönetmek

30.11.2011 tarihinde yazldktan sonra, 0 kii yorum yazm.

MaestroPanel'in Azure'da alacak olan versionunu dzenlerken dzgn almas iin bir ka zel ayar yapmak gerekti. Fakat Azure kontrol panelinde IIS ile ilgili ayar yaplabilecek arayz bulunmuyordu.

Biraz aratrdktan sonra Windows Azure iin "Startup-Task" konfigurasyonunun olduunu rendim.

Projenizde ki ServiceDefinition.csdef dosyas web uygulamanz Azure'a yklendikten sonra nasl hareket edeceini hangi portu ve hangi protokol dinleyeceini belirleyen tanmlalar iin vardr.

Bu dosyann iinde ki konfigurasyon node'larndan bir taneside projemiz altrlrken iletilecek komutlar tanmlamamz salayan "Startup" node'u.

Bu node'un iine tanmladnz Windows Command dosyas yani batch dosyasn ayn Command Prompt gibi dnn. Girdiiniz komutlar windows'da alyormu gibi Azure tarafndan iletilecektir.
Daha sonra projenize bu dosyay dahil ediyorsunuz tanmlyorsunuz ve Startup nodunu dzenliyorsunuz.

Ayarla.cmd
REM queueLength arrtr
%windir%\system32\inetsrv\appcmd set config  -section:system.applicationHost/applicationPools /applicationPoolDefaults.queueLength:"5000"  /commit:apphost

REM Timeout'u dr.
%windir%\system32\inetsrv\appcmd set config  -section:system.applicationHost/webLimits /connectionTimeout:"00:01:00"  /commit:apphost

REM Process'i arttr
%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 dosyasn ben u ekilde projeme ekledim.

spacer

Bundan sonra ServiceDefinition.csdef dosyamzda aadaki gibi dzenliyoruz.

spacer

Kaynaklar:
  • msdn.microsoft.com/en-us/library/gg433059.aspx
  • msdn.microsoft.com/en-us/library/gg456327.aspx


spacer Yorum

Microsoft FTP 7.5 için İpucu (useDomainNameAsHostName)

29.11.2011 tarihinde yazldktan sonra, 0 kii yorum yazm.

MaestroPanel iin Windows Server 2008 R2 ile birlikte gelen Microsoft FTP 7.5 destei verdik fakat Hoster'larn ok alk olmad bir authentication yntemi var.

Microsoft FTP 7.5 ile birlikte Vhost destei gelmi yani FTP alanlar birbirinden tamamen izole olacak eklide almas salanm. Bu Ms FTP'nin hem daha gvenli, hemde daha ynetilebilir olmasn salam.

Bununla beraber IIS 6.0'da alk olduumuz kullanc ad ve ifre ile giri yaptmz kimlik dorulamas yerine Domain|Kullanc ad ve ifre eklinde bir kimlik dorulama mekanizmas konulmu.

rnek vermek gerekirse. oguzhan.info MS FTP 7.5 zerinde alyor diyelim ve FTP kullanc admda ogzftp olsun, ifremde p@sssw0rd olsun. Login olabilmem iin
Kullanc ad: oguzhan.info|ogzftp
ifre: p@ssw0rd
girmem gerekiyor. | pipe karakterini domain ile kullanc adnz arasna koymalsnz. Bunu kaldrabilirmiyiz diye biraz aratrrken, kaldrlamdn rendim fakat biraz daha son kullancya yakn hale getirebilmemiz mmkn. Aadaki script ile | pipe karakteri yerine "@" veya "\" karakteride kullanabilmeniz mmkn.
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 ielmlerden sonra son kullancya domain.com@username veya domain.com\username eklinde kullanc ad verebilirsiniz.

Bu k olmayan kullanc adndan tamamen kurtulmak iin FTP 7.5 iin gelitirme yapabileceiniz programlama arayzleri mevcut. rnein FtpAuthenticationProvider kullanarak ayrca kendiniz bir kimlik dorulama yazabilirsiniz veya IIS 7.5 zerinde yine IIS 6.0'n FTP servern kullanabilirsiniz.



spacer Yorum

IIS 8

16.09.2011 tarihinde yazldktan sonra, 2 kii yorum yazm.

Microsoft'un Build konferans ile birlikte ortalk bir hayli hareketlendi ve her zaman olduu gibi hayatmza yeni kavramlar girdi.

Bunlardan en nemlisi sanrm Windows 8'de grmeye alacamz Metro UI. Bu yeni nesil Windows'unun masast temelini oluturuyor ve developer'a ok esnek bir yap sunuyor. Konumuz bu deil ama unu nemle vurgulamak isterimki HTML + JavaScript ile Metro UI uygulamas yazabiliyorsunuz! Ayrca MetroUI'nin altnda almas iin eski Win32 benzeri bir API sisteminde WinRT (Windows Runtime) olacan belirteyim.

IIS 8spacer

MaestroPanel projesine baladmdam beri IIS ile ok ili dlym. Windows 8'in Developer srmnde ilk baktm ey IIS versionu oldu ve direkt IIS 8 olarak geldiini grdm.

lk dikkatimi eken IIS isminde yeni bir Management Console'un geldii (mmc) klasik InetMgr.exe var fakat IIS.mmc ile aarsanz bunu sarmalayp alta Web Platform Installer'la beraber ek zelliklerde geliyor.

imdilik arayzde ok byk deiiklikler grmeyi beklemedim nk IIS 7.0 ile beraber zaten arayz radikal biimde deimiti. IIS 8 srm, 7.0 ile gelen konseptin daha oturmu hali, yani yeni zelliklerden ziyade iyiletirmeleri ve dzeltmeleri ieren bir srm olacaa benziyor.

Neler Yeni?

Tabi arayzde gzle grlr bir ey olmadndan UI tarafnda herey ayn diyebilirim. Fakat yenilik olarak u maddeleri sralayabiliriz.

  • u andaki sisteme gre SSL sertifikalarn Windows ynetiyordu ve site ile ilikilendirme iini IIS yapyordu. IIS 8 ile beraber SSL ynetimide IIS'e verildi ve bylece Windows'un SSL snrlamalarndan kurtulmu olduk. Bu hoster'larn sevecei bir zellik lakin Windows 500 sertifika ile snrlyd.
  • IIS8 ile gelen dier bir iyiletirme ise NUMA (Non Uniform Memory Access) bu iyiletirme hafza kullanmn daha performansl hale getiriyor dolaysyla IIS daha verimli alyor.
  • Sonunda derdirtecek bir zellkle CPU limitlemesi ile ilgili. IIS'in en bandan beri CPU limitleme zellii mevcuttu fakat bir trl dzgn almyordu ve bizde eitli mekanizmalarla limitlemeler yapma gerei duyuyorduk. IIS 8 ile birlikte bu zellik gerekten salanmaya balanacakm. zellikle cloud sistemlerde ok ie yarayacak bir zellik diyebilirim.
  • Gvenlik alannda Dynamic Access Control diye yeni bir yaklam geliyormu. Bu zellik sayesinde kullanclar dosya sistemine aldklar etiketlere gre eriebileceklermi henz denemedim ama ilgi ekici bir zellik.

lk duyduklarmz ve grdklerimiz bunlar. Windows 8'in Server srmn test etme frsat bulursam daha detayl inceleyip yeni IIS'in neler yapabileceini greceiz bakalm.



spacer Yorum

MaestroPanel Screencast Serisi

16.08.2011 tarihinde yazldktan sonra, 0 kii yorum yazm.

MaestroPanel'in zelliklerini anlatan screencast serisine baladm. Hedefim haftada bir video yaynlamak. Bunlardan ilk ikisini geen hafta ve bu hafta yaynladm. Ekstradan duymayanlar iinde buraya yazyorum. ;)

MaestroPanel Screencast #1 - Sunucu Ynetimi bit.ly/ru1SYv
Panel'de sunucular nasl ynetiliyor, ne ekilde ekleniyor gibi sorulara cevap bulabileceiniz video.

MaestroPanel Screencast #2 - Plan Ynetimi bit.ly/nHXuMS
Panel'de datk yapdaki modulleri nasl ynetebileceiniz, bayi ve domain planlar nasl oluturabileceinizi ve limitlemeyi nasl gerekletirebileceiniz 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 dnyoruz.

Yakn zamanda bir Sistem Yneticisi, Bir Front-End developer ve birde Back-End developer olmak zere ufak bir ekip kurmay planlyoruz. Bu geni kapsaml proje ile ilgilenen arkadalar ping @ maestropanel.com adresine e-mail gnderirlerse imdiden adaylar belirleyebiliriz.

Projeye destek veren herkese burdan teekkrlerimi sunarm.

Takipte kalmak iin:
  • @maestropanel
  • maestropanel.com
  • blog.maestropanel.com


spacer Yorum

Razor Ninja'sının El Kitabı

09.07.2011 tarihinde yazldktan sonra, 5 kii yorum yazm.

MVC3 ile birlikte Razor ViewEngine geldiinde tamda yeni bir projeye balyordum fakat Spark ile devam etmeyi düünüyordum. Spark ile Razor arasnda ufak bir kararszlktan sonra hem ekosistemi hemde devamll olacan düündüümdem Razor'u seçtim. Alana kadar biraz skntlyd çünkü baz temel ilemleri yapmak için ufak tefek ipuçlarn bilmek gerekiyordu aratrrken örendiim bu ipuçlarn derleyip böyle bir Tutorial hazrladm. Okuyun ;)

String atraksiyonlarnda <text/>

Razor direkt HTML ile iç, içe kullanlabildiinden baz durumlarda C#'n içinden string çkts vermek gerekebiliyor. Böyle durumlarda bavurabileceiniz akll bir kaç tag' olarak <text> ie yaryor

spacer

Çkt:

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

@: Blok'u

Akc bir Razor sytax' için kullanlabilecek bir özellikte @: iaretlemesi. Bu iaretleme <text> ile edeerdir tek fark tek satr olarak kullanlmaktadr. <text> ise birden fazla satrda string çkts vermek için kullanlr ve bu taglarn arasndaki iaretlemeler ViewEngine tarafndan render edilmez. @: kullanmna örnek;

spacer

Çkt:

lem Gerçekleti

Comment'ler nasl olacak peki?

Razor'da da her ViewEngine'de olduu gibi kod içine açklama eklemek için kullanabileceiniz iaretlemeler vardr, tabi klasik olarak bildiimiz \\ veya ' olarak deil onun yerine @* ... *@ eklinde. Bu iaretlemeyi kullanlarak sunucu tarafl kod yorumlar ekleyebiliryorsunuz.

Tek satr için

spacer

gibi. Burda ki güzellik hem tek satr hemde çoklu satrda ayn iaretlemeyi kullanyor oluumuz.

Strongly-Typed View

Klasik ASP.NET ViewEngine'inde View'i belirli bir Model ile kullanmak istediimizde sayfann en üstünde attributes'lerden oluan uzunca bir tag eklemek gerekiyordu. Razor'da bu @model iareti ile kolayca gerçekletirebileceiniz bir ilem.

Örnein:

spacer

@Html.Raw

HTML'i Encode ederek ekrana veren güzel bir özelliktir. Klasik ASP.NET'de ki Server.HtmEncode() fonksiyonuna benzer. Ayn ii gören dier bir yardmc komut ise HtmlString().

Kullanm basittir:

spacer

Çkts:

<h1>Deneme</h1>

olacaktr.

Namespace'leri nasl kullanabiliyoruz?

Örnein Razor sayfasnn içinde System.IO namespace'i altndan bir Class kullanmak istiyoruz. Bunun için sayfasnn @model çarsnn altna @using çarsn yapmanz yeterli.

@using System.IO

gibi.

Sayfa içinde @function

Kullanl özelliklerden bir taneside Razor sayfas içinde sadece o sayfaya özel fonksiyonlar üretip, kolaylkla kullanabilmemiz. Örnein: Verdiiniz string'i ekrana krmz yazan bir sayfa içi function yazmak istersek.

spacer

eklinde yazabiliriz. IHtmlString döndürdüüne dikkat etmisinizdir Razor bunu render edilecek html string'i olarak alglayacak ve browser'a yorumlamas için gönderecektir.

Koullar (Conditions) nasl yazlyor?

Razor içinde ?:, switch, if.. koullar yazmak doal olarak mümkün bunun için @() iaretlemesi kullanlyor.

Örnein ?: condition'na örnek vermek gerekirse.

spacer

Model.Status deeri true olduu için ekrana direkt Tamam yazlacaktr.

If konuulu için ise;

spacer

Burda dikkat edilmesi gereken nokta @: kullanld için satr atlamalarnn zorunlu olduu. Dier bir If koulu örnei ise;

spacer

Burda HTML tag' ile string'i yazdryoruz fakat bu her zaman istenen bir durum deil o nedenle <text> ile'de kullanlmas mümkün.

spacer

text ile kullandnzda sadece "Tamam" string'i ekrana baslr.

Razor Delegate

Razor Delegate'leri kullanarak daha temiz, okunakl kodlama yaplmas mümkün. Baz durumlarda ise karmakl ve ileri oldukça kolaylatryor. Hemen örnek vereyim;

spacer

htiyacnza göre geniletmeniz mümkün, parametre dynamic olduu için kendi tipleriniz içinde çeitli fonksiyonlar gelitirip daha kullanl fonksiyonlar üretebilirsiniz tabi.

@Helper

Razor bünyesinde bir çok yardmc method barndrmasna ramen ihtiyacnza uygun Helper methodlar yazmanz kaçnlmazdr. Bu methodlarda sadece Razor sayfas içerisinde oluturup, dier sayfalarda da kullanabilmek isteyebilirsiniz ite bunun için @Helper iaretlemesi ile oluturacanz method'lar kullanabilirsiniz. öyle ki;

spacer

Çkts:

118,00 TL

Burdaki trick ise KdvDahil fonksiyonunu yazdnz Razor sayfasn Projenizde ki App_Code sayfasnn altna gönderdiinizde KdvDahil fonksiyonuna her Razor sayfasndan ulaabiliyor olmanzdr. Örnein KdvDahil fonksiyonunun yazl olduu Razor dosyasnn ismi Fiyatlar.cshtml olsun. KdvDahil fonksiyonuna dier Razor sayfalarndan ulamak 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 yararlanyor fakat HTML'e göndereceiniz attributes syntax' Anonymous Type'larda kullanlan cinsten deil. Örnekle açklayalm.

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

çktsn ActionLink kullanabilmek için aadaki ekilde yazmalsnz.

spacer

dikkat ederseniz data_id olarak yazdk fakat HTML'e data-id olarak yansd buda ActionLink methodunun akll özelliklerinden bir tanesi.

ActionLink için verebileceimiz dier bir ipucuda class kullanm. class .Net'de bir özel bir kelime olduundan, herhangi bir deikene'de class ismini verirken bunun deiken olduunu belirtmelisiniz;

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

çktsn alabilmeniz için ActionLink aadaki ekilde olmaldr.

spacer

@ burda bir çeit escape karakter olarak kullanlabiliyor.

@section

Section'lar genel ablonlar oluturulmasnda kullanlan son derece yararl bir Razor fonksiyonudur. MasterPage'de belirleyeceiniz ve isimlendirdiiniz section' herhangi bir Razor sayfasnda özel olarak kullanabilirsiniz.

Önce _Layout.cshtml içinde bir section tanmlamalsnz.

spacer

Daha sorna Layout eklenmi bir sayfada bu section' çarabilirsiniz.

@section jquery{
    $('#body').append('Section Çarld');
}

gibi. Burdaki örneimizde Razor sayfamza jquery'i tekrar initialize etmeden _Layout üzerinden çaltdk.

@Html.RenderPartial

Kendi oluturduunuz kontrolleri veya PartialView'leri Razor içinden çarmanz mümkün. Aadaki ekilde;

spacer

Burda dikkat etmeniz gereken ";" noktal virgül. Çünkü {..} parantezleri açtnzda C# moduna girmi oluyorsunuz. Menu.cshtml, PartialView'imiz ~/Views/Shared/ dizini altnda olmak zorunda çünkü Razor ViewEngine'inde bu path'ler default olarak aranyor. Fakat bu Path'lerin dnda da PartialView'lerinizi Render etmeniz mümkün,

spacer

PartialView'inizi herhangi bir Model ile kullanacaksanz bu Model'i parametre geçmek için aadaki syntax' kullanabilirsiniz.

spacer

ki @@, Bir @ eder

Baz durumlarda Razor'dan string geriye döndürürken @ iareti geçen string'ler döndürmeniz olas bu durumda @@ olarak verirseniz Razor bunu alglayp normal string gibi ileyecektir.

spacer

Normal string olarak alglanr.

@Deneme String@

Razor Syntax' olarak alglanr.

Ek olarak e-posta adreslerini Razor otomatik alglar ve ona göre davranr yani email adreslerinde böyle bir harekete gerek yok, direkt yazabilirsiniz.

@Url.Action

Url.Action, Controller'de oluturduunuz Action'larn sadece adresini verir. Ben genelde JavaScript'in içinde ajax çarlarnda kullanyorum.

spacer

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

Razor içinden SQL

imdiye kadar hiç kullanmadm fakat aklmzda bulunsun. Razor'da @{..} blogu içinde C# moduna geçtiimizi daha önce söylemitik, e madem C# moduna geçiyoruz o halde class içinde kullandmz tüm atraksiyonlarda kullanabilmemiz normal. Aada Razor sayfasndan sql sorgusunun çaltrlmasna dair bir örnek var.

spacer

bildiimiz PHP gibi...

imdilik bu kadar, yeni fonksiyonlar tecrübe ettikçe buraya ekliyor olacam...

Kolay Gelsin ;)



spacer Yorum

MaestroEx - Hosted Exchange Control Panel

17.05.2011 tarihinde yazldktan sonra, 2 kii yorum yazm.

Herkese Selamlar,

Heyecanla belirtmek isterim ki, MaestroPanel'in Beta 1srmnn kmasna ok az kald! Youn bir ekilde takvimimizi tutturmaya alyoruz ve heyecanla gelitirmeye devam ediyoruz ancak imdi size baka bir haberimiz var.

Bilindii zere MaestroPanel moduler yaps sayesinde ihtiyacnza uygun modulleri zahmetsizce kullanabileceiniz bir platform haline getirmeye alyoruz. Bu balamda da hosterlarn sk kulland ve servis verdii yazlmlarn modllerini MaestroPanel'e kendimiz eklemeye ncelik veriyoruz.

Bulardan bir taneside Microsoft Exchange Server 2010.

Microsoft radikal bir kararla Exchange 2010 ynetimi iin grafiksel arayzler yerine Powershell scripting mantn getirdi. Bu bir ok windows sistem yneticisi iin byk bir sknt yaratt nk bir ok komut seti renip Exchange 2010'u o komut setleri ile ynetmek gerekecekti, tabi bunun esasl bir renme sreci olduu ak ve byk sunucu farm'larnda da tekrar eden ileri sunuculara girerek teker teker yapmanzda ileri ok zorlatracakt.

Sistem yneticilerinin bu zdrabn gidermek, Exchange 2010 zerinden hosted hizmetler verebilmek, bunlar etkili bir biimde ynetebilmenizi salamak iin MaestroPanel Exchange modlmz ayr bir rn haline getirdik.

rnmzn ad MaestroEx ve sadece Exchange 2010 zerinden hosted exchange hizmeti vermenize yardmc oluyor. Laf fazla uzatmadan eriim bilgileri ve ilgili sayfalarn adreslerini aada veriyorum. Umarm Beenirsiniz.

MaestroEx'e ulamak iin ex1.maestropanel.com (user: admin/pass: password) adresini ziyaret edebilirsiniz. Biz demo iin bir exchange sunucusu kurduk fakat kendi exchange sunucunuz varsa maestropanel.com/hostedexchange adresinden MaestroEx Agent ekip kurmanz yeterlidir.

Umarm Beenirsiniz



spacer Yorum

Hosting Zirvesi 2011 Ardından

05.05.2011 tarihinde yazldktan sonra, 2 kii yorum yazm.

Geen sene katlamadm Hosting Zirvesi etkinliine bu sene hem konumac hemde ziyareti olarak katlma frsat elde ettim. Etkinlik gerek anlamda snk geti fakat benim iin iyiydi. Hosting sektrnden yeni kiilerle tanma frsatm oldu, yeni fikirler ve projelere vesile oldu, en nemlisi zerinde altm MaestroPanel projesini sektre tantma imkanm oldu. zerine baya konuuldu tavsiyeler, destekler geldi. Tabi bu iyi niyetlerinde yannda, haksz yere eletirilerde olmad deil, fakat onlarda olmasa ekilmez olurdu zaten :)

Genelde iki yaklam oluyor birincisi "Sper. Trkiyeden byle bir proje kabildiine ardm nasl destek olabiliriz" eklinde, kinciside "cPanel, Plesk varken ne gerek var. Zamann baka eyler iin deerlendir" eklinde. Sanrm ikisininde dengeli olmas gerek ki MestroPanel Projesinde byledi.

Zirveye dnersek;

ncelike Trkiye'de ilk ve tek olduunu hatrlatmak isterim ve grdm kadaryla ekip olarak deil amatr bir ruhla Emre'nin mcadelesi ile gerekleen bir etkinlik. (Buarada Emre Bilgisayar Mhendisliinde okuyan bir renci). Burdaki garip olay DorukNet dnda hi bir hosting firmasnn katlm gstermedii (Duyduuma gre Karegen ziyareti olarak katlm gstermi). Hosting firmalar sektrden bir haber. Bir haber olduu gibi her gelimeye ve oluuma burun kvryor. Buda sektrn hangi aamalarda olduunun bir gtergesi.

Asl demek istediim Hoster'larn kendi firmalarn tantabilecei, neler yapabildiklerini gsterecei bu gibi frsatlar deerlendiremiyor olmas! Acaba yaptklar bir eyler yok mu? Deli gibi donanm alp zerine letim sistemi, onun zerine Panellerini kurup satyorlarm hala? Onun iin mi byle etkinliklere katlmyorlar? sorular aklma taklyor hep.

Konu hakknda konuulacak ok ey daha var fakat uzatma gibi bir niyetim yok. Umarm nmzdeki sene Hosting Zirvesi hak ettii ilgiyi Hosting firmalarndan grr.



Sunumdan bir ka kare;

spacer spacer
spacer spacer


spacer Yorum

Bir başka Açık Kaynak proje MultiPosTR

16.03.2011 tarihinde yazldktan sonra, 5 kii yorum yazm.

Her e-ticaret sitensinin byle bir componenti vardr, tm bankalar destekleyebilen, reusability'si yksek, generic bir yapda, her programa implemente edilen sper bir class library. Bunu herkes yazmtr ama piyasada hi grnmez byle kodlar, gizlidir elletilmez kimseye. Birincisi buna tav olduum iin, ikincisi belki birileride dier provider'larn ucundan tutarda gzel ve yararl bir proje ortaya kar diye cncsde bankalarn dkmanlarnn berbat olmasndan mtevellit baladm ufaktan yazamaya.
Ha sende sanalPOS api'lerine hakimsen aha bu provider' ben yazarm diyorsan da haberim olsun ki github'dan write permission vereyim.

imdilik yeni Garanti sanalPos API'si mevcut, EST'yide yakn zamanda ekleyeceim. Aadakilerde eklenmeyi bekleyenler.

  • Bank Asya
  • Vakf Bank
  • Yap Kredi
  • Trkiye Finans

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

Ek olarak ayn ii yapan ve Php projelerinizde kullanabileceiniz Hasan zgan'n yazd vpos4php adnda gzel bir aran var olduunuda belirtmeden gemeyelim.



gipoco.com is neither affiliated with the authors of this page nor responsible for its contents. This is a safe-cache copy of the original web site.