Ali Özgür


Coding and other software development stuff

Git ile Tarihi Yeniden Yazmak

Commitleri derleyip toplamak

Uzun süre üzerinde çalışılan git branch’leri (long lived branch) için doğal olarak çok fazla sayıda commit yapılıyor. Commit sayısının fazla olmasının temel nedenleri

  1. Gün sonunda veya güvenli anlarda yapılan değişikliği kalıcı hale getirmek olabilir
  2. Yapılan çalışmanın doğası gereği küçük ve anlamlı parçalar halinde geliştirilmesi olabilir.

Bu ipucu yazımızda özellikle 1. maddede belirttiğim durumda ortaya çıkan git history kirliliğini nasıl ortadan kaldırabileceğimizi paylaşıyorum.

Read More ...

XML ve HTML Auto Merge ve Hatalı Conflict Sorunları

Diff algoritmalarının başımıza açabileceği dertler

Aynı proje üzerinde devam eden iş sayısı artınca XML formatında olan resx, csproj ve sln uzantılı dosyalarda auto-merge nedeniyle yapısal hatalar veya normalde olmaması gereken conflictlerin oluşması ve bunların manul çözülmesi gerekn durumlar ile karşılaşabiliyoruz. Bu sorunların nedeninin Git olduğunu düşünenler olabilir ama konu tüm VCS sistemlerinin kullandıkları genel kabul görmüş diff algoritmalarının eksikliğinden kaynaklanıyor.

Read More ...

C# 7.0 Yeni Dil Özellikleri

Daha Basit ve Daha Yüksek Performanslı Kod

Microsoft, yayınladığı her majör C# versiyonu için genel bir tema belirliyor ve bu tema çerçevesinde yeni C# dil özelliklerini bizlere sunuyor. C#’ın Mart 2017‘de yayınlanan 7.0 versiyonun teması aşağıdaki üç konuya odaklanıyor;

  • Alışılagelmiş bazı dil yapılarının daha basit kod ile ifade edilebilmesi
  • Performans optimizasyonu yapmamıza imkan sağlayacak yapılar
  • Mikroservisler ve sunucusuz uygulama (serverless) mimarileri gibi yeni yapılar ile veri alış verişini kolaylaştırmak

Bu yazımda yukarıdaki tema çerçevesinde C# 7.0 ile birlikte gelen yeni dil özelliklerini örnekler ile ele alıyorum.

C# 7.0

Read More ...

SOLID Prensiplerine Bakış

Nesne Yönelimli Programlama'yı İyi Yapmanın Sırrı

SOLID kısaltması Robert C. Martin (Uncle Bob - Bob Amca olarak da bilinir) tarafından ortaya atılan bir dizi Nesne Yönelimli Programlama (OOP - Object Oriented Programming) prensiplerinden 5 tanesinin baş harflerinden oluşturulmuş ve ilk defa Michael Feathers tarafından ortaya atılmış bir kısaltmadır. Hem Bob Amca hem de Michael Feathers OOP yaklaşımının yaygınlaşmasında ve doğru bir şekilde kavranmasında önemli rolleri olan kişilerdir. Bu yazımda iyi bir yazılım geliştiricinin mutlaka bilmesi gerektiğini düşündüğüm SOLID prensiplerini en yalın hali ile ve kısa C# örnekleri ile size aktarmayı hedefliyorum.

SOLID Prinsiples

Read More ...

F# ile Fonksiyonel Programlama Kitabı

Yazım Süreci

Yazılım geliştirme profesyonelleri, fonksiyonel programlama kavramlarına ve ilkelerine ağır akademik yönleri ve ihtiyaç duyulan matematiksel alt yapı nedeni ile genelde çok mesafeli yaklaşırlar. Ben de 17 yılı bulan profesyonel kariyerimin bazı dönemlerinde fonksiyonel programlamaya ilgi duymama rağmen kimi zaman tembellikten kimi zaman da incelediğim fonksiyonel programlama dilinin aşırı matematiksel yaklaşımı ve kısıtlamaları nedeni bu mecarada kendimden istediğim verimi alamadım.
Read More ...

Yeni Bir Kitap Hazırlığı

F# ile Fonksiyonel Programlama

Uzun zamandır çok beğendiğim ve kullandığım zaman oldukça keyif aldığım F# programlama dili ile ilgili Türkçe bir kitap hazırlama fikrim vardır. Sonunda bu fikri hayata geçirmek için çalışma fırsatı buldum. Kitabın içeriğine aşağıdaki linkte yer alan ön izleme sürümünden göz atabilirsiniz.

Read More ...

Git ile Versiyon Kontrolü Yazım Süreci

Türkiye'nin ilk ve şimdilik tek Türkçe Git kitabının yazım hikayesi

Yazılım geliştirme kariyerim boyunca lise ve üniversitede aldığımı İngilizce eğitimin de yardımı ile neredeyse tüm teknik bilgileri İngilizce kaynak ve kitaplardan takip ettim. Bu konularda incelediğim kısıtlı sayıdaki Türkçe kitap ve kaynağı da teknik terim çevirileri nedeni ile özümsemem daha fazla çaba harcayarak mümkün oldu. Genel görüşe benzer şekilde madem biz bu teknolojiyi üretip terminolojisini oluşturmuyoruz o halde yazılım geliştirme alanında öncelikle herkes İngilizce öğrenmeli/bilmeli şeklinde bir kanaate sahiptim. Ancak bu kanaatim Bilgi Üniversitesi bünyesinde Yazılım Geliştirme Yöneticisi olmam ile birlikte iki temel etken nedeniyle değişmeye başladı ve bu değişimin ilk meyvesi olarak da Git ile Versiyon Kontrolü kitabı ortaya çıktı.

Read More ...

Hurry! You must teach coding to your kids

A tough journey you can't resist

Within last couple of years teaching how to code to kids has become a very popular topic. Tech guys, educators, schools and governments started to invest more on this topic and they try to sell the idea to the parents. In this post I will share my own experience with my 8 year old son Arda and try to formulate couple of gotchas.

Read More ...

How to keep coding?

A personal take on career management

Software development and all related stuff is a joy you will never want to give up. But the truth is, you will sometimes feel exhausted and need to head to different directions in your career. This post is mostly about my personal experience and I will try to share couple of advices with you.

Read More ...

How is Microsoft doing with .NET Core?

A short hands on experience with an OSX guy

In this blog post I will tell you a story and share my couple of cents on .NET Core, Microsoft’s last gig.

Read More ...

Jenkins Kurulum ve Yapılandırma Notları

This post is in Turkish

Bu yazımda daha önce sizlerle paylaştığım “Environment Branching With Git” yaklaşımında adı geçen deployment otomasyonu için Jenkins’i nasıl konfigüre edebileceğmize ilişkin notlarımı paylaşıyorum.

Read More ...

Environment Branching With Git

Bilgi Software Development Team Git Workflow

In this blog post I will give you some details about the Git Workflow we are using at İstanbul Bilgi University.

Bilgi Git Workflow

Read More ...

Farewell Subversion, Hello Git

Subversion to Git Migration

At Istanbul Bilgi University Software Development Team we have been using Subversion for nearly 10 years. I was the person who introduced Subversion to the team in 2005. During all those years we have created lots of repositories, to give you the exact number we have 121 repositories. Around 100 of these repositories include source code for different systems, applications or modules. Around 20 of those repositores are just junk. We have a repository per system, application or module. I guess this bit of information is enough to give you an idea about the overall migration work we need to perform.

Read More ...

Yönetici - Yazılımcı İlişkisi Üzerine

Yöneticiler yazılımcının fikirlerine nasıl yaklaşmalı

(Turkish) Bu yazımda Yazılım ekip veya birim yöneticilerinin yazılımcılar ile ilişkisi üzerine kısa bir tespitimi paylaşmak istiyorum.

Read More ...

Custom API Authentication

Poor man's API authentication with API keys and some cryptography

In this blog post I will show you the details of a custom and minimal solution we have developed for Web API authentication.

Read More ...

Book Review : JIRA Development Cookbook

Recently we have reorginzed our Jira and implemented a User Request project to get the user requests in a single Jira project with all components in place. With this implementation user requests are assigned to our team managers then they decide how these requests will be mapped to internal projects. We also implemented a custom workflow and at some point (User Test) the user request is assigned to the reporter (our users). When our users complete the tesing and indicate success or failure the request is assigned back to the team managers. This implementation is working pretty well. Our users no longer create issues in our internal projects and the team managers can control the workload and schedule of their teams. With this implementation we can also give to the point reports to the management. In future we plan to be able to dedicate a virtual budget for each department our users work for so that we can calculate a virtual cost and time spent reports for each department.

This implementation has one downside so far; when a user request is created team managers, most of the time, create one or more issues in internal projects. Team managers copy the user entered summary and description while creating issues in our internal projects which are then linked to user requests. When we started this project we were just cloning the user requests and then we were moving the cloned user request to our internal projects. But this usage was braking the continuity of the user request issue numbers. For example; when the original user request with key value of UR-1 is cloned the cloned user request will have the key value of UR-2. When we move UR-2 to our internal project Jira will not reclaim UR-2 for the next user request instead the next user request will have UR-3 as the key value.

We felt uncomfortable with the discontinued issue numbers so we decided not to use clone/move method and just decided to manually copy user entered summary and description to the issues created in our internal projects. Manual copy/paste is tedious and prone to errors so I cecked out the web to see if Jira has some built in plugin which will allow us to Clone/Copy an issue from one project to another project. Unfortunately I found out that Jira does not have this feature or any plugin to perform this task easily.

The next step was to discover if we could implement this plugin ourselves. The book titled “Jira Development Cookbook” by Jobin Kuruvilla from Packt helped me to grasp the details of Jira plugin development. We will develop our own Issue Copy plugin for Jira, when we have some spare time from daily tasks.

I will share the source code of the plugin from my blog once it is completed, so stay tuned and take a look at “Jira Development Cookbook” by Jobin Kuruvilla from Packt if you are interested in Jira development.

Read More ...

Türkiye kendi mobil işletim sistemini geliştirebilir mi?

(Turkish)

Son günlerin gündemde tutunamayan konusu Fatih Projesi ciddi vaadleri olan ve ülkemizin geleceğini yakından ilgilendiren bir proje. Bu proje kapsamında yapılması planlanan çalışmalar şu 5 ana başlık altında toplanmış

  1. Donanım ve Yazılım Altyapısının İyileştirilmesi
  2. e-İçeriğin Sağlanması ve Yönetilmesi
  3. Öğretim programlarında Etkin BT Kullanımı
  4. Derslerde BT Kullanımı İçin Öğretmenlere Hizmetiçi Eğitim
  5. Ağ Altyapısı ve Geniş Bant İnternet Kullanımı ile Bilinçli ve Güvenli BT Kullanımının Sağlanması
Read More ...

Interview with Yalla Apps about WP7 and mobile development

Yesterday Yalla Apps contacted with me and asked for an interview. The interview was conducted to get more insight on the WP7 developer community and thier opinions about different platforms.

Read More ...

A workaround for UIWebView didFinishLoading firing multiple times problem

Here is a stackoverflow question which describes the issue very well

I have some code that needs to run after the a UIWebView finishes loading a document. For that I’ve set the UIWebView’s delegate to my controller, and implemented the webViewDidFinishLoading method.

This gets called multiple times, depending on the type of page to load. I’m not sure if it’s because of ajax requests, requests for images, or maybe even iframes.

Is there a way to tell that the main request has finished, meaning the HTML is completely loaded?

Or perhaps delay my code from firing until all of those events are done firing?

Some people say that “UIWebView must die”. Yes I actually agree with them. UIWebView loads slower than Safari, it is hard to use and it does not expose some core methods. For example you can not get source of the loaded HTML page or the document title with a regular method call. But it has its strenghts like thestringByEvaluatingJavaScriptFromString (MonoTouch equivalent is EvaluateJavascript) method. With this method you can perform some of the missing core functions.

Read More ...

Introduction to Android development : TouchCalculator

This post is the winner of The CodeProject Android Development Competition

Read More ...