Lensi ters takma aparatı yapımı(Reverse-ring)

Fotoğraf makinelerinde objektif ters olarak takıldığında büyütme özelliği kazandığı için makro çekimler için kullanılabilir.Açı genişledikçe daha fazla büyütüyor. Lensinizi elle tutup deneyebilirsiniz. Fakat çekim için sabit tutmak zor olduğundan araya reverse ring denilen bir parça takılıyor. Parçanın bir ucu gövdeye diğer ucu lensin ucuna takılıyor.(Filtre takılan yer).
Bu parça internette 20-30 lira civarına bulunabilir. Ben basit bir plastik parçasına bu kadar para vermemek için kendim yapmaya karar verdim. Yapımı kolay fakat biraz uğraştırıcı.

Gerekli malzemeler:
– Body koruma kapağı
– Kullanılmayan bir filtre ya da adapter ring.

Eğer elinizde filtre ya da adapter ring yoksa çin kaynaklı sitelerden 1-2$ gibi küçük rakamlarla temin edebilirsiniz. Eğer bu sitelerden alışveriş yapıyorsanız diğer ürünlere de bakmanızı tavsiye ederim. Ben makro tüpü ve uzaktan kumanda almıştım. Genelde kargo takip kodu vermeleri için siparişinizin belli bir miktarı geçmiş olması gerekiyor.

Ben 50mm lens için mi yoksa 18-55mm lens için mi yapsam diye düşünmüştüm. Makro çekimde ışık az geldiği için 50mm gibi geniş diyaframa sahip bir lens kullanacaktım fakat alan derinliği olayından dolayı diyafram çok açılamadığından 18-55mm’yi kullanmak daha mantıklı geldi.(10f civarı bir diyaframa getiriyorum çekerken)  Ayrıca 18-55mm lens ile daha çok büyütme yapılabiliyor.

Lens seçimi önemli çünkü lenslerin filtre çapları farklı. 18-55mm lensin filtre çapı 58mm iken 50mm lensin filtre çapı 52mm.

 

Ben filtreden yapmaya karar verdim.Filtrenin dışarı bakan kısmının kenarlarında plastik bir halka var. Onu çıkardığınızda camı kolaylıkla sökebilirsiniz.

Daha sonra gövde kapağının ortasını delmeniz gerekiyor. Ben küçük el matkabımla delikler açtım.

Daha sonra ocakta ısıttığın kalın çiviyle delikleri birleştirerek parçayı çıkardım ve delik açılmış oldu. Eğeyle biraz törpüledim az çok şekil verdim.

Daha sonra filtre ile delinmiş body kapağını birbirine japon yapıştırıcısı ile güzelce yapıştırdım. Daha sağlam olsun diye içten sıcak silikon ile destekledim. Pek estetik değil fakat önemli olan iş görmesi. Dikkatli bir şekilde yapmakta fayda var. Daha sonra elinizde iyice kontrol edin oturup oturmadığını. Lensi düşürüp kırmanın manası yok.

Son hali bu şekilde.

Bu da makine üstündeyken görünüm

Oldukça güzel büyütme yapıyor. Çektiğim bir resim

2.5 sn, f11, iso 100
(resimde sıcak silikondan arta kalan ufak iplikler ve body kapağının tozu oldukça hoş gözüküyor.)

 

Önemli not: Diyafram ayarı için lens makineye bağlı iken makinenin ön kısmındaki küçük tuşa basılı tuttuğunuzda vizörden bakış için lens ayarladığınız diyafram değerince açılacaktır. Tam o anda elinizi çekmeden lensi makineden çıkarın. Bu sayede lens en son ayarladığınız diyaframda kalacak lens. Lalumunuz ters bağladığınızda diyafram ayarlayamayacaksınız.

 

Bunu okuyan bunu da okudu.

Canon tetikleyici (trigger shutter) yapımı

Fotoğrafçılıkla uğraşanlar farketmiştir ki tripod ile uzun pozlama yaparken ya da bu tarz durumlarda denklanşöre ne kadar narin dokunursanız dokunun, oluşan o ufak sarsıntı bile sonucu etkiliyor.Bu gibi durumlarda genelde zaman ayarlı çekim yapılır ya da tetikleyici dediğimiz trigger shutter kullanılır.

Canon slr makinam için küçük bir tetikleyici yaptım.Yapımı oldukça basit.

