PHP kod yapısı ve yorum satırları

PHP kodları sunucu (server) tarafında çalıştırılır ve HTML üretilip çağıran tarayıcıya gönderilir. PHP dosyaları metin dosyalarıdır. Varsayılan dosya uzantısı “.php” dir.

Yazdığımız kodların PHP kodları olduğunu belirtmek için aşağıdaki yapıyı kullanırız:

<?php
   // Kodlar buraya 
?>

“Kodlar buraya” kısmına yazdıklarımız PHP kodları olarak değerlendirilir. PHP’nin kurallarına uyarak yazılan kodların HTML çıktıları tarayıcıya gönderilir. Bir örnek üzerinde ne demek istediğimi anlatayım. Aşağıdaki php kodlarını yazıp çalıştırın. (Nasıl yapılacağı ile ilgili PHP dosyalarımızı nasıl çalıştırırız? makalemize bakabilirsiniz)

<!DOCTYPE html>
<html>
<body>

<h1>PHP Öğreniyorum</h1>

<?php
//echo komutu birşeyleri yazdırmak için kullanılır.
echo 5*3;
?>

</body>
</html>

Tarayıcıda görüntüsü şu şekilde olacaktır:

echo satırının sonucu

PHP kodlarınız çalıştırılıyor ve üretilen HTML tarayıcıda görüntüleniyor. 3*5 ifadesi 3 ile 5’in çarpımı demektir. Sonuç olarak 15 sayısı echo ile yazdırılmıştır.

PHP satırları noktalı virgül (;) ile biter.

Yorum Satırı // , # , /* */

Yukarıdaki kodda görülen

//echo komutu birşeyleri yazdırmak için kullanılır.
# Bu şekilde de yazılabilir.

satırı PHP tarafından dikkate alınmaz, yani çalıştırılıp sonuç üretilmez, yorum satırıdır. Tek satır yorum yazmak için // veya # kullanılır.

Birden fazla satır yorum yazmak için ise aşağıdaki ifade kullanılır.

/*
Birden fazla satır kullanılarak 
yazılmış olan 
yorum satırları
*/

Büyük / Küçük Harf Duyarlılığı

PHP için ayrılmış olan kelimeler (if, else, for, echo vb.) kullanılırken büyük / küçük harf ayrımı yapmadan yazabilirsiniz. Yani ECHO, echo, Echo aynı şeyi ifade eder.

Fakat değişken isimleri büyük / küçük harf duyarlıdır. Yani $numara, $Numara, $NUMARA veya $NuMaRa farklı birer değişkendir.

Görüşmek üzere…

PHP dosyalarımızı nasıl çalıştırırız?

Bu makale, kendi bilgisayarınızda PHP dosyalarınızı nasıl çalıştırılacağınızı anlatır.

HTML sayfalarımızı yazdıktan sonra denemek için tarayıcı (Chrome, Microsoft Edge, Firefox vb.) ile açıp inceleyebiliyoruz. PHP dosyaları bu şekilde incelenemiyor, çünkü yazılan PHP kodlarının değerlendirilip sonuç üretilmesi için web server üzerinde çalıştırılması gerekiyor.

Ben bu iş için XAMPP tercih ediyorum. Kendi ifadeleri ile “XAMPP en popüler PHP geliştirme ortamı”. Bu paket Apache web server programı, MariaDB (MySQL), PHP ve Perl içeriyor. Tek program kuruyoruz ve her birinin ayarları ile tek tek uğraşmaya gerek kalmıyor. Bu adresi ziyaret edip işletim sisteminize uygun olan sürümü indirebilirsiniz.

Bu videoda kurulum ve kullanım adımları anlatılıyor

PHP yazmak için herhangi bir metin editörü yeterli. Biraz daha özellik isterseniz (kod renklendirme, tamamlama vb.) Atom ya da Sublime Text deneyebilirsiniz.

XAMPP çalışırken Ekran Görüntüsü

İlk PHP scriptimizi yazalım

Tercih ettiğiniz editörü kullanarak aşağıdaki kodları yazın:

<?php

echo "Merhaba Dünya!"

?>

Bunu bir hello.php ismi ile kayıt edeceğiz. Fakat herhangi bir yere değil!

Kayıt edeceğimiz yer XAMPP programının sunucu ana klasörü olan “C:\xampp\htdocs” klasörü (Windows kullanıcıları için geçerli). Dosyanızı buraya kayıt edin.

Favori tarayıcınız açın. Adres çubuğuna http://localhost/hello.php yazın.

hello.php ekran görüntüsü

Tarayıcınıza yazdığınız localhost kendi bilgisayarınızı temsil ediyor. (127.0.0.1 de yazabilirsiniz.) hello.php dosyasını ana klasörde olduğu için doğrudan yazabiliyoruz. Dosyayı eğer htdocs klasörünün içinde başka bir klasöre (varsayalım deneme olsun) koyarsanız o zaman adres çubuğuna localhost/deneme/hello.php yazmanız gerekir.

Tebrikler, ilk PHP scriptinizi yazdınız ve çalıştırdınız.

Görüşmek üzere…

Flutter’da Ekran Yönü Kilitleme

Bu makale, Flutter’da setPreferredOrientations metodu kulanarak ekran yönünün nasıl kilitleneceğini anlatır.

Mobil uygulama hazırlarken bazen cihaz yan çevrilince uygulamamızın ekran görüntüsünün sabit kalmasını isteriz. Kullanıcı ekranı yatay ya da dikey kullanımlarında bizim uygulamamız sabit kalmalı ise aşağıdaki kodlar işimizi görecektir.

Öncelikle services.dart kütüphanesini ekliyoruz.

import 'package:flutter/services.dart';

SystemChrome.setPreferredOrientations metodu ile uygulama arabiriminin görüntüleyebileceği yönler kümesini belirtiriz. portraitUp ve portraitDown kullanarak uygulamamızın cihazın dikey konumda olduğu gibi görüntülenmesini yatay konuma geçince otomatik olarak uygulamamızın görüntüsünün değişmemesini sağlıyoruz.

