RSS

Category Archives: .NET

.NET teknolojileri hakkında

JiraTouch: Using open source tools to develop apps for iPhone


My friend and former colleague Tolga Kürkçüoğlu told me that JiraTouch team released JiraTouch for iPhone.

One of the most interesting parts of this story is the use of open source tools for the development of this product. JiraTouch team says that they used Mono, MonoDevelop and MonoTouch for developing the software that runs on iPhone.

JiraTouch for iPhone

JiraTouch for iPhone

For details, screenshots, and videos you can visit http://itunes.apple.com/tr/app/jiratouch/id355922987

 
Leave a comment

Posted by on February 24, 2010 in .NET, Programlama

 

Çeviri Felaketleri – 11: BT Akademi'nin C# 3.0 Kursu


Bana gelen e-postadan bir alıntı:

C# 3.0 Yenilikleri

- Bilinçsizce türlendirilmiş yerel değişken
- Nesnelere ve koleksiyonlara ilk değer ataması
- İsimsiz Veri Tipleri (Anonymous Types)
- Genişletme Metotları (Extension Methods)
- Lambda İfadeleri (Lambda Expressions)
- Sorgu İfadeleri (Query Expressions)

Bilinçsizce? Türlendirilmiş? Hmm, gerçekten de yenilik getirmişler dile. Ancak bunu Microsoft değil de BT Akademi yapmış ve C# diline değil de sanki Türk diline yepyeni bir tat kazandırmışlar gibi. Bu ifadeyi bir bilimkurgu / korku filminde görmeyi beklerim kendi adıma:

- Kaptan Kirk!
- Buyur canım?
- Bir derdimiz var!
- Nedir hayatım?
- Birtakım bilinçsizce türlendirilmiş yerel değişkenlerle karşı karşıyayız.
- Hmm
- N’apiciz kaptan?
- Işınla bizi Sikati, akabinde lazerleri hazırda bulundurun, n’olur n’olmaz.

Diğer çeviri felaketlerine buradan erişebilirsiniz.

 
4 Comments

Posted by on March 31, 2009 in .NET, Literature, Programlama

 

Hamming sayıları ve tembelliğin erdemleri: C# vs. Haskell


Bilgisayar bilimleri ve programlama ile ilgilenip de Hamming ismini duymamış olmak çok düşük bir olasılıktır herhalde. Bu tanıdık isim ve ilgilendiğim programlama dilleri bir araya gelince ister istemez algıda seçicilik oluşuyor. Bu seçicilik sonucunda önce “The Virtues of Laziness” makalesi ile karşılaştım ve yazarın C# kullanarak tembel fonksiyonel dillere içkin bir özelliği C# ile elde edebilmek için ne tür taklalar attığına baktım ve bunun uygulaması olarak Hamming sayılarının hesaplanması problemini ele aldığını fark ettim.

Kullandığım diller arasında C# da olduğu için bu tekniğin işime yarayacağını düşünüp not ettim ve ardından yorumları okumaya koyuldum ve karşıma Hamming sayılarının Haskell ile nasıl hesaplanabileceği çıktı:

hamming = 1 : map (*2) hamming # map (*3) hamming # map (*5) hamming
    where xxs@(x:xs) # yys@(y:ys)
              | x==y = x : xs#ys
              | x<y = x : xs#yys
              | x>y  = y : xxs#ys

Hemen GNU Emacs’ı ateşleyip kodu denedim ve sonsuza uzanan listelerin keyfini çıkardım:

*Main> take 4 hamming
[1,2,3,4]
*Main> take 10 hamming
[1,2,3,4,5,6,8,9,10,12]
*Main> take 30 hamming
[1,2,3,4,5,6,8,9,10,12,15,16,18,20,24,25,27,30,32,36,40,45,48,50,54,60,64,72,75,80]

Haskell öğrenmek için bir sebep daha diye bunu bir kenara kaydettim. Dikkatimi çeken bir başka şey ise son birkaç yıldır gözlemlediğim “popüler dillerin egzantrik kabul edilen dillerin özelliklerine yakınsaması” olgusuna dair bir örnek daha ortaya çıkmış olması.

Daha detaylı bir tartışma, C++ ve Haskell (ve başka pek çok dil) kıyaslaması için LtU’daki birkaç yüz yorumluk Expressivity of “idiomatic C++” yazısına bakılabilir.

 

Neanderthallerden farklı mıyız: Hızlı bir cevap için fonksiyonel programlama kullanın! ;-)


F# geliştiricisi Don Syme‘in bildirdiğine göre Darenn Platt “Neanderthal” ile modern insan arasındaki genetik farklılıklara dair araştırmasında bilgi işlem dopingi maksadı ile Python’dan F#’a geçmiş.

