18 Mart 2016 Cuma

Fonksiyonel Programlama Ve Scheme


   Fonksiyonel programlama, matematik fonksiyonlarıyla yapılır. Girdi ve çıktıları sabittir. Fonksiyon parametresi olarak aldığı girdileri işler ve sonuç döndürür. Bu sonuç sadece aldığı parametre ile değişmelidir.
   İmperative ve foksiyonel programlama yöntemleri vardır. İmperative programlamada atama ve döngü işlemleri kullanılır, ama fonksiyonel programlamada böyle bir şey yoktur. Fonksiyonel programlamada değişkene bir değer verildiğinde bir daha değişmez.
   Resimdeki gibi imperative kısmında atama ve döngü işlemleri yapılırken, fonksiyonel kısmında recursive işlemler yapılmıştır.
pd1.PNG
Özellikler
  • Referantial Transparency: Fonksiyon belli bir değer için bir tek değer üretir. Zamana veya başka koşullara göre oluşturulan değer değişmemelidir. Parametre almayan metodlar her zaman tek bir sonuç döndürür.
  • Fonksiyonlar başka fonksiyonlara parametre olabilir.
  • Composition: Birbiriyle ilişkili fonksiyonları birleştirmek. Örneğin; X -> Y  ve  Y -> X ise  X -> Z  yazılabilir.
Kalitesi
  • Parametre alması ve sonuç döndürmesi gerekir.
  • Atama ve döngü işlemleri kullanılmamalıdır.
  • Oluşturulan değer sadece aldığı parametrelere göre değişmelidir.

   

SCHEME: LISP'in Bir Biçimi

Lisp (List Processing  ), fonksiyonel programlamanın özelliklerini taşıyan ilk programlama dilidir. Kendi yorumlayısına sahiptir. Scheme, Lisp'in lehçesidir. Yorumlayıcı olarak kullanılan program Racket. Sheme dilinde prefix ifadeler kullanılır.
   
Scheme dilinde iki tür ifade vardır:
  1. Atoms : numara, string, boolean, karakter
  2. Parenthesized Expression : atom, expression
   
Scheme dilinde syntax:
→ : Atama
| : veya, alternatif ifade
{ } : liste
' ' : string ifadeler
;   : yorum satırı

Prefix işlemler:
(+ 3 5) = 3 + 5 = 8
(+ 3 ( * 4 5 ) )=  3 + 4 * 5 = 23
Boolean işlemler : 
( and ( =  a  b )  ( not  ( = a 0 ) ) )       ;   ( a = = b ) && ( a ! = 0 )

Özel fonksiyonlar:
 >> (gcd 10 35 )    ; gcd ( 10 35 )  en büyük ortak bölen bulur.
5
>>  (read- char )  ; getchar()
>> (quote ( 1 2 3 ) ) ; ifade değişmeden döndürülür.
'(1 2 3 )
>> if ( = a 0 )  0            ; if (a==0) return 0
          ( / 1 a )                  ; else return (1/a)
>>( cond ( (= a 0 ) 0)                  ; condition (if, else if , else yapısı) ; if( a==0  )  return 0
                  ( ( = a 1 ) 1)                 ; else if( a == 1 )   return 1
                  ( else ( / 1 a ) ) )        ; else return 1/a
>>(let (( a 2 )   ( b 3 ) ) ( + 1 b ) )       ;  let komutu ifadeye değer bağlar. ( + 1 b) işlemi                                                                            ;  sadece let ifadesi içinde yapılır. 
4
>>(lambda   (radius)  (*   3 .14  ( * radius radius ) ) ) 10)
   ;  lambda komutu isimsiz  fonksiyon oluşturmayı sağlar.
   ; radius aldığı parametre
   ; 10 sayısı da parametrenin değeri 
314
>> letrec                ; recursive fonksiyonları bağlar.
> > define              ; global tanımlama yapar.
   Tail Recursive : Kuyruk özyinelemesi olarak çevrilebilir. Recursive işleminin en sonda yapılmasıdır. Scheme tail recursive fonksiyonları imperative fonksiyonlara çevirerek daha verimli çalışmasını sağlıyor.
**Scheme dili delayed özelliğine sahiptir. Yani bir kod yapısı sadece ihtiyaç duyulduğunda çalışır. Aksi halde çalışmaz. Örneğin if - else yapısında if kontrolü doğruysa else kısmını hiçi çalıştırmaz.
** Scheme statically scoped bir dildir, yani kaynak kodu yazarken hataları tespit eder, çalışma esnasında değil.

Scheme' de Veri Yapıları

