My Books

 


Design Patterns in ABAP Objects

1464_high_res_2d

Boston, SAP Press, 2016, ISBN 978-1-4932-1465-5

Use design patterns to step up your object-oriented ABAP game, starting with MVC! Want to create objects only when needed? Call objects only when required, minimizing runtime and memory costs? Reduce errors and effort by only coding an object once? Future-proof your code with a flexible design? Design patterns are the answer! With this guide, you’ll get practical examples for every design pattern that will have you writing readable, flexible, and reusable code in no time!

– Use design patterns to write better code, faster

– Implement common architectural, structural, and behavioral design patterns

– See design patterns in action with real-world SAP applications

Link: SAP Press, Amazon

 


Ne Kadar Hayvansın

0000000444842-1

İstanbul, Pusula Yayıncılık, 2013, ISBN 605-510-602-7

Doğanın gizli programı insan ve hayvan davranışlarını nasıl şekillendiriyor?

Modern insana has üstünlük duygusunu bir an için bir kenara bırakıp doğaya; doğadaki diğer canlılara bakın. Sonra bir de kendinize bakın. İlk seferde, sosyal ortamımızın içimize kazıdığı şartlanmalarla karşılaşacaksınız muhtemelen, arada büyük farklar bulacaksınız. Bir süre sonra bir daha bakın. Bir daha… Bir daha… Önyargılarınızı bir kenara bırakıp daha dikkatli bakmaya başladıkça, aradaki farkların inandırılmış olduğunuzdan çok daha az olduğunu fark etmeye başlayacaksınız…

Erkekler neden futbola bayılır? Neden alışveriş yapmak kadınların kendini iyi hissetmesini sağlar? Seksten sonra neden erkekler uyumak isterken kadınlar canlanmış olur? Korku filminden sonra yorgana sarılınca neden kendimizi güvende hissederiz?

Doğadaki bütün canlılar, ortak bir programla dünyaya gelir. Bu program, insanda da vardır, köpekte de; ayıda da vardır, kaplanda da. Bu programı anlayabilen biri, kendine ve başka insanlara ait davranışların çok büyük bir kısmını da anlayabilir, açıklayabilir, hatta öngörebilir.

Dr. Kerem Köseoğlu, söz konusu programı deşifre edip herkesin anlayabileceği bir şekilde açıklıyor. Kitabı okudukça ve kendi içinizdeki programı da gözlemlemeye başladıkça; aslında her şeyin ne kadar basit olduğunu göreceksiniz. Hatta bu kadar uzun zamandır bu kadar açık bir şekilde ortada olan bir şeyi, nasıl olup da keşfedememiş olduğunuza şaşıracaksınız belki de…

Kolay okunan, pek çok konudaki görüşlerinizi değiştirecek ve size yeni bir bakış açısı kazandıracak, keyifli bir kitap… En önemlisi, diğer canlılara ve kendinize daha anlayışlı ve daha hoşgörülü davranmanızı sağlayacak!

Link: Pusula, Amazon, D&R, HepsiBuradaIdefix, KitapYurdu

 


Veritabanı Mantığı (10.)

0000000185275-1

İstanbul, Pusula Yayıncılık, 2005, ISBN 975-647-756-3

Bu kitapta yazar, SQL’in ne olduğu ve nasıl kullanıldığı gibi konulardan önce, veritabanı kavramına değiniyor. Bu çerçevede; veritabanının ne olduğu, nerelerde hangi amaçlarla kullanıldığı, nasıl hazırlanıp programlandığı gibi konulara açıklık getiriyor. Özellikle; yeni oluşturulan bir veritabanı içerisinde tablo tasarımının nasıl yapılması gerektiği konusu üzerinde ayrıntılı bir biçimde duruluyor. Yaygın olarak kullanılan tüm veritabanı programlarının ortak dili olan SQL’i öğretmek amacıyla hazırlanan bu kitapta, her konu birden çok örnekle anlatılıyor ve birkaç kez MS-Access programını çalıştırmış bir kullanıcının bile rahatça takip edebileceği bir dil kullanıyor.

Link: Pusula, Amazon, D&R, HepsiBuradaIdefix, KitapYurduDownloads

 


Bilgisayar Destekli Müzik

