Google Analytics İzleme

25 Şubat 2011

.Net ile yazılan dll'i Asp veya Php için kullanma, Com Bileşeni yöntemiyle


.NET' de yazdığınız bir uygulama var ve siz bunu php veya asp de kullanmak istiyorsunuz. Yazdığınız .net projesini dll yapmalı ve o dll'i server'a kaydetmemiz gerekir. DLL .NET assembly olduğu için regasm.exe yardımızla bunu COM nesnesi haline getirmemiz gerekli.

Projeyi dll şeklinde yaptık diyelim. oluşan dll dofoo.dll olsun;

REGİSTER;
1. Proje>Properties ->Application Target Framework={Regsitry edilcek server da framework verisoyunu ile uygulamanın geliştirildiği ortamda versiyonlar aynı olmalı} 
->Build 
Generete serialization assembly=OFF 
->singing 
"sing the Assembly" check kutusunu işaretlenir 
choose a strong name key file: e tıklanır, isim girilir. 
Change Password a şifre gir 1234567 sonrakine de 1234567
2.Proje>Properties>AssemblyInfo.cs içinde [assembly: ComVisible(true)] 

3. ..\bin\Release klasöründe ne varsa sililinir
4. Rebuild->

5. ..\bin\Release klasöründe oluşan dosyaları c:\srvc dizinine kopyala
6. CMD>regasm /tlb /codebase c:\srvc\myfoo.dll 
Mesaj: Types registred successfully Assembly exported to 'c:\AxaIntegration\myfoo.tbl', and the type library was registered successfully
7. "C:\WINDOWS\assembly" klasörüne c:\srvc\myfoo.dll dosyasını sürükle-bırak. otomatik buraya gelcektir. myfoo 1.0.0.0 nesnesi gözükmesi gerek.
8. BİTTİ


asp yapıyorsak ISS'i restart etmek gerekebilir. Yaptığımız projenin artık fonksiyon ve metodlarını asp de kullanabiliriz.

Set MyFooCreator = CreateObject("myfoo.mycls")
MyFooCreator.Title = "selam"
MyFooCreator.Do

UNREGİSTER;
1. regasm /unregister c:\srvc\myfoo.dll 
2. C:\WINDOWS\assembly klasöründen eklediğimiz dll'i siliyoruz.

Assembly Registration Tool (Regasm.exe)

Kaynak:



16 Şubat 2011

Microsoft SQL Server 2005 ve 2008 Express için sql profiler

The profiler for Microsoft SQL Server 2005/2008 Express


asp.net'de <% %> etiketlerinin anlamları

Code in <% %> tags is for running arbitrary code, not for setting property values. 
Code in <%= %> tags is for rendering to the output stream. 
Code in <%# %> is for databinding.  
Code in <%$ %>is for expression bindings, but they execute too early in the page's life cycle.


Güzel makaleler:
Expressions vs. Statements, part 2: ASP.NET Code Block Types: http://michielvoo.net/blog/expressions-vs-statements-part-2-asp-net-code-block-types/
Using Expression Builders in ASP.NET: http://www.4guysfromrolla.com/articles/022509-1.aspx

XA : Needed More Often Than You Think


Code Coverage kavramı

Java'da uygulamanması anlatılmış : http://mustafatan.blogspot.com/2007/08/emma-ile-code-coverage.html
.Net ile uygulanması anlatılmış: http://www.ericsink.com/articles/Code_Coverage.html


15 Şubat 2011

Quartz Scheduler hakkında güzel bit tanıtım makalesi

Mustafa Tan'a teşekkürler.

Özellikle kurumsal uygulamalardaki en kritik konulardan biri de belli bir saatte çalışması planlanmış batch işlemleridir. Örneğin Bankacalık Uygulamalarındaki Otomatik Ödeme Talimatları, Havale ve EFT talimatları, Günsonu işlemleri, vs. "Job Scheduler" diye adlandırılan araçlar ile gerçekleştirilmektedir.

Bu işlemler arkaplanda, kullanıcı ile bir etkileşimi olmadan çalıştığı için aynı anda yüzlerce thread'in çalışmasına neden olabilir. Bu yüzden bu araçların işlerini, sistem kaynaklarını en verimli bir şekilde kullanarak, hata yapmadan, yapsa bile loglayarak veya daha sonra düzelterek (recovery) çalışması gerekmektedir. Özellikle bankacılık gibi kritik uygulamaların günsonu işlemlerinde milyon dolar'ların işlendiğini düşünecek olursanız bu araçların önemi daha iyi anlaşılacaktır.

