Bitcoin, Blockchain Nedir ?

Bitcoin, belki de şu günler de pek çok kişinin duyduğu ve merak ettiği bir kelimedir. Bitcoin’nin çok fazla değerlenmesi ve bununla beraber diğer alt coinlerin de değerlenmesine yok açan boğa sezonda olmamızda buna bir artı sağlacaktır.

Boğa Sezonu Nedir?

Boğa sezonu, piyasanın yükseliş trendinde olduğunu ve ilerleyen zamanlar da daha yükseleceğine işarettir. Boğa sezonu denilmesi boğanın boynuzlarının aşağıdan yukarıya kaldırdığı söylenmektedir. Google trendlere baktığımızda herkes bitcoini konuştuğunu görebilirsiniz.

Bitcoin ve diğer coinler de korona olaylarının başlamasından sonra boğa sezonun da oldu diyebiliriz. Ama bu korona bittikten sonra biteceği anlamına gelmemektedir. Belki bir haber ile bütün piyasa alt üst olabilir.

Bu yazdığım günlerde bitcoin’nin fiyatı yaklaşık olarak 58 ile 60 bin dolar arasında gidip gelmektedir. Bu fiyatları şuan duyan birisi çok pahalı diyebilir fakat ben bitcoinin geleceğini 100 bin hatta 1 milyona kadar gidebileceğini bile düşünüyorum. (Yatırım Tavsiyesi Değildir 🙂 )

Bitcoin Nedir?

Bitcoin, ilk olarak 2008 yılında Satoshi Nakamoto isimli kim olduğu hala bilinmeyen birisi veya bir takım tarafından geliştirilmeye başlanmıştır. Bitcoin açık kaynaklı bir projedir. İsteyen Github’dan kodlarını tek tek inceleyebilir. Bitcoin geliştirenler bu proje de en fazla 21 milyon adet basılması ve daha fazla basılamayacağını kesinleştirmişlerdir. Bu da bitcoini değerli kılmaktadır. Yani bir nevi altın gibi düşünebilir çünkü altını isteseniz de üretemezsiniz ancak bir yerden çıkması lazımdır. Ama doları euro veya herhangi bir para birimini bir kişi ve otorite bunu istediğini kadar basabilir. Bitcoin de böyle bir durum yoktur. Tamamen merkeziyetsizdir kimse bitcoinin sahibi değildir. Belirli kişi bu teknoloji üretmiş ve kullanıma sunmuştur.

21 milyonu üretmek içinde anında üretilmemektedir. Belirli bir sınırı vardır. Her 10 dakika da bir blok üretilmektedir ve her blok içinde şuanlık 6.25 bitcoin madencilere verilmektedir. Madenciler kim diyebilirsiniz yazımın ilerisinde yazacağım. Bu verilen 6.25 bitcoin ilk başlangıçta 50 bitcoin olarak verildi ve yarılanma ile her blok için 25 bitcoine sonra 12.5 ve şuan günümüzde 6.25 bitcoin verilmektedir. Bu yarılanmaya da Halving denilmektedir. Bu halving her 4 yılda bir yarılanmaktadır. Böylelikle bitcoin üretimi yavaş yavaş artacaktır. Bitcoinin şuanki üretilen 18 milyon 600 bin civarıdır. Böylece bitcoinin 21 milyona ulaşması yaklaşık olarak 2140 yılında bitecektir ve daha fazla bitcoin basılmayacaktır. Her blok içinde 10 dakika olarak belirlenmiştir.

Blockchain Nedir?

Blockchain’i bir zincire benzerebilirsiniz. Zaten Türkçe’ye çevirdiğimizde blok zinciri olarak çevirebiliriz. Blokların tek tek birbirlerine bağlanarak oluşturulur. Bu blokların ilk zincirine Genesis Blok denilmektedir. İlk bloğun öncesi olmadığı için bilgilerin içerisine 00 olarak geçmektedir. Bu 00, 64 tane sıfırdır.Yani bilgisayar terimiyle 64 bit olarak geçer. Sonraki bloka ise öncesi ile bir ilişkisi olması lazım işte bu ilişki ise hash ile yapılır. Hash sha256 olarak geçer. Hash bir değerin mesela hash fonksiyonuna ben abcd yazarsam bana geri bir hash dönecektir => 88d4266fd4e6338d13b845fcf289579d209c897823b9217da3e161936f031589

İsterseniz sizde yapın deneyin abcd yazın ve üstteki benim yazdığım ile karşılaştırın veya alttaki fotoğrafa bakın aynıdır. Herkes de bu aynı sonucu vermekdir.

Peki tamamda bundan banane diyebilirsiniz fakat bu bir hashdir sadece bir blok için öncekinin hash’i yani adresi diyebiliriz.

Bu blok içerisinde verilen bazı bilgiler vardır. Gönderen kişinin bitcoin adresi, alan kişinin bitcoin adresi, ne kadarlık bir bitcoin gönderecek, zamanı, önceki hash ve Nonce değeri vardır. Bu nonce değeri bitcoin için belirli bir kuralı vardır. Bu hash kodunu üretirken ilk 2 değerinin 00 ile başlaması gibi eğer 00 ile başlamaz ise nonce değeri arttırılır ve tekrar hash fonksiyonundan geçirilir.

Bu işlem bulunana kadar nonce arttırılır. Çok fazla makine mining yaparsa hash fonksiyonun bulması kolay olacağı için 10 dakikanın altında blok oluşturulamayacağı için bu 00 değerler daha da arttırılarak ağın zorluğu arttırılıyor. Alttaki fotoğrafta ağ zorluğunu grafiksel olarak görebilirsiniz.

Blockchain anlamamız için andersbrownworth.com da Block chain demo isimli bir site var oradan anlayabilirsiniz.

Bitcoin merkeziyetsiz olduğu için blockchain de olan bilgilerin bilgilerin tek bir merkezde tutulmasındansa bütün kullanıcılar bilgileri bulunuyor. Yani bir değişiklik olduğundan bütün kullanıcılar bu bilgiyi biliyor. Yani bir adrese ne kadar bitcoin girdiğini, çıktığını, ne zaman çıktığını ve kime gönderdiğini tutuyor. Bütün kullanıcıların elinde bu bilgiler bulunduğundan hata olması en aza indiriyor.

Bitcoin Madenci Kimdir?

