24 Mart 2012 Cumartesi

Windows yüklemesi sonrası ubuntu

Eveet windowsumuzu yükledik ancak bu seferde bilgisayarın yükleme menüsünde ubuntu yok yada direk windows geliyor bize. Bu durum ubuntu yüklemesinin ardından başka bir bölüme windows yüklendiğinde ortaya çıkan bir gelişme. Bunun nedeni windowsun ubuntu'da bulunan grup yükleyicisini silmesi veya zarar vermesi. Bunu engellemek için neler yapabiliriz : 
öncelikle özetini geçeceğim şu linkteki önerileri takip edebilir : https://help.ubuntu.com/community/RecoveringUbuntuAfterInstallingWindows
Adım adım anlatalım : 
1.ubuntu cd'mizi veya önceden hazırladığımız ubuntu yükleme usb'sini takıyoruz (nasıl ubuntu yükleme usb'si hazırlanır bir önceki yazıda mevcut)
2.Bilgisayar ilk açıldığındaki bios menusunden gerekli tuşlara basarak ne taktıysak ondan yükleme yapmasını söylüyoruz . (cd taktıysak yükleme (boot) menüsüne girip cd'yi mesela usb için aynı şekilde)
3. Yüklüyoruz gelen menüden Boot-repair'i seçiyoruz ve buradan da recomended repair'i seçiyoruz
4. gerekli işlemler bittikten sonra bilgisayarı yeniden başlatıyoruz ve grub yükleme menüsü bize hem ubuntu hem de windowsu gösteriyor olması lazım eğer bu olmazsa bilgisayar açıldıktan sonra sol shift tuşuna basarsak windows ve ubuntu arasında gidip gelebiliriz.
a

Windows'da Ubuntu Yükleme USB'si oluşturmak

Madem Ubuntu'dan Windows yükleme Usb'si oluşturmayı anlattık bir de Windowsta Ubuntu yükleme usbsi oluşturmayı anlatalım .  burada http://www.ubuntu.com/download/ubuntu/download 

Burn your CD or create a bootable USB stick kısmında usb ve windowsu seçersek zaten bize gerekenleri anlatacaktır. ancak yine de anlatmakta fayda var adım adım anlatalım 

1. http://www.ubuntu.com/download/ubuntu/download

linkine tıklıyoruz download ubuntu yazan yerde versiyonumuzu seçip start download diyoruz. iso dosyamız inmeye başlıyor. (usb diskimiz en az 2 gb olmalı)

2. indirme işlemi bittikten sonra http://www.pendrivelinux.com/universal-usb-installer-easy-as-1-2-3/#button adresinden universal usb installer programını yüklüyoruz.

3. universal usb installer programının exe dosyasını çalıştırdıktan sonra select distribution yazan yerden indirdiğimiz versiyonun yanında desktop yazan seçeneğe tıklıyoruz. ikinci kısımda indirdiğimiz iso dosyasını browse diyerek seçiyoruz. 3 kısımda usb dosyamızı seçiyoruz . ve gelen kutucukda format drive seçeneğine işaretliyoruz ki usbmiz önce fat32 yani linux dosya formatında temizlensin.Ardından create diyoruz ve programımız bize sonucu veriyor bu işlem biraz uzun sürebilir.

4. işlem bitince artık usb diskimiz bir ubuntu yükleyici olarak kullanılabilir hale geliyor. artık bilgisayar ilk açıldığında çıkan boot menüsüne geçmek için kullanığımız tuşa basıp ben de f12 oradan usb seçeneğini seçip yüklemeye başlayabiliriz.

Ubuntu'da USB ile Windows Yükleme Diski oluşturmak (Windows'u USB ile yüklemek)

Ubuntu 11.10 ve Windows 7 kullanıyordum. Baktım ki Windows 8'in beta versiyonu çıkmış. Atladım hemen yükledim ama ondan sonra bir daha Windows açılmadı. Ben de yeniden Windows 7'yi yüklemek için Ubuntu'da nasıl Windows boot (yükleme) Usb'si oluşturabiliriz yani windowsu usb'den yüklemek için yapmamız gereken ilk şeyler neler onu araştırdım ve sizinle paylaşayım dedim. Elimizde şunların bulunması gerek bunu yapabilmek için :
En az 4 gb Usb
 Windows 7 yada başka versiyonunun iso dosyası
Öncelikle bilgisayarımızın windowsu yükleyebilmesi için usbmizin dosya formatını ntfs'ye çevirerek formatlamamız ve gerekli dosyaları usb'ye bu şekilde atmamız gerekir.Bu işlemleri bizim için yapan Gparted programı var. Hemen yazılım merkezine gidip ismini yazdık ve Gparted'ı yükledik. Sonra Gparted programını arama bölümüne Gparted yazarak açıyoruz biraz bekliyor tabi bağlı olan cihazları bulmak için. Sağ üst köşede usb seçeneğini seçiyoruz dikkatli olun yanlış yeri formatlamayalım! Nerden seçmemiz gerektiği aşağıda belirtiliyor :


Sonra orta bölümde gelen bölgeye sağ tıklayıp format to seçeneğine tıklıyoruz. Buradan ntfs'yi seçiyoruz. Sonra tik işaretine gidip apply all operations diyoruz. Bu usb diskinizin içeriğine göre biraz uzun sürebilir. Ardından yine gelen pencereden sağ üstten bir daha usb diskimizi seçip yine ortada çıkan alana sağ tıklayıp Manage flags diyoruz. Ardından çıkan listeden boot seçeneğini işaretliyoruz ki bizim usb'miz ilk bilgisayar açıldığında yükleyici olarak tanınabilisin.Gparted ile işimiz bitti ancak eğer bu programda gerekli seçenekleri seçemiyorsak veya usb diskimiz görünmüyorsa öncelikle sol üstte Gparted seçeneğine tıklayıp Refresh devices diyebiliriz hala sorunlar yaşıyorsak Usb diskimizi birkaç kez çıkartıp sokabiliriz.

Şu an elimizde ntfs formatında boş bir usb diski var ve windows 7 iso dosyamız. eğer windows 7 dvd'miz var ise bundan sonraki işlemleri yapmadan sadece dvd'nin içeriğini usb'ye atarak usb ile window yüklemesini yapabiliriz. Ancak elimizde sadece iso dosyası var ise devam edelim.Öncelikle terminali açıyoruz ve iso dosyamızın olduğu yere klasörümüzü değiştiriyoruz (bende masaüstü):

cd Desktop 
yada
cd Masaüstü
Ardından iso dosyasının içeriğini tutmak için aynı dizinde bir klasör oluşturuyoruz :
mkdir isoklasoru
şimdi iso dosyamızın içeriğini isoklasorune çıkartacağız iso dosyamızın ismi win7iso olsun o zaman şöyle birşey yazacağız :
sudo mount -o loop win7.sio isoklasoru
şu an iso dosyasının içeriği klasöre atılması lazım.eğer read ile ilgili sorunlar alıyorsak yeni klasör oluşturmayı deneyebiliriz veya sağ tıklayıp klasörün erişim hakkını root için okuma ve yazma yap diyebiliriz (writing and reading).

İso dosyamızın içeriği isoklasorundeyse eğer oradaki tüm içeriği alıp usb diskimize kopyalayalım.Kopyalama bittikten sonra restart atabiliriz.

Bilgisayar başlarken sistem yüklemesinin nerden yapılmasını belirlemek için tuşa basın der (bende F12) bastıktan sonra boot için usb'i seçiyoruz ve windows yüklemesi başlıyor.

17 Mart 2012 Cumartesi

Ubuntu 11.10 ses problemi nasıl çözülür?

Ubuntumu 11.10'a yükselttim ancak giriş yaptığım zaman sesi sağ üst taraftan veya ses ayarlarından yükseltemiyordum. Ses ya düşük oluyor yada olmuyordu. Ancak biraz araştırma yaptığımda terminale :
alsamixer
yazdığımız zaman aşağıdaki resimdeki gibi bir ekran alacağız buradan masterin seviyesini aşağı-yukarı tuşlarıyla değiştirirsek ses azalmış ve artmış olacaktır.

Bilgisayarın başlangıç menüsünden gereksiz Ubuntu versiyonlarını silmek

Bilgisayar açılırken eğer gerekli işlemler yapılmazsa Ubuntu'nun önceki sürümlerine ait kerneller de başlangıç menüsünde görünür ve gün geçtikçe daha uzun bir listeyle karşılaşabiliriz. Windowsa ulaşmak için 20 kere alt yön düğmesine basabiliriz :) Bundan kurtulmak basit :
1. Öncelikle kernelimizin versiyonunu öğrenmek için terminale
uname -r
yazıyoruz. Bunu yazınca bize bir sonuç dönüyor kernelimizin versiyonuyla ilgili mesela bende 3.0.0-16-generic-pae döndü.
2.Synaptic paket yöneticisini açıyoruz ve arama bölümüne "linux-image" yazıyoruz. Çıkan sonuçlar bizim bilgisayar açılırken listede gördüğümüz sonuçlar olacak. Çıkan sonuçlardan bizim terminalde bulduğumuz versiyon hariç diğerlerini kaldırmak için işaretliyoruz. Ancak çok dikkatli olalım linux-image ile başlamayan birşey ve kendi kernel versiyonumuzu asla kaldırmayalım!
gereksiz versiyonları kaldırma işlemi
3. Gereksiz versiyonları kaldırmak için işaretledikten sonra uygula diyelim ve kaldırma işlemi başlasın. Kaldırma esnasında bana menu.lst dosyasında değişiklik yapıp yapmayacağımı sordu ben de yanlışlıkla halihazırda işaretli olanı seçip devam ettim.Ancak bilgisayarı yeniden başlattığımda gördümki gereksiz versiyonlar hala orada. Onun için siz listeden sil seçeneğini seçerseniz herşey hallolunur. Hem gereksiz alanları almış olursunuz hem de başlangıç listesini gereksiz versiyonlardan kurtarmış olursunuz. Ancak siz de benim gibi halihazırda seçeneği işaretleyip kaldırmaya devam ettiyseniz ve hala gereksiz versiyonlarınız duruyorsa benim yaptığımı yapabilirsiniz. Ana bölümde boot/grub/ klasöründe menu.lst diye bir dosya var. Onun içinde bilgisayar açıldığında gösterilecek versiyonların listesi var . Dosyayı açtığınızda başında # işareti olmayan yerlere geldiğinizde aralarında birkaç satır boşluk bulunan kendileri de 5-6 satır olan aşağıdaki gibi ifadeler göreceksiniz :

title        Ubuntu 11.10, kernel 3.0.0-16-generic-pae
uuid        fd3cb956-33fa-4699-a76c-e6242b68da3b
kernel        /boot/vmlinuz-3.0.0-16-generic-pae root=UUID=fd3cc956-334ca-4679-a76c-e6102b68da3b ro quiet splash
initrd        /boot/initrd.img-3.0.0-16-generic-pae
quiet

title        Ubuntu 11.10, kernel 3.0.0-16-generic-pae (recovery mode)
uuid        fd3cc956-33fa-4643-a76c-e6102c68da3b
kernel        /boot/vmlinuz-3.0.0-16-generic-pae root=UUID=fd3cc856-33fa-4699-a76c-e6002b68dg3b ro  single
initrd        /boot/initrd.img-3.0.0-16-generic-pae
Bu ifadelerden ben sadece iki tanesini bıraktım onların içinde de  3.0.0-16-generic-pae geçtiği için yani benim en son kullandığım versiyonumla ilgili olduğu için. Diğer versiyonlarla ilgili olan bölümleri listeden sildiğinizde artık bilgisayarın açılış listesinde olmadıklarını göreceksiniz. Her yeni vesrsiyondan sonra aynı adımları takip edip listenizi kısaltabilirsiniz. Aman dikkat edin yanlış yerleri silmeyin :)

