
Yazar:
KodlarTR
OpenCV ile Basit Görüntü Tanıma
Görüntü tanıma (image recognition) için Python tabanlı bazı temel örnekleri aşağıda paylaşıyorum. Bu örnekler, popüler kütüphanelerden OpenCV, TensorFlow ve PyTorch kullanarak nasıl görüntü tanıma yapılabileceğini gösteriyor. Kodlar basit ve anlaşılır olacak şekilde hazırlandı.
1. OpenCV ile Basit Görüntü Tanıma (Yüz Tespiti)
OpenCV, yüz tanıma gibi temel görüntü işleme görevleri için oldukça kullanışlıdır. Aşağıdaki örnek, bir görüntüdeki yüzleri tespit eder.
python
Kopyala
Gereksinimler:
Görüntü tanıma (image recognition) için Python tabanlı bazı temel örnekleri aşağıda paylaşıyorum. Bu örnekler, popüler kütüphanelerden OpenCV, TensorFlow ve PyTorch kullanarak nasıl görüntü tanıma yapılabileceğini gösteriyor. Kodlar basit ve anlaşılır olacak şekilde hazırlandı.
1. OpenCV ile Basit Görüntü Tanıma (Yüz Tespiti)
OpenCV, yüz tanıma gibi temel görüntü işleme görevleri için oldukça kullanışlıdır. Aşağıdaki örnek, bir görüntüdeki yüzleri tespit eder.
python
Kopyala
Kod:
import cv2
# Önceden eğitilmiş yüz tanıma modelini yükle
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
# Görüntüyü oku
image = cv2.imread('yuz_resmi.jpg')
# Görüntüyü gri tonlamaya çevir (yüz tanıma için gerekli)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Yüzleri tespit et
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
# Tespit edilen yüzlerin etrafına dikdörtgen çiz
for (x, y, w, h) in faces:
cv2.rectangle(image, (x, y), (x+w, y+h), (255, 0, 0), 2)
# Sonucu göster
cv2.imshow('Yuz Tespiti', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
Gereksinimler:
- pip install opencv-python
- yuz_resmi.jpg adında bir görüntü dosyası.
- Bu kod, görüntüdeki yüzleri tespit eder ve etrafına mavi bir dikdörtgen çizer.
Yorum
Yorum Yok

Yazar:
admin
Basit Python kodu ve hata ayıklama
Kodlarda hata ayıklama (debugging) tekniklerinden biri **"baskı (print) yöntemiyle hata ayıklama"**dır. Bu yöntem, kodun belirli yerlerine
komutları ekleyerek değişkenlerin değerlerini ve kodun akışını takip etmeyi sağlar.
Örnek: Basit Python kodu ve hata ayıklama
python
Problem:
Bu kod çalıştırıldığında şu hatayı verir:
vbnet
Hata Ayıklama (Print Yöntemiyle)
Koda
ifadeleri ekleyelim:
python
Çıktı:
vbnet
Bu çıktıyla
değişkeninin sıfır olduğunu net olarak görebildik. Böylece hatanın sebebi anlaşılır.
Çözüm:
Böyle bir durumda, sıfıra bölme hatasını engellemek için kontrol eklenebilir:
python
Çıktı:
makefile
Bu şekilde, hem hata kaynağı anlaşıldı hem de kod güvenli hale getirildi.
Kodlarda hata ayıklama (debugging) tekniklerinden biri **"baskı (print) yöntemiyle hata ayıklama"**dır. Bu yöntem, kodun belirli yerlerine
Kod:
print
Örnek: Basit Python kodu ve hata ayıklama
python
Kod:
def bolme_islemi(sayi1, sayi2):
sonuc = sayi1 / sayi2
return sonuc
print(bolme_islemi(10, 0))
Bu kod çalıştırıldığında şu hatayı verir:
vbnet
Kod:
ZeroDivisionError: division by zero
Koda
Kod:
print
python
Kod:
def bolme_islemi(sayi1, sayi2):
print(f"Gelen sayılar: sayi1={sayi1}, sayi2={sayi2}")
sonuc = sayi1 / sayi2
return sonuc
print(bolme_islemi(10, 0))
vbnet
Kod:
Gelen sayılar: sayi1=10, sayi2=0
ZeroDivisionError: division by zero
Kod:
sayi2
Çözüm:
Böyle bir durumda, sıfıra bölme hatasını engellemek için kontrol eklenebilir:
python
Kod:
def bolme_islemi(sayi1, sayi2):
print(f"Gelen sayılar: sayi1={sayi1}, sayi2={sayi2}")
if sayi2 == 0:
print("Hata: Sıfıra bölme yapılamaz!")
return None
sonuc = sayi1 / sayi2
return sonuc
print(bolme_islemi(10, 0))
makefile
Kod:
Gelen sayılar: sayi1=10, sayi2=0
Hata: Sıfıra bölme yapılamaz!
None
Yorum
Yorum Yok

Yazar:
admin
Soru
Verilen bir tamsayı dizisinde, her elemanın yalnızca bir kez göründüğü ve 1'den n'e kadar olan tüm sayıların bulunduğu bir diziden eksik olan sayıyı bulun. Dizideki sayılar 1 ile n arasında olup, n dizinin uzunluğudur.
Örnek:
Açıklama: 1'den 8'e kadar olan sayılar arasında 5 eksik.
Kısıtlamalar:
Bu problemi çözmek için XOR işlemini kullanabiliriz. XOR'un özellikleri sayesinde, aynı sayılar birbirini sıfırlarken eksik olan sayı bulunabilir. Algoritma şu şekilde çalışır:
Çözümün Açıklaması
Verilen bir tamsayı dizisinde, her elemanın yalnızca bir kez göründüğü ve 1'den n'e kadar olan tüm sayıların bulunduğu bir diziden eksik olan sayıyı bulun. Dizideki sayılar 1 ile n arasında olup, n dizinin uzunluğudur.
Örnek:
Kod:
Girdi: nums = [4,3,2,7,8,2,3,1]
Çıktı: 5
Kısıtlamalar:
- Dizinin uzunluğu n'dir.
- 1 ≤ nums[i] ≤ n
- Her sayı yalnızca bir kez görünür, ancak bir sayı eksik.
Bu problemi çözmek için XOR işlemini kullanabiliriz. XOR'un özellikleri sayesinde, aynı sayılar birbirini sıfırlarken eksik olan sayı bulunabilir. Algoritma şu şekilde çalışır:
- 1'den n'e kadar olan tüm sayıların XOR'unu hesapla.
- Dizideki tüm sayıların XOR'unu hesapla.
- Bu iki XOR sonucunu birbiriyle XOR yaparak eksik sayıyı bul.
Kod:
def findMissingNumber(nums):
n = len(nums)
xor_all = 0
for i in range(1, n + 1):
xor_all ^= i
xor_array = 0
for num in nums:
xor_array ^= num
return xor_all ^ xor_array
# Test
nums = [4, 3, 2, 7, 8, 2, 3, 1]
print(findMissingNumber(nums)) # Çıktı: 5
- Adım 1: xor_all, 1'den n'e kadar olan sayıların XOR'unu tutar. Örneğin, n=8 için 1^2^3^4^5^6^7^8 hesaplanır.
- Adım 2: xor_array, dizideki tüm sayıların XOR'unu tutar. Örneğin, [4,3,2,7,8,2,3,1] için 4^3^2^7^8^2^3^1 hesaplanır.
- Adım 3: xor_all ^ xor_array işlemi, aynı sayıların birbirini sıfırlaması nedeniyle yalnızca eksik sayıyı döndürür.
- Zaman Karmaşıklığı: O(n), çünkü diziyi ve 1'den n'e kadar olan sayıları birer kez tarıyoruz.
- Uzay Karmaşıklığı: O(1), çünkü yalnızca birkaç değişken kullanıyoruz.
Forum:
Günün Kod Sorusu
Yorum
Yorum Yok

Yazar:
admin
Öğrenci Notunu Tahmin Etme
Kodlar.tr için bir örnekle başlayacağız. Elimizde bir grup öğrencinin sınav öncesinde çalıştığı saatler ve aldıkları sınav notları var. Amacımız, yeni bir öğrencinin çalışma saatini bildiğimizde, bu öğrencinin sınav notunu tahmin edebilecek basit bir makine öğrenmesi modeli oluşturmak.
Veri:
Aşağıdaki gibi basit bir veri setimiz olduğunu varsayalım:
Çözüm:
Bu basit doğrusal ilişkiyi modellemek için doğrusal regresyon (Linear Regression) algoritmasını kullanabiliriz. Python'da bu algoritmayı uygulamak için
kütüphanesini kullanacağız.
kütüphanesi kullanılarak temel bir makine öğrenmesi görevinin (regresyon) nasıl gerçekleştirilebileceğini göstermektedir. Gerçek dünya problemleri genellikle daha karmaşık veri setleri ve daha gelişmiş algoritmalar gerektirse de, bu örnek temel prensipleri anlamak için iyi bir başlangıç noktasıdır.
Kodlar.tr için bir örnekle başlayacağız. Elimizde bir grup öğrencinin sınav öncesinde çalıştığı saatler ve aldıkları sınav notları var. Amacımız, yeni bir öğrencinin çalışma saatini bildiğimizde, bu öğrencinin sınav notunu tahmin edebilecek basit bir makine öğrenmesi modeli oluşturmak.
Veri:
Aşağıdaki gibi basit bir veri setimiz olduğunu varsayalım:
Kod:
Python
import numpy as np
# Çalışma saatleri (saat)
calisma_saatleri = np.array([2, 3, 5, 7, 8, 10])
# Sınav notları
sinav_notlari = np.array([60, 75, 82, 90, 93, 98])
Bu basit doğrusal ilişkiyi modellemek için doğrusal regresyon (Linear Regression) algoritmasını kullanabiliriz. Python'da bu algoritmayı uygulamak için
Kod:
scikit-learn
Kod:
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
# Doğrusal regresyon modelini oluştur
model = LinearRegression()
# Modeli verilere göre eğit
model.fit(calisma_saatleri.reshape(-1, 1), sinav_notlari)
# Yeni bir çalışma saati için not tahmini yap
yeni_calisma_saati = 6
tahmin_edilen_not = model.predict([[yeni_calisma_saati]])
print(f"{yeni_calisma_saati} saat çalışan bir öğrencinin tahmini notu: {tahmin_edilen_not[0]:.2f}")
# Veri noktalarını ve regresyon çizgisini görselleştir
plt.scatter(calisma_saatleri, sinav_notlari, color='blue', label='Gerçek Notlar')
plt.plot(calisma_saatleri, model.predict(calisma_saatleri.reshape(-1, 1)), color='red', label='Doğrusal Regresyon Çizgisi')
plt.scatter(yeni_calisma_saati, tahmin_edilen_not, color='green', marker='x', s=100, label='Tahmin Edilen Not')
plt.xlabel('Çalışma Saatleri')
plt.ylabel('Sınav Notları')
plt.title('Çalışma Saatleri ve Sınav Notları İlişkisi')
plt.legend()
plt.grid(True)
plt.show()
- Veri İçe Aktarma:
kütüphanesini kullanarak çalışma saatleri ve sınav notlarını içeren NumPy dizileri oluşturduk.Kod:numpy
- Model Oluşturma:
modülündenKod:sklearn.linear_model
sınıfını kullanarak bir doğrusal regresyon modeli nesnesi oluşturduk.Kod:LinearRegression
- Modeli Eğitme:
metodu ile modelimizi mevcut çalışma saatleri ve sınav notları verileriyle eğittik.Kod:fit()
ifadesi,Kod:reshape(-1, 1)
'ün beklentisi doğrultusunda tek özellikli (çalışma saatleri) veriyi iki boyutlu bir diziye dönüştürmek için kullanılır.Kod:scikit-learn
- Tahmin Yapma: Eğitilmiş modeli kullanarak yeni bir çalışma saati (örneğimizde 6 saat) için sınav notu tahmini yaptık.
metodu, girdi olarak iki boyutlu bir dizi beklediği içinKod:predict()
şeklinde bir girdi verdik.Kod:[[yeni_calisma_saati]]
- Görselleştirme:
kütüphanesi ile gerçek veri noktalarını, elde edilen doğrusal regresyon çizgisini ve tahmin edilen notu bir grafik üzerinde gösterdik. Bu, modelin veriye ne kadar iyi uyduğunu görsel olarak anlamamıza yardımcı olur.Kod:matplotlib.pyplot
Kod:
scikit-learn
Forum:
Python ile Makine Öğrenmesi
Yorum
Yorum Yok

Yazar:
admin
PHP String İçinde Arama Örneği
PHP ile ilgili yaygın bir senaryo ve çözümünü içeren bir kod parçacığı örneği hazırlayacağım.
Bu örnekte, bir metin (string) içerisinde belirli bir kelimenin veya karakter dizisinin (substring) olup olmadığını nasıl kontrol edebileceğimizi göstereceğim. Bu, web geliştirmede sıkça karşılaşılan bir durumdur; örneğin kullanıcı girdilerini doğrulamak, metin analizi yapmak veya belirli anahtar kelimeleri aramak için kullanılabilir.
Aşağıdaki kodda,
(PHP 8+) ve
(eski PHP versiyonları için de geçerli) fonksiyonlarını kullanarak bu kontrolün nasıl yapıldığını göreceksiniz.
Bu PHP kodu, bir metin içerisinde belirli bir alt dizinin varlığını kontrol etmenin iki yaygın yolunu göstermektedir:
<?php
// Aranacak ana metin
$anaMetin = "Merhaba dünya, bu bir PHP örneğidir.";
// Aranacak kelime veya karakter dizisi
$arananKelime = "dünya";
$aranmayanKelime = "javascript";
echo "Ana Metin: '" . $anaMetin . "'\n\n";
// --- Çözüm 1: str_contains() fonksiyonu (PHP 8.0 ve üzeri için önerilir) ---
echo "--- str_contains() ile Kontrol ---\n";
if (str_contains($anaMetin, $arananKelime)) {
echo "'" . $arananKelime . "' kelimesi metin içinde bulundu.\n";
} else {
echo "'" . $arananKelime . "' kelimesi metin içinde bulunamadı.\n";
}
if (str_contains($anaMetin, $aranmayanKelime)) {
echo "'" . $aranmayanKelime . "' kelimesi metin içinde bulundu.\n";
} else {
echo "'" . $aranmayanKelime . "' kelimesi metin içinde bulunamadı.\n";
}
echo "\n";
// --- Çözüm 2: strpos() fonksiyonu (Tüm PHP versiyonları ile uyumlu) ---
// strpos() fonksiyonu, bulunan kelimenin başlangıç pozisyonunu döndürür.
// Eğer kelime bulunamazsa false döndürür.
// Dikkat: Pozisyon 0 (sıfır) olabileceğinden (metnin başında bulunursa),
// katı karşılaştırma (=== veya !==) kullanmak önemlidir.
echo "--- strpos() ile Kontrol ---\n";
if (strpos($anaMetin, $arananKelime) !== false) {
echo "'" . $arananKelime . "' kelimesi metin içinde bulundu.\n";
} else {
echo "'" . $arananKelime . "' kelimesi metin içinde bulunamadı.\n";
}
if (strpos($anaMetin, $aranmayanKelime) !== false) {
echo "'" . $aranmayanKelime . "' kelimesi metin içinde bulundu.\n";
} else {
echo "'" . $aranmayanKelime . "' kelimesi metin içinde bulunamadı.\n";
}
echo "\n";
// Büyük/küçük harf duyarsız arama için stripos() kullanılabilir
$anaMetinKucukBuyuk = "Merhaba Dünya, bu bir PHP örneğidir.";
$arananKelimeKucuk = "dünya";
echo "--- stripos() ile Büyük/Küçük Harf Duyarsız Kontrol ---\n";
echo "Ana Metin (Büyük/Küçük Karışık): '" . $anaMetinKucukBuyuk . "'\n";
echo "Aranan Kelime (Küçük Harf): '" . $arananKelimeKucuk . "'\n";
if (stripos($anaMetinKucukBuyuk, $arananKelimeKucuk) !== false) {
echo "'" . $arananKelimeKucuk . "' kelimesi (büyük/küçük harf duyarsız) metin içinde bulundu.\n";
} else {
echo "'" . $arananKelimeKucuk . "' kelimesi (büyük/küçük harf duyarsız) metin içinde bulunamadı.\n";
}
/*
Çıktı Nasıl Olacak:
Ana Metin: 'Merhaba dünya, bu bir PHP örneğidir.'
--- str_contains() ile Kontrol ---
'dünya' kelimesi metin içinde bulundu.
'javascript' kelimesi metin içinde bulunamadı.
--- strpos() ile Kontrol ---
'dünya' kelimesi metin içinde bulundu.
'javascript' kelimesi metin içinde bulunamadı.
--- stripos() ile Büyük/Küçük Harf Duyarsız Kontrol ---
Ana Metin (Büyük/Küçük Karışık): 'Merhaba Dünya, bu bir PHP örneğidir.'
Aranan Kelime (Küçük Harf): 'dünya'
'dünya' kelimesi (büyük/küçük harf duyarsız) metin içinde bulundu.
*/
?>
PHP ile ilgili yaygın bir senaryo ve çözümünü içeren bir kod parçacığı örneği hazırlayacağım.
Bu örnekte, bir metin (string) içerisinde belirli bir kelimenin veya karakter dizisinin (substring) olup olmadığını nasıl kontrol edebileceğimizi göstereceğim. Bu, web geliştirmede sıkça karşılaşılan bir durumdur; örneğin kullanıcı girdilerini doğrulamak, metin analizi yapmak veya belirli anahtar kelimeleri aramak için kullanılabilir.
Aşağıdaki kodda,
Kod:
str_contains()
Kod:
strpos()
Bu PHP kodu, bir metin içerisinde belirli bir alt dizinin varlığını kontrol etmenin iki yaygın yolunu göstermektedir:
- : PHP 8.0 ve sonrasında sunulan, okunabilirliği yüksek ve doğrudan bu amaç için tasarlanmış bir fonksiyondur.Kod:
str_contains()
- : Daha eski PHP sürümlerinde de çalışan bu fonksiyon, alt dizinin metin içindeki ilk konumunu döndürür. Eğer alt dizi bulunamazsaKod:
strpos()
değeri döndürür. Bu fonksiyonu kullanırken, bulunan konumKod:false
(yani metnin en başı) olabileceği için
ile katı karşılaştırma (Kod:false
) yapmak önemlidir. Ayrıca, büyük/küçük harf duyarlılığını göz ardı ederek arama yapmak içinKod:!==
fonksiyonunun nasıl kullanılacağı da gösterilmiştir.Kod:stripos()
<?php
// Aranacak ana metin
$anaMetin = "Merhaba dünya, bu bir PHP örneğidir.";
// Aranacak kelime veya karakter dizisi
$arananKelime = "dünya";
$aranmayanKelime = "javascript";
echo "Ana Metin: '" . $anaMetin . "'\n\n";
// --- Çözüm 1: str_contains() fonksiyonu (PHP 8.0 ve üzeri için önerilir) ---
echo "--- str_contains() ile Kontrol ---\n";
if (str_contains($anaMetin, $arananKelime)) {
echo "'" . $arananKelime . "' kelimesi metin içinde bulundu.\n";
} else {
echo "'" . $arananKelime . "' kelimesi metin içinde bulunamadı.\n";
}
if (str_contains($anaMetin, $aranmayanKelime)) {
echo "'" . $aranmayanKelime . "' kelimesi metin içinde bulundu.\n";
} else {
echo "'" . $aranmayanKelime . "' kelimesi metin içinde bulunamadı.\n";
}
echo "\n";
// --- Çözüm 2: strpos() fonksiyonu (Tüm PHP versiyonları ile uyumlu) ---
// strpos() fonksiyonu, bulunan kelimenin başlangıç pozisyonunu döndürür.
// Eğer kelime bulunamazsa false döndürür.
// Dikkat: Pozisyon 0 (sıfır) olabileceğinden (metnin başında bulunursa),
// katı karşılaştırma (=== veya !==) kullanmak önemlidir.
echo "--- strpos() ile Kontrol ---\n";
if (strpos($anaMetin, $arananKelime) !== false) {
echo "'" . $arananKelime . "' kelimesi metin içinde bulundu.\n";
} else {
echo "'" . $arananKelime . "' kelimesi metin içinde bulunamadı.\n";
}
if (strpos($anaMetin, $aranmayanKelime) !== false) {
echo "'" . $aranmayanKelime . "' kelimesi metin içinde bulundu.\n";
} else {
echo "'" . $aranmayanKelime . "' kelimesi metin içinde bulunamadı.\n";
}
echo "\n";
// Büyük/küçük harf duyarsız arama için stripos() kullanılabilir
$anaMetinKucukBuyuk = "Merhaba Dünya, bu bir PHP örneğidir.";
$arananKelimeKucuk = "dünya";
echo "--- stripos() ile Büyük/Küçük Harf Duyarsız Kontrol ---\n";
echo "Ana Metin (Büyük/Küçük Karışık): '" . $anaMetinKucukBuyuk . "'\n";
echo "Aranan Kelime (Küçük Harf): '" . $arananKelimeKucuk . "'\n";
if (stripos($anaMetinKucukBuyuk, $arananKelimeKucuk) !== false) {
echo "'" . $arananKelimeKucuk . "' kelimesi (büyük/küçük harf duyarsız) metin içinde bulundu.\n";
} else {
echo "'" . $arananKelimeKucuk . "' kelimesi (büyük/küçük harf duyarsız) metin içinde bulunamadı.\n";
}
/*
Çıktı Nasıl Olacak:
Ana Metin: 'Merhaba dünya, bu bir PHP örneğidir.'
--- str_contains() ile Kontrol ---
'dünya' kelimesi metin içinde bulundu.
'javascript' kelimesi metin içinde bulunamadı.
--- strpos() ile Kontrol ---
'dünya' kelimesi metin içinde bulundu.
'javascript' kelimesi metin içinde bulunamadı.
--- stripos() ile Büyük/Küçük Harf Duyarsız Kontrol ---
Ana Metin (Büyük/Küçük Karışık): 'Merhaba Dünya, bu bir PHP örneğidir.'
Aranan Kelime (Küçük Harf): 'dünya'
'dünya' kelimesi (büyük/küçük harf duyarsız) metin içinde bulundu.
*/
?>
Forum:
PHP
Yorum
Yorum Yok

Yazar:
Birpay
SQL Injection ve Çözümü
Kod yazarken sadece işlevselliğe değil, güvenliğe de dikkat etmek gerekir. Özellikle veritabanı ile çalışan uygulamalarda, kullanıcıdan gelen verilerin doğrudan işlenmesi çok ciddi güvenlik açıklarına neden olabilir. Bu yazıda en yaygın güvenlik açıklarından biri olan SQL Injection'ı inceleyecek ve güvenli kodlama yöntemlerini örneklerle göstermeye çalışacağım.
- Sorun: SQL Injection Nedir?
SQL Injection (SQL Enjeksiyonu), kötü niyetli kullanıcıların, SQL sorgularına müdahale ederek veritabanı üzerinde yetkisiz işlemler yapabilmesini sağlayan bir güvenlik açığıdır.
- Örnek: Güvensiz Kod
Aşağıdaki örnek, kullanıcıdan alınan "kullanici_adi" ve "sifre" ile giriş yapılmaya çalışılan bir Python (SQLite) kod parçasıdır:
- Sorun Nerede?
Bu kodda kullanıcıdan alınan veriler doğrudan SQL sorgusunun içine yerleştirilmiş. Bu durum kötü niyetli biri tarafından şu şekilde kullanılabilir:
Oluşan sorgu şöyle olur:
Bu sorgu daima doğru döner ve sisteme giriş yapılır. Bu, veri sızıntısına, yetkisiz erişime ve sistemin ele geçirilmesine neden olabilir.
- Çözüm: Parametreli Sorgular Kullanın
SQL Injection’a karşı en etkili yöntem parametreli sorgular kullanmaktır. Böylece kullanıcıdan gelen veri, doğrudan SQL’e yerleştirilmeden işlenir ve zararlı kod olarak algılanmaz.
Güvenli Kod Örneği
- Neden Güvenli?
Bu yöntemde,
karakterleri yer tutucudur ve kullanıcıdan gelen veri bu yer tutuculara bağlanarak (binding) eklenir. Bu da verilerin yalnızca değer olarak algılanmasını sağlar, komut olarak değil.
Ekstra Önlemler
Kod yazarken sadece işlevselliğe değil, güvenliğe de dikkat etmek gerekir. Özellikle veritabanı ile çalışan uygulamalarda, kullanıcıdan gelen verilerin doğrudan işlenmesi çok ciddi güvenlik açıklarına neden olabilir. Bu yazıda en yaygın güvenlik açıklarından biri olan SQL Injection'ı inceleyecek ve güvenli kodlama yöntemlerini örneklerle göstermeye çalışacağım.
- Sorun: SQL Injection Nedir?
SQL Injection (SQL Enjeksiyonu), kötü niyetli kullanıcıların, SQL sorgularına müdahale ederek veritabanı üzerinde yetkisiz işlemler yapabilmesini sağlayan bir güvenlik açığıdır.
- Örnek: Güvensiz Kod
Aşağıdaki örnek, kullanıcıdan alınan "kullanici_adi" ve "sifre" ile giriş yapılmaya çalışılan bir Python (SQLite) kod parçasıdır:
Kod:
import sqlite3
conn = sqlite3.connect('veritabani.db')
cursor = conn.cursor()
kullanici_adi = input("Kullanıcı adınızı girin: ")
sifre = input("Şifrenizi girin: ")
query = f"SELECT * FROM kullanicilar WHERE kullanici_adi = '{kullanici_adi}' AND sifre = '{sifre}'"
cursor.execute(query)
sonuc = cursor.fetchone()
if sonuc:
print("Giriş başarılı!")
else:
print("Hatalı kullanıcı adı veya şifre.")
Bu kodda kullanıcıdan alınan veriler doğrudan SQL sorgusunun içine yerleştirilmiş. Bu durum kötü niyetli biri tarafından şu şekilde kullanılabilir:
Kod:
Kullanıcı adı: ' OR '1'='1
Şifre: ' OR '1'='1
Kod:
SELECT * FROM kullanicilar WHERE kullanici_adi = '' OR '1'='1' AND sifre = '' OR '1'='1'
- Çözüm: Parametreli Sorgular Kullanın
SQL Injection’a karşı en etkili yöntem parametreli sorgular kullanmaktır. Böylece kullanıcıdan gelen veri, doğrudan SQL’e yerleştirilmeden işlenir ve zararlı kod olarak algılanmaz.
Güvenli Kod Örneği
Kod:
import sqlite3
conn = sqlite3.connect('veritabani.db')
cursor = conn.cursor()
kullanici_adi = input("Kullanıcı adınızı girin: ")
sifre = input("Şifrenizi girin: ")
query = "SELECT * FROM kullanicilar WHERE kullanici_adi = ? AND sifre = ?"
cursor.execute(query, (kullanici_adi, sifre))
sonuc = cursor.fetchone()
if sonuc:
print("Giriş başarılı!")
else:
print("Hatalı kullanıcı adı veya şifre.")
Bu yöntemde,
karakterleri yer tutucudur ve kullanıcıdan gelen veri bu yer tutuculara bağlanarak (binding) eklenir. Bu da verilerin yalnızca değer olarak algılanmasını sağlar, komut olarak değil.
Ekstra Önlemler
- Veritabanı kullanıcılarına minimum yetki verin.
Uygulamanız sadece gerekli izinlerle çalışmalı (örneğin sadece SELECT/INSERT).
- Şifreleri veritabanında düz metin olarak saklamayın.
SHA-256, bcrypt gibi şifreleme algoritmaları kullanın.
- Giriş denemelerine sınırlama koyun.
Brute-force saldırılarına karşı korunmak için başarısız girişlerde süre limiti uygulayın.
- Kapsamlı loglama ve saldırı tespiti uygulayın.
Forum:
Kodlarda Güvenlik
Yorum
Yorum Yok

Yazar:
KodX
Android UI Performansı
[*]Layout Optimizasyonu: Layout hiyerarşinizi basit tutun. Gereksiz iç içe geçmiş
'lardan kaçının.
,
ve
etiketlerini kullanarak layout'larınızı optimize edin.
[*] Metodunu Verimli Kullanın:
metodu sıkça çağrılır. Bu metot içinde karmaşık işlemler yapmaktan kaçının. Yalnızca çizimle ilgili işlemleri burada gerçekleştirin.
[*]RecyclerView ve ViewHolder Kullanımı: Listeler ve ızgaralar için
yerine
kullanın ve
pattern'ini uygulayarak görünüm tutma ve yeniden kullanma işlemlerini optimize edin.
[*]Bitmap Yönetimi: Büyük boyutlu bitmap'leri yüklerken ve görüntülerken dikkatli olun. Gerekirse boyutlarını küçültün veya önbelleğe alın.
gibi mekanizmaları kullanabilirsiniz.
[*]Animasyonları Dikkatli Kullanın: Karmaşık ve uzun süren animasyonlar performansı olumsuz etkileyebilir. Performanslı animasyonlar için
ve
gibi sınıfları kullanın.
[*]UI İş Parçacığını Bloklamayın: Ağ istekleri veya disk I/O gibi uzun süren işlemleri asla ana UI iş parçacığında yapmayın. Bu, uygulamanın donmasına (ANR - Application Not Responding) neden olur.
[*] gibi optimize edilmiş layout'ları kullan.
[*]Deep view hierarchy’den kaçın (
prensibi).
[*] ile uzun listelemeleri yönet,
kullanımı artık önerilmez.
[*]Gölge, efekt, animasyon kullanımlarında GPU yükünü hafif tut.
[*]Layout Optimizasyonu: Layout hiyerarşinizi basit tutun. Gereksiz iç içe geçmiş
Kod:
ViewGroup
Kod:
<include>
Kod:
<merge>
Kod:
ViewStub
[*]
Kod:
onDraw()
Kod:
onDraw()
[*]RecyclerView ve ViewHolder Kullanımı: Listeler ve ızgaralar için
Kod:
ListView
Kod:
RecyclerView
Kod:
ViewHolder
[*]Bitmap Yönetimi: Büyük boyutlu bitmap'leri yüklerken ve görüntülerken dikkatli olun. Gerekirse boyutlarını küçültün veya önbelleğe alın.
Kod:
LruCache
[*]Animasyonları Dikkatli Kullanın: Karmaşık ve uzun süren animasyonlar performansı olumsuz etkileyebilir. Performanslı animasyonlar için
Kod:
ValueAnimator
Kod:
ObjectAnimator
[*]UI İş Parçacığını Bloklamayın: Ağ istekleri veya disk I/O gibi uzun süren işlemleri asla ana UI iş parçacığında yapmayın. Bu, uygulamanın donmasına (ANR - Application Not Responding) neden olur.
[*]
Kod:
ConstraintLayout
[*]Deep view hierarchy’den kaçın (
Kod:
flat UI
[*]
Kod:
RecyclerView
Kod:
ListView
[*]Gölge, efekt, animasyon kullanımlarında GPU yükünü hafif tut.
Yorum
Yorum Yok

Yazar:
admin
Kotlin Spesifik Optimizasyonlar
Kotlin, JVM tabanlı bir dil olduğu için performans optimizasyonu genellikle JVM'nin davranışlarını ve Kotlin'in özelliklerini anlamayı gerektirir. Bazı başlıklarla sizlere Spesifik Optimizasyonları ele alarak inceleyelim.
- Inline Fonksiyonlar
Kotlin'de inline anahtar kelimesi, fonksiyon çağrılarının derleme zamanında kodun içine gömülmesini sağlar. Bu, özellikle yüksek seviyeli fonksiyonlar (lambda ifadeleriyle kullanılan) için performans kazancı sağlar çünkü fonksiyon çağrısı overhead'ini ortadan kaldırır.
- Data Sınıfları ve Hafıza Kullanımı
data class kullanımı, otomatik toString, equals, hashCode gibi metodlar sağlar, ancak büyük veri yapılarında bu metodlar performans maliyeti yaratabilir.
Kotlin'in koleksiyon API'si (ör. listOf, map, filter) kullanımı kolaydır, ancak zincirleme işlemler performans sorunlarına yol açabilir.
Kotlin coroutines, asenkron programlamayı kolaylaştırır, ancak yanlış kullanım kaynak israfına neden olabilir.
Kotlin, JVM tabanlı bir dil olduğu için performans optimizasyonu genellikle JVM'nin davranışlarını ve Kotlin'in özelliklerini anlamayı gerektirir. Bazı başlıklarla sizlere Spesifik Optimizasyonları ele alarak inceleyelim.
- Inline Fonksiyonlar
Kotlin'de inline anahtar kelimesi, fonksiyon çağrılarının derleme zamanında kodun içine gömülmesini sağlar. Bu, özellikle yüksek seviyeli fonksiyonlar (lambda ifadeleriyle kullanılan) için performans kazancı sağlar çünkü fonksiyon çağrısı overhead'ini ortadan kaldırır.
- Kullanım: Küçük ve sık çağrılan fonksiyonlarda (örneğin, map, filter gibi).
- Örnek:
kotlin
Kod
Kod:inline fun doSomething(block: () -> Unit) {
block()
}
- Dikkat: Büyük fonksiyonlarda inline kullanmak kod boyutunu artırabilir, bu yüzden dikkatli olun.
- Data Sınıfları ve Hafıza Kullanımı
data class kullanımı, otomatik toString, equals, hashCode gibi metodlar sağlar, ancak büyük veri yapılarında bu metodlar performans maliyeti yaratabilir.
- Optimizasyon:
- Büyük veri setlerinde yalnızca gerekli metodları manuel olarak uygulayın.
- data class yerine normal sınıflar kullanmayı düşünün eğer otomatik metodlara ihtiyacınız yoksa.
- Büyük veri setlerinde yalnızca gerekli metodları manuel olarak uygulayın.
- Örnek:
kotlin
Kod
Kod:data class User(val id: Int, val name: String) // Otomatik metodlar
class User(val id: Int, val name: String) // Daha az overhead
Kotlin'in koleksiyon API'si (ör. listOf, map, filter) kullanımı kolaydır, ancak zincirleme işlemler performans sorunlarına yol açabilir.
- Optimizasyon:
- Gereksiz ara koleksiyonlardan kaçının. asSequence() kullanarak lazy evaluation yapın.
- Büyük veri setlerinde mutableList veya array kullanarak manuel döngüler yazmayı düşünün.
- Gereksiz ara koleksiyonlardan kaçının. asSequence() kullanarak lazy evaluation yapın.
- Örnek:
kotlin
Kod
Kod:// Performans maliyeti yüksek
val result = list.filter { it > 0 }.map { it * 2 }
// Daha iyi
val result = list.asSequence().filter { it > 0 }.map { it * 2 }.toList()
Kotlin coroutines, asenkron programlamayı kolaylaştırır, ancak yanlış kullanım kaynak israfına neden olabilir.
- Optimizasyon:
- Gereksiz launch veya async çağrılarından kaçının.
- Dispatchers seçimine dikkat edin (ör. Dispatchers.IO I/O işlemleri için, Dispatchers.Default CPU yoğun işlemler için).
- structured concurrency kullanarak coroutine scope'larını düzgün yönetin.
- Gereksiz launch veya async çağrılarından kaçının.
- Örnek:
kotlin
Kod
Kod:suspend fun fetchData() = withContext(Dispatchers.IO) {
// Ağ çağrısı
}
Yorum
Yorum Yok

Yazar:
KodX
Android Verimli Kod Yazma
Konuya başlamadan önce hepinize merhaba demek istiyorum. Android uygulamanızın performansını artırmak için kullanabileceğiniz çeşitli teknikler bulunmaktadır. Bunların içinden benim önemsediğim şudur ki verimli kod yazma gelin bu başlığın üzerinde biraz duralım.
Gereksiz Nesne Oluşturmaktan Kaçının: Özellikle sıkça çağrılan döngülerde veya
gibi metotlarda gereksiz nesne oluşturmaktan kaçının. Mümkünse nesneleri yeniden kullanın.
Dizeleri Verimli Kullanın: Sabit dizeler için
kullanın, özellikle döngüler içinde dize birleştirme işlemleri yapılıyorsa. Bu teknikler illaki olacak demiyorum kodlama algoritmsına nasıl alışırsanız öyle devam edersiniz benim size sadece tavsiyem olur.
Veri Yapılarını Doğru Seçin: İhtiyaçlarınıza en uygun veri yapısını (örneğin,
,
,
,
) seçin. Yanlış veri yapısı performansı olumsuz etkileyebilir. Bu konuda çeşitli arkadaşlarımdan aldığım destekle yazıyorum.
Algoritmaları Optimize Edin: Kullandığınız algoritmaların zaman ve mekan karmaşıklıklarını göz önünde bulundurun. Daha verimli algoritmalar kullanarak performansı önemli ölçüde artırabilirsiniz.
Arka Plan İşlemlerini Doğru Yönetin: Uzun süren işlemleri (ağ istekleri, dosya okuma/yazma vb.) ana iş parçacığından ayırarak uygulamanın donmasını engelleyin.
,
,
gibi mekanizmaları kullanabilirsiniz. Size zorluklar içerisinde yol arkadaşı olacaktır.
Sizinde yaşadığınız olaylar veya zorlukları atlatma şeklinizdeki teknikleri buradan paylaşabilirsiniz hepimiz öğrenmeye açığız Kodlar içimden bir parça
Konuya başlamadan önce hepinize merhaba demek istiyorum. Android uygulamanızın performansını artırmak için kullanabileceğiniz çeşitli teknikler bulunmaktadır. Bunların içinden benim önemsediğim şudur ki verimli kod yazma gelin bu başlığın üzerinde biraz duralım.
Gereksiz Nesne Oluşturmaktan Kaçının: Özellikle sıkça çağrılan döngülerde veya
Kod:
onDraw()
Dizeleri Verimli Kullanın: Sabit dizeler için
Kod:
String yerine
Kod:
StringBuilder veya
Kod:
StringBuffer
Veri Yapılarını Doğru Seçin: İhtiyaçlarınıza en uygun veri yapısını (örneğin,
Kod:
ArrayList
Kod:
LinkedList
Kod:
HashSet
Kod:
HashMap
Algoritmaları Optimize Edin: Kullandığınız algoritmaların zaman ve mekan karmaşıklıklarını göz önünde bulundurun. Daha verimli algoritmalar kullanarak performansı önemli ölçüde artırabilirsiniz.
Arka Plan İşlemlerini Doğru Yönetin: Uzun süren işlemleri (ağ istekleri, dosya okuma/yazma vb.) ana iş parçacığından ayırarak uygulamanın donmasını engelleyin.
Kod:
AsyncTask
Kod:
ExecutorService
Kod:
WorkManager
Sizinde yaşadığınız olaylar veya zorlukları atlatma şeklinizdeki teknikleri buradan paylaşabilirsiniz hepimiz öğrenmeye açığız Kodlar içimden bir parça

Yorum
Yorum Yok

Yazar:
KodX
merhaba bende forumda yeniyim hepimiz için hayırlı olsun aranıza katılmak benim için çok önemli kod bilgilerimi pekiştirmek yeni insanlar tanımak istiyorum tekrar hepimiz için başarılı forumlar diliyorum.
Forum:
Yeni Gelenler
1
Yorum
Hoşgeldin, Ziyaretçi
Forumda Ara
Forum İstatistikleri
Kimler Çevrimiçi
Şu anda 1 aktif kullanıcı var.
(0 Üye - 1 Ziyaretçi)
Son Yazılanlar
Yeni Başlayanlar için Pro...
Son Yorum:
admin
•
Dün, 08:12 AM
Kodlamaya Başlayanlar içi...
Son Yorum:
admin
•
Dün, 08:09 AM
Kodlamaya Yeni Başlayanla...
Son Yorum:
admin
•
Dün, 08:08 AM
Bol Bol Pratik Yapın Kodl...
Son Yorum:
admin
•
Dün, 08:07 AM
Küçük Başlayın ve Adım Ad...
Son Yorum:
admin
•
Dün, 07:45 AM
Doğru Programlama Dilini ...
Son Yorum:
admin
•
Dün, 07:44 AM
Dizilerle Çalışma ve Arra...
Son Yorum:
admin
•
06-11-2025, 06:43 PM
DOCTYPE html Nasıl Kullan...
Son Yorum:
admin
•
05-23-2025, 08:06 PM
Yapay Zeka Kodlama Önizle...
Son Yorum:
KodlarTR
•
05-16-2025, 08:22 PM
TensorFlow ile Nesne Tanı...
Son Yorum:
KodlarTR
•
05-16-2025, 08:17 PM