Koray Kırdinli

Yazılım ve İş Yaşamı Hakkında Paylaşımlar

Ödeme sistemlerinde ISO Mesajlaşma

Günümüz ödeme sistemleri dünyasında kredi kartı ve banka kartı kullanarak ödeme yaptığımızda ödeme verisi bir sistemden diğerine aktarılır.  Örneğin üye iş yeri terminalinden yapılan bir kredi kartı ödeme işlem(transaction) verisi önce terminalin sahibi (acquirer) olan bankaya oradan da kartın sahibi (issuer) bankaya transfer edilir.

İşlem mesajı içerisinde işlem tipi, kullanılan kart, üye iş yeri bilgisi, işlem tutarı, güvenlik bilgileri vs bir çok bilgi yer almaktadır. Bu mesajın cevabı (response) olarak ise bu işlemden otorizasyon alınıp alınmadığı bilgisi dönülür.

Farklı sistemler arasında veri alış verişi olduğu için bu veriyi her sistemin anlayabilmesi yani bir standardının olması gereklidir. Finansal alanda dünyada kabul gören standart da ISO dur. ISO’nun açılımı da International Organization for Standardization’dır.

ISO bir çok standart getirmiştir. Örneğin kartın biçimi ve boyutu ISO 7810 standardında tanımlanmış. SO/IEC 7816-4 standardı akıllı kartlar için bir dosya sistemi yapısı tanımlar. Bizim konumuz olan ISO 8583 ise bizim için POS/ATM ile banka, banka ile BKM, BKM ile Mastercard/Visa arasında konuşurken kullandığı dildir diyebiliriz.

ISO mesaj desenine başlamadan önce aşağıdaki kavramları ön bilgi olarak edinmemiz gerekiyor.

1 byte : 8 bit
Binary : 0 ve 1 den oluşan 2’li gösterimdir.
Hex: 16’lı gösterim şeklidir. 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F. Her karakter 4 bit ile gösterilir.

Hex karakterlerin bitmap karşılıkları da aşağıdaki tabloda verilmiştir.

April 23, 2017 Posted by | Yazılım | , , , , | Leave a comment

9 adımda kartlı ödeme işlem akışı

ADIM 1 : Müşteri üye iş yerinden (Merchant) alış veriş yapar.

ADIM 2 : Üye iş yeri terminali aracı bankaya ödemeyi aracı banka ödeme terminali aracılığı ile bildirir. Ödeme terminal’leri genellikle fiziksel veya sanal POS ‘lardır.

ADIM 3 : Aracı banka işlemi Master veya Visa’ ya yönlendirir. Türkiye’de Master ve visa ile genellikle iletişime BKM aracılığı ile geçilmekte.

ADIM 4 : Daha sonra BKM işlemi issuer yani kart sahibi bankaya yönlendirir ve ondan provizyon bekler.

ADIM 5 : Kart bankası işlem cevabını geri BKM’ye döner.
ADIM 6 : BKM cevabı aracı bankaya geri döner.
ADIM 7 : Aracı banka cevabı üye işyeri terminaline geri döner.
ADIM 8 :  Kart bankası ücreti müşteriye fatura eder.
ADIM 9 : Müşteri ödemeyi kart bankasına yapar.

 

Bu 9 adım sadece online işlem akışını göstermekte, daha sonra kart bankası ve aracı banka arasında takaslaşma yapılmaktadır. Bu takaslaşma genelde banka ve BKM arasında takas dosyası paylaşımı ile olur. BKM’ye gönderilen dosyaya outgoing dosyaları, BKM’den alınan dosyalara incoming dosyaları denir. Aracı bankanın ödeme terminali kullanıldığı için kart bankası aracı bankaya komisyon ödemektedir.

April 2, 2017 Posted by | Ödeme Sistemleri | , , , , , | Leave a comment

ATM’ler de uzaktan key yükleme (RKL)

RKL Nedir 