Kernel ne demektir?

Kernel kelime anlamıyla çekirdek anlamına gelir. Bilgisayar biliminde ise kernel işletim sistemlerinin çekirdeği olarak tanımlanabilir. Bilgisayarın uygulamalarıyla veri işleyen donanım parçaları arasında bir köprü vazifesi görür. Mesela Ubuntu kullandıysak ilk açılışta bu kelimeye aşina olabiliriz. Kernel'in ana görevi sistem kaynaklarını yönetmek yani yazılım ve donanım arasındaki iletişimi sağlamaktır. Her işletim sistemi görevlerini değişik yaparlar çünkü Kernelleri farklıdır. Kısaca kernel bilgisayardaki çalışan yazılımlarla işi gören donanım arasında iletişimi sağlayan kullanıcıyla irtibata geçmeyen bir yazılımdır diyebiliriz.

2 Mart 2012 Cuma

İlginç bir haber :) - CNNTÜRK

Google'ın tarayıcısı Chrome, çok yakında önemli bir kullanıcı grubunun tek seçeneği haline gelebilir.

Adobe, Linux için yayınlanan son Flash Player sürümü 11.2'den sonra yeni sürüm yayınlamayacağını duyurdu. Gelecek 5 yıl için Linux'ta Flash Player 11.2'ye güvenlik yamaları yayınlamaya devam edecekler.