İşte bu blogum'da daha evvel geliştirdiğimiz bir çok uygulamamızda kullandığımız Quartz Scheduler'dan bahsedeceğim. Hatta bahsetmekle kalmayacak, Quartzla ilgili yazdığım birörneği de paylaşacağım.

Quartz, dünyaca ünlü bir çok lisanslı uygulamanın da kullandığı açık kaynak uygulama. Quartz halen, bünyesinde WebWork (Strus ile birleşip Strus2 adını aldı), SiteMeshOSCache gibi dünyaca ünlü açık kaynak projeleri barındıran OpenSymphony Açık Kaynak topluluğu altında geliştirilmekte. Açık Kaynak uygulamaları kullanmakta hala tereddüt edenleri biraz rahatlattıktan sonra Quartz'ın özelliklerine geçelim.

Quartz öncelikle her türlü Java Uygulamasının bir parçası şeklinde çalışabiliyor:
* Quartz can run embedded within another free standing application
* Quartz can be instantiated within an application server (or servlet container), and participate in XA transactions
* Quartz can run as a stand-alone program (within its own Java Virtual Machine), to be used via RMI
* Quartz can be instantiated as a cluster of stand-alone programs (with load-balance and fail-over capabilities)
Quartz'ın XA Transaction desteği aslında çok önemli bir özellik, maalesef bir çok yazılım geliştirici XA'in (Distributed Transactions) öneminin farkında olmadığı için veritabanları üzerinde uyumsuz (inconsistant) veriler bulunmakta.

Quartz bir özelliği de, dünyaca ünlü Strus ve Spring gibi framework'lere kolayca entegre edilebilir olması:

Quartz'ın Spring ile Entegrasyonu
Quartz'ın Strus ile Entegrasyonu

Quartz'ın en önemli özelliklerinden biri de Trigger diye adlandırlan çok farklı tetikleme mekanizmasına sahip olması:
* at a certain time of day (to the millisecond)
* on certain days of the week
* on certain days of the month
* on certain days of the year
* not on certain days listed within a registered Calendar (such as business holidays)
* repeated a specific number of times
* repeated until a specific time/date
* repeated indefinitely
* repeated with a delay interval
Quartz'ın bir başka özelliği de çalıştırdığı işlerin transactional bir şekilde gerçekleştirebilmesi. Ayrıca Clustering ve Job Persistence desteği sayesinde bir veritabanı üzerinde işlerini saklayabiliyor ve cluster node'ları arasında dağıtabiliyor:
* The design of Quartz includes a JobStore interface that can be implemented to provide various mechanisms for the storage of jobs.
* With the use of the included JDBCJobStore, all Jobs and Triggers configured as "non-volatile" are stored in a relational database via JDBC.
* With the use of the included RAMJobStore, all Jobs and Triggers are stored in RAM and therefore do not persist between program executions - but this has the advantage of not requiring an external database.
* Quartz can participate in JTA transactions, via the use of JobStoreCMT (a subclas of JDBCJobStore).
* Quartz can manage JTA transactions (begin and commit them) around the execution of a Job, so that the work the Job does happens within a JTA transaction.
* Fail-over.
* Load balancing.
Quartz'ın diğer özelliklerini ve güzelliklerini anlatmam saatler sürer. Bunun yerine kendi sitesindeki tutorial'lara bir gözatmanızda fayda var. Ayrıca aşağıda linkini paylaştığım Quartz'ın Cluster modda kullanımı ile ilgili bir örneğe göz atabilirsiniz.

Quartz JDBCJobStore Tutorial

Bu blogu okuyanlar arasında "Ne gerek var Java'da Scheduler kullanmaya" diye düşünenler olabilir. Bu soruya cevap vermeden evvel alternatifleri düşünelim:

1) Batch işlemlerinin veritabanı job'ları olarak çalıştırılması
Bu yöntem zaten şu an en yaygın kullanılan yöntemlerden birisi. Veritabanı diğer kullanıcı işlemleri nedeniyle yük altında değilken veya batch olarak işlenen çok fazla veri yokken bu yöntem çok sağlıklı çalışır. Peki yükümüz her geçen gün artarsa ne yapacağız, unutmayın veritabanı üzerinde çalışan fonksiyonlar bir yandan hesaplama yapmak için bir yandan da kayıtları güncellemek için sistem kaynaklarını kullanırlar. Kaynaklarınız yetmediği zaman aynı orta katmanda olduğu gibi veritabanlarınızı çoğaltamazsınız.

