VPN Nedir? Dünyada Network Filtrelemesi 101

Bu yazımda VPN konusuna teknik anlamda çok detaylı şekilde girmeyeceğim (o yüzden her teknik detayı ideal doğru haliyle anlatmayacağım), ama umarım teknik olmayan kullanıcıların VPN‘in ne olduğu ve dünyada ne şekilde kullanıldığı hakkında fikir oluşmasına yardımcı olur.

Öncelikle VPN ne değildir?

VPN aslında sadece Twitter, Facebook vs. bloklamasını geçmek için geliştirilmiş bir sistem değildir.

Peki ne amaçla tasarlanmıştır?

Bu sistemin temel amacı güvenli olması gereken bir ağa giren kullanıcıların, herhangi güvensiz bir internet bağlantısı (mesela otel odası) üzerinden güvenli bir şekilde ulaşmalarını sağlamaktır. Yani diyelim ki iş yeriniz İstanbul’da, şirketinizdeki tüm sunuculara ofisinizden fiziksel kablolama ile erişiyorsunuz. Peki yurtdışına çıkarsanız, laptopunuz ile tıpkı ofisinizdeki gibi, şirketinizin yerel ağında (tabii internet bağlantı hızları limitiyle) olmak istemez misiniz? Böyle bir teknoloji var, ve adı da VPN!

VPN neden esas amacı dışında da kullanılmaya başlandı?

En başta bazı servislerin: sadece Amerikan Kredi kartı olacak, Amerika IP bloğu dışında bağlantı olmayacak diyenlerin (eskiden Netflix) gönlünü hoş etmek için kullananlar olsa da, dünyada (internet bağlantılarının filtrelendiği bazı ülkelerde) esas popülerliğini Facebook, Twitter vs. bloklanmasını geçmek için kazanmıştır.

VPN Nasıl çalışır?

Kullandığınız bilgisayara, kullanacağınız VPN servisine özel bir yazılım yüklersiniz. Bu yazılım bilgisayarınızdaki tüm network bağlantılarının arasına girer, ve mesajları bilgisayarınızda çalışan VPN yazılımının standartları ile şifreleyerek, bağlı olduğu sunucuya internet üzerinden aktarır. Yani aradaki mesajlar bu şifreleme sistemi kırılmadan dinlenemez, çözülemez, değiştirilemez. Böylece VPN’iniz üzerinden nereye ne bağlantısı yaptığınız, ne veri gönderip aldığınız aradaki internet servis sağlayıcıları tarafından bilinemez. Zaten VPN’in esas amacı da budur. Dünyanın herhangi bir yerindeki otel odasından, şirketinizin özel sunucularına, aradaki verilerin dinlenmesine imkan vermeden bağlanmak.

VPN Üzerinden Internet’e Nasıl Bağlanıyorum?

Diyelim ki şirketiniz Amerika’da. VPN yazılımınızı kurarak şirketinizdeki bilgisayarların bulunduğu ağa bağlandınız. Artık tüm internet bağlantınızı da aslında Amerika’daki ofisinizdeymiş gibi yapabilirsiniz. Yani aslında masanızda oturuyor olmanızla uzaktan VPN’le girmeniz arasındaki tek fark (neredeyse) network hızıdır. Yani bulunduğunuz ülkeye servis vermeyen, ya da bulunduğunuz ülkeden bağlantı yasağı olan bir servise, Amerika’daki ofisinizin erişim kuralları ile erişebilirsiniz. Örneğin Amerika’daki şirketiniz ofisinizden Facebook erişimini engellerse, Facebook’a yine erişemezsiniz.

VPN Servisi Veren Şirketler Kimdir?

Normalde böyle bir 3. parti bir servise ihtiyaç duyulmaması gerekir. Bu tür servisleri kullananlar çoğunlukla yasal bazı engelleri aşmak için bu yola başvuruyorlar. Ya Netflix ülkelerine servis vermiyordur, ya ülkelerinden Twitter bağlantısı engellenmiştir ya da yasal olmayan şekilde kopyalanmış film, yazılım vs. indiriyorlardır. VPN servisleri tüm bunlara araya girerek kılıf (bazen maşa) olabilirler. Diyelim ki bir VPN servisi bir çok uluslararası yasanın tanınmadığı bir ülkede olsun, bu durumda kendi servisi üzerinden yapılan yasadışı indirmeler ya da internet dolandırıcılıklarında, kullanıcılarına bir kimlik görünmezliği sağlayabilirler. (Bunun için görevlilerin VPN servisi kayıtlarına erişim izni vermemeleri ya da bu kayıtları yanlışlıkla(!) kaybetmeleri yeterli olur.)