Scheme dilinde temel veri yapısı listelerdir. Listelerde işlemleri hızlıca yapmamızı sağlayan metodlar vardır.
car : listenin ilk elemanını döndürür.
cdr : ilk elemanından sonrakileri döndürür.
cons : listenin başına eleman ekler.
Binary Search Tree (İkili Arama Ağacı)
("horse" ("cow" () ("dog" () ()))
("zebra" ("yak" () ()) () ))
ifadelerinin ikili arama ağacı üzerinde gösterimi:
scheme3

Box and Pointer Notation 
list( 1 2 3 ) 'ün gösterimi :
scheme1

list (  ( a b )  c  ( d ) ) ' ün gösterimi :
scheme2


14 Mart 2016 Pazartesi

Python Öğreniyorum

Python 1989 yılında, Guido Van Rossum geliştirmeye başlamıştır. Guido en sevdiği gösteri Monty Python’s Flying Circus isminden python ismini seçmiştir. Öğrenmesi kolay bir dil olduğundan programlamaya yeni başlayanlar için tavsiye edilir.
Python konuşma diline yakın, yüksek seviyeli programlama dilidir. Geliştirilirken kolay okunabilir olmasına dikkat edilmiştir. Yorumlamalı(interpreted) bir dildir. Yani yazılan kod önce yorumlayıcının ana formatına çevrilir, sonra makina diline çevrilir. Girintilere göre sözdizimi vardır. Girintileme, parantezler yerine geçer ve kolay yazılmasını sağlar. Girinti sayısı azaltıldığında kod blogu bitmiştir.Çok sayıda kütüphanesi bulunur. Bu önemli bir özelliğidir. Tüm platformlarda (windows,linux, mac gibi) sorunsuz çalışabilir.
Python Kurulumu
Konsol ekranında kodlama yapabilirsiniz. Phyton 2x ve 3x sürümü mevcuttur. Birçok kütüphane 2x sürümü ile uyumlu çalışır.
Pycharm Kurulumu
Pycharm, python dilinde geliştirme yapabiliceğiniz bir platformdur.

Python'ı Cmd'ye Tanıtmak

Windows komut satırı olan cmd ile python'da programlama yapabilirsiniz. Bunun için cmd'ye indirmiş olduğunuz python.exe dosyasını tanıtmanız gerekir.
  Şimdi işlemleri sırasıyla yapalım:
1.Öncelikle python.exe dosyasını bulun. C klasöründe, python dosyası içinde bulunur. Dosyayı bulduğunuzda, dosya yolunu kopyalayın.
python.PNG
2.Bu bilgisayar klasörünü sağ tıklayıp, özelliklere girin.
python1
3.Gelişmiş sistem ayarlarını tıklayın.
pthon2
4.Ortam değişkenlerini tıklayın.
python3
5.Sistem değişkenlerinde path kısmını çift tıklayın.
python4
6. Açılan yerde değişken değeri kısmının sonuna noktalı virgül ( ; ) ekleyip kopyaladığınız dosya yolunu yapıştırın.
python5

7. Şimdi cmd'yi açıp python yazın ve programlamaya başlayın.
python6.PNG

16 Şubat 2016 Salı

Bilişim Alanında Meslekler

   

 Bilişim sektörü çok geniş alanlara sahiptir. Günümüzde üniversitelerin bilgisayar mühendisliği bölümlerinden mezun olanlar kendi istedikleri alanda uzmanlaşabiliyor.Uzmanlaşabileceğiniz alanlara yönelik fikir sahibi olmak ilk adımdır. Bir an önce kararınızı verip ilk adımı atmanız gerekiyor.
Bu yazımda çeşitli alanlara yönelik genel bilgi, iş olanakları ve maaş durumlarını okuyacaksınız. Başlamadan belirtmek isterim maaşlar ortalamadır. Siz kendinizi ne kadar geliştirirseniz maaşınız o kadar artar.   


İş Analisti
  Müşteri ile yazılımı geliştiren arasındaki bağdır. Müşterinin ihtiyaçlarını tespit eder, analiz eder, test eder ve yönetir. İş analisti, ihtiyacı belirledikten sonra çözüm üretir. Projenin iş ihtiyaçlarını belirler. Kullanıcıları ve ihtiyaçlarını belirler. Tespitlerini belgeler. Kullanıcılarla mülakat yapar, rakip ürünleri analiz eder. Müşteriyle etkileşimde kalarak ihtiyaçların doğru belirlendiğinden emin olur. İhtiyaçların değişimini izler. Ürün önerileri ve güncellemeleri sunar. İş analisti projenin temelini hazırlar. Yaptıkları tespitler doğru ürünün kilit noktasıdır. Detaycı, dinleme becerisi olan, analitik düşünen, gözlemci kişiler olmalıdır.
Maaş >> 2500 Tl - 4200 Tl