SystemChrome.setPreferredOrientations([
  DeviceOrientation.portraitUp,
  DeviceOrientation.portraitDown,
]);

Yönler kümesi içinde kullanılabilecek olan yönler:

landscapeLeft
landscapeRight 
portraitDown 
portraitUp

Gelelim bu kodları nerede kullanacağımıza:

Widget build edilirken kullanılabilir

@override
  Widget build(BuildContext context) {
    if (Platform.isAndroid)
      SystemChrome.setPreferredOrientations([
        DeviceOrientation.portraitUp,
        DeviceOrientation.portraitDown,
      ]);
......

Ya da Widget yüklenirken aktif etmek istersek, initState içinde çalıştırabiliriz

@override
void initState(){
  super.initState();
  SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
    DeviceOrientation.portraitDown,
  ]);
}

Bu özelliği aktif hale getirdikten sonra uygulamamızın diğer ekranlarında pasif hale getirmek istersek, dispose olayına

@override
dispose(){
  SystemChrome.setPreferredOrientations([
    DeviceOrientation.landscapeRight,
    DeviceOrientation.landscapeLeft,
    DeviceOrientation.portraitUp,
    DeviceOrientation.portraitDown,
  ]);
  super.dispose();
}

yazmamız yeterli.

setPreferredOrientations metodu doküman sayfası için tıklayınız.

Görüşmek üzere…

Firebase Android Projemize Nasıl Eklenir?

Bu makale, Android uygulamamızda Google Firebase’i kullanmak için ilk adım olarak Firebase’i uygulamamıza eklemeyi anlatır.

Öncelikle, Firebase için herşeyin doğru versiyon olup olmadığını kontrol edeceğiz. Sonra Firebase Console kullanarak projemizi oluşturacağız. Ve son olarak da Android geliştirme tarafında Firebase için projemizde bazı modifikasyonlar yapacağız.

1. Oluşturduğumuz projeyi test etmek için kullandığımız Android cihazımız ya da emülatörümüz en az Android 4.0 (Ice Cream Sandwich) olmalı

2. Play Service 9.0 ya da daha yeni olmalı

3. Android Studio’nun yeni versiyonu olmalı.

Bir de Android SDK’yı kontrol etmelisiniz. Firebase’ın youtube kanalındaki 2016 yılındaki videosuna göre, Google Play Services Revision 30 veya daha yenisi, Google Repository Revision ise 26 ve daha yukarı olmalı. Benim sistemimdekiler aşağıdaki resimde görülüyor. Kontrol etmek isterseniz, Android Studio’yu açtıktan sonra toolbardan Android SDK Manager açılır. Oradan SDK Tools menüsü ile karşınıza aşağıdaki ekran gelecektir. İşaretlediklerimin yüklü ve versiyonlarının da doğru olması gerekir.

Android SDK kontrol

Daha sonra firebase.google.com adresine giriyoruz. Sağ üstteki Konsola Git butonu ile konsola ulaşıyoruz. Daha sonra aşağıdaki ekranda görüldüğü gibi Proje Ekle seçeneği ile projemizi ekleyeceğimiz forma ulaşıyoruz.

Firebase Proje Ekle

Projemize bir isim veriyoruz. Daha sonra Konumlar (Analitycs) kısmında ülkeyi seçiyoruz. Bu kısım kuruluşumuzun ülkesini temsil ediyor, gelir raporu için para birimini belirliyor. Proje Oluştur butonuna bastığınızda karşınıza projenizle ilgili sayfanız gelecektir.

Daha sonra tam ortada bulunan Android butonuna basarak Firebase’i Android uygulamamıza ekleme işlemlerine başlıyoruz.

Firebase'i Android'e Ekle

Aşağıdaki ekran gelecektir. Bu ekranda Android paket adını ve SHA-1 imza sertifikası alanlarını doldurmamız gerekmekte.

Firebase Uygulama Kayıt

Android paket adı kısmını doldurmak için, Android Studio’yu açıyoruz. build.gradle dosyasından applicationId değerini alıyoruz ve bu alana kopyalıyoruz.

İkinci kısmı doldurmak için kendi SHA-1 debug key’imize ihtiyacımız olacak. SHA-1 Firebase’e bizim debug uygulamamızın Firebase servislerini kullanmaya yetkili olduğunu kanıtlayacak. Bu kısım Uzaktan Yapılandırma (Remote Config), Kimlik Doğrulama (Authentication) gibi işlemleri yapacak iseniz gerekli. Nasıl bulunduğuna bakalım:

SHA-1 hash’i elde etmek için komut satırı arayüzünü açıyoruz. Ve aşağıdaki komutu giriyoruz.

keytool -exportcert -list -v -alias androiddebugkey -keystore C:\Users\ayhankoc\.android\debug.keystore

Komutun sonundaki kısmı kendi bilgisayarınızdaki kullanıcı dizininiz ile değiştirmeyi unutmayın.

Komutu çalıştırdıktan sonra keystore parolası isteyecektir. Varsayılan parola olarak android girin. Parolayı girdikten sonra istediğimiz bilgiye ulaşacağız. Çıkan listeden SHA1’in yanındaki sayıları kopyalıyoruz. Şöyle bir şeye benzeyecektir:

1C:E6:7C:AF:22:26:37:3F:D8:C4:DF:A9:33:5B:62:14:33:52:78:19

İki bilgiyi de girdikten sonra Uygulamayı Kaydet butonuna basıyoruz. Karşımıza gelen ekrandan google-services.json dosyasını indiriyoruz. Ve resimde görüldüğü gibi projemizini ana klasöründeki app klasörü altına taşıyoruz.

Google Json indir

Firebase ayarlarınızı daha sonra değiştirirseniz, güncellenmiş JSON dosyasını indirmeniz ve projenize eklemeniz gerekecektir.

Firebase istemci kütüphanesini uygulamamıza eklemek için Gradle dosyalarında birkaç ekleme yapmamız gerekiyor. İlk olarak proje düzeyindeki build.gradle dosyasını açıyoruz. Ve dependencies bölümüne aşağıdaki satırı ilave ediyoruz.