İşin kötü kısmı ise Linux kullanıcılarını ilgilendiriyor: Tarayıcılar için geliştirilen Flash plug-in'i, artık sadece Google'ın tarayıcısı Chrome ile çalışacak.

Adobe, Google ile birlikte yürüttükleri yeni API geliştirme projesinden de bahsetti; mevcut Flash Player'da kullanılan Netscape plugin API (NPAPI)'nın yerini alacak olan yeni API'ya değindi. "Pepper" API ya da "PPAPI" olarak adlandırılan yeni API, "tarayıcı ve işletim sistemi arasındaki soyutluğu ortadan kaldıracak olan plugin (eklenti) ve tarayıcı arasındaki katmanı sağlamak" amacıyla geliştiriliyor.

Adobe ve Google'ın birlikte geliştirdiği PPAPI ile çalışan Flash Player, tüm x86/64 platformlarda Google Chrome tarayıcısı tarafından desteklenecek. 

Firefox'un mimarı Mozilla ise, "Pepper" ile çalışmayı akıllarının ucundan dahi geçirmediklerini açıkladı. Yani bu demek oluyor ki, Flash desteği almak isteyen Linux kullanıcılarının tek tercihi Google'ın tarayıcısı Chrome olacak. Firefox ya da diğer alternatifleri kullananlar ise, ne yazık ki Flash desteğinden mahrum kalacak...