Veritabanı Yöneticisi
  Büyük şirketler çok büyük verilere sahiptirler. Sürekli büyüyen verilerin takibi ve yönetimi sağlanmalıdır. Bunu sağlayan veritabanı yöneticisidir. Veri alt yapısını oluşturur. Veritabanları fiziksel veriyi mantıksal olarak tutar. Veritabanı sistemlerini kurar, verilerin güvenliğini sağlar, verilerde sorgu yazar. Veritabanını yönetir, günceller ve denetler. Kişilerin hangi bilgiye ulaştıklarını, ne değişiklik yaptıklarını ve ne zaman yaptıklarını tespit edebilirler. Dev şirketlerde bu bilgiler kritik öneme sahiptir. Kişi verileri mutlaka korunmalıdır. Bunu verileri düzenli olarak yedekleyerek yapar. Problem anında verilerin hızla döndürülmesini sağlar. Verilerdeki büyümeyi kontrol altına alır. Veritabanından maximum performansı almaya çalışır. İş olanakları oldukça çoktur.
Maaş >> 1200 Tl - 5000 Tl


Ağ Sistemleri Uzmanı
  Ağ dediğimiz olay iki bilgisayarın birbirine bağlanmasından, kıtaları birbirine bağlamaya kadar gider. Bilgisayarın iletişimidir. Haberleşme, dosya paylaşımı ağlarla sağlanır. Ağ sistemleri uzmanı bunlara çözüm getirir. Kurumun iletişim alt yapısını kurar ve yönetir. Donanım bilgisi de gerektirir. Küçük, orta ve büyük ölçekli ağları kurar, yönetir, güvenliğini sağlar. CCNA, CCNP gibi sertifikalar eğitimin bir parçasıdır.
Maaş >> 2400 Tl - 6000 Tl


Test Mühendisi
  Yazılımın son safhasında çok etkindirler. Geliştirilen üründe testler yapar. Böylece müşterinin memnuniyetini sağlamaya çalışır. Sadece son evrede bulunmaz. Projenin başından itibaren takip eder. Eğer akışı bozan bir durum tespit ederse bildirir ve çözüm sunar. Performans, kalite, uygunluk yaptığı testlerden sadece birkaçıdır. Arayüzden ya da kod içinden test yapabilir. Bu yüzden kod bilgisi ve analiz becerisine sahip olmalıdır. Yazılımın ihtiyacı karşılaması önemlidir. Her yazılım şirketinde ihtiyaç vardır. Dikkatli, detaycı, analitik düşünen, sorumluluk sahibi kişilerdir.
Maaş >> 1800 Tl - 5000 Tl


Yazılım Mimarı
  Projenin tasarımını yapar ve genel yapısını oluşturur. Projenin içinde bütünlük sağlaması için, projeye bütün olarak yaklaşır. Yazılımın kendi içindeki ilişkilerini kurar ve dokümentasyonunu hazırlar. Kod yazımına uygun hale getirir ve gerisini programcılara devreder. Hata olduğunda programcıyla bir araya gelir. Projenin yapısını bozmadan çözüm sunar.
Maaş >> 3500 Tl - 6000 Tl


Güvenlik Uzmanı
  Siber olaylarla ilgilenir. Siber olayları engeller, verdiği zararları önler veya azaltır. Kurumu koordine ederek, diğer çalışanları bilgilendirir. Sistemin güvenli olması için çalışmalar yapar. Atakları, virüsleri önler. Her kurum verilerini korumak ister. Bunun sebeple güvenlik uzmanlarına geniş iş sahası sağlar.
Maaş >> 2400 Tl - 7200 Tl


Sistem Uzmanı
  Projenin ihtiyaçlarını belirler. En uygun teknolojileri seçer. Kullanıcıların sistemle yaşadığı problemleri tespit eder ve çözer. Sistemin sürekli tekrar eden işlerine çözüm sunar. Verilerin zarar görmesi durumunda kurtarma planı hazırlar. Şirketin haberleşme, mesajlaşma güvenliğini sağlar. Ağ ve güvenlik hakkında bilgili olmalıdır.
Maaş >> 1400 Tl -4500 Tl

5 Şubat 2016 Cuma

4 Şubat 2016 Perşembe

Bilişim Güvenliği #1





Bilişim Güvenliği Hakkında Genel Bilgiler

   Günümüzde neredeyse tüm firmalar işlemlerini internet üzerinden yapmaktadır. Bu durum verilerin kötü niyetli kişilerden korunmasını gerektirir. Son teknolojilerle bilgisayarın alt yapısının karmaşık hale gelmesiyle de verileri korumak zorlaşmıştır. Bu yüzden güvenlik alanında uzman kişilere ihtiyaç duyulur.
  

Hacker Kimdir?

 Hacker filmlerden dolayı algımıza işleyen bilişim suçlarını işleyen kişi değildir. Daha genel bir tanımdır. Hacker; bilgisayarın detaylarını öğrenmeye ilgili, yazılım ve donanımın yapabileceklerini geliştirebilen kişidir.
  •      White Hat Hackers(Beyaz Şapkalı Hacker):  Bilişim sistemlerinin güvenliğini sağlayan ve geliştiren kişilerdir. Güvenlik uzmanı olarak adlandırılırlar.
  •     Black Hat Hackers(Siyah Şapkalı Hacker): Bilişim dünyasının korsanlarıdır. Bir çok sebeple hareket etselerde, amaçları zarar vermektir.
  •     Grey Hat Hackers(Gri Şapkalı Hacker): Hem savunma hem saldırı yapan gruptur. Amacı sadece kazancıdır.

Hacking; Bir programın kodlarının daha hızlı ve etkili olması için tersine mühendislik yapmaktır.

Tersine Mühendislik; Programın hatalarını tespit etmeye çalışmaktır. 

Sistemlere saldıran black hat hackerlar kullandıkları yöntemlere göre ayrılırlar:

Script Kiddies: Başkalarının yazdığı programları internetten indirir. Bu şekilde zarar vermeye çalışır. Lamer da denilir.
Miscrosoft'un da dediği gibi; 
"En zararlı kişi ne yaptığını bilmeyendir."

Phreakers: Eskiden sentral ve telefon hatlarının açıkları kullanan kişilerdir.

Crackers: Yazılımda  iyi olan, sistemleri kırıp bunları yayınlayan kişilerdir.

Kullanılan Genel Terimler

Hactivizm: Hacking işleminin herhangi bir amaç için yapılmasıdır. Ama bu suç olmadığı anlamına gelmez.

Warez: Ticari yazılımın kırılarak dağıtılmasıdır.

Cowboy Dili: Hackerların chat programlarında kullandığı dildir.

Exploit: Sisteğimin zayıflığını kullanarak zarar veren kod.

Attack: Sisteme saldırmak

IDS: Kaçak giriş tespit sistemi

IPS: Kaçak giriş engelleme sistemi

DLP: Veri Kaybı engelleme sistemi

Url Filtrering: Http erişim kısıtlama

Threat : Tehtid

Vulnerability: Zayıflık


Kaynak: 'Bilişimin karanlık yüzü'  (Kamil Burlu)

1 Şubat 2016 Pazartesi

Hangi Programlama Dili Seçilmeli?


Hangi  Programlama Dili Seçilmeli?

  Yapmak istediğiniz işlemi bilgisayara yaptırmak için programlama dili kullanırız. Programlama dili ileri seviye, orta seviye ve düşük seviyeli diller olarak gruplanabilir. Seviyeleri makine diline yaklaştıkça düşer, konuşma diline yaklaştıkça artar. Makine dili bilgisayarın anladığı dildir. Bilgisayarların anladığı aslında sadece 0 ve 1'lerden oluşur. İşte, programlama dilleri de bizim yazdıklarımızı 0 ve 1'lere dönüştürerek bilgisayarla konuşmamızı sağlar. Bu şekilde istediklerimizi bilgisayara yaptırabiliriz.
   
 Düşük seviyeli dillere örnek Assembly dilidir. Makine diline çok yakındır. Ama bu dille istediğinizi yaptırmak o kadar kolay değildir. Öğrenmek çok zahmetlidir. Günümüzde bilgisayarın işlemcisi gibi donanıma çok yakın parçalarla ilgilenen kişiler Assembly dili kullanır. 

  Orta seviyeli diller, C dil ailesi.(C, C++, C# gibi)  Bu seviyede dil konuşma diline biraz daha yakındır. Programın hızlı olmasını sağlar. Bu yüzden tercih edilirler. 
  
  Yüksek seviyeli diller neredeyse konuşma dili gibidir. Örnek olarak, Java, Pascal, Basic verilebilir.
Öğrenmek kolaydır, Program yazmanın zevkini tadabilirsiniz. Ama konuşma diline yaklaştıkça hızdan taviz verilir. Kendimiz için kolaylaştırdıkça, bilgisayar için zorlaştırıyoruz. Bu şekilde de düşünebilirsiniz.

  Hangi dili seçmeniz gerektiğiyse, tamamen sizin projenize bağlıdır. Hangi amaçla program yazıyorsanız ona göre programlama dili seçmelisiniz. Sadece kod yazmak amaçlı dil öğrenmek istiyorsanız, programlama dilinden çok algoritma mantığına ağırlık vermelisiniz. Daha sonra projeniz için gerekli dili öğrenmek zor olmayacaktır.