Ubuntu Desktop dağıtımlarında Nvidia ekran kartı problemi

Ubuntu kullananların bir çoğu hayatında en az bir kere nvidia ekran kartı olan bir bilgisayara denk gelmiş ve o gün hayattan soğumuştur. Çünkü Ubuntu içerisinde varsayılanda gelen xserver-xorg-video sürücüleri ve nvidia’nın güncel olmayan sürücüleri Unity’nin açılmasını engelliyor, açılsa bile mouse’un ekranın bir ucundan bir ucuna gitmesi 2 gün sürüyor. Bir çok farklı notebook (Asus, Dell, Lenovo) ve farklı Ubuntu Desktop dağıtımlarında (Ubuntu 16.04 LTS, Ubuntu 16.10, Ubuntu 17.04) edindiğim tecrübeler aşağıdaki adımlarla bu işin bir çok kez çözülebildiğini gösterdi.

  1. Ubuntu Login ekranını gördüğünüzde login olmaya çalışmayın. Bunun yerine Ctrl+Alt+F2 tuşlayarak tty2 üzerinden login olun
  2. sudo apt remove xserver-xorg-video* --purge komutu ile kurulu xorg sürücülerini kaldırın
  3. sudo apt remove nvidia-* --purge komutu ile kurulu nvidia sürücülerini kaldırın
  4. sudo add-apt-repository ppa:graphics-drivers/ppa komutu ile nvidia paketlerinin bulunduğu PPA repo’sunu ekleyin
  5. sudo apt update çalıştırarak paket kayıtlarını güncelleyin
  6. https://launchpad.net/~graphics-drivers/+archive/ubuntu/ppa sayfasından en güncel stable driver versiyonunu bulun  (Örn: Ben bu yazıyı yazarken 381 güncel kararlı versiyonmuş)
  7. sudo apt install nvidia-381 komutu ile gerekli nvidia sürücüsünü kurun
  8. `sudo ubuntu-drivers devices` komutu ile kurulumun doğruluğundan emin olabilirsiniz
  9. sudo shutdown -r 0ile bilgisayarı baştan başlatınca artık sorunsuz giriş yapabiliyor olmalısınız

Bu post benim yaklaşık 10 ayrı bilgisayarda Nvidia ekran kartı ile Ubuntu Desktop kurulumlarında  başıma gelen sorunlardan edindiğim tecrübelerime dayanarak yazılmıştır.  Sizlerin de farklı çözümleri varsa yorum bırakarak yardımcı olabilirsiniz.

MySQL BINARY Kullanımı

Bildiğiniz gibi MySQL veritabanında MSSQL’de olduğu gibi CS ve AIkullanımları yok. Bunun yerine collation verileri hep CI yani Case Insensitive olarak kullanılıyor. Bu durumda büyük/küçük harf duyarlı bir sorgu yapmak istediğimiz zaman devreye BINARY giriyor.

Örneğin basit bir kullanıcı girişi sorgusunu aşağıdaki gibi hepimiz kullanıyoruz;

SELECT * FROM users WHERE user_id = 'canyildiz' AND password = 'hashed_pass';

Ancak biz canyildiz ve CanYildiz kullanıcı adları ayrı ayrı kullanılabilsin istersek bunu büyük/küçük harf duyarlı (case-sensitive) yazabiliyor olmamız gerekiyor. Bunu da aşağıdaki gibi yazıyoruz:

SELECT * FROM users WHERE user_id = BINARY 'canyildiz' AND password = 'hashed_pass';

Bu durumda artık sadece user_idalanı tam olarak canyildiz olan kullanıcı satırı ile çalışır olduk.

Burada çok dikkat edilmesi gereken bir konu var; bazı yerlerde  BINARY kullanımı alan adının önünde kullanılarak örneklenmiş. Yani aşağıdaki gibi bir sorgu yazılmış;

SELECT * FROM users WHERE BINARY user_id = 'canyildiz' AND password = 'hashed_pass';

Bu şekilde kullanıldığında ciddi oranda performans sorunu yaratıyor. Ben her iki sorguyu da içinde ~1.2M kayıt olan bir tabloda denedim ve şu şekilde sonuç aldım:

SELECT * FROM users WHERE BINARY user_id = 'canyildiz' AND user_password = 'hashed_pass';
/* Affected rows: 0  Found rows: 1  Duration for 1 query: 2.822 sec. */


SELECT * FROM users WHERE user_id = BINARY 'canyildiz' AND user_password = 'hashed_pass';
/* Affected rows: 0  Found rows: 1  Duration for 1 query: 0.021 sec. */

Sorguları EXPLAIN ile incelediğimde BINARY user_id şeklinde olan kullanımda index’lerin kullanılmadığını gördüm

MySQL’de FLOAT limitleri

MySQL tablolarında FLOAT tipinde bir alana length (precision) değeri vermeden oluşturunca rakamları 7 hanede kesiyor. Bunu simüle etmek için aşağıdaki şekilde bir deneme yaptım:

 

DROP TABLE IF EXISTS `float_test`;

CREATE TABLE IF NOT EXISTS `float_test` (
`string_field` varchar(50) NOT NULL,
`float_field` float NOT NULL
) ENGINE=InnoDB;

INSERT INTO float_test (string_field, float_field) VALUES ('1', 1);
INSERT INTO float_test (string_field, float_field) VALUES ('1.2', 1.2);
INSERT INTO float_test (string_field, float_field) VALUES ('1.23', 1.23);
INSERT INTO float_test (string_field, float_field) VALUES ('1.234', 1.234);
INSERT INTO float_test (string_field, float_field) VALUES ('1.2345', 1.2345);
INSERT INTO float_test (string_field, float_field) VALUES ('1.23456', 1.23456);
INSERT INTO float_test (string_field, float_field) VALUES ('1.234567', 1.234567);
INSERT INTO float_test (string_field, float_field) VALUES ('1.2345678', 1.2345678);
INSERT INTO float_test (string_field, float_field) VALUES ('1.23', 1.23);
INSERT INTO float_test (string_field, float_field) VALUES ('12.34', 12.34);
INSERT INTO float_test (string_field, float_field) VALUES ('123.45', 123.45);
INSERT INTO float_test (string_field, float_field) VALUES ('1234.56', 1234.56);
INSERT INTO float_test (string_field, float_field) VALUES ('12345.67', 12345.67);
INSERT INTO float_test (string_field, float_field) VALUES ('123456.78', 123456.78);
INSERT INTO float_test (string_field, float_field) VALUES ('1234567.89', 1234567.89);

SELECT * FROM float_test;

ve sonuç aşağıdaki gibi çıktı:

+--------------+-------------+
| string_field | float_field |
+--------------+-------------+
| 1            |           1 |
| 1.2          |         1.2 |
| 1.23         |        1.23 |
| 1.234        |       1.234 |
| 1.2345       |      1.2345 |
| 1.23456      |     1.23456 |
| 1.234567     |     1.23457 |
| 1.2345678    |     1.23457 |
| 1.23         |        1.23 |
| 12.34        |       12.34 |
| 123.45       |      123.45 |
| 1234.56      |     1234.56 |
| 12345.67     |     12345.7 |
| 123456.78    |      123457 |
| 1234567.89   |     1234570 |
+--------------+-------------+

 

PHP nedir?

PHP, resmi sitesi php.net‘teki Türkçe açıklamaya göre şu anlama gelir:

PHP (açılımı PHP: Hypertext Preprocessor) geniş bir kitle tarafından kullanılan, özellikle sanal yöreler üzerinde geliştirme için tasarlanmış HTML içine gömülebilen bir betik dilidir.

Benim için ise şu anlama:

Bunun mesleğim olacağını bilmeden; 1998 yılında amatör bir heves olarak başladığım web development hayatımın, 2000 yılında profesyonele dönüştükten sonra bu günlere kadar süren serüveninde beni hiç yalnız bırakmayan betik dildir.

Merhaba!

Merhaba herkese,

Nihayet blog’umu açıyorum. Yıllardır kendi söküğümü dikemedim ve web sitem blog olmak üzere bomboş bekliyordu. Sağolsun arkadaşın birisi sanatsal bir fotoğraf çekmiş de siteyi onunla kaplamışım. Tabiki bunu yaparken niyetim bir kaç hafta o şekilde kalması, sonra blog’a dönüşmesiydi.

Bundan sonra, bu blog üzerinden sizlerle Web Uygulama Geliştirme konusunda naçizane tecrübelerimi paylaşacağım. Ağırlıklı olarak açık kaynak diller ve veritabanları üzerine olacağını tahmin ediyorum.

Şimdilik herkese iyi geceler…