Kendi VPN Servisinizi kurmak zor mudur?

Kolay değildir ama, tabii ki mümkündür. Bir çok açık kaynak kodlu VPN yazılımı bulmak mümkündür. Örneğin: Amerika’daki bir arkadaşınız bu tür bir yazılımı kendi evindeki bilgisayarına kurarsa, siz onun evinden bağlanıyormuş gibi internete bağlanabilirsiniz. Ancak bu servisi kendi ülkenizdeki evinize kurarsanız, evinizdeki bağlantınızın erişim limitleriyle aynı şekilde sınırlandırılırsınız. Yani VPN sihir değildir!

VPN Servisleri bloklanabilir mi?

Tabii ki evet! Bunun birkaç yolu olsa gerek. Bir kere en sık kullanılan VPN servislerinin IP bloklarına erişim engellenirse, artık o VPN’i kullanamazsınız. Başka bir yolu da kullanılan portları ve/veya iletişim protokollerini engellemek olabilir.

Peki VPN Servisleri bloklanmışsa yine de sansürsüz internet erişimi yapılabilir mi?

Aslında sansürleme yöntemlerinde teknik limit neredeyse yok gibidir. Ancak her teknoloji “anti”sini de yanında geliştirmektedir. İnsanlar DNS‘lerini değiştirmeyi (8.8.8.8) öğrenmişse, o zaman artık IP filtrelersiniz. Eğer VPN kullanımı yeterince yaygınlaşmışsa VPN servislerini de engellersiniz. Diğer başka teknik yollara başvururlarsa onu da emin olun engelleyebilirsiniz. Her ne metod geliştirirseniz geliştirin, mutlaka önü kesilebilir. Bu tür bir filtreleme için kullanılabilecek en uç yöntemlerden birini anlatayım (Bu aslında basitçe bir firewall kuralı listesi, en üstteki kural en önce uygulanır eğer erişim sağlanamazsa bir alttakine bakılır. Not: Bu kural listesi arttıkça firewall’un çalışma hızı düşebilir.):

  1. Öncelikle en başta tüm network erişimini engellersiniz.
  2. Sadece yurt içindeki IP bloğuna http (şifresiz) ile erişim izni verirsiniz.
  3. Yurt içindeki sadece şifreli iletişime ihtiyaç duyan onaylı kurumlara (mesela bankalara) https (şifreli) erişim izni verirsiniz.
  4. Yurt içinde özel protokol gerektiren onaylı kurumlara http https dışında erişim izni verirsiniz.
  5. Yurt dışında sadece onaylı sitelere http (şifresiz) erişim verirsiniz, ancak aradaki tüm paketleri kaydeder, dinler ve gerektiğinde filtrelersiniz.
  6. Yurt dışında SSL sertifikalarını devletinizle paylaşmış sitelere (tabii bir çoğu bunu kabul etmeyecektir, kabul edenler de durumu yalanlayabilirler) aradaki trafiği dinleyerek https (şifreli) erişim sağlarsınız. Yani gmail’e https ile erişmek mümkün olsa da, aslında bu erişimi yerel internet servis sağlayıcınızın araya şifreyi çözerek girmesiyle erişirsiniz.

