<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Sezai Yılmaz'ın Bilgisayar Dünyası &#187; java</title>
	<atom:link href="http://www.sezaiyilmaz.com/tag/java/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.sezaiyilmaz.com</link>
	<description>Linux, UNIX, Windows, sistem yönetimi, uygulama ve sistem programı geliştirme tecrübeleriyle ilgili yazıları...</description>
	<lastBuildDate>Mon, 30 Nov 2009 11:10:17 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
		<item>
		<title>JPC &#8211; Java PC</title>
		<link>http://www.sezaiyilmaz.com/2009/07/08/jpc-java-pc/</link>
		<comments>http://www.sezaiyilmaz.com/2009/07/08/jpc-java-pc/#comments</comments>
		<pubDate>Wed, 08 Jul 2009 08:12:25 +0000</pubDate>
		<dc:creator>Sezai YILMAZ</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Teknoloji]]></category>
		<category><![CDATA[Ürün İnceleme]]></category>
		<category><![CDATA[dsl]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[pure java]]></category>
		<category><![CDATA[virtual machine]]></category>
		<category><![CDATA[vm]]></category>
		<category><![CDATA[x86]]></category>

		<guid isPermaLink="false">http://www.sezaiyilmaz.com/?p=439</guid>
		<description><![CDATA[JPC &#8211; Pure Java x86 Emulator sadece java programlama dili ile geliştirilmiş olan bir sanal bilgisayardır. Geliştiricilerine göre oldukça yüksek performanslı. Sanal ortamda sorunsuz çalıştırabildiği işletim sistemleri listesinde Linux ve DOS ağırlığı görülüyor. Henüz Windows XP&#8217;yi tam anlamıyla yükleyip çalıştıramıyor. Ancak Linux ve DOS sorunsuz çalışıyor. JPC&#8217;nin en güzel ve fantezi yönü de Java ile [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-440" title="jpc_logo" src="http://www.sezaiyilmaz.com/wp-content/uploads/2009/07/jpc_logo.png" alt="jpc_logo" width="84" height="72" />JPC &#8211; Pure Java x86 Emulator sadece java programlama dili ile geliştirilmiş olan bir sanal bilgisayardır. Geliştiricilerine göre oldukça yüksek performanslı. Sanal ortamda sorunsuz çalıştırabildiği işletim sistemleri listesinde Linux ve DOS ağırlığı görülüyor. Henüz Windows XP&#8217;yi tam anlamıyla yükleyip çalıştıramıyor. Ancak Linux ve DOS sorunsuz çalışıyor. JPC&#8217;nin en güzel ve fantezi yönü de Java ile geliştirildiği için her ortamda çalışabiliyor olmasıdır. Hatta browser içerisinde applet olarak bile çalışabilmekte. Browser içerisinde apllet olarak çalışmasının henüz fantezi dışında özel bir avantajını göremedim. Yine de güzel bir fantezi.</p>
<p><span id="more-439"></span>Yaptığım araştırma ve incelemeler sonrasında sanal makinayı DSL (Damn Small Linux) ile kendi sitesi üzerinden web browser içinden applet olarak test ettim. Performansı oldukça başarısızdı. Ancak yine de Java dili ile x86 makina yapılabilmiş olması ve Linux işletim sistemini grafiksel kullanıcı arabirimi ile kullandırabiliyor olması Java dilinin gücünü göstermektedir.</p>
<p>GPL2 lisanslı JPC&#8217;ye ulaşmak için <a href="http://www-jpc.physics.ox.ac.uk/" target="_blank">http://www-jpc.physics.ox.ac.uk/</a> adresine tıklayabilirsiniz. Yapmış olduğum denemenin ekran görüntüleri aşağıdadır.</p>

<a href='http://www.sezaiyilmaz.com/2009/07/08/jpc-java-pc/jpc_01/' title='jpc_01'><img width="150" height="150" src="http://www.sezaiyilmaz.com/wp-content/uploads/2009/07/jpc_01-150x150.png" class="attachment-thumbnail" alt="jpc_01" title="jpc_01" /></a>
<a href='http://www.sezaiyilmaz.com/2009/07/08/jpc-java-pc/jpc_02/' title='jpc_02'><img width="150" height="150" src="http://www.sezaiyilmaz.com/wp-content/uploads/2009/07/jpc_02-150x150.png" class="attachment-thumbnail" alt="jpc_02" title="jpc_02" /></a>
<a href='http://www.sezaiyilmaz.com/2009/07/08/jpc-java-pc/jpc_03/' title='jpc_03'><img width="150" height="150" src="http://www.sezaiyilmaz.com/wp-content/uploads/2009/07/jpc_03-150x150.png" class="attachment-thumbnail" alt="jpc_03" title="jpc_03" /></a>

]]></content:encoded>
			<wfw:commentRss>http://www.sezaiyilmaz.com/2009/07/08/jpc-java-pc/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Juniper SSL-VPN Appliance&#8217;ı SMS Tabanlı OTP İle Güçlendirdik</title>
		<link>http://www.sezaiyilmaz.com/2008/11/09/juniper-ssl-vpn-appliance-sms-tabanli-otp-ile-guclendirdik/</link>
		<comments>http://www.sezaiyilmaz.com/2008/11/09/juniper-ssl-vpn-appliance-sms-tabanli-otp-ile-guclendirdik/#comments</comments>
		<pubDate>Sat, 08 Nov 2008 22:55:34 +0000</pubDate>
		<dc:creator>Sezai YILMAZ</dc:creator>
				<category><![CDATA[Geliştirme]]></category>
		<category><![CDATA[Güvenlik]]></category>
		<category><![CDATA[Sistem Yönetimi]]></category>
		<category><![CDATA[active directory]]></category>
		<category><![CDATA[axis2]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[JNDI]]></category>
		<category><![CDATA[juniper networks]]></category>
		<category><![CDATA[LDAP]]></category>
		<category><![CDATA[one time password]]></category>
		<category><![CDATA[OTP]]></category>
		<category><![CDATA[pro-g]]></category>
		<category><![CDATA[SMS]]></category>
		<category><![CDATA[ssl-vpn]]></category>
		<category><![CDATA[tek kullanımlık şifre]]></category>

		<guid isPermaLink="false">http://www.sezaiyilmaz.com/?p=421</guid>
		<description><![CDATA[Pro-G&#8217;de bir iş fırsatı karşımıza çıktı. Konu, Juniper SSL-VPN Appliance&#8217;ı iki aşamalı kullanıcı doğrulama yeteneğini geliştirdiğimiz özel bir yazılımla cep telefonuna SMS ile gelecek olan OTP (One Time Password / Tek Kullanımlık Şifre) ile güçlendirmek. Java ile geliştirdiğimiz özel uygulama sayesinde Juniper SSL-VPN kutusu kullanan kurumlar artık SMS tabanlı OTP ile SSL-VPN bağlantısını gerçekleştirebilecekler. İşin [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-thumbnail wp-image-422 alignleft" title="logo_juniper_thumb" src="http://www.sezaiyilmaz.com/wp-content/uploads/2008/11/logo_juniper_thumb.gif" alt="" width="62" height="65" />Pro-G&#8217;de bir iş fırsatı karşımıza çıktı. Konu, Juniper SSL-VPN Appliance&#8217;ı iki aşamalı kullanıcı doğrulama yeteneğini geliştirdiğimiz özel bir yazılımla cep telefonuna SMS ile gelecek olan OTP (One Time Password / Tek Kullanımlık Şifre) ile güçlendirmek. Java ile geliştirdiğimiz özel uygulama sayesinde Juniper SSL-VPN kutusu kullanan kurumlar artık SMS tabanlı OTP ile SSL-VPN bağlantısını gerçekleştirebilecekler.<span id="more-421"></span></p>
<p>İşin teknik ayrıntılarına inecek olursak ilk aşama oturum açma kısmı tamamen kurumun LDAP / Active Directory sunucusuna ait. İkinci aşamada geliştirdiğimiz yazılım devreye giriyor.</p>
<p>İlk aşama başarılı oturum açma bilgisi alınır alınmaz bir OTP üretiliyor ve SMS ile ilk aşama oturumu açmış olan kullanıcının cep telefonuna gönderiliyor. Kullanıcı ikinci aşamada şifre olarak SMS ile gelen OTP&#8217;yi kullanıyor. Yazılımın içinde gömülü olarak çalışan radius sunucusu Juniper SSL-VPN kutusuna ikinci aşama oturum hizmeti veriyor.</p>
<p>Geliştirdiğimiz bu yazılımda radius server işleri için TinyRadius projesini kullandık. SMS gönderimi için ise kurumun sağladığı Web Servislerini AXIS2 projesinin kütüphaneleri yardımıyla kullandık. LDAP sorgulama hizmetleri için JNDI (Java Naming and Directory Interface) kullandık.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sezaiyilmaz.com/2008/11/09/juniper-ssl-vpn-appliance-sms-tabanli-otp-ile-guclendirdik/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Java&#8217;da Görsel Şölen Araçları</title>
		<link>http://www.sezaiyilmaz.com/2008/09/07/javada-gorsel-solen-araclari/</link>
		<comments>http://www.sezaiyilmaz.com/2008/09/07/javada-gorsel-solen-araclari/#comments</comments>
		<pubDate>Sat, 06 Sep 2008 23:25:40 +0000</pubDate>
		<dc:creator>Sezai YILMAZ</dc:creator>
				<category><![CDATA[Geliştirme]]></category>
		<category><![CDATA[GUI]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[JCalendar]]></category>
		<category><![CDATA[jformdesigner]]></category>
		<category><![CDATA[jgoodies]]></category>
		<category><![CDATA[JOutlookBar]]></category>
		<category><![CDATA[laf]]></category>
		<category><![CDATA[look and feel]]></category>
		<category><![CDATA[profesyonel görünümlü java uygulamaları]]></category>
		<category><![CDATA[swing]]></category>
		<category><![CDATA[swing widgets]]></category>

		<guid isPermaLink="false">http://www.sezaiyilmaz.com/?p=364</guid>
		<description><![CDATA[Bu yazımda Java’da Kullanıcı Arabirimi Tasarımı Püf Noktaları başlıklı yazımda bahsetmiş olduğum profesyonel görünümlü SWING uygulamalarını elde edebilmek için ücretsiz olarak kullanabileceğiniz kütüphanelerden (ing. library) bahsetmek istiyorum. Sizlere tanıtacağım ve şahsen kullanmış olduğum SWING kütüphanelerinin oldukça görsel ve işlevsel olduklarını düşünüyorum. Sırayla bunlara değinelim: JGoodies JGoodies görsel olarak profesyonel SWING uygulamaları geliştirmeniz için Form Layout, [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-medium wp-image-361" title="java_logo" src="http://www.sezaiyilmaz.com/wp-content/uploads/2008/08/java_logo.png" alt="" width="90" height="90" />Bu yazımda <a title="Java’da Kullanıcı Arabirimi Tasarımı Püf Noktaları için Kalıcı Bağlantı" rel="bookmark" href="../2008/08/25/javada-kullanici-arabirimi-tasarimi-puf-noktalari/">Java’da Kullanıcı Arabirimi Tasarımı Püf Noktaları</a> başlıklı yazımda bahsetmiş olduğum profesyonel görünümlü SWING uygulamalarını elde edebilmek için ücretsiz olarak kullanabileceğiniz kütüphanelerden (ing. library) bahsetmek istiyorum. Sizlere tanıtacağım ve şahsen kullanmış olduğum SWING kütüphanelerinin oldukça görsel ve işlevsel olduklarını düşünüyorum. Sırayla bunlara değinelim:<span id="more-364"></span></p>
<p><strong>JGoodies</strong></p>
<p>JGoodies görsel olarak profesyonel SWING uygulamaları geliştirmeniz için Form Layout, UIF Lite, Looks gibi kütüphaneler sağlamaktadır. Form Layout standart java layoutlarından farklı olarak özellikle bilgi giriş ekranı tasarlamak istediğinizde kullanabileceğiniz oldukça güçlü bir layout manager&#8217;dır. Yatayda ve düşeyde hizalı SWING görselleri kullanmanızı sağlar. UIF Lite aralarında görünmez tutamaçlı Split Pane, Inner Frame, Title, Titled Separator gibi görsellerin bulunduğu ve tasarladığınız arayüzün sade olmasına radımcı olan bazı SWING görselleri sağlar. Looks kütüphanesi ise fontların, SWING görsellerinin, renklerin bir uyum ve ahenk içerisinde olması için bazı Look and Feel&#8217;ler sağlar. JGoodies&#8217;in sitesini incelediğinizde SWING ile profesyonel görünümlü ve doğal hissiyatlı uygulamaların geliştirilmesi için ufkumu nasıl açtığını rahatlıka göreceksiniz.</p>
<p><a href="http://www.jgoodies.com" target="_blank">JGoodies</a><br />
<a href="http://www.jgoodies.com/articles/first%20aid%20for%20swing-75min.pdf" target="_self">First Aids for SWING UIs</a><br />
<a href="http://www.jgoodies.com/articles/efficient%20swing%20design.pdf" target="_blank">Efficient SWING Design</a><br />
<a href="http://www.jgoodies.com/downloads/libraries.html" target="_blank">JGoodies Libraries</a><br />
<a href="http://www.jgoodies.com/downloads/index.html" target="_blank">JGoodies Applications</a></p>
<p><strong>L2FProd Common Components</strong></p>
<p>L2FProd profesyonel görünüme bir adım daha yaklaşabilmeniz için görsel SWING bileşenleri sağlamaktadır. Bu bileşenlerden bazılarını tanırsak; Windows XP explorer pencerelerinin sol tarafındaki gibi bir görünümde link şeklinde düğmeler sağlamak ve açılır kapanır gruplama yapabilmek için JTaskPane, JTaskPaneGroup, JLinkButton görselleri; MS-Outlook&#8217;un sol tarafındaki gibi kayarak açılan paneller üzerindeki düğmeleri sağlayan JOutlookBar; Firefox gibi uygulamalarda benzerlerini görebildiğimiz JButtonBar; JTipOfTheDay penceresi ve daha birçok görsel bileşen sağlar.</p>
<p><a href="http://www.l2fprod.com/common/" target="_blank">L2FProd Common Components</a></p>
<p><strong>HelpGUI</strong></p>
<p>HelpGUI SWING uygulamalarınız için HTML tabanlı yardım belgelerini sunmanız için kullanılan görsel bir araç. Şekil olarak Windows&#8217;un help penceresine oldukça benzemekte. Tüm yardım içeriğini .jar dosyası içine gömebilirsiniz.</p>
<p><a href="http://helpgui.sourceforge.net" target="_blank">HelpGUI</a></p>
<p><strong>JCalendar</strong></p>
<p>Standart Java SWING bileşenleri tarih ve saat seçmenizi sağlayacak bir bileşen içermemekte. JCalendar oldukça başarılı bir tarih &#8211; saat seçme aracı sağlamaktadır.</p>
<p><a href="http://www.toedter.com/en/jcalendar/" target="_blank">JCalendar</a></p>
<p>Bu bileşenlerin oldukça faydasını gördüm. Sizlerin de işine yarayacaklarını düşünüyorum.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sezaiyilmaz.com/2008/09/07/javada-gorsel-solen-araclari/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Java&#8217;da Kullanıcı Arabirimi Tasarımı Püf Noktaları</title>
		<link>http://www.sezaiyilmaz.com/2008/08/25/javada-kullanici-arabirimi-tasarimi-puf-noktalari/</link>
		<comments>http://www.sezaiyilmaz.com/2008/08/25/javada-kullanici-arabirimi-tasarimi-puf-noktalari/#comments</comments>
		<pubDate>Mon, 25 Aug 2008 11:09:49 +0000</pubDate>
		<dc:creator>Sezai YILMAZ</dc:creator>
				<category><![CDATA[Geliştirme]]></category>
		<category><![CDATA[grafiksel kullanıcı arabirimi]]></category>
		<category><![CDATA[GUI]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[kullanıcı dostu arayüz geliştirmek]]></category>
		<category><![CDATA[laf]]></category>
		<category><![CDATA[login screen]]></category>
		<category><![CDATA[look and feel]]></category>
		<category><![CDATA[model view controller]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[oturum açma ekranı]]></category>
		<category><![CDATA[progress bar]]></category>
		<category><![CDATA[responsive]]></category>
		<category><![CDATA[rich client]]></category>
		<category><![CDATA[swing]]></category>
		<category><![CDATA[user friendly user interface]]></category>

		<guid isPermaLink="false">http://www.sezaiyilmaz.com/?p=358</guid>
		<description><![CDATA[Bu yazıda java (SWING) ile kullanıcı dostu rich client arabirim tasarımının püf noktalarından bahsedeceğim. Bahsedeceğim konu başlıkları dilden bağımsız olarak tüm arayüz tasarımları için de uyarlanabilirler. Burada bahsedeceğim terimlerde Türkçe&#8217;leri genel geçer bir kabul görmediğinden dolayı doğrudan İngilizce isimleri kullanıyor olacağım. Arayüz Responsive olmalı Grafiksel Kullanıcı Arabirimi (ing. Graphical User Interface) hızlı olmalı, kullanıcı komutlarına [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-thumbnail wp-image-361" title="java_logo" src="http://www.sezaiyilmaz.com/wp-content/uploads/2008/08/java_logo.png" alt="" width="72" height="72" />Bu yazıda java (SWING) ile kullanıcı dostu rich client arabirim tasarımının püf noktalarından bahsedeceğim. Bahsedeceğim konu başlıkları dilden bağımsız olarak tüm arayüz tasarımları için de uyarlanabilirler. Burada bahsedeceğim terimlerde Türkçe&#8217;leri genel geçer bir kabul görmediğinden dolayı doğrudan İngilizce isimleri kullanıyor olacağım.<span id="more-358"></span></p>
<h4>Arayüz Responsive olmalı</h4>
<p>Grafiksel Kullanıcı Arabirimi (ing. Graphical User Interface) hızlı olmalı, kullanıcı komutlarına hızlı yanıt vermeli, donup kalmamalıdır. Arayüz multi-threaded bir biçimde geliştirilmelidir. Bir işlem 200 ms&#8217;den uzun sürecekse mutlaka bir progress bar gösterilerek kullanıcıya işlem yapıldığı ve beklemesi gerektiği hissettirilmelidir. İşlem tamamlanana değin arayüzdeki kontrollere dokunması engellenmeli ve fare göstergesi kum saatine dönüştürülmelidir. Bu esnada arka planda kalan ve asıl iş yapan thread görevine devam etmelidir. MVC (Model View Controller) bağlamında arka planda asıl iş yapan thread (model &amp; controller) progress bar&#8217;a (view) sürekli olarak ilerleme bilgisi göndermelidir. Eğer ilerleme durumu belirsiz ise (ing. non-deterministic progress), en azından kaçıncı adımı veya işlemekte olduğu veriyi durum bilgisi olarak progress bar&#8217;a veya üzerindeki label&#8217;lara aktarmalıdır. Bu şekilde kullanıcı uygulamanın donmadığı ve işlem yaptığı konusunda ikna olacaktır. Uzun sürme ihtimali olan her türlü işlemde bu kurallara uyulmalıdır.</p>
<p>Önerilen kodlama şekli ise uzun sürme ihtimali olan her işlem başlangıcında ayrı bir thread ile progress dialog instance&#8217;ı hazırlanması (progress bar içeren bir dialog), otomatik olarak 200 ms sonra belirmesidir. 200 ms&#8217;den daha kısa sürede işlem sonuçlanırsa da progress dialog&#8217;un zamanlayıcısının durdurularak iptal edilmesi ve belirmesinin önüne geçilmesidir.</p>
<p>Bir uygulamanın arayüzünü oluşturan tüm görsel bileşenler (kullanıcının karşısına daha sonra çıkacak olan paneller, sonradan açılacak olan pencereler, &#8230;) uygulama açılışında mutlaka yaratılmalı (ing. instantiate), yerleşimi yapılmalıdır, ancak gösterilmemelidir. JVM&#8217;in ilk kez instance&#8217;ı hazırlanacak olan görsel bir nesneyi hazırlaması oldukça maaliyetli ve uzun sürmektedir. Kullanıcıyı sonradan bekletmektense uygulama açılışında splash screen gösterilirken bir progress bar ile görsel bileşenlerin yüklendiği ve cache&#8217;lendiğine dair bilgi verilmesi ve arka planda bu işlemlerin yapılması daha uygundur. Bu yöntemle geliştirilmiş Java Uygulaması çok daha responsive olacak ve çalışma hızı olarak o platformdaki doğal bir uygulamaya yakınmış gibi hissedilecektir.</p>
<p>JList, JComboBox, JTable mümkünse FixedCellWidth ve FixedCellHeight değerleri önceden hesaplanarak verilmeli ve çizim sırasında yeniden hesaplamanın önüne geçilmesi gerekmektedir. Bu şekilde en az 10 kat daha hızlı JList, JComboBox ve JTable&#8217;a sahip olacak ve çok daha fazla veriyi bu bileşenlerle gösterebileceksiniz.</p>
<p>Bir JList, JComboBox, JTable içindeki JColumn&#8217;larda kullanılan Renderer&#8217;lar her tür için ortak bir instance olmalı. Bu tür görsel bileşenlerin önünde yer alacak olan diğer pencereler, pencerenin yerinin değiştirilmesi, yeniden boyutlandırılması, scrollbar aracılığı ile kaydırılması nedeni ile tekrar tekrar Renderer&#8217;a çizim için başvurulmakta ve her defasında renderer çizim süreci içinde en ufak bir &#8220;new&#8221; çağrısı bulunması durumunda uygulamanın bellek kullanımı zamanla artacak, garbage collector bu hıza yetişemeyecek ve bir süre sonra uygulama cevap veremez hale gelecektir. Bu nedenle Renderer çizim sürecinde kesinlikle &#8220;new&#8221; çağrısı yer almamalı, tüm instance hazırlıkları Renderer&#8217;ın constructor&#8217;unda halledilmelidir. Renderer çizim sürecinde sadece çizilecek olan görselin modelinde yer alan değerlere göre parametrik değişimler yapılarak önceden instance&#8217;ı hazırlanmış bileşenler (metinler, simgeler, kenar çizgileri, zemin renkleri) kullanılmalıdır.</p>
<p>Arayüz&#8217;ün hızlı cevap vermesi için yukarıdaki kurallara uygun bir şekilde öncelikli olarak bir splash screen gösterilmeli, splash screen&#8217;in uygun bir yerinde bir progress bar ve ilerleme açıklamaları içeren bir label gösterilerek arayüzün gösterilme aşamasına kadar yapılan tüm hazırlıklardan kullanıcı bilgilendirilmelidir. Böylece kullanıcı uygulamanın çok hızlı açılmakta olduğunu düşünecektir.</p>
<h4>Fazla çizgilerden kaçınılmalı</h4>
<p>Görsel nesneleri daha kolay erişilebilir ve anlaşılır kılmak için gruplarız. Ancak standart gruplama görsellerimiz genelde gereksiz çizgileri yanlarında getirirler. Bu çizgiler kullanıcının gözünü yormaktadır. Fazla çizgilerden kaçınmak arayüzü daha sade, göz yormayan ve anlaşılır yapacaktır. Aradaki farkı görmek için ekran görüntülerine bakınız.</p>
<h4>Kenar boşluklarından korkmayın</h4>
<p>Pencere ve Dialog&#8217;larda kenar boşlukları eklemekten çekinmeyin. Pencere ve Dialog&#8217;ların kenarlarına çok yakın olan görsel nesneler kullanıcının gözünü yorar. Geniş kenar boşlukları için çok yer kaplar, görsel nesneler için yer kalmaz gibi düşünülse de oldukça farklı ve rahat bir görüntü sunar. Aradaki farkı görmek için ekran görüntülerine bakınız.</p>
<h4>İşletim sisteminin görünüme uyun</h4>
<p>İşletim sisteminin görünümüne uyarak kullanıcının işletim sistemi üzerinde kullanmış olduğu diğer programların renk ahengi, hissiyat, yazı tipi gibi  alıştığı look and feel&#8217;i kullanıcıya sağlayın. Böylece kullanıcı uygulamanıza daha kolay alışacaktır.</p>
<p>Yazı tipi taban çizgisini koruyun. Standart java look and feel&#8217;ı olarak gelen Metal LAF&#8217;ta ComboBox&#8217;lar oldukça yüksek, Button&#8217;lar oldukça alçak, Label&#8217;lar alabildiğine alçak şekilde hazırlanmış. Bu görsellerin yatay kenar çizgileri birbirini tutmamakta, eğri büğrü bir görüntü sunmaktadır.</p>
<h4>Düşey hizalama önemli</h4>
<p>Görsel nesneleri göze hoş görünmesi için düşey olarak hizalamak gerekir. Arayüzdeki her nesne kendi telinden çalarcasına rasgele yerleştirilmiş gibi görünürse zamanla göz yorgunluğuna neden olacaktır.</p>
<table border="0" cellpadding="5">
<tbody>
<tr>
<td><a href="http://www.sezaiyilmaz.com/wp-content/uploads/2008/08/personelformu1.png"><img class="size-thumbnail wp-image-359 alignnone" title="personelformu1" src="http://www.sezaiyilmaz.com/wp-content/uploads/2008/08/personelformu1-150x150.png" alt="" width="150" height="150" /></a></td>
<td><strong>Olumsuz Yönler:</strong></p>
<ul>
<li>Label yazı tipleri kalın yazı ile yazılmış, işletim sistemi doğal görüntüsüne uygun değil</li>
<li>Renk ahengi işletim sistemi doğal renk ahenginde değil</li>
<li>JEditBox, JLabel, JComboBox, JButton türlerinin yükseklikleri farklı</li>
<li>Kenar boşluğu bırakılmamış, düğmeler kenarlara yapışık olmuş</li>
<li>Çok fazla çizgi var</li>
<li>Düşeyde hizalı değil</li>
</ul>
</td>
</tr>
<tr>
<td><a href="http://www.sezaiyilmaz.com/wp-content/uploads/2008/08/personelformu2.png"><img class="alignnone size-thumbnail wp-image-360" title="personelformu2" src="http://www.sezaiyilmaz.com/wp-content/uploads/2008/08/personelformu2-150x150.png" alt="" width="150" height="150" /></a></td>
<td><strong>Olumlu Yönler:</strong></p>
<ul>
<li>Her tür görsel için işletim sistemi standartlarına uygun font seçimi yapılmış</li>
<li>Renk ahengi işletim sistemi ile uyumlu</li>
<li>Görsellerin yükseklikleri aynı</li>
<li>Kenar boşlukları bırakılmış.</li>
<li>Titled Border yerine sade gruplama kullanılmış, fazladan rahatsız edici çizgi yok</li>
<li>Düşey hizalama düzgün</li>
</ul>
</td>
</tr>
</tbody>
</table>
<h4>Oturum açma ekranı tasarımı</h4>
<p>Uygulamaya oturum açma ekranı (ing. login screen) olarak arka planda uygulamanın ana penceresi, önde oturum açma penceresi uygun değildir. Bu stil, henüz oturum açılmamışken uygulamanın yapabilecekleri ile ilgili yabancı kişilere fikir verir. Güvenlik açısından da sakıncalı, görsel olarak da erişilemeyecek görsellerin boş yere gösteriliyor olması da uygun değildir. Bu stilin yerine uygulama çalıştırılır çalıştırılmaz uygulama ana penceresini (ing. main window) göstermek yerine sadece oturum açma ekranı gösterilmesi daha uygundur. Hatta uygulamanın ana penceresinde card layout kullanılarak oturum açma ekranının ana pencere ile aynı boyutta, ayrı bir panel olarak, güzel bir tasarım ile desteklenmesi çok daha profesyonel bir görünüm katacaktır.</p>
<h4>Kısa yol tuşları, bağlam menüsü, araç çubuğu, standart menü kullanımı</h4>
<p>Kullanıcıya uygulamanızı kullanması için ne kadar çok alternatif yol sunarsanız, uygulamanız o kadar kullanıcı dostu olacaktır. Kullanıcı var, fare ile çok oynar; kullanıcı var, sadece menülerle çalışır; kullanıcı var, sadece klavyeyi kullanır. Hepsine hitap edebilmek, hepsi için de kullanıcı dostu olmak anlamına gelirken, sadece bir veya ikisine dikkat etmeniz durumunda kullanıcıların bir bölümü için uygulamanızın kullanıcı dostu olmaması anlamına gelecektir.</p>
<h4>Animasyonlar</h4>
<p>Bir animasyonun süresi bellidir. Genelde animasyon yapmak istendiğinde animasyonun kaç adımda tamamlanacağı veya ne kadar sürede bir yeni bir karenin çiziminin yapılacağı önceden hesaplanır. Sonra da hesaplanmış olan bu süre kadar uyuma ve tekrar uyanıldığında yeni karenin çiziminin gerçekleştirilmesi işlemi yapılmaktadır. Bu yaklaşım oldukça güvenilir ve iyi gibi görünmektedir. Ancak donanımdan donanıma karelerin çizilme süresi ve animasyonun tamamlanma süresi değişmektedir. Çünkü her karenin çizilmesinin de bir maliyeti vardır ve zaman kaybı olarak yansımaktadır. Bu nedenle animasyon yapılırken mutlaka gerçek zaman da hesaba katılmalı, gerekirse bazı kareler atlanarak zamanı gelenlerin çizilmesi sağlanmalıdır.</p>
<p>Bu kurallara uyduğunuz sürece uygulamanız profesyonel ve doğal görünecektir. Kötü nam salmış olan çirkin görünüşlü Java uygulaması izlenimi vermeyecek, doğal görünümde olacak, sanki o platformda çalışan doğal bir uygulama gibi hızlı çalışacaktır. Bu yazıda bahsetmiş olduğum bu kurallara uymanızda yardımcı olacak Look and Feel&#8217;lardan, Layout&#8217;lardan, Standart SWING görselleri dışında ilave SWING görsellerinden ayrı bir yazıda bahsedeceğim.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sezaiyilmaz.com/2008/08/25/javada-kullanici-arabirimi-tasarimi-puf-noktalari/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Türkçe Karakter Sorunlarımız</title>
		<link>http://www.sezaiyilmaz.com/2008/07/28/turkce-karakter-sorunlarimiz/</link>
		<comments>http://www.sezaiyilmaz.com/2008/07/28/turkce-karakter-sorunlarimiz/#comments</comments>
		<pubDate>Mon, 28 Jul 2008 20:08:42 +0000</pubDate>
		<dc:creator>Sezai YILMAZ</dc:creator>
				<category><![CDATA[Geliştirme]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Teknoloji]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[karakter]]></category>
		<category><![CDATA[libc]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[postgresql]]></category>
		<category><![CDATA[sorunlar]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[tr_TR]]></category>
		<category><![CDATA[turkce]]></category>
		<category><![CDATA[unix]]></category>
		<category><![CDATA[utf]]></category>

		<guid isPermaLink="false">http://sezaiyilmaz.com/?p=94</guid>
		<description><![CDATA[Türkçe&#8217;mize özgü özel karakterlerimiz (ö, ü, ç, ş, ğ, ı, Ö, Ü, Ç, Ş, Ğ, İ), bilgisayarın hayatımıza girdiği ilk günden itibaren sorun oluşturmuştur. Bilgisayar&#8217;ın gelişimine ve standartların oluşumuna ilk başta katkı vermemiş olan ülkeler de bizlerle benzer kaderi paylaşmıştır. Türkçe karakter sorunlarımız saklama, gösterim, sıralama, büyük &#8211; küçük harf dönüşümü gibi kategorilere ayrılabilir. UTF [...]]]></description>
			<content:encoded><![CDATA[<p>Türkçe&#8217;mize özgü özel karakterlerimiz (<strong>ö, ü, ç, ş, ğ, ı, Ö, Ü, Ç, Ş, Ğ, İ</strong>), bilgisayarın hayatımıza girdiği ilk günden itibaren sorun oluşturmuştur. Bilgisayar&#8217;ın gelişimine ve standartların oluşumuna ilk başta katkı vermemiş olan ülkeler de bizlerle benzer kaderi paylaşmıştır.</p>
<p>Türkçe karakter sorunlarımız saklama, gösterim, sıralama, büyük &#8211; küçük harf dönüşümü gibi kategorilere ayrılabilir. UTF serisi kodlama standartları ile beraber saklama ve gösterim sorunları büyük ölçüde çözülmüştür ve sistemler arası uyumlu hale gelmiştir. UTF standardının yardımı ile eskisi kadar çok Türkçe karakter sorunu ile karşılaşmaz olduk.</p>
<p>Ancak <strong>ı</strong> ve <strong>İ</strong> harflerimiz ile ilgili öyle bir sorunumuz var ki, ne yazık ki çözülmesi ile ilgili umudumu kaybetmiş durumdayım. İngiliz <strong>i</strong> harfinin büyük hali <strong>I</strong> olmaktayken, Türkçe <strong>i</strong> harfi&#8217;nin büyük hali ise <strong>İ</strong> olmaktadır. Ancak her iki <strong>i</strong> harfinin de her kodlama standardındaki sayısal değeri aynıdır. Aslında karakteristik olarak benzer karakterler olsalar da bu özellikleri nedeni ile birbirinden oldukça ayrı karakterlerdir.<span id="more-94"></span></p>
<p>Kullandığımız alfabenin Latin ailesinden geliyor olması nedeni ile ne yazık ki tüm yabancı isimler orijinal hali ile yazılarak kullanılmaktadır. Örneğin <strong>Linux</strong> ismi, <strong>Linüks</strong> değil de <strong>Linux</strong> olarak yazılmaktadır. Bu metni Türkçe olarak büyütürsek <strong>LİNUX</strong>, İngilizce olarak büyütürsek <strong>LINUX</strong> olarak yazılmaktadır. Ancak orijinalini yazma eğilimimiz olduğu için <strong>LINUX</strong> olanını kullanırız. Bu durum tüm kuralları alt üst etmektedir. Bu, bizim dilimizde bir metnin bir bütün olarak Türkçe olması söz konusu olamayacağı anlamına gelmektedir. Örneğin bu cümle Türkçe olarak yazıldı, ama içindeki <strong>Linux</strong> özel ismi Türkçe değildir ve büyük hali de <strong>LINUX</strong>&#8216;tur.</p>
<p>Bu durum nedeni ile özellikle ana dili Türkçe olmayan geliştiriciler tarafından geliştirilmiş olan (tüm yabancı menşeyli yazılımlar bu kategoridedir) yazılımlarda Türkçe karakter sorunu bulunmaktadır.</p>
<p>Örneğin; PostgreSQL&#8217;in Türkçe sıralama ve harf küçültüp büyütme yapabilmesi için dil seçimi ile ilgili tüm çevre değişkenlerinin tr_TR olarak kurulu olması ihtiyacı bulunmakta. Ancak aynı PostgreSQL&#8217;in sunucu süreçleri İngilizce dili olarak kurulmuş olan çevre değişkenli bir ortamdan başlatılmaktadır. SQL cümleciklerinin özel kelimelerinin tamamı standart tanım gereği İngiliz dili ile ifade edilen kelimeler (INSERT, INTO, INDEX, &#8230;) olması ve küçük büyük harf ayrımı yapılmaması gerektiği belirtilmiş durumda. PostgreSQL küçük büyük harf ayrımını yapmamak için hepsini küçük harfe dönüştürerek bir yapıda tutmakta ve kullanıcının girdiği SQL cümleciklerinin SQL özel kelimelerini de küçülterek bunlarla karşılaştırmakta. Ancak kendi içinde tuttuğu yapı insert, into, index iken kullanıcının girdisi ınsert, ınto, ındex&#8217;e dönüştürülmekte. Bu nedenle büyük harflerle yazılmış SQL sorguları işletilememekteydi. Yıllar önce bu sorunu fark edip PostgreSQL geliştiricileri ile paylaştım. Yerel ayarlardan etkilenen bir küçültme işevi olan tolower()&#8217;ı kullanmamalarını, özellikle İngilizce küçültme yapan ayrı bir işlev kullanmalarını <a href="http://archives.postgresql.org/pgsql-bugs/2001-02/msg00135.php">rica ettim</a>. Beni kırmayıp, sorunu güzelce anlayıp 3-4 günde çözüm getirdiler ve bir sonraki sürümde bu yamanın dahil olacağını ilettiler.</p>
<p>Aynı sorun PHP&#8217;de de var. Tamamiyle İngilizce harflerden oluşabilen PHP fonksiyon isimleri ne yazık ki aynı hataya düşülerek yerel dil duyarlı bir işlevle küçültülmeye çalışılmaktadır. Sonuç PostgreSQL ile aynı olmaktadır. PHP geliştiricilerine de <a href="http://bugs.php.net/bug.php?id=35583">hata raporu</a> ilettim. Ancak bu durumu 2003 yılından beri biliyoruz deyip gene çözüm sağlamamayı yeğlediler. Ben her defasında hazırlamış olduğum <a href="http://www.sezaiyilmaz.com/static_content/zend_operators.c.diff">bu yamayı</a> kullanarak yeniden PHP derlemek zorunda kalıyorum.</p>
<p>Aynı sorun ne yazık ki Java&#8217;da da var. Ingilizce olması gereken ifadeler Türkçe yerel dil ayarlı ortamda bambaşka bir hal almakta. Özellikle içinde <strong>i</strong> ya da <strong>I</strong> harfleri bulunuyorsa. Karşılaştırmalar çalışmamakta, Bean&#8217;lerin setter veya getter methodları bulunamamakta.</p>
<p>Önceleri UNIX&#8217;in libc kütüphanesini tasarlayanları suçladım. Yerel duyarlı tolower() / toupper() işlevini geliştiren zihniyet, sadece İngilizce olabilecek olan ifadelerin küçük büyük harf ayrımı yapılmaksızın her yerel dil ayarı altında karşılaştırılabilmeleri için tolower_english() ve toupper_english() sürümlerini hazırlamaz mı hiç? Ancak işin ayrıntılarına inince bu da çözüm sağlamıyor. Lütfen okumaya devam ediniz.</p>
<p>Bu savaşı devam ettirdik ve Türkçe bilmeyen geliştiricileri yola getirdik diyelim. Bu sefer de hem Türkçe hem İngilizce olabilecek olan veri türleri ile ilgili sorunlarımız var. Örneğin bir kullanıcı doğrulama sürecinde ad ve soyad bilgilerini kullandığımızı düşünelim. Küçük ve büyük harf ayrımı da yapmadığımızı düşünelim.</p>
<p>ismail -&gt; İSMAİL (Türkçe bir isim olan İsmail&#8217;in doğal dilinde büyütülmesi)<br />
michael -&gt; MICHAEL (Yabancı bir isim olan Michael&#8217;in doğal dilinde büyütülmesi)</p>
<p>Uygulamanızı kullanan hem Türk hem de yabancı kullanıcılar olduğunu düşünün. Türk olan kullanıcı ismail, İsmail, İSMAİL gibi verileri girecektir. Ancak yabancı olan kullanıcı Michael, MICHAEL olarak girecektir. Buna göre siz hangi dilde küçültme veya büyütme yaparak karşılaştırmaya sokacaksınız? Ülkemizin köklü bankalarından <a href="http://www.isbank.com.tr">İş Bankası</a> bu sorunu i ve ı&#8217;yı aynı harf kategorisine koyarak çözmüş. &#8220;sezai, SEZAİ, sezaı, SEZAI&#8221; bu girdilerin hepsi de Türkçe olan Sezai ismini doğrulamaktadır. Benzer şekilde &#8220;michael, MİCHAEL, MICHAEL, mıchael&#8221; girdilerinin hepsi de yabancı olan Michael ismini doğrulamaktadır. Bu yaklaşım sistemi çalışır duruma getiriyor, günü kurtarıyor olsa da kesinlike doğru çözüm değildir. Yanlış ifadeler doğru gibi kabul edilmektedir.</p>
<p>Ben bu <strong>ı</strong> ve <strong>İ</strong> sorunundan bıkmış durumdayım. Ama ne yazık ki çözüm yolu yok. Türkçe <strong>i</strong> harfini kodlama standardında İngiliz <strong>i</strong> harfinden ayrı tutsak bu sefer şekil olarak aynı oldukları için karışacaklar. Sırf bu sorunu çözmek için alfabemizi de değiştiremeyeceğimize göre bu sorunla yaşamaya devam edeceğiz. Yanlış da olsa İş Bankası&#8217;nın uyguladığı yöntem, sistemi çalışır tutan tek yöntem gibi göründüğü için ben olsam hiç beğenmesem de aynı yöntemi uygulardım.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sezaiyilmaz.com/2008/07/28/turkce-karakter-sorunlarimiz/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