Ama Quartz kullanıyorsanız veritabanını sadece insert, update ve delete işlemleri için kullanılıyor, tüm business fonksiyonları ise Quartz'ın çalıştığı başka sunucular üzerinde işleniyor olacak. Kaynak ihtiyacınız arttıkça yeni sunucular ekleyebileceksiniz. (Load-balancing)

2) Batch işlemlerinin işletim sistemi (unix/windows) job'ları olarak çalıştırılması
Bu yöntem aslında ilk bakışta Quartz'ın load-balancing özelliğini karşılıyor gibi gözüküyor. Shell script yazılarak Unix'in cron'una eklenen batch işlemlerin en zayıf yani recovery'dir. Kısaca özetlemek gerekirse Quartz'ın cluster node'ları arasında "Quartz Kardeşliği" diye bir kavram vardır. Hiç bir kardeş diğerine hükmetmez ama arkasını kollar. Kardeşlerden biri çalışırken hata alırsa diğerleri onun işlerini halledebilirler. Eğer aralarına başka bir kardeş daha katılırsa ellerindeki işleri diğer kardeşle paylaşırlar. Shell scriptler ile bu işleri yapmak çok zordur. (Fail-over)
--
Ciddi işlerde işletim sistemine ait scheduling özelliğini kullanmak çok abes bir yaklaşım olacaktır. En azından windows platformu için kati suretle önerilmez :)

Veritabanında job yapmak işletim sistemi seviyesinde yapmaktan biraz daha güvenilir görünüyor ama perfomans konusunda bu defa sıkıntı olacaktır.

Akılama takılan bir soru ise misal SQL Server ile job yatığımızda belirli durumlarda (özellikle de olağan dışı bir durum olduğunda) loglamanın haricinde bizleri bilgilendirme yeteneğine sahip (net send mesajları,mail, alerter vb) acaba Quartzda da bu tip bir imkanımız olur mu? ÖZellikle de 7/24 sistemini aykata tutmak isteyen kişiler için bunun önemli bir özellik olduğunu düşünüyorum .
--
Quartz'ın TriggerListeners, JobListeners ve SchedulerListeners olmak üzere 3 adet Listener interface'i bulunmakta. Bu interface'ler kullanılarak her türlü bilgilendirme mesajı mail, sms, netsend, vs. yoluyla gönderilebilir.

Ayrıca Quartz'ın bir de .NET versiyonu geliştirilmekte:

http://quartznet.sourceforge.net/
--

Kaynak:


11 Şubat 2011

Windows vista'da visual studio 2010 ile proje çalıştırılmasının internet explorer'da görüntülenmemesi

Bunun nedeni windows vista'daki host dosyasında ::1 localhost tanımının olmasıdır. Bu satırı kaldırırsanız localhost ile çağrımlarda sayfa gösterimleri çalışmaya başlamaktadır.


Kaynak:

This is because the system blocks the name localhost with a port number. If you replace the word localhost and type 127.0.0.1 it should work.
To fix this issue, open the hosts file "C:\Windows\System32\drivers\etc\hosts" and comment the line "::1 localhost" and then retry.
Please note that this line is required by IP v6 and should not be removed if you are using it.

asp:BoundColumn kontrolünün yerel kaynak dokümanında görünmemesi

DataGrid kontrollerindeki <asp:BoundColumn> kontrolünü yerelleştirmek için Generate Local Resource özelliğini kullandığınızda kolon bilgileri eklenmemektedir, bunun yerine elle bu kontrole meta:resourcekey="gridColumn0" eklemesi yapmalısınız.

<asp:BoundColumn DataField="ce_number" SortExpression="ce_number"meta:resourcekey="gridColumn0"></asp:BoundColumn>

Örneğin "gridColumn0.HeaderText", "CE Number" şeklinde ilgili .resx dosyasına ekleyebilirsiniz.


GridView kontrolünde boundcolumn'un meta:resourcekey bilgileri otomatik olarak üretilmektedir, burada elle yazmanıza gerek yok.

Kaynak:



"Hizmet Güvencesi" araştırması sonuçlandı!

"Hizmet Güvencesi" araştırması sonuçlandı!

CA Technologies'in Türkiye de dahil Avrupa çapında yaptırdığı araştırmaya 30 ülkeden 520 üst düzey yönetici ve BT profesyonelinden oluşan seçkin bir topluluk katıldı. "Hizmet Güvencesi: İş Hizmetlerinde Kesinlik Arayışı" adlı araştırma, kullanıcı deneyimlerine bakarak kurumların sunduğu iş hizmetlerinin performansını ele alıyor. 

CA Technologies Türkiye Ülke Müdürü Vekili İlkem Özar, araştırmayla ilgili açıklamasına şu şekilde başladı:

"Günümüzde kurumlar, giderek daha sofistike olan iş taleplerini karşılarken hem işin kısa zamanda başarısını, hem de en iyi performansı sunmayı garanti etmek gibi iki güç görevi birlikte hayata geçirmek zorunda. Yeni iş hizmetlerini hayata geçiren birçok kurum ise bu hizmetlerin performansını takip etmek için yoğun çaba harcıyor ve son kullanıcıya etkisinden emin olamıyor. Kurumların hizmet performansları hakkında yaşadığı belirsizlik, bu hizmetlerden etkilenen müşteri ilişkilerinin geliştirilmesi için de ciddi bir bariyer oluşturuyor. Hizmet güvencesi çözümü, işte bu noktada sistemlerin ve ağ altyapısı üzerinde çalışan uygulamaların, veri hareketlerinin ve gerçek kullanıcıların deneyimi arasında canlı bir köprü oluşturuyor ve bu süreci yönetilir kılıyor."

İlkem Özar, araştırmanın çok önemli bazı noktaları ortaya çıkardığını belirterek şu bilgileri verdi:

"CA olarak yaptırdığımız bu araştırmada katılımcılara sorduğumuz soruların sonucunda, Türk yöneticilerinin yüzde 63'ü, bundan sonra iş hizmetlerinin izlenmesi ve kullanıcı memnuniyetinin çok daha önemli hale geleceğini söyledi. Müşteri memnuniyetini ön plana çıkaran firmaların yaklaşımlarının bu yönde olduğunu gözlemliyoruz.

Türk katılımcıların yüzde 37'si ise "Problem ortaya çıktığı zaman ilgileniriz" yaklaşımında bulundu. Ancak bu yaklaşım ve son kullanıcı deneyimine ilişkin yetersiz bakış açısı, aynı zamanda, kurumun öngörülebilir ve istenen müşteri deneyimlerini sağlama, verimli ve etkili servisler oluşturma, yeni uygulamalar sunma, kısacası proaktif bir BT yönetimine sahip olma gibi birçok yetkinliğini de başında engellemiş oluyor.
 "

Müşteriyi uçtan uca görebilmek

Araştırmanın çok önemli bir gerçeğe işaret ettiğini söyleyen İlkem Özar, artan müşteri beklentileri, gelişen hizmet çeşitliliği ve bulut gibi teknolojideki gelişmeler ışığında, iş hizmetlerinde artık kesinliğe ve belirginliğe daha da çok ihtiyaç duyulduğuna dikkat çekerek şunları söyledi:

"BT servisleri, bugün birçok profesyonel yöneticinin düşündüğünden hızlı bir değişim gösteriyor. Bu nedenle günümüzde, dinamik BT ortamlarının, tek tek her müşteri işleminin performansının bir uçtan diğer uca kontrol altında tutulduğu platformlar olması arzu ediliyor. Son araştırmanın ana bulguları, birçok kurumun bu sorunla sık sık karşılaştığını ancak durumun aciliyeti ve önceliği konusunda etkin davranamadığını ortaya koyuyor. Kurumların hizmet güvencesi stratejisini bütün boyutlarıyla algılamaları ve hayata geçirmeleri, bu nedenle son derece kritik bir karar olmaya ve güncelliğini korumaya devam ediyor. Bu karar, aynı zamanda, rekabetçi bir ortamda yarışan tüm kurumların, fiziksel, sanal ve bulut platformlarındaki iş servisi sunumlarıyla bağlantılı yetkinlik düzeylerini de yansıtıyor olacak".

Gerçek maliyetleri oluşturmak 

Müşteri deneyimlerinin iş sonuçlarına etkisi itibarıyla kayda değer bulgular taşıyan araştırma, aynı zamanda iş ve BT liderlerinin çevrimiçi (online) kullanıcıların aldığı servis performanslarının kalitesine de çok fazlagüvenmediklerini ortaya koydu. Türk katılımcıların yüzde 20'si kendi çevrimiçi (online) hizmetlerini, müşteri ihtiyaçlarını tam anlamıyla karşılama bağlamında çok güvenilir bulurken, yüzde 80'e varan büyük bir çoğunluk sundukları hizmetler için "fazla güvenli değil" ya da "idare eder" yanıtlarını verdi. 

Buna ek olarak araştırmaya katkıda bulunan iş liderleri ve BT profesyonellerinin yüzde 47'si, kullanıcının zayıf performans gösteren web uygulamaları nedeniyle karşı karşıya kaldığı sorunların sebep olduğu maliyeti kurumların tam olarak takip edemediğini ifade etti. 

