Ben Merkezli Yazılım Sektörü

Merhaba,

Bugün biraz kusacağım. Yazının devamında Türkiye’deki iş ahlakına yönelik son derece ahlak dışı izlenimler bulunmaktadır. Onsekiz yaşından küçüklerin okumasını tasvip etmiyorum, daha çok gençsiniz. Biraz daha toz pembe yaşayın.

Konumuz toplum olarak duymaya daha aşina olduğumuz latince kökenli ego. Türkçesi, süzme ben merkezcilik. Süzmeden kastımız ise; benliğinde ve karakterinde bulunan iyimserliğin, alçakgönüllülüğün ve saygının tamamen yok olmasıdır. Karakteri başta olmak üzere harcı süzme ben merkezcilik ile karılan bir insanın size hissetirdiği ise sadece soğuk bir tortudan ibarettir.

Türkiye’de buna örnek vermemi ister misiniz? Çok basit. Size en yakın ticari toplulukta bunu rahatlıkla sezebilirsiniz.

Bireylerin kalıp halinde yaşadığı, düşünme ve sorgulama yetilerinin köreltidiği kapitalizm odaklı sömürge çarklarından bahsediyorum. Bunların sadece devlet dairelerinde olduğunu sanıyorsunuz değil mi? Hayır! Yanılıyorsunuz. Bu düşünce sistemi ve davranışsal bozukluk olarak nitelendirebileceğimiz durum, Türkiye’deki tüm iş sahalarını etkisi altına almış durumda. Ben içerisinde bulunduğum için Yazılım Geliştirici olarak, yazılım sektörüne dair izlenimlerimden bahsedeceğim.

Paylaşmak

Bilgi paylaşımından girelim konuya. Ben neden günce yazıyorum? Hiç bahsettim mi sizlere? Basit ama gündelik hayattan çok uzak kalan bir tabir; paylaşmak için. Ben bir Anadolu Lisesi’nde öğrenim gördüm. Çevremde akademik alanlarla ilgilenen insanlar dışında Bilgisayar Bilimlerine aşina kimse olmadı. Bana yardım edecek, yön gösterecek insanlar yoktu. Biliyorum, birçoğunuz yaşadı bu durumu. Bundan şikayetçi değilim, aksine memnunum. Bu durum beni araştırmaya ve araştırarak öğrenmeye itti. Hangi metodları kullanarak araştırabileceğimi öğrendim. Bunun zevkini küçük yaşlarda tattım. Bunun bir handikapı var, çıkış noktamız burası.

Yabancı dil yoksunluğundan ve teknik terimlere hakim olmamamın verdiği bilgi yetersizliğinden dolayı Türkçe anahtar kelimeleri kullanarak araştırma yapmaktan başka şansım yoktu. Birgün, düşüm olan kendi günce sistemimi PHP ile yazmak isterken bir sorunla karşılaştım. Uzun araştırmalar sonucunda çözümü buldum. Bir güncede, ağabeyimizin teki şöyle bir cümle kurmuş: “Aşağıdaki kodu münasip yerlere ekleyiniz.” Ben bunu 2013 senesinin temmuz ayında okudum. Ve ne yazık ki; münasip yerleri bilecek kadar tecrübem yoktu. Önce başarısızlığımla kalakaldım, üzüldüm ve kırıldım. Fakat pes etmedim. Biraz şans biraz da inatçılığımla çözdüm sorunu. Çözdüğümde başarmanın verdiği hazzı yaşamadan ne yaptım biliyor musunuz? Günce yazdım.

Bakın, burada. https://www.mkoseoglu.com/ckeditor-ajax-post-etme-kesin-cozum paylaştığım içerik. Nasıl da içerlemişim değil mi? URL yapısında bile “kesin çözüm” ibaresini eklemeyi es geçmemişim. Gelen yorumları dikkatle inceleyiniz.

Yaklaşık bir sene sonra Burak, bir yorum yazmış. Kendisini tanımıyorum lakin tanımayı çok isterim. Yoruma bakalım: “Allah tuttuğunu altın etsin inşallah. Günlerdir Türkçe kaynak yoktur diye stackoverflow-kolik olmuştum ama bir türlü işime yarayan bir çözüm bulamamıştım. Şu an şu saatte twitter’Inda kapatılmasıyla bulduğum boş zamanda google’da birde Türkçe sorgulama yaptım ve karşıma bu blog çıktı. Dediklerini harfiyen yaptıktan sonra sorunumda çözüme kavuştu. Tek kelimeyle mükemmelsin…”

Şu yorumdan sonra yüzümün aldığı hali görmenizi çok isterim. Sevinç, mutluluk, gurur, başarı hissi ve tarifi imkansız bir rahatlama.

Paylaşmanın verdiği haz! Evet, işte bundan bahsediyorum. Peki bununla mı kaldı? Hayır tabii ki. Çeşitli alanlarda yazılar yazdım. Ve son zamanlarda Facebook’taki Yazılım Geliştiricileri paylaşmaya ve yazmaya teşvik etmek amacı ile yönettiğimiz bir Facebook grubumuz bulunmakta.

Yazılım Blogları Türkiye: https://goo.gl/qU8smV

Grupta paylaşılan gönderileri gelen ilgi yoğunluğuna göre Yazılım Blogları Türkiye Facebook sayfasında da paylaşıyoruz. Başlangıçta sönük kalsa da; şimdilerde inanılmaz bir paylaşım sürecine adım attık. Bu güzel bir şey, çok daha büyüyecek.

Beni, Türkçe içerik üretmeye iten ve paylaşma isteğime yön veren süreçten bahsetmenin mutluluğu ile yazıma devam ediyorum. Yazılım sektöründeki ben merkezciliği paylaşarak alt edelim. Bunu yıkabilecek güçte olduğumuzu biliyorum. Böyle sığ insanlara, ben öğrendim sadece ben bileyim mantığındaki birey olmayı beceremeyen canlıları çokluğumuzla sindirelim.

Başvurular

Yazılım sektöründe ben merkezciliğin en çok rastlanan bir başka alanı ise iş başvuruları ve lider konumları. Ben lider sözcüğünü kullanmaktan pek haz etmem aslında. Türkçesi, önder daha uygun olacaktır. Önder nedir?

Bunu 2016’nın başlarında kendisinden özel olarak imzalı edindiğim; çok değerli Sn. Osman Pamukoğlu’nın Önder kitabından bir alıntı yaparak cevaplandıracağım. Burada kitapla ilgili değerlendirmeme göz gezdirebilirsiniz https://www.mkoseoglu.com/osman-pamukoglu-onder-caglarin-ozlemi

Şöyle ki: “…Önder, insanoğlunun çaglar boyu özlem duyup hasretiyle yaşadigi en değerli bir üst ihtiyaçtır… Önderi başkan, patron, şef, direktör, komutan gibi hiyerarşik yapıların sıfatını taşıyanlara karıştıran ve bir tutmaya kalkışanlara en yakışır söz: ‘Bilmez, bilmediğini de bilmez.’ deyimidir…” Tarihi incelediğimizde, doğanın var olduğu her alanda önderin varlığını görebiliyoruz. Peki, sektördeki şu meşhur takım önderlerinin bundan haberi var mı?

Peki, iş başvurularında iletişimin en kısıtlı olduğu elektronik posta zemininde hiç bir takım önderi etiketini taşıyan birisinden ben merkezciliğin somut örneğini gördünüz mü? Bir Laravel çalışması için ben Linkedin’de önceden yapmış olduğum bir başvuru sonrasında gelen bir elektronik mail ile bunu yaşadım. Fazla ayrıntı vererek sizi de umutsuzluğa itmek istemiyorum lakin süzme olanına rast geldiğim için şanssız bir günümdeyim sanırım. Tam zamanlı çalışır mısınız? Sorusuna, olabilir yanıtını verdiğimde; bize başvuru yapan sizsiniz. Olabilir ile ne demek istediğinizi anlayamadım cevabı alabiliyorsunuz. Yahu adamın, kendisine herhangi bir konu hakkında görüş belirtmeme tahammülü yok. Elektronik posta iletişimde gösterdiği süzmeliğe bakınız, bu arkadaşla çalışan arkadaşlarıma Tanrı’dan sabır diliyorum.

Havasından mı desem, suyundan mı. Ya sabır!

Ben merkezci süzme bireysizlere örnek olarak önder etiketini kullanan basiretsiz yönetemeyicilere de bir örnek verdiğime göre yavaştan sonuna doğru devam edelim.

Sonuç

Türkiye’de de insanoğlunun olduğu her yerde olduğu gibi bir ben merkezcilik söz konusu. Bunun bizim gözümüze daha çok batmasının ve yaşam kalitemizi gereğinden fazla etkilemesinin nedeni ise yaşam koşulları. Bilginin azaldığı ve cehaletin ağır geldiği terazilerde bilmemenin verdiği özgüvenle çok bildiğini sanan insanların gereksiz süzme ben merkezciliği ile karşılaşmak zorunda kalıyoruz. Ve buna tahammül etmek, katlanmak inanın çok zor.

Çevremizi değiştiremiyoruz. Kendimizi değiştirelim. Bu yazıyı okuyan arkadaşlarımdan rica ediyorum. Bilgi paylaşımının verdiği hazzı birlikte yaşayalım. Sizinle çalışan insanları küçümsemekten, kırmaktan, incitmekten kaçının.

“Ben ölünce bir elimi tabutumun dışına atın. İnsanlar görsünler ki padişah olan Süleyman bu dünyadan eli boş gitmiştir.” I. Süleyman

Teşekkür ederim.

Docker ile PHP Geliştirelim

Merhaba,

Docker ile PHP geliştirmek isteyenlere yönelik kullandığım bir paketten bahsedeceğim. GitHub’ta webdevops.io bünyesinde geliştirilen paket ile Docker Hub‘ta bulunan tüm imajları dilediğiniz gibi kullanabilirsiniz.

PHP Docker Boilerplate

Öntanımlı olarak gelen birden fazla seçenek bulunmakta. PHP ile proje geliştirenlerden şunu duyar gibiyim. Bende çalışıyor, ama arkaşımda çalışmıyor. Çok ciddiyim. Bu anahtar kelimelerle bile Google’da araştırma yaptığınızda karşınıza birçok konu başlığı çıkmakta.

Ben de bu sorunu bloğumda yazmışım hatta. Linux Mint kullanıcısı iken karşılaştığım bir PHP ortam sorunu ve çözümü: https://www.mkoseoglu.com/linux-php-composer-hatasi-ve-cozumu

Birgün CI ile geliştirme yaparken Laravel 5.5 ile çözmem gereken bir sorun vardı. Fakat şöyle bir durum var. Laravel 5.5 ile birlikte PHP 7 bağımlılığı da beraberinde gelmekte. Bu durumda, Arch Linux’a yeni bir PHP sürümü yapılandırmak ya da XAMP’ın PHP 7 sürümünü kurmak görünürde en mantıklı gelen çözümlerdi. Fakat ilerleyen zamanlarda bunun aslında ne kadar da saçma ve sığ bir süreç olduğunu fark ettim.

Docker, bizlere bu sorunu çözmeyi vaad ediyor. Bir sanallaştırma teknolojisi olan Docker üzerine teorik bilgilerden ziyade geliştirme paketinden söz etmeyi tercih ediyorum.

GitHub alanlarında ekledikleri açıklama satırında Symfony, WordPRess, Joomla ve diğer PHP projelerini (NGINX, Apache HTTPd, PHP-FPM, MySQL, Solr, Elasticsearch, Redis, FTP) desteklediklerinden söz etmişler. PHP sürümleri ve servisleri elinizin altında, tek yapmanız gereken Docker Compose ile birden fazla konteynırı ayağa kaldırmak.

Docker Kurulumu

Ben Arch Linux kullanıcısıyım. Pacman kullanarak ihtiyacım olan uygulamaları yüklüyorum.

Yükledikten sonra Docker servisimi başlatıyorum.

Linux kullanıcılarının dikkat etmesi gereken bir nokta var. Docker’ın her komutunda sudo kullanmak ya da Docker‘ı kullanıcı grubuna eklemek zorundasınız. Ben eklemeyi tercih ediyorum.

Bu işlemden sonra oturumumu yeniden başlatıyorum. Uçbirimde docker version komutunu çalıştırıyorum. Eğer sizin de çıktınız aşağıdakine benzer ise her şey yolunda demektir.

PHP Docker Boilerplate

Git clone komutu ile paketimizi yerele çekelim. Paketimizin içerisinde yer alan app dizini bizim Linux’taki mount, Docker‘daki Volumes dizinidir. Bir anlamda yerel bilgisayarınızdaki çalışma dosyalarınızdır. Biz, app dizini üzerinde çalışacağız.

Gerekli dökümanlara buradan ulaşabilirsiniz: https://github.com/webdevops/php-docker-boilerplate/tree/master/documentation

Uçbirimde paket dizininde aşağıdaki komut ile birlikte çalışma ortamımızı seçelim. Geliştirme ortamında development olanını seçmekte fayda var. Gerekli hata ayıklama gösterimleri açık olarak gelmekte.

Şimdi, docker-compose.yml dosyamızın içeriğine bir göz atalım. Burada yer alan komutların açıklama ve anlatımları için Dockerfile oluşturma üzerine araştırma yapabilirsiniz. Ben kullanmayacağım için links altında belirtilen mail servisini siliyorum.

MySQL veritabanı olarak 5.7 sürümünü kullanmayı tercih ettiğim için başındaki yorum satırını kaldırarak ilgili satırı aktif ediyorum. Hemen yukarısında kalan 5.6 sürümünün başına yorum satırı koyarak geçersiz hale getiriyorum.

Ve son olarak phpMyAdmin kullanmak istediğim için dosyanın aşağında bulunan yorum satırlarını silerek aktif hale getiriyorum ve görebilmek için bir port tanımlıyorum.

Buna göre, phpMyAdmin’in 3000’inci portumda çalışmasını beklerim.

Kullandığımız paketin dökümantasyonunda ortam değişkenleri ve daha birçok konuda anlatım bulunmakta. Kendi ihtiyaçlarınıza göre inceleyerek yapılandırabilirsiniz.

Docker Compose

Docker Compose birden fazla konteynırı ayağa kaldırmaya yarar. Öncelikle bu paketimizi build etmemiz gerekli.

Yukarıdaki komut ile inşaa ederek ihtiyaçlarımıza yönelik yapılandırdığımız Dockerfile dosyamız bizlere ilgili servislerin imajını indirmekle görevlidir.

Gerekli işlemler tamamlandığında  docker image ls komutu ile tamamlanan imajlarımızı görüntüleyebiliriz. Sol kısımda yer alanlar ise ID değerleridir.

Şimdi buradaki imajlarımızı ayağa kaldıralım, çalıştıralım.

Buradaki -d parametresi detached’ten gelmektedir. Türkçesi ile bağımsız, tarafsız anlamlarına gelmekte ve olan detached’in bizler için asıl amacı Docker komutlarını arka planda çalıştırmasıdır.

Komutumuzu çalıştırdıktan sonra adres çubuğumuza localhost:8000 yazarak Apache sunucumuza, localhost:3000 yazarak da phpMyAdmin ekranımıza ulaşabilirsiniz.

Buradaki app dizininde Laravel, CI ve WordPress gibi yukarıda da sözünü ettiğimiz Framework’leri (çatı) kullanabilir farklı PHP sürümleri ve servisleri ile ihtiyacına göre çalışma ortamınızı yapılandırabilirsiniz.

Çalışmalarınızı GitHub’a, Dockerfile dosyanızı ise imaj haline getirerek Docker Hub hesabınıza atabilirsiniz.

Sonuç

Docker‘in Türkçe kaynak eksikliği herkesçe bilindiği için bu makaleyi oluşturmaya karar verdim. Kısa da olsa bir PHP geliştiricisinin hangi süreçlerden geçmesi ve hangi adımları izleyerek işlevsel bir Docker kullanıcısı olabileceğini anlatmayı hedefledim.

Webpack: Modül Paketleyici

Merhaba,

JavaScript çalışmalarımda sıkça kullandığım ve neredeyse JavaScript çatılarında kullanılması elzem paketlerden birisinin kullanımına dair elimden geldiğince Türkçe içerik oluşturmaya gayret edeceğim. Bu konuda Türkçe kaynak olmadığı için bazı terimlerin Türkçe kullanımında kararsız kaldım. Bu konuda yardımcı olursanız ve katkı gösterirseniz sevinirim.

Öncelikle, Webpack‘i nasıl tanımlarız? Şöyle yaklaşalım; elimizde birden fazla dizinde bulunan birden fazla modül bulunmakta. Bir JS dosyası, birden fazla JS dosyasını içerisine çağırıyor, çalıştırıyor ve HTML etiketine ilgili çıktıyı basıyor. Tüm bunlar olurken bir de CSS ve diğer modüller yükleniyor. Burada tarayıcının önyükleme süresinin ne denli arttığını ve şişmiş dosya boyutlarını fark ettiniz mi?

Evet, tam da burada Webpack; bizim kullanacağımız kısa açıklama tabiri ile Modül Paketleyicimiz devreye girmekte. Webpack, ilk olarak 2013’te Tobias Koppers tarafından oluşturulmuştur. Süregelen zamanda ekibe dört yeni kişi daha eklenmiş ve açık kaynak olarak geliştirilmeye devam etmiştir.

Peki, Webpack sadece kendisine gelen dağınık modülleri paketlemeye mi yarar? Buna dolaylı yoldan hayır cevabını verebilirim. Webpack‘e bağımlı aynı zamanda Webpack Dev Server paketini kullanmaktayız. Burada dikkat edilmesi gereken tek nokta sadece geliştirme ortamında kullandığımızdır. Kısaca bahsetmek gerekirse; geliştirme ortamında uygulamanızı hem paketler hem de sanal bir ortamda gerçek zamanlı olarak size sunar. Siz uygulamanızda değişiklikleri yaptığınızda ve her kaydettiğinizde paketler ve yeniden size sunar. Bu işlemi uyglamanız canlıda hizmet verdiğinizde Next JS gibi popüler server side render paketleri ile ya da Express JS ile çözebilirsiniz.

Bu yazının devamında Webpack kullanımıi eklentilerini ve örnek kod bloklarını inceleyeceğiz.

Başlangıç

JavaScript paketleri için kullanılan iki adet paket yöneticisi bulunmakta. Bunlar yarn ve npm olmak üzere ikiye ayrılmaktadırlar. Ben çalışma boyunca npm kullanarak devam edeceğim.

Linux kullanıcısı olduğum için Windows kullanan arkadaşlarlarımız farklı kaynaklardan da destek alsınlar ilerleme boyunca.

Uçbirimimizi açalım ve bir çalışma dizini, hemen ardından ise paket yapılandırma dosyamızı oluşturalım.

Ben Arch Linux kullandığım için bazı dizinlerde kullanıcı yetki hatası ile karşılaşıyorum. Eğer siz de yetki hatası alırsanız bunu çözmek için doğru kullanım şu şekilde olmalıdır:

Bu adımları başarılı bir şekilde ilerledi iseniz dizininiz şu şekilde olmalıdır:  node_modules package.json package-lock.json

Merhaba!

Şimdi basit bir çalışma örneği gerçekleştireceğiz. Yukarıdaki dizin ağacını takip edebilirsiniz. Yine, projemizin ana dizininde src dizini oluşturalım ve js dizini içerisinde basit bir işlemi birden fazla dosya ile yapmaya çalışalım.

Bir domquer.js dosyası oluşturuyorum, HTML nesnemin seçilimi için.

Bir de app.js dosyası oluşturuyorum, HTML DOM textContent özelliğim ile ekrana veri bastırmak için.

Ve son olarak css dizinini oluşturuyorum ve style.css dosyamda ilgili nesneme basit bir özellik tanımlıyorum.

Ana dizinimde bulunan index dosyamı oluşturup güncelleyeceğim. Burada dikkat etmemiz gereken nokta buradaki JavaScript dosyalarını dist/bundje.js yolu ile çağırmamız. Yani, elimizde bulunan iki adet modülü paketleyeceğiz.

Şimdi ise Webpack konfigüre adımına geldik. Burası önemli olan kısım. Yine ana dizinimizde bulunan package.json dosyamızı güncelleyeceğiz.

Bir bakalım, ne yazdık biz? Uçbirimde  npm run build komutu ile çalıştıracağımız bir komut uyarladık. Önce paketimin ismini yazdım. Hemen ardından giriş dosyam anlamına gelen entry parametresini tanımladım ve yolunu gösterdim. Bir de çıkış dosyamın dizinini ve hangi dosya ismi ile adlandırılacağını belirttim. Bir dist yolu olmasa da kendi oluşturacak ve güncelleyecektir. Burada kullanılan komut ve parametrelerin tamamına dökümandan ulaşabilirsiniz. Temel olarak package.json’da çalıştırılmak istenildiğinde kullanılan iki temel parametre bunlardır.

Uçbirimde npm run build diyerek proje dizinimde komutumu çalıştırıyorum.

Yukarıdakine benzer bir çıktı almanız gerek. Burada oluşturduğu dizide her eleman bizim bir modülümüze denk gelmektedir. Bu dizi bundle.js dosyasından incelenebilir.

Şimdi ise sanal sunucumda çalıştırıyorum.

Başarılı bir şekilde çalıştırdık. Şu an elimizde sadece iki adet modül var fakat React JS ya da diğer çatılarla çalıştığınızda ne kadar hayati olduğunu bir kez daha kavrayabileceksiniz. Buradaki CSS dosyamızı neden paketlemedik peki? Çünkü Webpack sadece JavaScript dosyaları üzerinde çalışır. Bunun dışında tüm farklı modüller için Webpack eklentilerini kullanacağız.

Peki, bundle.js dosyamı canlı bir çalışmada kullandığım zaman sıkıştırılmasını isterim ben. Bunu nasıl yapacağım? Muhtemelen pretty’den gelen -p parametresi ile.

Tekrar çalıştırıyorum.

Ve, mutlu son. Bundle JS dosyamın boyutunun küçüldüğünü görebiliyorum.

Webpack Dev Server

Evet, bundan daha önce söz etmiştim. Webpack Dev Server, geliştirme ortamında bizlere sanal sunucu ortamı sunmaktadır. Şimdi çalışmamıza dahil edelim.

Yukarıdaki komut ile çalışma dizinimize ilgili paketi tanımlayalım. Bu gibi yerel dizinde çalışıldığında daha verimli olabilecek paketleri global olarak yüklememeye özen gösterelim. GitHub’ta ya da bir takım çalışmasında yereldeki package.json dosyanızda gözükmeyen paketler farklı makinalarda çalışmayacaktır.

Bakıyorum, paket bağımlılıklarım güncellenmiş.

Şimdi build komutumuzu güncelleyelim.

Ve çalıştıralım.

Şu an 8080 portumda proje sorunsuz çalışmakta. Tabir-i caizse; koşmakta, ayakta.

Çekirdek Kavramları

Şimdiye kadar package.json’da modül girişini ve paket çıkışını belirttik sadece. Peki, diğer eklentileri kullanmak için ve farklı konfigüre işlemleri için ne yapacağız? Cevap basit!

Çalışmamızın ana dizininde webpack.config.js oluşturuyorum.

Burada komutlar tanıdık gelmiştir umarım. Entry, yine modülümüzün giriş nokta. Bu kullandığınız yapı dökümanda single entry olarak geçmekte. Birden fazla modül girişini dizi olarak da tanımlayabilirsiniz. Yine bir çıkış noktamız var paketleyicimiz için. Yol ve dosya ismi ile onu da tamamlıyoruz.

Tekrar package.json dosyamızda build komutumuzu güncelleyelim.

Ve tekrar çalıştıralım.

Yeniden paketledi ve ekrana çıktımızı verdi.

Bizim bir de CSS dosyamız vardı. Şimdi, CSS’imizi de paketleyelim. Hemen hatırlıyoruz, Webpack yalnızca JS üzerinde çalışır. Peki, bunun için ne yapıyorduk? Eklenti kullanıyorduk, evet.

CSS (Sitil) Kullanımı

Yüklememiz gereken iki adet temel paket bulunmakta. Bunlar css-loader ve style-loader dir.

Şimdi ise Webpack dosyamı güncelliyorum.

Burada seçici dosya uzantım CSS ve yükleyicilerim style-loader ve css-loader burada paketlerin yazım sırası da büyük önem arz etmektedir.

Ana dizinimizde bulunan index dosyamızda statik olarak içe aktardığımız CSS linkini yorum satırı ile geçersiz hale getiriyorum.

Src dizinimde bulunan App JS dosyasına CSS’i içe aktarıyorum.

Çalıştırıyorum…

Ve yeniden ekrana çıktımızı bastı, hem de CSS dosyalarımızı da paketleyerek.

Sonuç

Yavaştan sonuca doğru gelelim diyorum. Webpack’in bir diğer kullanım alanları ise resimlerin paketlenmesi. File Loader paketini kullanarak basit bir şekilde bunu da çözebilirsiniz. Babel ve SCSS kullanımına dair örneklere de yine erişebilirsiniz. Ben temel olarak Webpack mimarisini ve işlevini anlatan basit bir anlatım gerçekleştirmek istedim. Yukarıda ilgili başlıkların altında yer verdiğim GitHub bağlantılarında doğru dalı seçmeyi unutmayınız.

Kaynak ve İleri Okuma

Samsung Galaxy S4’ten iPhone SE’e Geçiş

Merhaba,

Genelde aldığım ürünlerle ilgili bu tarz gönderilerde bulunmasam da söz konusu hayatımızın vazgeçilmez bir parçası olan mobil cihazlar olunca izlenimlerimi paylaşmam gereken birkaç noktanın olduğunu fark ettim.

Öncelikle mobil cihaz tecrübemden bahsetmek isterim. Bu güne kadar Android işletim sistemi kullanan Samsung telefonlardan başka hiçbir cihaz kullanmadım. Herhangi bir IOS ve iPhone deneyimim de yok.

Samsung Galaxy S4

Uzun zamandır; üzerinden boyası dökülen, ekranındaki çizik sayısı piksel sayısını geçen bir Samsung Galaxy S4 kullanıcısı idim. Yaklaşık olarak üç gün önce şebeke sorunu olduğunu fark ettim. Kimsenin bana ulaşamaması başlarda dikkatimin dağılmaması adına gayet güzel olsa da iş benim birisini aramam gerektiğine geldiğinde asıl sorun o zaman baş gösterdi.

Samsung’lardaki kronik şebeke sorununun iki ana nedeni bulunmakta. Birincisi anten bağlantısında kopukluk, ikincisi ise anakart üzerinde bulunan bir entegre modülü. Birçok parçasını da ben değiştirdiğim için cihaza az çok hakimim. Yeniden içini açtım ve anten bağlantısını kontrol ettim. Herhangi bir sorunun gözükmüyordu. Bu sorunun entegrede olduğunu gösteriyor ama benim entegre değiştirmek için elimde ne gerekli malzeme bütünlüğü ne de bunlarla sorunu çözüme kavuşturmaya yetecek bir tecrübe bulunmuyordu.

iPhone SE

Uzun zamandır Apple ürünlerine ilgim vardı. Fakat 4″ boyutlarında bir cihaz arıyordum. Beni kocaman ekranlarda oyalamayacak, göz yormayacak, ince ve hafif; kolay ve kullanışlı. Bu son üç günde telefon araştırırken İphone SE modelini gördüm, tüm ihtiyaçlarımı karşılayacak boyutta bir cihaz olduğunu fark ettim. Özelliklerine ve yorumlara dahi bakmadan uzay gri modelini sipariş verdim.

Cihazı açtım ve hiçbir işlem yapmadan direkt olarak IOS 11’e güncelledim. Herhangi ek bir işlem yapmadım. Kullandığım stabil ve sabit birkaç uygulamayı da kurduktan sonra bahsi geçen IOS 11 böceklerinin hiçbiri ile karşılaşmadan gayet güzel deneyimledim diyebilirim. Uzaktan YouTube’de videolarını izlediğim ve gülüp geçtiğim Siri, beni şaşırtmaya devam ediyor. Bir kez daha geleceğin varlığını hissetmeme ve derin düşüncelere dalmama neden oldu diyebilirim. Kodlarındaki açıklama satırlarını okumak isterdim.

Android’ten IOS’a Geçiş

Elime alır almaz sıkça geyiği yapılan o soruyu ben de sordum. “Geri tuşu?” bir ümit belki koymuşlardır da ışığı yoktur diye de ara ara yokladım hatta. Touch ID’nin varlığı ile kendimce bu geri tuş eksikliğini unuttum ve incelemeye daldım. Menülerden ve uygulamalardan çıkışlarda geri nasıl gideceğimi hala arıyorum aslında. Benim için mobil cihazlarda bulunması gereken belli başlı uygulamalar ve işlevleri barındırması yeterli. Bu yüzden uzun bir karşılaştırma metni yazamayacağım. Yalnız şunu söylemeliyim ki; IOS 11’e güncellemeden önce biraz incelemiştim cihazı. IOS 11 ile birlikte gelen yeni dizayn çok hoşuma gitti.

Samsung Galaxy S4’ten iPhone SE’e Geçiş

Cihazlarda elbette donanım olarak bir kere sene farkı var. Samsung Galaxy S7 ya da S8 ile karşılaştırmak belki de daha doğru olur ama kişisel izlenimlerimi paylaşmak istiyorum.

Beni en çok mutlu eden 4″ olması ve ses kalitesi. Bunlar günlük hayatta beni cihazı kullanırken ihtiyacım olduğunda olumlu etkileyen özellikler.

Sonuç

Bu kısmı da bu konu başlığı ile araştırma yapan arkadaşlarıma yazıyorum. Her ne kadar Türkiye’de sahip olduğun eşyanın senin karakterin ya da kişiliğin hakkında bilgi vereceğini düşünüyorsan da yanılıyorsun. Biraz marka biraz da popülite uğruna hiçbir zaman ihtiyacınız olmayan eşyalara yöneliminiz olmasın. Bunu kendi adıma sizlerden rica ediyorum. Ben ihtiyaçlarım doğrultusunda bu şekilde bir karar verdim. Farklı bir marka bu opsiyonları sağlasaydı onu alırdım. Bilinçsiz tüketimden uzak duralım. Bir eşyayı almadan önce mutlaka ihtiyaç oranımızı sorgulayalım.

Sevgilerimle.

Arch Linux WiSpotter Bağlantısı

Merhaba,

Kullandığım bazı Linux dağıtımlarında ortak kullanım alanlarına ait internet bağlantılarına giriş sorunu yaşıyordum. Bunların başında ise Starbucks başta olmak üzere kullanılan WiSpotter gelmektedir. Kablosuz ağa bağlandığınızda karşınıza otomatik bir giriş ekranı gelmediği için çoğu insan bu sorunu kullandığı kablosuz internetinin sürücü özellikleri ile gidermeye çalışmakta.

Bugün yine bu sorunu yaşarken WiSpotter giriş IP’sini tarayıcıma kaydettiğimi fark ettim. Bu sayede sorunsuz bir giriş yaptım.

WiSpotter IP: 212.2.212.64:81 tarayıcınızın adres çubuğuna burada yer alan IP bilgisini girdiğinizde ilgili giriş ekranlarına yönlendirileceksiniz.

Yer imlerine kaydetmeniz tavsiye olunur.

Yeni Tema: Yirmi Onbeş

Merhabalar,

Uzun zamandır severek kullandığım Independent Publisher WordPress temasından ani bir kararla WordPress’in varsayılan tema olarak bizlere sunduğu Yirmi Onbeş temasına geçiş yaptım.

Güncemde teknik konular haricinde bu tarz içeriklere yer vermek istemesem de; okuyucularıma karşı kendimi sorumlu hissettiğim için açıklama ihtiyacı duydum.

Independent Publisher

Öncelikle, Independent Publisher genel olarak yani bir şablon olarak beni yansıtıyor diyebiliriz? “Bunu da nerden çıkardın?” diye soranları duyar gibiyim. Beni karakter olarak tanıyanlar kafalarını onaylarcasına yukarı-aşağı hareket ettirdi zaten. Kısaca açıklamak gerekirse; günlük yaşantımda da sade bir insanım. Yerel ağ(internet) üzerinde ise her zaman doğru bilginin savunucu olmuş, kaliteli, güncel ve doğru içerikleri doğru bir üslupla insanlara ulaştırmayı tercih etmiş ve yerel ağda da yerel betlerin(internet sitesi) bu şekilde olmasını istemişimdir. Üstüne üstlük renklerden ve kalabalık nesnelerden arınmış bir günce(blog) okumanın tadı hiçbir şeyde yoktur!

WordPress temasının geliştiricisi Raam Dev abimiz, kendi işinde gücünde mütevazi güzel bir insan. Tam olarak indirme sayısına ve oylamalara göz gezdirmedim fakat güzel bir indirme yakaladığını tahmin ediyorum. Raam abimiz, bu durumdan hiçbir çıkar gütmeden gayet bir gün her geliştiricinin yapmasını umduğumuz gibi GitHub üzerinde açık kaynak olarak yayınlamış çalışmasını.

Tüm bu değerlendirmelerin ışığında uzun bir süre kullandım, caanım temayı.

Eee, Sonra?

Eesi sevgili okuyucum; ilerleyen süreçte beni rahatsız eden bazı durumlar vardı. Benim için en önemlisi ihtiyaçlarım doğrultusunda mantıklı ve işlevsel güncellemeleri zorlanmadan yapabilmeme olanak sağlamasıdır. Bu temanın dizin yapısı ve kullanılan kod yapısı ise buna pek müsaade eden tarz değil maalesef. Özellikle ilk kullandığım zamanlarda Raam’a birkaç kez mail ile sitem etmişliğim ve yardım almışlığım da vardır. Kendisi her durumda yardımcı oldu lakin bir yapı var ve sen onun dışına çıkamıyorsun.

WordPress’e de CMS olarak çok hakim değilim. Blog mu? Yahu yazıyorsun yayınlıyor işte pek bir esprisi yok bu işin. Önemli olan yazdıklarınla kimlere dokunabildiğindir.

Temada son zamanlarda fark ettiğim birkaç sitil hatası ve bunları düzeltmek için kendimde yeterli enerjiyi bulamamam, GitHub üzerinde son işlemenin aylar öncesinde olduğunu gördüğümde biraz daha okuyucuya “Bak, buradayım. Okusana beni. Hadi, oku!” diyebilecek bir tema arayışına girdim.

Birazcık ücretsiz mağazaları dolaştım. Çok yeni moda ve sadeliği arka plana atmış temalara rast geldim. Yeteri kadar araştırma yapacak zamanımın da olmadığını göz önünde bulundurduğumda kendim bir tema çıkartayım dedim. Şöyle bir düşününce de mantıklı geldi. Sadece kendi ihtiyaçlarıma göre evrilecek bir yapıyı ayağa kaldırmak çok zamanımı almasa gerek diye düşündüm.

Tam o sırada, temalar kısmında eskiden de geçici olarak bir göz kırptığım Yirmi Onbeş temasını gördüm.

Yirmi Onbeş

Yirmi Onbeş’in geçmişinden haberdarım. Geçmişinden kaçamazsın diyerek samimi bir yüzleşmeden sonra hiç düşünmeden etkinleştirdim dedim. Karşıma çıkan önyüz daha sade ve daha okuyucu odaklı bir çalışma idi.

Yapı olarak WordPress’in varsayılan teması olduğunu bir bakışta hissettirecek güzellikte. Önümüzdeki bir ay boyunca Yirmi Onbeş ile devam edeceğim. Yapılan sorgu sayılarından SEO’ya kadar birçok etmeni göz önünde bulundurarak yeni bir tema yapmalı mıyım? Yoksa Yirmi Onbeş ile devam mı etmeliyim? Sorularına cevap bulacağım. Bunu da tabii ki zaman ve karşıma çıkan durum raporları gösterecek.

Sonuç

Her ne olursa olsun, geliştirmeye; yazmaya ve paylaşmaya devam ediyoruz. Vee “Bizim bir Mert vardı, o güzel yazıyordu, bu onun güncesi değil!” diye bir düşünce kapılmıyoruz.

Kaynak ve İleri Okuma

  • https://tr.wordpress.org/themes/twentyfifteen/
  • https://tr.wordpress.org/themes/independent-publisher/

Logitech Teknik Servis Süreci (Penta)

Merhabalar, 13 Haziran 2017’de satın aldığım M720 Triathlon model farede bluetooth bağlantı sorunu yaşamaya başladım. Bir anda hiçbir cihazı görmemeye başladı. Bu cihazı almamın en önemli nedenlerininden birisi ise birden fazla cihaza bağlanabilme özelliği olduğu için bu sorun bana büyük engel olmaya başlamıştı.

Bir boşluğumda Logitech’e garanti kapsamında ürünü göndermek istedim. Türkiye’deki temsilcileri Penta, tam ismi ile Penta Teknoloji Ürünleri Dağıtım Ticaret A.Ş. ile elektronik mail kanalı ile iletişime geçtim ve durumu özetledim.

Penta:

Kendilerinden şu şekilde bir yanıt aldım. Siz de ürününüzü göndermeden önce lütfen dikkate alınız. Bu konuda fazla bilgiye ulaşamadığım için sizlerin de bilgilenmesini istedim.

  • Ürünü faturasının fotokopisi ile birlikte arıza notunu yazarak servisimize Yurtiçi kargo ile gönderebilirsiniz.
  • İstanbul Anadolu yakasından gönderilen ürünlerin kargo ücreti müşteriye aittir. (Gönderici Ödemeli)
  • İstanbul Avrupa yakasından ve İstanbul dışı diğer illerden gönderilen ürünlerin kargo ücreti servisimize aittir. (Alıcı Ödemeli)
  • Yurtiçi Kargo Anlaşma Kodu : 262 244 793
  • Penta Teknoloji Ürünleri Dağıtım Tic. A.Ş.
    Organize Sanayi Bölgesi Nato Yolu 4. Cad. No : 1 Yukarı Dudullu Ümraniye İstanbul

Burada ürünü göndermek için ihtiyacınız olan tüm bilgiler mevcut.

Süreç:

Ürünümü 17 Temmuz 2017 tarihinde Yurtiçi Kargo ile gönderdim ve yine mail kanalı ile de kendilerine ulaştığı ve işleme alındığı bilgisine ulaştım. Teknik servis, maksimum yirmi iş günü içerisinde sorunu çözmeyi hedeflemekte. Şu an beş iş gününü tamamlamış bulunmaktayız.

Süreç ile ilgili gelişmeleri yine buradan güncellerim. Logitech ürünleri konusunda sorun yaşayanlara da rehberlik etmiş olur.

  • 6. iş günündeyiz ve halen ürün arıza takip numaramı alamadım. Ürünün aciliyetini bildirmeme rağmen tek geri bildirimleri “net bir bilgi veremeyiz, 20 iş günü içerisinde tamamlanacaktır.” tarzında kalıplaşmış elektronik postalardan ibaret.
  • Kendilerine (850) 277 0 277 numaralı telefondan ulaştım. Kargo takip numaramın son altı hanesini kendilerine bildirdim ve ürün hakkında bilgi aldım. Sorunsuz bir şekilde değişimi yapıldığı ve gün içerisinde kargoya verileceği söylendi. Ürün yarın elimde olursa Penta, bizlerden tam not alacak!
  • Ürün, beklediğim gibi tarafıma ulaştı. Birebir yenisi ile değişim yapıldı. Penta’ya teşekkürlerimizi iletiyoruz.

Bonus:

Ek olarak Linux üzerinde fare kullanımını konfigüre etmek isteyenler için de bu makalemi önerebilirim.

Bağlantılar:

Esen kalın!

Kotlin: Yineleyiciler & Döngüler

Kotlin‘de yineliyiciler ya da bir başka deyişle döngüler konusu ile devam ediyoruz. Geleceğin Yazarları, döngüleri şu şekilde tanımlamış:

Yazılan kodlarda belirli satırların birden fazla tekrar edilmesi istenebilir. Böyle durumlarda döngü yapıları kullanılır. Döngü yapılarında, döngünün kaç kere tekrar edeceği dinamik olarak belirlenebilir. Hatta döngünün tekrarlaması bir koşula bağlanabilir.

Biz de bu tanıma bağlı kalarak Kotlin üzerinde genel kullanım mantığı ile örnekleme yapalım.

For

For döngüsü, işlem koşullarının önceden belirli olduğu durumlarda kullanılır. Hemen bir genel kullanım örneği verelim ve sözdizime bakalım.

Bu ifadenin çıktısı şuna benzer olmalıdır:

Burada kullanılan .. operatörü bir aralık belirtir. Buna rangeTo fonksiyonu diyoruz. Tam anlamı şu şekilde aslında  1 <= i && i <= 10 ve yine burada kullanılan && operatörü ve anlamına gelmektedir.

Bir örnek daha verelim. Bu kez sadeleştirilmiş sözdizimi ile gelsin.

Birinci ifade için çıktımız 1234 olurken ikinci ifade için tanımsız olacaktır. Peki, bu aralığın tersini almak mümkün mü? Gayet tabii.

Burada çıktımızın 4321 olmasını bekleriz.

Peki, son elemanı içermeyen bir aralık oluşturmak istersek bunu nasıl yaparız? Until fonksiyonu ile.

Tam olarak gösterimi ise şu şekilde olmaktadır: [1, 10)

WHILE

Döngüsel işlem veya tekrarlı işlem (iterasyon, İng. iteration), bilgisayarı aynı işlem grubunu belirli bir koşul sağlanana kadar tekrar tekrar yapmak için yönlendirir.” diye aktarmış Geleceğin Yazarları.

Bu tarz teknik tanımlarda daha evrensel cümleler kullanmaya özen gösteriyorum ki Türkçe Yazılım‘da belirli bir kalıp oluşturalım.

While döngüsü kullanımına dair genel kullanım örneği verelim:

Burada, x değeri 0’dan büyük olma koşulunu gerçekleştirmeye devam ettiği sürece döngü çalışacaktır.

Burada çıktımızın aşağıdaki gibi olmasını bekleriz:

DO WHILE

While döngüsünde belirlenen koşul döngünün başlangıcında bulunmaktadır. Bunun anlamı, koşulun false dönmesi halinde while bloğu çalışmayacaktır. Fakat, bazı zamanlarda while bloğunu bir kere de olsa çalıştırmamız gereken durumlarla karşılaşacağız. Bu tarz durumlarda ise Do While ifadesini kullanacağız.

Genel bir kullanım örneği verelim:

Kaynak ve İleri Okuma

Kotlin: Koşul İfadeleri

Kotlin‘de şartlı deyimler ve koşul ifadelerini inceleyelim. Bunun için IF Koşulu ve WHEN Koşulu üzerinde sözdizimine göz gezdirelim.

IF Koşulu

Koşullar, yazılım dillerinde önemli bir yere sahiptir. Kullanılan algoritmalarda şartlı deyimler olarak geçen bu ifadeler sayesinde veri çıktılarımıza ve diyagram akışımıza göre süreci düzenleyebiliriz. Türkçe’de eğer anlamına gelen IF, belirttiğimiz bir koşulun gerçekleşmesi durumunda istenen değerin döndürülmesini sağlar. Bununla ilgili hemen birkaç basit sözdizimi görelim.

Genel Kullanım

Yukarıdaki örnekte max değişkenine varsayılan olarak a değişkeni atanmış ve hemen altında bir if koşulu yazılmıştır. Eğer, a değişkeni b değişkeninden küçük ise max değişkenine b değişkeni atansın.

Bunu else kullanarak yapalım.

Else ile Birlikte Kullanalım:

IF koşulunda else ifadesi, tanımlanan koşula uymayan durumlarda kullanılır. Burada a değişkeninin b değişkeninden büyük olma koşulu tanımlanmış fakat; belirtilen koşula uymadığı için else ifadesi geçerli kılınmış, max değişkenine b değişkeni atanmış.

İfade Biçiminde Yazalım:

WHEN Koşulu

When ise C benzeri dillerin geçiş operatörü olarak kullanılmakta.

Genel Kullanım

Birden Çok Aralık

Kaynak ve İleri Okuma:

Linux Mouse Konfigürasyonu (xinput,xev)

Kullandığınız farenin buton işlevlerini değiştirebilir, farklı görevler atayabilir ve tuş görevlerini yer değiştirebilirsiniz. Logitech M720 Triathlon kullanırken ileri ve geri tuşlarının yerlerini değiştirmem gerekti. Bunun için Linux’ta xinput komutu üzerinde lists ve set-button-map parametrelerini kullanarak seçili aygıt üzerinde tanımlama yaparken xev komutu ile de ilgili butonların hangi ID değerlerini öğreneceğiz.

Öncelikle xinput komutunun sözdizimine bir göz gezdirelim:

Biz, xinput set-button-map komutunu kullanacağız.

Komutumuzun çıktısı şuna benzer olmalıdır:

Logitech M720 Triathlon cihazımın Id değeri 11 gözükmekte. Şimdi, değiştirmek istediğimiz butonların hangi Id değerlerine sahip olduklarını öğrenelim.

Komutu çalıştırdıktan sonra değiştirmek istediğimiz butonlara tıklayalım ve uçbirime bakalım. Çıktımız şuna benzer olmalıdır:

Ben burada Id değeri 8 olan butonum ile Id değeri 9 olan butonumu yer değiştireceğim. Bu sayede işlevleri de yer değiştirmiş olacaktır.

Yukarıdaki komutu uçbirimde çalıştırdığımızda butonların işlevlerinin başarılı bir şekilde yer değiştirdiğini görebiliriz.

Oturumu her yeniden başlattığımızda seçili aygıtın Id değeri değişebilir. Şu anki oturumda Id değeri 11 olan aygıt üzerinde bu işlemi gerçekleştirdik. Bu komutu bir session dosyasında açılışta çalıştırmak istediğinizde hata alma olasılığınız çok yüksek çünkü her zaman Id değeri 11 olmayacaktır.

Bunun için basit bir script kullanalım.

Burada Logitech M720 Triathlon olarak yazdığım aygıt ismi için siz kullanmak istediğiniz aygıtı yazabilirsiniz. For döngüsünde bu aygıtı bulur ve bir regex kuralı ile ilgili satırı parçalayarak bizlere Id değerini verir.

Bu dosyayı dosya.sh olarak kaydedebilir ve başlangıçta çalıştırabilirsiniz.