<![CDATA[Burak Aykan | Blog]]>https://burakaykan.dev/https://burakaykan.dev/favicon.pngBurak Aykan | Bloghttps://burakaykan.dev/Ghost 5.33Sat, 16 Dec 2023 09:10:54 GMT60<![CDATA[Malta's Classical Cars - Part 1]]>Malta has a rich automotive history that dates back to the early 20th century, when cars were first introduced to the island. At that time, cars were still a novelty and were owned primarily by the wealthy elite. However, as the 20th century progressed and the Maltese economy grew, more

]]>
https://burakaykan.dev/maltas-classical-cars/642f2303a07aa8bfb1dab365Sat, 26 Aug 2023 08:53:24 GMTMalta has a rich automotive history that dates back to the early 20th century, when cars were first introduced to the island. At that time, cars were still a novelty and were owned primarily by the wealthy elite. However, as the 20th century progressed and the Maltese economy grew, more and more people began to own cars, and classic cars became a common sight on the roads.

One of the earliest and most iconic classic cars in Malta is the Bedford CA van, which was introduced in the 1950s and quickly became a popular workhorse for businesses across the island. Other popular classic cars in Malta include the Morris Minor, the Ford Cortina, and the Mini Cooper. These cars were known for their distinctive designs, durability, and ease of maintenance, and many of them are still in use today. As the years went by, more and more classic cars were imported to Malta, and the island's automotive culture continued to grow and evolve.

A few weeks ago, I had the pleasure of attending a charity event in Malta that featured a static car show put on by the Old Motors Club. As a lover of classical cars, I was thrilled to see so many beautiful and unique vehicles on display. In this blog series, I'll be sharing some of my favorite cars from the event, as well as some other classical cars I've spotted around Malta. Whether you're a fellow car enthusiast or simply appreciate the beauty and craftsmanship of these timeless vehicles, I'm sure you'll enjoy exploring the world of classical cars in Malta with me. So, without further ado, let's get started!

]]>
<![CDATA[Ghost Town in Malta 🇲🇹]]>Did you know that Malta has some ghost towns?

The White Rocks Complex is one of them. We went there with my lovely wife and take a few shots from there.

Let's find out more about this ghost town.

The White Rocks Complex was originally built in the

]]>
https://burakaykan.dev/ghost-town-in-malta/642f2c56a07aa8bfb1dab386Thu, 06 Apr 2023 20:55:58 GMTDid you know that Malta has some ghost towns?

The White Rocks Complex is one of them. We went there with my lovely wife and take a few shots from there.

Let's find out more about this ghost town.

The White Rocks Complex was originally built in the 1960s as a luxury hotel and leisure complex. It was a popular destination for tourists, and its prime location on the coast offered stunning views of the Mediterranean Sea. The complex featured several swimming pools, a private beach, restaurants, and other amenities.

However, in the 1980s, the complex started to decline in popularity due to competition from newer hotels and changing tourist preferences. It was eventually abandoned in the early 2000s, and has remained empty ever since.

Today, the White Rocks Complex is a ghost town of sorts, with empty buildings and overgrown gardens. Despite being abandoned, it remains a popular spot for photographers and urban explorers who are drawn to its eerie beauty and haunting atmosphere. The complex has also been used as a filming location for several movies and TV shows.

It's worth noting that the White Rocks Complex is private property, and entering the area is not only illegal but also potentially dangerous. The buildings are in a state of disrepair, and there may be hidden hazards such as unstable structures, sharp objects, or asbestos. It's best to view the area from a distance and avoid entering the complex for your own safety.

0:00
/

But it's not finising in here, we will set another round in here.

Also there are other ghost towns in Malta and we'll give a shot to them as well, to not miss our next trip don't forget to check our other posts.

]]>
<![CDATA[Top of the World, Għargħur]]>Dünyanın (Malta'nın) tepesine ilk seyahat.

]]>
https://burakaykan.dev/top-of-the-world-gharghur/63d80daba07aa8bfb1dab348Mon, 30 Jan 2023 18:48:44 GMTDünyanın (Malta'nın) tepesine ilk seyahat.

]]>
<![CDATA[Verimliliğinizi 🚀 Arttıracak IntelliJ Idea plugin'leri | Part-1]]>https://burakaykan.dev/productive-intellij-idea-plugins-part-1/62798227b9a25e138aa691ebMon, 04 Jan 2021 21:43:13 GMTVerimliliğinizi 🚀 Arttıracak IntelliJ Idea plugin'leri | Part-1Verimliliğinizi 🚀 Arttıracak IntelliJ Idea plugin'leri | Part-1

Plugin'ler günlük hayatımızın büyük bir kısmını geçirdiğimiz IDE'lere renk katan araçlardır. Zaman zaman gözardı edildiklerini düşünsem de plugin geliştiriciler gün geçtikçe geliştirdikleri plugin'leri kullanmamamızı imkansız hale getiriyor.

Hızlıca birinci listemize başlayalım, listemize 1 Numaradan giren plugin'imiz.

- Rainbow Brackets

Rainbow Brackets plugin'i bize kod okumada büyük bir kolaylık sağlıyor parantezleri renklendirerek, scope'u kolayca bir bakışta algılamamızı sağlıyor.

Rainbow Brackets - Plugins | JetBrains
Rainbow Brackets / Rainbow Parentheses for IntelliJ based IDEs.
Verimliliğinizi 🚀 Arttıracak IntelliJ Idea plugin'leri | Part-1

- Return Highlighter

Bu plugin ise bize kodun içerisinde return olan bölümleri "aydınlatıyor". Sonradan dahil olduğunuz code base'lerde return edilen yerleri görmek oldukça kullanışlı oluyor. Benim favori plugin'lerimden biri "Return Highlighter"

Return Highlighter - Plugins | JetBrains
Highlight return statements.
Verimliliğinizi 🚀 Arttıracak IntelliJ Idea plugin'leri | Part-1

- String Manipulation

Örneklerden de görebileceğiniz gibi String Manipülasyonu konusunda oldukça maharetli olan bu plugin Intellij Idea'nın olmazsa olmazlarından biri bana kalırsa.

String Manipulation - Plugins | JetBrains
Case switching, sorting, filtering, incrementing, aligning to columns, grepping, escaping, encoding...
Verimliliğinizi 🚀 Arttıracak IntelliJ Idea plugin'leri | Part-1

- AceJump

Bu ufak ama etkili plugin ise caret'i editör üzerinde gördüğümüz herhangi bir yere "zıplatmamızı" sağlıyor.

AceJump - Plugins | JetBrains
AceJump allows you to quickly navigate the caret to any position visible in the editor.
Verimliliğinizi 🚀 Arttıracak IntelliJ Idea plugin'leri | Part-1

Herkese keyifli çalışmalar 😄

]]>
<![CDATA[Spring Data JPA | getOne() vs findById() ! Farkları nedir?]]>Spring Data JPA'da getOne() metodu da findById() metodu da bir objeyi getirmek için kullanılabilir. Ancak bu iki metodun çalışma prensibi farklıdır. Bu yazıda bu farklara değineceğim.


- getOne()

getOne() metodu

]]>
https://burakaykan.dev/getone-vs-findbyid-farklari-nedir/62798227b9a25e138aa691eaWed, 17 Jun 2020 20:38:12 GMT

Spring Data JPA'da getOne() metodu da findById() metodu da bir objeyi getirmek için kullanılabilir. Ancak bu iki metodun çalışma prensibi farklıdır. Bu yazıda bu farklara değineceğim.


- getOne()

getOne() metodu verilen id'ye ait objenin referansını döner. Bu metod içeride EntityManager.getReference() metodunu çağırır. Dökümanda belirtildiği gibi bu metod her zaman database'e gitmeden (lazy fetch) bir proxy döner. İstenen entity'nin database'de bulunmaması durumunda EntityNotFoundException fırlatır.

- findById()

Bu metod ise her çağırıldığında gerçekten database'e gider ve objeyi oradan getirir. Bu EAGER yüklenen işlemdir bu sebeple eğer getirmeye çalıştığımız obje DB'de yoksa null dönecektir.


Hangisini seçmeliyiz ?

Bu iki metodun arasındaki temel fark performans ile ilgili, Lazy Load olan getOne() JVM'den database'e gitmediği için performans olarak findById()'den daha iyidir.

İki metodu da kullanmak için uygun durumlar var. Örneğin objeyi getirip başka bir obje ile ilişki kurmasını sağlamak istediğimizde (OneToOne ya da ManyToOne). Ancak örneğin çağırdığımız objenin içerisinde bulunan başka bir objeye erişmeye çalıştığımızda hata alacağız bu gibi durumlarda findById() metodunu kullanmak daha iyi olacaktır.

findById kullandığımızda

    @PostMapping("/findById/{id}")
    public void findByIdCreate(@PathVariable Long id) {
        Employee employee = new Employee();
        employee.setName("MyEmployee");
        Instant start = Instant.now();
        Department department = departmentRepository.findById(id).get();
        Instant end = Instant.now();
        System.out.println(Duration.between(start, end));
        employee.setDepartment(department);
        employeeRepository.save(employee);
    }

insert yapmadan önce select sorgusu ile Departmanı getiriyoruz arkasından insert metodu 0.004S'de çalışıyor.

Hibernate: select department0_.id as id1_0_0_, department0_.name as name2_0_0_ from Department department0_ where department0_.id=?
PT0.004S
Hibernate: insert into Employee (department_id, name) values (?, ?)

getOne kullandığımızda

    @PostMapping("/getOne/{id}")
    public void getOneCreate(@PathVariable Long id) {
        Employee employee = new Employee();
        employee.setName("MyEmployee");
        Instant start = Instant.now();
        Department department = departmentRepository.getOne(id);
        Instant end = Instant.now();
        System.out.println(Duration.between(start, end));
        employee.setDepartment(department);
        employeeRepository.save(employee);
    }

ise Departman'ın referansını getirdiği için yani aslında database'e gitmediğimiz için işlem çok daha hızlı gerçekleşir.

PT0.002S
Hibernate: insert into Employee (department_id, name) values (?, ?)
getOne() findById()
Lazy Load ile hedefin referansını getirir Verilen id'yi gerçekten getirir (referans değil)
Objenin propert'ilerine erişmek gerekmediğinde oldukça kullanışlı Obje tamamen getirildiği için tüm özelliklerine erişilebilir
Objeye erişmek gerektiğinde obje DB'de yoksa EntityNotFoundException hatası fırlatır Eğer obje DB'de kayıtlı değilse null döner
Daha iyi performans İlave bir DB sorgusu gereklidir
Spring Data JPA | getOne() vs findById() ! Farkları nedir?

Java Persistence with Spring Data and Hibernate

Master Java persistence using the industry-leading tools Spring Data and Hibernate.

Hemen Al

Kaynak - Github Proje

]]>
<![CDATA[Java Validation Annotation'ları]]>https://burakaykan.dev/java-validation-annotationlari/62798227b9a25e138aa691e4Mon, 27 Jan 2020 20:24:23 GMT

Spring-Boot uygulamalarında modellerimizi oluştururken validasyon yapabileceğimiz kullanışlı birkaç kütüphane mevcut bu yazıda bunlardan birinden ve kullanabileceğimiz Annotation'lardan bazılarından söz edeceğim. Java Bean'lerinin doğrulanmasında standart framework olarak kullanılan JSR 380'den faydalanacağız.

Kullanıcıdan alacağımız input'lara validasyon uygulamak oldukça temel bir işlem. Bu inputlara doğrulama yapmak bize büyük kolaylık sağlayacaktır.

JSR 380

JSR 380 Bean Validasyonu için bize Java API'si sağlar. Bu versiyon Java 8 ve üzerinde kullanabileceğimiz Optional ve LocalDate'i de destekleyen Annotationlara sahiptir. JSR 380 hakkında daha fazla bilgi almak için bu adrese göz atabilirsiniz.

Dependency

Bu özellikleri kullanmak için dependency'lerinize aşağıdaki dependency'yi eklemeniz yeterli olacaktır.

<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>2.0.0.Final</version>
</dependency>

Gelelim Kullanımına

Java Validation Annotation'ları
@Annotation'ların Kullanımı
    @NotNull
    @NotEmpty
    private String username;

@NotNull : Bu annotation'u alan property'nin null olmamasını sağlar, property null olarak set edilmeye çalışıldığında buna engel olacaktır.

@NotEmpty : Özelliğin boş(empty) veya null olmadığını doğrular; String, Collection, Map veya Array'lere uygulanabilir.

    @NotBlank
    private String name;

@NotBlank : Yalnızca text alanlara uygulanabilir ve özelliğin null olmasını ve whitespace olmasını engeller.

    @AssertTrue
    private boolean itsTrue;

    @AssertFalse
    private boolean itsFalse;

@AssertTrue : Bu annotation'a sahip olan özelliğin true değere olduğunu doğrular.

@AssertFalse : Bu annotation'a sahip olan özelliğin false değere olduğunu doğrular.

    @Email
    private String email;

@Email : Bu annotation'a sahip olan özelliğin geçerli bir e-posta formatına sahip olduğunu doğrular.

    @Min(18)
    @Max(99)
    private int age;

@Min - @Max : Bu annotationlar property'nin minimum değerden küçük, maksimum değerden büyük olmamasını sağlar.

    @Positive
    private int positive;

    @PositiveOrZero
    private int positiveOrZero;

    @Negative
    private int negative;

    @NegativeOrZero
    private double negativeOrZero;

@Positive : Nümerik değerlere uygulanabilir değerin pozitif olmasını zorunlu kılar.

@PositiveOrZero : Nümerik değerlere uygulanabilir değerin pozitif ya da sıfır olmasını zorunlu kılar.

@Negative : Nümerik değerlere uygulanabilir değerin negatif olmasını zorunlu kılar.

@NegativeOrZero : Nümerik değerlere uygulanabilir değerin negatif ya da sıfır olmasını zorunlu kılar.

    @Past
    private LocalDateTime pastDate;

    @PastOrPresent
    private LocalDateTime pastOrPresentDate;

    @Future
    private LocalDateTime futureDate;

    @FutureOrPresent
    private LocalDateTime futureOrPresentDate;

@Past : Tarih alanlarına uygulanabilir değerin geçmiş bir tarih olmasını zorunlu kılar. Java 8'de gelen Tarih tiplerine de uygulanabilir.

@PastOrPresent : Tarih alanlarına uygulanabilir değerin geçmiş bir tarih ya da şimdi olmasını zorunlu kılar. Java 8'de gelen Tarih tiplerine de uygulanabilir.

@Future : Tarih alanlarına uygulanabilir değerin gelecek bir tarih olmasını zorunlu kılar. Java 8'de gelen Tarih tiplerine de uygulanabilir.

@FutureOrPresent : Tarih alanlarına uygulanabilir değerin gelecek bir tarih ya da şimdi olmasını zorunlu kılar. Java 8'de gelen Tarih tiplerine de uygulanabilir.

Annotation'lar Collection elemanlarına da uygulanabilir

List<@NotBlank String> preferences;

Annotation'lar için mesaj belirleme

    @Email(message = "Email alanı email formatına uymalıdır")
    private String email;

Annotation'un içine message set edilerek gösterilecek mesaj belirlenebilir.

Sonuç

Örnek olarak yazdığım Spring-Boot uygulamasının kodlarını GitHub sayfamda bulabilirsiniz. Yorumlara aklınıza takılanları yazabilirsiniz.

Keyifli kodlamalar :)
]]>