1 Mart 2012 Perşembe

Microsoft Windows 8'i tanıttı

Bilişim grubu Microsoft İspanya'nın Barselona kentindeki Dünya Mobil Telefon Fuarı'nda dokunmatik tabletlerden ofis PC'lerine kadar tüm cihazlara uygun yeni işletim sistemi Windows 8'in test sürümünü tanıttı.

Windows Başkanı Steven Sinofsky, düzenlediği basın toplantısında, Windows 8'in tümleştirilmiş işletim deneyimi sayesinde tasarımında olduğu kadar çalışma özellikleriyle de bir nesil değişikliği sağlayacağını belirterek, sistemin klavyeli ve fareli bir büro bilgisayarında olduğu kadar dokunmatik ekranlı bir akıllı telefon ya da tablete de uyumlu olmasıyla kullanıcıar için "akıcılık ve kolaylık" sağlayacağını bildirdi.

Tüketiciler kadar program geliştirenler için de nihayetinde kullanmak istedikleri cihaz ne olursa olsun şimdi en iyi işletim sistemini seçmenin önemli olacağını dile getiren Sinofsky, bu yazılım için internette "Windows Store" adında bir uygulamalar sitesi açılacağını ifade etti. Windows için şu anda her gün 300 yenisinin eklendiği 65 bin uygulama bulunuyor.

Tüm dünyada 500 milyondan fazla bilgisayarın işletim sistemini çalıştıran Microsoft, iki yıl önce akıllı telefon mecrasına girişi kaçırmış ve sektörün iki lideri Apple'ın iOS ve Google'ın Android işletim sistemlerinin gerisinde kalmıştı.

Windows 8,Microsoft'un işletim sistemine program geliştirenlerin güvenlerini sağlaması ve uygulama satışını besleyebilmesi için son derece önemli
bulunuyor. kaynak cnnturk

29 Şubat 2012 Çarşamba

Haskell'de Listeler - 1

Haskell'de en önemli veri tiplerinden birisi Listelerdir (List).Gerek kullanım biçimi gerekse listelere uygun fonksiyonlar bizi Listeler için Haskell'e yöneltir.Listelere örnekler :
[1,2,3]       ['a','b']         [ ]
Gördüğümüz gibi birinci örnekte int listi ikincisinde karakter listi üçüncüsünde ise boş list örneği verdik.listeler homojen olmak zorundadır.ya hepsi karakter ya hepsi int örneğin.Listeler köşeli parantezlerle sınırlandırılır.karakter listeleri onunla eşleşen stringe eşittir mesela compilera

Prelude>"vay" == ['v','a','y']
True
doğru döndü.demekki "vay"=['v','a','y'] doğru bir önerme.
örneklerimizde kullanacağımız let kelimesini anlatalım.let bir değişkene geçici olarak bir değer atar.
mesela let a=[1,2,4,5] dedik sonra terminale a yazarsak bize [1,2,4,5] döner.
Prelude> let a=[1,2,3,4]
Prelude> a
[1,2,3,4]
Şimdi gelelim fonksiyonlara burada kısa açıklama ve gösterimlerle anlatmaya çalışalım ancak "vay" == ['v','a','y'] unutmayın :) örnekler açıklamaların altında


++ : iki listeyi birbirine yapıştırır. (aynı türden olacaklar)
Prelude> "haskell"++" "++"programlama"
"haskell programlama"
Prelude> [1,2,3]++[1,3]
[1,2,3,1,3]
: (iki nokta üst üste) bir elemanla bir listeyi yapıştırır 
Prelude> 'a' : "kin"
"akin"
Prelude> 'a':'a':[ ]
"aa"
[liste] !! numara : listenin numaraıncı elemanını döner.
Prelude> [1,2,4] !! 2
4
liste içinde liste örneği : b = [[1,2,3,4],[5,3,3,3],[1,2,2,3,4],[1,2,3]] (listenin elemanı liste örnek aşağıda)
 Prelude> let b = [[1,2,3,4],[5,3,3,3],[1,2,2,3,4],[1,2,3]]
Prelude> b
[[1,2,3,4],[5,3,3,3],[1,2,2,3,4],[1,2,3]]
Prelude> b !! 2
[1,2,2,3,4]
Listeler sözlük sıralamasındadır 
 Prelude> ['a'] >['b','c']
False
head [liste] : listenin başındaki bir elemanı döner
 tail [liste] : listenin başındaki bir eleman hariç diğer elemanları döner.
last [liste] : listenin son bir elemanını döner
init [liste] : listenin son bir elemanı hariç diğer elemanları döner.
Prelude> head [1,2,3,4]
1
Prelude> tail [1,2,3,4]
[2,3,4]
Prelude> last [1,2,3]
3
Bu son 4 fonksiyon bir liste alır (boş olmayacak).İlk yazımızda da belirtiğimiz üzere parantez yok.terminalde kullandığımız fonksiyonları .hs uzantılı dosyamızda da kullanabiliriz sorun olmayacaktır.Burada let'i kullanmamın sebebi şu an .hs dosyasıyla uğraşmadan hızlıca terminalde işleri halletmektir :)
reverse [liste] : listeyi ters çevirir 
take numara [liste] : listenin 0'dan başlayarak ilk numaraya kadar olan elemanlarını döner.
drop numara [liste] ise listenin 0'dan başlayarak ilk numaraya kadar olan elemanlarını düşürür diğerlerini döner.
Prelude> reverse [1,2,3]
[3,2,1]
Prelude> take 3 [1,2,3]
[1,2,3]
maximum [liste] : listenin maximum elemanını döner , minimum [liste] minimum , sum [liste] ise ,eğer sayı listesiyse , toplamlarını döner.
Örnek verilmemiş ve yazılmamış diğer fonksiyonları kendiniz deneyebilirsiniz :) 

haskell sembolü



Haskell'e giriş

Haskell fonksiyonel bir programlama dilidir.Fonksiyonel programlama dilleri bazı durumlarda çok pratik olabilirler ancak piyasada fazla kullanılmazlar.Ancak bir programcı fonksiyonel programlama dillerinden aldığı zevki ve deneyimi başka yerde bulamaz diye düşünüyorum.
Piyasada kullanılmaz desem de işte bir mario oyunundaki kullanımı :
,

Öncelikle sadece Haskell için değil bütün programlama dillerinde program yazabilmemiz için ihtiyacımız olan en temel 2 şey vardır : metin düzenleyici ve derleyiciler(compiler).Ben Notepad++ 'ı kullanıyorum metin düzenleyici olarak..Her programlama dilinin kendine has bir compiler'ı vardır.Haskell için olan compiler'ı (GHC)  Buradan indirebilirsiniz.
Haskell'in yüklenip yüklenmediğini terminali açıp 'ghci' komudunu yazarak öğrenebiliriz.Başarıyla prelude> komut beklemeye başladıysa herşey tamamdır.Hata alıyorsak bir daha yüklemeyi deneyebiliriz.
Windows 7'de terminali arama bölümüne cmd yazarak,Linux'da ise Accessories  başlığı altında bulabiliriz. 
Derleyicimizi şimdi test etmeye başlayabiliriz :

C:\Users\user>ghci
GHCi, version 7.0.4: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Loading package ffi-1.0 ... linking ... done.
Prelude> 1+1
2
Prelude> 3*2
6
Prelude> true&&false

<interactive>:1:1: Not in scope: `true'

<interactive>:1:7: Not in scope: `false'
Prelude> True&&False
False
Prelude>
Gördüğümüz gibi başarılı bir girişin ardından normal işlemlerimizi compiler'a yaptırmaya başladık.1+1'i bize 2 olarak döndü sorun yok gibi gözüküyor.Ancak farkettiyseniz  true&&false 'da hata verdi.Çünkü :
Haskell'de fonksiyon ve değişken isimleri küçük ve büyük harfe duyarlıdır.Ayrıca bir fonksiyon ismi büyük harfle başlayamaz.
Fonksiyonları görmedik daha ama ön bilgi olarak kalsın :)
Haskell'de genel olarak fonksiyonlarımızı tanımlamak için .hs uzantılı dosyalara fonksiyonlarımızın taslağını yazarız.Mesela benim deneme.hs dosyamda şunlar var:
ikiyekatla x = x + x  
Demek oluyorki bizim fonksiyonumuz bir x alacak ve bu x'i ikiye katlayacak.Fonksiyon tanımlaması C ailesine göre değişik.Öncelikle parantez olayı yok fonksiyon tanımlarken.Sona noktalı virgül de yok.Fonksiyonun döneceği değeri eşitlediğimiz bir takım işlemler var.Eşitliğin sol tarafı girdiler sağ tarafı da fonksiyonun döndüğü değer diyebiliriz.Şimdi biz bu fonksiyonu deneme.hs'de yazdık.Ancak compiler'da nasıl bağlayacağız?:

Prelude> :l deneme
[1 of 1] Compiling Main             ( deneme.hs, interpreted )
Ok, modules loaded: Main.
*Main> ikiyekatla 2
                                                                                                             4
Görüldüğü üzere tanımladığımız fonksiyonun dosyasını compiler'a bağlamak için dosyanın .hs uzantısız haliyle :l nin yanına yazıyoruz.Eğer bir hata varsa bize söyler ,yoksa *Main> der ve bizden girdi bekler.Girdi olarak da ikiyekatla 2 dedim gördüğünüz gibi parantez yok tamamen serbest ve bize 4 döndü.Tabiiki dosyanın en yukarıda görüldüğü gibi user klasörünün içinde olması gerekiyor.Eğer değilse çıkın ve ghci yapmadan önce "cd dosyanın bulunduğu konumu yazın" mesela cd Desktop gibi.
Önceden de dediğimiz gibi fonksiyonların isimleri büyük harfle başlamaz ancak içinde ' karakteri olabilir.Haskell kendine özel bazı tanımlanmış fonksiyonlara sahiptir.mesela max 3 4 bize 4 döner.min 2 3 bize 2 döner.succ 2 bize 3 döner (yani bir sonraki sayı) böyle değişik kendiliğinden tanımlı fonksiyonlar var onları yeri geldiğinde söyleyeceğiz ancak burada da gördüğünüz üzere fonksiyona verilen girdilerde hiç parantez kullanmadık.Şimdi biraz daha genişletilmiş bir örneğe bakalım :
kucugukatla x y  = if x > y then x*x  else y*y 
deneme.hs dosyasına bunu yazdıktan sonra bu fonksiyonu okuması için terminale yeniden :l deneme yada :r yazacağız. Gördüğünüz gibi fonksiyonumuz iki tane girdi alıyor x ve y, x y'den büyükse x'i aksi takdirde y'yi ikiye katlıyor.burada if kullanımını da görmüş olduk.parantez olayı olmadığından bi alt satıra geçelim derdi de yok :)





 


28 Şubat 2012 Salı

Chrome'u çökertene 1 milyon dolar!

Bilişim devi Google internet tarayıcısı Chrome'u çökertebilene 1 milyon dolara kadar ödül vereceğini açıkladı.

"Pwn2Own" siber korsanlık yarışması kapsamında yarışmacılar, Windows 7 ile çalışan bilgisayarları kullanarak Chrome'a verebilecekleri zararın derecesine göre 20 bin, 40 bin veya 60 bin dolarla ödüllendirilecek. 7 Mart'ta başlayacak yarışma, dağıtılan toplam ödül bir milyon doları bulana kadar devam edecek.
Ödüller 3 kategoride 3 farklı kişiye verilecek ve her kategoride kazanan ilk yarışmacı para ile ödüllendirilecek. Ayrıca kazanan her yarışmacıya Chromebook verilecek.

Sosyal Paylaşım Sitenizde Youtube benzeri sitelerden Vidyo paylaşımını sağlamak-PHP

Bir sosyal paylaşım siteniz var ve üyelerinize değişik vidyo paylaşım sitelerinden aldıkları vidyoları paylaşma imkanı vermek istiyorsunuz.Üyeler çeşitli değişik biçimlerdeki Youtube vidyo linklerini alıp sitenizde vidyo olarak paylaşmak isteyebilirler ve siz de Youtube'ın paylaşım bloğunda yer alabilecek kadar popüler değilsiniz.O zaman adım adım ve kolayca bu işi halledebiliriz :

1.Öncelikle Youtube'nin kullandığı embed koduna bakıyoruz :

iframe src=" http://www.youtube.com/embed/9EEOWbIqQdE" allowfullscreen frameborder="0" height="349" width="560"
http://www.youtube.com/watch?v=QbdpGHbLces&feature=feedu
Bakarsanız bütün Youtube linkleri 'http://www.youtube.com/watch?v=' ile başlıyor.Embed ve izleme vidyolarını teşhis ettikten sonra bunları kullanıma hazır hale getireceğiz.

2.Vidyo linkini gerekli formumuzdan POST olarak aldık ve önündeki her linkte bulunan 'http://www.youtube.com/watch?v=' ifadesini str_replace ile kaldırıyoruz yerine boşluk koyuyoruz.(eregi_replace fonksiyonu miladını dolduruyor çünkü.)Sonra gerekli temizlikleri stripslashes,strip_tags ve mysql_real_escape_string fonksiyonlarıyla yapıyoruz.Stripslahes '\' karakterlerini silerken,strip_tags ise html ve php taglarını temizliyor.Ardından elimizde 11 haneli ve '&' karakteriyle bitmesi muhtemel bir string kalıyor.


$vidyo_linki = $_POST['vidyo_linki'];
$vidyo_linki = str_replace("http://www.youtube.com/watch?v=", "",
$vidyo_linki);
$vidyo_linki = stripslashes($vidyo_linki);
$vidyo_linki= strip_tags($vidyo_linki);
$vidyo_linki = mysql_real_escape_string($vidyo_linki);


3.Yukarıdaki örnek Youtube linkimiz temizlikten sonra 'QbdpGHbLces&feature=feedu' haline dönüştü.Direk açsaydık vidyoyu elimizde 'QbdpGHbLces' gibi bir string kalabilirdi.Şimdi amacımız '&' karakterinden önceki 11 karakter uzunluğundaki stringi alıp embed kodunda kullanmak.Bunun için explode fonksiyonu çok uygun stringi belli bir karakteri görene kadar parçalara ayırıyor.Burada diyoruzki '&' karakterini görene kadar bi parça al,ondan sonrası başka parça olsun.Yeni bir array oluşuyor ismi parca ve bu stringin bölünmüş parçalarını içeriyor.Biz sadece parca arrayinin ilk elemanını alıyoruz parca[0] bu da istediğimiz 11 karakter uzunluğunda youtube vidyo idsine eşit :) bu idyi tabi paylaşım sitesi olduğumuzdan hemen veritabanına kaydediyoruz sonradan embed kodunda kullanmak için.stringimiz '&' içermese bile yine ilk 11 karakteri almış olacağız.

$parca = explode("&", $vidyo_linki);
$vidyo_linki=$parca[0];


4.Şimdi vidyo linkini embed kodunun içine yerleştirippaylaşımı dinamik olarak yapabilirsiniz.Embedin hemen sağına gelen 11 karakterlik youtube idisiyle oluşturuluş iframe kodunu artık sitemize yerleştirip vidyo paylaşımını yapabiliriz.

iframe src="http://www.youtube.com/embed/' .$vidyo_ismi. '" allowfullscreen frameborder="0" height="349" width="425"


5.Bu yöntemi izleyerek diğer vidyo sitelerinin de embed ve normal linklerine bakarak sitenizde paylaşılabilecek vidyo ağını genişletebilirsiniz.

Formda POST ile bilgi gönderdikten sonra sayfa yenilenmesi halinde bilgilerin yeniden gönderilmesini engellemek-PHP

Bir form oluşturduk ve bu form ile bilgileri gönderdik.Ardından sayfa yenile refresh yaptığımız zaman bir uyarı geliyor ve bizden bilgileri yeniden gönderip göndermeyeceğini soruyor.Bunu çözmek için yapacağımız şey bir php kodu :
if ($_SERVER['REQUEST_METHOD']=='POST') {

header("Location: ".$_SERVER['PHP_SELF']);
exit;
}

(tabiki bu php kodunu bütün POST işlemlerimizi bitirdikten sonra koyuyoruz :))
Burada diyoruzki : eğer işlem POST ise o zaman işlemin yapıldığı anasayfaya dön.Böylece hem POST işlemimiz yapılırken,hem de sayfa yenilemede karşımıza çıkan sorun çözülüyor.

Formlarda alınan yeni satırlı yazının düz görünmesi sorunu -PHP

Formdaki yazı bölümlerine satır atlayarak yazdığımız yazıların daha sonra işlenirken veya güvenlik temizlemelerinden geçerken düz yazıya dönüşmesi gerçekten sinir bozucu.Ancak bunun çözümü çok basit bir fonksiyon: nl2br.bu fonksiyona gerekli yazıyı verdiğiniz zaman o size yeni satırları html'de anlaşılacak olan br ' ye çeviriyor:POST olarak aldığımız yazıyı direk olarak $yazi=nl2br($yazi); dersek eğer gerekli çevirimler gerçekleşir.

PHP Session Güvenliği

Üyelik sistemi kullanan web siteleri genelde sayfayı ziyaret edenlerin üye olduğunu anlamak için Session'ları kullanırlar.Session kullanmanın ise o kadar da güvenli olmadığı söyleniyor.Ancak gerekli güvenlik önerilerini kullanarak Sessionlarımızı daha güvenli bir hale getirebiliriz.
Session kullanmanın pek de güvenli olmamasının sebebi genel olarak, üyelik sistemine giriş yapan kullanıcının yarattığı Session bilgilerinin birileri tarafından ele geçirilip, taklit edilmesiyle o kullanıcının hesabını ele geçirmesi veya daha tehlikeli bir şekilde sitenin tamamını ele geçirmesi olarak ifade edebiliriz.
Üyelik sistemi olan sitelerde genel olarak, her üye başarılı bir giriş yaptığında o üyeye özel bir session oluşturulur ve üyenin çevrimiçi olup olmadığı bu sessionlarla denetlenir.
session_start();

$_SESSION['id']=$uyenin_idsi;
Genel olarak üyenin hangi üye olduğunu ayırt etmek için üyeye has id,email gibi sessionlar kullanmak gerçekten de tehlikeli olabilir. Çünkü bir şekilde bizim bu session bilgilerimizi ele geçiren bilgi hırsızları bunu oluşturdukları sessionlarla profilimizi ele geçirmek için kullanabilirler.
Peki bu durumlardan korunmak için neler yapabiliriz sorusuna cevaplarımız neler?
1.Sessionlarda üye numarası,email gibi hassas bilgileri kullanmayın.
2.Üye her giriş yaptığında onun session numarasını değiştirin.Bunun için rasgele bir şekilde sayı ve karakterler üreten fonksiyonlar yazabilirsiniz.10-11 karakter uzunluğu idealdir.
3.Sessionları veritabanında saklayın.
4.Sessionların yok olma sürelerini kısa tutun.
5.Session değerlerine sayfanın linkinde asla yer vermeyin.
Birinci maddenin nedenini açıkladık.İkincisi ise gayet basit : sessionların karmaşık olması bizim kimliğimizin tahmin edilmesini zorlaştırır.Üçüncü madde ise bizim işimize çok yarayacak bir madde.Bunun için veritabanımızda sessionlar için bir tablo yaratmamız yeterli.Tablomuzda 2 sütun olmalı en az : biri session değeri, ikincisi ise o sessionun hangi üye için yaratıldığı. Bu bize bir çok kolaylık sağlar. Birincisi random bir session değeri yaratıldığı zaman yaratılan bu sessionun önceden bulunan sessionlara eşit olup olmadığını denetleyebiliriz.Eğer sessionumuz mevcut sessionlarda varsa, küçük bir olasılık, başka bir session oluşturup veritabanına kaydedebiliriz.İkincisi ve daha önemli avantaj ise bu bizim sadece bir session değerine bağlı kalmamızı önler.Çünkü veritabanına kaydettiğimiz karmaşık sessionların hangi üyeye ait olduğunu biliriz.
Her girişte ayrı bir session değeri vermek bilgi hırsızlarının bizim sabit bir sessionumuz olmadığından işini zorlaştırır ve hesabımızı ele geçirmek için kullanabileceği session değerlerine ulaşmalarını engeller.
Her sayfa yenilemede de ayrı bir session değeri atanması bile güvenlik çılgınları için düşünülebilir bir seçenek :)

Taslak fonksiyon yazarak verilen değerlerin en büyüğünü bulmak (c++)

Template (taslak) fonksiyon yazmakta zorlanan mühendislik okuyan
arkadaşlarım için küçük bir örnek vermek istedim
Template fonksiyonların amacı aynı fonksiyonu birden fazla
türde veriyle kullanmaktır.
Mesela en büyük bulma fonksiyonunda hem char hem int cinsleri için
geçerli olabilecek fonksiyonlar yazabiliriz.
Şimdi arkadaşımın ricası üzerinde verilen 3 aynı türde değerin
en büyüğünü bulma fonksiyonunu yazıyoruz.

#include
using namespace std;
//T kullanacağımız cinsi belirten kısaltma oluyor.
template <class T> // bu göstergeyi kesinlikle template fonksiyon tanımlarken kulanmalı
T ucenbuyuk (T a, T b,T c) {
T sonuc1;
T sonuc2;
sonuc1 = (a>b)? a : b;
//bu kısa yazılımın anlamı a b den // buyukse a,aksi halde b sonuc1 e eşittir demek.
//if ve else kullanılarak aynı şeyler yapılabilir.
sonuc2 = (sonuc1>b)? sonuc1 : b;
//sonuc1 a ile b nin büyüğü sonuc2 ise sonuc1 ile c nin büyüğü olduğundan
// sonuc2 en büyük değer oluyor bu yüzden sonuc2 bizim max değerimiz oluyor
return (sonuc2);
}
Peki template olarak tanımladığımız bir fonksiyonu nasıl kullanabiliriz? hemen örnekleyelim

int main ()
{
int i=5, j=6, k=7,l;
char l='a', m='b', n='c',r;
l=ucenbuyuk<int>(i,j,k);
n=ucenbuyuk<char>(l,m,n);
cout << k << endl;
cout << n << endl;
return 0; }
Yani görüldüğü üzere ucenbuyuk<int>(i,j,k) diyerek kullandığımız fonksiyonda göstergesini
kullanarak bu fonksiyonu int olarak çağırcağımızı belli ediyoruz.