buildscript {
  dependencies {
    // Alttaki satırı ekleyin
    classpath 'com.google.gms:google-services:4.0.1'
  }
}

Ekleme yapacağımız diğer dosya uygulama düzeyindeki build.gradle dosyası. Aşağıdaki eklemeyi yapıyoruz. Bu plugin biraz önce indirdiğimiz json dosyasını okuyacak ve içerisindeki bilgileri buraya aktaracaktır.

// Dosyanın en altına alttaki satırı ekleyin
apply plugin: 'com.google.gms.google-services'

Son değişikliğimiz ise Firebase core ile ilgili. Son versiyonu kullandığımızdan emin olmak için Firebase Android Setup dokümanına gidiyoruz. Oradaki son versiyonu alıp build.gradle dosyamızda dependencies bölümüne ekliyoruz.

Firabase Core uygun kütüphaneler

dependencies { 
// Alttaki satırı ekleyin 
implementation 'com.google.firebase:firebase-core:16.0.5' 
}

Tüm eklemeleri yaptıktan sonra Gradle’ı senkronize etmek gerekiyor.

Sync Gradle

Senkronizasyon işlemi bittikten sonra, uygulamızı emülatör üzerinden çalıştırabiliriz (ya da fiziksel cihaz üzerinden). Uygulamamızı çalıştırırken Firebase Konsol’dan uygulamamızı eklediğimiz adımların sonuncusunda Firebase uygulamamızın sunucu ile olan bağlantısınıı bekleyecek ve uygulamamız çalıştığında aşağıdaki penceredeki gibi bir şeyle karşılaşacağız.

Firebase Tebrikler

 

Başarıyla uygulamamıza Firebase’i ekledik.

Görüşmek üzere…

 

Yarım Toplayıcı ve Tam Toplayıcı (Half Adder – Full Adder)

Bu makalede, mantık kapılarını kullanarak ikili toplama işleminin nasıl yapıldığı, yarım ve tam toplayıcı anlatılmıştır. Yarım ve tam toplayıcı devrelerinin doğruluk tabloları ve tasarımları da gösterilmektedir.

Boolean Mantığı Nasıl Çalışır isimli makalemizde mantıksal kapıların nasıl çalıştığına, Bit ve byte ile ilgili makalemizde ise ikili sayılarda toplama işlemine basitçe değinmiştik.

Tek bitlik toplama (ekleme) işlemi yapmak istediğimizi varsayalım. Bu işlemi yapabilecek bir devre tasarlamaya tüm mantıksal kombinasyonları yazarak başlayalım:

0 + 0 =  0
0 + 1 =  1
1 + 0 =  1
1 + 1 = 10

Görüldüğü gibi çok basit. Bu işlem istenilirse aşağıdaki gibi de gösterilir ki bizim işimizi daha kolaylaştırır.

0 + 0 = 00
0 + 1 = 01
1 + 0 = 01
1 + 1 = 10

Tek sorun 1+1 işlemindeki taşma. Carry bit (taşma biti) önemsemez isek, devrenin çıkışlarına bakıldığında XOR kapısı ile çıkışlar aynı olduğu için devre XOR kapısı ile çözülür.

Yarım Toplayıcı (Half Adder)

Yarım Toplayıcı (Half Adder) Doğruluk Tablosu

CO : Carry-Out => Elde

Bu tabloya baktığımızda, çıkış Q için XOR kapısı ve elde CO için bir AND kapısı ile 1-bitlik toplayıcı devresi yapılır.

Yarım Toplayıcı Devresi
Yarım Toplayıcı Devresi

İki tane 8 bitlik toplama yapmak istersek işler biraz karışabilir. Toplama yaparken elde biti bir sonraki basamağa ilave edilmelidir. Bunu yapacak devreyi tasarlamak 3 giriş biti kullanmalıyız. Birisi CI: Carry In (Elde girişi) ki bu önceki basamaktan gelecek, A ve B girişleri. Çıkış olarak Q ve CO: Carry Out (Elde). 3 giriş bitli bu devreye tam toplayıcı (full adder) denir. 8 tam toplayıcıyı bir araya getirerek bir byte’lık bir toplama yapabiliriz ve bir bitin diğerine taşma bitini kademelendirebiliriz.

Tam Toplayıcı (Full Adder)

Tam Toplayıcı Doğruluk Tablosu
Tam Toplayıcı Doğruluk Tablosu

Tabloyu dikkatle incelersek, Q bitinin üst 4 tanesinin A ve B girişlerine göre XOR kapısı, alttaki 4 bitinin ise XNOR kapısı gibi davrandığını görebiliriz. CO’nun üstteki 4 bitinin A ve B’ye göre AND kapısı, alttaki 4 bitin ise OR kapısı gibi davrandığını görebiliriz. Aşağıdaki devre CI’nin de dahil edilmesiyle elde edilen tam toplayıcı devresidir.

Tam Toplayıcı
Tam Toplayıcı

Tam toplayıcı devresi için en uygun çözüm bu devre değil fakat tablodan devreye nasıl dönüştürülebileceğine dair bir örnek olması açısından önemli.

Yarım toplayıcıları artarda ekleyerek tam toplayıcı devresi yapmak da mümkün. Bu şekilde daha az mantık kapısı kullanılmış olacaktır.

Tam Toplayıcı Devresi
Tam Toplayıcı Devresi

İki devre de aynı işi yapmakla beraber daha az mantık kapısı kullanan devre tercih edilir.

Devreleri daha kolay çizebilmek için tam toplayıcı bir kutu şeklinde de gösterebiliriz.

Tam Toplayıcı Box
Tam Toplayıcı Box

Kutu şeklinde çizmek kapılarla çizmekten kolay olduğu gibi, içerisinde olanları her defasında düşünmektense sadece mantığına odaklanmamızı da sağlıyor. CI yani elde girişini ve A ile B girişlerini toplayarak Q çıkışını ve CO yani taşmayı üreten bir kutu çizmiş olduk.

4-bit toplama yapmak istediğimizde 4 adet tam toplayıcıyı birbirlerine aşağıdaki gibi bağlayabiliriz.

4 Bit Tam Toplayıcı Devresi
4 Bit Tam Toplayıcı Devresi

Tam toplayıcıda CO’lar diğer basamağı oluşturan tam toplayıcının CI girişine verilmiştir. Böylece eldeli 4 bitlik toplama devresi oluşturulmuştur. Toplama işlemini yaparken ilk önce Elde (CI) biti ile beraber A0 ve B0 toplanır ve Q0 değeri elde edilir. Daha sonra işlemde elde var ise A1 ve B1 toplamına ilave edilir Q1 elde edilir. İşlem bu şekilde devam ederek 4 bitlik toplama işlemi yapılır. (Bazı gösterimlerde Q yerine Sum – toplam anlamında S kullanılabilir.)

4 bit toplama

Bu zinciri istediğimiz kadar uzatıp örneğin 8, 16 veya 32 bitlik toplayıcılar elde edebiliriz.

4-bitlik bu toplayıcı ripple-carry yani dalgalanma taşıyan toplayıcı olarak adlandırılır. Dalgalanma tabiri elde bitlerinin bir toplayıcıdan diğerine aktarılması bir anlamda dalgalanmasından gelir. Bu uygulama basitlik avantajına sahiptir fakat hız olarak bir dezavantaja sahiptir. Gerçek bir devrede kapıların çıkışları anında değişmez. Çıkış ve elde oluşması biraz zaman alır. Bu zaman nanosaniye boyutundadır fakat yüksek hızlı bilgisayarlar için bu zaman önemlidir. Bir toplayıcının çıkış durumunun değişme zamanını örnek olarak 20 nanosaniye düşünürsek 4 bitlik bir toplayıcıda nihai toplam ancak 80 nanosaniyede elde edilebilir. Zaman problemini çözmek için Carry-lookahead toplayıcıları geliştirilmiştir. Carry-lookahead toplayıcılarını yapmak için daha fazla kapı gereklidir ancak çıkışları çok daha hızlı gereken değeri alabilirler.

Entegre Devre Toplayıcılar

Yarım toplayıcılar ile sadece 1 bit toplama yapılabildiği için pratikte tam toplayıcılar kullanılır. Çünkü tam toplayıcılar ile 1 bitlik sayılar da toplanabilir. Toplanmak istenen bit sayısı artınca devreler karmaşıklaşır ve kullanılacak kapı ve dolayısıyla entegre sayısı artar. Bunun için toplayıcılar entegre devre haline getirilmiştir. 4 bitlik paralel toplayıcı entegreleri 7483, 74283, 54283 ve 4008 dir. Örnek olarak CD4008BMS isimli entegrenin katalog bilgilerine buradan ulaşabilirsiniz.

Entegrenin görünüşü ise bu şekilde:

7483 entegresi

 

Bacak bağlantı ise aşağıdaki gibidir.

7483 Bacak Bağlantıları

Bu makalemizde bilgisayarın en fazla yaptığı iş olan toplama işlemi üzerinde durduk. Diğer makalemizde görüşmek üzere…

 

Bit ve Byte Nedir?

Bilgisayar kullanan her insan mutlaka bit ve byte kavramlarını duymuştur. Bilgisayarımızın ana belleği olan RAM ve dosyalarımızı kayıt ettiğimiz Harddisk, CD-ROM, DVD-ROM, Blue-Ray, Flash disk gibi cihazların kapasiteleri byte ile ölçülür. İşletim sistemlerinde dosya görüntüleyici kullanarak özellilklerinden dosyalarınızın boyutlarına baktığınızda byte cinsinden ölçüldüğünü görürsünüz.

Dosya Özellikleri

“CORE İ3 5005U 2.0GHZ-4GB RAM-500GB HDD-15.6″W10 NOTEBOOK” yazan reklemları görmüşsünüzdür. Bu bilgisayarda 4 Gigabyte Ram, 500 Gigabyte harddisk var. Bu makalede bit ve byte kavramlarından bahsedip tam olarak anlamanıza yardımcı olacağız.

Onlu Sayılar (Decimal Numbers)

Bitleri anlamanın en kolay yolu bunları bildiğimiz bir şeyle karşılaştırmak olacaktır, Rakamlar. Rakam sayıları göstermek için kullandığımız sembollerdir. Onlu sayma sisteminin rakamları 0,1,2,3,4,5,6,7,8 ve 9 ‘dur. Bir rakam bir basamak yer kaplar. Bir basamaktan büyük sayıları oluşturmak için rakamları gruplar halinde birleştiririz. Örneğin, 1508 sayısı dört basamaklı bir sayıdır. 1508 sayısında 8’in “birler”, 0’ın “onlar”, 5’in “yüzler”, 1’in ise “binler” basamağında olduğunu söyleriz. Rakamlar bulundukları basamak kuvvetine göre değer alırlar.

(1 * 1000) + (5 * 100) + (0 * 10) + (8 * 1) = 1000 + 500 + 0 + 8 = 1508

Bunu 10’lu sistemin basamak kuvvetlerini kullanarak da ifade edebiliriz. “^” sembol üs alma işlemini belirtiyoruz. (Örneğin 10’un karesini 10^2 ile göstermiş oluyoruz.)

(1 * 10^3) + (5 * 10^2) + (0 * 10^1) + (8 * 10^0) = 1000 + 500 + 0 + 8 = 1508

Bu ifadede dikkat ederseniz, ilk basamak 10’un 0. kuvveti olan 1 ile başlıyor. Bu bizim “birler” basamağımız. Sola doğru gittikçe kuvvet 1 artıyor. Böylece “onlar”, “yüzler”, “binler” … basamakları elde ediliyor.

10’lu sistemi günlük hayatımızda her yerde kulllanıyoruz. Belki de 10 parmağımız olduğu için bu sistemi kullanıyoruz. 8 parmağımız olsaydı belki de 8’li sayı sistemi kullanıyor olabilirdik. Sekizli sayı sistemi Octal sayı sistemi olarak adlandırılır. Örneğin, Sümerler 60’lı sayı sistemi kullanıyorlardı. Bilgisayarlar ise 2’li sayı sistemi kullanırlar.

