tarafından eklendi tarafından eklendi

Centos 7 Üzerine Redis Kurulumu

Redis açık kaynak kodlu key-value şeklinde yani Excel’e benzeyen şekilde verileri Ram’de saklayan bir ilişkisel olmayan veritabanıdır.

Redis’i Laravel ile cache işlemi için kullanıyorum. Performansa katkısı oldukça büyük. Kullanımı içinde neredeyse bir şey yapmıyorsunuz.

Centos 7 üzerinde kuruluma geçelim.

İlk önce Epel kaynağını güncelleyelim.

sudo yum install epel-release

Redis’i kuralım.

sudo yum install redis -y

Redis’i başlatalım.

sudo systemctl start redis.service

Redis’i başlangıçta çalışır hale getirelim.

sudo systemctl enable redis

İlk testimizi yapalım. Cevap PONG dönüyorsa her şey tamam.

redis-cli ping

Güvenlik için şifre tanımlayalım. Bunun için ayar dosyasına gidelim.

sudo nano /etc/redis.conf

Aşağıdaki yorumlanmış satırı bulup, şifremiz ile değiştirelim.

# requirepass foobared
requirepass sifreniz_buraya

Yeniden Redis’i başlatalım.

sudo systemctl restart redis.service

İşlem tamam. :).

Centos 7 Üzerine Wkhtmltopdf Kurulumu

Laravel Snappy PDF sunucu taraflı bir PDF oluşturma aracı. Harika bir araç. Html ile ne görüyorsanız, PDF’te onu alıyorsunuz.

Bunun için sunucunuza Wkhtmltopdf’i kurmanız gerek . https://wkhtmltopdf.org/downloads.html adresinden son sürümü indiriyoruz.

Gereksinimleri yükleyelim.

# yum install -y libpng libjpeg openssl icu libX11 libXext libXrender xorg-x11-fonts-Type1 xorg-x11-fonts-75dpi

Arşivi indirip, çıkaralım.

# wget https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.4/wkhtmltox-0.12.4_linux-generic-amd64.tar.xz
unxz wkhtmltox-0.12.4_linux-generic-amd64.tar.xz

tar -xvf wkhtmltox-0.12.4_linux-generic-amd64.tar

mv wkhtmltox/bin/* /usr/local/bin/

rm -rf wkhtmltox

rm -f wkhtmltox-0.12.4_linux-generic-amd64.tar

Son olarak da deneyelim. 🙂

wkhtmltopdf http://semihyilmaz.com

Bu kadar.

Laravel Dusk Nedir? (1)

Laravel Dusk, kullanıcı arayüzünü, fonksiyonlarını ve özelliklerini test edebilmemizi sağlayan bir Browser Testing aracıdır.

Laravel Dusk, Selenium Driver’ı kurma prosedürlerinden uzak, Chrome Driver ve Facebook PHP webDriver üzerine kurulu kolayca çalıştırıp, test ortamına düşebileceğimiz bir araçtır.

Bu yazı dizimde, Laravel uygulamasına Dusk’ı kurmayı, kimlik doğrulama testi de olmak bir kaç temel test örneği üzerinde duracağım. Daha sonraki yazılımlarımda fırsat buldukça üzerine eğileceğim.

Neden Dusk?

Önceki Laravel sürümlerinde bir web tarayıcısını simüle etmek için Symfony BrowserKit bileşenini kullanıyordu. Bu gerçek bir tarayıcı olmadığı için sınırlamaları ve problemleri vardı. Dusk ile ChromeDriver ve Facebook Php-webdriver doğal olarak çalışır halde geliyor.

Dusk’un en önemli özelliklerinden biri de aynı zamanda testleri yapmadan önce, bir koşula bağlı olmasını yazabilmemiz. Örneğin, herhangi bir işlem yapmadan önce, bir JavaScript bileşeninin veya CSS seçicisinin yüklenmesini bekleyebiliriz. Böyle bir DOM yardımıyla işlemi tetikletebiliriz.

Kurulum

php composer.phar require laravel/dusk

app\Providers\AppServiceProvider.php dosyasına;

use Laravel\Dusk\DuskServiceProvider;// Importing DuskServiceProvider class

...

public function register()
{
    if ($this->app->environment('local', 'testing')) {
        $this->app->register(DuskServiceProvider::class);
    }
}

kodlarını ekliyoruz. Ardından Dusk kurulumu yapıyoruz.

php artisan dusk:install

Şimdi de çalıştırılım.

php artisan dusk

Şuan artık ExampleTest klasöründeki tests\Browser\ExampleTest.php  çalışmaya başlıyacak.




public function testBasicExample()
    {
    // Kök route'na git ve 'Bla' metnini gör. 
        $this->browse(function (Browser $browser) {
            $browser->visit('/')
                    ->assertSee('Bla');
        });
    }
Bu ekran görüntüsünde test başarısız olmuş. Ve tests\Browser\screenshots klasöründe başarısız bir testin ekran görüntüsü yer alacaktır. Sebebi de ‘Bla’ adında bir text görmemiş olması.

Bir sonraki Dusk yazımda oturum açma(Auth) testini anlatacağım.

Bu konudaki sorularınızı yorum olarak bana ulaştırabilirsiniz.

İyi çalışmalar.

Laravel “Specified key was too long error” Hatası

Laravel’de migration yaparken alınan “Specified key was too long error” hatası için çözümden bahsedeceğim. İşi uzatarak ilk olarak neden kaynaklandığından söz edelim.

Mysql 5.7 ya da eşdeğer MariaDB kullanıyorsanız, karakter setiniz utf8mb4 ise bu hata ile karşılaşırsınız. utf8mb4 ile emojileri veritabanında saklayabiliyoruz.

Migration yaparken tam olarak bu hatayla karşılaşırız;

[Illuminate\Database\QueryException]
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter table users add unique users_email_unique(email))

[PDOException]
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes

Çözüm için ise AppServiceProvider.php dosyasına;

use Illuminate\Support\Facades\Schema;

public function boot()
{
    Schema::defaultStringLength(191);
}

ekliyoruz ve problem çözülmüş oluyor. Yarım kalan migration dosyalarınızı migration tablosundan kaldırın. Sağlıklı olarak yeniden migrate edin.

İyi çalışmalar.

Vanilla JS’e Derinlemesine Bakış

Son zamanlarda popülerleşmeye başlayan, Vanilla JS ile ilgili bir yazı hazırlayayım dedim. JQuery, Ember, Angular, Vue, React gibi her güzel şey bir framework’ken neden daha güzel bir JS framework’e ihtiyaç duyulmuş?

Son zamanlarda öyle bir algı oluştu ki, DOM için illa bir framework kullanmak zorundaymışız gibi. Düz JS’i kullanmak köylülükmüş gibi, fakirlik ya da amemelikmiş gibi düşünülmeye zorlanılmışız gibi.

Vanilla JS güzel bir şaka. Javascript’in kendisini framework olarak kaktırıp, güzel Javascript’in gerçekten güzel olduğunu biz mazlumlara anlatmayı yeğlemiş şair.

Özetle;

Vanilla JS diye bir şey yok. Javascript’in kendisi kullanılarak yapılmış kodlamaya deniyor.

Sağlıcakla.

Php İle Kredi Kartı Geçerliliği Doğrulaması

Merhabalar,

Bir ödeme sistemi, tahsilat sistemi, e-ticaret sistemi vb gibi uygulamalar geliştirirken, çokça kredi kartı numarasını bir ön doğrulamadan geçirme ihtiyacı duyuyoruz. Duymalıyız da. Bir web yazılımcısı olarak asla kullanıcıdan aldığımız, kullanıcının girdiği verilere güvenmemeliyiz. Bu veriler çoğu zaman, zararlı içerikler içeriyor olabilir. Ya da hiç düşünmediğimiz bir istisnaya sebebiyet verebilir. Bu gibi durumlarla karşılaşmamak adına verileri doğrulayıp, kullanmalıyız.

Kredi kartı numarası Luhn adı verilen bir algoritma ile oluşturulur. 4 ile başlarsa Visa, 5 ile başlarsa MasterCard türündedir.

Luhn Algoritmasını matematiksel olarak açıklayalım.

1234 1234 1234 1234 şeklinde 16 haneli  bir kredi kartımız olsun.

TÇTÇ TÇTÇ TÇTÇ TÇTÇ diyelim yani;

1,3,5,7,9,11,13,15 sırada bulunan rakamlara T diyelim.

2,4,6,8,10,12,14,16. sırada bulunan rakamlarada Ç diyelim.

İlk olarak tüm Ç’leri toplayalım;

2+4+2+4+2+4+2+4=24

Tüm T’leri de ayrı ayrı 2 ile çarpıp, topluyoruz.

(1×2)+(3×2)+(1×2)+(3×2)+(1×2)+(3×2)+(1×2)+(3×2)=24

Şimdi ilk sonuç ile 2. sonucu toplayalım.

Yani 24+24=48.

Şimdi 48’in mod10’nu alalım. Yani 10’a bölüp kalanına bakalım. Geçerli bir kredi kartı için işlem sonucunun 0 olması gerekli. Yani 10’a tam bölünmeli.

Görüldüğü gibi 48’in  Mod10’nu 8 olduğu için bu kredi kartı geçersizdir.

İşin hikayesini tamamladık. Şimdi bunu PHP ile yapalım. Yehuu :).

function isValid($num) {
$num = preg_replace('/[^\d]/', '', $num);
$sum = '';

for ($i = strlen($num) - 1; $i >= 0; -- $i) {
$sum .= $i & 1 ? $num[$i] : $num[$i] * 2;
    }

return array_sum(str_split($sum)) % 10 === 0;
}

Olur da canımız Javascript kullanmak isterse de :);

function isValid(number) {
var num = number.replace(/[^\d]/, '');
var str = '';

for (var i = num.length - 1; i >= 0; -- i) {
str += i & 1 ? num[i] : (parseInt(num[i]) * 2).toString();
}

var sum = str.split('').reduce(function(prev, current) {
return prev + parseInt(current);
}, 0);

return sum % 10 === 0;
};

 

Sorularınız olursa yorum yazmaktan çekinmeyiniz. İyi çalışmalar.

Centos Üzerine SOLR Kurulumu

Bir önceki yazımızda SOLR’dan bahsetmiştik.

Kuruluma geçelim. İlk önce repo güncellemeyle işe koyulalım.

sudo yum update

SOLR, Java gerektirdiği için Java sürümüne bakalım.

java -v

Java version 8 veya 9 olmalı.

Sistemde wget ve nano kurulu değilse, bu paketleri kuralım.

yum install wget

yum install nano

Şimdi SOLR’ın güncel paketini indirip, açalım

cd /usr/local

wget http://www-eu.apache.org/dist/lucene/solr/7.3.0/solr-7.3.0.tgz

Arşivi açıp, kuruluma geçelim,

tar xzf solr-7.3.0.tgz solr-7.3.0/bin/install_solr_service.sh –strip-components=2

sudo bash ./install_solr_service.sh solr-7.3.0.tgz

SystemD yüklü olan kullanıcılar aşağıdaki komutlar ile SOLR servisini başlatabilir, durdurabilir, durumuna bakabilir.

sudo systemctl stop solr
sudo systemctl start solr
sudo systemctl status solr

kurulumu tamamladık. Şimdi ilk SOLR Core ve Arşivleme yapımızı yapılandıralım.

SOLR DATA KOLEKSİYONU OLUŞTURMA

SOLR’ı mevcut veritabanımızı indekslemeye hazır hale getirmeliyiz. Daha sonra SOLR RestAPI  üzerinden rahatlıkla sorgularımızı yapabiliriz.

sudo su – solr -c “/usr/local/solr/bin/solr create -c koleksiyon -n data_driven_schema_configs”

Core’umuzu oluşturduk. Created new core ‘koleksiyon’  dönmeli bize.

Tüm adımları doğru yerine getirdiysek, web arayüzüne geçebiliriz artık.

SOLR WEB ARAYÜZÜNE GİRİŞ

SOLR, öntanımlı olarak 8983 nolu portu kullanır. SOLR kurulumu yapılan makinenin ip’sinin 192.168.1.1 olduğunu varsayacağım. Anlatımları bunun üzerinden yapacağım.

http://192.168.1.1:8983

Bu adresten web arayüzüne ulaşıyoruz.

SOLR’ı bir kullanıcı girişi ile güvenceye almadık. Daha sonraki yazılarımda, SOLR’a erişmek için nasıl bir kullanıcı adı ve şifre atayacağımızı anlatacağım.

SOLR İLE RESTAPI ÜZERİNDEN SORGU ÇALIŞTIRMA

Core ve Collection’ı ayarladıktan sonra aşağıdaki resimdeki gibi bir ekran olacak.

Query linkine tıklayınca açılan sorgu penceresinden, istediğimiz sorguyu çalıştırabiliriz. Örnek çıktı’da önceki resimde gözükmektedir.

Yukarıdaki ekranda, sorgu için kullanılan parametrelerin birkaçını açıklayalım.

Alan Açıklama

(qt)

İstek tipi parametresi (Örn:”/Select”)

q

Sorgulama parametresi.

fq

Filtreleme  parametresi

sort

Sıralama parametresi

start, rows

Sonuçların belirli satırlarını çekmek için kullanılan parametre.

facet

Kategori bazlı indeksleme parametresi

Kurulum kısmını tamamladık. Başka bir SOLR yazısında görüşmek dileğiyle.

Solr’ın Prospektüsü

Solr,Apache Lucene projesinin bir parçası olan tam metin arama, çok yönlü arama, devirgen kümeleme, veritabanı ile bütünleşik, Microsoft Word veya PDF benzeri belgeleri indeksleme gibi özellikleri olan açık kaynak kodlu oldukça esnek bir arama motorudur. Solr en popüler kurumsal arama motoru yazılımdır.

Demişler Wikipedia’da.  Öncelikle işe, Türkçe mealiyle başlayalım.

Solr, bir veritabanı değil. Solr kendi içinde evet veri tutuyor. Ama bunları depolamak için değil, ihtiyaç duyulduğunda size hızlı bir şekilde sunma için kullanıyor. Yaniii?

  • Solr’ı sunucumuza kuruyoruz.(Solr Kurulumu)
  • Solr’da data klasörünün içine tablo şablonunun konfigürasyonunu oluşturuyoruz. Bu şu demek;

Mysql ‘de tutulan verimiz olsun. Örneğin 10.000 sayfalık bir kitabın sayfaları. Kitapta geçen bir kelimenin kaç kere geçtiğini, hangi sayfalarda geçtiğini öğrenmek istiyoruz. Bunu LIKE’ladığımızda dk’larca süren bir sorguyla karşı karşıya kalırız.3 dk mı olur? 5 dk mı olur? Ona bir şey veremem. Bu aramayı Solr kullanarak yapsaydık, sonuç 1-2 sn içerisinde dönecekti.

Tablonun benzeri bir şablon yapısını, SOLR şablon ayar dosyasında yapıyoruz. SOLR’a kurulum yaparken MySql driver’ını(JAR olarak) yüklüyoruz. Sonra da data çekeceğiniz database, şu MySql db’si diyoruz. Al bu datayı indeksle diyoruz. Tüm datayı içine çekiyor SOLR. Ve SOLR’ın REST yapısını kullanarak aramalar yapıyoruz. Örneğin; link.com:8983?q=merhaba dediğimizde tüm  amacımıza ulaşıp, bize dönen JSON ile mutlu oluyoruz.

Özetle SOLR’ı hızlı metin arama işlemleri için kullanıyoruz. Veritabanında LIKE kullanarak arama yapılan sonuç dakikalarca sürerken, SOLR ile bu 1 sn civarında sürüyor.

Nerede kullanabiliriz?

Dökümantasyon ama uygulamalarında, kütüphane katalog uygulamalarında özetle yüklü text içeren tüm veri aramalarında kullanabiliriz. Son olarak SOLR’a http://lucene.apache.org/solr/

buradan ulaşabilirsiniz.

İyi Çalışmalar.

 

Neden Php’ye Sövmemeliyiz?

10 yıla yakın bir süredir Php kodluyorum. İlk öğrendiğim programlama dili değil, ama beni ben yapan PROGRAMLAMA dilidir. İlk zamanlarda nesne yönelimli değildi. Pdo yoktu. Printf mi ?yoksa Echo mu? tartışılıyordu. Hatta “Hello World” yazdırarak. “ms” cinsinden hız hesabı yapanlar bile vardı. Php ölü bir dil, ölecek, Python anasını üzecek diyenlerle doluydu her yer! İlk olarak “Zend” tuttu elinden. Daha sonra “codeigniter” okuyup, üfledi Php’yi. Symfony kan verdi, Laravel ise Kalsiyum-C-D Vitamini verdi. Büyümeye, gelişmeye devam ediyor.

Sıkıntıları yok mu? Var. Peki neler bunlar?

  • Çok zengin bir fonksiyon gabarına sahip. Amma velakin tanımlar-isimler belli bir kural-patern-kalıp izlemiyor. Böyle olunca, beynin bedava olduğunu hatırlatıp, hepsini hafızaya attırıyor. Örneğin; strpos(), str_replace(), is_null(), empty(); ne zaman alt çizgi kullanılacak? Ne zaman başa “is” konacak, ne zaman konmayacak bunu ancak deneyimlerimizle bilebiliyoruz.
  • Parametrelerin yerleri fonksiyona göre değişebiliyor.  str_pos() ve array_search() fonksiyonları buna örnektir. $param1,$param2 iken diğerinde $param2,$param1 olabiliyor.
  • Fonksiyonlar yazanın canı nasıl istemişse öyle değer döndürüyor. Bazı fonksiyonlar true-false, bazıları 0-1 bazıları null. Çok çılgın.
  • Concurrency(Eş zamanlılık), Multithreading(Çok işlilik) bulunmayışı.(Apache Modları ile çözülebiliyor. FPM Worker, pthreads vb.)
  • Yeni eklenen her özelliğin yanında, geriye uyumlu olacak diye, dilin fonksiyon çöplüğüne dönüyor olması. Biri de çıkıp, yeter artık yeni sürümde bu böyle! Böyle kullanacaksınız demiyor.

İyi yanları mı?

to be continued… (Pokemon çizgi filmlerinden esinlenerek. )