Günümüzde yukarıda anlattığıma benzer kurallar Çin’in Harika Internet Seddi  (https://en.wikipedia.org/wiki/Great_Firewall_of_China) projesinde uygulanmaktadır. Ayrıca 2013 yılı itibariyle, Çin’de 2 milyon civarında internet polisi bulunduğu iddia edilmektedir (kaynak: http://www.bbc.com/news/world-asia-china-24396957). Dolayısıyla yukarıda listelediğim yöntemlerin bir çoğu farazi değil, gerçek bir biçimde uzun zamandır uygulanan yöntemlerdir.

VPN-Blocked-in-China-The-Great-Firewall-Strikes-Again.png

Kendi Internet servisimi alabilir miyim, mesela uydudan?

Kendi çanak anteninizi koyarak uyduya direk sinyal gönderip almak teknik olarak mümkündür. Ancak ülkenizdeki yasalar itibariyle böyle bir radyo iletişimi kullanmanız da kanunlara tabii olabilir. Yani resmi görevliler uyduya sinyal gönderdiğinizi tespit edilebilir ve bu konuda kanunen engellenebilirsiniz. Tabii ayrıca teknik olarak da istenirse bu tip uyduların frekansı belirli bölgelerden bozulabilir.

Bunun dışında uzun dalga telsiz sinyali ile çok düşük hızla veri transferi yapmak mümkün olabilir, ancak bu da bir çok ülkede kanuni izne tabiidir. Ayrıca sinyalleri gönderen cihazların yeri de tespit edilebilir.

Benim bildiğim kadarıyla, geriye kendi fiber optik ağ kablonuzu çekmek kalıyor. Ya sınırlardan ya da uluslararası sulardan, ama her ikisi de bana oldukça zor görünüyor.

Sonuç

Özetle vardığım sonuç şudur:
Bir ülke isterse tüm iletişimi (buna sadece internet olarak bakmayın), gerek teknik gerekse hukuki yollardan engelleyebilir, ne kadar hacker vs. olsanız da bu duvarları aşamayabilirsiniz.

Remounting a USB drive, after ejecting it on OSX

Normally after I eject a USB drive from an OSX machine, to remount it, I simply plug it out, and then back in. But this is an annoying process, and simply wears connectors mechanically. So here is my workaround. Now open a terminal window, but first, you need to become root!
(Be aware that, the following command will disconnect any other USB storage devices as well. So when calling this command, make sure that you don’t have any other filesystems loaded via USB connection.)

kextunload /System/Library/Extensions/IOUSBMassStorageClass.kext

Then again type:

kextload /System/Library/Extensions/IOUSBMassStorageClass.kext

Now OSX will rescan your USB ports and detect your USB storage devices without physically unplugging/replugging!
Hope this works for you as well. I tested this on yosemite 10.10.5, and it worked.

MacOSX Assembly, 255 byte Hello World

For a long time, I wanted to code in assembly on OSX. Today I started to look at some “Hello World” examples. I came across some of them. After making my asm code work, I looked at the size. Woow, it was above 8Kbytes! Since I know that my asm code is not that long, I needed to make it smaller. No matter how I worked with “ld” options or “strip” executable commands, I could not go to smaller sizes.

Then searching a little bit more, I came accross this example:

http://osxbook.com/blog/2009/03/15/crafting-a-tiny-mach-o-executable/

It could create a 248 byte executable, which returns 42 (Thanks Douglas Adams) as the exit code. Now we are talkin!

Then I took it, and added my asm code for Hello World. And I made some shameless optimizations, and illegal programming. But it is tested to work on my 10.10.3 laptop!

; Hello World example for OSX asm code
; kuban.altan@gmail.com
; Tested on OSX 10.10.3 (might fail after 10.10.5, since Apple now limited min. mach-o file to 4K)

; To make it run, just type these in Terminal (you might need Xcode installed)
; nasm -f bin -o Hello255bytes Hello255bytes.s
; chmod 755 Hello255bytes
; ./Hello255bytes
; Hello world.
; So the code below is typing "Hello world." in just 255 bytes of executable

; Inspired by the document below:
; http://osxbook.com/blog/2009/03/15/crafting-a-tiny-mach-o-executable/

BITS 32
	org	0x1000

	db	0xce, 0xfa, 0xed, 0xfe			; magic number for mach-o executable
	dd	7								; cputype (CPU_TYPE_X86)
	dd	3								; cpusubtype (CPU_SUBTYPE_I386_ALL)
	dd	2								; filetype (MH_EXECUTE)
	dd	2								; ncmds
	dd	_start - _cmds					; cmdsize
	dd	0								; flags
_cmds:
	dd	1								; cmd (LC_SEGMENT)
	dd	124								; cmdsize
 _hello:
	db	"Hello world.   ", 10			; Overwrite segname
	dd	0x1000							; vmaddr
	dd	0x1000							; vmsize
	dd	0								; fileoff
	dd	filesize						; filesize
	dd	7								; maxprot
	dd	5								; initprot
	dd	1								; nsects
	dd	0								; flags
	db	"__text"						; sectname
	db	0, 0, 0, 0, 0, 0, 0, 0, 0, 0 	; sectname
	db	"__TEXT"						; segname
	db	0, 0, 0, 0, 0, 0, 0, 0, 0, 0 	; segname
	dd	_start							; addr
	dd	_end - _start					; size;
	dd	_start - 0x1000					; offset
	dd	2								; align
	dd	0								; reloff
	dd	0								; nreloc
	dd	0								; flags
	dd	0								; reserved1
	dd	0								; reserved2

	dd	5								; cmd (LC_UNIXTHREAD)
	dd	80								; cmdsize
	dd	1								; flavor (i386_THREAD_STATE)
	dd	16								; count (i386_THREAD_STATE_COUNT)
	dd	0, 0, 0, 0, 0, 0, 0, 0 			; state
	dd	0, 0, _start, 0, 0, 0, 0, 0		; state

; Our code starts here, and it assumes eax=0 and ebx=0, when kernel jumps to _start:
; I tested this on my 10.10.3 machine and it works!

_start:
	inc		ebx 			; ebx = 1
	shl		ebx,4			; ebx = 16
	push	ebx 			; We push 16 as parameter to stack, which represents string length

	push	dword _hello	; We push the address of our Hello world string

	inc		eax 			; eax = 1
	push	dword eax 		; push 1 as the parameter file descriptor (stdout)

	shl		eax, 2 			; eax = 4 so we will syscall (write)
	sub		esp, eax
	int		0x80			; syscall

	xor	eax, eax 			; eax = 0 (nosys) This is really a hack! Normally I should
							; call (exit) which needs eax = 1, but it would consume 2 more bytes
							; So I just call nosys, and exit my Hello world.
							; I know it is not legal. But I had to fit under 256 bytes!
	int	0x80 				; syscall

_end:
filesize equ	$ - $$

To make it run, just type:

nasm -f bin -o Hello255bytes Hello255bytes.s

Then make it executable:

chmod 755 Hello255bytes

Then run it:

./Hello255bytes

So this is the smallest “Hello world.” executable I have seen to be assembled directly using nasm. Anyone liked this?

MacOS’ta Spotlight aramasını istenilen Volume’ler için devre dışı bırakmak

MacOS’taki Spotlight araması çok kullanışlı bir araç olsa da, formatlanan her volume için default olarak açık olması dert olabiliyor. Örneğin yedekleme yapılan, ya da Autodesk Smoke, Flare, Flame yazılımları için kullanılan bir disk için Spotlight indexleme çok anlamlı olmayacaktır. Bu indexleme CPU’nun zamanını boşa harcayacağı gibi, aynı zamanda disk sistemini de yavaşlatacaktır. İyisi mi hiç gerekmeyeceği durumlar için iptal etmenin iyi olacağını düşündüm. Terminali açıp su olduktan sonra:

sh-3.2# mdutil -as
/:
Indexing enabled.
/Volumes/metaData:
Indexing enabled.
/Volumes/stoneMedia:
Indexing enabled.

Bu şu demek oluyor, mdutil’in raporuna göre sistemde 3 adet filesystem var. Bunların hepsinde de Indexing enabled durumda. Bense metaData ve stoneMedia için indexing’i kapatmak istiyorum.

sh-3.2# mdutil -i off /Volumes/metaData/ /Volumes/stoneMedia/
/Volumes/metaData:
Indexing disabled.
/Volumes/stoneMedia:
Indexing disabled.

Bu komutla tek satırda indexlemeyi kapatmış olduk. Bunu da bir daha kontrol edelim:

sh-3.2# mdutil -as
/:
Indexing enabled.
/Volumes/metaData:
Indexing disabled.
/Volumes/stoneMedia:
Indexing disabled.

Bundan sonra eğer çok mükemmeliyetçiysek .Spotlight-V100 klasörünü de altındakilerle birlikte silebiliriz. Eğer herhangi bir Volume için indexlemeyi bir daha açmak istersek:

sh-3.2# mdutil -i on /Volumes/metaData/

yazmamız durumunda indexleme tekrar devreye girecektir. Eğer .Spotlight-V100 klasörünü silmişsek de, mdworker tarafından tekrar oluşturalacaktır.

Mac OSX’te seçili dosyaları rar’lamak

Ne kadar aradıysam da MacOS‘ta çalışan, GUI‘si olan güncel bir RAR dosya oluşturma programı bulamadım. Amacım da şu idi: büyük miktarda dosyaların bulunduğu klasörleri, 1GByte‘lık segmentler halinde RAR dosyalarına sıkıştırmak istiyordum.

Bunu yapmak için, komut satırı ile haşır neşir olanlar için, http://rarlabs.com/rar/rarosx-5.1.1.tar.gz adresinde, rarlabs‘ın MacOSX için sağladığı komut satırı yazılım mevcut. Ben de bu dosyayı indirerek işe başladım. Ve bu .tar.gz dosyasını açtım:rar directory list

Görüldüğü üzere aslında çok da küçük bir dosya. Sonra da bu rar klasörünü /Applications klsörüne taşıdım. Artık sistemimde /Applications/rar/rar adı altında komut satırından çalıştırabileceğim bir rar aplikasyonum oldu.

rar

Şimdi sıra buna bir GUI geliştirmek kısmına geldi. Çünkü şirketteki birçok kullanıcı için komut satırı yeterince konforlu değildi. Bunun için de http://stuffforlife.blogspot.com.tr/2009/03/data-compression-in-mac-os-x-how-to.html adresinde bir dosyaya rar oluşturan bir automator scripti gördüm. Hemen kurup denedim. Ama bu script, sadece seçili klasör ya da dosyadan 1 tane büyük rar dosyası oluşturuyordu. Bu da büyük bir klasör sıkıştırıldığında, 50-100GByte büyüklüğünde dosyalar oluşması sorununu beraberinde getiriyordu. Bu büyüklükte dosyalar gerek network transferlerinde, gerekse FAT32 tipi filesystemlerde soruna neden olmakta. Benim amacım bu büyük arşiv dosyalarını 1GB’lık parçalar halinde 50 adet dosyayı, aynı ismin sonuna ‘_rar’ eklenmiş yeni bir klasör açarak oluşturmaktı.

applescript

Bu automator dosyasını da /Users/myuser/Library/Services/ klasörü altına koyup, Finder’da sağ tıklayarak menüyü açtığımda: ‘RAR selected files’ menüsü gelmiş oluyor.

Aslında uzun lafın kısası https://drive.google.com/file/d/0B5o2czrPOPIwQVFITHZhdHVlWnM/view?usp=sharing adresinden bu .zip dosyasını çıkarıp, sonra double click yapıp:

service_installe

Install dediğimiz anda dosya kullanıcımız için sistemimize kuruluyor.

Bununla yetinmeyenler için, ayrıca Automator‘daki code ise aşağıda:

on run {input, parameters}
	
	set nbFiles to count input
	
	if nbFiles = 0 then
		display dialog "No files selected!" buttons {"OK"} default button 1
		return
	end if
	
	tell application "Finder"
		
		set archiveDir to (container of (item 1 of input) as string)
		if nbFiles = 1 then
			set archiveName to (name of (item 1 of input) as string)
			set archiveDirName to (name of (item 1 of input) as string)
		else
			set archiveName to "archive"
		end if
		
		if exists folder (archiveDir & archiveName & "_rar") then
			set i to 2
			repeat while exists folder (archiveDir & archiveName & "-" & i & "_rar")
				set i to i + 1
			end repeat
			set archiveDirName to archiveName & "-" & i
		end if
		
		set archiveDir to quoted form of POSIX path of archiveDir
		set archiveDirName to quoted form of (archiveDirName & "_rar")
		set archiveName to quoted form of (archiveName & ".rar")
		
		set listFiles to " "
		repeat with i in input
			set listFiles to listFiles & quoted form of ("." & POSIX path of (name of i as string)) & " "
		end repeat
		
		set finalTargetName to archiveDirName&"/"&archiveName
		
	end tell
	
	tell application "Terminal"
		activate
		do script "cd " & archiveDir & ";mkdir " & archiveDirName &";/Applications/rar/rar a -y -s -m4 -v1024m " &finalTargetName & listFiles
	end tell
	
	return input
end run

Burada .rar dosyaların segment büyüklükleri değiştirilmek istenirse, -v1024m parametresi, mesela 10MByte için -v10m yapılabilir.

MacOS 10.10 Yosemite için USB installer yapmak

MacOS Partition

MacOS Partition

MacOS .dmg dosyasını indirdikten sonra, bunu eğer Mac’inizi sıfırdan kurmak için kullanmak istedim. Bunun için 8GB büyüklüğünde bir USB memory buldum. Bunu da GUID şekilde partitionladım.

Sonra da bu USB sticki MacOS Extended Journaled filesystem ile “MacOS10” ismiyle formatladım.macosextended

Sonra da Yosemite .dmg imajını double click yaparak mount ettim. Sonra önce superuser olup (ya da sisteminizde root enabled değilse en başa sudo ekleyerek) komut satırında şunları yazdım:

cd /Volumes/OS\ X\ Yosemite\ 10.10\ \[Mac\ App\ Store\]/Install\ OS\ X\ Yosemite.app/
./createinstallmedia --volume /Volumes/MacOS10/ --applicationpath /Volumes/OS\ X\ Yosemite\ 10.10\ \[Mac\ App\ Store\]/Install\ OS\ X\ Yosemite.app --nointeraction

Buran sonra USB memorynin hızına göre yaklaşık 15-20dk. bekledim. Artık bootable Yosemite USB medianız hazır!

 

Bir klasördeki tüm MP4 dosyaları DNXHD36 Quicktime MOV formatına çevirmek

for f in *.MP4 ; do ffmpeg -i "$f" -vcodec dnxhd -b:v 36M -pix_fmt yuv422p -acodec pcm_s16le -s 1920x1080 "${f%.MP4}.mov" ; done

Evlerdeki TV’lerin rec 709 video standartına uyması

Blogumda belki de ilk kez teknik olmayan bir soru soruyorum:

“Neden elektronik dükkanından aldığımız TV, dünyadaki HDTV yayın standartı olan rec709’a uymaz?”

Gerçekten, bu soru teknik bir soru değil! Daha çok sosyal bir soru… Bu sorunun anlamını kavramak için, aslında rec709‘un ne olduğundan kısaca bahsetmem lazım. Öncelikle aşağıdaki diagrama bakmak lazım:
CIExy1931_Rec_709

Aslında bu grafik, elektronik cihazlarla ilgili değil, tamamen insan gözü ile ilgili. Bu gördüğümüz şekil 2 boyutlu olarak, CIE1931‘e göre ortalama insan gözünün renk algısını temsil ediyor. Buradaki 1931, bu deney ve ölçümlerin yapıldığı yılı belirtiyor. Yani bu diagram renkli TV’den oldukça yaşlı!

Bildiğiniz gibi ışık aslında değişik frekanslarda hareket eden foton parçaçıklarıdır. Aslında insanın renk algısı da, 380nm‘lik mor‘dan başlar, gökkuşağında ilerleyerek, 700nm‘lik kırmızıya kadar ulaşır. Bu grafikte sınır çizgileri, gökkuşağındaki en doygun renkleri göstermektedir. Aslında renklerin nasıl oluştuğuna girmek isterdim, ama şimdiden yazıdan kaçmak isteyenleri duyar gibiyim. O yüzden şimdilik bu konuya girmeyeceğim.

Grafikte gördüğümüz D65 noktası ise, gün ışığının ortalamasını temsil ediyor. Dayanamayacağım… İşte aşağıda D65’in frekanslara göre foton miktarı dağılımını gösteren grafik:

SPD_D65

Yani aslında güneşin bize beyaz gelen ışığı, ortalama olarak yukarıdaki frekans dağılımına sahip. Aslında bunun daha solu ve sağı da var. Ancak insan gözü bu frekanslardaki ışığa kör! Bu yüzden bu frekanslara, morötesi ve kızılötesi diyoruz.

Gelelim TV’lere. TV’mize beyaz sinyal verdiğimiz zaman, yani bilgisayarların 8 bit RGB kafası ile: (255,255,255), TV’de görmemiz gereken beyaz bu olmalı. Tabii ki güneş gibi bir geniş spektrumu olmasını beklemiyoruz. Ancak yukarıda gördüğümüz CIE1931 grafiğindeki gibi, kırmızı-yeşil-mavi renklerin toplamı D65‘te buluşmalı. Ne bundan daha yüksek, ne de bundan daha alçak!

D65’i elde etmek içinse, yukarıdaki diagramda, X,Y = (0.319, 0.329) olmalı. Sonrasında ise, bu beyazı siyaha doğru indirmeye başladığımızda, ekrandaki parlaklık azalırken, halen beyazımız D65 olarak kalmalı. Böylece siyahtan beyaza doğru geçen bir degrade içersinde, gölgeler daha kırmızı, orta tonlar daha sarı, beyazlar ise daha mavi görünmemelidir. Yani monitör bu beyazı, tüm ışık seviyeleri için kararlı şekilde oluşturabilmelidir.

Ana renklerin ise, klasik olarak tüplü monitörlerin fosforlarına göre tanımlanmış renk koordinatları ise, yine CIE1931 diagramında gösterilmiştir. RGB ana renklerin bulunması gereken koordinatlar işaretlenmiş ve bu koordinatlar birleştirilerek bir üçgen oluşturulmuştur. Bu üçgen içinde kalan renk alanına “Color Gamut” denir. Yani: “Gösterilebilen Renklerin Tümü”.

Rec709 standartında bu renk koordinatları şöyle tanımlanmıştır:

  • Kırmızı X = 0.64        KırmızıY = 0.33
  • Yeşil X = 0.30             Yeşil Y = 0.60
  • Mavi X = 0.15             Mavi Y = 0.06

Yani tam kırmızı bir sinyali (255,0,0) gönderdiğimizde, X=0.64, Y=0.33 olmalı. Aynı şekilde yeşil ve mavi de tanımlanan renkleri oluşturmalı. Ayrıca bu renkler siyaha doğru giderken de, yine aynı renk koordinatlarını korumalı.

Aslında rec709’un istediği renkle ilgili şeylerin tamamı bu kadar. Yani beyazın ortalama gün ışığının beyazına uygun olsun, ana renklerin koordinatları da belirtilmiş.

Bir de beyazın parlaklık seviyesi var. Bu da 100cd/m2 olsun denmiş. Yani metrekarede “kabaca” 100mumluk ışığa eşit olalım. Bu da yapılması zor birşey değil. Birçok ekran bunun 3-5 kat parlağını yapabiliyor.

Bir de siyahtan-beyaza geçişteki güç eğrisi var. Buna gamma eğrisi deniyor. Bu da 2.35 olsun denmiş. Gamma’nın ne olduğuna yine bu yazıda girmeyeceğim. Ancak bunu da zaten hemen hemen tüm ekranlar kolayca yapabiliyor.

Peki TV üreticileri bunlara dikkat etse ne kazanırız?

Tüm TV stüdyolarında 20 yıldan fazla zamandır üretilen video masterları, gerek TV yayınında gerekse DVD ve Bluray gibi oynatıcılarından, yönetmenlerin ve görüntü yönetmenlerinin tasarladığı, görmemizi istedikleri renkler ile görürüz.

Peki bu önemli mi? Sinema veya dizi zevki olan insanlar için önemli birşey bence, ya da TV’ye reklam veren üreticiler için de, ürünlerinin renklerini doğru görebilmek, en azından reklam filmi master edilirkenki renkleri ile görebilmek çok güzel olur.

Kaldı ki, bu renk standartlarının fakrika çıkışında ayarlanamayacağı neredeyse hiç bir TV yok. Aslında hemen hemen hepsi, bu standartların çok üstünde renk üretme kapasitesine sahip! Bu ilk başta kulağa hoş gelse de, aslında daha geniş bir renk gamutuna sahip bir monitör, tüm renkleri olduğundan çok daha farklı gösteriyor demektir. Genellikle de aşırı doygun, tasarlanmadığı kadar canlı…

TV üreticileri şu anda nelere dikkat ediyor?

Aslında kasanın şık ve parlak olmasının haricinde, TV ekranı içindeki görüntünün de parlak ve aşırı doygun renkler üretmesine çalışıyorlar. Böylece yan yana konmuş yüzlerce TV arasından öne çıkmayı umuyorlar. Çünkü tüketici en parlak, en canlı görünen ekranı satın almaya eğilimli olacaktır diye bir düşünceleri var. Muhtemelen de haklılar… Eminim $40k fiyata sahip Dolby 42″ monitörü bir elektronik dükkanına koysak, $500 gibi bir fiyat etiketiyle bile satamazdık!

tvshop

TV dükkanlarında, şu anki tüketici bilinciyle, “DYNAMIC” ya da “VIVID” diye isimlendirilen görüntüleme modları haricinde çalışan TV’ler, sahiplerine daha zor kavuşurlar. Ancak unutmayalım. DYNAMIC mod, parlak dükkan ışıkları altında gerekli bir şey olabilir. Ancak geceleyin salonumuzda ışıkları kısıp, bu kadar parlak bir resme baksak, kör olabiliriz. Resmi de hiç güzel algılamayız… Aslında ben bu “Dükkan!” modlarının TV’lerde olmasına karşı değilim, tüketici bu konuda 50 yıl içinde bilinçlenmezse, bu modlar satışı yapana kadar gerekli olacaktır. Ancak bari bu TV’leri satın almak zorunda olan, ve renkleri doğru standartta görmek isteyen ölümlülere acısalar da, doğru standartta görüntüleyen bir modla da gösterebilseler…

THX Cinema Mode:

Aslında bu konuya ilk takılan ben olmadım tabii. George Lucas‘ın şirketi olan THX, bir sürü home cinema ekipmanına sertifika veriyor. TV’ler de bu ekipman tiplerinden biri. THX’in sertifikasyon testinden geçen TV’ler “THX certified” olarak isimlendiriliyor. Dükkandan alıp eve getirdiğinizde, Dynamic gibi modlara ek olarak “THX Cinema” modunu da barındırıyor. Ve yukarıda bahsettiğim konulara hassasiyetiniz varsa, TV’nizi bu moda alıp seyredebiliyorsunuz:

panasonic_thx

Bu mod, TV’yi THX sertifikasyonundan geçtiği standartlara getiriyor. Aslında THX sertifikasyonu da aşağıdaki standartlara uyulmasını şart koşuyor:

  1. rec.709 renk standartlarına renk bazında ±0.005 töleransları ile uyulmalıdır.
  2. Panel yansıması: 2% altında olmalıdır. Böylece loş bir ortamda bile, lamba ve pencere yansımalarını çok az görmeliyiz.
  3. Renk eşitliği: THX ekranı 8 farklı noktada ölçüyor ve bu ölçümlerin sonucunda ekranın bu 8 noktasında, beyaz ve siyah seviyesi, belirtilen ışık parlaklığını 80% oranında, renkleri ise CIE1931 XY koordinatlarında ±0.004 tölerans ile sağlamalıdır.
  4. Görüş açısı: LCD ekranlar, ekrandan gelen dikmeye göre, 45º içinde parlaklığı 75% oranına kadar, renkleri ise XY koordinatlarında ±0.004 tölerans ile korumalıdır.
  5. İz yapma: Özellikle Plazma ekranlar, siyah-beyaz satranç tahtası görüntüsünü sabit olarak 2 saat gösterdikten sonra, 10 dakika içinde en azından 98% oranında bu izden kurtulmalıdır.
  6. Overscan: Gerçek 1920×1080 piksel, overscan modunda hiçbir büyütme/küçültme defosu olmadan 1:1 gösterilebilmelidir.
  7. Video Processing: THX, TV’yi çeşitli patternler ile, hareketteki titreme, deinterlacing defoları, sharpen veya benzeri filtreler kaynaklı kontürlenmelere karşı test eder.

Tabii tüm bu şartlar karşılansa ne güzel olurdu değil mi? Her şeye inanan bir tüketici olsa idik, safça bunlara inanırdık. Ancak gerçek hayatta özellikle THX sertifikası almış birçok plazma ekran test ettim. Ancak kutudan çıktıkları zaman, THX modunda bu bahsettiklerimizin yarısını bile beceremiyorlar. Ama buna rağmen sertifikaları var. Ne yapalım, George Lucas’a şikayet mi edelim?

Ben de bilemiyorum. Ancak en umursadığım konu rec709 konusu…

“Birisi standartları kontrol etsin lütfen. TSE’ye bile razıyım!”

Tabii THX’in hakkını yemeyeyim, bu moda sahip TV’ler, diğerlerine göre, rec709 standartına çok daha uygun görüntüleme yapıyorlar.

Tunneling Autodesk network license server over an ssh tunnel

We have a physically seperate network for our Autodesk Wire and WireTap traffic, as suggested by Autodesk. Since this network is physically seperate , it is very hard to access to. Our license server is also in this network, it can be accessed by Autodesk workstations, but nothing else. These days, I wanted to access to this license server from other networks. Ofcourse there might be some other solutions. But I preferred to setup an ssh tunnel.

Here is what I have done: I simply used 3 computers to make my test.
1. license server @house-network
2. wiretapgateway @adsk-network & @house-network
3. Autodesk workstation @adsk-network

So, there is no routing between adsk-network and house network. But I have a wiretapgateway machine, which has 2 physical interfaces and connects to both networks. This machine runs MacOSX Lion 10.7.

To do this test, I moved the license server to house network. And modified the license files like this:

/usr/discreet/licserv/licenses/DL_license.dat
 SERVER licserv DLHOST0X=XXXXXXXXXXXXXXXXXXXXXXXXXX 12344
 VENDOR discreet_l port=33333
 USE_SERVER

This forces lmgrd to run at 12344 and discreet_l to run on 33333. I also needed to setup the workstation:

/usr/local/flexlm/licenses/DL_license.dat
 SERVER localhost 00000001 12344
 USE_SERVER

This tells the workstation to look for local port 12344, and ask for a license. Then discreet_l gives back an answer from port 33333. So we need 2 tunnels for 12344 and 33333. So now I go to my ADSK workstation, and create a tunnel to licserv over wiretapgateway.

ssh -L 12344:10.0.0.191:12344 -L 33333:10.0.0.191:33333 -fNC root@172.16.0.26

How to create .tar files for all folders under a directory

I have hundreds of project directories under one folder. Now I want to create .tar files for these projects. Is is fairly easy to tar multiple directories to one .tar file:

tar cvf /myStorage/allProjects.tar project1 project2 project3 project4

But I needed one .tar file per project. To keep .tar files seperate. So I needed to have:

/myStorage/project1.tar
/myStorage/project2.tar
/myStorage/project3.tar
/myStorage/project4.tar

To accomplish this, I needed to write a bash script:

#!/bin/bash
#
# Create .tar files for the source folder in destination
# v0.2 21Jan2013
# kuban.altan@gmail.com
#
# tarchive mySourceDirectory myDestination Directory

sourceDir=$1
destDir=$2

sourceFiles=$sourceDir/*
cd $sourceDir
pwd

SAVEIFS=$IFS
IFS=$(echo -en "\n\b")

for f in $sourceFiles
do
currentFile=$(basename $f)
legalCurrentFile=${currentFile//[^a-zA-Z0-9]/_}
echo "tar cvf "$destDir/$legalCurrentFile.tar" "$currentFile""
tar cvf "$destDir/$legalCurrentFile.tar" "$currentFile"
done

# restore $IFS
IFS=$SAVEIFS

All you need to write is:

tarchive mySourceProjectDirectory myDestinationDirectory

As the result, I will have a seperate .tar file for each project directory in myDestionationDirectory.