30 Eylül 2014 Salı

Ubuntu 14.04 MySQL utf8 Yapma



Ubuntu'da MySQL ile uğraşanlar büyük ihtimalle benim gibi Türkçe karakter sorunu ile karşılaşmışlardır. Bu sorunun çözümü elbetteki MySQL dosyalarına erişip oradaki gerekli ayarlamaları yapmaktır. Ben de bu sorunu aşmak için kısa bir araştırma yaptım ve sonuçta MySQL'i Türkçe karakter olarak ayarlayabildim. En altta benim bu ayarlamayı yapmamı sağlayan kaynak site mevcut direk oradan da işleminizi gerçekleştirebilirsiniz.

Öncelikle terminali açıp(Ctrl+Alt+T)    mysql -u root -p komutunu verip şifrenizi girerek MySQL terminaline geçiş yapın. Sonrasında ise  show variables like"%character%"; komutunu yazın. Sonuçta character_set_database ve character_set_server ifadelerinin karşısında latin1 yazdığını göreceksiniz. İşlemimiz sonucunda bu değerlerin karşılığında diğerlerinde olduğu gibi utf8 yazmasını sağlayacağız.

Buraya kadar sorun yoksa exit komutu ile normal terminalimize dönüş yapalım ve aşağıdaki komutu verelim;

sudo nautilus

        Bu komut ile root olarak bütün klasör ve dosyalara erişiyoruz. Buradan /etc/mysql klasörünün içerisindeki my.cnf dosyasını gedit ile açıp aşağıdaki satırları bu dosya içerisine ekleyip kaydediyoruz.

[mysqld]  
init_connect='SET collation_connection = utf8_unicode_ci'  
init_connect='SET NAMES utf8'  
character-set-server=utf8  
collation-server=utf8_unicode_ci  
skip-character-set-client-handshake 





Yukarıdaki resimde olduğu gibi ekleyip kayıt ettikten sonra terminalde Ctrl+C ile işlemi sonlandıralım ve  çalışmakta olan MySQL'i de aşağıdaki komutları verip yeniden başlatalım.

sudo /etc/init.d/mysql stop
sudo /etc/init.d/mysql start

İşlemimiz tamam , şimdi de kontrol amaçlı yeniden MySQL terminaline geçip show variables like"%character%"; komutunu verelim eğer aşağıdaki gibi olduysa sorun yok demektir.



KAYNAK :http://kosalads.blogspot.com.tr/2013/03/mysql-55-how-to-change-mysql-default.html

27 Eylül 2014 Cumartesi

JSF Primefaces MangedBeanler




        Bir önceki JSF yazımda JSF'den ve Primefaces'ten kısaca bahsetmiştim. Bu yazım konusu başlıktan da anlaşılabileceği gibi ManagedBeanler'dir.

        JSF ile oluşturacağımız web sitelerini iki kısma ayırabiliriz. Bunlardan ilki görsel kısmı , ikincisi ise dinamikliği sağlayan kod kısmıdır. Tüm web sitelerinde olduğu gibi burada da görsel kısmı CSS , Javascript ve HTML kodları ile oluşturuyoruz. Kod kısmında ise JSF framework ve bu framework içerisinde Primefaces kütüphanesini kullanıyoruz. Burada xhtml ile Java arasındaki ilişki nasıl kuruluyor veya oluşturduğumuz bir formdaki verileri nasıl kod kısmına aktarabiliyoruz sorusu doğal olarak aklımıza gelmiştir. İşte ManagedBean lerde tam olarak bu işe yarıyor.

        Öncelikle ManagedBean ler bildiğimiz Java class larıdır. Kendine has annotation ları mevcut. Aşağıda bu yazı için yaptığım uygulamada kullandığım ManagedBean bulunmaktadır. Buradan inceleyebilirsiniz. 

package com.beans;


import javax.inject.Named;

import javax.enterprise.context.SessionScoped;                                                                  

import java.io.Serializable;


@Named(value = "ilkBean")

@SessionScoped


public class ilkBean implements Serializable {


     private String ad;