ATM’lerde müşteri tuş takımından (Encrypted PIN Pad – EPP) şifresini girdiğinde   RKL en basit anlamıyla, her bir terminale merkezi bir noktadan TMK(Terminal Master Key) dağıtımı sürecidir. Bu TMK’lar ATM’ler üzerinde bulunan tuş takımına yüklenirler ve bu sayede hem operasyonel verimlilik sağlanır hem de güvenlik seviyesi artırılmış olur. Manuel key yükleme hem operasyonel maliyetin yanı sıra fraud riskini artırmaktadır.

2 tip RKL vardır. Bunlar ; Signature-based ve Certificate-based’dir.

RKL nasıl yapılır?
Öncelikle vendorlar ve banka arasında key paylaşımı yapılır. Daha sonra HSM’den yeni TMK ve TPK üretilerek pinpad’a yüklenir.

RKL sürecinde kullanılan Key’ler :

LMK (Local Master Key) : HSM den herhangi bir key talep edildiginde bu key LMK altinda verilir. Bu key yanlizca HSM tarafindan bilinir ve kullanillir. Bu key clear halini kimse bilmez. Aslında DES veya TripleDES key seti içerir. HSM’e LMK ürettirildiğinde bu key ler fiziksel kartlarda saklanırlar.

TMK (Terminal Master Key) : Key şifrelemek için kullanılır. Terminale manuel veya otomatik olarak yüklenir ve terminal üzerinde LMK altında şifrelenerek saklanır.

TPK (Terminal Pin Key) : ATM de pinpad’den girilen şifre TPK altında şifrelenerek doğrulamaya gönderilir. TPK ise TMK altında şifrelenmiş bir terminal ile acquirer banka arasında PIN taşıma key’idir.

ZMK (Zone Maseter Key) : Bir key’i ortamlar arsında taşımak için kullanılan başka bir key. Mesela bir ZPK değişimi yapılacak. Clear ZPK, bulutta açık bir şekilde taşınmaz. Bu key ZMK gibi bir key altında taşınır ve key güvenliği için ekstra bir süreç işletilir. ZMK’da yine LMK altında şifrelenerek saklanır.

ZPK (Zone Pin Key) : Zone lar arasinda bir PIN bilgisi transfer edilmek istendiginde bu key önce ZPK altinda gönderilir. Acquirer ile issuer banka arasında pin doğrulama yaparken PIN bu key ile şifrelenerek gönderilir. Örneğin A bankasının kartı ile B bankasının ATM’sinden şifre doğrulandığı durumu örnek olarak verebiliriz. ZPK, ZMK altında şifrelenmiştir.

[1] http://www.cryptera.com/wp-content/uploads/2014/07/Cryptera_WP_Understanding-RKL_To-Launch.pdf
[2] HSM 8000 Host Programmer‟s Manual

January 13, 2017 Posted by | Ödeme Sistemleri | , , , , , , | Leave a comment

C# ile Sertifika Yükleme

Merhabalar,
İş yerinde bir sertifika geçişimiz oldu ve bunu kod ile cihazlara yüklememiz gerekti. Hemen ufak bir uygulama yazdım ve işe yarayabileceğini düşünerek paylaşıyorum. AddCert() metodundaki parametreleri değiştirerek sertifikayı istediğimiz yere yükleyebiliriz. Aşağıdaki kod örneğimde Personal altına yükleme yapıyoruz.  Run->mmc yazarak PC’nizde yüklü olan sertifikaları inceleyebilirsiniz.

Capture


class Program
{
static void Main(string[] args)
{
Console.WriteLine("Loading has started......");
var cert = new X509Certificate2("CertificateName.pfx", "password", X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet);
AddCert(StoreName.My, StoreLocation.LocalMachine, cert);
AddAccessToCertificate(cert, "IIS_IUSRS");
Console.WriteLine("Loading has finished......");
}
private static void AddCert(StoreName storeName, StoreLocation storeLocation, X509Certificate2 cert)
{
X509Store store = new X509Store(storeName, storeLocation);
store.Open(OpenFlags.ReadWrite);
store.Add(cert);
store.Close();
}

private static void AddAccessToCertificate(X509Certificate2 cert, string user)
{
RSACryptoServiceProvider rsa = cert.PrivateKey as RSACryptoServiceProvider;

if (rsa != null)
{
string keyfilepath =
FindKeyLocation(rsa.CspKeyContainerInfo.UniqueKeyContainerName);

FileInfo file = new FileInfo(keyfilepath + "\\" +
rsa.CspKeyContainerInfo.UniqueKeyContainerName);

FileSecurity fs = file.GetAccessControl();

NTAccount account = new NTAccount(user);
fs.AddAccessRule(new FileSystemAccessRule(account,
FileSystemRights.FullControl, AccessControlType.Allow));

file.SetAccessControl(fs);
}
}
private static string FindKeyLocation(string keyFileName)
{
string text1 =
Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
string text2 = text1 + @"\Microsoft\Crypto\RSA\MachineKeys";
string[] textArray1 = Directory.GetFiles(text2, keyFileName);
if (textArray1.Length > 0)
{
return text2;
}
string text3 =
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
string text4 = text3 + @"\Microsoft\Crypto\RSA\";
textArray1 = Directory.GetDirectories(text4);
if (textArray1.Length > 0)
{
foreach (string text5 in textArray1)
{
textArray1 = Directory.GetFiles(text5, keyFileName);
if (textArray1.Length != 0)
{
return text5;
}
}
}
return "Private key exists but is not accessible";
}
}

December 23, 2015 Posted by | C# | , , , , | Leave a comment

Yazılım Kalite Buzdağı

Geliştirilen yazılımlarda genellikle buz dağının görülen tarafı ile ilgilenilir ancak gerçek şudur ki buz dağının görülmeyen tarafında kaliteyi etkileyen faktörler çok daha fazladır. Biz genellikle yazılımları test ettiririz ve UI testinden geçerse, yani sadece çalışırsa çoğu zaman production’a çıkma onayı verilir. Ama etkin bir code review yapıldığında gerçeklerle yüzleşmeye hazır olun :) Görünmeyen tasarımsal ve kodsal yanlışlar bir süre sonra başınıza bela olabilir veya siz o projeden ayrıldıktan sonra yeni gelen bir yazılımcı kulaklarınız çınlatabilir. O yüzden nasıl bulmak istiyorsan öyle bırak, Yaptığın işe özen göster ve asla baştan savma yapma :)

qualityIceberg
Alıntı : Steve McConell

 

July 11, 2015 Posted by | Yazılım | , | Leave a comment

Nedir Bu XTM?

XTM yazılımı tamamen Kuveyt Türk mühendisleri tarafından geliştirilen ve bankacılığa yeni bir soluk getirmeyi hedefleyen inovatif bir ürün olarak karşımıza çıkmakta. İlk bakışta görüntülü ATM gibi algılansa da, işin içerisine girdiğinizde aslında yeni bir şube konsepti olduğunu söyleyebiliriz. XTM’lerden para çekip, para yatırabilir, hesap açabilir, özel eğitimli müşteri temsilcileri ile görüntülü görüşme yapabilir, dijital olarak evrak paylaşımı yapılabilir, kredi kullanılabilir, dekont ve A4 çıktı verebilir, tarama yapabilir, banka kartı basabilir, kısacası bir şubeye gidip yapabildiğiniz hemen hemen her işlemi gerçekleştirebilirsiniz. Bu açıdan baktığınızda şube maliyetlerini azaltılıp Kuveyt Türk’e rekabet avantajı sağlamaktadır ve ilerde çok daha fazla ses getirecektir..  Tek bir XTM dijital şubesi ATM, internet şube, çağrı merkezi ve şube fonksiyonlarının harmanlanmasından oluşmaktadır.

xtm v2

Uzun uğraşlar sonucu elle tutulur, stabil bir ürün haline getirilen XTM oldukça olgunlaştı ve 2. nesli de piyasaya çıkmaya hazırlanıyor. Her XTM versiyonu artık yapılamaz deneni yapıyor ve bankacılık sektöründe de çığır açmaya devam ediyor. Şu an çok fazla reklamı yapılmamasına rağmen fısıltı gazetesiyle kulaktan kulağa yayılmakta ve görenlerin yoğun ilgilisini çekmektedir. Öyle ki Arjantinden, Çin’e , Mısırdan Polonyaya kadar bir çok banka XTM’i görmek için ofisimize site visitlerde bulundular.  XTM bu başarısını 2014 de rakamlarla da ispatladı ve oldukça karlı bir yatırım olacağının sinyallerini de vermiş oldu.