1.1.3 sürümü kısa süre önce yayınlanan, köklerini OCaml’dan alan, .NET üzerinde (dolayısı ile Mono ile GNU/Linux üzerinde de çalışabilen) fonksiyonel programlama dili F# ile ilgili son gelişmelere dair birkaç başlık:

 
 

Debian haftalık haberleri, doğal dil işleme, WordNet, sonifikasyon: Linux sisteminizi "dinlemek" ve Chi Kung Gücü!


Common Lisp ve Perl ile sabaha kadar doğal dil işleme ile uğraştıktan sonra şimdi blog girdisi yazma zamanı. Güneşi yazarak karşılayalım o halde.

Bir kez daha anadilimi takdir ediyorum. Takılar eklemek, cümleleri edilgenleştirmek, doğru sonuçlar çıkınca sevinmek, abuk sabuk sonuçlara bakıp gülümsemek ya da saç baş yolmak. Allegro Common Lisp ile Türkçe Treebank üzerinde zıplayıp durmak. Anadilim beni ve pek çoğumuzu ters köşeye yatırmaya devam edip duruyor. Mücadeleye devam. Yeterince yoğunlaşamıyorum yüksek lisans tezim ve günlük işlerimden ötürü ancak süreç içinde işin içine TDK sözlük verisini ve WordNet‘i entegre etmek gerekecek. WordNet veritabanını sorgulamak için gerekli Common Lisp arayüzleri biraz pas tutmuş gibi görünüyor şu anda.

Doğal dil işleme demişken, not düşelim, bir haber merkezi daha açıldı: http://zembereknlp.blogspot.com/. Burası sayesinde Zemberek’in C# ile kodlanan bir .NET halinin de çıktığını, çıkacağını öğrendim: NZemberek.

Sonification” ile ilgili Linux çalıştıran bilgisayarınızın performansını müzikal olarak gözetleyin IBM developerWorks makalesini çevirmeyi dün hallettim. Uzun zamandır bir yazıyı çevirmeyi bu kadar istememiş, buna bunca heves etmemiştim ve çevirirken de bu kadar zevk almamıştım! :) Böyle bir motivasyon ve biraz dağınık bir çalışma ile yaklaşık 2 saatte çeviri ve kontrolleri bitti, Boran da sağolsun gerekli görsel düzenlemeyi hemen yapıverip yayınladı. Çeviri ile ilgili bağırıp çağırmak ya da efendi uslu terim önerisi, hata bildirimi filan yapmak isteyen emres at bilgi . edu . tr adresini kullanabilir.

İcabında Sun’ın kendi makinası için geliştirilmiş Solaris 10 gibi gelişmiş bir UNIX ile bile kapışan ve onu tahtından ettirecek fanatik severleri olan evrensel işletim Debian GNU/Linux ile ilgili haftalık haber bülteninin sayısı kısa süre önce posta kutuma ulaştı. Görünen o ki tempo biraz düşmüş haklı sebeplerden ötürü.

Haberler arasında dikkatimi çeken etch için debian-installer geliştirmeleri: Şifreli LVM alanlarına kurulum, GTK-tabanlı kurulum, disk alanı bölümleme (alan deyip duruyorum “partition” için ne deniyordu, şu anda aklıma gelmedi), Linux 2.6.17 ve akabinde 2.6.18 gibi özellikler geldiği yazıyor. Ve tabii daha başka pek çok şey

Bunların haricinde 7. Debian konferansı DebConf 7 de 17 – 23 Haziran 2007 tarihleri arasında, Edinburgh, İskoçya’da düzenlenecekmiş (belki 2008 için Boran bir salvo yapar da DebConf’un İstanbul’da düzenlenmesini sağlar, kimbilir, ne de olsa daha öncekini kıl payı ile kaçırmıştık diye hatırlıyorum ;-)

Debian ile ilgili son olarak şunu not düşeyim en sevdiğim adreslerden bir demet:

Bu arada esrarengiz bir şekilde tekrar Gezegen Linux’un yörüngesine girmişim yaklaşık birkaç haftalık bir aradan sonra, şimdilik hikmetinden sual olunmaz yarabbi demekle yetiniyorum :)

Ve son olarak: Boşuna “chi kung” çalışın demiyoruz değil mi, bi bildiğimiz var, misal: Breaking Power of Chi Kung (evde kendi üstünüzde ya da arkadaşlar arasında denemeyin, deneyip de yaralanırsanız başıma ekşimeyin!)

