yazılım geliştirme

Eclipse'de JRebel İle Geliştirme Sürecinizi Hızlandırmak

Konu:

Normal şartlar altında Java projelerinde geliştirme yaparken yeni bir sınıf ya da metod eklendiğinde ya da çıkarıldığında ilgili proje üzerinde çalışmaya devam edebilmek için baştan deploy sürecini yapmak gerekiyor. Bunun sonucunda büyük zaman kayıpları ortaya çıkıyor. Bunun önüne geçmek üzere JRebel adlı ürün kullanılabilir.

JRebel'i Eclipse üzerinde kullanmak isteyenler aşağıdaki yolu deneyebilirler;

Yapılacaklar;

  1. Eclipse'de Help menüsü altından Eclipse Marketplace'e girip JRebel plugin'i kuruyoruz.
  2. Gerekli şartları kabul ediyoruz ve yükleme tamamlandıktan sonra Eclipse'i tekrar başlatıyoruz.
  3. JRebel ayarlar arayüzünden JRebel'i almak ya da denemek seçeneklerinden biri ile aktifleştiriyoruz. (free ile ücretsiz üye olma seçilebilir)
  4. Servers bölümünden hangi sunucularda JRebel çalıştırmak istediğimizi seçiyoruz.
  5. Projects bölümünden hangi projelerde JRebel çalıştırmak istediğimizi seçiyoruz.
  6. Workspace'e dönmek için Sağ üstteki ok butonuna basarak çalışma görünümüne dönüyoruz.
  7. Project menüsü altında Build Automatically seçili değilse seçili hale getiriyoruz.
  8. Servers bölümünde kullanacağımız sunucuya çift tıklayarak ayarlarını açıyoruz ve
    - Publishing bölümünde bulunan Never publish automatically seçeneğini seçiyoruz ve ayarları kaydediyoruz.
    - Jrebel Integration bölümünde bulunan Enable JRebel Agent seçeneğini işaretliyoruz.
  9. Eclipse'in configurasyon dosyası olan eclipse.ini içinde şu iki değeri 2048 olarak güncelleştiriyoruz ya da gerektiği kadar büyütüyoruz:
    -Xmx2048m
    -XX:MaxPermSize=2048m
  10. Yukarıdaki iki değeri sunucu için başlangıç ayarlarından da değiştiriyoruz (ya da yoksa ekliyoruz). Bu ayarları Run menüsü altında Debug Configurations (ya da Run ile çalıştırmak istiyorsanız Run Configurations) 'a tıklayarak açılan pencereden; sol tarafta ilgili sunucuyu seçtikten sonra sağ tarafta Arguments sekmesi altındaki VM arguments bölümünde yapıyoruz.

JRebel'in çalıştığını görmek için projeniz üstünde çalışırken (debug) metod eklemeyi deneyin. İlgili metodu, sunucuyu tekrar başlatmadan çalıştırabiliyorsanız işlem tamam demektir.

Kaynaklar:

Android Kernel - Custom Rom Geliştirme Semineri

Konu:

Ankara Tütev'de Android meraklılarına ücretsiz olarak kernel ve rom geliştirme semineri veriliyor. 18 Ocak 2014 cumartesi günü gerçekleşecek olan etkinlikte konuşmacı Kerim FIRAT.

Android denilince aslında pek meraklı sayılmam ama yine de bir kenarda dursun, ufkumuzu açacak bilgilerle donatılabiliriz. Ayrıntılar Eventbrite'ta: androidkernel.eventbrite.com

Kerim FIRAT;
Java teknoloji alanında bir süre yurt dışında çalışmış, telekom ve e-devlet projelerinde geliştirici ve takım lideri olarak görev yapmıştır.Akıllı cihazlar alanında Çin ve Türkiye odaklı firmalarla embeded Linux ve Android ürünler geliştirmektedir. Ayrıca Java ve Android alanında kitaplar yazmakta ve özel eğitimler vermektedir.
Bu seminerimizde aşağıdaki konular anlatılacaktır.
1. Overall Architecture

  • Folder Structure
  • Java Application
  • Java Framework And Services(Wifi,Camera,Battery,Bluetooth,Notification,...)
  • Java Native Interface

2. System Revision And Development

  • Cross-development toolchain
  • Build Process(build folder)
  • Code Review
  • Adding new applications(Source,apk)

3. Dalvik

  • Dalvik's .dex files

4. Android Kernel Configuration

  • Kernel Architecture
  • Build And Compile

5. System Startup

  • Bootloader
  • Kernel
  • Init
  • Zygote
  • System Server
  • Activity Manager
  • Launcher (Home)

6. Compile And Run(Emulator,Device)

Fonksiyonel Programlama ve 'Yan Etki' Mevzuu - Monad

Konu:

Fonksiyonel Programlama hala tam olarak anlamını kavrayamadığımız bir olgu. Bir de içinde 'fonksiyon' geçtiği için C gibi fonksiyon kullanan dillerle karıştırdığımız çok oluyor. Fonksiyonel programlama benim de yeni yeni anlamaya başladığım bir şey. Bu bağlamda Scala'nın babası olan Martin Oderski'nin verdiği Coursera'daki Functional Programming Principles in Scala adlı dersten çok faydalandım, size de tavsiye ederim. Bunun yanında bazı şeyleri de not olarak yazmak istiyorum. Kopyalamak pek beğendiğim bir yol değil ama internette bulduğumuz şeyi ikinciye bulmak bazen zor olabiliyor, hatta bazen silinmiş olabiliyor. O yüzden Ekşisözlük'te ssg'nin yazdığı bu entry'yi buraya kopyalamak ve bu anı ölümsüzleştirmek istiyorum.

fonksiyonel programlamada yan etki kavramiyla basa cikmak icin kullanilan konseptlerden biri. ama monad'i anlatmadan yan etki nedir ve yan etkiyle fonksiyonel programlamanin alip veremedigi ne var ona bakmak lazim.

genel olarak programlamada bir fonksiyonun kendisinden istenen degeri dondurmek disinda yol actigi gozlenebilir degisikliklerin tamamina yan etki deniyor. imperatif programlamada bu gayet dogal, mesela void'in varligi bile basli basina "bu fonksiyon tamamen yan etkilerden ibarettir" anlamina gelir. yan etkiye ornek verecek olursak:

int topla(int a, int b)
{
    int toplam = a + b;
    return toplam;
}

yan etkiye sahip degilken (cunku mudahale edilen her sey fonksiyonun scope'u icindedir):

int topla(int a, int b)
{
    int toplam = a + b;
    geneltoplam += toplam;
    return toplam;
}

yan etkiye sahiptir. fonksiyonun kendi scope'u disinda biseyleri degistirmektedir cunku. geneltoplam belli ki fonksiyon disinda bir yerde tanimlanmistir.

bir fonksiyonun yan etkiye sahip olup olmadigini anlamak basittir aslinda: fonksiyonu cagiran kodu direkt fonksiyonun dondurdugu degerle degistirince kod hic fark olmadan calismaya devam ediyor mu? ediyorsa bu yan etkiye yol acmayan fonksiyonlara "saf" (pure) fonksiyon deniyor.

amma velakin saf fonksiyonel programlamada "degisken" diye bir kavram olmadigindan ve her sey eninde sonunda bir fonksiyon oldugundan "degistirebileceginiz" degiskenler ve state'ler aslinda yok. yani yukardaki yan etkiye yol acan c# orneginin aslinda saf fonksiyonel bir dilde karsiligi yok. cunku saf fonksiyonel dillerde sizin degistirebileceginiz degiskenler yok. sadece ve sadece deger donduren fonksiyonlar var. bu da dili tasarlayanlarin mazosistliginden degil fonksiyonel programlamanin yapabilecegi bir yigin optimizasyon ve hata kontrolunun aslinda bu kisitlara dayaniyor olmasindan ileri geliyor. mesela saf fonksiyonlarin en buyuk avantaji, kendilerini dogru sirada cagirma zorunlulugu olmamasi, dolayisiyla derleyicinin isterse bunlari rahat rahat paralel (ornek erlang) ya da nasil hizli olacaksa o sirada calistirabilmesi ve lazy evaluation'a izin vermesi.

monad burada, yani saf fonksiyonel programlamaya "kontrollu yan etki" destegini katmak icin mevcut. mantigi da su: eger her seyi bir fonksiyonun donus degeri olarak tanimlayacaksak, o zaman state veya global degiskeni de fonksiyonun hem aldigi parametre hem de donus degeri olarak tanimlariz. mesela yan etkiye yol acan topla fonksiyonumuzu c# yapilari kullanarak soyle tanimlasaydik:

pair topla(int a, int b, int geneltoplam)
{
    int toplam = a + b;
    return new pair(toplam, toplam + geneltoplam);
}

state'i de parametre olarak alip donuste de yeni degerini, dondurmesi gereken degerle bir pakete toplayip donduren bir fonksiyon tanimlardik. boylece fonksiyonu cagiran fonksiyonlari soyle yazmak mumkun olur:

int biseylertoplavegeneltoplamiekranayaz()
{
    console.writeline("genel toplam = {0}", topla(2,4,topla(3,5,0).second).second);
}

iste bu sekilde hic geneltoplam degiskeni tutmadan fonksiyon cagrilarinda state'i tutmayi basardik. monad da tam olarak bu teknigin adi oluyor. yani bir fonksiyonun giris ve cikis degerlerinde "yan etki"lerin tamamini da paslamada yapilan "enkapsulasyon" islemini saglayan fonksiyonel dil yapilarina monad deniyor.

aslinda monad sunu der: fonksiyon aldigi parametrelere ek olarak kainati parametre alir ve donus degeri olarak da kainatin yeni halini dondurur. cenabi hakkin yarattigi kainatin tamamini baska fonksiyona paslamak biraz uzun sureceginden sadece fonksiyonun yan etkilerle etkiledigi seyleri almak yeterlidir. o yuzden geneltoplam fonksiyonumuz bu konuda yeterlidir mesela.

yan etki illa ki degisken olmasi gerekmez. konsola cikti yazmak, loglama yapmak, ekrana pencere cikarmak vs vs, bunlarin hepsi gayetle gozlenebilir yan etkilerdir. elbette "konsolun icerigini yolla sonra geri tamamini al" yerine dissal olaylar icin (dosya islemleri, konsol, window, isletim sistemiyle genel munasebet), fonksiyonel diller genel gecer bir monad saglarlar. oradaki faraziya "bu cagridan sonra senin programin kendi tip sistemi disindaki her sey degisti"dir. o yuzden derleyici yan etkiye yol acan fonksiyonlari sirali olarak cagirir, paralel calismalarina izin vermez boylece kainati degistiren bir fonksiyonun ciktisi olan kainatin obur fonksiyona girdi olacagi garantilenir.

via https://twitter.com/fkadev/status/390340426290716672 & https://eksisozluk.com/entry/22578104

Geliştirme Bizden Sorulur

Koca bir eylül ayını yazısız geçirmenin verdiği üzüntüyle beraber, 'artık yazmalıyım' dürtüsüne boyun eğiyorum. İşler yoğun, yazılım geliştirici olarak işsiz kalmıyoruz, çok şükür. Bazen tabii geliştir geliştir nereye kadar dediğimiz de olmuyor değil. İnsanın aklı da bir yere kadar götürüyor, arada sırada yeter be naraları atmak istiyoruz. Tabii ki bu böyle gitmez. Ama gidinceye kadar yolu var.

Spring ve ExtJS, işyerinde kurumsal olarak kullandığımız iki önemli framework. Bizden önce birileri bunları seçmiş ve iyi de yapmış. ExtJS artık adı da biraz daha Sencha olarak bilinen Javascript çatısı. Az önce gördüğüm Spring sunumunda Sencha'nın marifetleri anlatılıyordu. Spring konferansında Javascript kütüpanesinin ne işi var? Sunumda buna da cevap vermişler. Bu noktada önemli bir slayt dikkatimi çekti:

Yani diyor ki;
- Genelde yönetim kademesinde şu tipte bir anlayış var: Programı yapan sen değil misin? Ekranın görselliğini de sen yapacaksın elbette.

O halde aynı mantıkla veritabanını da ben işleyeyim, uygulama sunucusunu da ben yöneteyim, network işlerini de ben yapayım. O da yetmediyse bilgisayarları da ben kurayım. Bazı yerlerde işler biraz böyle yürüyor. ( https://en.wiktionary.org/wiki/wear_too_many_hats ) Böyle olunca her işi aynı adam yapıyor, "iş bölümü" kavramı olması gereken yerden çok uzaklara gidiyor.

Halbuki yapılan yazılım işlerinde "önyüz tasarımcısı" diye bir kavram gelişti. Yazılımların büyük bir bölümü internet ortamında olduğundan yani browser üzerinde çalıştığından, önyüz işleri de aslında arkada işleyen sunucu yazılımından ayrı olan HTML-CSS-Javascript üçlüsüne dönüyor. Bazıları kapsamı genişleterek "UI/UX design" (Kullanıcı Arayüz Tasarımı / Kullanıcı Deneyimi Tasarımı) kavramlarından bahsediyorlar. Bu adamlar "kişi sitemize girdiğinde nereye bakarlar, nereye tıklarlar, nereye tıkladıklarında en anlamlı olarak neyi ararlar ve neyi bulmalılar" sorularına cevap veren kişiler aslında.

Dünya UX designer'lara yelken açadursun, biz asıl görevi yazılım geliştirmek olanlar, ExtJS ile fazla HTML-CSS öğrenmeye gerek kalmadan ekranlarımızı tasarlayalım, formlarımızı yapalım, uygulamalarımızı kullanıcılarımızla buluşturalım.

Peki bu iyi bir şey mi? Bence değil. Ama belki de iyidir. Ne bileyim...

Tüm sunuma ulaşmak için adres: http://www.slideshare.net/senchainc/spring-sencha

Subscribe to RSS - yazılım geliştirme