İkili Sayılar (Binary Numbers)

Bilgisayarlar base-2 yani 2’li sayı sistemi kullanırlar. Bunun nedeni, bilgisayarları mevcut elektronik teknoloji ile gerçekleştirmenin daha kolay olmasıdır. Base-10 yani 10’lu sistemi kullanan bilgisayarlar da yapılabilir fakat çok daha pahalıya mal olacaktır. 2’li sistem nispeten ucuzdur.

Bit kelimesi “Binary digIT” yani ikili basamak (ikili rakam) kelimesinden gelir. Ondalık basamaklar 0 ile 9 arasında değişen 10 farklı değere sahip olsa da, bitlerin yalnızca iki olası değeri vardır: 0 ve 1. Bu nedenle, bir ikili sayı sadec 0 ve 1’lerden oluşur. Örneğin: 1001.

1001 ikili sayısının değerinin ne olduğunu nasıl anlayabiliriz?

Çözüm yukarıda 10’lu sistemde yaptığımız gibi bulunur. Sadece 10 yerine 2 tabanını kullanacağız. Şöyle ki:

(1 * 2^3) + (0 * 2^2) + (0 * 2^1) + (1 * 2^0) = 8 + 0 + 0 + 1 = 9

Aşağıda ikili sayılardan bazılarını görebilirsiniz. 0’dan 16’ya kadar 10’lu sayılar ve o sayıların 2’li karşılıkları:

0 =      0
1 =      1
2 =     10
3 =     11
4 =    100
5 =    101
6 =    110
7 =    111
8 =   1000
9 =   1001
10 =  1010
11 =  1011
12 =  1100
13 =  1101
14 =  1110
15 =  1111
16 = 10000

Basamak sayılarına dikkat ederseniz, 2’nin katları olan 2,4,8, ve 16 sayılarının karşılıklarında bir artmaktadır. Bir bit 1 ise ona 1 ilave ettiğinizde ondalık sistemde 2 olacaktır. İkili sayı sisteminde ise 2 rakamı bulunmadığından yukarıda görüldüğü üzere 2 sayısı 10 ile gösterilmektedir. Yani 1 sayısına 1 ilave ettiğinizde 2 basamaklı bir sayı elde edersiniz. Onlu sistemde düşünürsek 9 sayısına 1 ilave ettiğinizde 10 elde edersiniz ve bunu da 2 basamak ile gösterirsiniz.

Bilgisayar dünyasında bitler nadir olarak yalnız görünürler. Çünkü 1 bit ile sadece 2 durumu ifade edebiliriz. Neredeyse her zaman 8 bitlik gruplar halinde kullanılırlar. Ve bu 8 bite 1 byte denir.

1 byte ile yani 8 bit ile 256 farklı değeri ifade edebiliriz.

  0 = 00000000
  1 = 00000001
  2 = 00000010
  3 = 00000011
   ...
253 = 11111101
254 = 11111110
255 = 11111111

Standart ASCII Karakter Seti

Metin belgelerindeki her bir karakteri ifade etmek için 1 byte kullanılır. ASCII karakter setinde 0 ile 127 arasındaki her bir ikili değere bir karakter ataması yapılmıştır. Yani hangi ikili sayının hangi karakteri temsil edeceği standart hale getirilmiştir. 1 byte ile gösterilebilecek 256 değerin, 0 ile 127 den sonraki 128 ile 255 arasındaki karakterler, aksanlı karakterler ve özel karakterlerden oluşur. ASCII tablosuna bu adresten ulaşabilirsiniz.

Bilgisayarlar metin belgelerini hem diskte hem bellekte karakterlerin ASCII kodlarını kullanarak saklarlar. Örnek olarak, Windows işletim sisteminde Not Defterini açın. “Bilisim Makaleleri” yazısını yazıp herhangi bir isimle kayıt edin. Dosyanızı dosyanızın boyutuna bakın (Dosya yöneticisinden dosyanızın üzerine gelip sağ tuş menüsünden Özellikleri seçerek). Dosyanız disk üzerinde her bir karakter için 1 byte kullanarak 18 byte yer kapladığını  göreceksiniz. (Boşluk da bir karakterdir -ASCII karakteri 32- ve 1 byte yer kaplar.)

Byte Katları ve İkili Matematik

Çok sayıda byte ile çalışmaya başladığımızda kilobyte, megabyte, gigabyte gibi byte’ın üst katlarına ihtiyaç duyarız.

Binary sisteminde çarpanlar:

Kilo (K)  : 2^10 = 1024

Mega (M) : 2^20 = 1.048.576

Giga (G) : 2^30 = 1.073.741.824

Tera (T) : 2^40 = 1.099.511.627.776

Peta (P) : 2^50 = 1.125.899.906.842.624

Exa (E) : 2^60 = 1.152.921.504.606.846.976

Zetta (Z) : 2^70 = 1.180.591.620.717.411.303.424

Yotta (Y) : 2^80 = 1.208.925.819.614.629.174.706.176

Tablodan Kilo’nun yaklaşık bin, Mega’nın yaklaşık bir milyon, Giga’nın yaklaşık bir milyar kat olduğunu görebiliriz. “Bu bilgisayarın 2 TB sabit diski var” dendiğinde, 2 tera byte veya 2 trilyon byte ya da tam olarak 2.199.023.255.552 byte kapasiteye sahip olduğunu anlayabiliriz.Bir CD-ROM’un yaklaşık 650 MB alana sahip olduğunu düşünürsek 2 TB’lık bir diski kapasitesini daha rahat anlayabiliriz.

2 TB’lık disk ile:

  • Tanesi 4 MB’dan yaklaşık 500 bin adet mp3 formatında şarkı
  • Ortalama boyutu 700 MB’dan yaklaşık 2800 civarında film
  • 1 GB’lık yaklaşık 2000 adet oyun
  • 100 KB’lık fotoğraflardan 2 milyon adet depolayabiliriz.

İkili Matematik

İkili matematik aslında ondalık matematik gibi çalışır.Ancak her bitin değeri 0 ya da 1 olabilir. Ondalık matematiği ele alalım sonra ikili matematikten devam edelim:

  582
+ 765
  ---
 1347

Bu iki sayıyı toplamak istediğimizde, önce sağ taraftan (birler basamağından) başlayıp, 2 + 5 = 7 işlemi yapılır. Sonra 8 + 6 = 14 işlemi yapılarak 4 sayısı yazılı. 1 sayısı diğer basamağa taşar. Daha sonra 1 + 5 + 7 = 13 işlemi yapılarak önce yüzler basamağına 3 yazılır. Artan 1 binler basamağına yazılarak 1347 sonucu bulunur.

Aynı yolla ikili sayıları toplayalım:

  011
+ 101
  ---
 1000

En sağdan başlayalım, 1 + 1 = 10 yapar (ikili sayı sistemindeki 10 sayısı onlu sistemde 2’ye eşittir). 0 sonucun birler basamağına yazılır. Artan bir ile beraber 1 + 1 + 0 = 10 işlemi yapılır. 0, sonucun ikiler basamağına yazılır. Artan bir ile beraber 1 + 0 + 1 = 10 işlemi yapılır. 0, sonucun dörtler basamağına yazılır. Artan 1 ise başka işlem olmadığı için sonucun sekizler basamağına yazılarak işlem bitirilir.

Bu makalemizde bit ve byte hakkında bilgi vermeye çalıştık. Umarım faydalı olmuştur.

Görüşmek üzere…

Referans:

https://computer.howstuffworks.com/bytes.htm

Yorumlayıcı (Interpreter) ve Derleyici (Compiler) Nedir?

Programlama konusundaki makalemizde, yazdığımız kaynak kodun makine diline çevrilmesinden bahsetmiştik. Okumadıysanız önce onu okumanızı öneririz: Programlama Nedir?

Genel olarak yüksek seviyeli bir dil kullanarak bilgisayar programı yazarız. Yüksek seviyeli bir dil, bizim tarafımızdan anlaşılır bir dildir. Programlama dillerinin çoğu İngilizce kelime ve kelime grupları içeren anahtar kelimeler kullanırlar. Fakat bilgisayarlar bu kelimeleri anlamazlar. Sadece makine kodu denilen 0’lar ve 1’lerle yazılmış olan programları anlarlar.

Yüksek seviyeli dil ile yazılmış olan programa kaynak kodu denir. Kaynak kodunun bilgisayarda çalıştırılabilmesi için makine koduna dönüştürülmesi gerekir. İşte bu iş ya Derleyici (Compiler) ya da Yorumlayıcı (Interpreter) tarafından gerçekleştirilir.

Derleyici (Compiler)

Derleyici (Compiler), girdi olarak yüksek seviyeli programlama diliyle yazılmış kaynak kodu alan, makinenin mimarisine göre makine dilinde çıktı üreten bir programdır. Çıktı olarak üretilen makine kodu sonradan herhangi bir zamanda farklı girdilerle tekrar tekrar çalıştırılabilir.

Örnek olarak; Java derleyicisi javac verilebilir. Javac, .java uzantılı kaynak dosyasını Java Sanal Makinesi (Java Virtual Machine)  olarak bilinen bir hayali makine için  makine dili olan Java bytecode ile yazılmış .class dosyasına dönüştürür.

Derleyici, kaynak kodu derlemeden önce kodları kontrol eder. Herhangi bir yazım hatası veya derleyicinin sevmediği durumlar var ise bu raporlanır. Bu da tam olarak çalışan program elde etmeden önce tüm kodlama hatalarını düzeltmemizi sağlar. Ancak bir programın başarılı olarak derlenmiş olması tam olarak hatasız olduğu ve istenileni yapacağı anlamına gelmez. Programımızı çeşitli verilerle test edip, mantıksal olarak da çalıştığından emin olmamız gerekir.

Eğer Linux işletim sistemi üzerinde derlenmiş olan bir C programımız var ise derlenmiş olan bu programı kopyalayıp Windows işletim sistemi üzerinde çalışmasını bekleyemeyiz. Windows üzerinde aynı C programımızı çalıştırmak istersek, Windows bilgisayarda bir C derleyicisi kullanarak programı yeniden derlememiz gerekecektir.

Yorumlayıcı (Interpreter)

Yorumlayıcı (Interpreter), girdi olarak program için olan verilerle birlikte kaynak kodu alan, ve kaynak programı satır satır yürüten bir programdır.

Örnek olarak Java yorumlayıcısı java verilebilir. Java .class uzantılı dosyayı üzerinde çalıştığı makinede çalıştırılabilecek olan doğal makine kodlarına çevirir.

Java’da derleyici ve yorumlayıcı beraber çalışır. Yani, önce oluşturulan kaynak koddan bir ara kod (bytecode) üretilmek için derlenir. Daha sonra bu derlenen bytecode Java Sanal Makinesi (JVM) üzerinde yorumlanarak yürütülür. Bu bazı avantajları da beraberinde getirir. En önemlisi platform bağımsızlığıdır. JVM çalışan her makinede bytecode’larımız sorunsuz çalışacaktır. İkinci avantajı ise Java bytecode’umuz bir sanal makine üzerinde çalıştığı için kötü amaçlı programlara karşı koruma sağlayan bir güvenlik katmanı ile korunmuş oluruz.

Java bytecode ve java yorumlayıcısı sadece Java dilinde kullanılmaz. Örnek olarak, Jython’u Python dilinden Java bytecode’una derlemek için kullanabiliriz ve daha sonra da yorumlamak için java‘yı kullanabiliriz. Ayrıca ML, Lisp ve Fortran derleyicileri de java bytecode’una derlerler.

Derleyici ve yorumlayıcı arasındaki farklar:

Yorumlayıcı Derleyici
Programı satır satır işler Tüm programı tarar ve bir bütün olarak makine koduna çevirir
Kaynak kodu analiz etmekle zaman harcamaz. Ancak genel yürütme süresi daha yavaştır. Kaynak kodun analizi için büyük zaman harcar. Ancak genel yürütme süresi daha hızlıdır.
Herhangi bir hata olana kadar programı çalıştırır. İlk hata gördüğü yerde durur. Bu nedenle hata ayıklama kolaydır. Tüm kaynak kodu taradıktan sonra hata mesajı üretir. Bu nedenle hata ayıklama nispeten zordur.
Python, Ruby, Java gibi diller yorumlayıcı kullanır. C, C++ gibi diller derleyici kullanır.

 

Bu makalemizde Derleyiciyi ve Yorumlayıcıyı anlatmaya çalıştık. Umarım faydalı olmuştur.

Görüşmek üzere…

 

Kaynaklar:

https://www.lifewire.com/compiled-language-2184210

https://www.programiz.com/article/difference-compiler-interpreter

https://introcs.cs.princeton.edu/java/82compiler

Programlama Nedir?

Bilgisayarlar donanım ve yazılım olmak üzere ikiye ayrılır. Bilgisayarın işlemcisi, belleği, diski gibi kasa içindeki elemanları ve monitör, yazıcı, klavye ve fare gibi çevre birimleri donanım olarak adlandırılır. Yazılım ise donanım bileşenlerinin birbirleriyle ve kullanıcı ile iletişimini sağlayan programlardır.

Bir bilgisayarın olmazsa olmaz yazılımı, işletim sistemidir. İşletim sistemi olmadan bilgisayarı kullanmamız mümkün değildir. İşletim sistemleri bilgisayar donanımını kullanmamızı ve programları çalıştırmamızı sağlar. Klavyeden yazdığınız yazının ekranda görünmesi, yazdığınız yazıların bir dosya halinde diskte saklanması gibi işlemlerden işletim sistemleri sorumludur. Yazı yazdığınız uygulama programını çalıştırmak da işletim sisteminin sorumluluğudur.

Yazılımı üçe ayırmak mümkündür: işletim sistemleri, uygulama programları ve programlama dilleri.

Program

Türk Dil Kurumu, sözlüğünde program kelimesini şöyle tanımlar, “Bilgisayara bir işlemi yaptırmak için yazılan komutlar dizisi.”

Başka bir tanım daha yapar, Yapılacak bir işin bölümlerini, bölümlerin sırasını ve zamanını gösteren tasarı.”

 

Program

Programlama

Programlama ise, bir algoritma alma ve onu programlama dilinin istediği şekilde yazma (kodlama) işlemidir. Böylece yapılan program bilgisayarda çalıştırılabilir.

Birçok programlama dili ve birçok farklı bilgisayar türü olsa da önemli olan ilk adım, çözümün olması gerektiğidir. Bir algoritma olmadan program olmaz.

Algoritma

Algoritma, bir problemi çözmek için izlenecek kuralların bir listesidir. Algoritma adımlarını doğru sıraya koymak gerekir. Sabah giyinmek için bir algoritma düşünün. Ceketinizi kazağınızdan önce giyerseniz ne olur? Bir algoritma yazarken talimatların sırası çok önemlidir.

Algoritmayla günlük yaşantımızda da karşılaşırız. Bir kek yapmak istediğinizde, algoritma kek tarifidir. Bir yemek kitabında bu sorunu çözmek için gereken algoritmayı bulabilirsiniz. Ya da parkı bulamıyorsunuz. İhtiyacınız olan algoritma parka ulaşmak için bir yönler kümesidir. Parka gitmenin farklı yolları da olabilir. Böylece farklı algoritmalara sahip olabilirsiniz. Son bir örnek daha verelim. Sürpriz yumurtalardan çıkan oyuncağı yapmak istiyorsunuz. İhtiyacınız olan algoritma, oyuncağı nasıl yapacağınızı gösteren talimatlar listesidir.

Programlama Dili

Programlama dilleri, programcıların bilgisayarda çalışacak yazılımları geliştirebilmesi için kullandıkları özel dillerdir. Bu diller, bir bilgisayara veya bilgi işlem aygıtına belirli görevleri yerine getirmeyi öğretmek için kullanılan bir kelime hazinesi ve dilbilgisi kuralları kümesidir. Her programlama dilinin kendine özgü bir söz dizimi (syntax) vardır.

Program Kodları

Toparlayacak olursak, bir problemimiz var ve bu problemi bilgisayar ile çözmek istiyoruz. Bunun için çözüm yolumuzu yani algoritmamızı, komutlar dizisine çevirmemiz gerekiyor. Çözüm yolumuzu oluşturacak komutları programlama dilinin kurallarını kullanarak yazıyoruz. Daha sonra bizim yazdığımız komutlar bilgisayarın anlayacağı Makine Diline çevriliyor ve böylece çalıştırılabilir hale geliyor.

Makine dili, sadece birler (1) ve sıfırlardan (0) oluşur. Bilgisayarlar elektronik aygıtlardır, bu sebeple sadece elektriğin varlığı ve yokluğundan anlarlar. Biz makine dilinde kodlama yapamayacağımız için kendi dilimize (hemen hemen tüm programlama dilleri İngilizce komut seti kullanır) yakın olan  yüksek seviyeli diller ile program yazarız. Yazdığımız bu koda Kaynak Kod (Source Kod) denir.

Aşağıdaki kod parçası Python diline aittir. Ekrana “Hello World” yazar.

print("Hello World")

Yüksek seviyeli bir dil olan Python dili, bizim anlayacağımız dile yakındır. Aşağıdaki ise Makine dilinde “Hello World” yazar.

b8 21 0a 00 00 
a3 0c 10 00 06 
b8 6f 72 6c 64 
a3 08 10 00 06 
b8 6f 2c 20 57 
a3 04 10 00 06 
b8 48 65 6c 6c 
a3 00 10 00 06 
b9 00 10 00 06 
ba 10 00 00 00 
bb 01 00 00 00 
b8 04 00 00 00 
cd 80 
b8 01 00 00 00 
cd 80

Makine dilinde program yazabilir misiniz?

Yazdığımız kaynak kodu makine koduna dönüştürmemiz gerekiyor ki bu işlem Derleyici (Compiler) ya da Yorumlayıcı (Interpreter) programlar tarafından yapılır.

Görüşmek üzere…

Boolean Mantığı Nasıl Çalışır?

Boolean Mantığı

Bir bilgisayarın nasıl hesaplama yapabildiğini, nasıl satranç oynayabildiğini veya bir belgenin yazım denetimini nasıl yapabildiğini, nasıl Go oyununu kendi kendine öğrendiğini hiç merak ettiniz mi? Bunlar, bundan 20 ya da 30 yıl kadar önce sadece insanların yapabileceği şeylerdi. Şu anda ise bunları bilgisayarlar gayet kolay bir şekilde yapabiliyor. Hatta insanlardan bile kolay şekilde. Silikon ve kablolardan oluşan bir chip (çip) insan düşüncesi gerektiren böyle şeyleri nasıl yapar?

Bu sorunun cevabını gerçekten anlamak istiyorsanız, işe Boolean Mantığından (Boolean Logic) başlamalıyız. Boolean mantığı 1800’lerin ortalarında George Boole tarafından geliştirilmiştir. Boolean mantığı bit ve byte’lar ile ilgilenir. Bilgisayarların nasıl işlem yaptıklarını anlamak için ihtiyaç duyduğumuz Boolen mantığı parçaları oldukça basittir. Bu makalede, öncelikle basit mantık kapılarını tartışıp sonra onları yararlı birşeylere nasıl dönüştüreceğimizi göreceğiz.

Mantık Kapıları (Logic Gates) 14 bacak entegre

Nasıl bakmak istediğimize göre, öğrenmemiz gereken üç, beş ya da yedi kapı var (Birazdan anlayacaksınız 🙂 ). Bu basit kapılar ile hayal edebileceğiniz herhangi bir dijital bileşeni yapabilecek kombinasyonlar elde edebiliriz. Bu kapılar ilk bakışta çok sade ve basit gelecek, ancak okumaya devam ettikçe bazı ilginç kombinasyonlar da göreceğiz.

Değil Kapısı (NOT Gate) Değil Kapısı

Olabilecek en basit kapı invertör veya Değil (NOT) kapısı olarak adlandırılır.

Giriş olarak bir bit alır ve çıkış olarak da bu bitin tersini verir.

Değil Kapısı Doğruluk Tablosu
Değil Kapısı Doğruluk Tablosu

Değil (NOT) kapısı, A olarak adlandırılan bir girişe sahiptir ve Q olarak adlandırılan bir çıkış kullanır. Doğruluk tablosu kapının nasıl davrandığını gösterir. A’ya 0 (sıfır) uyguladığımızda Q 1 (bir) üretir. A’ya 1 (bir) uyguladığımızda Q 0 (sıfır) üretir. Basit değil mi? (A girişine 1 uygulamak demek, A’ya 5 Volt vermek demektir.)

VE Kapısı (AND Gate) Ve Kapısı

VE kapısı, A ve B gibi iki girişte mantıksal bir “ve” işlemi gerçekleştirir.

Ve Kapısı Doğruluk Tablosu
Ve Kapısı Doğruluk Tablosu

VE (AND) Kapısının arkasındaki mantık şudur: “Eğer A ve B her ikisi de 1 ise, o zaman Q 1’dir”. Doğruluk tablosunda da bu davranış görülebilir. Tablo satırları aşağıdaki gibi okunur:

A B Q
0 0  0   Eğer A 0 VE B 0 ise, Q 0’dır.
0 1  0   Eğer A 0 VE B 1 ise, Q 0’dır.
1 0  0   Eğer A 1 VE B 0 ise, Q 0’dır.
1 1  1   Eğer A 1 VE B 1 ise, Q 1’dir.

VEYA Kapısı (OR Gate) VEYA Kapısı

Bir sonraki kapımız VEYA kapısı. Çalışma mantığı, “Eğer A veya B 1 ise (ya da her ikisi de 1 ise) o zaman Q 1’dir.”

VEYA Kapısı Doğruluk Tablosu
VEYA Kapısı Doğruluk Tablosu

Bunlar mantık devrelerinde kullanılan üç temel kapıdır. (Saymanın bir yolu).  Çok yaygın olan iki kapı daha var: VE DEĞİL (NAND) VE DEĞİL Kapısı ve VEYA DEĞİL (NOR) VEYA Değil Kapısı kapıları. Bu iki kapı aslında AND kapısı veya OR kapısı ile NOT kapısının bir kombinasyonudur. Bu iki kapıyı da sayarsak 5 kapı ediyor. Aşağıda NAND ve NOR kapılarının doğruluk tablolarını göreceksiniz. Doğruluk tablolarını incelediğinizde AND ve OR kapılarının tersi olduğunu göreceksiniz.

VE DEĞİL Kapısı Doğruluk Tablosu
VE DEĞİL Kapısı Doğruluk Tablosu

 

VEYA DEĞİL Kapısı Doğruluk Tablosu
VEYA DEĞİL Kapısı Doğruluk Tablosu

Listeye son iki kapıyı daha ekleyelim 5 ya da 7 adet olsunlar. XOR (ÖZEL VEYA) ve XNOR (ÖZEL VEYA DEĞİL) kapıları.

XOR (ÖZEL VEYA) Kapısı  ÖZEL VEYA Kapısı

Özel Veya Kapısı Doğruluk Tablosu
Özel Veya Kapısı Doğruluk Tablosu

Özel Veya kapısının çalışma mantığı: “Girişler birbirinden farklı ise çıkış 1’dir” şeklindedir.

 

XNOR (ÖZEL VEYA DEĞİL) Kapısı  ÖZEL VEYA DEĞİL Kapsı

Özel Veya Değil Kapısı Doğruluk Tablosu
Özel Veya Değil Kapısı Doğruluk Tablosu

Özel Veya Değil kapısı Özel Veya kapısının tersidir. Özel Veya Değil kapısının çalışma mantığı: “Girişler aynı ise çıkış 1’dir” şeklindedir.

Boolean mantığına bir giriş yaptık. Bu serimiz devam edecek.

Görüşmek üzere…