Bir blog girdisi daha böylece sona erer (çıkıp bakma zamanı güneş doğdu mu diye…)

 

F# ile programlama – Microsoft Dil Teknolojilerinde Nereye Gidiyor?


F# ve DirectX 3D

Don Syme’in F# programlama ile ilgili tanıtım ve demo videolarını gördükten sonra Pazartesi mutlaka F# derleyicisini ve etkileşimli kabuğunu indirip denemem gerektiğini düşünmüştüm.

Emacs + SLIME + Common Lisp tarzında rahat bir etkileşim ve hızlı geliştirme, deneme, sonuçları anında görme imkanı sunan F# bir betik dilinin kıvraklığı ile fonksiyonel programlamadan ve ileri programlama tekniklerinden faydalanmayı sağlıyor. Derlenen programlar .NET IL (Intermediate Language) koduna derlendiği ve bunlar da JITlenerek (Just In Time compilation) çalıştırıldığı için performans gayet iyi görünüyor.

Tanıtım videosunda ekip başı Syme’ın belirttiği gibi kökleri ML, SML, OCAML gibi dillere dayanan F# temelde bir fonksiyonel programlama dili. Bununla birlikte OCAML geleneğine uygun şekilde fonksiyonel programlamanın yanısıra imperatif ve nesneye yönelik programlama paradigmalarını da doğal şekilde destekliyor. C# gibi bir dille kıyaslandığında çok daha az ve öz şekilde algoritmaları ifade edebilen F#, etkileşimli kabuğu sayesinde de dosyadaki kaynak kodun bir kısmını seçip ALT+ENTER gibi bir tuş kombinasyonu ile de sadece o kısmın çalışmasını ve sonuçların hemen görülmesini sağlıyor.

Demo videosundaki zamana bağlı olarak dalgalanan 3 boyutlu yüzeyde “multi-threaded” olarak gezinen birçok top (ve bunlara eşlik eden vektörler) değişik açılardan gerçek zamanlı olarak fare ile evrilip çevrilirken F# performansı hakkında ilk izlenimlerin epey olumlu olmasını sağlıyor. Bu etkiyi elde etmek için yazılan kaynak kodun sadeliği ve esnekliği fonksiyonel programlamaya alışık olanlar için şaşırtıcı değil belki ama C# ya da VB programcılarını (ve kimbilir belki de Java ;-) bir hayli etkileme potansiyeline sahip.

F# derleyicisi ve etkileşimli kabuğu Microsoft .NET ve GNU/Linux MONO ortamlarında çalışıyor. Tabii eğer MS ortamındaysanız ve Visual Studio.NET kullanıyorsanız (2003 ya da 2005) o zaman F# Add-In ile doğrudan VS.NET’in sözdizim renklendirme, yazarken XML yorumlarına dayanarak programcıya ipuçları verme, tür bilgisi gösterme, vb. avantajlarından da faydalanmak mümkün. Bunun dışında F# ile fonksiyonel programlama yaparken tüm .NET sınıf hiyerarşisi de elinizin altında.

Demo videosunun ilk bölümünde de gösterilen (ve kesinlikle 3 boyutlu yüzey animasyon örneği kadar eğlenceli olmayan ;-)) RSS işleme örneği F#’ın tıpkı güçlü bir betik dili gibi olarak da kullanılabileceğinin güzel bir örneği. Burada kısaca alıntılamak gerekirse, önce .NET sınıf hiyerarşisinden faydalanarak çok kolay bir şekilde bir HTTP veri çekme fonksiyonu yazıyoruz (#light direktifi sayesinde sözdizimini hafifleştirmek ve bazı OCAML tarzı anahtar sözcüklerden kurtulmak ve Python tarzı “girintileme ile kodu anlamlandır” kuralını dayatmak mümkün):


#light

open System.Net
open System
open System.IO
open Printf

/// Web sayfasinin icerigini cek
let http(url: string) =
  let req = System.Net.WebRequest.Create(url)
  let resp = req.GetResponse()
  let stream = resp.GetResponseStream()
  let reader = new IO.StreamReader(stream)
  let html = reader.ReadToEnd()
  resp.Close();
  html

Ardından yukarıda yazdığımız http fonksiyonunu kullanıp mesela bu blogun RSS verisini çekip bunu ileriseviyeRSS değişkenine yerleştiriyoruz:


let ileriseviyeRSS = http("http://ileriseviye.org/blog/?feed=rss2")

Şimdi XML verisini barındıran değişkeni elimize aldığımıza göre onun üzerinde işlem yapabiliriz. Fonksiyonel programlamaya yahut UNIX ve GNU/Linux’taki “pipe”, “piping” kavramlarına alışık olanlara |> operatörü yabancı gelmeyecektir. Temel amacı bir fonksiyonun çıktısını kolayca başka bir fonksiyona yollamak:


// ---------------------------------------
// RSS'teki haber basliklarini tarayalim
// ---------------------------------------
open System.Xml
open System.Collections
open System.Collections.Generic

let xdoc = new XmlDocument()
xdoc.LoadXml(ileriseviyeRSS)


/// XPathNodeList, System.IEnumerable'i destekledigine göre
/// önce "node"lardaki metni cekelim sonra da bunu bir listeye cevirelim

xdoc.SelectNodes("//title")
  |> IEnumerable.map_with_type (fun (i:XmlNode) -> i.InnerText)
  |> IEnumerable.to_list

F# etkileşimli kabukta yukarıdaki kodu çalıştırdığımızda ya da kaynak dosyaya kaydedip seçil ALT+ENTER bastığımızda (yahut fsc ile derleyip oluşan “binary” dosyayı komut satırından çalıştırdığımızda) aşağıdaki çıktıyı elde ediyoruz (ve de UTF-8 problemini güzelce görüyoruz ;-))


> > > val it : string list
       = ["FZ Blogs"; "Bir mimar bilgisayarclar ne kadar etkileyebilir?";
          "Uluslararas bir konferansn ardndan: IODL '06 (ya da tiyatro ve sinema arasndaki fark stne)";
          "Yeni bir ders:Mzik ve Linux";
          "Chomsky ve Trivers ile kirli sava?lar ve kendini aldatma stne";
          "Memleketimden insan manzaralar: Daire, elips ve kar?an kafalar";
          "Patterns of Software: Richard P. Gabriel'den sistem tasarm ve hayat zerine incelikli bir kitap";
          "20 yl ?ncesinden bir roman: Koku";
          "Muratpa?a Belediyesi ve Emre'nin Harikalar Kumpanyas (sorma neden ni?in)";
          "C# ve Reflection kullanarak bir dizindeki .NET .dll dosyalar i?inde tr arama";
          "B?cek Avcl§, lint ve bir C kodu";
          "Perl 6 Meta Object Protocol (Perl MOP)";
          "MathML, Debian ve Firefox";
          "Long Term Potentiation (LTP) ve ?§renme arasndaki ba§lantya dair ilk kantlar bulunmu?!";
          "1800'l yllarla dolu birka? gn: The Illusionist, Husserl, Wilde, Rodin";
          "G?kgrlts ve uzaktaki yldzlar";
          "hakia.com ya da bir Japon yz tanma ?irketi i?in ?al?mak ister misiniz?";
          "Beyin Bilgisayar Arayzleri ve Firefox ?stne";
          "Kendime notlar: daha ?ok blues, armonika ve ses teknolojisi ?al?";
          "Producing Open Source Software: Teknik, slup, kltr ve terbiye stne";
          "Collapse: Toplumlar Ba?ary ya da Ba?arszl§ Nasl Se?er"]

Tabii yukarıdaki örnek F#’ın ve genel olarak fonksiyonel programlamanın gücünün çok küçük bir kısmını, buzdağının suyun üstündeki ucunu gösteriyor. Söz gelimi örüntü eşleme (pattern matching) yahut fonksiyonların değişkenler gibi kolayca diğer fonksiyonlara geçirilmesi, fonksiyon döndürülmesi, çoklu dönüş değerleri gibi güçlü özellikler görünmüyor veya vurgulanmıyor.

F# geliştirme ekibinin başındaki Don Syme birkaç ayda bir yeni sürüm çıkardıklarını ve F# dilinin şimdiden Microsoft’un bazı programlama projelerinde kullanılmaya başlandığını belirtiyor (örn. statik kod analizi, sürücü kod analizi, derleyiciler, yorumlayıcılar, vs.). F# ile hızlı şekilde geliştirilebilecek projelere örnek olarak karmaşık bilimsel uygulamalar, simülasyonlar, büyük veri setleri üzerinden yapılan analizler veriliyor. pi-calculus derleyicisi gibi şeyler yapmak mümkün olduğu gibi, podcasting istemcisi gibi günlük uygulamaları da hızlıca yazmak da mümkün.

Gelecek sene APRESS‘ten çıkması planlanan Expert F# kitabının yazarı Don Syme, kitabın ikinci bölümünü kamuya açık olarak sunuyor: Draft Chapter 2 of “Expert F#”: Essential Language Features. OCAML diline benzerliğinden ötürü F# ile ilgili OCAML kaynaklarından da faydalanmak mümkün (ve belki de gerekli!)