0000000180374-1

İstanbul, Pusula Yayıncılık, 2005, ISBN 975-6477-53-9

Bilgisayar desteği arkanızda olduğu sürece, evinizde ekonomik yollardan müzik yapabilirsiniz! Fazla masraf yapmadan kendi ev stüdyonuzu kurabilir ve odanızda yaptığınız çalışmalarla profesyonel kayıt stüdyolarını aratmayacak sonuçlara imza atabilirsiniz.

Kitapta bahsedilen programları kullanarak ruhunuzdan dökülen notaları dijital ortama aktarabilir, üzerlerinde sayısız düzenleme yapabilirsiniz. Tüm bunları; ortalama bir bilgisayar, doğru seçilmiş bir ses kartı ve program ile kolayca gerçekleştirebilirsiniz!

• MIDI nedir?
• Audio Nedir?
• Popüler Müzik Programları: Sequencer, Loop, Audio Düzenleme, Notasyon, SoundFont Programları
• Adım adım örnek uygulamalar
• Cakewalk Sonar ve Sound Forge Programlarının detaylı anlatımı
• Loop bazlı projeler ve Fruity Loops
• Notasyon ve Sibelius

Kendi müziklerinizi nasıl hazırlayacağınızı adım adım tarif eden kitapla birlikte, yazarın Audio çalışmalarını ve kitapta kullanılan programların deneme sürümlerini içeren CD de hediye!…

 


Programcılık Mantığı (9.)

0000000160095-1

İstanbul, Pusula Yayıncılık, 2004, ISBN 975-647-738-5

Programcılık nedir? Programcı olabilmek için neler gerekir? Kimler programcı olabilir? Programcılar ne yapar? Programcı kimdir?

• Programlama dilleri ve karşılaştırmaları
• Programcılık Terimleri
• Temel Algoritma Öğeleri
• Mantıksal Operatörler
• Akış Şemaları
• Nesne Temelli Programlama
• Görsel Programcılık

Bu sorulardan yola çıkarak, programcılığı masaya yatıran Programcılık Mantığı, programcı olmak isteyen ama nereden başlayacağını bilemeyenler için yazılmış benzersiz bir kaynak. Temel programlama öğelerinden, görsel programcılığa, programcılık terimlerinden nesne temelli programlamaya kadar, programcılık hakkında bilmek isteyeceğiniz her şey bu kitapta yalın bir dille ve günlük hayattan örneklerle anlatılıyor. Programcılığa nereden başlayacağını bilemeyenler, bu kitap tam sizin için. Değişkenler, fonksiyonlar, sınıf ve nesneler, akış şemaları, görsel programcılık, nesne temelli programlama gibi temel programlama konularını detaylı olarak inceleyen kitap, işlediği her konu için Java, C#, VB.NET ve Delphi’de yazılmış örnek uygulamalar da içeriyor. Böylece en çok kullanılan bu dört programlama dilini de bir arada görme ve kıyaslama imkânı da sunuyor.

Algoritma yapılarını, günlük hayattan örneklerden yola çıkarak anlatan, her uygulamanın dört ayrı dilde yazımını veren bu kitap, bu özellikleriyle Türkiye’de bir ilk.

Link: Pusula, Amazon, D&R, HepsiBurada, Idefix, KitapYurdu, Downloads


Bir Romeo Bir Juliet

screen-shot-2016-10-24-at-18-19-22

İstanbul, Self, 1999

 

Romeo geceye bakıp Juliet’i her düşündüğünde
Bir yıldız kayar Juliet’in gözlerine ve biraz daha parlar gece…
Juliet geceye bakıp Romeo’yu her düşündüğünde
Bir yıldız daha kayar Romeo’nun içine ve derinliklerde kaybolur gider… Aslında bilirler ki Romeo ile Juliet,
Güneş onların birbirlerini bulduğu gün bir daha doğmayacak…
İlkin son ve sonun ilk olacağı ilk ve son karşılaşma olacak bu…
Romeo ilk ve son kez Romeo,
Juliet ise ilk ve son kez Juliet olacak…

 

ASP.NET Menu MouseOver Problem Solution for IE8 and Safari