Tetikleyiciyi makineye bağlamak için 2.5mm stereo jack kullandım.Normalde yaygın olarak kullanılan müzik aletleri 3.5mm jack kullanır.Bu yüzden buna dikkat edin.Elektronikçilerde bulamazsanız bin bir çeşit zırzavat satan yerlerde 3.5mm-2.5mm çevirici alıp kesebilirsiniz.Ben öyle yaptım.

Jackı aldıktan sonra kablonun uçlarını soyuyoruz.Eğer kablo bağlı değilse bağlıyoruz.Elimizde 3 tane uç var.Bunlardan bir tanesi toprak oluyor.Diğer iki kablodan birisini bu toprağa değdirdiğinizde çekim yapar diğeri ise odaklama yapar.(AF-auto focus açık ise)

Fazla detay girmiyorum deneyerek bulabilirsiniz.Tabi bu haliyle şık durmayacak.Bu yüzden ben 2 düğme(buton) bağladım.Birini sarı birini siyah seçtim.(kırmızı kalmamış :/ )

Butonların bağlantı noktalarının üzerine makaron geçirip ısıttım.Elinizde makaron yoksa siyah izole bant da fena olmaz.

Benimki resimde gördüğünüz gibi oldu.

Bu haliyle oldukça kullanışlı.Tabi ki geliştirip kablosuz hale getirebilirsiniz.Ya da güzel bir devre kurup timelapse ya da sese duyarlı çekim yapabilirsiniz.Ama time lapse için Canon makinelerde magic lantern firmware daha kullanışlı olabilir.

Java oyun geliştirme-1: Şekil çizme

 

Java ile basit bir oyun programlamayla başlayarak ilerleyeceğim.İlerledikçe değişik efektler yapma, online bir oyun hazırlama, karşılaşılan problemlerin çözümü gibi olaylara değinmeyi planlıyorum.Oyun yazmakla uğraşmasanız bile bazı algoritmalar, başka işlerinizde de işinize yarayabilir.

Uzatmadan bir java projesi oluşturdum.

Hemen Example adında bir class oluşturdum.Bunu ana class olarak kullanıcam.

Öncelikle bize küçük bir pencere lazım.Bu example sınıfını JFrame sınıfından extends ettim.Bir kaç küçük tanımlamayı ve pencereyle ilgili ayarlamalar yaptım.

Son hal aşağıdaki gibi:

import javax.swing.JFrame;

public class Example extends JFrame {
    public static void main(String arg[]) {
        new Example();
    }
    public Example() {
        setTitle("Example");
        setSize(400, 350);

        add(new Surface());

        setResizable(false);
        setVisible(true);    
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
}

En önemli kısımdan başlayalım:

add(new Surface());

Burada Surface isimli kompenenti penceremize ekledik.Nerde bu kompenent diyeceksiniz onu da biz oluşturacağız.

Diğerlerini kısaca açıklamak gerekirse, main metodumuz static olduğu için Example isminde bir metod oluşturup kodlarımızı oraya yazdık.

setTitle ile pencere ismini yazdık.

400,350 boyutlarına ayarladık ve boyutlarının değiştirilmesini engelledik.Daha sonra görünür kıldık.Son olarak pencere kapatıldığında java programımızın da kapatılmasını sağladık.Eğer yazmasaydık görev yöneticisinin işlemler tabında bir çok javaw.exe görücektiniz.

 

Aynı pakete Surface isimli bir sınıf oluşturuyoruz.Daha önce kompenent olduğundan bahsetmiştik.Bu yüzden Surface sınıfımızı JPanel sınıfından extends ettim.JPanel sınıfının soyu da kompenent sınıflarından gelmekte.

Bu haliyle çalıştırdığımızda aşağıdaki gibi bir pencereyle karşılaşmamız gerek.

Şimdi asıl meseleye geliyoruz.

JPanel sınıfıyla gelen paint metodunu override ediyoruz ve gelen Graphics nesnesini Graphics2D tipine casting ediyoruz.Nasıl mı?Son haline bakıyoruz.

import java.awt.Graphics;
import java.awt.Graphics2D;

import javax.swing.JPanel;

public class Surface extends JPanel {
    @Override
    public void paint(Graphics g) {
        Graphics2D gr = (Graphics2D) g;
    }
}

Graphics2D sınıfı daha gelişmiş olduğu için bu sınıfa cast ettik.

Şimdi içi dolu dikdörtgen çizelim.

fillRect metodunu kullandım.

fillRect(x, y, width, height);

Şeklinde bir kullanımı var.

x,y başlangıç kordinatları oluyor.Yani dikdörtgenin sol üst köşesi.

width ve height ise isminden anlaşılacağı üzere genişlik ve yükseklik oluyor.