     private String soyad;


public String getAd() {

     return ad;

}

public void setAd(String ad) {

     this.ad = ad;

}

public String getSoyad() {

     return soyad;

}

public void setSoyad(String soyad) {

     this.soyad = soyad;

}

public ilkBean() {

}


}


        Bu ManagedBean içerisindeki “private String ad; private String soyad;” satırlarını ben yazdım gerisini NetBeans. ManagedBean hem NetBeans hem de Eclipse ile otomatik olarak oluşturabiliyoruz. Bu yüzden yazılı olanları ezbere bilmemize gerek yok. Bu iki satırlı kodu yazdıktan sonra getter ve setter larıda sağtık ile kolayca ekleyebiliyoruz. Getter ve Setter lar sayesinde Bean içerisinde veriler yazılıp saklanabiliyor. Eğer bir değişkeni veri tutması için tanımlamışsak getter ve setter larını kesinlikle eklemeliyiz.

        Ancak burada önemli olan kısım @Named(value = "ilkBean") @SessionScoped yazan kısımdır. Name ManagedBean'nin ismini belirtiyor , buradan istediğimiz şekilde ismini değiştirerek xhtml kısmından o isimle çağırabiliyoruz. Session ise ManagedBean türünü belirtiyor. Bildiğim kadarıyla 4-5 çeşit türü mevcut. Bunlardan en çok kullanılanları View ve Session olanlarıdır. Bunların farklılıklarını bir örnekle açıklamaya çalışayım. Örneğin ManagedBean içerisine ad soyad şeklinde String ifadeler tanımladık. ManagedBean türü olarak View'i seçtik. Sayfamızda ad ve soyad için inputText ler mevcut ve buradan verileri aldığımızda ManagedBean içeirisinde tutuluyor. Ama başka bir sayfaya geçtiğimizde bu tutulan veriler sıfırlanıyor ve başlangıç durumuna geliyor. Kısacası Bean içerisine yazılan veriler diğer sayfaya geçtiğimizde uçuyor. Session içinde aynı durumu varsayarsak Bean içerisine kaydedilen veriler sayfa değişse bile korunuyor. Temel farkları bu. Başka ManagedBean türleri de mevcut. Örneğin ApplicaitonScoped , bunu kullanırsanız birey sisteme giriş yaptığında oluşturulan Session uygulamamız kapanana kadar yaşamaya devam eder. Uygulamanın kapanması derken bireyin tarayıcısı değil server üzerinde çalışan web sitemizden bahsediyorum. Bu örnek uygun olur mu tam emin değilim ancak yine de yazayım ; Twitter gibi , siteye giriş yapıyoruz , sonrasında habire giriş yapmıyoruz. Kaldığımız yerden sürekli devam ediyoruz. Umarım yanlış bir örnek vermemişimdir.

        Genel tanım böyleydi. Xhtml kısmından da ManagedBean içerisine #{ilkBean.ad} veya #{ilkBean.soyad} şeklinde tanımladığımız değişkenlere veri yazabiliyor ve aynı şekilde okuyabiliyoruz.



         Aşağıda daha anlaşılır olması için sadece JSF componentlerini içeren yaptığım basit bir uygulama videosunu paylaşıyorum. Eğer izlerseniz yukarıda bahsedilenleri daha iyi anlayacağınızı düşünüyorum.   



17 Eylül 2014 Çarşamba

ER Diyagram Örneği


        Aşağıda önceden tasarladığımız online kitap satış sitesi için sağlanması gereken durumlar , bunlara göre hazırlanmış ER diyagramı ve sql komutları bulunmaktadır. Bunu paylaşmamın sebebi yeni öğrenen arkadaşlara basit bir örnek olmasıdır.

Sitede Sağlanması Gereken Durumlar

1.Sitedeki her kitabın bir ISBN , adı , yazarı , yayınevi , yayın tarihi , fiyatı , stok miktarı , tür , açıklama ve  satış adeti vardır. Her kitap bir yazar tarafından yazılır ve bir yayınevi tarafından yayınlanır. Ayrıca bir kitap birden fazla kategoriye dahil olabilir.(Bir kitabın yazılmasında birden fazla yazar yer alabilir , bu yazar bilgileri tek bir sütunda saklanacaktır.)

2.Sitede birden çok kategori mevcuttur. Her bir kategorinin kategori no , tür , açıklama gibi bilgileri olmalıdır.

3.Sitedeki her bir yazarın yazar no , Adı , Soyadı  ve varsa web adresi bulunmalıdır.

4.Sitedeki her bir yayınevinin no , adı , tel , e-posta , adres ve varsa web adresi bulunmalıdır.

5.Sitenin üyelerinin adı , soyadı , adresi , tel  ve e-posta bilgileri bulunmalıdır.

6.Sitede üyelere özel kampanyalar mevcuttur ve her kampanyanın no , ad , bilgi , başlangıç ve bitiş süreleri mevcuttur. Bir üye birden fazla kampanyadan yararlanabilir.

7.Sitede mevcut olan kitapların stok durumları belirlenmelidir. Stoktaki kitap  ve stok adeti bulunmalıdır.