Tam da bu aralar IronPython gibi .NET dilleri üzerine tartışmalar kızışmışken “scripting” tarzı çalışma ile OCAML ve Haskell gibi çok güçlü fonksiyonel dillerin özelliklerini bir araya getiren F# dili, Microsoft’un dil teknolojileri konusunda bugün ve gelecekte nasıl bir strateji izleyeceğine dair ipuçları veriyor.

 
Leave a comment

Posted by on September 18, 2006 in .NET, General, Programlama

 

C# ve Reflection kullanarak bir dizindeki .NET .dll dosyaları içinde tür arama


Castle projesinin MonoRail‘i ile uğraşırken bir C# dosyası içinde geçen WebContainer türünden bir nesne problem çıkardı. Asıl derdim böyle bir tür yani böyle bir C# sınıfı (türü) olup olmadığını ve varsa hangi .dll dosyası içinde bulunduğunu anlamaktı. Bunun için tabii ilk akla gelen Lutz Roeder’in Reflector‘ını kullanmak olabilirdi ancak burada söz konusu olan tek bir .dll dosyasını (assembly’yi) detaylı ve grafik ortamda incelemek değil bir grup .dll dosyası üzerinden hızlıca arama yapabilmekti.

Bunun için .NET ve C#’ın “reflection” özelliklerinden faydalanarak belli bir dizin içindeki tüm .dll dosyalarını tarayan ve içlerindeki sınıf (tür) isimlerini listeleyen kısa bir program yazdım. (Programın pastebin.ca üzerindeki kaynak koduna buradan erişmek mümkün.)

Ardından Windows 2000 sistemime GNU Utilities for Win32‘yi kurdum (ve kurulum dizinin sistem “path” değişkenine ekledim). Böylece artık D:Program FilesCastleBinnet-2.0 dizinine gidip ClassExplorer . | grep -i web gibi bir komut çalıştırmak sureti ile tüm .dll dosyaları içinde küçük büyük harf ayrımı olmaksızın içinde “web” geçen tür isimlerini arayabiliyorum (72 tane .dll var, toplamları yaklaşık 7.5 MB ve arama sonuçlarının listelenmesi yaklaşık 3.5 – 4 saniye sürüyor).

Programın şu anda pek çok eksiği gediği var. Duruma ve ihtiyaçlara göre kolayca ekleme yapmak mümkün. Üçüncü parti yazılımların .dll dosyaları ile kaynak kodları içinde gezinmeden arama tarama yapmak için bu tür ve benzeri programlar faydalı olabilir.

Not: Şu anda çalışmayan komut satırından keyfi dizin verme işlevselliğini gerçekleştirmek ve dışsal grep bağımlılığı yerine dahili .NET düzenli ifade desteğinden faydalanmak iyi olabilir (yine de insan “tek bir işi iyi yapan programlardan oluşan bilgi işlem zinciri” şeklindeki UNIX mantalitesine alıştı mı bundan kolay kolay vazgeçmek istemiyor ;-))

 
2 Comments

Posted by on September 6, 2006 in .NET, General, Programlama

 

II. Dünya Savaşı, Ouspensky, Gurdijeff – Apple: İlk Günah



tubaunsal.jpg
15. yüzyılda Endülüs’teki müslümanlara ne oldu diye sormuş ve bu konu hakkında bir kenara not düşmüştüm.

#fazlamesai müdavimlerinden pinhanarcat üşenmemiş, konu hakkında ilgili ve de bilgili bir tanıdığı ile muhabbet etmiş. IRC üzerinden benimle bilgilerin bir kısmını paylaşmakla kalmadı blogunda da öğrendiklerinin bir kısmını yazdı:

-Her açıdan tam göbekte yer alan Türkiye nasıl oldu da, neler oldu da, II. Dünya Savaşından uzak durabildi? Hepsi İsmet Paşa’nın marifeti miydi, bize söylendiği gibi? Hitler gibi birisi, Rusya’ya bile kafa tutarken, her yeri kasıp kavururken, burayı nasıl oldu da görmezden gelebildi? Kafamızı çevirelim, ardından bakalım soruya: “görmezden mi geldi?”

-Nazi mistisizminden bahsedilir ki doğrudur, swastika‘dan bile bellidir, … Türkiye’yle ne gibi bir bağlantısı vardır?

-Tarikat da neyin nesidir? Ne tarikatı? Nerede? Türk pasaportlu Nazi subayları? Hem de akıl hocaları? Yok daha neler…
-Kıbrıs harekatı sırasında İsrail niye Türkiye’ye destek vermişti? Vermiş miydi? Babasının hayrı mı gündemdeydi? Hem de bütün dünya Türkiye’nin karşısında durmuşken…