    public void paint(Graphics g) {
        Graphics2D gr = (Graphics2D) g;
        gr.fillRect(100, 70, 30, 40);
    }

 

Çalıştırıyoruz ve sonuç:

İçi boş bir dikdörtgen çizmek için ise drawRect metodunu kullanabilirsiniz.Kullanımı aynıdır.

Bir sonraki makalede oyun döngüsü(game loop) ve animasyonlardan bahsedeceğim.

 

 

Ainol elf 2 tablet, usb driveri ve otg kablo yapımı

Çinden sipariş vermiş olduğun Ainol Novo 7 Elf II tabletim siparişin üzerinden geçen 20 günlük bir sürenin sonunda nihayet geldi.Tabletin çift çekirdek 1.5 ghz işlemciye sahip olması ve 1 gb ramı olması gerçekten cezbedici.

Tableti uygulama geliştirmek ve denemek için almış olsamda, bu özelliklere sahip olunca oyun denemeden de olmuyor.İlk olarak GTA III denedim.Oldukça performanslı çalıştırdı.Herhangi bir takılmayla karşılaşmadım.Fakat oyunda anti alising yok gibiydi.Sanırım romlarla ya da ek yazılımlarla düzeltilebiliyor.Zaten tablette aldığımda gelen rom duruyor.ICS yüklü olarak geldi bu arada tablet.

Daha sonra NOVA 3 oyununu denedim.Yaklaşık 2 gb kadar oyun dosyaları indirdi.Bu oyunda da kasmayla karşılaşmadan rahat bir şekilde oynayabildim.

Uygulama geliştirme kısmına gelirsek gerçekten şaşırtıcı bir durumla karşı karşıya kaldım.

Galaxy S üzerinde yaklaşık 30-40 saniye içerisinde derlenip çalışan uygulamam, tablet üzerinde yalnızca 5-6 saniyede çalıştı.Bu da hızımı gerçekten arttırdı.

Fakat canvasa çizdirdiğim bitmapların etrafında anlayamadğım siyah, bitmapı kaplayan dikdörtgenler oluştu.Gerçekten ilginç bir durum.

 

Tableti nereden aldığıma gelirsek, daha önce de alışveriş yapmış olduğum buyincoins sitesinden alışveriş yaptım.Tableti 130$’a aldım.Yanında yaklaşık 13$ olan deri klavye aldım.Almanızı tavsiye ederim.

Ayrıca tabletin şarj aleti US tipinde.Bu yüzden sepete bir de US to EU adaptör eklemenizi tavsiye ederim.

Kutusundan otg kablosu çıkacağını söylemiş olsalarda maalesef otg kablosu çıkmadı.

Bu yüzden kendim yapmak zorunda kaldım.Yapımı oldukça kolay.

Bilgisayarcılardan kısa bir usb uzatma kablosu alın.Bir ucu dişi usb diğeri erkek usb olan.Ya da her 2 ucu da dişi olabilir farketmez.

Kabloyu ortadan kesin.Bize gerekli olan dişi kısmı.Bu yüzden dişi kısmının kablosunun ucunu soyun.Daha sonra bir ucu mini usb olan data kablosunu da ortadan kesin.Ucu mini usb olan parçayı kullanıcaz.Bu yüzden kablonun ucunu soyun.Daha önce kestiğimiz dişi usb’li kablonun ucunu, bu kablonun ucuyla, aynı renkler aynı renge gelicek şekilde birbirine bağlayın.Lehimlerseniz daha iyi olur.Daha sonra üzerini bir bantla sarın.Çalışması için çok önemli bir nokta var.(Yapmazsanız çalışmaz.)Mini usb nin dış kaplamasını kesip çıkarmanız gerek.Yanlarındaki birleşim yerlerinden maket bıçağını sokup biraz keserseniz açılır zaten.Açtıktan sonra boşta kalan bir uç görüceksiniz.O ucu siyah kablonun bağlı olduğu yere lehimlemeniz gerek.Daha sonra kapatıp süsleyerek istediğiniz gibi kullanabilirsiniz.

1 ile işaretlediğim yer boş pin oluyor.

2 ile işaretlediğim yer siyah kablonun bağlı olduğu pin.

Lehimlenecek olan 1 ve 2 ile işaretlediğim pinler.

 

Klavye, parmak mouse, kablosuz mouse, flash bellek denemelerimde başarıyla çalıştı.

Hatta usb hub kullanarak hepsini birden takabilirsiniz.Zaten o klavyeli kılıf ve mouseyi hub ile bağlarsanız android netbook elde etmiş oluyorsunuz.

Fakat 2.5″ taşınabilir hdd’yi gücü yetmediğinden usb hub üzerinden harici bir kaynakla besleyerek çalıştırabildim.

Ayrıca bu facebook sayfasından benzer tablet alanların koyduğu resim ve videoları görebilirsiniz.Daha ayrıntılı incelemeler var.Sayfa admini de oldukça ilgili.

 

Diğer bir konuysa usb driver olayı.Beni baya uğraştırmıştı.

Bu linkten usb driverini indirebilirsiniz.

Fakat indirdikten sonra küçük bir ayarlama yapmanız gerekiyor.

Tableti bilgisayara bağladıktan sonra aygıt yöneticisine girip aşağıdaki resimdeki talimatları izleyin.

İndirdiğiniz zip dosyasının içerisindeki

[Google.NTx86]
; Enjoy Ainol
%SingleAdbInterface%        = USB_Install, USB\VID_18D1&PID_0002
%CompositeAdbInterface%     = USB_Install, USB\VID_18D1&PID_0002&MI_01

[Google.NTamd64]
; Enjoy Ainol
%SingleAdbInterface%        = USB_Install, USB\VID_18D1&PID_0002
%CompositeAdbInterface%     = USB_Install, USB\VID_18D1&PID_0002&MI_01

satırlarını resimde size özel gözüken donanım kimliklerine göre düzenleyin.Herkeste aynı olmayabiliyor.
Hem NTamd64 hem de NTx86 kısımlarını düzenleyip kaydedin.
Daha sonra yine aygıt yöneticisinden, tablete sağ tıklatıp, sürücü yazılımını güncelleştire basıp zipten çıkardığınız klasörü gösterdiğinizde yükleme işlemine başlayabilir.

Android, androidde programlanır

Görsel

Android uygulama geliştiripte, android cihaz üzerinde bunu yapamamak saçma olurdu.Geçenlerde android markette gördüğüm uygulama, bilgisayardaki ortamı aratmıyor diyebileceğim kadar kaliteli.

Tabi ki bilgisayardaki pratik ve hızdan bahsetmiyorum.Ama yine de bir tabletiniz varsa, bir klavye ve mause bağlayarak ayaküstü 2-3 satır yazabilirsiniz.

Syntax kontrolü ve diğer hata takiplerini de yapıyor.Hatta logcat’i kullanabiliyorsunuz.Eğer herhangi bir sorun yoksa android cihazınızdan derleyip, aynı cihaz üzerinden çalıştırabiliyorsunuz.

Setting menüsü de oldukça seçeneği barındırıyor.

Hatta ve hatta github’dan projenizi klonlama yetisi bile var.

Örnek olarak aşağıdaki projeyi kullandım.

Dehset-ul-Vahset

Android rpg online oyun meraklılarının projeyi incelemesini tavsiye ederim.

Uygulamadan çektiğim birkaç resim:

 

 

[img[http://nafizb.com/images/derleme.png[/img]

 

 

 

 

 

4″ telefon cinsinden bir cihazım olduğu için pek pratik değil ama tablet almaya değer?

Unutmadan uygulama linki:
https://play.google.com/store/apps/details?id=com.aide.ui

 

 

Android’de poligon kesişmesi(intersection)

Yazmakta olduğum android tabanlı tower defense oyunum için, towerlerin koyulmasını istemediğim yerleri poligon olarak işaretlemek istiyordum.

Bunun için basit bir masaüstü uygulaması yapacaktım.2 poligonun kesişmesini kontrol için ise Area sınıfını kullanacaktım.

2 tane Area nesnesi oluşturdum.Her birinin kurucu metoduna poligonları verdim.

area1.intersect(area2) şeklinde kullandım.void döndüren bir metod bu.Daha sonra area1.isEmtpy metodunu kullanarak kesişip kesişmediklerini tespit edebildim.

Buraya kadar her şey güzel gidiyordu.O heyacanla bunu android uygulamama ekleyim diyordum ki new Polygon dediğim anda, androidde java.awt kütüphanesinin olmadığını farkettim.Biraz araştırmalarım sonucunda gerçekten de olmadığını anladım.

Mecburen bir polygon sınıfı yazdım.Kesişmeleri kontrol ederken, tüm çizgileri tek tek diğer poligonun çizgileriyle karşılaştırdım.Eğer bir tane çizgi kesişmişse, poligonlar kesişiyodur.

Polygon class:

class Polygon {
	int x[] = new int[10],y[]=new int[10];
	int n = 0; // point count
	Polygon()
	{
	}
	Polygon(int x[], int y[])
	{
		this.x=x;
		this.y=y;
		this.n = x.length;
	}
	void addPoint(int xx, int yy) {
		x[n] = xx;
		y[n] = yy;
		n++;
	}

	public boolean intersect(Polygon poly)
	{
		for(int i = 0; i<n;i++) {
			for(int j = 0; j < poly.n; j++) {
				int k = i+1 == n ? 0 : i+1;
				int m = j+1 == poly.n ? 0 : j+1;
				if(new Line(x[i], y[i], x[k], y[k]).intersect(new Line(poly.x[j], poly.y[j], poly.x[m], poly.y[m])))
					return true;
			}
		}
		return false;
	}
	public void move(int mouseX, int mouseY) {
		int oldX = x[0];
		int oldY = y[0];
		x[0] = mouseX;
		y[0] = mouseY;
		for(int i = 1; i<n;i++) {
			x[i] += x[0]-oldX;
			y[i] += y[0]-oldY;
		}
	}
	public void draw (Graphics g) {
		for(int i = 0; i<n;i++) {
			int k = i+1 == n ? 0 : i+1;
			g.drawLine(x[i], y[i], x[k], y[k]);
		}
	}
}

Masaüstünde denemek için yaptığımdan basit bi draw metodu oluşturmuştum.Bunu androide uyarlıyabilirsiniz.

 

 

Birde her kenarın kesişimini kontrol için Line diye bir class oluşturdum.

Basit bir determinant hesabıyla saptıyor.

Algoritma:

Line class:

class Line {
	int x1, x2, y1, y2;
	int[][] matrix = new int[2][2];

	int intersectX = 0;
	int intersectY = 0;
	Line(int x1, int y1, int x2, int y2) {
		this.x1 = x1;
		this.y1 = y1;
		this.x2 = x2;
		this.y2 = y2;
	}
	boolean intersect(Line lin) {
		//Algorithm : http://en.wikipedia.org/wiki/Line-line_intersection
		intersectX = pX(lin);
		intersectY = pY(lin);
		return pointInLine(intersectX, intersectY) && lin.pointInLine(intersectX, intersectY);
	}
	boolean pointInLine(int x, int y) {
		if(Math.max(x1, x2) >= x && Math.min(x1,x2) <= x) {
			if(Math.max(y1, y2) >= y && Math.min(y1,y2) <= y) {
				return true;
			}
		}
		return false;
	}
	int pX(Line lin) {
		int[][] matx = new int[2][2];

		matx[0][0] = getDet();
		matx[0][1] = getXDist();

		matx[1][0] = lin.getDet();
		matx[1][1] = lin.getXDist();

		int matRes1 = determinant(matx);

		int[][] matx2 = new int[2][2];

		matx2[0][0] = getXDist();
		matx2[0][1] = getYDist();

		matx2[1][0] = lin.getXDist();
		matx2[1][1] = lin.getYDist();

		int matRes2 = determinant(matx2);

		return matRes1/matRes2;
	}
	int pY(Line lin) {
		int[][] matx = new int[2][2];

		matx[0][0] = getDet();
		matx[0][1] = getYDist();

		matx[1][0] = lin.getDet();
		matx[1][1] = lin.getYDist();

		int matRes1 = determinant(matx);

		int[][] matx2 = new int[2][2];

		matx2[0][0] = getXDist();
		matx2[0][1] = getYDist();

		matx2[1][0] = lin.getXDist();
		matx2[1][1] = lin.getYDist();

		int matRes2 = determinant(matx2);

		return matRes1/matRes2;
	}
	int getDet() {
		matrix[0][0] = x1;
		matrix[0][1] = y1;
		matrix[1][0] = x2;
		matrix[1][1] = y2;

		return determinant(matrix);
	}
	int getXDist() {
		return x1 - x2;
	}
	int getYDist() {
		return y1 - y2;
	}
	int determinant(int[][] values) {
		int det = values[0][0] * values[1][1] - values[0][1] * values[1][0];
		return det;
	}
}

2 çizginin kesişip kesişmediğini saptamak için bu linkteki Line line intersection algoritmayı kullandım.

Birkaç 2×2 lik determinant hesabıyla kesişim noktalarını buldum.Fakat bu algoritma doğrular içindi.Bizim poligonların kenarları doğru parçası.

Bu yüzden pointInLine metodunu yazarak, kesişme noktasının 2 kenar içinde sağlandığını kontrol ettim.Eğer sağlanıyorsa, çizgiler yani poligonlar kesişiyor.Sağlamıyorsa, çizgiler kesişmiyor fakat döngü devam ediyor çünkü diğer kenarların kesişme ihtimali var.

 

Kullanım çok basit.2 tane poligon nesnesi oluşturup noktalarınızı ekleyin.Daha sonra poligon1.intersect(poligon2) yazarak boolean olarak sonucu alabilirsiniz.

Hatta denemek için basit bir uygulama yazdım.

Jar dosyasını indirmek için tıklayın.

Denemek için aynı dizine içinde

java -jar intersecting.jar

yazan bir bat dosyası oluşturun ya da komut satırından çalıştırın.

Mouse ile tıkladıktan sonra polygonlardan biri elinize yapışacak zaten.Ekranda gezdirerek intersection olup olmadığına bakabilirsiniz.

Ağ programlama-1: Soketler

Merhaba arkadaşlar

İlk yazımda soketlerden bahsetmek istiyorum.

Bilindiği üzere internet üzerinden süren iletişim soketler aracılığı ile sağlanmaktadır.Herhangi bir web sitesine bağlanırken ya da bir hizmete bağlanırken, biz farketmesekte işlemler soketler üzerinden yürümektedir.Ağın temelini oluştururlar.

Bir soketin 2 temel bileşeni vardır.IP ve port.

IP, ağdaki hangi bilgisayarın olduğunu belirtirken, port ise bilgisayarın içerisindeki bölümlenmiş numaralardır.Örnek vermek gerekirse, IP‘yi otel adresine, portu ise otel odalarına benzetebiliriz.Bir kargo geldiğinde önce adrese daha sonra gerekli otel odasına gider.

Port numaraları 1-65535 arasında olur.1-1023 arasındakiler genelde sistem tarafından kullanılmaktadır.1023 ten sonrasını seçerseniz, sorun yaşama riskiniz azalır.

Portlar hakkında detaylı bilgiye aşağıdaki linkten ulaşabilirsiniz.

TCP ve UDP port numaraları listesi

 

Temel olarak 2 soket tipi vardır.

TCP ve UDP

1)TCP: Açılımı Transmission Control Protocol‘dür.Bu protokolde, istemciler birbirleri arasında bir bağlantı kurarlar ve bu bağlantı ile stream üzerinden veri akışını sağlarlar.Verileri doğru bir sıralamada iletirler.Kayıplara karşı veriler tekrar yollanır ve kontrol edilir.Bu yüzden verilerin akıbeti hakkında endişelenmenize gerek kalmaz.Fakat bu sebeplerden dolayı UDP‘ye göre daha yavaştırlar.

HTTP protokolü, 80 portundan TCP üzerinden çalışmaktadır.

 

2)UDP: Açılımı User Datagram Protocol‘dür.Bu protokolde ise istemciler arasında bağlantı kurulmaz.Yollanacak veri paketlenir, adres bilgisi ve port bilgisi eklenip yollanır.Aynı mektuplar gibi.Fakat paketler internet üzerinde kaybolabilmekte ya da gecikebilmektedir.Paketler birbirinden bağımsız gittiği için hedefe ulaşan paketlerin sayısı azalabilir ya da doğru sıra ile ulaşmayabilir.Bunu kontrol etmek ve düzeltmek yazılımcıya kalır.Fakat bu dezavantajlarının yanı sıra, TCP‘ye göre daha hızlıdır.

Eğer dinamik olarak bir veri aktarımı oluyorsa ve hız önemliyse UDP kullanmak daha mantıklı olacaktır.Örneğin video aktarımı sırasında kayıplar çok önemli olmayabilir ama hızlı ve akıcı olması gerekir.

Ama bir rar dosyası aktarılırken eksiksiz olarak hedefe ulaşması için TCP kullanmak gerekebilir.

 

Daha sonraki yazılarımda TCP ve UDP‘yi ayrıntılı olarak işleyeceğim.