8.Sitede her müşteriye ve üye ait sipariş sepeti vardır. Sipariş sepetine müşteri veya üye kitap ekleyebilir. Bu bilgilerinde saklanması gereklidir.

9.Siteye üye olmadan alışveriş yapan müşterilerin de ad, soyad , adres , tel , e-posta bilgileri saklanmalıdır.

10.Müşteri veya üye kitap satın aldığında fatura kesilir ve kargo takip fişi(kodu) verilir. Sitede yapılan sipariş bilgileri de saklanmalıdır.



Create Cümleleri


Yazarlar

CREATE TABLE Yazarlar (
yid int,
ad varchar(100) NOT NULL,
soyad varchar(100),
website varchar(30),
CONSTRAINT Pk_Yazarlar PRIMARY KEY(yid));

Yayınevleri

CREATE TABLE Yayinevleri(
yno int ,
ad varchar(30) NOT NULL,
adres varchar(100),
website varchar(30),
tel varchar(30),
CONSTRAINT Pk_Yayinevleri PRIMARY KEY(yno));

Kategoriler

CREATE TABLE Kategoriler(
kid int,
ad varchar(30) NOT NULL,
bilgi varchar(100),
CONSTRAINT PK_Kategoriler PRIMARY KEY(kid));

Stok

CREATE TABLE Stok(
sid int,
adet int,
CONSTRAINT Pk_Stok PRIMARY KEY(sid));

Üyeler

CREATE TABLE Uyeler(
uid int,
ad varchar(30) NOT NULL,
soyad varchar(30) NOT NULL,
sehir varchar(30),
ilce varchar(30),
mahalle varchar(30),
pkodu int,
CONSTRAINT PK_Uyeler PRIMARY KEY(uid));

Müşteriler

CREATE TABLE Musteriler(
mid int,
ad varchar(30) NOT NULL,
soyad varchar(30) NOT NULL,
sehir varchar(30),
ilce varchar(30),
mahalle varchar(30),
pkodu int,
CONSTRAINT PK_Musteriler PRIMARY KEY(mid));

Kampanyalar

CREATE TABLE Kampanyalar(
kno int,
ad varchar(30) NOT NULL,
bilgi varchar(100) NOT NULL,
bastarih date,
bittarih date,
CONSTRAINT PK_Kampanyalar PRIMARY KEY(kno));

Kitaplar

CREATE TABLE Kitaplar(
ISBN varchar(17),
ad varchar(30) NOT NULL,
yazar varchar(30),
yayınevi varchar(30),
ytarihi date,
aciklama varchar(200),
fiyat int,
sid int,
yid int,
yno int,
CONSTRAINT PK_Kitaplar PRIMARY KEY(ISBN),
CONSTRAINT FK_Stok FOREIGN KEY(sid) REFERENCES Stok(sid),
CONSTRAINT FK_Yayinevleri FOREIGN KEY(yno) REFERENCES Yayinevleri(yno),
CONSTRAINT FK_Yazarlar FOREIGN KEY(yid) REFERENCES Yazarlar(yid));

Kampanya Bilgileri

CREATE TABLE Kampanya_bilgi(
uid int,
kno int,
CONSTRAINT FK_Uyeler FOREIGN KEY(uid) REFERENCES Uyeler(uid),
CONSTRAINT FK_Kampanyalar FOREIGN KEY(kno) REFERENCES Kampanyalar(kno));

Kategori Bilgi

CREATE TABLE Kategori_bilgi(
ISBN varchar(17),
kid int,
CONSTRAINT Fk_Kitaplar FOREIGN KEY(ISBN) REFERENCES Kitaplar(ISBN),
CONSTRAINT Fk_Kategoriler FOREIGN KEY(kid) REFERENCES Kategoriler(kid));

Sipariş Bilgi

CREATE TABLE Siparis_bilgi(
spid int,
tarih date,
iletimtarih date,
id int,
tutar int,
takipno int,
ISBN varchar(17),
CONSTRAINT Pk_Siparis_bilgi PRIMARY KEY(spid),
CONSTRAINT Fk_Musteriler FOREIGN KEY(id) REFERENCES Musteriler(mid),
CONSTRAINT Fk_Uye FOREIGN KEY(id) REFERENCES Uyeler(uid),
CONSTRAINT Fk_Kitap FOREIGN KEY(ISBN) REFERENCES Kitaplar(ISBN));

Sepet Bilgi

CREATE TABLE Sepet_bilgi(
sepetid int,
id int,
ISBN varchar(17),
CONSTRAINT Pk_Sepet_bilgi PRIMARY KEY(sepetid),
CONSTRAINT Fk_kitaplarr FOREIGN KEY(ISBN) REFERENCES Kitaplar(ISBN),
CONSTRAINT Fk_Müsterilerr FOREIGN KEY(id) REFERENCES Musteriler(mid),

CONSTRAINT Fk_Uyelerr FOREIGN KEY(id) REFERENCES Uyeler(uid));

13 Eylül 2014 Cumartesi

C# ile Arduino Seri Haberleşme



Geride bıraktığımız bir ay içerisinde elime Arduino Uno geçti ve en baştan başlayarak Arduino’yu uygulamalı olarak öğrenmeye başladım.  Arduino ile birşeyler üretmek son derece basit ve eğlenceli. En önemli özelliği ise açık kaynak elektronik kart olması , dolayısıyla derleyicisi de açık kaynak. Açık kaynak olduğundan dolayı Arduino uyumlu birçok elektronik kart(Shield) mevcut. Ethernet Shield , Bluetooth Shield , LCD Shield , GPS Shield , SD Card Shield , Wifi Shield , GPS Shield …. Şeklinde çoğaltabiliriz. Bunları Arduino ’ ya takarak basit ama etkili birçok proje gerçekleştirilebilir.  

Ben de Arduino ile uğraşırken bilgisayar ile Arduino ’ yu nasıl kontrol edebiliriz bunu araştırdım ve öğrendim. Burada eldeki imkanlar dahilinde basit bir led örneği yaptım ancak sizde mantığını anladığınızda bu işin çok basit olduğunu göreceksiniz ve aynı mantıkla üst düzey işlerinde yapılabilceğini anlayacaksınız.

İşin mantığı şu şekilde C# veya herhangi bir dilde Arduino ’ nun bağlı olduğu portu tanıtıyoruz.(COM1 , COM2 , COM8 vs.) Portu tanıttıktan sonra Arduino’ da bulunan Serial Monitor Baud değerini yazıyoruz. Genelde bu değer 9600 olur. Daha sonrasında ise bu bağlantısını kurduğumuz Serial Monitore değerler yazıyoruz. Bu değerleri Arduino ‘ nun yorumlayabilmesi içinde Arduino IDE ye Serial Monitordeki değeri okutuyoruz ve gerekli işlemleri yapmasını sağlıyoruz. Örneğin bu yaptığım uygulamada C# kısmından Serial Monitore “1” değerini yazıyorum .Arduino kısmında bu “1” değerini okuyorum ve bu değeri okuduğunda ne yapmasını istiyorsam if blokları ile bunları belirliyorum. Hepsi bu kadar. Temel mantık Serial Monitor’e değer yazma ve bu yazılan değeri okuyup gerekli işlemleri yapmak. Bu yaptığım led uygulamasının hem kod kısmı hem de uygulamasını aşağıdaki videolardan görebilirsiniz.

Bu yöntem ile bilgisayar kontrollü Akıllı Ev uygulamaları yapmak son derece kolay olacaktır. Ama bunu masaüstü uygulaması ile değil de web üzerinden yapmak daha işlevsel ve güzel olur. Böylece adam telefondan veya bilgisayardan ev durumunu kontrol edebilir , ışıkları , sıcaklığı , gaz kaçağı olup olmadığı gibi durumları (sensörlerle yapılabilecek bir çok işi) kontrol edebilir. Elimde Wifi Shield veya Ethernet Shield olmadığı için sadece masaüstü uygulaması yapabildim ama elime bunlardan birisi geçerse web uygulaması da yapıp buraya koyarım.



7 Eylül 2014 Pazar

JSF ve PrimeFaces 1 - Giriş


Java Server Faces(JSF) java ile web uygulamaları geliştirmek üzere hazırlanmış bir framework tür.  JSF ile kolay bir şekilde dinamik web sayfaları oluşturabiliriz. Aşağıda ise internetten derlediğim JSF bilgileri yer almaktadır;

  •        Model-View-Controller(MVC) yapısına uygundur
  •       Java ile geliştirildiği için nesne tabanlı uygulamadır
  •       Hibernate , Spring gibi teknolojilerle çalışabilmektedir
  •       Açık kaynak olduğu için lisans maliyeti gerektirmez
  •       Componentler sayesinde kolay bir şekilde kullanıcı ara yüzleri oluşturabiliyoruz
  •       Servlet ve JSP mimarileri üzerine inşa edilmiştir