Bitcoin madencileri üst tarafta kendilerine gelen datanın istenilen hash kuralında olmasını sağlayarak (İlk 00 olması gibi) nonce değerini buluyor. Eğer bitcoin üretimi biterse madencilik yine bitmeyecektir çünkü bitcoin transferlerinden belirli bir komisyon alınmaktadır. Bu komisyon direk bitcoin madencilerine gidecektir.

Aşağıdaki fotoğrafta bir blockchain’in nasıl çalıştığını görebilirsiz. Bloklar tek tek mine ederek nonce değeri bulunuyor ve hash değeri sonraki blok’a aktarılıyor.

Mesela bir hata yapılsın ve 2.blokta veriler yanlış geldi. Yanlış gelen yerden itibaren diğerleri de hatalı olacaktır. Aşağıdaki fotoğrafta görebilirsiniz.

Bu teknolojide şöyle bir ayırım vardır. Birisi mining yapacaklar yani nonce değerini bulacaklar ve diğeri ise doğrulayanlar bu doğrulayanlar gelen bilgilerin alacaklar aynı zamanda madencilerin bulduğu nonce değerini alacaklar ve hash doğru kural da olup olmadığını kontrol edecekler. Eğer hata olursa hata oynama mantığına gidilecektir. Doğruluk oranı yüksek olursa doğru olarak veya ağın yapısına göre bu blok çöpe gitsin denilebilir.

Eğer şuana kadar hiçbir şey anlamadıysanız normaldir ilk önce bende hiçbir şey anlamadım 🙂 Benim severek takip ettiğim Özgür DEMİRTAŞ hocamızın blockchain ve kripto paralar serisine bakabilirsiniz.

Uluslararası Bitcoin Satılan Borsalar

  • Binance
  • Kucoin
  • Gate.io
  • Huobi

Türkiyedeki Bitcoin Satılan Borsalar

  • TR Binance
  • BtcTürk
  • Thodex
  • Paribu

Kripto Paralar İçin Kullanılan Siteler

  • CoinMarketCap – Coin Fiyatları, Grafikleri, Coinlerin Borsadaki Fiyatları, Borsalar, Portfolye oluşturma
  • Tradingview – Coin Fiyatları, Coin Grafikleri, Fikirler,
  • Icodrops – Coin ICO tarihleri

Bu kripto paralar çok riskli olduğu için maddi olarak zorlanmayacağınız paralar, yatırdığınız para gitse dahi hayatınızı devam ettirebileceğiniz para ile girmenizi tavsiye ederim. Kredi çekme veya evi köyü arabayı sattım bitcoine bastım gibi bişey yaparsanız bitcoinin çok fazla düşmesi ile eviniz arabanız elinizden gider.

Bugünki bitcoin fiyatı: (10.04.2021 – 23:49)

İyi günler

Kaynaklar:

https://tr.wikipedia.org/wiki/Bitcoin https://trends.google.com/trends/explore?date=all&q=bitcoin https://tr.tradingview.com/symbols/BTCUSDT/?exchange=BINANCE https://andersbrownworth.com/blockchain/ https://www.blockchain.com/charts/difficulty

Videolar:

YATIRIM TAVSİYESİ DEĞİLDİR!!

Node.js ile Discord COVID-19 Botu Geliştirme

Node.js kullanarak bir discord botu geliştirmeye çalıştım.

Bilgileri sağlık bakanlığı API’den aldım. Bu bot !korona yazıldığında günlük raporu bize geri döndürmektedir.

Eğer detaylı olarak toplam vaka sayısı, toplam test sayısı gibi bilgilerin ve günlük tablonun gelmesi için !koronadetayli yazılarak bize detaylı olarak geri dönüş vermektedir.

Proje de request paketini kullanarak Sağlık Bakanlığına bir istek atılıyor ve gelen istek JSON data dönüştürüyor. Sonra en son gelen bilgiler ile bot cevap veriyor.

Discord botu için discord tarafından oluşturulmuş bir paket discord.js paketini kullandım.

Ve bir de Cron job kullanılmıştır. Cron API saniyelik olarak istek atmaktadır ve eski veri ile cron tarafından atılmış istekler karşılaştırılarak eğer birbirlerinden farklı veriler ise bot son dakika olarak mesaj atmakta ve yeni veriler detaylı bir şekilde gösterilmedir. ( TEST EDİLMEMİŞTİR )

Eğer sizde bu botu kullanmak isterseniz yapacağınız tek şey en altta bulunan token yerine sunucu tokeninizi girmeniz yeterlidir. Botun devamlı açık kalması içinde Heroku kullandım.

Github Repo : https://github.com/eraykisabacak/TRKoronaDiscord

C# ile A* (Star) Algoritması kullanarak 8 Taş Bulmacasını Çözmek | Yapay Zeka – Solving 8 Stone Puzzles using A * (Star) Algorithm with C# Artificial Intelligence

A star algoritması sezgisel bilgileri kullanarak bir durumdan bir amaca ulaşmaktır. Bu amaç duruma ulaşmak için minimum yolun bulunmasında daha az tarama yapmaya olanak tanımalıdır.

İyi seçilmiş bir sezgisel fonksiyon ile çok az dallanma yaparak hedefe yaklaşabiliriz.

Bu görselde yeşil kutudan kırmızı kutuya gitmeye çalışalım. Ancak kutuların ortasında bir duvar olsun.

Öncelikle yeşil kutudan başlayarak çevre alanları taramaya başlayacağız. Daha sonra taradığımız alanları açık bir listeye ekleyeceğiz.

Eğer karenin çevresinde duvar var ise bunu listeye eklemeyeceğiz.

Daha sonra ise başlangıç karesini kapalı bir listeye ekleyeceğiz.

Yukarıdaki görsel gibi çevresini tarayacağız.

Daha sonra açık listeye eklediğimiz kareleri her birisini F = G + H denklemi ile en küçük F değerini seçeceğiz.

G = Başlangıç noktasına göre yoldur.

H = Amacımıza ulaşmak için tahmini bir değerdir. (Heuristic) Tahmin

F değerinin en küçüğünü seçeceğiz çünkü o yol bizi kısadan amacımıza ulaştıracaktır.

Her kare hareketi için 10’ar puan diyelim. Köşegen üzerinde yapılan çaprak hareket 14 puandır (10*kök(2))

Yani ilk kutumuzu ele alırsak üstteki gibi bir sonuç çıkacaktır. Sol üst F değeri Sol alt G değeri sağ alt H değeridir.

Bu değerlere baktığımızda F değerinin en küçüğüne gideceği için kutumuz sağa gitmelidir.

Daha sonra aşağı aşağı gidecektir. Fakat bir kısa yolumuz daha vardır. Direk F 40 olan yere gitmek yerine çaprazdaki 54 değerine sahip olan kutuya gitmek bizi daha kısadan götürecektir.

Şu şekilde bir soru olabilir. Öncelikle F 54’e gidiyoruz daha sonra aşağı 74 gidiyoruz ama çapraz gitsek daha kısa olabilir denilebilir fakat duvar buna engel olacaktır. Kutu şeklinde hareket edeceği için önce aşağı sonra sağa gitmeliyiz.

A Star Algoritması Mantığı Özeti

Başlangıç karesini açık listeye ekle.

Çevresini dolaş en küçük F değerli kareyi bul. Seçilen kareyi kapalıya ekle.

Seçili kare için aynı şekilde yap. Duvar gibi engellere bakma.

Eğer amacımız gerçekleşirse yol bulunmuştur.

8 Taş Bulmacası

8 Taş bulmacasını da A* algoritması ile çözebiliriz.

Buradaki maliyetimiz her hareket için 1’dir.

Üstteki gibi bir başlangıcımız var ve bir amacımız var.

Boş olan kareyi hareket ettirmemiz gerekiyor.

Sadece yukarı, aşağı, sağa , sola hareket ettirebiliriz.

Üstteki fotoğraftaki gibi hareketler yaparak sonuca ulaşabiliriz.

C# ile yapmış olduğum programda başlangıç durumu ve amaç durumu 2 tane kullanıcının girmesi için beklenen yer vardır ve ‘,’ ile ayrılmalıdır.

Çöz denildiğinde çözdükten sonra animasyonlu olarak ‘0’ yer değiştirecektir. Yer değiştirmeler sağda gösterilir. Yaptığı işlemler en altta yazmaktadır.

Kodlar: https://github.com/eraykisabacak/A-Star-Algorimasi-8-Bulmacasi

C# ile Sağlık Ocağı Hasta Takip Sistemi – Health Center Patient Tracking System – HBYS

C# ile Sağlık Ocağı Hastane Hasta Takip Sistemi hazırladım. Projemde MSSQL veri tabanını kullandım. Bazı yanlışlarım hatalarım olabilir.

Saglik-Ocagi-Hasta-Takip-Sistemi

Sağlık Ocağı Hasta Takip Sistemi – Health Center Patient Tracking System – HBYS

Sağlık Ocağı Hasta Takip Sistemi Sağlık ocaklarında hastaların poliklinik giriş ve çıkışlarının takibi ve raporlanması amacıyla detaylı bir otomasyon geliştirmeniz istenmektedir.

Kurulum

Projede Entity Framework kullanılmıştır. script.sql dosyasından Microsoft Management Studio’ya giderek New Query’ye tıkladıkdan sonra script.sql dosyasının içindeki kodu alıp Execute ettiğinizde tablolar ve veriler gelmiş olacaktır.

Uygulama İçi Fotoğraflar

Login

Login Uyarısı

Hasta İşlemleri

Taburcu Formu

Taburcu Formu

Poliklinik Tanıtma

Kullanıcı Tanıtma

Hasta Bulma

Detaylı Bilgiler

txtDosyaNo: Hasta ya ait unique numara dosya no metin kutusunun key press eventi enter tuşunu döndürürse hasta bilgileri formdaki alanlara doldurulur.

btnBul: Dosya numarası bilinmeyen hasta geldiğinde bul butonu ile acılan Dosya Arama Yardımı penceresinde hastaya ait bilgiler den biri seçilip sorgulanarak hastanın dosya numarasına erişilir, Gridden seçilen hasta dosya numarası ve bütün bilgileri formda ilgili alanlara doldurulur.

txtSevkTarihi: Muayeneye gelen hasta için her gelişinde sevk açılmaz, Sevk tarihi ile dosya numarası birlikte hastanın bir kez gelişini birlikte primary key olarak ifade eder.

btnHastaBilgileri: Hastanın Gerekli bilgilerinin düzenlendiği bir form açar. Burada hastaya ait kişisel, kurumsal, kimlik ve iletişim bilgileri bulunur.

cbPoliklinik: hastanın o sevkinde hangi poliklinikte muayene olacağı seçilir.

txtSıraNo: Hastanın poliklinikte muayene için bekleyeceği sıra numarası otomatik olarak verilir.

txtKayitSaati: hasta kaydının yapıldığı saati sistem saatinden çekip bu alana yazdırılır.

btnKaydet: hastanın bu sevkini kaydeder ve bu sevke tahlil ve işlem girilebilir. Groupbox Yapılan tahlil ve işlemler: bu groupbox içinde yer alan alanlar yapılan her bir işlem için doldurulup Ekle butonu ile alttaki gride eklenir. Dr. Kodu her bir doktorun sahip olduğu kod yazılır. Tarih ve saat sistemden çekilir.

btnKaydet: hastanın bu sevkini yapılan işlemler ile birlikte kaydeder (Gride eklenen kayıtlar direk veritabanına işlenirse bu butona gerek kalmayabilir).

btnSeçSil: Hastanın hesabında silinmek istenen işlem veya tahlil grid satır baslığından seçilerek bu buton ile silinir.

btnYeni: Formu temizleyerek yeni bir hastaya işlem yapabilmeye hazır hale getirir.

btnTaburcu: Hastanın gerekli işlemleri (Örneğin ücret tahsil edilmesi) bittikten sonra taburcu edilir. Yani veri tabanına çıkış saati yazılır.

btnYazdır: Hastanın bu sevkine ait bilgileri yazdırılır.

Toplam Tutar: Gridde hasta ya işlenen işlemlerin miktarları ve birim fiyatları çarpılarak işlem tutarı hanesinde görülecek, bu işlem tutarları toplamı toplam tutarda gösterilir,

Poliklinik Tanıtma: Sağlık ocağındaki polikliniklerin insert, update, delete edildiği form, dbPoliklinik te burada kayıtlı ve geçerli poliklinikler görüntülenecek. Poliklinik adı girilip textbox üzerinde entere basıldığında kayıt varsa form doldurulur, yoksa böyle bir kayıt bulunamadı açayım mı diye msgbox uyarısı verir, evet seçilirse alttaki komponente geçer aksi halde formu temizler.

Kullanıcı tanıtma: Kullanıcı adı yazılıp enterlandıgında bilgileri gelir, yetkili kullanıcılar haricindekilere Referanslar ana menüsü görünmez.

Doktor tanıtma: kodu girildiğinde bilgiler gelir ya da mesajla bu kaydı açayım mı diye sorar, doktor kodları hasta işlemleri formunda işlem eklemede ve raporlarda imza olarak kullanılır.

Sağlık Personeli tanıtma: hemşireler vb. personel tanıtılır doktor tanıtmanın benzeri işlemler yapılır.

Demo: https://www.youtube.com/watch?v=ydSiWok7wN8&t=95s&ab_channel=ErayK%C4%B1sabacak

Github : https://github.com/eraykisabacak/Saglik-Ocagi-Hasta-Takip-Sistemi

C# ile Sayı Bulma Oyunu Find the Numbers Game

Sayı Bulma Oyunu

✓ Basamak sayısı kullanıcı tanımlı olmalı ve rasgele üretilmelidir.

✓ Sayının rakamları için tekrarlı ve tekrarsız seçeneği olmalıdır.

✓ Kullanıcı sayıyı bulmasına yardımcı olmak için yerinde olanlara mavi renk; yerinde olmayıp içinde geçen sayılara kırmızı renk ile işaretlenmelidir.

✓ Hak sayısı ise kullanıcı tarafından belirlenebilmelidir.

✓ Her hak için belirli bir süre tanınmalıdır.

✓ Skor listesi tutulmalı ve gerekli bilgiler bir dosyada tutulmalıdır.

Github: https://github.com/eraykisabacak/Say-Bulma-Oyunu-Find-the-Numbers-Game

C# ile Adam Asmaca Oyunu – Hangman Game with C#

Adam Asmaca Oyunu

✓ Bilinemeyen her harf için adamı asılmaya bir adım daha yaklaştıran kelime oyununu Windows uygulaması şeklinde kodlamanız istenmektedir.

✓ Form tasarımları gerekenlere göre özgün bir şekilde oluşturulmalıdır.

✓ Kelime veritabanı olarak kullanılmak üzere bir metin dosyası oluşturun. Bu metin dosyasına yeni kelime ekleme ve dosyadan kelime silme işlemleri yapılabilmelidir.

✓ Kullanıcını oyuna başladığında opsiyonel olarak belirlediği harf sayısı kadar veya rasgele boyutlarda bir kelime, veritabanındaki uygun kelimelerden seçilmedir.

✓ Sorulan kelimeye uzunluğunun 2 fazlası kadar bir hak tanıyarak kullanıcının kelimeyi bulması istenmelidir.

✓ Sorulan kelimenin her harfi için farklı metin kutuları kullanılmalıdır.

✓ Yanlış tahmin edilen harfler form üzerinde görülmelidir.

✓ Tahminlerde harf tekrarına izin verilmemeli ve kullanıcının hak sayısından düşürülmemelidir.

✓ Skor listesi yapılmalıdır ve bu bilgiler bir dosyada tutularak oyun yediden başladığında görüntülenebilmelidir

Github : https://github.com/eraykisabacak/Adam-Asmaca-Oyun-Hangman-Game

Hangman Game

✓ A word game that brings man one step closer to hanging for each unknown letter You will be prompted to code it as a Windows application.

✓ Form designs should be created in an original way according to the requirements.

✓ Create a text file for use as a word database. This text Adding and deleting words from the file should be possible.

✓ The number of letters that the user can specify when starting the game or A word of random size should be selected from the appropriate words in the database.

✓ By giving the user the right to a word more than 2 should be asked.

✓ Different text boxes should be used for each letter of the asked word.

✓ Incorrectly guessed letters should appear on the form.

✓ Repetition of letters should not be allowed in predictions and should not be reduced.

✓ Score list should be made and this information is kept in a file when the game starts from seven must be able to be displayed

Github : https://github.com/eraykisabacak/Adam-Asmaca-Oyun-Hangman-Game

Tasarım Desenleri (Design Pattern) Nedir? Anti Pattern Nedir?

Tasarım desenleri nesneye yönelik programlama dillerinde sürekli olarak ortaya çıkan sorunlara çözüm getiren kalıplardır. Farklı bir sorunla karşılaşan bir programcı bu patternlere bakarak sorunu hızlı bir biçimde çözümleyebilecektir.

Algoritma değildir. Uygulamanın geliştirilebilirliği ve kalitesinin artırır. Gelişme süresini azaltır. 3 ana başlıkta bunları toplayabiliriz.

1- Creatinal Pattern (Kurucu Desenler) :

Kurucu desenler nesnelerin oluşturulmasında ve yönetilmesinde kullanılan bir desendir.

Bu başlıktaki patternler :

  • Abstract Factory
  • Builder
  • Factory Metod
  • Object Pool
  • Prototype
  • Singleton

2- Behavioral Pattern (Davranışsal Pattern):

Birden fazla sınıfın bir işi yerine getirirken nasıl davranacağını belirlerken kullanılan bir desenlerdir.

Bu başlıktaki patternler :

  • Adapter
  • Bridge
  • Composite
  • Decorator
  • Facade
  • Flyweight
  • Proxy

3- Structual Pattern ( Yapısal Desenler):

Nesnelerin birbirleri ile ilişkisini düzenleyen desendir.

Bu başlıktaki patternler :

  • Chain of Responsibility
  • Command
  • Interpreter
  • Iterator
  • Mediator
  • Memento
  • Observer
  • State
  • Strategy
  • Template Method
  • Visitor

Anti Pattern Nedir?

Anti patternler de bir patterndir ama yazılımsal olarak bir problemi kabul edilmiş bir pattern olarak kullanmak yerine özgün bir yöntem ile çözmek demektir. Bu anti patternlerin bir dökümante edilmiştir. Bu dökümante olmasının avantajı ise programcının bu yöntemlerden mümkün olduğunca uzak olması daha iyi olacaktır.

Bazı anti patternler:

  • Magic Push Button
  • Spagetti Coding
  • Functional Decomposition
  • Error Hidding
  • Swiss Army Knife
  • Cricular Dependency
  • God Object
  • Cargo Cult Programming
  • Golden Hammer
  • Boat Anchor
  • Copy Paste Programming

Magic Push Button :

Kullanıcı arayüzü ile iş mantığını tek noktadan birleştirilmiş, sihirli butona tıklayarak form gönderme, arayüz doğrulama gibi.

Spagetti Coding:

Spagetti coding, aynı spagetti gibi her şey farklı bir yerde düzgün değil ve karmaşık yapıdaki kodlama.

God Object:

God Object, İngilizceden Türkçeye çevirdiğimizde Tanrı Nesnesi yani bir nesne var bütün program o nesnede çok fazla veri ve method barındırmasıdır.

Cargo Cult Programming:

Desen ve methodları ne, neden ve niçin olduğunu anlamadın kullandığımız desendir. Copy paste gibidir.

Circular Dependency:

Circular dependency, bir class içindeki başka bir class’ın referansı bulunuyor fakat o class’ın içinde de önceki class’ın referansı bulunuyor. Böylelikle döngü haline gelerek Gargabe Collector’un işini yapmamıyor.

Boat Anchor :

Boat Anchor, herhangi bir amaçla kullanılmayan bir sistem parçasını unutmak veya tutmak

Golden Hammer:

Golden Hammer, favori bir çözümü vardır ve her sorun için aynı çözümü uygulamaya çalışır.

Functional Decomposition

Her fonksiyon için ayrı bir class açmak.

Error Hidding

Programın hata vermesine rağmen her yere try catch blokları koyarak bunu kullanıcıya göstermemek.

C# – Ajanda Yazılımı – Personel Girişi ve FileStream Dosya İşlemleri

NYP ilkeleri ile geliştirilecek personel bilgilerini tutan bir Ajanda yazılımı tasarlamanız istenmektedir. Bu amaçla kullanılmak üzere aşağıda verilen Form tasarımlarını yapmalıdır. Ayrıca personel bilgilerine erişmek ve sorgulama işlemlerinde kullanmak üzere Personel.cs ve Ajanda.csisminde iki sınıf tasarlanacaktır. Girilen kayıtlar dosyaya kaydedilecek ve program kapatıldığında bilgi kaybı olmayacaktır. Program yeniden çalıştırıldığında veriler dosyadan okunacak ve çalışmaya devam edecektir. Veri tabanı kullanılması istenmemektedir.

Program çalıştırıldığında ilk olarak Login Penceresi gelecek ve Kullanıcı Adı – Şifre eşleşmelerini “users.txt” dosyasından kontrol edilecek. Yetkili bilinen bir kullanıcı ise Login formu gizlenecek; Ana Form açılacak.

Ana Formun Menustrip kontrolünde Görünüm sekmesinden yeni veri kaydı yapılacak olan Personel Kayıt Ekranına ve Arama Ekranlarına erişim sağlanacaktır.

Tasarlanacak Personel sınıfı için;

a)Personel bilgilerinin ( Ad, Soyad, Doğum Tarihi, Meslek, Cinsiyet, Medeni durum ve maaş ) ve sorgulama metotlarının kodlanacağı bir sınıf tasarlayın. Tüm alanlar için uygun veri türlerini belirleyin.

b)Sınıftaki tüm değişkenler için property tanımlamalarını yapın.

c)Personel adını ve soyadını parametre olarak alan bir kurucu metot tanımlayın.

d)Yaş adında bir sadece get bloğu olan bir property tanımlayın. Bu property için doğum_tarihi değişkenine bağlı olarak personelin yaşını geri dönderecek şekilde kodlamasını yapın.

e)Cinsiyet ve Medeni Durum alanları için enum tanımları yapın.

f)ZamYap, KalanGünSayısı, DosyadanOku, DosyayaYaz isimlerinde 4 metot tasarlamanız gerekmektedir:

ZamYap Metodu: Parametre olarak verilen miktar kadar personelin maaş değişkeninin değerini günceller.

KalanGünSayısı Metodu: 57 yaş baz alınarak personelin emekliliğine kalan gün sayısını hesaplar ve geri dönüş değeri olarak verir.

DosyadanOku Metodu: Belirli bir konumda tutulan “data.txt” isimli dosyadan kayıtların tamamını okur ve her biri için Personel nesnesi oluşturur. Bunları Personel tipinde bir diziye yerleştirip ve bu diziyi geri dönüş değeri olarak verir. Amacı program başlangıcında kayıtların okunmasıdır.

i.Birinci yöntem olarak; burada henüz bilmediğiniz (!) Generic List yapılarını araştırıp kullanabilirsiniz.

Örnek: List<Personel> liste = new List<Personel>();

ii.İkinci bir yöntem olarak; dosyanın ilk satırında toplam kayıt sayısını tutarak kaç elemanlı bir dizi oluşturacağınızı bilebilirsiniz.

Örnek:Personel[] kayıt= new Personel[1000];

iii.Bu biçimlendirmeyi okumak için String sınıfının Split metodundan faydalanabilirsiniz.

DosyayaYaz Metodu: Personel kayıt listesini parametre olarak alır ve “data.txt”isimli dosyaya aşağıdaki biçimlendirmeye uygun şekilde herbir satıra bir kayıt olacak biçimde dosyayı oluşturur.

Örnek Kayıt Biçimlendirmesi şu şekilde olmalıdır:

ad | soyad | dogum_tarihi | meslek | cinsiyet | medeni_durum | maas | email | adres | telefonlar

Burada telefonlar ajanda nesnesinden alınacağı için birden fazla olabilir:

telefonlar : telAdı1,telNo1 + telAdı2,telNo2 + telAdı3,telNo3

Bu biçimlendirmeyi oluşturmak için String sınıfının Join metodundan faydalanabilirsiniz.

Bir personelin birden fazla telefon bilgisi (ev, iş, GSM, GSM2, vb.) olabilir. Bu nedenle telefonları tutmak amacıyla Ajanda.cs isminde bir sınıf tasarlamanız istenmektedir. Ajanda sınıfında telefonAdı ve telefonNo isimli uygun türlerde iki değişken tanımlamasını ve bu değişkenlerin property tanımlamalarını yapınız. Ayrıca uygun bir kurucu metot tanımlayınız.

Örnek:telefonAdı = ev , telefonNo = 332 223 33 36

Daha sonra Personel sınıfı içinde bir Ajanda dizisi oluşturun ve o personele ait telefonları bu diziye ekleyin. (Not:Ajanda dizisini generic list olarak veya 10 elemanlı bir dizi olarak oluşturabilirsiniz. )

DİKKAT EDİLMESİ GEREKENLER

1.Ana Form MdiParent olarak, diğerleri child formlar olarak çalışacaktır.

2.Sınıflar için yukarıda tanımlayacağınız metot ve değişkenlerin tamamı form arayüzünde kullanılmayacak olabilir. Önemli olan sizden istenilenlerin eksiksiz yapılmasıdır.

3.Personel Kayıt işlemi aşağıda tasarımı görülen form üzerinden yapılacaktır. Bu esnada tasarlanacak olan Personel ve Ajanda sınıflarının kullanılması zorunludur. Sınıflar kullanılmadan yapılan ödevler bütünüyle geçersiz sayılacaktır.

4.Personel Kayıt Arama Ekranında personel adına göre arama işlemi yapılacak; ilk bulunan kayıt bilgileri yeni bir FormKayıt Penceresi içinde gösterilecektir.

5.30.05.2019 Perşembe günü ders saatinde şahsen yapılacaktır. Kontrole gelmeyenlerin ödevleri geçersiz sayılacaktır.

6.Dosya adı: öğrenci_numarası.rar şeklinde olmalıdır.

Kodlar : https://github.com/eraykisabacak/Ajanda-Yaz-l-m-

555 Timer Kullanarak 0-99 Sayıcı Devresi Mantık Devreleri Dersi Proje Yapımı

1.GİRİŞ

Mantık devreleri dersinde görmüş olduğumuz 4033 entegresi, kapasitörler 7 segment ve clock palsi vermek için 555 timer konularından bir projeyi hayata, çalışır duruma getirmemiz gerekli.

Bu projeyi yaparken breadboard’un nasıl kullanıldığını, 555 Timer nasıl kullanıldığını nasıl breadboard’a bağlanacağını nasıl çalıştırılacağını gibi şeyler bana kattı. Bu entegreleri kullanırken bana 9 voltluk pil ile çalışmadığını öğrendim ve hemen adaptör alarak bu sorunun üstesinden geldim. Daha sonra internetten araşmalar yaparak entegrelerin ve butonların breadboard’a nasıl takılması gerektiğini videolar ve makaleler yardımıyla öğrenmeye çalıştım. Aynı zaman da projeye başlamadan önce bir simulasyon yapabilmek için de Proteus programını kullanarak nasıl yapılacağını öğrenmeye çalıştım. Bazen hatalarım oldu nasıl yapılacağını nasıl devrenin yapılacağını anlayamadım ama araştırmalar yaparak projeyi başarılı bir şekilde çalıştırdım ve yaptım.  

2.MATERYEL VE YÖNTEM

Projenin yapımında kullanılan materyaller şunlardır:

  • 150R Direnç
  • 555 Entegre
  • 4033 Entegre
  • 10 uF Kapasitör
  • 7 Segment Display
  • Kırmızı Led
  • Erkek Erkek Jumper Kablo
  • Bread Board
  • 5 Volt Çıkış veren Adaptör

Projeyi yapmak için Fatih BAŞÇİFTÇİ hocamızın sayfasındaki konu anlatımlarından faydalandım ve konuları internet üzerinden aramalarımla bilgi edindim.

3.PROJE YAPIM AŞAMASI

 Projemiz 2 tane seven segmentten oluşacak.1 tane 555 timer entegresi kullanılacak. 555 timer bize clock palsleri üretecek. 555 entegresinden çıkan clocklar daha sonra 4033 entegresinin clock girişine bağlanacak. Daha sonra bu clocklar tek tek A’ya clock verecek daha sonraki clock palsinde B’ye verecek tek tek A’dan G çıkışına kadar vererek ilerleyecek. En son G’ye geldiğinde bir sonrakinde tekrardan başa dönecek.Bu A B’ler daha sonra seven segmentin a b c’ye direk olarak bağlacak. 2 tane 4033 kullandığımız için birinci 4033’ün 1 tekrarı CO çıkışından yani fazlalık olduğundan bunu ikinci 4033’ün clock palsine verecek. Düzgün bir şekilde VCC ve GND bağladığımızda çalışacaktır.

Projemizin Proteus’daki simulasyonunu aşağıda görebilirsiniz.

Şekil 3.1 Devrenin Proteus ile çizimi

 

4.PROJE’DE KULLANDIĞIM ELEMANLAR

4.1. Direnç

Direncin kelime anlamı, “bir şeye karşı gösterilen zorluktur” olarak tanımlanır. Devre elemanı olan dirençte devrede akıma karşı bir zorluk göstererek akım sınırlaması yapar. Elektrik enerjisi direnç üzerinde ısıya dönüşerek harcanır. Direncin birimi ”Ohm” ‘dur. Ohm ‘un ast katları; pikoohm, nanoohm, mikroohm, miliohm, üst katları ise; kiloohm, megaohm ve gigaohm ‘dur.Direnç “R” veya “r” harfi ile gösterilir.

Şekil 4.1.1 Direnç

Dirençler devrelerde ne için kullanılır;

  • Devreden geçen akımı sınırlayarak belli bir değer tutmak,
  • Devrenin besleme gerilimini bölüp küçülterek diğer elemanların çalışmasını sağlamak
  • Hassas devre elemanlarının yüksek akımdan zarar görmesini engellemek
  • Yük (alıcı) görevi yapmak ve ısı enerjisi elde etmek gibi amaçlarla kullanılır.

4.1.1. Dirençler Çeşitleri;

Karbon karışımlı dirençler: Bu tip dirençler toz halindeki karbonun dolgu maddesi ve reçineli tutkal ile karışımından üretilir. Karbon dirençler tolerans oranları yüksek olan ve değerleri direnç eskidikçe değişebilen dirençlerdir. Karbon dirençler büyük değerli dirençlerin yapılmasına uygundur. Karbon dirençler küçük akımlı devrelerde kullanılır ve güçleri 1/10 W ile 5 W arasında değişmektedir. Karbon dirençlerin değerleri renk koduyla kodlanmıştır.

Film dirençler (ince tabakalı direnç): Film dirençler elektrik akımına karşı direnç gösteren bir maddenin, seramik bir çubuğun etrafına kaplanmasıyla elde edilen dirençlerdir. Film dirençlerin; karbon film dirençler, metal film dirençler, metal oksit film dirençler, metal cam karışımı film dirençler ve cermet (seramik-metal) film dirençler gibi çeşitleri bulunmaktadır. Film dirençlerin tolerans (hata) oranları %1-2 gibi çok küçük değerlerdir. Düşük tolerans değerleri ve yük altındaki yüksek kararlılıkları nedeniyle film dirençler hassas yapılı elektronik devrelerde sıklıkla tercih edilir.

Tel sarımlı (taş) dirençler: Taş dirençler; krom-nikel, nikel-gümüş, konstantan, tungsten, manganin vb. Maddelerden üretilmiş tellerin porselen, bakalit, amyant gibi ısıya dayanıklı olan bir madde üzerine sarılması ile üretilen dirençlerdir. Taş dirençler büyük güçlüdürler, bu nedenle de yüksek akım çeken devrelerde kullanılmaları uygundur. Aynı sebepten dolayı taş dirençlerin yaydıkları ısı da yüksek olacağından devre üzerinde bu tip dirençlerin yakınına elektrolitik kondansatör, diyot, transistör, entegre vb. ısıdan çabuk etkilenen elemanlar monte edilmemelidir. Taş dirençler küçük değerli dirençlerin yapılması için uygundur. Taş dirençlerin değerleri gövdeklerinde yazılıdır ve güçleri 2 W ile 225 W arasındadır.

4.1.2. Dirençler Bağlantı Türleri;

Paralel bağlantı: Paralel bağlantıda formül 1 /RToplam = ( 1 /R1 ) + ( 1 /R2 ) + ( 1 /R3 ) + ( 1 /R4 ) şeklindedir. İşlemler yapılmadan önce tüm değerler aynı yani ohm, Kohm veya Mohm cinsine dönüştürülmelidir.

Şekil 4.1.2.1 Diren paralel bağlantı

Seri bağlantı: Yan taraftaki resimde dört adet direncin birbirine seri bağlanmıs durumu görülmektedir. A ve B uçlarındaki toplam direnç değerinin hesaplama formülü, RToplam = R1 + R2 + R3 + R4 şeklindedir.

Şekil 4.1.2.2 Seri bağlantı

4.2 Kapasitör

Kondansatörler(sığaçlar) ya da diğer ismiyle kapasitörler, elektrik enerjisini elektrik alan olarak depolayan iki uçlu bir devre elemanlarıdır. Temelde iki adet iletken plakanın arasına yalıtkan bir madde koyulması ile elde edilir. Devrede ve denklemlerde C harfi ile gösterilir ve birimi Farad (F)‘dır.

Şekil 4.2.1 Kapasitörün Mantığı

Kondansatörler doğru akımı (DC) iletmeyip, alternatif akımı (AC) iletme özelliğine sahiptir. Bu özellikleri sayesinde çoğu devrede farklı amaçlar ile kullanılırlar. Güç kaynağı devrelerinde filtrelemede, rezonans devrelerinde istenilen frekansı üretmede ve güç aktarım hatlarında gerilim düzenlenmesi ve güç akışının kontrolünde kullanılırlar.Kondansatör’ün 6 tane çeşidi bulunur. Seramik Kapasitör, Elektrolit Kapasitör, Tantal Kapasitör, Mika Kapasitör, Trimer Kapasitör, Süper Kapasitör.

Seramik Kapasitör, mercimek kapasitör de deniliyor. Ses ve RF devrelerde tercih edilir. Ucuz ve güvenilirdir.

Elektrolit Kapasitör, Polarize tipte kutuplu bir yapısı vardır. Yüksek kapasite değerlerini sağlayabilirler. Silindiriktir. Düşük frekans işlerinde kullanılır.

Tantal kapasitör, Elektrolit kondansatör gibi tantal kapasitörde kutuplu yapısı vardır. Boyutlarına oranla yüksek kapasite değerleri sunabilirler.  Ters gerilme toleransları çok düşüktür.

Mika kapasitör, RF devrelerinde kullanılır. Günümüzde çok kullanılmayan kapasitör çeşididir.

Trimer kapasitör, kapasite değeri tornavida aracılığı ile değiştirilebilir tiptedir.En düşük 0.5 – 10 pf ve en yüksek 1-120 pf arasında değişir.

Süper kapasitör, ultra kapasitör de deniliyor. 12 Kf (12.000 Farad) gibi çok yüksek kapasite değerlerine sahiptir.Depoladığı enerjinin yaklaşık 10 ile 100 katı kadarını depolar.

4.3. Bread Board (Devre Tahtası)

Proje yaparken en büyük yardımcılarınızdan birisi ana temeli oluşturan devre elemanı olan Bread Board’dır. Devre tahtası ile projelerimizi lehim yapmadan kolayca kurabiliriz. Genel olarak içerisinde birbirine bağlı hatları barındıran devre tahtası üzerine elektronik bileşenleri yerleştirerek projelerimizi çalışır hale getirebiliriz. Devre tahtası üzerinde birbirne bağlantılı paralel hatlar bulundurur.

Şekil 4.3.1 Breadboard

Kırmızı hatta +, mavi hatta ise toprak hattını bağlayıp daha sonra devrenizin diğer bölümlerinde bu hatlar üzerinden gerilimlere ulaşabilirsiniz. Orta bölümde bulunan 5’li delik gruplarının her biri kendi içerisinde bağlantılıdır. Yani kırmızı çizgi boyunca uzanan her bir delik kısadevre durumundadır. Dolayısıyla aynı sıradaki deliklere oturttuğunuz komponentler birbirine bağlanmış olur. Deliklerin her biri A,B,C,D,E,F harfleriyle belirtilmiştir. Ayrıca sol taraftaki numaralar da delik gruplarını ifade etmektedir.

Breadboard’ın iç yapısına bakacak olursak bu şekilde görünecektir.

Şekil 4.3.2 Breadboard içi

4.4 5 Volt Adaptör

5 volt adaptörü breadboardumuza bağlamamız şarttır çünkü entegreler 5 volt güç ile çalışmaktadır. Eğer entegrelere daha fazla güç verirsek entegreler çalışma veya entegreleri yakma ihtimalimiz olabilir.

Şekil 4.4.1 5 Volt Adaptör

 

4.5 4033 Entegre

4033 Entegresi 7 segment için gereklidir. Birinci pin yerinden clock girişi alır. Her aldığında tek tek sayar. 0’dan başlayarak 9’a kadar gidecektir.

4033 Entegresinin içeriğinde D flip flop’u bulunur. Mantık şemasını alt tarafta bulabilirsiniz.

4033 Pinlerindeki A,B,C,D,E,F çıkışlarını 7 Segment Displaydeki A,B,C,D,E,F girişlerine bağlamalıyız. Böylelikle her clock palsi geldiğinde tek tek gezecektir.

16. Giriş pininde VCC. Sekizinci girişe GND’yi bağlıyoruz. Üçüncü girişe de VCC bağlıyoruz. İlk clock palsi verdiğimiz 4033 entegresinden 9’a kadar gideceği için bir sonraki clock palsinde fazlalık döndürecek. Bu fazlalık clock palsi yerine geçecek ve bunu da 5 pinli girişten 2. 4033 entegresinin birinci girişine bağlayarak 4033 entegrelerini devremize bağlamış oluyoruz.

Şekil 4.5.1 4033 Entegresinin Mantığı İç Tasarımı

Şekil 4.5.2 4033 Entegresinin Girişler

4.6 555 Timer Entegre

555 Entegresi bize clock palsleri verecektir. Birinci pinimiz GND bağlayacağız.Birinci giriş pinimizi GND’ye bağlayacağız. Sekizinci girişimiz VCC bağlayacağız. İkinci pin ile altıncı pinilerin birbirine bağlıyoruz. Sekizinci pinden bir kablo ile yedinci pine bağlıyoruz. Daha sonra yediden de altıncı pine direnç bağlıyoruz. Altıncı pine de kapasitör bağlıyoruz ve eksi tarafını GND’ye bağlıyoruz.Dörtüncü pine VCC bağlıyoruz daha sonra dörtden geleni sekizinci pine bağlıyoruz. Daha sonra tek tek kontrol ediyoruz herhangi bir yanlışlık olmaması için düzgün bağladığımızda üçüncü pinden clock palslerini alabiliriz. Öncelikle led ile kontrol etmekte fayda var.

Şekil 4.6.1 555 Timerın Girişleri

4.7 Seven Segment Display

Günlük hayatta birçok alanda karşımıza çıkan ve 7 Segment Display diye adlandırılan sayısal göstergeler oldukça yaygın şekilde kullanılan elektronik devre elemanlarıdır. 7 Segment Display’ler LED tabanlı göstergelerdir. İçerisinde bulunan 7 adet LED ile aydınlatılan 7 ayrı bölmeden oluşan bir sistem bütünüdür. 7 Segment Display’lerde LED’lerin kullanılmasının en önemli nedeni LED’lerin çok küçük hacimlerde olan türlerinin olmasıdır. Bu küçük LED’ler belirli bir kalıp içerisine yerleştirilerek 7 Segment Display’ler oluşturulmaktadır.

Şekil 4.7.1 Seven Segment

Sayıların ve yazıların oluşması için A,B,C,D,E,F olarak adlandırılmıştır. Eğer A harfini basmak istiyorsak A,B,C,E,F,G pinlerine elektrik göndermemiz ile A harfi oluşacaktır. Ama bizim böyle tek tek yapmamıza gerek yoktur çünkü 4033 entegresi her clock palsinde bize tek tek 0,1,2 …. 9 kadar değerler verecektir.

Seven segmentin 2 çeşidi bulunur. Birisi katot’dur diğeri anottur.Katot da COM pin yerine GND vererek seven segmentimize güç vermiş oluyoruz. Anotta ise COM pin yerine VCC vererek seven segmentimizi çalıştırmış oluyoruz.

Şekil 4.7.2 Seven Segment Girişleri

Projenin Youtube Videosu : https://www.youtube.com/watch?v=HzCiIdXODWI&ab_channel=ErayK%C4%B1sabacak

5.KAYNAKLAR

Prof. Dr. Fatih BAŞÇİFTÇİ, 2018,  Boolean Cebiri,

http://www.fatihbasciftci.com/dersler/mantik_devreleri/bolum_4/index.php

Prof. Dr. Fatih BAŞÇİFTÇİ, 2018,  Lojik Kapılar ve Lojik Devreler,

http://www.fatihbasciftci.com/dersler/mantik_devreleri/bolum_5/index.php

Prof. Dr. Fatih BAŞÇİFTÇİ, 2018,  Karnaugh Haritaları,

http://www.fatihbasciftci.com/dersler/mantik_devreleri/bolum_6/index.php

Robot Sistem, 2018,  Direnç,

http://www.robotiksistem.com/direnc_nedir_direnc_cesitleri.html

Robotistan, 2016,  Direnç,

Coşkun Taşdemir, 2012,  Breadboard,

http://arduinoturkiye.com/devre-tahtasi-breadboard-kullanimi/

Devre Okulu, 2018,  Karnaugh Haritaları,

http://devreokulu.com/74HC08.html

Hızır İlyas Seçen, 2018,  Karnaugh Lojik Devreler,

https://www.elektrikport.com/makale-detay/lojik-devreler-(kapilar)-elektrikport-akademi/11519

Emir Buğra KÖKSALAN, 2017,  Karnaugh Haritaları,

Muhammed Ahmet ALKAN, 2016,  7 Segment Display Nedir?,

https://www.elektrikport.com/teknik-kutuphane/7-segment-display-nedir/18475

Kerem İzgöl, 2017,  Kapasitör Nedir?,

Java’da Methodlar Yardımı ile Hesap Makinesi Yapımı Kodları

Bu makalemizde methodlar yardımı ile hesap makinesi yapacağız.

Öncelikle 2 tane sayı alalım bu int değişkeninde olsun ve bunların isimleri sayi1 ve sayi2 olsun. Daha sonra kullanıcıdan sayılarımızı almamız için scanner sınıfını ekleyelim.

Daha sonra ise kullanıcıya bir metin yazalım. Burada 1 Toplama 2 Çıkartma 3 Çarpma 4 Bölme diye bir metin yazdıralım.Daha sonra kullanıcıdan bir tane işlem isteyelim. Daha sonra ise girdiği işlemi kontrol etmek için bir if else yazalım. Burada her işlem için öncelikle sayilar metoduna gidecek ve orada 2 tane sayı isteyecektir. Daha sonra ise her if else de hangi işleme gidecekse oraya gönderecektir ve sonucu ekrana yazdıracaktır.

Kodları alt tarafta bulabilirsiniz.

Kodlar:
https://github.com/eraykisabacak/java-hesap-makinesi