Karar vermek için bilgi şart

Kurumlar, sadece ortaya çıkan servis problemleriyle uğraşmak zorunda kalmaktan değil; aynı zamanda maliyetlerin artması ve verimliliğin düşmesinden de büyük bir kaygı duyuyor. Bu çerçevede yöneticilere, son 18 ayda, gerek çevrimiçi (online) hizmetleri, gerekse dahili web uygulamaları kullanıcılarından kaynaklanan problemlerle nasıl mücadele ettikleri de soruldu. 

Araştırmayı yanıtlayanların yüzde 40'ı "ortaya çıkan yeni konuları ve problemleri gidermek için maliyet artışlarını göze aldıklarını" ifade ederken, katılımcıların yüzde 37'si, uygulamanın devre dışı kalması veya zayıf performans göstermesi nedeniyle çalışan verimliliğinde kayıplar yaşadıklarını söyledi. Soruyu yanıtlayanların yüzde 43'ü ise karar vermek için gerekli bilginin yetersiz veya eksik olduğunu bildirdi. 

İş dünyasında bir başka endişe kaynağı, çoğu organizasyonun hizmetlerindeki kalite kaybının işe yansıma derecesini tam olarak ölçememekten kaynaklanıyor. Kurumların yüzde 85'i, hizmetlerden kaynaklı birçok problemin yarattığı etkiyi tam olarak anlayabilmek için yeterli ve eksiksiz bilgiye sahip görünmüyor. 

Aynı şekilde yüzde 83'lük bir kitle bu durumun markanın ya da şirketin ününe verdiği hasarı da ölçümleyemediklerini ifade ediyor. Araştırma bulgularına göre sadece yüzde 27'lik bir yönetici kesimi, son kullanıcı deneyimlerini dikkate alan bir servis seviyesi anlaşmasına sahip olduğunu söyledi.

Basın bülteninden derlenmiştir.

Alıntı:


08 Şubat 2011

Sanal Makinelerle Microsoft Dynamics CRM 4.0 Kurulumu Deneyimi

Sanal makineleri Oracle VM VirtualBox uygulaması ile oluşturuyorum.
Birinci sanal makinemi oluşturdum ve özellikleri:
 - MS Windows Server 2003 Standart Edition SP2
 - Yeni ActiveDirectory ve DNS kurulumu ile ishakdom1.com adında alan oluşturdum.
İkinci sanal makinemi kurdum ve özellikleri:
 - MS Windows Server 2003 Standart Edition SP2
 - Bu sanal makineyi ishakdom1.com domain'ine ekledim

Devamını tamamladıkça ekleyeceğim...


Kaynaklar:
http://cenkmete.com/windows-servers/active-directory-kurulumu-ve-kontrol-islemleri/
http://www.hwturk.com/index.php/virtual-boxta-yeni-host-ekleme/
http://www.hwturk.com/index.php/virtualbox-network-kart-ayari/

04 Şubat 2011

SQL Server CE - Compact Edition 3.5 sürümünü Asp.Net uygulamasında kullanma

Sql Server CE 3.5 sürümü Asp.net uygulamasında kullanmak isterseniz
{"SQL Server Compact is not intended for ASP.NET development."}
şeklinde hata vermektedir.
Bu sorunu aşmak için
Global.asax dosyasında Application_Start metoduna şu çağrımı eklemeniz gerekmektedir:
AppDomain.CurrentDomain.SetData("SQLServerCompactEditionUnderWebHosting", true)

Asp.net uygulamasında .sdf uzantılı Sql Server CE Veritabanına ulaşmak için connection string'ine ya tam yolu yazmalısınız ya da DataDirectory tanımı kullanmalısınız. Relative yani bağıl path tanımı hata vermektedir.
Asp.net uygulamasında FirstSample.sdf veritabanı dosyasının App_Data olduğunu düşünürsek şu şekilde yazmalısınız:
"Data Source=|DataDirectory|\FirstSample.sdf;"

NHibernate configurasyon dosyasındaki tanım ise şöyle olmalıdır:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
    <session-factory>
        <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
        <property name="dialect">NHibernate.Dialect.MsSqlCeDialect</property>
        <property name="connection.driver_class">NHibernate.Driver.SqlServerCeDriver</property>
        <property name="connection.connection_string">Data Source=|DataDirectory|\FirstSample.sdf</property>

        <property name="show_sql">true</property>
    </session-factory>    
</hibernate-configuration>

System.Data.SqlServerCe.dll dosyasınında bin klasöründe olmalıdır.