<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Fehmi Velioglu</title>
    <description>The latest articles on DEV Community by Fehmi Velioglu (@fehmivelioglu).</description>
    <link>https://dev.to/fehmivelioglu</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2467705%2Fb4b0185d-c865-4b7d-85da-2e6088407adb.png</url>
      <title>DEV Community: Fehmi Velioglu</title>
      <link>https://dev.to/fehmivelioglu</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/fehmivelioglu"/>
    <language>en</language>
    <item>
      <title>Warning: `flutter` on your path resolves to</title>
      <dc:creator>Fehmi Velioglu</dc:creator>
      <pubDate>Thu, 05 Dec 2024 12:23:03 +0000</pubDate>
      <link>https://dev.to/fehmivelioglu/warning-flutter-on-your-path-resolves-to-35j2</link>
      <guid>https://dev.to/fehmivelioglu/warning-flutter-on-your-path-resolves-to-35j2</guid>
      <description>&lt;p&gt;Warning: &lt;code&gt;flutter&lt;/code&gt; on your path resolves to /Users/***/developments/flutter/bin/flutter, which is not inside your current Flutter SDK checkout at /users/***/developments/flutter. Consider adding /users/***/developments/flutter/bin to the front of your path.&lt;/p&gt;

&lt;p&gt;It happens because of case sensitive. You can check like that&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;which flutter&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If result is like that /users/***/developments/flutter/bin/flutter”&lt;/p&gt;

&lt;p&gt;export path like that&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;export PATH=/Users/***/developments/flutter/bin:$PATH&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>flutter</category>
    </item>
    <item>
      <title>SonarQube — PHP</title>
      <dc:creator>Fehmi Velioglu</dc:creator>
      <pubDate>Thu, 05 Dec 2024 12:15:41 +0000</pubDate>
      <link>https://dev.to/fehmivelioglu/sonarqube-php-je3</link>
      <guid>https://dev.to/fehmivelioglu/sonarqube-php-je3</guid>
      <description>&lt;p&gt;SonarQube is a tool that analyzes codes. It checks bugs, security vulnerabilities, solid principles etc. in the code.&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
      &lt;div class="c-embed__cover"&gt;
        &lt;a href="https://www.sonarsource.com/products/sonarqube/downloads/" class="c-link s:max-w-50 align-middle" rel="noopener noreferrer"&gt;
          &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets-eu-01.kc-usercontent.com%3A443%2Ff42196a6-70a1-01d0-99f1-43134f12a58b%2F85b81454-7b7d-4a5b-aa0a-ccfb58055bf9%2Fmeta-tag-sonar.png" height="418" class="m-0" width="800"&gt;
        &lt;/a&gt;
      &lt;/div&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://www.sonarsource.com/products/sonarqube/downloads/" rel="noopener noreferrer" class="c-link"&gt;
          Download SonarQube | Sonar
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;p class="truncate-at-3"&gt;
          Get the latest version of SonarQube, the leading product for code quality and security, from the official download page.
        &lt;/p&gt;
      &lt;div class="color-secondary fs-s flex items-center"&gt;
        sonarsource.com
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;&lt;em&gt;SonarScanner&lt;/em&gt;&lt;/strong&gt; require for scan codes.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm install sonarqube-scanner -g&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Extra: &lt;strong&gt;&lt;em&gt;Sonarlint&lt;/em&gt;&lt;/strong&gt; is linter solution for vscode. You can download from vscode extensions.&lt;/p&gt;




&lt;p&gt;After downloading, run sonarqube from terminal.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;/Applications/sonarqube-9.9.0.65466/bin/macosx-universal-64/sonar.sh console&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The first time I tried, I got this error:&lt;/p&gt;

&lt;p&gt;Exception in thread "main" java.lang.UnsupportedOperationException: The Security Manager is deprecated and will be removed in a future release&lt;/p&gt;

&lt;p&gt;This error caoused by the java version. If your version java 18, you can downgrade to 17. Download 17 and run this command.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;export JAVA_HOME=$(/usr/libexec/java_home -v 17)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Now we can reach it from &lt;a href="http://localhost:9000" rel="noopener noreferrer"&gt;http://localhost:9000&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Default credentials are username:admin , password:admin&lt;/p&gt;

&lt;p&gt;Create a new project from the Sonarqube panel. Choose manuel and specify that will run from local. After that create token and select other for PHP and macOS.&lt;/p&gt;

&lt;p&gt;We should get a result like this.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fso883cuwuw612ox1ew13.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fso883cuwuw612ox1ew13.png" alt="SonarQube" width="800" height="383"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Copy scanner script and run it from code local terminal.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F02w0rp6wzu4mxjhzsq93.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F02w0rp6wzu4mxjhzsq93.png" alt="SonarQube" width="572" height="202"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fer4fir090jgk1pcwbrzx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fer4fir090jgk1pcwbrzx.png" alt="SonarQube" width="800" height="394"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxgx8dt1xcyd73co0j370.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxgx8dt1xcyd73co0j370.png" alt="SonarQube" width="800" height="394"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>sonarqube</category>
      <category>php</category>
    </item>
    <item>
      <title>Solid Prensipleri</title>
      <dc:creator>Fehmi Velioglu</dc:creator>
      <pubDate>Thu, 05 Dec 2024 12:08:18 +0000</pubDate>
      <link>https://dev.to/fehmivelioglu/solid-prensipleri-5n8</link>
      <guid>https://dev.to/fehmivelioglu/solid-prensipleri-5n8</guid>
      <description>&lt;p&gt;Kod yazmayı öğrendikten sonra bir önemli konuda nasıl kod yazmak olduğudur. Her çalışan kod o kodu yazabileceğimiz anlamına gelmiyor. Kod yazmanın da prensipleri bulunuyor.&lt;/p&gt;

&lt;p&gt;Yazdığımız kodun okunabilirliği, zamanla yapılacak değişikliklere kolay entegre olması ve sonradan eklenen kodun projenin yapısını en az etkileyecek şekilde olması gerekir.&lt;/p&gt;

&lt;p&gt;Solid prensiplerinin 5 maddesi de yazılımcıların bu nedenlerden dolayı uyması gereken prensiplerdir.&lt;/p&gt;

&lt;p&gt;S =&amp;gt; Single-Responsibility Principle(Tek Sorumluluk Prensibi)&lt;/p&gt;

&lt;p&gt;Her sınıfın veya metodun tek bir sorumluluğu olmalıdır. Kodun okunabilirliğini sağlar ve işlem karmaşasının önüne geçer.&lt;/p&gt;

&lt;p&gt;O =&amp;gt; Open-Closed Principle(Açık Kapalı Prensibi)&lt;/p&gt;

&lt;p&gt;Sınıflar değişikliğe kapalı ancak gelişime açık olmalıdır. Komplike bir projede bir sınıfta yapılan değişikliğin neleri etkileyebileceği öngörülmesi zordur.&lt;/p&gt;

&lt;p&gt;L =&amp;gt; Liskov Substitution Principle ( Liskov’un Yerine geçme Prensibi)&lt;/p&gt;

&lt;p&gt;Türetilen sınıflar, türeyen sınıfların tüm özelliklerini kullanmak zorundadır. Eğer kullanmaz ise gereksiz kod yoğunluğu olur.&lt;/p&gt;

&lt;p&gt;I =&amp;gt; Interface Segregation Principle ( Arayüz Ayrımı Prensibi)&lt;/p&gt;

&lt;p&gt;Sorumlulukların hepsini tek bir arayüze toplamak yerine daha özelleştirilmiş birden fazla arayüz oluşturmalıyız.&lt;/p&gt;

&lt;p&gt;D =&amp;gt; Dependency Inversion Principle ( Bağımlılıkların Terslenmesi Prensibi)&lt;/p&gt;

&lt;p&gt;Katmanlı mimarilerde üst seviye modüller alt seviyedeki modüllere doğrudan bağımlı olmamalıdır.&lt;/p&gt;

&lt;p&gt;Alt sınıflarda yapılan değişiklikler üst sınıfları etkilememelidir.&lt;/p&gt;

</description>
      <category>solidprinciples</category>
    </item>
    <item>
      <title>Singleton Theory - PHP</title>
      <dc:creator>Fehmi Velioglu</dc:creator>
      <pubDate>Thu, 05 Dec 2024 12:05:04 +0000</pubDate>
      <link>https://dev.to/fehmivelioglu/singleton-theory-php-3gcp</link>
      <guid>https://dev.to/fehmivelioglu/singleton-theory-php-3gcp</guid>
      <description>&lt;p&gt;Singleton design pattern, uygulamanın çalışma anında yalnızca 1 nesne(instance) yaratılmasını sağlamasıdır. &lt;br&gt;
Uygulamada aynı objeyi birçok kez kullanmak gerekiyor ise her seferinde tekrar tekrar instance oluşturmasını engelleyebiliriz. Bunu singleton design pattern ile static kullanarak sağlayabiliriz.&lt;/p&gt;

&lt;p&gt;Eğer nesne daha önceden oluşturulmuş ise o nesne üzerinden, eğer oluşturulmamış ise yeni bir nesne oluşturarak yaşamına devam eder.&lt;/p&gt;

&lt;p&gt;In memory, RAM üzerinden çalışır.&lt;/p&gt;

&lt;p&gt;Private constructor yapılması önerilir.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class DbController
{
    private static $instance;
    public static $db;

    private function __construct()
    {
        $this-&amp;gt;db = new PDO("mysql:host=localhost;dbname=***;", "root", "");
    }

    public static function getInstance()
    {
        if (!isset(self::$instance)) {
            self::$instance = new DbController;
        }
        return self::$instance;
    }

    public function dbConnection()
    {
        if (!isset(self::$db)) {
            self::$db = new PDO("mysql:host=localhost;dbname=***;", "root", "");
        }
        return self::$db;
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$cont1 = DbController::getInstance();
$cont2 = DbController::getInstance();
var_dump($cont1);
var_dump($cont2);
if ($cont1 === $cont2) echo 'Same';
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>php</category>
      <category>designpatterns</category>
      <category>singleton</category>
    </item>
  </channel>
</rss>