If you are using ASP.NET menus which open when you drag the mouse over them, you may experience difficulties in Internet Explorer 8 or Safari. They simply won’t respond to your mouseover action.

The workaround for Internet Explorer 8 is simple: Use the compability mode. However; the “solution” has been explained in http://www.daniweb.com/forums/thread244363.html . Here is the excerpt:

Setting the z-index property (HTML) using CSS can address this problem. The CSS class would look something like this:

  1. .adjustedZIndex {
  2. z-index: 1;
  3. }

And the Menu should look like as below

    1. asp:Menu ID="Menu1" runat="server"
    2. DynamicMenuStyle CssClass="adjustedZIndex" /
    3. /asp:Menu

The z-index has to be something higher.

I have set the z-index property as 99, and it worked like a charm.

The solution for Safari has been explained in http://forums.asp.net/t/941229.aspx?PageIndex=2 . Here is the excerpt:

What I did to enable the asp:menu for Safari was to add a file called safari.browser to the App_Browsers folder. The contents of safari.browser are as follows:

<browsers>
<browser refID="safari1plus">
<controlAdapters>
<adapter controlType="System.Web.UI.WebControls.Menu" adapterType="" />
controlAdapters>
browser>
browsers>

Basically the refID matches a browser id in the original browser configuration files for the .Net framework. In our custom .browser file we override the control adapter settings for the asp:menu control for this specific browser.

I have tested this on Mac OS Snow Leopard, and it worked like a charm.

Both of these solutions can be implemented together.

Convert DataReader to DataTable in C#

SqlDataReader sdr = comm.ExecuteReader();

 
 

DataTable ret = new DataTable();

 
 

DataTable schema = sdr.GetSchemaTable();

for (int n = 0; n < schema.Rows.Count; n++) ret.Columns.Add(new DataColumn((String) schema.Rows[n][“ColumnName”], (Type) schema.Rows[n][“DataType”]));

 
 

while (sdr.Read())

{

DataRow dr = ret.NewRow();

for (int n = 0; n < sdr.FieldCount; n++) dr[n] = sdr.GetValue(n);

ret.Rows.Add(dr);

}

Teknoloji Seçimi – Java vs .NET


Bir tanıdıktan daha duymuştum ama emin değildim yine de. “Türkiye’de java ile iş yapan çok fazla kurum olmadığından aranan kişiler genelde akademik eğitimi olan kişiler, bu yüzden .net öğren” demişti. Ne kadar doğru bilemem ama her ikisininde birbirine olan benzerliğini düşünürsem ( kitabınızda ki örneklerde fark ettim aslında bu benzerliği ) dediğinizi gibi ikisine de aşikar olabilirim.

Peki son bir rica, bende araştıracağım ama sizin tavsiye edebileceğiniz .net kitabı var mı? Yani giriş seviyesi için şu iyi olur diyebileceğiniz…

Türkiye’de Java ile iş yapan kurum olmadığı görüşüne pek katılmıyorum. Microsoft haricindeki birçok büyük firma (örnek: SAP, Oracle, IBM) ürünlerinin çok önemli bir kısmında Java altyapısı kullanmakta veya doğrudan Java desteği vermektedir. Daha net bir örnek vereyim: SAP’nin Netweaver çatısı altındaki ürün yelpazesinin tamamı Java tabanlıdır. Aynı şekilde Oracle veya IBM ürünleri üzerinde geliştirme yapmak istediğinde bulacağın API’ler yine muhtemelen Java tabanlı olacaktır. Bankacılık, finans, telekom gibi sektörlerde de Java kullanımı oldukça yaygındır.

Ne var ki; .NET daha popüler, Java daha başarılı, .NET daha hızlı, Java ile falanca projeyi yapmışlar gibi söylemlere dayanarak teknoloji seçimi yapmayı doğru bulmuyorum. Geçmiş bir yıla baktığımda, kendi yaptığımız projelerde .NET kullandığımız da oldu Java da. Kullanım oranımız ise neredeyse aynı diyebilirim. Burada önemli olan şey; bir teknolojiyi seçip fanatik bir şekilde ona odaklanmak yerine farklı teknolojilerin artısı ve eksisi olduğunu kabul edip doğru yerde doğru teknolojiyi kullanabilmektir. Bıçak ile çorba içemeyeceğin gibi, kaşık ile de elma soyamazsın 😉

Buna karşılık; Türkiye’de istihdam anlamında .NET ile Java programcısı arayışındaki iş ilanı sayılarını karşılaştıran bir araştırma yapılmış ise, bundan haberdar değilim. Böyle bir araştırma ilginç olabilirdi.

Programcılığı ciddi bir kariyer konusu olarak düşünüyorsan, ikisine birden aşina olmanda fayda var diye düşünüyorum. Muhtemelen birinde uzman seviyesinde, diğerinde ise orta seviyede olmayı hedeflemelisin. Zaman geçtikçe özel çalışmalarınla ikincisinde de uzman seviyesine gelebilirsin.

Burada dikkat etmen gereken konu şu: Karşına OOP Design, Threading, Event gibi kavramlar çıktıkça bunların .NET veya Java’da Syntax anlamında nasıl yapıldığını ezberlemek yerine kavramsal olarak anlamaya çalış. Nerede, niçin kullanılır, ne işe yarar, arkasındaki mekanizma nedir, bunları anlamaya çalış. Mantık olarak anladığında; .NET veya Java (veya Phyton, her neyse) kullanıyor olman sadece Syntax farkı yaratan basit bir detay olacaktır.

Kitap konusuna gelince… .NET konusunda piyasada pek çok kitap var ama benim şahsen alıp okuduğum bir kitap olmadı, o yüzden özel bir tavsiyem yok. Ama forumlarda yapılan yorumlara bakarak çok tavsiye edilen kitaplardan birini seçebilirsin diye düşünüyorum. Java konusunda ise Deitel’in yayınlamış olduğu Java kitabını şahsen kullanmış olduğum için tavsiye edebilirim. Kitap İngilizce’dir, ve ben Yeditepe Üniversitesi’nin kitapçısından almıştım.

İyi çalışmalar…

Login and Download File Programmatically in .NET

Recently, I was working in a .NET project when I needed to login to a website and download a file programmatically. I was able to call the login page & set the cookies without any problems. However, when I tried to download the file, I got weird messages like “Object moved to…” or “Unable to read data from the transport connection: The connection was closed”. The messages varied depending on the AllowAutoRedirect property and a few others.

I have spent hours to solve the problem, searched MSDN and dozens of forums without any success. Then, it turned out to be something really stupid. The thing is; when you are accessing the page to download the data, you have to pass some HttpWebRequest parameters; such as the user agent, protocol version and accept.

You will find the working code below. The critical area is marked bold.

public string readData()
{
CookieContainer cc = new CookieContainer();
HttpWebRequest request;
HttpWebResponse response;
CookieContainer cookies;
WebProxy proxy;
string ret = “”;

// Prepare proxy
proxy = new WebProxy(“192.168.0.10:8080”, true);

// Login & get cookies
request = (HttpWebRequest)WebRequest.Create(@”https://www.dummy.com/login.aspx?userid=myuser&password=mypass&#8221;);
request.AllowAutoRedirect = false;
request.CookieContainer = new CookieContainer();
request.Proxy = proxy;
response = (HttpWebResponse)request.GetResponse();
cookies = request.CookieContainer;
response.Close();

// Get XML file
request = (HttpWebRequest)WebRequest.Create(@”https://www.dummy.com/download.aspx?CMD=XML&#8221;);
request.AllowAutoRedirect = true;
request.CookieContainer = cookies;
request.Proxy = proxy;
request.AllowAutoRedirect = true;

request.Method = “GET”;
request.ProtocolVersion = new Version(1, 0);
request.UserAgent = “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)”;
request.Accept = “*.*”;

response = (HttpWebResponse)request.GetResponse();
ret += new StreamReader(response.GetResponseStream()).ReadToEnd();
response.Close();

// Logout
HttpWebRequest req3 = (HttpWebRequest)WebRequest.Create(@”https://www.dummy.com/logout.aspx&#8221;);
req3.CookieContainer = cc;
req3.Proxy = proxy;
HttpWebResponse res3 = (HttpWebResponse)req3.GetResponse();
res3.Close();

// Return values
return ret;
}

Visual Studio 2005 & SAP Bağlantısı

Bir süredir SAP entegrasyon projelerinde SAP Java Connector kullanıyordum. Bunun sebebi, SAP .NET Connector ‘un Visual Studio 2005 ile çalışmaması ve Vista’da desteklenmemesi; yani SAP tarafından bir kenara bırakılmış bir proje diyebiliriz.

Java + SAP Java Connector ile geliştirme yapmak, Visual Studio + SAP .NET Connector ile geliştirme yapmaktan çok daha uzun sürüyor ve daha zahmetli. Ayrıca, Native Windows Call’ler yapmak da büyük problem; mesela Windows ortamında VC++ ile hazırlanmış bir API’yi Java’da çağırmak neredeyse imkansız denecek derecede zor. Ama başka Tool olmadığı için mecburen katlanıyorduk.

Bugün, bir süredir denemek istediğim yeni bir Tool’un deneme sürümünü bilgisayarıma kurup deneme şansım oldu. Softwise .NET Connector, Visual Studio 2005 ile SAP arasında bağlantı kurup BAPI, RFC, vs çağırmaya izin veriyor. Vista, XP, vs dinlemeden mükemmelen çalışıyor, Türkçe karakter problemi de yok. Aşağıda, bu proje ile sadece 10 dakika içerisinde yaptığım bir geliştirmenin örnek kodları ve ScreenShot’ları var:

Console.WriteLine(“Program başladı”);

// Bağlantı
SAP.Connector.Connection conn = SAP.Connector.Connection.GetNewConnection(“ASHOST=10.0.0.5 SYSNR=00 CLIENT=050 USER=KEREMK PASSWD=PICASSO”);

// 1. Fonksiyon: ++
BAPIZKKTEST.BAPIZKKTEST z1 = new BAPIZKKTEST.BAPIZKKTEST();
z1.Connection = conn;
string res = “”;
string tur = “”;
z1.Zkktest(“12”, out res, out tur);
Console.WriteLine(“Fonksiyon Sonucu: ” + res);
Console.WriteLine(“Türkçe Karakterler: ” + tur);

// 2. Fonksiyon: Türkçe karakter parametre alma
BAPIZKKTEST2.BAPIZKKTEST2 z2 = new BAPIZKKTEST2.BAPIZKKTEST2();
z2.Connection = conn;
string hello = “”;
z2.Zkktest2(“üğıişçöÜĞIİŞÇÖ”, out hello);
Console.WriteLine(“2. Fonksiyon Sonucu: ” + hello);

// 3. Fonksiyon: Internal Table yollamak ve geri almak
BAPIZKKTEST3.BAPIZKKTEST3 z3 = new BAPIZKKTEST3.BAPIZKKTEST3();
z3.Connection = conn;
BAPIZKKTEST3.T001Table ti = new BAPIZKKTEST3.T001Table();
BAPIZKKTEST3.T001 tl = new BAPIZKKTEST3.T001(); tl.Bukrs = “1000”; ti.Add(tl);
tl = new BAPIZKKTEST3.T001(); tl.Bukrs = “1100”; ti.Add(tl);
tl = new BAPIZKKTEST3.T001(); tl.Bukrs = “1200”; ti.Add(tl);
BAPIZKKTEST3.T001Table te = new BAPIZKKTEST3.T001Table();
z3.Zkktest3(ref te, ref ti);

Console.WriteLine(“Şirket Kodları:”);
for (int n = 0; n < te.Count; n++) Console.WriteLine(te[n].Bukrs + ": " + te[n].Butxt);

// Bağlantıyı kapatalım
conn.Close();

// Press any key
Console.ReadKey();

Bu ürünü .NET platformunun nimetleriyle de birleştirip, siyah konsol ekranlarından daha ilginç uygulamalar da geliştirebilirsiniz:

Visual Studio 2005 ile SAP arasında bağlantı kurmak isteyenlere tavsiye ederim. Ancak şunu da unutmayın: Softwise, bu ürünü alanlara sadece bir yıllık lisans veriyor. Lisans, her sene ücretsiz olarak yenileniyor. Bu ilk bakışta kötü bir durum gibi gözükmese de; Softwise kapanacak olursa bir sene sonra lisanssız kalabilirsiniz. Bu durum Deploy edilmiş projeleri etkilemese de, geliştirme yaptığınız makinada Connector’u tekrar çalıştıramazsınız. Ya da 30 günde bir formatlayıp tekrar kurulum yapmanız gerekebilir. Softwise’ın kapanıp kapanmayacağı konusunda birşey söyleyemem, ama bu riski göz ardı etmeyin lütfen. Yaptığınız projeleri ileride modifiye etmek / geliştirmek gerektiğinde, Connector’u tekrar kullanıp kullanamayacağınız Softwise’ın varlığına bağlı olacak – ya da 30 günde bir format atma konusundaki sabrınıza…

Kalıcı bir çözüm arayanlar için Java Connector hala tek alternatif sanırım.

Java Mı .NET Mi

Java ile .NET’in avantaj ve dezavantajlarını Programcılık Mantığı adlı kitabımda karşılaştırmıştım. Bu karşılaştırmanın küçük bir özetini ifade etmek gerekirse;

.NET Avantajları:

  • Microsoft işletim sistemlerinde hızlı çalışır
  • Standart tek bir geliştirme aracı vardır ve kullanımı çok rahattır (Visual Studio)
  • Birden fazla dil kullanılabilir (Visual Basic, C#, J#, vs).
  • Microsoft tarafından çoook uzun bir süre desteklenecektir

    .NET Dezavantajları

  • Sadece Microsoft platformlarında çalışır

    Java Avantajları

  • Kodu bir kere yazarsın, VM’i olan her işletim sisteminde çalışır (Windows, Linux, Mac Os, vs)
  • IBM, SAP, Sun, Oracle gibi firmalar (Microsoft dışındaki bütün yazılım firmaları diyelim) ürünlerinin önemli bir kısmını Java ile geliştirir

    Java Dezavantajları

  • Yavaş çalışır
  • Tek bir dil kullanılabilir (Java)
  • Piyasada çok çeşitli ve birbirinden çok farklı geliştirme araçları vardır. Mesela Borland Jbuilder’ı tanıman, IBM Websphere’in başına oturur oturmaz Java yazmaya başlayabileceğin anlamına gelmez.
  • Şimdi; “.NET mi Java mı”, net bir cevabı olmayan bir soru. Aslında programcılığı kariyer olarak düşünüyorsan, her ikisine de aşina olman gerekir diye düşünüyorum. Bugünlerde piyasadaki iş ilanlarına bakarsan; .NET’e olan talebin Java’dan daha popüler olduğunu görürsün; yukarıda saydığım avantajları, piyasada sadece Windows’u hedefleyen orta (ve belki bazı büyük) ölçekteki işlerde .NET’in tercih edilmesine yol açıyor kanımca. Ama bu seni aldatmasın – Microsoft harici kurumsal bir yazılım söz konusu olduğunda, eğer çalıştığın platformun standartları Java çerçevesinde yazıldıysa, ek geliştirmelerin de Java’da yapılmasının sayısız avantajı olacakır. Birden fazla platformda çalışması istenen bir yazılım söz konusu olduğunda ise Java neredeyse kaçınılmazdır.

    Ama bu konuda çok da kaygılanmana gerek yok bence. .NET & Java platformları ve C# & Java dilleri birbirine o kadar çok benzer ki, birini öğrendiğinde diğerini de öğrenmiş olursun neredeyse. 1-2 yıllık C# programcılığının ardından; Java ile SAP’den veri çekip form üzerinde gösteren bir program yazmam sadece 1-2 saatimi almıştı.

    Benim sana tavsiyem, .NET üzerine kaynak & yardım bulmanın kolaylığını da düşündüğümüzde, ilk etapta .NET üzerine yoğunlaşman. C# ile Windows uygulamaları, Web siteleri ve Web servisleri yazar hale gelip veritabanı erişimi konusunda da tecrübe sahibi olduktan sonra, aynı şeyleri Java’da da yapmaya başla. Çok kısa sürede çok hızlı ilerlediğini göreceksin. Programcılık Mantığı adlı kitabımdaki örneklerde, aynı çıktıyı üreten birçok programı hem C#, hem de Java’da yazmıştım; onları da kıyaslayabilirsin.

    Umarım yardımcı olabilmişimdir.