yazılım geyiklemeleri

yazılım,c# ve domates kabuğu

  • Home
  • Contact
  • Log in

VB.Net Üzerine

May 27th, 2009

Bu tarihlerden yaklaşık 8 yıl öncesinde Microsoft .Net adında bir platform çıkaracağını duyurduğunda üzerinde en çok durulan konulardan biriside o zamanlarda var olan VB projelerinin yeni platform'a fazla değişiklik yapmadan upgrade edilebileceğiydi.

Ufak tefek problemler dışında bu sözlerinde durdular da, şu anda Microsoft'u bulunduğu yere getiren VB'ye sadık kalarak şu anda da .Net içerisinde VB kullanabiliyoruz.

Ancak VB'ye ait hafıza yönetimi, object oriented gibi kronik problemlerden bazıları da .Net içerisine taşınmış oldu. VB 6 üzerinde çok fazla proje yapmış birisi olarak bu tür problemlerden uzak durabilmek için başından beri .Net içerisinde VB kullanmaya pek sıcak bakmadım.

Bu 8 yıl içinde IDE içerisindeki bana garip gelen özellikler dışında üretilen kod gibi çok fazla detayına girmedim ancak yakın bir arkadaşımın VB.Net üzerindeki projesinde memory problemleri çıktığı için detaylarla uğraşınca boşuna endişelenmediğim ortaya çıktı.

VB ile 5-6'dan fazla form olan bir proje üzerinde çalışıyor iseniz benzer sorunlar sizinde kapınızda olabilir.

Neler oluyor ?

Öncelikle VB syntax'ına çok alışık olmadığım için örnekleri c# ile veriyorum, umarım anlaşılır olur.

VB ile yeni bir proje açtığınızda projenizde görmediğiniz MyProject adında bir class tanımlanıyor ve bu class ile proje içerisindeki kaynaklara erişiyorsunuz. Tanımı aşağıdakine benzer halde;

Code:

internal sealed class MyProject
{
    internal static MyApplication Application { get; }
    internal static MyComputer Computer { get; }
    internal static MyForms Forms { get; }
    internal static User User { get; }
    internal static MyWebServices WebServices { get; }
}

Bu class sayesinde geliştirme yaparken gerekecek kaynaklara erişim sağlanıyor. Proje içerisindeki tanımlanan formlara da Forms üzerinden ismi ile erişilebiliyor. Örneğin "Login" isimli bir form'unuz var ise MyProject.Forms.Login.Show() diyerek login penceresinin gözükmesini sağlıyorsunuz.

Ancak sorun şu ki MyForms class'ı projeyi derlediğinizde otomatik üretilen bir class ve Login penceresi için aşağıdaki kod üretiliyor.

Code:

internal sealed class MyForms
{
  public frmLogin m_frmLogin;
  public frmLogin Login
  {
      get
      {
          this.m_frmLogin = Create__Instance__<frmLogin>(this.m_Login);
          return this.m_frmLogin;
      }
      set
      {
          if (value != this.m_frmLogin)
          {
              if (value != null)
              {
                  throw new ArgumentException("Property can only be set to Nothing");
              }
              this.Dispose__Instance__<frmLogin>(ref this.m_frmLogin);
          }
      }
  }
}

Bu koddan anlaşılacağı üzere de Login penceresine 1 kez erişildiğinde uygulama kapanıncaya kadar hafızada kalmak zorunda ve bu class üzerinde referans'ı taşındığı için garbage collector tarafından da toplanamıyor.

Bu yüzden uygulama belirli bir süre kullanıldıktan sonra hafıza kullanımı giderek artmaya başlıyor. Bu sorunu çözmek adına uğraşsamda otomatik üretilen bir kod olduğu için müdehale edemiyorsunuz.

Çözüm

Henüz uygulamış değilim ancak olası tek çözüm MyForms üzerinde m_frmLogin public olarak tanımlanmış, henüz erişim olup olmadığı konusunda fikrim yok ancak olası tek çözüm reflection ile MyForms'u taramak gibi gözüküyor.

Biraz hack tipi bir çözüm ancak null olmayan ve ekranda gözükmeyen tüm m_frmLogin tipi değişkenleri zorla dispose edecek bir kod eklemeyi düşünüyorum. Eğer sorunsuz olarak çalışırsa bu yazıyı güncelleyerek buraya eklerim.

Sonuç

VB.Net eski uygulamaların yeni platform'a taşınması için bir kapı idi ancak bu kapıyı artık kullanan kimse kalmadı, yeni başlayan ve ortalama ve altı ağırlıkta uygulama geliştirmek için hazırlanmış bir dil, özet olarak hızlı sonuç gerektirmeyen ciddi uygulamalar için kullanılmasını tavsiye etmiyorum.

Evet syntax'ı biraz daha karışık ama eski alışkanlıkları bırakıp yerine daha ortak kullanımı olan c temelli, yazdığınız kodun gözüktüğü gibi çalışacağını bildiğiniz .Net'in doğal dili c# ile geliştirme yapmanızı tavsiye ederim.

Posted in Coding, Öfkeli Coder | Send feedback »

bir sayının 2 üzeri olup olmadığını bulmak

May 16th, 2009

Yetki kontrolleri için hazırladığımız kütüphanede ihtiyacımız olduğundan ve birazda enteresan bir problem olduğu için buraya da yazmak istedim.

elinizdeki herhangi bir sayının 2 üssü bir sayı olup olmadığını kontrol edecek bir fonksiyon yazın. hızlı çalışması için optimize edin.

örneğin;

8 (2 ^ 3) için true verecek.
128 (2 ^ 7) için true verecek.
132 için false ferecek.

not : hızlı çalışması gerektiği için logaritma gibi fonksiyonlar en son seçenektir.

Posted in Coding, Algoritma Soruları | Send feedback »

Silver Bullet

February 26th, 2009

"Silver Bullet" deyimi bir yazılımcının günlük hayatında hergün karşılaştığı problemlerden biridir. Zavallı yazılımcılardan hergün "Silver Bullet" istenir ve eğer yazılımcı gerçekte böyle bir şey olmadığını henüz öğrenmemiş ise sonuçlar çok kötü olabilir.

Silver bullet deyimi kurtadam, vampir, cadı, ve diğer benzer yaratıkların hepsi için etkili olan bilim kurgu'da geçen bir mermi türü demektir aslında.

Daha düzgün söylemek gerekirse maksimum efektiflik ile en basit ve doğru çözüm demektir.

Elbetteki bu tür silver bullet çözümleri gerçek hayatta çok nadir bulunur ve biz insanlar her türlü problemde bu mermilerden ararız.

Gerçek hayatımızdaki bulduğumuz çözümler aslında proje yönetiminde anlatılan Project triangle denilen bir üçgen'in içerisindeki bir noktadadır.

Bu üçgen üzerinde istediğiniz bir yada iki özelliği yüksek seçebilirsiniz ancak diğer 3. özellik diğerlerine göre eksik olacaktır.

Hızlı ve ucuz istiyorsanız iyi olmayacaktır.
Hızlı ve iyi istiyorsanız ucuz olmayacaktır. vs

Gerçek hayatta böyle bir denge olduğunu hepimiz biliriz ancak anlatmakta zorluk çekeriz, bir dahaki sefere sizden "silver bullet" isteyen beyaz show'daki psikopat'a bu üçgeni anlatabilirsiniz.

Posted in Coding | Send feedback »

Breakpoint Donation

February 11th, 2009

Link: http://www.scene.org/donate_breakpoint.php

2003 yılından beri her yıl düzenli yapılan en büyük demo partilerinden biri olan Breakpoint global kriz yüzünden sıkıntıya düşmüş.

Parti'yi ayakta tutmak için içinizden gelen tutar kadar bağışlamak için http://www.scene.org/donate_breakpoint.php sayfasını kullanabilirsiniz. PayPal sayesinde bir kaç saniye içinde bağış yapabiliyorsunuz.

Konuya yabancı olanlar için demo partileri bilgisayar meraklıları tarafından düzenlenen tamamen amatör bir organizasyon. Bu partilerde herbiri sanat eseri olabilecek multimedya yazılımları yarışıyor. Örnekler için www.pouet.net sayfasındaki demolara bakabilirsiniz.

Bedava dağıtılan bu demolardan geçen sene 4kb alanında birinci olan Atrium yada Metamorphosis için bağışlayacağınız 3-5 € önemsiz kalacaktır.

Posted in Haberler, Coding | 1 feedback »

bir yazılımcı işe almak (II)

December 29th, 2008

Önceki yazılarımdan iş görüşmesi yapanlar için yazdığım bir yazılımcı işe almak yazısına şaşırmadığım şekilde yazılımcı diğer arkadaşlardan (görünüşe göre yazının tamamını okumadan) sert yorumlar gelince bu konuyu yazılımcılar tarafından biraz daha açmak gerekli diye düşündüm.

Öncelikle elimden geldiği kadar tüm yorumları yayına almayı isterim ancak bir fikir üretmeden "fak yu" temalı veya isim belirtmeden yazmış olmanız yayınlanmamasının temel sebebidir. Yorumunuz olduğu zaman bunu hakaret etmeden sonuç olarak bir fikir ortaya atarak ve altına isminizi koyabiliyorsanız sevinerek yayınlarım.

yazıya dönersek;

sosyallik

Gelen yorumlarda en çok bu konuda eleştiri var ancak görünüşe göre yanlış anlaşılmış. Bende bir yazılımcıyım ve etrafımdaki insanlara göre çok daha sosyal olduğumu söyleyebilirim ve bu beni kötü bir yazılımcı yapmaz. Burdaki asıl nokta;

Bu mesleği ortalamanın üzerindeki maaş parıltıları nedeniyle yapmıyorum. Çünkü insanlar benim yaratıcılığıma güveniyor ve bir şey ürettiğimi hissettiğimde mutlu oluyorum. Ufak detaylar üzerinde konsantrasyonumu kaybetmeden saatlerce uğraşabilirim ve saatin 6 olduğunu çoğu zaman farketmiyorum bile. Mesai saatleri dışında çalışmayı hiç sevmiyorum ancak başladığım işi bitirmek 1. amacım çünkü yarın için başka planlarım var. İşimi düzgün yaptığım sürece kimsenin benden fazla mesai yapmamı istemediğini de biliyorum. Son olarak bir evim var ve mümkün olduğu kadar erken gidip kendi hayatımı yaşamak istiyorum.

Şimdi tüm bunları sadece vakit geçsin diye o haftaki avrupa yakası ile ilgili geyik yaparak diğerlerinin konsantrasyon bozan "9-6"'larla karşılaştırabilirsiniz. Onlardan biri olduğunu düşünüyorsanız lütfen kendinize eziyet etmeyin ve seveceğiniz başka bir meslek seçin.

Asosyal olmak sadece bu yeteneklerin diğerlerinden daha gelişmiş olduğunun bir işaretidir. Asıl nokta konsantrasyon olabilmektir. Eğer konsantre olmak ile ilgili problemleriniz varsa yanlış bir meslek seçtiniz çünkü bu diğer tüm yeteneklerinizden daha önemlidir.

Teknik Yeterlilik

Teknik yeterlilik ile ilgili dikkatli okumuşsanız yazının hiç bir yerinde x yıl deneyim yada y framework'ünü bilmek gibi tavsiyelerde bulunmadığımı görmüşsünüzdür. Zaten bu tür soruların anlamsız olduğunu bende söyleyebilirim.

Bu konuda yaratıcı ve uyumlu olmak olmanız diğer tüm sorunları aşmanız için yeterlidir.

"geceyarısı gölün ortasındaki bir kayıkta suya bir kaya atarsam, su seviyesi yükselirmi alçalırmı ?" gibi bir soruya verebilecek hiç bir cevabınız yoksa ancak muhasebe uygulamaları önceden tanımlanmış uygulamalar üzerinde çalışabilirsiniz. Çünkü sadece bu tip uygulamalar sizden yaratıcılık yeteneği beklemez.

İş görüşmeleri içinse daha önce hiç karşılaşmadığınız problemleri nasıl çözdüğünüz yada olası uçuk fikirlerinizi konuşmak karşınızdakine ne kadar yaratıcı olabildiğiniz ispatlayacaktır. Eğer sizden yaratıcılık beklenmiyor ise bu yazıyı okuduğunuza göre zaten bu iş size uygun değildir. Bırakın bu işleri 9-6'lar yapsın, çünkü sizden çok daha başarılı olacaklardır.

Uyumlu olmak ise ekipteki sizin benzeriniz diğer "ukela","inatçı","zeki","kendinden emin" yazılımcılarla ile nasıl ekip olacağınız ile ilgilidir. Bu tür özellikleri topladığınız zaman istesenizde istemesenizde "geçimsiz" kendiliğinden ortaya çıkar. Bunun elbetteki yanlış bir tarafı yok sadece önemli olan diğerleri ile uyumlu olmaya çalışmak ekip olarak beraber hareket etmeniz için önemlidir.

Teknik sorular içinde bildiğiniz herhangi bir dilde, beyaz tahtaya asal sayıları bulan (sonucu doğru yada yanlış) bir algoritma yazamıyorsanız lütfen okulda gösterilen matematik ve temel algoritma kitaplarını tekrar okuyun.

Çünkü bu gözleri kapalıyken zaman çizdiği resmi hayal edemeyen bir ressam demektir.

Bunun dışındaki x class'ı ne işe yarar (trivia) gibi anlamsız ezber gerektiren sorular elbetteki hiç bir şeyi ispat etmez. Bu tür sorular sorulan bir iş görüşmesine girdiyseniz muhtemelen yanlış bir kişiyle iş görüşmesi yapıyorsunuz demektir.

özel kurslar

Özel eğitim kursları mutlaka size bir şeyler öğretir ancak bu eğitimlerin temel amacı malesef ticaridir. İçlerinden çok az bir bölümü sadece gerçek hayatın simülasyonudur. Bu yüzden iş görüşmelerinde cv'nizde bir papatya deseni olarak kalır.

Sizinle iş görüşmesi yapan kişininde sizden bekledikleri;

* ne zaman üretmeye yapmaya başlar
* ne kadar üretim yapabilir
* ne kadar yatırım yapmam gerekli
* uyumsuzluk yaratır mı
* kendinden ne kadar emin ve sorumluluk alabilir

gibi gayet ticari beklentilerdir. Bu aşamada romantik fikirlerin yeri yoktur. İspat etmeniz gerekenler bu sorunların cevaplarıdır. 1-2 yıl sonra geçerliliğini yitirecek soruların cevapları değil.

Son olarak

Yazının başında söylediğim gibi evet yazdıklarım acımasız ama bu konuda yapılabilecek bir şey yok. Çalıştığınız meslek bu kuralları gerektiriyor ve kuralları değiştiremediğiniz heryerde kendiniz değişmek zorundasınız.

Ben bu kurallara uyduğunuzu düşünüyorsanız ve age of empires'ı iyi oynadığınız halde halen iş bulamıyorum diyorsanız lütfen cv'nizi ertant at rdgnetwork.org adresine gönderin. Sizi çalıştığım ekipte mutlaka görmek isteriz.

Posted in Haberler | 1 feedback »

1 2 3 4 5 6 7 8 9 10 11 ... 14 >>
  • Contents

    • VB.Net Üzerine
    • bir sayının 2 üzeri olup olmadığını bulmak
    • Silver Bullet
    • Breakpoint Donation
    • bir yazılımcı işe almak (II)
    • Gerçekten bir veritabanına ihtiyacınız varmı ?
    • Kodlarken yapılan seçimler önemlidir
    • Bu siteye erişim mahkeme kararıyla engellenmiştir
    • kod kalitesi üzerine
    • ÜRÜN GELİŞTİRME UZMANI
    • Yazılımcı Araçları
    • Serialization nedir, nerede kullanılır ?
    • Tasdix, Türk Blog Yazarları ile buluşuyor
    • Xml Namespaces
    • eski arkadaş "grid"
    • Lifeforce
    • iyi ama ben kimim?
    • button1_click
    • Equals ve ==
    • VS2005 Araçları
  • Search

  • Categories

    • All
    • Ben kimim ?
    • Coding
      • Base Class Library
      • c#
      • Öfkeli Coder
    • Haberler
    • Java
    • Microsoft
    • Yazılım
      • Algoritma Soruları
  • The requested Blog doesn't exist any more!
  • XML Feeds

    • RSS 2.0: Posts, Comments
    • Atom: Posts, Comments
    • _rdf: Posts, Comments
    • _rss: Posts, Comments
    More on RSS
powered by b2evolution

©2009 by Ertan Tike | Contact | Design by Michael | Credits: PHP framework | vps | François