JSF  ile web projeleri oluşturmak için benim kullandığım IDE NetBeans’tir. Sebebi ise JSF için gerekli kütüphane ve ayarların hazır halde gelmesi ve Glasfish server’ın NetBeans ile otomatik bilgisayarımıza yüklenmesidir. Sizlere de tavsiyem NetBeans kullanmanızdır. NetBeans ’i resmi sitesinden Java EE veya All seçeneklerinden birisini indirip kurabilirsiniz. Eclipse ile de aynı iş yapılabilir ama ayarlar  , eklentiler , kütüphaneler derken sizi fazla yoracağını söyleyebilirim.

JSF ile web sayfaları oluşturacağımız için doğal olarak bilgisayarımızda bir yerel Server kurulu olması gerekiyor. JSF ile çalışırken Tomcat , Glassfish , JBoss gibi birçok server seçeneği mevcut.  Ben bunlardan Glassfish Server ile öğrenmeye başladım. Kodlar düzgün yazıldığı zaman sorunsuz çalışıyor. Glassfish'in admin paneli de Tomcat'e göre oldukça kapsamlı(benim kanaatim , yanlışta olabilir!) 

JSF etiketleri HTML e çok benzemektedir. Bunun yanı sıra JSF’nin güzel bir özelliği de HTML kodlarını direk JSF içerisine eklediğimizde sorunsuz çalışmasıdır. 

JSF öğrenmeye başlamayı düşünüyorsanız size tavsiyem öncelikli olarak HTML ve CSS’e hakim olmanızdır. Bu ikisi zatan web için olmazsa olmazlardır.

JSF içerisinde çeşitli hazır komponentler mevcut. Bunlar kendi içlerinde ayrılıyor ve her birinin kendine has kütüphaneleri var. Bunlar PrimeFaces , ICEFaces ve RichFaces gibi liste uzayıp gidiyor. Bunlar birbirinden farklı sayıda hazır komponentler içerir.  En yaygın olarak kullanılanı PrimeFaces  ‘ tir. Özelliği 120 ye yakın(ileride kesin sayı artacaktır) hazır komponentin mevcut olması ve kolay kullanılabilmesidir. Resmi sitesini incelerseniz Dünya genelinde bir çok ünlü firmanın PrimeFaces’i tercih ettiğini görebilirsiniz.

PrimeFaces ’in Türkler tarafından geliştiriliyor olması da ayrı bir gurur kaynağıdır. PrimeFaces temel çıkış noktası  web projelerinde CSS ve Javascript için ayrılan zamanın kısaltılabilmesi için hazır css/javascript li komponentler hazırlanmasıdır. Yani normal bir web sitesi için bir buton ekleyip birde ona has CSS/Javascript kodu yazmamız gerekiyor ama PrimeFaces sayesinde sadece butonu JSF içerisine eklememiz yeterli oluyor. Ayrıca PrimeFaces sayesinde JSF projemize tema da ekleyebiliyoruz. Bunu daha sonraki yazılarımızda anlatırız.  Peki PrimeFaces CSS/Javascript ile işimizi kolaylaştırıyor o zaman CSS bilmeye ne gerek var diyebilirsiniz. Burada sayfalarımıza ekleyeceğimiz komponentlerin yerini  “div” ile sayfa iskeleti oluşturup CSS kodları ile de ekrandaki yerleşimlerini düzenliyoruz. PrimeFaces’te bunun içinde çözüm mevcut ama CSS kullanmanın  sayfa yerleşimini ayarlamada daha isabetli olcağını düşünüyorum.

JSF ile proje geliştirebilmek için aynı anda NetBeans , Glassfish Server , Web Tarayıcı(Chrome , Mozilla, …) ve SQL Server kullanacağımız için RAM miktarımızın en az 2 GB olması rahat çalışabilmemiz için gereklidir. Bunu kendi tecrübe ve gözlemlerime dayanarak söylüyorum yine de aklınızda olsun. Windows işletim sistemleri hiçbir iş yapmadığı halde 500 MB ile 1 GB arası RAM tüketiyor. Linux ise çoğu zaman 250 MB ile 500 MB RAM tüketiyor. Bu yüzden Linux ortamında daha verimli çalışılabilir.(Mac bizi aşar :) )


Şimdilik bu kadar. Aşağıda Netbeans ile nasıl JSF projesi oluşturulduğunu Windows üzerinde gösterdiğim bir video ekledim. Video kayıt yaparken biraz bilgisayar yavaşlıyor idare edin artık. Linux için Glassfish Server çalıştırmanıza gerek yok direk proje oluşturup başlayabilirsiniz.