Bu tarz projeler ülkemiz adına da büyük bir kazanç ve devletin de bu ar-ge projemizi destekliyor olması oldukça sevindirici.  Emeği geçen herkesin ellerine sağlık. Umarım ekibimizde çok daha büyük işlere imza atarız.
IMG-20150615-WA0000

XTM ile bir çok fuara ve seminere katıldık, ödüller aldık.
Büyük Firma Dalında Yenilikçiliğin Ticarileştirilmesi Ödülü –  http://www.tesid.org.tr/tsd/ttPage.asp?pageID=213#sthash.REiCOJaB.dpuf
SIBOS – https://www.sibos.com/exhibition/about-exhibition/exhibitors/kuveyt-turk-participation-bank-rd-center
CEBIT  – http://www.cebitbilisim.com
CNR EXPO Ar-ge fuarı – http://cnrexpo.com

XTM ile ilgili daha detaylı bilgi için aşağıdaki linkleri ziyaret edebilirsiniz.
http://www.kuveytturk.com.tr/xtm.aspx
http://architecht.com/en/products/xtm




June 15, 2015 Posted by | Ödeme Sistemleri, Yazılım, Yaşam | , , | Leave a comment

WPF Threading Modeli

Yazılım geliştirirken hep şu thread’ler başımın belası olmuştur. Öldürürsün ölmez,  açık kalır, debug ederken sıkıntı, memory şişer bulurken göbeğin çatlar, Pool’a at geri çağır sürekli hep sıkıntı yaratır. Bu dezavantajları olmasına rağmen onsuz da olmuyor ne yazık ki.  Neyseki Microsoft WPF ile birlikte thread kullanımını bana bırak sen business’a odaklan demeye başladı. Çünkü aslında hayal ettiğimiz birinci resimdeki gibi olmasına rağmen, gerçekleşen ne yazık ki ikinci resimdeki gibi olabiliyor :)

HAYALİMDEKİ MULTITHREADING                           ASLINDA OLAN MULTITHREADING
thread1               Thread2
WPF de temel olarak geri planda 2 thread bulunmakta; birisi rendering için diğeri UI’ı yönetmek için kullanılır.
Rendering thread UI’a veri getirirken, ekrana çizim yaparken, eventler’i handle ederken devreye girer.  UI Thread’i ise genellikle 1 tane olur, bazı durumlarda birden fazla da olabilir.

UI Thread’i çalışacak parçaları Dispatcher denen bir nesnede kuyruğa sokar ve öncelik sırasına göre çalıştırır. HEr bir UI threadi en az bir Dispatcher, ve herbir Dispatcher iş parçacıkları sadece 1 thread de çalıştırabilir. WPF de çoğu nesne DispatcherObject sınıfından türer.

Yazdığımız programın müşterileri memnun etmesi için tabi ki müşterinin her butona bastığında, her işlem yaptığında programın hızlıca cevap vermesi gerekiyor ve buradaki anahtar nokta da Dispatcher kuyruğuna atılacak iş parçacıklarının küçük olmasıdır, bu yöntem ile iş parçacıklarını kuyrukta fazla bekletmemiş oluruz.

Genel mantık olarak uzun sürecek işlemleri ana UI thread’inde değil ayrı bir thread de yapmamız gerekiyor. Eskiden windows uygulamaları yazarken bir UI nesnelerine sadece onu oluşturan thread üzerinden erişebilirken, WPF ile birlikte farklı thread’lerden de UI nesnelerini güncelleyebiliyoruz. Örneğin bir datagridi ana thread’den bağımsız olarak arka planda güncelleyebiliyor olmak büyük veriler ile çalışırken çok faydalı olacaktır. WPF bunu ana UI thread’inin dispatcherına iş parçacıkları register ederek sağlıyor. Dispatcher.Invoke, Dispatcher.BeginInvoke metodları bu register işlemini yapar. Invoke senkron, BeginInvoke asenkron çalışır. Bunların önceliklerini de DispatcherPriority enumu ile belirtebilirsiniz.

Örnek kullanım : Yeni bir thread açarak dispatcher invoke yöntemiyle UI daki listbox ekran kilitlenmeden doldurulabiliyor.

Thread tt = new Thread(FillListBox);
tt.Start();

private void FillListBox()
{
for (int i = 0; i < 500; i++)
{
listBox1.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate()
{
listBox1.Items.Add(“A” + i.ToString());
});

Thread.Sleep(100);

}
}

May 28, 2015 Posted by | C#, WPF | , , , , | Leave a comment

Ödeme Sistemleri Serüveni

Uzun yıllar farklı alanlar ve departmanlarda çeşitli projelerde yer aldıktan sonra, son 2 yıldır da ödeme sistemlerinde yazılım geliştirmeye devam ediyorum. Ödeme sistemlerine geçtiğimde yazılım geliştirmek için sadece programlama bilmenin yeterli olmadığı gerçeğiyle yüzleştim. Ödeme sistemleri aslına baktığımızda çok fazla know-how gerektiriyor ve uçsuz bucaksız bir deniz gib. Bu konuda Türkiye’de çok fazla yetişmiş iş gücü kısıtlı. Bu alanda da yine yabancı yazılım ve standartları kullanmak zorundayız. Konuyla ilgili Türkçe kaynak bulmak neredeyse imkansız çünkü oldukça niş bir alan. Ben de bu konuda öğrendiğim konuları hem öğrendiklerimi pekiştirmek hem de bu alana yönlenmek isteyenlere faydalı olabilmek adına bir yazı dizisi şeklinde zaman içerisinde paylaşmayı hedefliyorum.
images

Ödeme sistemleri denince ilk akla gelen tabi ki kredi kartları ancak ödeme sistemleri çatısı altında bilgi sahibi olunması gereken o kadar çok kavram var ki , bunlar yazılım geliştirmenin çok ötesinde uzmanlık gerektiren konular.  Standartlar, sertifikasyonlar, kurallar, şifreler, chipler, doğrulamalar algoritmalar ve daha bir sürü konu. En basit tabiriyle ödeme sistemleri dediğimizde aklımıza ödeme yapabildiğimiz kanalları aklımıza getirmemiz gerekiyor. Bir ürün aldığınızda kredi kartınızı POS’a takıp şifrenizi girmenizle başlayan süreç, paranın satıcının hesabına geçirilene kadar geçen süreç veya ATM den işlem yapmak istediğinizde kartınızı cihaza takıp şifrenin doğrulanması veya internetten kredi kartınızla online alışveriş yaparken

POS_

Eğer bu sektöre girdiyseniz veya girmek istiyorsanız ister istemez aşağıda listelemiş olduğum bazı kısaltma ve terimlere aşına olmanız gerekiyor diye düşünüyorum. Yeri geldiğinde bunlarla ilgili konulara daha detaylı değineceğiz ancak bu ilk yazımızda genel bir vizyon sahibi olmak adına bir girizgah yapacağız.

ATM (Automated Teller Machine) :
HSM
(Hardware Security Module) :
XFS (Extensions for Financial Services ) :
EMV (Europay-MasterCard-VISA) :
RKL (Remote Key Loading) :
ISO (International Organization for Standardization) :
PCI (Payment Card Industry) :
PCI DSS (Payment Card Industry Data Security Standart) :
BKM (Bankalararası Kart Merkezi) :
3D Secure :
Debit/Credit Card :
NFC (Near Field Communication) : 
POS (Point Of Sale): Fiziksel kartla ödeme noktası.
VPOS (Virtual Point Of Sale) : Sanal Pos
Acquirer Bank : Ödemenin alınacağı POS’un bağlı olduğu bankadır ve anlaşmaları doğrultusunda satıcıya aktarır.
Issuer Bank :  Kartı düzenleyen bankadır.
Merchant : Üye İşyeri
Payment Switch :
BIN (Bank Identification Number)
IIN (Issuer Identification Number):
Clearing (Takas) :
Authorization : Provizyon;
PIN : Şifre
Fraud : Sahte işlemler
Chargeback : Kart hamilinin işlemin kendisine ait olmadığını bildirdiği tutar.
End of Day : Günsonu işlemi
OTP : One Time Password
CHIP : Para kartlarının ve
CVC2 : Kredi kartının arkasındaki 3 haneli güvenlik kodudur.

Aşağıdaki şekilde de bir ödeme işleminin müşteriden satıcıya kadar geçen adımları numaralandırarak çok güzel bir şekilde açıklıyor.

transflow

Referanslar 
http://howbankswork.com/what-is-a-merchant-acquirer/
http://www.fidelitypayment.com/resources/what_are_merchant_services
http://livecashless.com/costi-del-pos-arrivano-primi-risultati-dal-tavolo-tecnico/
http://www.odemesistemleri.org/
http://en.wikipedia.org/wiki/Payment_system

 

January 18, 2015 Posted by | Ödeme Sistemleri | , , , , , , , , , , , , , , | Leave a comment

Yazılımcılık ve Futbolculuk

Başlığı gördüğünüzde ne alaka diyebilirsiniz ancak ben yazılımcının kariyerini bir futbolcuya benzetiyorum. Neden derseniz ikiside 35 yaşında gözden düşüyor.  Günümüzde hepimizin bildiği gibi yazılım geliştirme sadece gençlerin oynadığı bir oyun olarak görülüyor ve  yaşlı programcılar iş bulmakta zorlanıyor. Hele ki sadece belli bir alanda uzmanlaşmış ise kriterlerine uygun iş bulması neredeyse imkansızlaşıyor. 30lu yaşlara kadar bir yıldız gibi parlayan yazılımcılar 35den sonra yavaş yavaş sönükleşiyor maalesef.

California Üniversitesinden Profesör Norman Matloff’ da yaptığı araştırmada 35 yaşından sonra programcılar iş bulma olasılığının azaldığını gözlemlemiş. İstatistikler programcıların 40 yaşından sonra genellikle mevcut pozisyonlarından ayrıldıklarını gösteriyor. Peki bu programcılara ne oluyor, hepsini ıssız bir adaya mı gönderiyorlar veya emlakçı, bakkal, manav gibi farklı mesleklere mi geçiş yapıyorlar? Yada her yazılımcının işten bunaldığı anlarda söylediği gibi köy hayatına geçiş mi yapıyorlar, “Yaw bıktım kod yazmaktan, memlekete dönücem 2 inek alıp çiflik hayatı sürücem ” eminim çevrenizde bir çok yazılımcının ağzından buna benzer cümleleri duymuşsunuzdur.  İşin doğrusu ise bir çok tecrübeli yazılımcı ya proje yönetimine geçiyor, ya danışman olarak firmalarına hizmet vermeye devam ediyor ya da kendi işini kurup kendi yolunda ilerliyor.

Özellikle ülkemizde yazılım anlamında tecrübeye çok da gerek olmayan bir sürü iş var. Zaten iş ilanlarına baktığınızda bunu daha net görüyorsunuz. Her şeyi bilsin ama 30 yaşını geçmesin, her şeyden azar azar bilsin ama hepsini bilsin, ne iş versem yapsın mantığı var.  Cem Yılmaz’ın dediği gibi “Little Little in to the Middle” olayı yani :) Spesifik iş ilanları çok göremezsiniz ki bu bize ülkemizin yazılımların çoğunun veritabanından bilgi getirip ekranda göstermenin ötesinde çok da bir şey yapılmadığına işaret ediyor. Durum böyle olunca firma da haklı olarak tecrübeli yazılımcıya ne diye fazla para vereyim demekte haklı çünkü düzen bu şekilde.

Tüketim toplumu olmanın ceremesini maalesef yazılım sektörü de çekiyor. Bu kadar genç nüfusumuz olmasına rağmen dünya arenasında boy gösterecek yazılımımız yok maalesef. Sadece yazılım değil donanım konusunda da durum aynı, her konuda dışarıya bağımlıyız. Arge projelerine ülke olarak yeteri kadar kaynak ayıramıyoruz maalesef. Niş alanlarda uzmanlaşamıyoruz. Bunları söylerken bir yandan da kendi öz eleştirimi de yapıyorum haliyle. Bir alanda uzmanlaşmadan diğer bir alana atlıyoruz. Hepimiz birilerinin sırtına basarak yönetici,müdür olma derdindeyiz, kısa yoldan köşeyi dönelim, şirket araba, telefon versin rahat yaşayalım, az çalışalım, 2+1 yetmez 4+1 evim olsun derdindeyiz.

Daha üniversiteden yeni mezun olan arkadaş ben proje yöneticisi olucam deyip çıkıyor, Yav arkadaş bi 2 satır kod yazaydın, bu acele ne. Çevrenin de poh pohuyla emeklemeden yürümeye çalışıyorlar. Bu arkadaşlara kızamıyorum da esasında çünkü kültürümüz bu şekilde.  kimse asker olmak istemiyor, herkes komutan olmanın derdinde. Ama şunu unutmayalım ki savaşı her ne kadar komutan yönetse de cengaver askerleri olmayan bir ordu yenilmeye mahkumdur.

Amerikada Microsoft’u ziyaret ettiğimizde şunu gördüm, bir adam sadece SQL’in bir parçasıyla ve Visual Studio’nun bir Add-In iyle yıllardır uğraşıyor ve her türlü detayını biliyor, daha iyisini nasıl yaparım diye kafa yoruyor. Böyle olunca o adamın ve ürünün de değeri artıyor, dünyada rekabet ediyor. O yazılımcı artık bilgisiyle yeni gelenlere önderlik ediyor, yol gösteriyor, kaliteye performansa odaklanıyor. Çin, Hindistan gibi ülkeler ise çok agresif bir şekilde sektöre girdiler ve şu anda gerçekten çok yol katettiler. Zaten yabancı sitelere baktığınızda bir çok başarılı projenin altında imzaları var. Devlet destekleri hat safhada.

Uzun lafın kısası Türkiye’de yazılımcılarla futbolcuların kaderleri birbirine çok benzetiyorum. İyi bir kariyer için doğru adımlar atmak şart yoksa ıskartaya çıkarılabilirsiniz. Belli bir genel tecrübeye ulaştıktan sonra niş bir alanda uzmanlaşıp hem kendine, hem firmasına, hem de ülkesine daha faydalı olunacağı kanaatindeyim. İnşallah biz de bir gün yazılımda ve donanımda dünyada ses getirebilir seviyelere ulaşabiliriz. 2015 de yazdığım bu ilk yazımda hem millet hem de kendi adıma biraz öz eleştiri yapmak biraz da içimi dökmek istedim, umarım başınızı şişirmemişimdir…

 

 

 

January 10, 2015 Posted by | Yaşam | , | 4 Comments

C# ile Video Recorder

Merhabalar, bir ihtiyaç neticesinde bilgisayarın ekran görüntüsünü video şeklinde kaydetme ihtiyacım oldu. Çözümü microsoftun bir dll i sayesinde oldukça kolaylaştı.   Microsoft.Expression.Encoder.ScreenCapture ‘ı projemize referans verdikten sonra aşağıdaki kod yardımı ile ekranın videosunu çekmeye hemen başlayabiliyorsunuz.  İster ekranın tamamını ister bir bölümünü alabilirsiniz. Videonun kalitesini ve saniyedeki frame sayısı gibi özelliklerini set edebilirsiniz.

Bu linkten dll’i download edebilirsiniz.

Rectangle _screenRectangle = Screen.PrimaryScreen.Bounds;
 ScreenCaptureJob _screenCaptureJob = new ScreenCaptureJob();
 _screenCaptureJob.CaptureRectangle = _screenRectangle;
 _screenCaptureJob.ShowFlashingBoundary = true;
 _screenCaptureJob.ScreenCaptureVideoProfile.FrameRate = 20;
 _screenCaptureJob.CaptureMouseCursor = true;

 _screenCaptureJob.OutputScreenCaptureFileName = string.Format(@"C:\test.wmv");
 if (File.Exists(_screenCaptureJob.OutputScreenCaptureFileName))
 {
 File.Delete(_screenCaptureJob.OutputScreenCaptureFileName);
 }
 _screenCaptureJob.Start();</pre>
<pre>

December 13, 2014 Posted by | C#, Yazılım | , , , , | Leave a comment

%d bloggers like this: