
PHP Linters I can’t live without them
By Güven Atbakan, on June 9, 2025

Applying certain quality standards in our projects is one of the most important issues for us. Linters are one of the most important tools we use for this purpose.
This kind of article has probably been written many times. Nevertheless, let me explain which linter we use and why with this article.
https://github.com/php-parallel-lint/PHP-Var-Dump-Check
From time to time, software developers use functions like dd, dump, var_dump to test or debug their code. It can be the fastest and most effective way to debug. But at the same time, when it is overlooked, it can turn into a problem.

Modifiye Gameboy Color
By Bahadir Kandemir, on August 13, 2024

Çocuğu uyuttuktan sonra bol bol Gameboy Color oynadım bu yaz. Aileyle çıktığı yolculukta kulaklığı takıp Gameboy'uyla dünyadan kopan Amerikan gençliği gibiydim. Şunu 90'larda yaşamak vardı diye bol bol söylensem de, o dönem mantar gibi türeyen internet kafeler ve arkadaş bilgisayarları yüzünden, bir kere yakından gördüğümü ve ilgimi çok çekmediğini hatırlıyorum.
Az renkli TFT ekranın Akdeniz güneşinde ya da balkon ışığında oldukça iyi görüntü vermesi garip geldi. 90'larda CRT haricinde ekran görmemiş biri olarak orijinal Gameboy kalitesinde (dot matrix display) performans bekliyordum sanırım.

Hal böyle olunca sıkıntıdan elin telefona gitmesi, gitmişken epostalara bakma, mesajları okuma ve tatil sonrası için aklın bir ucunda iş düşünme döngüsünden de kurtulabildim. Ekran saatim, aletin aynı anda yalnız ve yalnız bir iş yapabilmesi ve elbet bu işin bir süre sonra bıkkınlık yaratması sebebiyle de epey sınırlı oldu ve Gameboy Color'ın her işi yapabilen telefonlardan daha iyi bir yol arkadaşı olduğuna karar verdim.

Tetris Etkisi
By Bahadir Kandemir, on July 25, 2024
Bıkkınlık ve yorgunluk yüzünden eskisine göre çok daha az vakit harcıyorum hobi projelerine. Mightland'in unutulmuş projeler arasında yer almasının sebebi de bu. Arada sırada editörü açıp haritayla oynasam da, mesai saatlerinden sonra kalan enerjimi bilgisayar başında geçirmek istemiyorum.
Hobilerim son birkaç seneye kadar genellikle bilgisayar gerektiren aktivitelerdi. Tam tembel işi. Bir yere gitmen gerekmiyor, fazla masraf yapman da. Ancak ekran ışığı, fan uğultusu, tekrarlanan pratikler bazı hobileri işten farksız kılıyor. Hele, o hobi bilgisayar oyunu geliştirmek, ya da oynamaksa.
Maymun iştahıyla daldan dala atlaya atlaya, kendimi eski Gameboy oyunlarını incelerken buldum. Apple TV'deki Tetris'i izlememin de etkisi oldu elbet, tak ve oyna türü oyun konsolları ile böylece tanışmış oldum. Emülatörle bile olsa.
mGBA adlı emülatörle Ruby, Greenleaf ve Emerald gibi 3. nesil Pokemon oyunlarını kurcalaken, izlediğim YouTube videoları da değişmeye başladı. YouTube Shorts da gereğini yaptı, ve karşıma bol bol Gameboy inceleme, tamir ve modifiye etme videosu çıkarmaya başladı. Ne tesadüf.

Oyun Yapmak İsteyenlere Tavsiyeler
By Bahadir Kandemir, on May 18, 2024

Hangi oyun motoru seçilir, ufak bir oyun nasıl yapılır kısımlarını geçiyorum. Yüzlerce güzel kaynak var. Naçizane taviyelerim, oyun yapmaya başlayan, bir şekilde "build alıp" hedef platformda çalıştırmış bağımsız, çoğu zaman yalnız geliştiriciler için.
Tavsiyeleri, uzmanından değil, mağdurundan gözüyle okumanızı öneririm. Yazıyı kısa tutup, ara ara aklıma gelenleri microblog şeklinde yayınlayacağım. Bu yazıya zorlama 100 tavsiye bulmak yerine, bloga Twitter muamalesi yapacağım.
Konudan sapıp, derinlere inip oyun geliştirme ile ilgili travmalarımla tanışmaya da hazır olunuz :)
Editörü açtığınızda, ne yapacağınızla ilgili bir planınız olsun.

Helsinki Notları
By Bahadir Kandemir, on April 25, 2024

Finlandiya'da, ve Unity'de, yedinci sene bitmek üzere. Eşimin çalıştığı araştırma grubunun Helsinki'ye taşınma kararının ardından Finlandiya'daki IT sektörü varlığından bihaber, onlarca şirketin remote pozisyonlarına başvurmuş, sonuç alamamıştım.
Eğitimde dünya lideri, hatta dünyanın en mutlu ülkesi diye duysam da, birkaç Avurpa ülkesi ve ABD dışında IT sektöründe iş bulmak mümkün olmaz gibi geliyordu, ve buradaki şirketlerde iş aramak aklımın ucundan geçmedi. Ta ki Gökmen Görgen, Unity Helsinki ofisinde çalışan bir Türkten bahsedene kadar.
Ardından Unity dahil üç yazılım şirketine yazdım, mühendislik ekibinin yoğunluğu yüzünden on-site görüşme olmadan teklif almamın ardından kendimi oyun içi reklamlar dünyasında bulmuştum. Mühendislik ekibinin neden o kadar meşgul olduğunu işe başladıktan bir süre sonra anlayacak, ve sorun yaşadıkları servisin emekli edilişini görmek için uzun seneler çalışmam gerekecekti.


Outdated codebase, new team
By Güven Atbakan, on April 13, 2024
There is a big myth in the world of software development. If it works, don’t touch it. Although this statement seems to be very true, this approach harbors many dangers both technically and culturally. In this article, I will evaluate this danger not technically, but from the perspective of the software development team.
Good developers tend to continuously improve themselves. They learn new technology, they learn new principles, they do their best to apply “best practice”. The “new” here could be a language, a framework, an approach or the way other developers around the world write code. There are people or companies that influence the coding. These people shape the industry, and good developers take their share of the credit and set their own direction.
If you want to build a team of good developers, you need to provide them with an environment where they can develop themselves technically and evaluate new technologies. You should encourage them to use new technologies and update old codebases. You shouldn’t stifle development and change, and you shouldn’t insist on practices from years ago. You should give the team a technical challenge.
I will support this with an example that is constantly on the agenda. PHP has evolved over the years and has moved away from its old criticized structure. It has quality frameworks such as Symfony and Laravel. What makes PHP developers happy now is to use the approaches of these frameworks or to be a competitor to them. What I mean by competitor here is not a product. I mean the desire to do better on the criticized aspects of these frameworks. If you still want to apply these practices because the 2013 version of PHP “works” on your system now, I’m sorry, but you’re missing out on good developers. The programming world is discussing very different things and we can’t stay 10 years ago.

Gezegene İniş
By Bahadir Kandemir, on April 13, 2024
IRC yıllarının en büyük faydası, Linux From Scratch projesiyle tanıştırması sanırım. "Kendi sistemini tek tek inşa ediyorsun" diye anlatmıştı biri. Yüz küsür sayfa kitabın çıktısını almış, gerekli tüm tar.gz'leri bir diske (CD?) indirmiş ve birkaç gün bilgisayarı kapatmadan komutları gire gire, paketleri derleye derleye sadece komut satırının olduğu bir işletim sistemine kavuşmuştum.
Derlemesi daha kısa sürer diye Xfce derleyip minik bir masaüstüm olmuş, ama Firefox derlemek için birkaç gün harcayınca sıkılıp bir üst seviyeye geçmeye karar vermiştim: Gentoo Linux.
LKD ile bu sırada tanıştım. Derken olaylar gelişti, Gentoo'nun haftalık bülten çevirilerini yapmaya başladım, okudukça, çevirdikçe İngilizcem gelişti, tecrübem de, çevrem de.
Pardus'la tanışmam, gönüllü geliştiricilerden biri olmam ve sık sık yazmaya başlamamla devam etti bu yolculuk. Twitter yoktu o zamanlar, bildiğim çok insan blog yazardı. Planet adında bir araçla, üye olan herkesin bloglarından RSS feed'leri çekip tek sayfada gösterirdik, adına da gezegen derdik.

Gündelik Şeylerin Tasarımı
By Recai Oktaş, on February 4, 2024
Üniversitelerin özellikle endüstriyel tasarım müfredatlarında yaygın olarak okutulan/önerilen şöhretli bir kaynak. Tasarım alanında bazı terimler (ör. sağlarlık) ve ilkeler (ör. keşfedilebilirlik) sunması yönüyle kıymeti haiz. Bu alana ilgi duyan bir kişinin okumazsa ayıp edeceği klasik bir kitap. "Klasik" kelimesini bir parça olumsuz bir özellik olarak, "tarihsel değeri daha fazla" anlamında kullandım. Bugüne kadar pek çok okumayla ortaya çıkan "kulaktan dolma" tasarım bilgimi biraz daha kitabî yapmakla birlikte kitaptan çok yeni şeyler öğrendiğimi söyleyemem. Bu "kulaktan dolma" bilgilerin kaynağı izlendiğinde yollar bir noktada bu kitaba ulaşacaktır ("tarihsel değer"), fakat (ispat etmeden fütursuzca iddia edeceğim bir yargı olarak ifade etmem gerekirse) tasarım sahasında spesifik alt alanlarda daha değerli kitapların da yazıldığını düşünüyorum. Kitap yer yer dağınık ve fazla tekrar içeriyor. Aynı içerik 300 küsur sayfa yerine çok daha kısa ve açık şekilde sunulabilirdi.
Kitabı bazen İngilizce orijinaliyle karşılaştırarak Türkçe çevirisinden okudum. Çeviriyi çok başarılı buldum. Örneğin "Affordance" karşılığı olarak "Sağlarlık" çok yerinde bir çeviri.
Kitaptan bana kalanları dağınık halde özetleyeyim...
-
Tasarım insan odaklı olmalı; insanların ihtiyaç ve kabiliyetleri dikkate alınmalı
-
İnsanlar hata yapar. Tasarım daima hatayı gözetmeli ve minimize etmeli. Özellikle yazılım ve donanım ürünlerinde hata iletileri azaltılmalı veya hata iletisinde kullanıcıyı yönlendirici bilgilendirme yapılmalı.
-
Asla sana verilen problemi (verildiği haliyle) çözmeye çalışma, kök neden çözümlemesi yap ve doğru problemi bulmaya çalış. (Bu aşamada başvurulabilecek bir metodoloji İngiliz Tasarım Konsülü tarafından oluşturulan Double-diamond design process model, yani "Çift elmas tasarım modeli".)
-
Bireye odaklanmak yerine etkinliğe odaklan (activity-centered design).
-
Bir tasarım, problemin doğasına uygun olarak karmaşıklık (complexity) içerebilir ama karışıklık (confusion) içeremez. Karmaşıklıkla mücadele için kavramsal modellerin gücünden yararlan. Karışıklığı ise mutlaka önle.
-
7 temel tasarım ilkesi:
-
Keşfedilebilirlik: Olası eylemler veya ürün/servisin durumu keşfedilebilmeli
-
Geri bildirim: Eylem sonuçları veya ürün/servisin durumu hakkında yeterli (aşırı değil) geri bildirim sağlanmalı
-
Kavramsal model: Deneyimsizlik veya sorun anında kullanıcıya yardımcı olacak bir kavramsal model sunulmalı
-
Sağlarlıklar: Uygun ve tercihen algılanabilir sağlarlıklar sunulmalı
-
İmleyenler: Uygun ve yanıltıcı olmayan imleyenler sunulmalı
-
Eşlemeler: Denetleyiciler ve ilişkili olduğu eylemler uzamsal ve zamansal olarak eşleştirilebilmeli
-
Kısıtlayıcılar: Hataya yol açan eylemleri önleyen/zorlaştıran kısıtlayıcılar sunulmalı
-

Görme Biçimleri
By Recai Oktaş, on January 16, 2024
Kitabın "görme biçimleri"ni deneyimleyebileceğiniz renkli resimler de içeren İngilizce orijinali herkese açık. Edebi niteliği yüksek eserde bazen kesifleşmekle birlikte sadeliğini genel olarak koruyan fasih bir İngilizce kullanılmış. Yazar özellikle kelime seçimlerinde çok titiz. Türkçe çevirinin kalitesi hakkında kararsızım. Özgün dilin kesifleştiği yerlerde çeviri bir parça mekanikleşmiş ve anlamayı zorlaştırıyor. Öte yandan bazı cümleler "daha iyi bir alternatif bulamıyorum"u düşündürecek kadar yerli yerinde. Kitabın mutad bir telif/çeviri tadı farklılığı yaşattığını söyleyebilirim.
Kitabın kategorisini sanat tarihi/eleştirisi ile sınırlamamak lazım. "Edebi nitelikli bir sanat ve toplum eleştirisi" kısmen uygun bir tanımlama olarak akla geliyor. Batı toplumuna ilişkin bu eleştiri Rönesanstan başlayıp kapitalizmin yaygınlaştığı zamanlara ulaşıyor. Yazarın siyasi geçmişi ve duruşunun bu eleştirilerde etken olduğu kesin, fakat bu durum eleştirileri subjektif kılmıyor.
Bu kitabı bir kaç kelimeyle özetlemem gerekseydi halihazırdaki başlıktan daha iyi kelimeler bulamazdım: "Ways of Seeing/Görme Biçimleri" (çevirisi de çok yerinde). Eser aslında bir BBC belgesinin kitaplaştırılmış hali. Belgesel mutlaka izlenmeli. Akış kurgusu, cümle vurguları ve görsel/işitsel zenginliğiyle kitabı pek çok yerde tefsir ediyor. Kitap hazmedilmesi yer yer zor pasajlar içeriyor. Bu nedenle ara vererek belki bir kaç kere okunmasında yarar var.
Kitaptaki ana fikirleri aşırı basitleştirilmiş gevşek bir dille aşağıda özetliyorum. Kitap gerçek gücünü bu yalın önermelerden ziyade bizi bu önermelere ulaştıran sorgulayıcı tavırda buluyor. Frans Hals'ın ilk bölümde sunulan resmi hakkında bir uzmanın yaptığı fazlasıyla mistik yorumu eleştirmesi bu tavra bir örnek olarak verilebilir. Belgeselde Caravaggio'nun "Supper at Emmaus"u üzerinde çocukların katılımıyla yapılan bir "görme" etkinliği de bir başka çarpıcı örnek (bu inceleme kitapta yok).

İnsanın Dört Zindanı
By Recai Oktaş, on January 13, 2024
Merhum Ali Şeriati'nin bir üniversitede yaptığı konuşmadan derlenmiş bu kitabı tek cümle ile özetlemem gerekseydi "İnsan olmak üzerine bir kitap" derdim. Kitabı değerlendirirken başlığa takılarak hemen dört zindan ayrımına girmek yerine sonda söyleneni başa alarak kitabın ana mesajını vermek isterim. Merhum yazar (hayvana yakın anlamlı) beşer ve (ilahi olana yakın anlamlı) insan farkını, insanı insan yapan hususiyetleri açıklarken anahtar kelimeleri veriyor: "ihtiyâr" (özgür irade), "aşk" (tasavvuf jargonundaki ilâhî aşk değil), "mantık ötesi" ("mantıklı" ve "mantıksız"a ilave üçüncü bir durum olarak) ve hususen "isâr" (başkalarını düşünerek benliğini feda etme). Birden fazla kelime kullanılmış olsa da aslında tüm bu kelimeler tek bir töze, insanî töze işaret ediyor. Anahtar kelimeleri bire indirmem gerekseydi seçimim "isâr" olurdu. "Başkaları için kendini feda etmek"liğin ne denli büyük bir erdem olduğu ne kadar çok erdemli insan tarafından ifade edilmiş? "İsâr"da büyük bir sır var, "Ne için varız, hayatımızın anlamı ne?"yi cevaplayan sır...
Kişisel olarak kitabın düşünce dünyamda bıraktığı izi yukarıdaki gibi ifade etmek için "dört zindan" ayrımına çok ihtiyaç duymadım. Yine de bu zindanları belirtmeden geçmeyelim, özellikle en tehlikeli olan sonuncusunun hatırına: Çevre/doğa, Tarih, Toplum ve Benlik zindanları. Makul bir günümüz bireyi çaba harcayarak ilk üçünden kurtulabilir ama hepimizin tutsağı olduğu "benlik zindanı"ndan kurtuluşun tek çaresi "insan olmak". Nasıl? Anahtar kelimeler yukarıda, ayrıntılar kitapta...
Kitabın çevirisini zayıf buldum. İşaret yayınlarından çıkmış olan Hüseyin Hatemi çevirisinin çok daha iyi olduğunu duyuyorum.

Writing Command Line Applications – Tips & Tricks – Run the command in background
By Güven Atbakan, on January 12, 2022
Sometimes commands takes too much time to finish. And during its running process, your terminal should always be online! If you close your terminal or you lose your internet connection, process will interrupt.
To avoid this problem, there are many different approaches. If your command takes too much time and you afraid it gets terminated because of you, you can use nohup
to run command in background.
nohup php artisan command:name &
It will run the command in background and you can close your connection. When you run the command, you’ll see such message:

Writing Command Line Applications – Tips & Tricks – Lock the command
By Güven Atbakan, on January 11, 2022
Locking the command is basically a double run prevention.
Assume that you have a hourly email command and you’re sending e-mails to users one by one. If the command doesn’t finish until next hour, you may send multiple e-mails to some users. Or your colleague can try to start same command after you run it.
<?php
// RUN A:
$users = User::where('hourly_email_sent', false)->get();
// On above query, 10.000 users have been found.
// The command started and already processed 8.000 users in one hour. There are 2.000 users remaining.
// If you start command again, you'll send 2 emails for remaining 2.000 users. Because a command is already running and you started another one.
// RUN B:
$users = User::where('hourly_email_sent', false)->get();
// On above query 2000+ users have been found.
// RUN A and RUN B can contain same users!
I generally prefer to put a value to cache and check it before actually running the command. Here’s an example:

Writing Command Line Applications – Tips & Tricks – dry-run
By Güven Atbakan, on January 3, 2022
Testing command line applications is not easy. Dry Run, is a testing process usually used for command line applications. Also it allows you to simulate what will happen when you run the command.
It’s kinda like running SELECT statement on SQL before running DELETE/UPDATE statements and see which records will be affected.
I’m going to share an example use case. Assume that you have a command which deletes unused files from your S3 bucket.
<?php
$files = File::all();
$this->output->writeln('There are '.count($files).' file to be checked');
foreach ($files as $file) {
if (!$this->fileService->isFileInUse($file)) {
$this->fileService->deleteFile($file);
$this->output->writeln('File has been deleted from storage: file_id_'.$file->id);
}
}

Writing Command Line Applications – Tips & Tricks – Logging Outputs
By Güven Atbakan, on January 3, 2022
In this series, I’m going to tell you about my experience and best practices with command line applications. I’m sure these will help you to write better command line applications.
Log output or it didn’t happen!
Logging is fundamental for any kind of application. For a command, it’s too important to log whatever the command does and its results in detail. I generally output to a file so that in future you can check when the command ran and what it did.
/var/www/artisan some:command > $HOME/logs/some-command/
date +%Y-%m-%d-%H-%M-%S.log 2>&1

Calculate distance between 2 points (latitude-longitude) with Mysql ST_Distance_Sphere method
By Güven Atbakan, on October 30, 2021
If you want to measure distance between 2 points, you can use Mysql’ ST_Distance_Sphere method – comes with Mysql 5.7+.
Assume that, you want to get closest user to given point: 41.0049823,28.7319855
<?php
$latitude = 41.0049823;
$longitude = 28.7319855;
$sql = "
SELECT
users.id,
users.username,
ST_Distance_Sphere(point(users.longitude, users.latitude),point({$longitude}, {$latitude})) as distance
FROM users";
So you’ll get distance
as meter unit. Not that, this method uses longitude-latitude pair. Not latitude-longitude. It’s important :) I don’t know why but I always use lat-lng convention.

Samsung Prime Video uygulamasında “Internet Connectivity Problem”inin Çözümü
By Emir Karşıyakalı, on September 23, 2020
Yaklaşık 10 gün önce Amazon Prime 30 günlük deneme süresi ve aylık 7,90 TL gibi bir ücretle Türkiye’ye açıldı. Ben de Netflix’deki içeriklerden sıkılmış biri olarak hem Prime Video’ya erişebilmek hem de diğer özelliklerini kullanabilmek için(Aynı gün teslimat, Kampanyalar, Gaming) abone oldum.
Yalnız Samsung televizyonumdaki Prime Video uygulamasını her açtığımda Internet Connectivity Problem hatası alıyordum. İnternette biraz araştırdım ama çözüm bulamamıştım. Bugün son şans Twitter’dan da sordum ve bingo:
Yettim hanım! :pMenü > Genel > Sistem Yöneticisi Dil ayarlarından TV dilini İngilizce yapın düzeliyor. Beni de delirtmişti. :)
Özetle TV dilini İngilizce’ye çevirmek gerekiyormuş. Menü > Genel > Sistem Yöneticisi > Dil Ayarları yolunu takip ederek İngilizce’yi seçebiliyorsunuz. Dikkat edin: başka bir uygulama açıkken bu ayar değiştirilemiyor. Tüm uygulamaları kapattığınızdan emin olun.

Uzaktan çalışan şirketler için “ekip olmayı” oyunlaştırma
By Emir Karşıyakalı, on September 19, 2020
Bildiğiniz üzere Yelken(Sailing) ekip içi iletişimi arttırmak için şirketlerin çokça tercih ettiği sosyal ve sportif bir aktivite. Benim de birkaç kez katıldığım Yelken’de rüzgar, dalga, akıntı gibi faktörleri doğru şekilde yorumlamak gerekiyor. Yelken üzerinde herkesin ayrı ayrı görevleri olduğu için problem çözmenin yanında ekip olma, hızlı karar verebilme ve liderlik gibi becerilerin ortaya çıkmasını sağlıyor. Tabii bunları yaparken çokça eğlendiğiniz bir aktivite.
Moneo’da kurulduğumuz günden beri bir kültür olarak uzaktan çalışıyoruz(FREELANCER DEĞİLİZ). Yaklaşık 20 kişilik ekibimiz İstanbul, İzmir, Denizli, Trabzon, Alanya ve Malatya’da yaşıyor. Dolayısıyla her an birlikte olmak, aktivitelere katılmak İstanbul içerisinde bile bir uç Tuzla diğer uç Beylikdüzü derken pek mümkün olmuyor.
Bugün size daha önce defalarca duyduğum ama oynamaya yeni başladığımız bir oyundan bahsetmek istiyorum: Sea of Thieves. Windows(Steam) ve Xbox platformlarından oynanabilen bu oyun aynı Yelken gibi ekiple olmayı gerektiriyor.
2, 3 veya 4 kişilik(maksimum) gemi seçip oyuna başlıyorsunuz. Mikrofonunuz sürekli açık ve herkesin gemide ayrı bir görevi oluyor. Örneğin 4 kişilik bir gemi seçtiyseniz bir kişi dümen, bir kişi harita, bir kişi yelkenler ve bir kişi de gemideki diğer işlerden(gemiyi tamir etme, çapa atma, yangın söndürme, topları doldurma ve dahası) sorumlu.

Docker Diaries: Pinning-by-digest
By Emir Karşıyakalı, on March 20, 2020

One thing you need to know when using Docker is: tags are mutable. Thus, the latest tag is not always the latest version of the images. Latest just the tag which is applied to an image by default which does not have a tag. Maintainers(or bots) need to maintain the latest tag manually for their docker images.
About a week ago, we had to move an application that we previously deployed with Docker. We have followed a simple way, such as zipped and moving the folder to the new server. But we haven’t been maintaining this application for a while. When new versions were released and we tried to install it on the new server, we couldn’t get the application up because the latest tag pulled the new version. We had to find out which version the latest tag we installed was for. We found the solution in digests. An immutable identifier for the docker images. We found the digest of the image installed on the old server with the latest tag and replaced the image of docker-compose.yml on the new server with this digest. Bingo.
Digests time saver for that kind of scenarios.
Pull that image by digest guarantees that every instance of the service (on any node) runs exactly the same version of the image.

Laravel Testing Issue: Mocking Event Facade
By Emir Karşıyakalı, on August 9, 2019
Laravel provides helpers for mocking events, jobs, and facades out of the box. These helpers primarily provide a convenience layer over Mockery so you do not have to manually make complicated Mockery method calls.
Today first time I used Event::fake() and faced really weird issue when I run tests.
public function testPostCreating()
{
Event::fake();
$response = $this->json('POST', '/api/v1/posts', [
'title' => 'Example Post',
]);

Automatically connect VPN and login server via whitelisted server
By Emir Karşıyakalı, on June 27, 2018
Moneo is a remote company that helps startups to turns their ideas to products. And because of security 101 our clients whitelisted one of our IP address for accessing their servers. That IP address is one of our cloud server(A) and we access that server via our VPN. So If our developers wants to access one of our client’s server they need to connect our VPN first, ssh to our cloud server(A) and another ssh to client’s server. It’s boring and I forgot to open VPN every single time.
Today I found some free time and thanks to Tunnelblick’s AppleScript support I automated that proccess.
Firstly, I need to add our cloud server(A) to my local config. moneo is our cloud server(A)
# .ssh/config

Quick Tip: Logging Mastery with Laravel
By Emir Karşıyakalı, on June 26, 2018
Putting unique id to requests one of my silver bullet while designing RESTful APIs. It provides an extremely easy way to follow each request’s lifecycle while debugging. In this guide I’ll show you how you can add it to your log files on Laravel 5.6.
Under the hood, Laravel utilizes the Monolog library, which provides support for a variety of powerful log handlers. Laravel makes it a cinch to configure these handlers, allowing you to mix and match them to customize your application’s log handling.
The tap array should contain a list of classes that should have an opportunity to customize (or "tap" into) the Monolog instance after it is created. (In this example we created LocalLogger)
This class only needs a single method: __invoke, which receives an Illuminate\Log\Logger instance. The Illuminate\Log\Logger instance proxies all method calls to the underlying Monolog instance:

Heroku: Copying environment variables from an existing app to another
By Emir Karşıyakalı, on June 20, 2018

After I promoted my staging app to production I need to copy my existing environment variables review and push to production. With Heroku CLI I solved that issue really easy.
heroku config -s -a existing-heroku-app > config.txt
cat config.txt | tr '\n' ' ' | xargs heroku config:set -a new-heroku-app
It’s just a note for future myself.

Implementing JWT Authentication to your API Platform application
By Emir Karşıyakalı, on April 28, 2018

API Platform allows to easily add a JWT-based authentication to your API using LexikJWTAuthenticationBundle. This bundle provides JWT(JSON Web Token) authentication for your Symfony API. But there's no official documentation for Symfony 4 (w/Flex) yet. This is a quick manual for implementing LexikJWTAuthenticationBundle.
According to the API Platform documentation:
I decided to go with Doctrine User Provider. Because of Security component comes with API Platform I only need to create an entity named User which implements UserInterface or AdvancedUserInterface:
$ php bin/console doctrine:database:create
$ php bin/console doctrine:schema:update --force

WordPress kullanıcıları dikkat! Otomatik güncellemeler bozuldu!
By Emir Karşıyakalı, on February 8, 2018

WordPress’in hafta başında yayınlanan 4.9.3 sürümünden bir gün sonra 4.9.4 sürümü de yayınlandı. Sistemini otomatik güncellemeye emanet edenler bu güncellemeyi alamadılar çünkü 4.9.4'ün yayınlanmasının sebebi 4.9.3'de bozulan otomatik güncelleme özelliğiydi. WordPress versiyonunuzu güncel tutabilmeniz ve bundan sonra yayınlanacak sürümleri otomatik indirmesini sağlayabilmeniz için manuel olarak güncellemeniz gerekmekte.
WordPress sitemi manuel olarak nasıl güncellerim?
- Opsiyon: WordPress panelinize girip Updates(Güncellemeler) bölümünden, Update Now(Hemen Güncelle)’a tıklayabilir
- Opsiyon: WP-CLI kullanıyorsanız wp-cli update komutunu çalıştırabilir
- Opsiyon: Buradan WordPress’in güncel versiyonunu indirip FTP üzerinden, wp-includes/update.php & wp-includes/version.phpdosyalarını değiştirebilir (Bu madde sadece 4.9.3 -> 4.9.4 güncellemesi için geçerli)
- Opsiyon: PHP komut satırından php -r ‘include “wp-load.php”; wp_maybe_auto_update();’ komutunu çalıştırabilirsiniz.
Bu adımlardan birini uyguladıysanız tebrikler! WordPress artık güncellemeleri otomatikman almaya devam edecek ve bir daha manuel olarak güncelleme yapmak zorunda kalmayacaksınız.

Laravel 5.5 (LTS): API Resources
By Emir Karşıyakalı, on October 2, 2017
RESTful API geliştirirken dikkat etmemiz gereken en önemli konulardan biri tutarlılık(consistency). Versiyonlama, HTTP durum(status) kodlarınının kullanımı, kaynakların(resource) isimlendirmeleri, çıktılarımızın(response) kapsüllemeleri ve çıktılarımızı oluşturan alanların(field) isimleri gibi tutarlılığı korumamız gereken farklı seviyeler var. Bu yazının konusu tutarlılığın çıktılarla alakalı olan kısmı kapsülleme ve alan isimlendirmeleri.
API Resources’ı tanıtmadan önce daha önce nasıl yaptığımıza bakalım. Problem çıktıları kapsülleme olduğunda birçok farklı yol deneyebilirsiniz. Laravel’in Controller’ından kalıtım alan bir BaseController oluşturup buraya respondSuccess, respondBadRequest vb. methodlar ekleyebilir ve bu methodlar içerisinde çıktılarınızı kapsülleyebilirsiniz:
//BaseController
public function respondSuccess(array $data): JsonResponse
{
return response()->json([
'data' => $data
], 200);
}

Laravel 5.3 change mail configuration dynamically
By Güven Atbakan, on January 7, 2017

If you are developing CMS software or a SaaS product, your customers needs to set their mail sending credentials for sending mails from their system. By default, you can set mail configuration to .env file.
But if your customer don’t have access to .env file and command line to execute artisan config:clear command, they need to change credentials from their panel. Here is an example:
I store these values at database. So, i need to change mail config before sending email. But, Laravel’s

My PhpStorm file watcher for php-cs-fixer
By Güven Atbakan, on October 20, 2016
I started using PHP Code Style Fixer long time ago for automatically fix my code style. You can use this tool via command line. But also you can add a file-watcher for PhpStorm. It runs php-cs-fixer on every file save. So you dont need to run php-cs-fixer manually.
Here you can download watchers.xml
: https://gist.github.com/shibby/6cb1fcafe3747ce8e2f7aa0e8dc2b516
All you need to do is import xml file from PhpStorm Settings->File Watchers and installing php-cs-fixer to /usr/local/bin
folder.

Running Laravel4 with PHP7
By Güven Atbakan, on August 10, 2016
I will not argue about Laravel’s shitty versioning system and dropping support for older versions. They are so excited, everyday adding a new feature to framework’s core. Yeah, thats really good thing but who cares fucking backward compability?
Anyway, if you are using Laravel4 and want to run it with PHP7, you have make some changes on framework’s core. So, you need to fork L4 and publish it as a new package OR (preferred) you need to use it as custom repository.
So, what do you need to change?
Here is a pull request, that contains full change for support PHP7: https://github.com/laravel/framework/pull/13338

Hmm
By Recai Oktaş, on July 7, 2011
Bugün farklı yerlerde bir kaç şey düşündüm. Evde: "Oda niye bu kadar dağınık?", arabada: "Yürürken de bu kadar dikkatli misin?" Zihin gürültüsü mü desek bunlara, "sorgulama" mı? (bu da üçüncü soru oldu) Adı her neyse kemikleşmiş bir alışkanlık bu. Anormal vehimlerden, kuşkulardan bahsetmiyorum, yukarıdaki soruların hiç birinde "kuşku" yok, merak var. Kesif bir içe bakışı gizleyen masum (!) sorular...
"Oda niye dağınık?" Misal, bazı nefret hallerinin gizli bir muhabbete işaret etmesi gibi, bu dağınıklık da gizli bir düzen idealine işaret ediyor. Buna benzer bir cevap verdim. Sonra kendimi bir roman kahramanı olarak düşledim.
Bay R odasında nicedir gözlediği dağınıklığı ortadan kaldırmak yönünde hiçbir gayret sarfetmemesinin nedenleri üzerinde düşünürken kahvaltısını tamamlamak üzereydi. Bunun keyifli bir soru olduğunu hissetti. Daima ihtiyaçtan fazla miktarda demlediği taze çaydan bir bardak daha alırken "mükemmeliyet iştiyakı" diye mırıldandı. Odanın entropisi dahil pek çok şeyi ideal (ve tanım olarak mükemmel) bir geleceğe ertelediğini farketti.
"Yürürken de bu kadar dikkatli misin?" Bu kadar değil ama evet, dikkatliyim. Kalabalıkları sevmiyorum; insan sevmediği yerlerde dikkatli oluyor. Bu cevap kesmedi fakat. Yine eski bir alışkanlık... Bir probleme önerilen ilk çözüm yeterli bulunmadığında yeni çözümlerin arayışına girişmeden önce sorunun yasallığını veya nasıl diyelim, bizim gençlerden birinin tabiriyle "sorulabilitesi"ni sorgulamak lazım. Zira çözüm arayışıyla ilerleyeceğiniz yorucu güzergaha çıkmadan önce yeterli motivasyonunuz olmalı. Yani, yürürken de bu kadar dikkatli olup olmadığımı neden soruyorum?

Bayram
By Recai Oktaş, on November 1, 2007
Efendim, bir bayram daha geldi çattı ve, adet olduğu üzre, kendimizi bayram arefesindeki prokrastinasyonal, yani nasıl derler, "yapılmasa da olur, ama yapacağım" nev'inden meşgaleler arar hâlde bulduk. Bu jurnal cümlelerine hasbel kader gözü takılan cümle cemaatin Ramazan bayramını kutlayalım evveliyetle.
Kuşların getirdiği kimi haberler sayesinde, memleketin muhtelif medreselerinde verilmekte olan C
derslerinde bizce
"konayo" olarak bilinen, ecnebicesi conio.h
olan taşınamazların, dersleri deruhte eden muallimler indinde musallat
bir fikri sabite inkılâp ettiğini esefle öğrenmiş bulunmaktayım. Tabii ki bu mezalimde, inançları hilafında bir makama
râm olmak durumunda kalan istiklâl ve istikbal sahibi talebelerin haykırışlarına (ki cihan şümul bir mahiyet arz ettiği
kat'i olan bu çığlıkları sizin de duymanız pek
mümkün) kulaklarımı tıkayamazdım. Ez-cümle işte o "bayram arefesi eğlencelik demler"e konumlandırdığımız mütevazı bir
çalışmanın neticesi olarak course-goodies
yaşca
bendenizden küçük bu kardeşlerime bir bayram hediyesi olsun bakalım.
Package: course-goodies
Architecture: all
Description: Course goodies for C/C++ language courses
Nothing interesting here; only a few source files, notably 'conio.h',
to allow FLOSS-minded students to 'getch' or 'kbhit' while studying
some examples dictated by some lecturers.
Marifetlerini ifade etmeye birkaç satırın kâfi geleceğini de düşünmekteyim: