Meraklı Rakun: Yazılım

Merhaba!

Meraklı Rakun yayın hayatına başladı. Merak ettiğimiz şeyleri sizlerle paylaşmaya başlıyoruz, paylaştıkça büyümeyi umuyoruz.

Evdeki Spor Salonu

Sağlıklı yaşamak için spor salonlarına gitmenize gerek yok!

Türkiyede Magic the Gathering

İnceleme ve Sorunlar bu başlıkta.

Kickstarter

Projeniz için desteğemi ihtiyacınız var?

Sağlıklı Ses için Vokal İpuçları

Sesinize olan sevginizi nasıl gösterebilirsiniz?

Yazılım etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Yazılım etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

12 Ocak 2020 Pazar

Alternatif Zamanı - Bölüm 1: Photoshop vs GIMP


Evet sektörün en ünlü görüntü manipulasyon programı. Bize sunduğu güzellikler için teşekkür etmem gerek fakat bir kaç kötü yanı var tabi ki. Bunlardan en büyüğü bana sorarsanız ömür boyu lisans satın alamıyoruz. Creative Clouda her ay 280 lira vermemizi istiyor ki bu uzun vadede korkunç bir rakam, özellikle bireysel tasarımcılar ve freelancerlar için. O yüzden fiyat kısmını baz alarak alternatifler sunacağım size.

Bahsedeceğim tüm programlar endüstriyel seviyede ve hepsinin güçlü yanları var. O yüzden sadece photoshop alternatifi olarak değil ek araçlar olarak görebiliriz. Mesela ben Photoshop kullanıyorum ama yanında açık kaynaklı ve ücretsiz bir yazılım olan GIMP kullanıyorum. Söylemem gerek ki GIMP şaheser bir yazılım. Linux kullanıyorsanız sizin kurtarıcınız.

Anlamış olacaksınız ki asıl alternatifimiz GIMP çünkü ücretsiz. Şimdi güçlü yönlerini maddeleyeyim.
  • BEDAVA! Bisürü ücretsiz update.
  • Taşınabilir bir program yani inanılmaz az yer kaplıyor rakipleri ile karşılaştırınca.
  • Photoshopun yapabileceği çoğu şeyi yapıyor.
  • Zayıf donanımlı bilgisayarlarınız ile kullanabilirsiniz.
  • Tutarlı ve hızlı
  • Daha özelleştirilebilir ve esnek arayüzü var. (Kullanıcı dostu değil pek, bir kaç video izleyip alışmanız lazım.)
  • Photoshopta bulunan gereksiz ıvır zıvırlar, dikkat dağıtan ögelerin hiçbiri yok.
  • Son olarak her formatta kayıt edebiliyoruz, PSD dahil.
Zayıf yönleri ise;

  • Photoshopta bulunan Camera RAW yok, RAW görüntüleri düzenleyemiyoruz.
  • Tahmin edilebileceği gibi Photoshop daha fazla araca sahip ve bu sebeple daha güçlü. Adobe sisteminin arkasında etkili bir yapay zeka sistemi çalışıyor.
  • Photoshoptaki gibi CMYK gibi renk formatlarını kullanarak çıktı alamıyoruz.
Olumsuz yönlere bakıp hemen moral bozmamak lazım yinede GIMP inanılmaz kuvvetli. Eğer bireysel çalışıyorsanız süper bir yol arkadaşı, Adobe biraz daha "Business Friendly". Diğer alternatifler ise şöyle;

Bu arada bunların hepsi piksel odaklı programlar.
  • GIMP - BELEŞ - Win/Linux/Mac
  • Procreate - IOS - 10$ - Bu yazılım daha çok dijital boyama işleri için güzel.
  • Rebelle - Windows/Mac - 68$ Ömür Boyu - Buda daha çok dijital çizim odaklı.
  • Art Rage - Windows/Mac - 79$ Ömür Boyu - Yine dijital çizim odaklı bir program.
  • Affinity Photo - Windows/Mac - 350 Lira Ömür Boyu - Bu photoshopla aynı işi yapıyor.
  • Photopea - Browser - Free - Tarayıcı uygulaması arayüzü photoshopa çok benziyor.
  • Pixelmator Pro - Mac - 40$ 
  • Pixlr - Browser - Free
  • Corel PhotoPaint - Windows - 600$ Ömür Boyu - Photoshoptan sonra en güçlülerden.
  • Paint.net - Windows - Free
  • Sumo Paint - Browser - Free/Pro 4$/ay
  • Acorn - Mac - 30$
Falan filan bunlar kalitesi en yüksek olanlardan ve kendimde birçoğunu denedim ve beğendim. Eğer sıkıldıysanız veya gıcık olduysanız photoshopa bir deneyin.

12 Eylül 2013 Perşembe

Tree




Veri düzenleme yöntemlerinden birisi olan tree mantığını kafamızda bir ağacın dalları olarak canlandırabiliriz. Koymak istediğimiz veriler kendi belirlediğimzi sıralama ölçütüne göre dallara eklenerek tree yi oluştururlar.

Tree yapısı için root ve branch dediğimiz terimlerden bahsedebiliriz.

Root- en tepedeki kök diye adlandırılan node'dur.

Branch- root un çocukları veya altına yerleşen node lar diyebiliriz.

Node bilgilerin içinde bulunduğu bölümler.


Root node ve diğer node lar arasında parent ve child ilişkisi vardır. Bu ilişki için yukarıda kalan node lar parent aşağıda kalan nodelar ise bu ailenin çocukları olarak değerlendirilirler.


Paylaştığım video treelerin bir çeşidi olan binary tree yi ayrıntılı ve anlaşılır bir şekilde anlatmış.

Tree'nin içine eleman eklemek konusunda yazdığım basit bi kod parçasını paylaşmak istedim. Koda baktığınız zaman daha kolay anlıyabilirsiniz.


MYBTREE insert(MYBTREE q,MYDATA  a) {

    if(q==NULL)
    {
        q=init_btree(a);
        q->data=a;
        q->left=NULL;
        q->right=NULL;
    }
    else if(a< q->data)
    {
        q->left=insert(q->left,a);
    }
    else if(a> q->data)
    {
        q->right=insert(q->right,a);
    }
    else
    {
        return 0;
    }
    return q;
}

9 Eylül 2013 Pazartesi

Queue






Queue veri düzenleme yollarından bir tanesidir. Verileri sıraya sokmak olarakta düşünebiliriz. Queue de ilk giren veri ilk çıkar ve son giren veri sıra ona gelene kadar çıkmayı bekler.

Queue için kullanılan terimler

Enqueue- sıraya arka kısmından eleman koymak.

Dequeue- Sıranın baş kısmından eleman çıkartmak.



Yardımcı olacağını düşündüğüm bir video.

Kısaca kodlamalarından bahsedecek olursam 

Enqueue

void enqueue(MYQUEUE q, MYDATA a){
    if(q->tail != NULL){
        q->tail->next = a;
    }
    else{
        q->head = a;
    }
    q->tail = a;
    a->next = NULL;
}


Dequeue

MYDATA dequeue(MYQUEUE q){
    MYDATA a = q->head;
    if(a != NULL){
        q->head = q->head->next;
    }
    return a;
}



Eclipse Debugging





Debug yazdığımız program içinde adım adım dolaşmamıza yarayan bir araçtır.

Adım adım bütün satırları gezerken yapılan işlemleri consol pencesinden adım adım takip edebilmemizi sağlar. Bu gezinti esnasında programımızın nerede patladığını bulmamız çok daha kolay olur.


                                          Programımızdaki problemli kısmı biliyorsak  buraya bir
breakpoint koyarak debug işlemi oraya geldiğnde durur verileri incelemeniz için size olanak sağlar.





Debug esnasında bize yardımcı olan kısayol tuşlarında bahsetmek istiyorum.

F5- Seçili olan satırı compile eder ve bir alt satıra geçer, eğer bir metod iste metodun içine girerek adım adım işleme koyar.

F6- Bir sonraki satırı işler.

F8- Break point e kadar olan kısmı bi kerede geçmenizi sağlar.



Yardımcı olacağını düşündüğüm bir video paylaşmak istedim. En basit haliyle debugging nedir anlatılmış.

Data Structures






Verilerin bilgisayar ortamında etkin olarak saklanması ve işlenmesi için kullanılan yapılardır. Verilerin düzenlenme biçimini belirlerler. En küçük bir değişken bile veri yapısı olarak kabul edilebilir.

Değişik algoritmalar kullanılarak verilerin saklanma ve sıralanma tipleri değiştirilerek ihtiyaç olana en yakın kullanım sağlanabilir.

Pointer Kavramı







Pointer, programımızda tanımladığımız değerlerin bellek üzerindeki yansımaları olarak değerlendirilebilir.



Animasyonlu bir video ile pointer kavramını kafamızda oturtmak çok daha kolay olabilir.


Pointer kavramı çok geniştir ve pointer kulanılarak yazılmış programları debug etmek dikkat gerektirir.  "***data" şeklinde bir kod görseniz bile unutmamanız gereken pointer her zaman pointerdır.

Bu konuda yazılabilecek en temel örnek sanırım swap kodudur.



void swap(int *a, int *b)
{
  int temp=*a;
  *a=*b;
  *b=temp;
}




7 Eylül 2013 Cumartesi

Veritabanı



Veritabanı hakkında en alt seviyeden başlayan çalışmalarımı paylaşmayı düşünüyorum öncesinde hazırlık olarak veritabanı hakkında bazı genel bilgiler araştırmanın iyi olacağını düşündüm.

-Veritabanı düzenli bilgiler topluluğu olarak adlandırılmış. Veri tabanı yazılımı ise verileri sistematik bir biçimde depolayan yazılımlara verilen isim.
-Büyük miktarlardaki verilerin bir bütünlük içinde güvenli bir şekilde saklanması ve verimli şekilde hafızayı kullanıp beklenene sürede gerekli aramaları yapabilmesi veritabanını ve veri tabanı yazılımcılığını değerli kılan unsur.
-Sorting algoritmalardan başlayarak yapacağım çalışmalar hakkında araştırma yaparken karşıma ilk çıkan ve araştırmak istediğim bilgi veritabanı kuramı oldu.

Veritabanı kuramı,
    -Veritabanları ve veritabanı yönetim sistemlerine ilişkin araştırma ve çalışmalar bütünün genel adı diyerek çok soyut bir tanım bulabildim. Aslında dikkatlice bir okudğumda veritabanı kuramının az çok ne olduğunu anlayabiliyorum.
ilişkisel veri tabanı teorisi hakkında yazılmış bir makale bana yardımcı oldu.
-http://olcaybas.com/tag/iliskisel-veritabani-teorisi

Şimdilik burda bitiriyorum yakın zamanda
-Veritabanları
-Veritabanı yöneticiliği
-Sıralama Algoritmaları
-Kodlama çalışmaları bu ve daha fazla konu hakkında detaylıca yapacağım araştırmalar devam edecek.

Seçerek Sıralama (Selection Sort)

Verilerin hafızada sıralı bir şekilde tutulması için geliştirilen algoritmalardan bir tanesidir.

Özetlersek her adımda verilen dizideki en küçük elemanı bulup dizinin başındaki elemanla yerini değiştirir. Bu işlemi sürekli tekrar ederek sonuca ulaşır.

Linkini verdiğim siteye girerek Selection Sort'un nasıl çalıştığını görsel olarak takip edebilirsiniz.

Sorting algoritmaları



Bubble Sort mantığı için yararlı olabileceğini düşündüğüm bir video paylaşmak istiyorum. İnternette küçük bir arama sonucu olaşabileceğiniz kod örnekleri yerine videodaki gibi örneklerden yararlanıp kod  parçacıklarınızı kendiniz oluşturabilirseniz benim gibi başlangıç seviyesinde kendinizi çok daha iyi geliştirebilisiniz.



Bubble Sort;

void bubblesort(int *arr) {
    int i, j, t;
    for (i = 0; i < MAX; i++) {
        for (j = i; j < MAX; j++) {
            if (arr[j] < arr[i]) {
                t = arr[i];
                arr[i] = arr[j];
                arr[j] = t;
            }
        }
    }
}


Insertion Sort ile ilgili aynı tarzda hazırlanmış bir örnek video.


Insertion Sort;

void insertionSort(int *arr) {
    int i, j, t;
    for (i = 1; i < MAX; i++) {
        for (j = i; (j > 0) && (arr[j] < arr[j - 1]); j--) {
            t = arr[j];
            arr[j] = arr[j - 1];
            arr[j - 1] = t;
        }
    }
}




Array işlemleri









Array kavramını kafamızda bir çeşit liste şeklinde canlandırabiliriz. Array'ler codlama yaparken bize bir sürü kolaylıklar sağlayan yapılardır codlama dillerine göre array tipleri ayrılabilirler. Array elemanları index olarak adlandırılırlar.

Program, global bir array'e random olarak atanan elemanların 2 çeşit sıralama mantığına göre sıralanmasından sonra ekrana yazdırılması.

#include <stdio.h>
#include <stdlib.h>

#define MAX 30

void randomAR(int *arr) {                  Rasgele üretilen sayılar için
                                                                          kullandığım fonsiyon.
    int i;
    for (i = 0; i < MAX; i++) {
        arr[i] = rand() % 100;
    }
}

void display(int *arr) {
    int i;
    for (i = 0; i < MAX; i++) {               Ekrana vermek istediklerimizi
        printf("%2d ", arr[i]);                      düzenlediğimiz display fonsiyonumuz.
        fflush(stdout);

    }
    printf("\n");
    printf("\n");
    fflush(stdout);
}

void bubblesort(int *arr) {
    int i, j, t;
    for (i = 0; i < MAX; i++) {              
        for (j = i; j < MAX; j++) {
            if (arr[j] < arr[i]) {
                t = arr[i];
                arr[i] = arr[j];
                arr[j] = t;
            }
        }
    }                                                                Sıralama algoritmaları.
}

void insertionSort(int *arr) {
    int i, j, t;
    for (i = 1; i < MAX; i++) {
        for (j = i; (j > 0) && (arr[j] < arr[j - 1]); j--) {
            t = arr[j];
            arr[j] = arr[j - 1];
            arr[j - 1] = t;
        }
    }
}

/*

 for i = 2:n,
 for (k = i; k > 1 and a[k] < a[k-1]; k--)
 swap a[k,k-1]
 */

int main(void) {

    int arr[MAX];
    printf("1.Random        ");
    fflush(stdout);
    randomAR(arr);
    display(arr);

    printf("Bubble Sort     ");                  Fonsiyonlarımız ile değişkenlerimizi
    fflush(stdout);                                           birleştirip işlem yaptırdığımız
    bubblesort(arr);                                             main bölümü.
    display(arr);

    printf("2.Random        ");
    fflush(stdout);
    randomAR(arr);
    display(arr);

    printf("Insertion Sort  ");
    fflush(stdout);
    insertionSort(arr);
    display(arr);

    return EXIT_SUCCESS;
}



Struck yapılar






Struck içine farklı tipte elemanlar alabilen ve bunları hep birlikte tek tip olarak tanımlamamıza olanak veren bir yapıdır.
  
Bu programımda struck yapıları üzerine bir kaç işlem yaptım. Struck yapı üzerine farklı değişkenleri random olarak atayarak sıraladım.

Program;

#include <time.h>
#include <stdio.h>
#include <stdlib.h>

#define MAX 30

struct person {                               Struck yapımız ve
    int a;                                               içindeki değişkenlerimiz.
    char b;
    char c[20];
    float t;

};

void displaySturct(struct person *p) {

    int u;
    for (u = 0; u < MAX; u++) {                Display fonsiyonumuz
        printf("integer a   ");                              yani işlem sonucunda
        printf("\n");                                                 görmek istediğimiz
        printf("%2d ", p[u].a);                                     sonuçların düzenlendiği
        printf("\n");                                                         bölüm.
        printf("char b      ");
        printf("\n");
        printf("%c ", p[u].b);
        printf("\n");
        printf("char array C");
        printf("\n");
        printf("%s ", p[u].c);
        printf("\n");
        printf("float t     ");
        printf("\n");
        printf("%f ", p[u].t);
        printf("\n");


    }
    printf("\n");
    printf("\n");
    fflush(stdout);
}

void insertionSort(struct person *p) {             Sıralama algoritmamızın
    int i, o;                                                                  yer aldığı fonsiyonumuz.
    struct person t;
    for (i = 1; i < MAX; i++) {
        for (o = i; (o > 0) && (p[o].a <p[o - 1].a); o--) {
            t = p[o];
            p[o] = p[o - 1];
            p[o - 1] = t;
        }
    }
}

int randomA() { //ok!

    int q = rand() % 100;
    //printf("%2d ", q);
    return q;

}

char randomB() { // ok!

    int n = rand() % 26;                      Rasgele almak istediğim değerler için
    char c = (char) (n + 68);                                          yazdığım fonksiyonlar.                              
  // fprintf(stdout, "%c", c);                              
    return c;                                                       

}

float randomT() { // ok!

    float n = rand() % 26;
    float t = (float) (n + 65);
    //fprintf(stdout, "%f", t);
    return t;
}

int main(void) {

    struct person p[MAX];
    int i;
    for (i = 0; i <MAX; i++) {                Main, yazığımız fonsiyonlar ile
                                                                    verilerimizi birleştirip sonuç aldığımız
        p[i].a = randomA();                                bölüm.
        p[i].b = randomB();
        int k;
        for (k = 0; k < 19; k++) {
            p[i].c[k] = randomB();

        }
        p[i].c[19]='\0';
        p[i].t = randomT();


    }


    insertionSort(p);
    displaySturct(p);

    return EXIT_SUCCESS;
}


Sıralama için daha önce yazmış olduğum sort metodlarından yararlandım
tabi struct taki değişkenler için biraz özelleştirmem gerekti.

Yaptığımız Boot İşlemini Kontrol Etmek

Kullanmak donanıma yazdığımız iso'ların düzgün çalışıp çalışmadığını kontrol edebilmemiz için 2 tane yöntem paylaşmak istedim.

Bunlardan ilki  Hiren's Boot diye adlandırılan bir program bios ta çalışıyor mantık olarak Bad sector kontrolü yapıyor.
Not: Benim gibi acemi kullanıcılar için fazla karmaşık gelen bir yöntem.
Buraya tıklayarak ayrıntılı bilgi bulabilirsiniz.

İkinci yöntem olarak MobaLiveCd  programı aslında tam da benim aradığım program oldu kullanımı gayet rahat ve kolay.
Bios veya karmaşık işlemlerle uğraşmadan dvd veya usblerimize yaptığımız bootları kontrol edebiliriz.

Güvenilirlik konusunda iki yolu da deneme fırsatım olmadı yakın zamanda deneyip kendi yorumlarımı paylaşacağım.