<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>hknsoft</title>
	<atom:link href="https://hknsoft.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://hknsoft.com/</link>
	<description>Android, Yazılım, Script</description>
	<lastBuildDate>Tue, 25 Jun 2024 12:24:17 +0000</lastBuildDate>
	<language>tr</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://hknsoft.com/wp-content/uploads/2020/05/cropped-icon-hknsoft-150x150.png</url>
	<title>hknsoft</title>
	<link>https://hknsoft.com/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Akademik Teşvik Puanı Hesaplama Programı (Android)</title>
		<link>https://hknsoft.com/akademik-tesvik-puani-hesaplama-programi-android/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 25 Jun 2024 12:24:16 +0000</pubDate>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[akademik teşvik 2024]]></category>
		<category><![CDATA[akademik teşvik hesaplama]]></category>
		<category><![CDATA[akademik teşvik hesaplama aracı]]></category>
		<category><![CDATA[akademik teşvik hesaplama robotu]]></category>
		<category><![CDATA[akademik teşvik ödeneği hesaplama]]></category>
		<guid isPermaLink="false">https://hknsoft.com/?p=1406</guid>

					<description><![CDATA[<p>Akademik teşvik puanı ve ödeneği hesaplama programı ile yeni yönetmeliğe uygun hesaplamalar yapabilirsiniz. Akademik teşvik ödeneği almaya hak kazanıp kazanamayacağınızı gösteren yardımcı bir programdır. Profesör, <a class="mh-excerpt-more" href="https://hknsoft.com/akademik-tesvik-puani-hesaplama-programi-android/" title="Akademik Teşvik Puanı Hesaplama Programı (Android)">[...]</a></p>
<p>The post <a href="https://hknsoft.com/akademik-tesvik-puani-hesaplama-programi-android/">Akademik Teşvik Puanı Hesaplama Programı (Android)</a> appeared first on <a href="https://hknsoft.com">hknsoft</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Akademik teşvik puanı ve ödeneği hesaplama programı ile yeni yönetmeliğe uygun hesaplamalar yapabilirsiniz.</p>



<p class="wp-block-paragraph">Akademik teşvik ödeneği almaya hak kazanıp kazanamayacağınızı gösteren yardımcı bir programdır. Profesör, Doçent, Doktor Öğretim Üyesi, Araştırma Görevlisi ve Öğretim Görevlisi ünvanları için hesaplama yapabilirsiniz. Katsayılar sürekli güncel tutulacaktır.</p>



<p class="has-light-green-cyan-background-color has-background wp-block-paragraph">Kayıt olan her kullanıcıya <strong>3 adet</strong> ücretsiz hesaplama hakkı tanınır. Kullanmaya devam etmek isterseniz <strong>satın alabilirsiniz.</strong> Ayrıca program internet bağlantısı gerektirmektedir.</p>



<p class="wp-block-paragraph">Demo:</p>



<figure class="wp-block-embed aligncenter is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="Akademik Teşvik Puanı ve Ödeneği Hesaplama Programı (2024 Demo)" width="678" height="381" src="https://www.youtube.com/embed/2uAW09cleaw?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p class="wp-block-paragraph">Ayrıca kaydetme özelliği ile uygulamaya her girdiğinizde tekrardan aynı verileri girmenize gerek kalmaz. Programı Google Play üzerinden Android cihazlarınıza indirip kullanabilirsiniz.</p>



<h2 class="wp-block-heading has-text-align-center"><a href="https://play.google.com/store/apps/details?id=com.hknsoft.akademiktesvik" target="_blank" rel="noreferrer noopener nofollow"><strong>Google Play</strong></a></h2>
<p>The post <a href="https://hknsoft.com/akademik-tesvik-puani-hesaplama-programi-android/">Akademik Teşvik Puanı Hesaplama Programı (Android)</a> appeared first on <a href="https://hknsoft.com">hknsoft</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Android Custom View Component Oluşturma</title>
		<link>https://hknsoft.com/android-custom-view-component-olusturma/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Sun, 19 May 2024 22:06:25 +0000</pubDate>
				<category><![CDATA[Android Studio]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[android custom view]]></category>
		<category><![CDATA[android custom view component]]></category>
		<category><![CDATA[android custom view component oluşturma]]></category>
		<category><![CDATA[android java custom view]]></category>
		<category><![CDATA[custom view component]]></category>
		<guid isPermaLink="false">https://hknsoft.com/?p=1387</guid>

					<description><![CDATA[<p>Bu yazıda Android uygulama geliştirirken kullandığımız viewlara benzer kendi custom view componentimizi yazmayı anlatacağım. Bu konu hakkında Türkçe kaynak neredeyse hiç yok. Olanlar ise onDraw() <a class="mh-excerpt-more" href="https://hknsoft.com/android-custom-view-component-olusturma/" title="Android Custom View Component Oluşturma">[...]</a></p>
<p>The post <a href="https://hknsoft.com/android-custom-view-component-olusturma/">Android Custom View Component Oluşturma</a> appeared first on <a href="https://hknsoft.com">hknsoft</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Bu yazıda <a href="https://hknsoft.com/kategori/android-studio/" target="_blank" rel="noreferrer noopener"><strong>Android</strong></a> uygulama geliştirirken kullandığımız viewlara benzer kendi custom view componentimizi yazmayı anlatacağım. Bu konu hakkında Türkçe kaynak neredeyse hiç yok. Olanlar ise onDraw() fonksiyonu içeren yolu gösteriyorlar. Eğer view içerisine şekil çizmeyecekseniz bu yol gereksiz. Detaylı bir şekilde okuyun kafanızda oturacaktır.</p>



<h2 class="wp-block-heading">XML Tasarım Çalışma Mantığı</h2>



<p class="wp-block-paragraph">XML tasarımında kullandığımız her view yeni bir nesne aslında. Biz tasarımda <strong>android:id=&#8221;textview&#8221;</strong> ya da <strong>android:layout_width=&#8221;match_parent&#8221;</strong> gibi onlarca parametreyi bu classların <strong>constructor</strong> fonksiyonlarına gönderiyoruz. Fonksiyonlar içerisinde de bu parametreler parse edilip kullanılıyor.</p>



<h2 class="wp-block-heading">Custom View Parametre Tanımlama</h2>



<p class="wp-block-paragraph">Projenizde <strong>res/values</strong> klasörü altına <strong>attrs.xml</strong> isimli bir dosya oluşturun. Bu dosya içerisine kendi viewimiz için gereken <strong>parametreleri</strong> aşağıdaki gibi tanımlayacağız. Formatlara intellisense yardımıyla bakabilirsiniz.</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">&lt;attr name="customText" format="reference" /&gt;
&lt;attr name="customTextSize" format="dimension" /&gt;</pre></div>



<p class="wp-block-paragraph">Yukarıda parametreleri tanımladıktan sonra aşağıdaki gibi name kısmına kendi <strong>class ismimizi</strong> yazarak componentimizin bu parametreleri alabileceğini belirtiyoruz.</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">&lt;declare-styleable name="CustomButton"&gt;
	&lt;attr name="customText" /&gt;
	&lt;attr name="customTextSize" /&gt;
&lt;/declare-styleable&gt;</pre></div>



<h2 class="wp-block-heading">Custom View Class Oluşturma</h2>



<p class="wp-block-paragraph">Projenizde bir Java classı oluşturun. Şu şekilde: <strong>CustomButton.java</strong>. View özelliklerini kullanabilmek için kendi sınıfımızı <strong>LinearLayout</strong> sınıfından türetiyoruz. Basit olması açısından LinearLayout&#8217;u seçtim. Buraya takılmayın. Amacımız Android&#8217;in hazır olarak verdiği View sınıfını LinearLayout üzerinden alıp kullanmak.</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">public final class CustomButton extends LinearLayout {
	...
}</pre></div>



<p class="wp-block-paragraph"><strong>Üç adet constructor</strong> oluşturmamız gerekiyor. Bu constructor fonksiyonlar class üzerinden <strong>yeni bir nesne</strong> oluştuğunda çalışacak. <strong>init()</strong>, <strong>initViews()</strong> ve <strong>parseAttributes()</strong> adında üç adet fonksiyon oluşturun. parseAttributes() adında anlıyacağınız gibi viewe gönderdiğimiz <strong>parametreli çekmek</strong> için. init() fonksiyonu ise viewi <strong>render</strong> etmeye yarıyor. initViews() ise <strong>inflate</strong> ettiğimiz xml dosyasındaki nesneleri tanımladığımız yer.</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">public final class CustomButton extends LinearLayout {
    public CustomButton(@NonNull Context context) {
        super(context);
    }

    public CustomButton(@NonNull Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public CustomButton(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
}</pre></div>



<p class="wp-block-paragraph">Parametreleri çekerken herhangi bir <strong>crash yememek</strong> için try-catch içerisinde kullanın. Kullanmazsanız kesinlikle hata alacaksınız.</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">public final class CustomButton extends LinearLayout {
    // Attributes
    private String customText;
    private int customTextSize = 999;

    // Views
    private TextView customButtonTvText;

    public CustomButton(@NonNull Context context) {
        super(context);
        init(context);
    }

    public CustomButton(@NonNull Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        parseAttributes(context, attrs);
        init(context);
    }

    public CustomButton(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        parseAttributes(context, attrs);
        init(context);
    }

    private void parseAttributes(@NonNull Context context, @Nullable AttributeSet attrs) {
        TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.CustomButton);

        try {
            if (typedArray.hasValue(R.styleable.CustomButton_text))
                customText = typedArray.getString(R.styleable.CustomButton_customText);
            if (typedArray.hasValue(R.styleable.CustomButton_textSize))
                customTextSize = typedArray.getDimensionPixelSize(R.styleable.CustomButton_customTextSize, 0);
        } catch (Throwable t) {
            t.printStackTrace();
        } finally {
            try {
                typedArray.recycle();
            } catch (Throwable t) {
                t.printStackTrace();
            }
        }
    }

    private void initViews() {
        customButtonTvText = findViewById(R.id.custom_button_tv_text);
    }

    private void init(@NonNull Context context) {
        inflate(context, R.layout.button_custom, CustomButton.this);
        initViews();

        if (customText != null) customButtonTvText.setText(customText);
        if (customTextSize != 999) customButtonTvText.setTextSize(TypedValue.COMPLEX_UNIT_PX, customTextSize);
    }

    public void setText(CharSequence text) {
        customButtonTvText.setText(text);
    }
}</pre></div>



<p class="wp-block-paragraph">En önemli olan yer burası. Gördüğünüz gibi <strong>inflate</strong> kullanıyoruz. Daha önceden <strong>res/layout</strong> klasörü altında oluşturduğumuz <strong>button_custom.xml</strong> tasarımını kopyalamış oluyoruz aslında.</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;merge xmlns:android="http://schemas.android.com/apk/res/android"&gt;

    &lt;TextView
        android:id="@+id/custom_button_tv_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ellipsize="end"
        android:gravity="center"
        android:singleLine="true"
        android:textAllCaps="true"
        android:textColor="@color/white"
        android:textSize="18sp" /&gt;
&lt;/merge&gt;</pre></div>



<p class="wp-block-paragraph">İşte bu kadar. Çok basit bir şekilde kendi custom view componentimizi oluşturduk. Artık projenizin her yerinde kullanabilirsiniz.</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">&lt;com.example.app.CustomButton
	android:layout_width="match_parent"
	android:layout_height="wrap_content"
	android:layout_margin="12dp"
	app:customText="Tamam"
	app:customTextSize="18sp" /&gt;</pre></div>



<h2 class="wp-block-heading has-text-align-center"><strong><a href="https://gist.github.com/fovelas/56285b76d9035ba55bacd2b20edbf613" target="_blank" rel="noreferrer noopener nofollow">GitHub</a></strong></h2>
<p>The post <a href="https://hknsoft.com/android-custom-view-component-olusturma/">Android Custom View Component Oluşturma</a> appeared first on <a href="https://hknsoft.com">hknsoft</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>E-Okul Dönem Ortalaması Hesaplama Programı</title>
		<link>https://hknsoft.com/e-okul-donem-ortalamasi-hesaplama-programi/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Sun, 17 Dec 2023 09:39:37 +0000</pubDate>
				<category><![CDATA[Tüm Yazılar]]></category>
		<category><![CDATA[e-okul dönem ortalaması]]></category>
		<category><![CDATA[e-okul dönem ortalaması hesaplama]]></category>
		<category><![CDATA[e-okul dönem ortalaması hesaplama programı]]></category>
		<category><![CDATA[e-okul öğrenci dönem ortalaması]]></category>
		<category><![CDATA[e-okul ortalama hesaplama]]></category>
		<category><![CDATA[öğretmen dönem ortalaması hesaplama programı]]></category>
		<guid isPermaLink="false">https://hknsoft.com/?p=1350</guid>

					<description><![CDATA[<p>E-Okul Dönem Ortalaması Hesaplama Programı, öğretmenler için tasarlanmış bir yardımcı araçtır. Öğrencilerin dönem ortalamasını teker teker hesaplamak yerine bu programı kullanabilirsiniz. Nasıl Kullanılır? Uyarı: Programın <a class="mh-excerpt-more" href="https://hknsoft.com/e-okul-donem-ortalamasi-hesaplama-programi/" title="E-Okul Dönem Ortalaması Hesaplama Programı">[...]</a></p>
<p>The post <a href="https://hknsoft.com/e-okul-donem-ortalamasi-hesaplama-programi/">E-Okul Dönem Ortalaması Hesaplama Programı</a> appeared first on <a href="https://hknsoft.com">hknsoft</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">E-Okul Dönem Ortalaması Hesaplama Programı, öğretmenler için tasarlanmış bir yardımcı araçtır. Öğrencilerin dönem ortalamasını teker teker hesaplamak yerine bu programı kullanabilirsiniz.</p>



<h2 class="wp-block-heading">Nasıl Kullanılır?</h2>



<p class="has-white-color has-vivid-cyan-blue-background-color has-text-color has-background has-link-color wp-elements-889d8cbb1fe8b1e1b189e5880211c96e wp-block-paragraph">Uyarı: Programın hatasız çalışabilmesi için hiçbir sekmeye müdahale etmeyin!</p>



<p class="wp-block-paragraph">Program başlatılırken iki adet ekran açılır. Biri tarayıcı diğeri ise programın kendisi. Tüm işlemler açılan tarayıcı üzerinden yapılmaktadır. Eğer tarayıcı açılmıyorsa aşağıdaki ayarlar başlığına gidin.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img fetchpriority="high" decoding="async" width="916" height="682" src="https://hknsoft.com/wp-content/uploads/2023/12/e-okul-donem-ortalamasi-hesaplama-programi-arayuz.png" alt="E-Okul Dönem Ortalaması Hesaplama Programı" class="wp-image-1355" srcset="https://hknsoft.com/wp-content/uploads/2023/12/e-okul-donem-ortalamasi-hesaplama-programi-arayuz.png 916w, https://hknsoft.com/wp-content/uploads/2023/12/e-okul-donem-ortalamasi-hesaplama-programi-arayuz-300x223.png 300w, https://hknsoft.com/wp-content/uploads/2023/12/e-okul-donem-ortalamasi-hesaplama-programi-arayuz-150x112.png 150w, https://hknsoft.com/wp-content/uploads/2023/12/e-okul-donem-ortalamasi-hesaplama-programi-arayuz-768x572.png 768w, https://hknsoft.com/wp-content/uploads/2023/12/e-okul-donem-ortalamasi-hesaplama-programi-arayuz-80x60.png 80w" sizes="(max-width: 916px) 100vw, 916px" /></figure>
</div>


<p class="wp-block-paragraph">MEBBİS üzerinden giriş yaptıktan sonra E-Okul sitesine gidin. Daha sonra <strong>Ortaöğretim Kurum İşlemleri -&gt; Not İşlemleri -&gt; Ders Notu Girişi</strong> sayfasına gidin. Sınıf, şube ve ders alanlarını doldurduktan sonra <strong>Listele</strong> butonuna tıklayın.</p>



<p class="wp-block-paragraph">Yapmanız gerekenler bu kadar. Gerisini program halledecektir. Program üzerinden <strong>Öğrencileri Getir</strong> tıklayın. Öğrenciler aşağıdaki gibi listelenecektir. Artık dönem ortalamasını hesaplamak istediğiniz öğreniciyi seçebilirsiniz.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="916" height="682" src="https://hknsoft.com/wp-content/uploads/2023/12/e-okul-sinif-listesi.png" alt="E-Okul Dönem Ortalaması Hesaplama Programı" class="wp-image-1356" srcset="https://hknsoft.com/wp-content/uploads/2023/12/e-okul-sinif-listesi.png 916w, https://hknsoft.com/wp-content/uploads/2023/12/e-okul-sinif-listesi-300x223.png 300w, https://hknsoft.com/wp-content/uploads/2023/12/e-okul-sinif-listesi-150x112.png 150w, https://hknsoft.com/wp-content/uploads/2023/12/e-okul-sinif-listesi-768x572.png 768w, https://hknsoft.com/wp-content/uploads/2023/12/e-okul-sinif-listesi-80x60.png 80w" sizes="(max-width: 916px) 100vw, 916px" /></figure>
</div>


<p class="wp-block-paragraph">Seçilen öğrencinin <strong>dersleri, haftalık saatleri ve dönem notları</strong> tabloya şekildeki gibi yüklenecektir. Program, notları girilen derslere göre not ortalamalarını hesaplar. Seçmeli derslerin <strong>haftalık ders saati değişkenlik gösterdiğinden</strong> dolayı seçim öğretmene bırakıldı. Seçmeli derslerin yanındaki alandan haftalık ders saatini seçebilirsiniz. Bilgilendirme alanı size yardımcı olacaktır.</p>



<p class="wp-block-paragraph">Yeni bir sınıf listesi çekmek istiyorsanız <strong>Listeyi Temizle</strong> tıklayın. Ardından aynı adımları takip edin.</p>



<h2 class="wp-block-heading">Ayarlar</h2>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="446" height="261" src="https://hknsoft.com/wp-content/uploads/2023/12/e-okul-donem-ortalamasi-hesaplama-programi-ayarlar.png" alt="E-Okul Dönem Ortalaması Hesaplama Programı" class="wp-image-1357" srcset="https://hknsoft.com/wp-content/uploads/2023/12/e-okul-donem-ortalamasi-hesaplama-programi-ayarlar.png 446w, https://hknsoft.com/wp-content/uploads/2023/12/e-okul-donem-ortalamasi-hesaplama-programi-ayarlar-300x176.png 300w, https://hknsoft.com/wp-content/uploads/2023/12/e-okul-donem-ortalamasi-hesaplama-programi-ayarlar-150x88.png 150w" sizes="auto, (max-width: 446px) 100vw, 446px" /></figure>
</div>


<p class="wp-block-paragraph">Programın çalışabilmesi için bilgisayarınızda <strong>Chrome tabanlı</strong> tarayıcı yüklü olması gerekmektedir. İlk açılışta program sizin yerinize <strong>otomatik</strong> olarak yüklü olan bir tarayıcıyı seçer. Eğer bulamazsa program çalışmayacaktır. <strong>Ayarlar</strong> penceresinden <strong>Özel</strong> seçeneğini işaretleyip el ile <strong>.exe</strong> dosyasının yolunu girebilirsiniz.</p>



<p class="wp-block-paragraph">An itibariyle tüm dersler eklenmemiştir. İlerleyen güncellemeler ile ders sayısı artacaktır.</p>



<h2 class="wp-block-heading has-text-align-center"><a href="https://drive.google.com/file/d/12nIA3vzMrxLQMr4ApXZf49Ir3uXiyBvL/view?usp=sharing" target="_blank" rel="noreferrer noopener nofollow" class="broken_link">İndir (Windows)</a></h2>



<h5 class="wp-block-heading has-text-align-center">Şifre: hknsoft1234</h5>
<p>The post <a href="https://hknsoft.com/e-okul-donem-ortalamasi-hesaplama-programi/">E-Okul Dönem Ortalaması Hesaplama Programı</a> appeared first on <a href="https://hknsoft.com">hknsoft</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Node.js Listener Kullanımı</title>
		<link>https://hknsoft.com/node-js-listener-kullanimi/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Sun, 28 May 2023 22:57:04 +0000</pubDate>
				<category><![CDATA[Node.js]]></category>
		<category><![CDATA[javascript listener]]></category>
		<category><![CDATA[node.js listener]]></category>
		<category><![CDATA[node.js listener callback]]></category>
		<category><![CDATA[node.js listener kullanımı]]></category>
		<guid isPermaLink="false">https://hknsoft.com/?p=1305</guid>

					<description><![CDATA[<p>Oluşturduğumuz nesne içerisindeki olayları takip edebilmek için listenerlara ihtiyaç duyuyoruz. Örneğin, nesne içerisinde bir interval tanımladınız. Saniyede bir bu interval içindeki kod çalışıyor. Buraya kadar <a class="mh-excerpt-more" href="https://hknsoft.com/node-js-listener-kullanimi/" title="Node.js Listener Kullanımı">[...]</a></p>
<p>The post <a href="https://hknsoft.com/node-js-listener-kullanimi/">Node.js Listener Kullanımı</a> appeared first on <a href="https://hknsoft.com">hknsoft</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Oluşturduğumuz nesne içerisindeki olayları takip edebilmek için listenerlara ihtiyaç duyuyoruz.</p>



<p class="wp-block-paragraph">Örneğin, nesne içerisinde bir interval tanımladınız. Saniyede bir bu interval içindeki kod çalışıyor. Buraya kadar bir sorun yok. Fakat bu interval içerisinde <strong>dışarıdan bir kod çalıştırmak</strong> istiyorsunuz. İşte bunu yapabilmek için listener kullanmalıyız.</p>



<h2 class="wp-block-heading">Class Oluşturma</h2>



<p class="wp-block-paragraph">Öncelikle <strong>game.model.js</strong> adında bir dosya oluşturuyoruz.</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">class Game {
    // bu classtan bir nesne oluşturulduğu zaman listener varsayılan olarak null tanımlanıyor
    onTick = null;

    constructor(id, players, time) {
        this.id = id;
        this.players = players;
        this.time = time;
    }

    // oyunu başlatıyoruz
    start() {
        var interval = setInterval(() =&gt; {
            if (this.time &gt; 0) {
                this.time -= 1;
            }

            // burada listenerı tetikliyoruz
            // her bir saniyede bu listener tetiklenecek
            if (this.onTick != null) this.onTick();
        }, 1000);
    }

    // dışarıdan bu fonksiyonu kullanarak listener oluşturuyoruz
    setOnTickListener(l) {
        // bu kontrolü listener birden fazla kere tanımlanmasın diye koyuyoruz
        if (this.onTick != null) return;
        this.onTick = l;
    }
}

module.exports = Game;</pre></div>



<p class="wp-block-paragraph"><strong>setOnTickListener()</strong> fonksiyonu ile dışarıdan listener tanımlaması yapabileceğiz.</p>



<h2 class="wp-block-heading">Listener Kullanımı</h2>



<p class="wp-block-paragraph"><strong>app.js</strong> dosyasında öncelikle bir Game nesnesi oluşturuyoruz. Daha sonra aşağıda gördüğünüz gibi listener tanımlaması yapıyoruz.</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">// game.model.js dosyamızı çağırıyoruz
const Game = require('./game.model.js');

// yeni bir nesne oluşturuyoruz
var game = new Game('18815616', null, 30);

// bu nesneye özel bir listener oluşturuyoruz
game.setOnTickListener(() =&gt; {
    console.log('game time: ' + game.time);
});

game.start();</pre></div>



<p class="wp-block-paragraph">Artık interval içerisinde dışarıdan (farklı bir dosyadan) kodlar çalıştırabiliriz.</p>



<p class="wp-block-paragraph">app.js dosyasını çalıştırdığımız zaman <strong>konsolda</strong> aşağıdaki gibi bir çıktıyla karşılaşacağız.</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">game time: 29
game time: 28
game time: 27
game time: 26
game time: 25
game time: 24
game time: 23
game time: 22
game time: 21</pre></div>



<h2 class="wp-block-heading has-text-align-center"><a href="https://gist.github.com/fovelas/40890a6eb6fa257bc94e6d01d22b35cb" target="_blank" rel="noreferrer noopener nofollow"><strong>GitHub</strong></a></h2>
<p>The post <a href="https://hknsoft.com/node-js-listener-kullanimi/">Node.js Listener Kullanımı</a> appeared first on <a href="https://hknsoft.com">hknsoft</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Node.js ile MySQL Bağlantısı</title>
		<link>https://hknsoft.com/node-js-ile-mysql-baglantisi/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Sun, 28 May 2023 14:19:00 +0000</pubDate>
				<category><![CDATA[Node.js]]></category>
		<category><![CDATA[node js ile mysql veritabanına bağlanma]]></category>
		<category><![CDATA[node.js ile mysql]]></category>
		<category><![CDATA[node.js ile mysql bağlantısı]]></category>
		<category><![CDATA[node.js mysql sorgu çalıştırma]]></category>
		<guid isPermaLink="false">https://hknsoft.com/?p=1287</guid>

					<description><![CDATA[<p>Node.js ile MySQL bağlantısı yapabilmek için öncelikle projemize mysql kütüphanesini eklemeliyiz. Artık MySQL bağlantısı kurabiliriz. Not: Kod yazmaya başlamadan önce makinanızda MySQL&#8217;i çalıştırın. XAMPP ya <a class="mh-excerpt-more" href="https://hknsoft.com/node-js-ile-mysql-baglantisi/" title="Node.js ile MySQL Bağlantısı">[...]</a></p>
<p>The post <a href="https://hknsoft.com/node-js-ile-mysql-baglantisi/">Node.js ile MySQL Bağlantısı</a> appeared first on <a href="https://hknsoft.com">hknsoft</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Node.js ile MySQL bağlantısı yapabilmek için öncelikle projemize <a href="https://www.npmjs.com/package/mysql" target="_blank" rel="noreferrer noopener nofollow" class="broken_link"><strong>mysql</strong></a> kütüphanesini eklemeliyiz.</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">npm install mysql</pre></div>



<p class="wp-block-paragraph">Artık MySQL bağlantısı kurabiliriz.</p>



<p class="wp-block-paragraph"><strong>Not:</strong> Kod yazmaya başlamadan önce makinanızda MySQL&#8217;i çalıştırın. <a href="https://www.apachefriends.org/tr/index.html" target="_blank" rel="noreferrer noopener nofollow"><strong>XAMPP</strong></a> ya da WAMPP gibi yazılımları kullanabilirsiniz.</p>



<h2 class="wp-block-heading">Bağlantı Oluşturma</h2>



<p class="wp-block-paragraph"><strong>database.js</strong> adında bir dosya oluşturuyoruz.</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">const mysql = require('mysql');

// database ayarları
const db = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: 'password',
    database: 'database_name'
});

// yukarıdaki bilgilere göre database bağlanıyoruz
db.connect(function (err) {
    // eğer bir hata oluşursa programı durdurup hatayı konsola yazdıracak
    if (err) throw err;

    // başarılı bir şekilde bağlandığını konsola yazdırıyoruz
    console.log('connection successful');
});

// db objesini export ediyoruz ki bu dosyayı çağırdığımız yerde sorgular çalıştırabilelim
module.exports = db;</pre></div>



<h2 class="wp-block-heading">Sorgu Çalıştırma</h2>



<p class="wp-block-paragraph">Yukarıda oluşturduğumuz <strong>database.js</strong> dosyasını projemizin istediğimiz yerinde <strong>çağırarak</strong> sorgular çalıştırabiliriz.</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">// database dosyamızı çağırıyoruz
const db = require('./database.js');

// sorgu çalıştırıyoruz
db.query(`SELECT * FROM players WHERE id = '107861148515'`, (err, result) =&gt; {
    if (err) throw err;
    var row = result[0];

    if (result.length &gt; 0) {
        console.log(row);
    } else {
        console.log('player not found');
    }
});</pre></div>



<h2 class="wp-block-heading has-text-align-center"><a href="https://gist.github.com/fovelas/a50848c2bb2d0ddaeead94d3e43f74f3" target="_blank" rel="noreferrer noopener nofollow"><strong>GitHub</strong></a></h2>
<p>The post <a href="https://hknsoft.com/node-js-ile-mysql-baglantisi/">Node.js ile MySQL Bağlantısı</a> appeared first on <a href="https://hknsoft.com">hknsoft</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Android Buton Tıklama Efekti</title>
		<link>https://hknsoft.com/android-buton-tiklama-efekti/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Sun, 30 Apr 2023 15:34:45 +0000</pubDate>
				<category><![CDATA[Android Studio]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[android buton tıklama animasyonu]]></category>
		<category><![CDATA[android buton tıklama efekti]]></category>
		<category><![CDATA[android ripple effect]]></category>
		<category><![CDATA[android studio]]></category>
		<category><![CDATA[android studio ripple effect]]></category>
		<category><![CDATA[android tıklama efekti]]></category>
		<category><![CDATA[buton tıklama efekti]]></category>
		<guid isPermaLink="false">https://hknsoft.com/?p=1263</guid>

					<description><![CDATA[<p>Android uygulamalarda butona tıkladığımız zaman tıklayıp tıklamadığımız bazen anlaşılmıyor. Bu yüzden kullanıcı deneyimini arttırmak için butonlara tıklama efekti ekleyebiliriz. Bu yazıda aşağıdaki gibi tıklama efekti <a class="mh-excerpt-more" href="https://hknsoft.com/android-buton-tiklama-efekti/" title="Android Buton Tıklama Efekti">[...]</a></p>
<p>The post <a href="https://hknsoft.com/android-buton-tiklama-efekti/">Android Buton Tıklama Efekti</a> appeared first on <a href="https://hknsoft.com">hknsoft</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Android uygulamalarda butona tıkladığımız zaman tıklayıp tıklamadığımız bazen anlaşılmıyor. Bu yüzden kullanıcı deneyimini arttırmak için butonlara tıklama efekti ekleyebiliriz.</p>



<p class="wp-block-paragraph">Bu yazıda aşağıdaki gibi tıklama efekti nasıl yapılır onu anlatacağım. Bu efektin adı <a href="https://guides.codepath.com/android/ripple-animation" target="_blank" rel="noreferrer noopener nofollow" class="broken_link"><strong>Ripple Effect</strong></a>.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="340" height="240" src="https://hknsoft.com/wp-content/uploads/2023/04/android-ripple-effect.gif" alt="Android Buton Tıklama Efekti" class="wp-image-1271"/></figure>
</div>


<p class="wp-block-paragraph">Öncelikle <strong>drawable</strong> klasörü içine <strong>bg_button.xml</strong> adında bir dosya oluşturuyoruz.</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;ripple xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:color="#5183c1"&gt;

    &lt;item&gt;
        &lt;shape&gt;
            &lt;corners android:radius="4dp" /&gt;
            &lt;solid android:color="#135790" /&gt;
        &lt;/shape&gt;
    &lt;/item&gt;
&lt;/ripple&gt;</pre></div>



<p class="wp-block-paragraph"><strong>Not:</strong> Tıklama efektinin gözükebilmesi için ripple tagı içerisindeki color, shape tagı içerisindeki color dan daha <strong>açık tonlu</strong> olmak zorunda.</p>



<p class="wp-block-paragraph">Ya da <strong>renklerle uğraşmayayım</strong> diyorsanız ripple coloruna <code>?android:colorControlHighlight</code> verebilirsiniz. Efektin rengini <strong>otomatik</strong> olarak ayarlayacaktır.</p>



<p class="wp-block-paragraph">Son olarak butonun <strong>background</strong> ına bu drawable veriyoruz.</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">&lt;Button
    android:id="@+id/button"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	android:text="Buton"
	android:background="@drawable/bg_button"
	/&gt;</pre></div>



<p class="wp-block-paragraph">Bu kadar! Ayrıca sadece butonlara değil <strong>tıklanabilen</strong> herhangi bir elemente de verebilirsiniz. (örn. LinearLayout)</p>
<p>The post <a href="https://hknsoft.com/android-buton-tiklama-efekti/">Android Buton Tıklama Efekti</a> appeared first on <a href="https://hknsoft.com">hknsoft</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Android Cleartext HTTP Traffic Not Permitted Hatası Çözümü</title>
		<link>https://hknsoft.com/android-cleartext-http-traffic-not-permitted-hatasi-cozumu/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 02 Feb 2023 18:07:43 +0000</pubDate>
				<category><![CDATA[Android Studio]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[android cleartext http hatası çözümü]]></category>
		<category><![CDATA[android cleartext http traffic]]></category>
		<category><![CDATA[android studio]]></category>
		<category><![CDATA[cleartext http traffic not permitted]]></category>
		<category><![CDATA[cleartext http traffic not permitted hatası çözümü]]></category>
		<guid isPermaLink="false">https://hknsoft.com/?p=1219</guid>

					<description><![CDATA[<p>Android uygulamalarınızda internetten veri çekmek için Retrofit ya da Volley kütüphaneleri kullandığınızda bu hatayı alabilirsiniz. Bu hatayı çözmek için 3 yöntem paylaşacağım. 1. Yöntem İlk <a class="mh-excerpt-more" href="https://hknsoft.com/android-cleartext-http-traffic-not-permitted-hatasi-cozumu/" title="Android Cleartext HTTP Traffic Not Permitted Hatası Çözümü">[...]</a></p>
<p>The post <a href="https://hknsoft.com/android-cleartext-http-traffic-not-permitted-hatasi-cozumu/">Android Cleartext HTTP Traffic Not Permitted Hatası Çözümü</a> appeared first on <a href="https://hknsoft.com">hknsoft</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Android uygulamalarınızda internetten veri çekmek için <a href="https://square.github.io/retrofit/" target="_blank" rel="noreferrer noopener nofollow"><strong>Retrofit</strong></a> ya da <a href="https://google.github.io/volley/" target="_blank" rel="noreferrer noopener nofollow"><strong>Volley</strong></a> kütüphaneleri kullandığınızda bu hatayı alabilirsiniz. Bu hatayı çözmek için 3 yöntem paylaşacağım.</p>



<h2 class="wp-block-heading">1. Yöntem</h2>



<p class="wp-block-paragraph">İlk olarak URL&#8217;yi <code><strong>https</strong></code> yerine <code><strong>http</strong></code> olarak kullanabilirsiniz. Örneğin;</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">https://example.xyz/api  -&gt;  http://example.xyz/api</pre></div>



<p class="wp-block-paragraph">Bu yöntem pek güvenilir değildir. Diğer yöntemler işe yaramazsa son çare olarak kullanabilirsiniz.</p>



<h2 class="wp-block-heading">2. Yöntem</h2>



<p class="wp-block-paragraph"><code><strong>AndroidManifest.xml</strong></code> dosyasına gidin <code><strong>&lt;application></strong></code> tagı içerisine aşağıdaki kodu ekleyin.</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;manifest&gt;
    &lt;uses-permission android:name="android.permission.INTERNET" /&gt;
    &lt;application
        ...
        ...
        android:usesCleartextTraffic="true"
        ...
    &lt;/application&gt;
&lt;/manifest&gt;</pre></div>



<h2 class="wp-block-heading">3. Yöntem</h2>



<p class="wp-block-paragraph"><code><strong>res</strong></code> klasörünün içerisine <code><strong>xml</strong></code> adında yeni bir klasör oluşturun. Daha sonra <code><strong>network_security_config.xml</strong></code> dosyası oluşturun ve aşağıdaki kodu yapıştırın.</p>



<p class="wp-block-paragraph">Klasörü oluşturmayı bilmiyorsanız yazının sonuna gidin.</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;network-security-config&gt;
    &lt;domain-config cleartextTrafficPermitted="true"&gt;
        &lt;domain includeSubdomains="true"&gt;example.xyz&lt;/domain&gt;
        &lt;domain includeSubdomains="true"&gt;api.example.xyz&lt;/domain&gt;
    &lt;/domain-config&gt;
&lt;/network-security-config&gt;</pre></div>



<p class="wp-block-paragraph">Son olarak <code><strong>AndroidManifest.xml</strong></code> dosyasına aşağıdaki kodu ekleyin.</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;manifest&gt;
    &lt;uses-permission android:name="android.permission.INTERNET" /&gt;
    &lt;application
        ...
        ...
        android:networkSecurityConfig="@xml/network_security_config"
        ...
    &lt;/application&gt;
&lt;/manifest&gt;</pre></div>



<h2 class="wp-block-heading">XML Klasörü Oluşturma</h2>



<p class="wp-block-paragraph">Sağ tık > New > Android Resource Directory</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="717" height="403" src="https://hknsoft.com/wp-content/uploads/2023/02/android-xml-klasoru-olusturma.jpg" alt="Android Cleartext HTTP Traffic Not Permitted Hatası Çözümü" class="wp-image-1235" srcset="https://hknsoft.com/wp-content/uploads/2023/02/android-xml-klasoru-olusturma.jpg 717w, https://hknsoft.com/wp-content/uploads/2023/02/android-xml-klasoru-olusturma-300x169.jpg 300w, https://hknsoft.com/wp-content/uploads/2023/02/android-xml-klasoru-olusturma-150x84.jpg 150w, https://hknsoft.com/wp-content/uploads/2023/02/android-xml-klasoru-olusturma-678x381.jpg 678w" sizes="auto, (max-width: 717px) 100vw, 717px" /></figure>
</div>


<p class="wp-block-paragraph">Resource type&#8217;ı xml olarak seçin.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="822" height="479" src="https://hknsoft.com/wp-content/uploads/2023/02/android-res-xml-klasoru-olusturma.jpg" alt="Android Cleartext HTTP Traffic Not Permitted Hatası Çözümü" class="wp-image-1234" srcset="https://hknsoft.com/wp-content/uploads/2023/02/android-res-xml-klasoru-olusturma.jpg 822w, https://hknsoft.com/wp-content/uploads/2023/02/android-res-xml-klasoru-olusturma-300x175.jpg 300w, https://hknsoft.com/wp-content/uploads/2023/02/android-res-xml-klasoru-olusturma-150x87.jpg 150w, https://hknsoft.com/wp-content/uploads/2023/02/android-res-xml-klasoru-olusturma-768x448.jpg 768w" sizes="auto, (max-width: 822px) 100vw, 822px" /></figure>
</div>


<p class="wp-block-paragraph">Android ile ilgili yazılar için <a href="https://hknsoft.com/kategori/android-studio/" target="_blank" rel="noreferrer noopener"><strong>tıklayabilirsiniz.</strong></a></p>
<p>The post <a href="https://hknsoft.com/android-cleartext-http-traffic-not-permitted-hatasi-cozumu/">Android Cleartext HTTP Traffic Not Permitted Hatası Çözümü</a> appeared first on <a href="https://hknsoft.com">hknsoft</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>C Programlama Çarpma İşlemi Kullanmadan İki Sayının Çarpımını Hesaplama</title>
		<link>https://hknsoft.com/c-programlama-carpma-islemi-kullanmadan-iki-sayinin-carpimini-hesaplama/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Sat, 07 Jan 2023 23:29:34 +0000</pubDate>
				<category><![CDATA[C Programlama]]></category>
		<category><![CDATA[c programlama]]></category>
		<category><![CDATA[c programlama çarpma]]></category>
		<category><![CDATA[c programlama çarpma işlemi kullanmadan]]></category>
		<category><![CDATA[c programlama hknsoft]]></category>
		<category><![CDATA[c programlama iki sayının çarpımını hesaplama]]></category>
		<guid isPermaLink="false">https://hknsoft.com/?p=1207</guid>

					<description><![CDATA[<p>Çarpma işlemi kullanmadan bu işlemi şu şekilde yaparız. Birinci sayı, ikinci sayı kadar kendisi ile toplanır. Örnek vermek gerekirse; 4*6 işlemini 4+4+4+4+4+4 şeklinde yapabiliriz. 4 <a class="mh-excerpt-more" href="https://hknsoft.com/c-programlama-carpma-islemi-kullanmadan-iki-sayinin-carpimini-hesaplama/" title="C Programlama Çarpma İşlemi Kullanmadan İki Sayının Çarpımını Hesaplama">[...]</a></p>
<p>The post <a href="https://hknsoft.com/c-programlama-carpma-islemi-kullanmadan-iki-sayinin-carpimini-hesaplama/">C Programlama Çarpma İşlemi Kullanmadan İki Sayının Çarpımını Hesaplama</a> appeared first on <a href="https://hknsoft.com">hknsoft</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Çarpma işlemi kullanmadan bu işlemi şu şekilde yaparız. Birinci sayı, ikinci sayı kadar kendisi ile toplanır. Örnek vermek gerekirse;</p>



<p class="wp-block-paragraph"><strong>4*6</strong> işlemini <strong>4+4+4+4+4+4</strong> şeklinde yapabiliriz. 4 sayısı 6 defa kendisi ile toplanmış oldu.</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">#include &lt;stdio.h&gt;

int main() {
	int sayi1, sayi2, sonuc = 0;
	
	printf("sayi1 : ");
	scanf("%d", &amp;sayi1);
	
	printf("sayi2 : ");
	scanf("%d", &amp;sayi2);
	
	for(int x = 0; x &lt; sayi2; x++) {
		sonuc = sonuc + sayi1;
	}
	
	printf("sonuc : %d", sonuc);
}</pre></div>



<p class="wp-block-paragraph">Akış diyagramı:</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" src="https://hknsoft.com/wp-content/uploads/2023/01/akis-diyagrami.jpg" alt="C Programlama Çarpma İşlemi Kullanmadan İki Sayının Çarpımını Hesaplama" class="wp-image-1212" width="383" height="454" srcset="https://hknsoft.com/wp-content/uploads/2023/01/akis-diyagrami.jpg 642w, https://hknsoft.com/wp-content/uploads/2023/01/akis-diyagrami-253x300.jpg 253w, https://hknsoft.com/wp-content/uploads/2023/01/akis-diyagrami-127x150.jpg 127w" sizes="auto, (max-width: 383px) 100vw, 383px" /></figure>
</div>


<h2 class="has-text-align-center wp-block-heading"><a href="https://gist.github.com/fovelas/624adbcdea5436c8e73631dfe2c357bc" target="_blank" rel="noreferrer noopener nofollow"><strong>GitHub</strong></a></h2>
<p>The post <a href="https://hknsoft.com/c-programlama-carpma-islemi-kullanmadan-iki-sayinin-carpimini-hesaplama/">C Programlama Çarpma İşlemi Kullanmadan İki Sayının Çarpımını Hesaplama</a> appeared first on <a href="https://hknsoft.com">hknsoft</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Flutter&#8217;da Shared Preferences Kullanımı</title>
		<link>https://hknsoft.com/flutterda-shared-preferences-kullanimi/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 14 Jul 2022 20:17:25 +0000</pubDate>
				<category><![CDATA[Flutter]]></category>
		<category><![CDATA[flutter]]></category>
		<category><![CDATA[flutter basic pref]]></category>
		<category><![CDATA[flutter shared preferences]]></category>
		<category><![CDATA[flutter shared preferences kullanımı]]></category>
		<category><![CDATA[flutter veri çekme]]></category>
		<category><![CDATA[flutter veri kaydetmek]]></category>
		<guid isPermaLink="false">https://hknsoft.com/?p=1179</guid>

					<description><![CDATA[<p>Shared Preferences yapısını, uygulama içerisindeki küçük verileri saklamak için kullanıyoruz. Bu yapı sayesinde int, double, String, bool tipinde verileri tutabilirsiniz. Nasıl Kullanılır? Projemize pub.dev sitesinden <a class="mh-excerpt-more" href="https://hknsoft.com/flutterda-shared-preferences-kullanimi/" title="Flutter&#8217;da Shared Preferences Kullanımı">[...]</a></p>
<p>The post <a href="https://hknsoft.com/flutterda-shared-preferences-kullanimi/">Flutter&#8217;da Shared Preferences Kullanımı</a> appeared first on <a href="https://hknsoft.com">hknsoft</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><a href="https://hknsoft.com/?s=shared" target="_blank" rel="noreferrer noopener"><strong>Shared Preferences</strong></a> yapısını, uygulama içerisindeki küçük verileri saklamak için kullanıyoruz. Bu yapı sayesinde <strong>int, double, String, bool</strong> tipinde verileri tutabilirsiniz.</p>



<h2 class="wp-block-heading">Nasıl Kullanılır?</h2>



<p class="wp-block-paragraph">Projemize <strong>pub.dev</strong> sitesinden <a href="https://pub.dev/packages/shared_preferences" target="_blank" rel="noreferrer noopener nofollow"><strong>shared_preferences</strong></a> paketini ekliyoruz. Nasıl ekleyeceğinizi bilmiyorsanız pub.dev sitesinde <strong>Installing</strong> sekmesi altında detaylı bir şekilde anlatılıyor.</p>



<p class="wp-block-paragraph"><strong>Visual Studio Code</strong> kullandığınızı varsayarak, yeni bir <strong>terminal</strong> açıp şu kodu çalıştırıyoruz.</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">flutter pub add shared_preferences</pre></div>



<p class="wp-block-paragraph">Şimdi paketimizi dosyamıza <strong>import</strong> edelim.</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">import 'package:shared_preferences/shared_preferences.dart';</pre></div>



<p class="wp-block-paragraph">Shared Preferences yapısını çağırıyoruz.</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">var sharedPreferences = await SharedPreferences.getInstance();</pre></div>



<p class="wp-block-paragraph">Tüm veri kayıt/veri çekme işlemlerini bu nesne üzerinden halledeceğiz.</p>



<h2 class="wp-block-heading">Veri Kaydetmek</h2>



<p class="wp-block-paragraph">Burada karşımıza <strong>key-value</strong> yapısı çıkıyor. Kısaca anlatmak gerekirse key <strong>anahtar kelimedir.</strong> Veri yani value bu key altında saklanır. Bir veriyi key ile çağırırız veya kaydederiz. Bu yüzden key <strong>benzersiz olmalıdır.</strong></p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">var sharedPreferences = await SharedPreferences.getInstance();
sharedPreferences.setString(key, value);</pre></div>



<p class="wp-block-paragraph">Tabi bu iki kodu normal bir fonksiyonun içerisine yazarsak çalışmaz. Bu kodları <strong>asenkron</strong> bir fonksiyonun içerisine yazmalıyız.</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">Future&lt;void&gt; setString(String key, String value) async {
    var sharedPreferences = await SharedPreferences.getInstance();
    sharedPreferences.setString(key, value);
}

//kullanimi
setString('kullanici_adi', 'hakans');</pre></div>



<p class="wp-block-paragraph">Yukarıdaki <strong>setString </strong>fonksiyonu String veri kaydeder.</p>



<h2 class="wp-block-heading">Veri Çekmek</h2>



<p class="wp-block-paragraph">Asenkron bir fonksiyon olduğu için kullanımı bu şekilde.</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">Future&lt;String&gt; getString(String key) async {
    var sharedPreferences = await SharedPreferences.getInstance();
    return sharedPreferences.getString(key) ?? 'none';
}

//kullanimi
getString('kullanici_adi').then(((value) {
    setState(() {
        kullanici_adi = value;
    });
}));</pre></div>



<p class="wp-block-paragraph">Örnek olması açısından diğer veri tipleri için <strong>kaydetme/çekme fonksiyonlarını</strong> içeren classı vereceğim. Sizde <a href="https://gist.github.com/fovelas/d679929ad695c12962188a653f0cbd21" target="_blank" rel="noreferrer noopener nofollow"><strong>basic_pref.dart</strong></a> adında dosya oluşturup içerisine aşağıdaki kodları yapıştırabilirsiniz.</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">import 'package:shared_preferences/shared_preferences.dart';

class BasicPref {
  Future&lt;void&gt; setInt(String key, int value) async {
    var sharedPreferences = await SharedPreferences.getInstance();
    sharedPreferences.setInt(key, value);
  }

  Future&lt;void&gt; setString(String key, String value) async {
    var sharedPreferences = await SharedPreferences.getInstance();
    sharedPreferences.setString(key, value);
  }

  Future&lt;void&gt; setBool(String key, bool value) async {
    var sharedPreferences = await SharedPreferences.getInstance();
    sharedPreferences.setBool(key, value);
  }

  Future&lt;int&gt; getInt(String key) async {
    var sharedPreferences = await SharedPreferences.getInstance();
    return sharedPreferences.getInt(key) ?? 0;
  }

  Future&lt;String&gt; getString(String key) async {
    var sharedPreferences = await SharedPreferences.getInstance();
    return sharedPreferences.getString(key) ?? 'none';
  }

  Future&lt;bool&gt; getBool(String key) async {
    var sharedPreferences = await SharedPreferences.getInstance();
    return sharedPreferences.getBool(key) ?? false;
  }
}

final basicPref = BasicPref();</pre></div>



<h2 class="has-text-align-center wp-block-heading"><a href="https://gist.github.com/fovelas/d679929ad695c12962188a653f0cbd21" target="_blank" rel="noreferrer noopener nofollow"><strong>BasicPref – GitHub</strong></a></h2>
<p>The post <a href="https://hknsoft.com/flutterda-shared-preferences-kullanimi/">Flutter&#8217;da Shared Preferences Kullanımı</a> appeared first on <a href="https://hknsoft.com">hknsoft</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Android Data Binding Kullanımı</title>
		<link>https://hknsoft.com/android-data-binding-kullanimi/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Fri, 24 Dec 2021 00:00:58 +0000</pubDate>
				<category><![CDATA[Android Studio]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[android data binding]]></category>
		<category><![CDATA[android data binding kullanımı]]></category>
		<category><![CDATA[android java data binding]]></category>
		<category><![CDATA[android studio]]></category>
		<category><![CDATA[android studio data binding kullanımı]]></category>
		<category><![CDATA[data binding]]></category>
		<category><![CDATA[data binding kullanımı]]></category>
		<guid isPermaLink="false">https://hknsoft.com/?p=1146</guid>

					<description><![CDATA[<p>Büyük projelerde onlarca itemi findViewById() ile teker teker tanımlamak çok uzun ve gereksiz bir işlem. Data Binding ile daha az kod yazarak aynı işi yapabiliyoruz. <a class="mh-excerpt-more" href="https://hknsoft.com/android-data-binding-kullanimi/" title="Android Data Binding Kullanımı">[...]</a></p>
<p>The post <a href="https://hknsoft.com/android-data-binding-kullanimi/">Android Data Binding Kullanımı</a> appeared first on <a href="https://hknsoft.com">hknsoft</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="has-black-color has-text-color wp-block-paragraph">Büyük projelerde onlarca itemi <strong>findViewById</strong>() ile teker teker tanımlamak <strong>çok uzun ve gereksiz</strong> bir işlem. <a href="https://developer.android.com/topic/libraries/data-binding#java" target="_blank" rel="noreferrer noopener nofollow"><strong>Data Binding</strong></a> ile <strong>daha az kod yazarak</strong> aynı işi yapabiliyoruz.</p>



<p class="wp-block-paragraph">Bu yazıda findViewById() kullanmadan Data Binding ile nesnelere ulaşmayı anlatacağım.</p>



<h2 class="wp-block-heading">Projede Aktif Etme</h2>



<p class="wp-block-paragraph"><strong>build.gradle -> android</strong> içerisine aşağıdaki kodu ekleyerek <strong>aktif ediyoruz.</strong></p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">android {
    ...
    dataBinding {
        enabled = true
    }
}</pre></div>



<h2 class="wp-block-heading">Data Binding Kullanımı</h2>



<h2 class="wp-block-heading">XML</h2>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"&gt;

    &lt;LinearLayout
        android:id="@+id/example_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:orientation="vertical"
        tools:context=".MainActivity"&gt;

        &lt;TextView
            android:id="@+id/hello_world_text"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="Hello World" /&gt;
    &lt;/LinearLayout&gt;
&lt;/layout&gt;</pre></div>



<p class="wp-block-paragraph">Data Binding kullanabilmek için xml dosyasına <strong>&lt;layout></strong> tagı ile başlanması gerek. Yukarıdaki gibi LinearLayout veya RelativeLayout ile değil &lt;layout> tagı ile başlıyoruz. Tabi namespaceleri de bu taga taşıyoruz.</p>



<h2 class="wp-block-heading">JAVA</h2>



<p class="wp-block-paragraph">Java kısmında <strong>setContentView(R.layout.activity_main);</strong> kodu yerine aşağıdaki kodu kullanıyoruz.</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);</pre></div>



<p class="has-black-color has-pale-pink-background-color has-text-color has-background wp-block-paragraph"><strong>Not:</strong> Her activity için farklı bir class <strong>otomatik olarak oluşturulur.</strong> MainActivity için <strong>ActivityMainBinding</strong> adında bir class oluşturmuş. Örneğin <strong>HomeActivity</strong> için <strong>ActivityHomeBinding</strong> adında bir class oluşturacaktır. </p>



<p class="wp-block-paragraph">Artık <strong>binding</strong> nesnesiyle xml dosyasındaki elemanlara kolay bir şekilde erişebileceğiz.</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">package com.hknsoft.databinding;

import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;

import android.os.Bundle;
import android.view.View;

import com.hknsoft.databinding.databinding.ActivityMainBinding;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);

        binding.helloWorldText.setText("Deneme123");

        binding.exampleLayout.setVisibility(View.VISIBLE);
    }
}</pre></div>



<p class="wp-block-paragraph">İşte bu kadar kolay. Data Binding ile onlarca koddan kurtulmuş olduk.</p>



<p class="wp-block-paragraph">Android Studio ile ilgili yazılar için <a href="https://hknsoft.com/kategori/android-studio/" target="_blank" rel="noreferrer noopener"><strong>tıklayabilirsiniz.</strong></a></p>
<p>The post <a href="https://hknsoft.com/android-data-binding-kullanimi/">Android Data Binding Kullanımı</a> appeared first on <a href="https://hknsoft.com">hknsoft</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