-FKÖ’yü silahla besleyen Rumlar sadece bu harekatın mı intikamını almaktaydı?

-Nazilere dönelim, “rose croix” geçmişli hareketleri bilmeyen yok da, masonluk? Nasyonal sosyalist parti? Kafalar karıştı…

-Peki Naziler tarafından katledilen Türk sayısı nedir? Ah efendim, özür bile dilemişler de, biz bilmeyiz o özrü de, sünnet meselesi, hepsini yahudi sanmışlar işte, bak şu işe, nerden ne tahlili, …
-Bir de çingeneler var ki, Birleşmiş Milletler beşyüzbin civarı deyip kestirip atmış, sayılarla insan hayatı, istatistiklere öyle geçti, o kadar da çingene katledildi, cezaları da ödenmiş savaş sonrası, mahkeme emri, şu kadar tazminat da çingenelere ödenecek… miş de, yine Birleşmiş Milletler el atmış duruma ve paraya, devlet yok ki ortada kime ödesinler, kurarsak bir çingene devleti, sermayemiz hazır, BM’nin elinde…

(Meraklısına not: bkz. Rudolf von Sebottendorg ve Türkiye bağlatısı.)

pinhanarcat ile yazışmaya devam ederken laf laf açtı ve konu Ivan Osokin’in Tuhaf Yaşamı isimli romana geldi. Birkaç sene önce okuduğum bu tuhaf, mistik ve sürükleyici roman benim hayatımda enteresan bir kesişimde de yer almıştı.

gisellemac.jpg Romanın yazarı P. D. Ouspensky çok kısa bir süreliğine İstanbul’da da bulunmuş bir filozof idi. Kitabı bitirdikten sonra biraz araştırmış ve Ouspenksy’nin en çok üzerinde durduğu isimlerden birinin G. I. Gurdjieff olduğunu görmüştüm.

Gurdjieff ve eserlerine çok kısaca bir göz attıysam da kısa süre sonra unuttum gitti. Ta ki…

… ta ki Boğaziçi Üniversitesi’nde 2004 – 2005 eğitim döneminin II. bahar yarıyılındaki zihin felsefesi dersine kadar. Dersi veren Prof. Dr. Stephen Voss dönem boyunca pek çok felsefecinin zihin felsefesi ile ilgili makalelerini vermiş ve bunlar üzerine ödevler yazıp tartışmamızı istemişti. Bu şekilde dönem sonu geldi çattı ve son derse geldiğimizde Prof. Voss bu sefer bize biraz “sıradışı” bir yazı vereceğini ve bundan sorumlu olmadığımızı, buna dair bizden herhangi bir ödev beklemediğini belirtti. Verdiği metin, Ouspenksy’nin Gurdjieff ile görüşmelerinin bir kısmını içeren bir kitaptan alınmaydı. Prof. Voss bu metni okursak bazı yerlerinin saçma gelebileceği konusunda bizi uyardığında ise aklıma Tao Te Ching’den şu meşhur dizeler geldi:

Bilge biri Tao’yu duyduğunda tüm gücüyle onu uygular.
Sıradan biri onu duyduğunda kimi zaman uygulama yapar.
Ahmak biri Tao’yu duyduğunda nahoş bir kahkaha atacaktır.
Eğer gülmezse, bu Tao değildir.

Ve işte Gurdjieff tekrar karşımda idi, üstelik Türkçeye çevrilmiş bazı yazılar ile. Yüzyılın ilk yarısında Hindistan, Çin ve Japon kökenli uzakdoğu bakış açıları ve pratikleri ile pek muhatap olmamış insanları etkilemiş olduğunu tahmin ettiğim Gurdjieff ile ilgili asıl merak ettiğim şey ise müzikleri ve sanırım ilk olarak buradaki parçaları dinlemekle işe başlayacağım.

Meraklısına not: “Apple” kullanan mankenler sizde de yılan kılığındaki şeytana uyup Adem’i yasak elmayı yemesi için kışkırtan Havva’yı çağrıştırmıyor mu? ;-) Apple: ilk günah (ve hemen tüm günah addedilen şeyler gibi çok zevkli! :))

 
1 Comment

Posted by on August 9, 2006 in .NET, CogSci, General, Programlama

 

İkinci VS.NET 2005 makrosu


Gerçek programcı editörlerindeki (misal CodeWright, VIM, Emacs, SlickEdit) olmazsa olmaz özelliklerden biri dikdörtgen blok seçip “bunun başına filanca stringi ekle” demektir. Yani misal:


myCodeLine1;
  myCodeLine2;
  myCodeLine3;
myCodeLine4;

seçip, bir girdi kutusundan “YADA ” gibi bir şey girip


YADA  myCodeLine1;
 YADA myCodeLine2;
  YADA myCodeLine3;
YADA myCodeLine4;

sonucunu elde edebilmektir.

Visual Studio 2005 IDE’sindeki editör dikdörtgen blok seçmeye izin vermekle beraber (ALT + SolFare) blok başına şunu koy, bunu koy islevselliğini ya sunmuyor ya da ben aramaktan yoruldum, bezdim ve bulamadım. (Varsa ve biliyorsanız emres at bilgi nokta edu tr adresine yazıp beni aydınlatabilirsiniz ;-)

Onun yerine simdilik kabaca is gören InsertBlock diye bir makro yazdım. Bunu kullanmak için normal metin seçme islemi yapmak yeterli, blok seçmek söz konusu değil (şimdilik).

Aşağıda kodunu verdiğim makroyu ana menüdeki Tools –> Macros –> Macro Explorer (yahut Macro IDE) açıp uygun bir paketin (misal My Macros) içindeki uygun bir modüle yerleştirebilirsiniz (ben TextUtilities diye bir modül yaratıp onun içine koydum).

Daha sonra InsertBlock makrosunu bir tuş kombinasyonuna nasıl bağlayabileceğinizi öğrenmek icin buradaki VS.NET 2005 makro örneğine bakabilirsiniz.

Bir sonraki aşama benzer işlevselligi blok seçim üzerinden de elde edebilmektir.


Imports System
Imports EnvDTE
Imports EnvDTE80
Imports System.Diagnostics

Public Module TextUtilities

    Public Sub InsertBlock()

        Dim i, j, tmpStr, tmpSpace
        Dim TS As TextSelection = DTE.ActiveDocument.Selection
        Dim txtArr(500)
        Dim stringToInsert = "StringToInsert"

        stringToInsert = InputBox("Please enter string to insert", "Block Insert")

        txtArr = Split(TS.Text, vbCrLf)

        For i = 0 To (txtArr.Length - 1)
            tmpSpace = ""
            j = 1
            While (Mid(txtArr(i), j, 1) = " " Or Mid(txtArr(i), j, 1) = vbTab)
                tmpSpace = tmpSpace & Mid(txtArr(i), j, 1)
                j = j + 1
            End While
            tmpStr = stringToInsert & Mid(txtArr(i), j)
            txtArr(i) = tmpStr
        Next

        TS.Text = Join(txtArr, vbCrLf)

    End Sub


End Module

Tabii yukarıdaki kod daha pek çok geliştirmeye ve performans artışına açık. Şimdilik benim işimi görüyor ve VS.NET ile C# kodlama, düzenleme işlemlerini genişletmek için bir zemin teşkil ediyor.

 
Leave a comment

Posted by on August 2, 2006 in .NET, General, Programlama

 

İlk VS.NET 2005 makrosu


Sevgili Umut Aydın‘ı utandırma zamanı! ;-)

Her ne kadar GNU Emacs yahut VIM kadar güçlü ve gerçek bir programlama editörüne sahip olmasa da sunduğu makro programlama imkanı ile MS Visual Studio.NET 2005 kendini bir nebze çekilebilir, katlanılabilir ve genişletilebilir kılıyor.

VS.NET 2005, Code Snippets gibi güzel ve akıllıca bir metin düzenleme kolaylaştırıcısına sahip olsa da bunlar her zaman yeterli olmadıkları gibi tek tuşla halledilecek işler için de fazla “genel” kaçıyorlar.

Bu gibi durumlarda da devreye makro programlama giriyor. VS.NET 2005′in prop “code snippet”i ile uzun uzun uğraşıp property yaratmak yerine seçtiğim bir değişkeni tek hareketle ve kendi konvansiyonlarıma göre bir “property”ye dönüştürmek çok daha pratik ve daha da önemlisi hata yapmayı engelleyici.

Bunun için yapılması gereken ise Ana Menü –> Tools –> Macros –> New Macro Project… yolunu izleyip bir makro ismi yaratmak (yahut Macros IDE’yi açıp My Macros’a yeni bir makro eklemek).

Bundan sonra da sıra söz konusu makroyu kodlamaya geliyor. Makro kodlanıp test edildikten sonra Ana Menü –> Tools –> Options –> Keyboard yolunu izleyip oluşturulmuş ve test edilmiş makroyu kestirme bir tuş kombinasyonuna atamak mümkün (benim örneğimde Alt+Shift+p kombinasyonuna atanmış durumda).


Public Module CreatePropertyModule

    Public Sub CreateProperty()
        ' Get the current insertion point (where the cursor is positioned).
        Dim TS As TextSelection = DTE.ActiveDocument.Selection
        Dim ResultString = TS.Text
        Dim TmpArray(10)
        Dim PrivateVariableName
        Dim PublicVariableName

        ResultString = Trim(ResultString)
        ResultString = Replace(ResultString, ";", "")
        ResultString = Replace(ResultString, "private", "public")

        TmpArray = Split(ResultString)
        PrivateVariableName = TmpArray(2)

        PublicVariableName = PrivateVariableName

        ' Clean the variable name of its privacy markers
        PublicVariableName = Replace(PublicVariableName, "m_", "")
        PublicVariableName = Replace(PublicVariableName, "_", "")

        ' Capitalize the variable name so it becomes suitable to be a Property name
        PublicVariableName = UCase(Left(PublicVariableName, 1)) + Mid(PublicVariableName, 2)

        TmpArray(2) = PublicVariableName

        ' OPTIONAL: XML comment header. It is better to have them.
        ResultString = "/// " & vbCrLf
        ResultString = ResultString & vbTab & vbTab & "/// " & vbCrLf
        ResultString = ResultString & vbTab & vbTab & "/// " & vbCrLf

        ' OPTIONAL: Added for ActiveRecord.
        ' OPTIONAL: If you don't use ActiveRecord, you may delete
        ' OPTIONAL: or comment out the line below
        ResultString = ResultString & vbTab & vbTab & "[Property]" & vbCrLf

        ResultString = ResultString & vbTab & vbTab & Join(TmpArray)
        ResultString = ResultString & vbCrLf
        ResultString = ResultString & vbTab & vbTab & "{"
        ResultString = ResultString & vbCrLf
        ResultString = ResultString & vbTab & vbTab & vbTab
        ResultString = ResultString & "get { return " & PrivateVariableName & "; }"
        ResultString = ResultString & vbCrLf
        ResultString = ResultString & vbTab & vbTab & vbTab
        ResultString = ResultString & "set { " & PrivateVariableName & " = value; }"
        ResultString = ResultString & vbCrLf
        ResultString = ResultString & vbTab & vbTab & "}"

        ' Move to the end of the line.
        TS.EndOfLine()

        ' Add two newlines.
        TS.NewLine()
        TS.NewLine()

        ' Insert the resulting text which corresponds to property definition.
        TS.Insert(ResultString)
    End Sub

End Module

Böylece mesela C# ile geliştirdiğim bir projedeki bir sınıfın C# kaynak kod dosyasına gidip aşağıdaki satırlardan herhangi birini seçip


private int orderNo;

private int _orderNo;

private int m_orderNo;

Alt+Shift+p bastığımda şöyle bir property metnini kaynak kod içinde elde edebiliyorum (tabii private değişken ismi de uygun şekilde gelecek şekilde):


/// <summary>
///
/// </summary>
[Property]
public int OrderNo
{
	get { return m_orderNo; }
	set { m_orderNo = value; }
}

Makro kodunun yorum satırlarında belirtildiği gibi [Property] lafı VS.NET ya da C#’a özgü değil, sadece şu anda kullanmakta olduğum Castle ActiveRecord isimli NHibernate tabanlı kalıcılık katmanı ile ilgili bu yüzden de opsiyonel.

Bunun yanısıra tabii ki henüz tüm değişken tanımlamalarını kapsar halde değil ve geliştirilmeye açık bir makro.

VS.NET 2005 ortamında makro yazmanın bir dezavantajı kodlamanın VB ile yapılmak zorunda olması ise, bir avantajı de elinizin altında tüm .NET sınıf kitaplığının bulunması. Söz konusu avantaj geniş ve derin bir işlevsellik sunmanın ötesinde alışık olduğumuz nesne modeli ile VS.NET 2005 IDE’sinin kendisinin de her türlü öğesine erişme ve onlara müdahale imkanı sağlıyor.

VS.NET 2005 makroları ile yapılabilecek çok daha sofistike ve karmaşık şeyler mevcut. Mesela kendi “refactoring” örüntülerinizi birer makro olarak kodlamak gibi.

Konu ile ilgili birkaç bağlantı: Using Visual Studio .NET Macros, Refactoring with Visual Studio Macros, Macro Madness, Transcript: Examples of Visual Studio Extensibility.

 
1 Comment

Posted by on July 18, 2006 in .NET, General, Programlama

 
 
Follow

Get every new post delivered to your Inbox.

Join 53 other followers