İçeriğe geç

Kategori: Uncategorized

WEBGL nedir? -5 Ekrana üçgen, dörtgen çizdirme

Bu yazıda artık ilk 4 yazıda öğrenmemiz gereken şeyleri öğrendikten sonra birşeyler çizmeye başlayabiliriz. webgl ile ekrana bir kırmızı üçgen ve dörtgen çizimi şlemi yapacağız. Kaynak kodlara buradan ulaşabilirsiniz.

Kaynak kodu verdikten sonra biraz kodumuzu incelemeye geçelim.

gereksinimler

ilk olarak shader sınıfı ve matematik kütüphanesini import ediyorum. Webgl için gerekli matrix ve matematiksel işlemler için gl-matrix kütüphanesini kullandım. İsterseniz kaynak kodunu inceleyebilirsiniz. Uzun uzun matematik kodlarına girmeyeceğim.

import { CreateShaderProgram } from “../Shader/shader.js”
import { mat4, mat3, glMatrix} from “../lib/Math/gl-matrix.js”

gl parametrelerinin ayarlanması

Canvas ve shader programını oluşturduktan sonra gl objemi alıyorum. Daha sonra bazı gl kodları ile başlıyorum:

this.gl.viewport(0,0,this.canvas.width, this.canvas.height) // görüntü alanı 
                    //olarak kanvasın bütününü kullanacamızı belirtiyoruz
this.gl.enable(this.gl.DEPTH_TEST) // eğer derinlik oalrak üst üste gelen
                                   // bir pixel değeri varsa fragment shaderde 
                                   //işleneceğini ayarlıyor.
this.gl.clearColor(0.4689,0.5006,1,1) // arka fona verdiğim renk
this.gl.clear(this.gl.COLOR_BUFFER_BIT) // ayarlanan renk ile ekranı siler
this.gl.useProgram(this.shaderProgram) // shader kullnaımını set ediyorum.

Shader adresleri

Bu ksımdan sonra önceki shader yazılarından anlayacağımız üzere shaderden model matrix, position ve renk değişken adreslerini alıyorum:

this.vertexPos= this.gl.getAttribLocation(this.shaderProgram,"aVertexPosition")
this.ModelLoc = this.gl.getUniformLocation(this.shaderProgram,"uModelViewMatrix")
this.colorPos= this.gl.getUniformLocation(this.shaderProgram,"vColor")

Gene önceki yazılardan tanıdığımız bir kod vertexPos attribute adresini aktif ediyorum

this.gl.enableVertexAttribArray(this.vertexPos)

Model matrisi ve çizim

Sonraki adımda model düzlemimi belirleyen matrisi ayarlıyorum. Ben ortogonal yani dikey düzlem kullanacağım. dikey düzlemde perspektif olmaz. Dümdüz görürsünüz.
this.ModelMatrix = new Float32Array(16)
mat4.ortho(this.ModelMatrix,-2,2,-2,2,-2,2) // ilk iki sayı genişlik, sonraki yükseklik ve ensondaki derinliği ifade eder.
console.log(this.ModelMatrix);

Daha sonra çizim işlemi için vertex verileri ve bufferları dolduruyorum ve çizim yapıyorum.

var vertex =[
-0.5,-0.5,0,
-0.5, 0.5,0,
0.5,-0.5,0,
]

var vertexBuffer=this.FillBuffer(vertex)

this.gl.uniformMatrix4fv(this.ModelLoc, false, this.ModelMatrix)
this.gl.uniform4fv(this.colorPos, [1,0,0,1])

this.gl.bindBuffer(this.gl.ARRAY_BUFFER,vertexBuffer)
this.gl.vertexAttribPointer(this.vertexPos, 3, this.gl.FLOAT, false, 0 ,0)
this.gl.drawArrays(this.gl.TRIANGLES,0,3)

Ve sonuç biçok yazıdan sonraki sonuç:

webgl

WEBGL nedir? -4 Vertex Shader ve Fragment Shader açıklama

Bu yazıda shaderlerden bahsedip sonra shader programla olan ilişkisini açıklayacağım. Daha sonaki yazılarda webgl kısmı ile ekrana birşeyler çizdirmeye başlayacağım. Vertex shader ve Fragment shader webgl tarafında çizim için çok gerekliler bu yüzden bu kısımları iyi öğrenmemiz gerekiyor. Çok hızlı bir süreç değil fazla şey bilmek gerekiyor ama bildikten sonra yapması eğlenceli.

Vertex Shader:

Öncelikle shader language yazısında kullandığım vertex shader kodundan açıklamaya başlayalım.

const vsSource = `
attribute vec3 aVertexPosition;
attribute vec4 aVertexColor;

uniform mat4 uModelViewMatrix;
uniform mat4 uProjectionMatrix;

void main(void) {
gl_Position = uModelViewMatrix * vec4(aVertexPosition,1);
}
`;

yukarıdaki vertex shader kod parçacığında ilk olarak attribure değişkenleri olarak aVertexPosition, ve aVertexColor değişkenleri tanımlıyoruz bunlar attribute tipinde çünkü her vertexin kendine özel koordinat ve renk bilgisi var. Sonra sabit dışarıdan verdiğimiz uModelViewMatrix ve uProjectionMatrix 4×4 matrisleri var bunlarında tipi uniform yani dışarıdan biz tekar set etmediğimiz sürece aynı kalan değişkenler. Zaten bu değişken tiplerine önceki yazımda değinmiştim.

Peki yukarıdaki olay nedir? Model matris ile vertex vektörünü çarpıp cismin clip spacedeki yeni buluyoruz. yukarıdaki kodda uProjectionMatrix ile çarpmadım yani herhangi bir perspektife sahip değil. Eğer perspektif eklemek istiyorsak en başa uProjectionMatrix i çarpım olarak yazmamız gerekirdi.

Mesela yukarıdak kodda aVertexPosition vec3 tipinde yani 3 eksenli bir koordinat ama bu 2 eksenli de olabilirdi iki eksenli olsaydı yani vec2 aVertexPosition; o zaman çarpımda kullandığımız değer şu şekilde olacaktı *vec4(aVertexPosition,0,1)

 

Fragment shader :

Gene shader language yazımdaki fragment shader kodunu alacağım.

const fsSource = `
uniform lowp vec4 vColor;

void main(void) {
gl_FragColor = vColor;
}
`;

Burada ilk olarak dikkat ettiğimiz vColor değişkeninin lowp limitinde olması bunun nedeni renk değeri 0 ile 1 arasında oluyor. yani beyaz vec3(1,1,1) rengi opaklığı da eklersek vec4(1,1,1,1) şeklinde olur. Bu renklerde de çok çok büyük sayılar kullanmıyorsak en düşük limitler işimi çok rahatlıkla görecektir. Buradaki shader kodlar en sade haliyle mesela fragment shaderde şu an texture eklemedik. Çizdiğimiz şeye sadece renk veriyoruz.

 

Shader Program:

Shader kodları bu şekilde tanımlandıktan sonra gl ile vertex shader ve fragment shader nesneleri oluşturuluyor.

const vertShader = gl.createShader(gl.VERTEX_SHADER)
const fragShader = gl.createShader(gl.FRAGMENT_SHADER)

daha sonra bu shaderlere yukarıdaki kaynak kodlar gösterilip bu kodlar bu nesneler için derleniyor.

gl.shaderSource(vertShader,vsSource)
gl.compileShader(vertShader)

gl.shaderSource(fragShader,fsSource)
gl.compileShader(fragShader)

Bu adımdan sonra gl ile gpu da koşacak programımızı oluşturuyoruz.

const shaderProgram = gl.createProgram()

Ve oluşturulan bu programa shaderer tutuşturulup vertex shader ve fragment shader birbirine bağlanıyor.

gl.attachShader(shaderProgram, vertShader)
gl.attachShader(shaderProgram, fragShader)
gl.linkProgram(shaderProgram)

Yani shader programı yaratılırken hangi shaderleri derleyip hangisinin birbiriyle bağlanacağına biz karar veriyoruz. Program GPU da koşuyor ama yönetim bizde oluyor. Bir sonraki yazıda artık ekrana birşeyler çizdireceğim. Tabi bu aşamada da shader programına hangi değişkenlere hangi değerlerin gideceği konusunda bizim yardım etmemiz gerekiyor bu adımları da görmüş olacağız.

WEbGL nedir? -3 GLSL değişkenler ve yazım kuralları nedir?

Önceki yazımda webgl e hızlı bir giriş yaptım ve bu yazımda GLSL değişkenler ve yazımı üzerinde duracağım.Bu değişkenler ve kurallar önemli çünkü bunları bilirsek daha karmaşık shaderler üretebiliriz. Shaderimizin içinde sadece main fonksiyonu olmak zoruna değil yeni fonksiyonlar ekleyip bunları çağırabiliriz.

Veri tipleri:

Standart bildiğimiz int, float, bool, void tiplerinin yanında grafik kartına özel başka değişkenler var bunlar:
mat2(2×2) mat3(3×3) mat4(4×4) matris(iki boyutlu dizi) oluşturmak için kullanılıyor.
vec2, vec3, vec4 float point vektör(tek boyutlu dizi) oluşturmak için kullanılıyor.
bvec2, bvec3, bvec4 boolean değerleri tutan vektörler oluşturmak içni kullanılıyor.
ivec2, ivec3, ivec4 işaretli int değerler tutan vektörler oluşturmak için kullanılıyor.
sampler2D texture(doku) a ulaşmak için kullanılan değer.
samplerCube texture ile alakalı bir değer bunu kullanmadım.

3 adet niteleyicimiz var bunlar:

Attribure:

Shaderin her çalışmasında her vertex için kullanılan değişkendir, değeri her draw işleminde değişir.Yani hesaplamalrda tekrar tekrar kullandığımız değişkenlerdir. Örneğin önceki yazıdaki :

ttribute vec3 aVertexPosition;
attribute vec4 aVertexColor;

değişkenleri gibi. Bu değişkenler her vertex için kullanılır ve her seferinde değer o vertex için hesaplanır.

Uniform:

Bu değişkenler sabit değere sahiptir shader içinde sadece okuma özelliği olan değişkenlerdir dışarıdan bizim müdahalemiz ile değişebilir ancak shader programı bu değeri değiştiremez. Bir kere atadığımızda hep o değer geçerli olur. Örneğin önceki yazıdaki fragment shader deki

uniform lowp vec4 vColor; //lowp ve vec4 aşağıda açıklanacak

değişkeni gibi. Bu değişkene değer atarken şu şekilde atadığımızda hep o değişken sabit kalır

gl.uniform4fv([0,0,255,1]) // daha sonra açıklayacağım

Varying:

Vertex shader ve Fragment shader arasındaki bağlantılı olan değişkenleri ifade eder. Örneğin vertex shader deki bir değişkeni fragment shader de kullanmak istediğimizde o değişkeni varying olarak belirtmemiz gerekir. Örneğin

//vertex shader da
uniform vec4 baskaDeger;
varying vec4 vector;
void main(void){
vector = baskaDeger;
}

//fragment shader da
varying vec4 vector;
void main(void){
//baskaDeger değişkenini değeri burada vector değişkeninden kullanılabilir.
}

Sayı limitleri:

Shader lerde kullandığımız sayı değerlerine bellirli limitler ekleyerek istediğimiz aralıkta sayılar üretilmesini sağlayabiliriz. Tabi bu aralığı vermezsek default aralıkta program gene çalışır.Ancak ayar yapma gereği duyduğumuzda bunları kullanabiliriz.

Bu aralıklar highp, mediump ve lowp olarak adlandırılıyor. Aşağıdaki grafikte aralıkları görebilirsiniz.

GLSL sayı limtleri

WEBGL nedir? -2 Shader Language

Shader language yada OpenGL SL(Shader Language) yada GLSL, opengl in yeni sürümlerinde kullanılan grafik kartı üzerinde küçük programcıklar çalıştırmaya yarayan C diline benzer yazım kuralları olan bir dildir. WEBgl GLSL kullanır. GLSL ile artık grafik kartında işlenecek koda daha fazla müdehale edebiliyoruz ve işlem yoğunluğu gerektiren kısımları grafik kartına yıkarak daha hızlı bir şekilde yapabiliyoruz.

Ben WEBgl yazı dizisi oluşturduğum için WEBgl ile kullanım biçimine göre anlatımımı yapacağım.

Vertex Shader:

Grafik kartına her vertex i nasıl işleyeceği ve bu vertexler için gerekli matematiksel işlemleri(matris çarpımı) nasıl yapacağını belirttiğimiz yer. Temel olarak projeksiyon matris, model matris ve vertex vektörünü çarparak bir uzay elde edildiği kısım.

Fragment Shader:

Fragment Shader ise her pixel için herekli renk veya texture işlemlerinin belirtildiği yer.

Aşağıdaki resimde nasıl olduğuna dair bir resim paylaşıyorum:

fragment shader,vertex shader
fragment shader,vertex shader

Aşağıdaki örnekte ES6 ile yazığım bir classta shaderleri nasıl oluşturduğum yer alıyor, bunları örnek olarak koyuyorum ileriki yazılarda Vertex Shader ve Fragment Shader e daha detaylıca değineceğim.:


class CreateShaderProgram {
  constructor() {

  }
  CreateShader(gl){

    const vsSource = `
      attribute vec3 aVertexPosition;
      attribute vec4 aVertexColor;

      uniform mat4 uModelViewMatrix;
      uniform mat4 uProjectionMatrix;

      void main(void) {
        gl_Position = uModelViewMatrix * vec4(aVertexPosition,1);
      }
      `;

    const vertShader = gl.createShader(gl.VERTEX_SHADER)

    gl.shaderSource(vertShader,vsSource)

    gl.compileShader(vertShader)


    const fsSource = `
      uniform lowp vec4 vColor;

      void main(void) {
        gl_FragColor = vColor;
      }
      `;

    const fragShader = gl.createShader(gl.FRAGMENT_SHADER)

    gl.shaderSource(fragShader,fsSource)

    gl.compileShader(fragShader)

    const shaderProgram = gl.createProgram()
    gl.attachShader(shaderProgram, vertShader)
    gl.attachShader(shaderProgram, fragShader)
    gl.linkProgram(shaderProgram)

    return shaderProgram
  }
}

export { CreateShaderProgram }

Webpack katili Parcel nedir ?

Neden parcel ?

 

Günümüzde web uygulamaları için geniş özelliklere sahip birçok demetleyici bulunmaktadır, bunların en çok kullanılanları webpack ve browserify da dahil.

Bir çok demetleyici konfigurasyon ve eklentiler ile kurulur ve sadece birşeylerin çalışması için 500 satırdan fazla satır sayısı olan konfigurasyon doslayarı genellikle var olan şeyler. Bu konfigurasyonlar sadece sıkıcı ve zaman harcayan şeyler değil ayrıca her uygulama için çoğaltmak ve doğru ayarı yapmak da zor. Sıklıkla ürün kısmına geçmede alt optimizasyonların gerektiği bir hal alabiliyor. Parcel sıfır configurasyon ayarı olacak şekilde tasarlanmıştır. SAdece giriş noktanızı belirtmeniz yeterli o geri kalanı doğru bir şekilde yapacaktır.

Var olan demetleyicilerin bir olumsuz yanı da çok yavaş olmalarıdır. Geliştirme sürecinde fazlaca değişiklierin yapılması çok fazla bağımlılığı ve fazla dosyaların olduğu büyük uygulamalarda demetleme sürecinin dakikalar alması acı verici bir durumdur. Parcel modern çok çekirdekli işlemcilerden yaralanarak kodunuzu paralel işlemlerle derler. Sonuç olarak ilk demetlemede büyük bir hız artışı olur. Ayrıca her dosya için dosya sistemi önbelleğine sahiptir, böylece ileriki başlangıçlarda da hızlıdır.

Sonuç olarak var olan demetleyiciler string yükleyiciler/dönüştürücüler üzerine kurulmuştur. Bir stringi alırlar parse ederler bazı dönüşümlerden eçirerek tekrar kod üretirler.Bu da bir dosya için fazla sayıdadönüşüm ve kod üretme anlamına gelir, pek etkili bir yol değildir bunu aksine Parcel her dosya için bir kere parse eder, birçok kez dönüşüm uygular ve birçok dönüşümden geçirerek bir defa kod üretir.

 

Yükelemek için :

yarn global add parcel-bundler

Başlangıç noktası göstermek için :

parcel index.html

Bu kadar artık geliştirme işlemine başlayabiliriz.

 

Ana sayfası: https://parceljs.org/

Github sayfası: https://github.com/parcel-bundler/parcel

Kullanımı video:

 

 

Webpack nedir?

Webpack benim de yeni kullanmaya başladığım tarayıcı tarafında yazılım geliştirikenkaranlıkta kalan çoğu yerleri aydınlatan bir paket.

Webpack aslında es6 ile npm paketleri kullanarak yazdığımız projelerde bize paketlenmiş tek bir .js çıktısı veren bir araçtır. Ayrıca dışarıdan eklediğimiz resimler, dosyalar da dahil bize hepsini güzelce derleyip toplayarak çıktı verir.

Hatta es6 ve Commonjs combine olsada bize toplayıp verebiliyor Ayrıca tarayıcınızın desteklemediği şeyleri de çevirebilir.

Şimdi webpack kurulumuna başlayalım:

Önce babel gereksinimlerimi kuralım:
npm install babel-cli babel-preset-es2015 --save-dev
npm install babel-core --save-dev
npm install babel-loader --save -dev

veya

yarn add babel-core -dev
yarn add babel-loader -dev

.babel.rc dosyamızı ayarlayalım:

{
"presets": ["es2015"]
}
webpack ve webpack-cli paketlerimizi yükleyelim:
npm install webpack webpack-cli --save-dev

veya

yarn add webpack webpack-cli --dev

html pluginimizi yükleyelim bu sayede derlediğimizde index.html dosyasınıda oluşturacak tek yapmamız gereken o dosyayı açmak olacak:

npm install --save-dev html-webpack-plugin
yarn add html-webpack-plugin --dev

şimdi

webpack.config.js dosyamızı ayarlayalım:
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin')
const CleanWebpackPlugin = require('clean-webpack-plugin')

module.exports = {
entry: './src/index.js',
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist')
},

//bazı durumlarda bir dosya çok büyük boyutlarda olduğu için bizden ayırmamızı
// istiyor performans açısından problem olmaması için o zaman aşağıdaki şekilde
// düzenlememiz gerekir:
entry: {
index:"./src/index.js",
ikinci: "./src/ikinci.js",
ücüncü: "./src/ucuncu.js"
},

mode: 'development', // ürünü bitirdiğimizde production ayarı ile bundle ediyoruz şimdilik development modunda

//babel loaderimizi ekleyelim:

module:{
rules:[
{
test: /\.js$/,
exclude: /(node_modules | bower_components)/,
use:{
loader: "babel-loader",
options:{
presets:['es2015']
}
},
}
]
},

output: {
filename:[name]bundle.js,
path: path.resolve(__dist, 'dist'),
//publicPath:'/' // bu kısım htaccses ayarı ile .js dosyalarının kaynağını belirtmek için kullanabilirsiniz
},

plugins:[
new CleanWebpackPlugin(['dist']),
new HtmlWebpackPlugin({ title: "Output Managment"}) // bu kısım html sayfamızın tittlesini ayarlıyor.
]

};

Buraya kadar olan kısımla package.json dosyamıza :

"scripts": {
"wb": "webpack"
}

diyerek konsoldan

npm run wb

dediğimizde bize bundlemizi vermiş olacak.

webpack-dev-server kuralumu yapalım:

Şimdi bir de geliştirme sürecinde sürekli bundle etmemek için webpack-dev-server kurmamız gerekiyor böylece her değişiklikiği kaydettiğimizde bir localhost un bir portundan değişikliğimizle sayfamız sürekli yenilenecek.

npm install webpack-dev-server --save-dev
yarn add webpack-dev-server -dev

daha sonra webpack.config.js dosyamıza plugins ten sonra ayarlarımız ekleyelim

devServer:{
contentBase: parh.join(__dirname, "build")
compress: true,
port: 9000,
//index: "index.html" // html dosyanızın yolunu verebilirsiniz.
}

şimdi tekrar package.json dosyamızda scripts kısmına komutumuzu ekleyelim

"scripts": {
"wb": "webpack",
"wd": "webpack-dev-server"
}

komut satırına npm run wd yazdığımızda projemiz localhost:9000/ de bize sunulmuş olarak karşımıza çıkacak.
publicpath kısmını değiştirerek başka yollarda verebilirsiniz o zaman localhost:9000/ilkdeneme gibi linkler elde edebilirsiniz. Benim anlatacaklarım şimdilik bu kadar daha ayrıntılı bakmak isterseniz webpackin sitesinden dökümanlarını inceleyebilirsiniz.

 

Not: yukarıdaki işlemler:

"webpack": "^4.4.1",
"webpack-cli": "^2.0.13",
"webpack-dev-server": "^3.1.1"
"babel-loader": "^7.1.4"
"babel-core": "^6.26"

sürümleri ile gerçekleştirilmiştir.

Bu kadar anlatımdan sonra sizler için:

 
  "devDependencies": {
    "clean-webpack-plugin": "^0.1.19",
    "html-webpack-plugin": "^3.2.0",
    "webpack": "^4.19.1",
    "webpack-cli": "^3.1.0",
    "webpack-dev-server": "^3.1.8"
  }

özelliklere sahip ayarlanmış bir webpack projesi hazırladım  sadece başlangıç için. Sadece css ve img kullnamak isterseniz onlar için loaderleri ayarlamanız gerekiyor. İki adet config var biri develpment, biri build için. WEbpack Proje Başlangıç

Sözlük sitelerinin internet ortamını kirletmesi

İnternet ortamında sosyal medya devrimi hayatta kalabilen az sayıda mecralardan biride sözlük diye tabir edilen siteler. Burada daha kolay bir biçimde içerik girebiliyoruz, çok fazla bir tartışma ortamından çok içerik üretilen bir ortam.

Kutsal bilgi kaynağı mı çöplük mü ?

Benim şahsi görüşüm sözlük sitelerinin pek bir yararlı içeriğe sahip olmadığı yönünde bu yüzden pek kullanmak istemiyorum. En ünlüsü ekşi sözlükte çok bir kaliteli içerik olduğunu zannetmiyorum. Tamam her türden insan var belli bir ifade özgürlüğü var bunlar güzel şeyler ama içerik üreten insanlar pek de sözlük derecesinde içerik üretebilen kişiler değil. Mesela şu an gündem konusuna baktığınızda kaliteli bir içerik göremezsiniz genelde sistemi eleştiren  ya toplum şöyle böyle diyenler ya siyasi görüş bildiren ya birlerine nefret söyleminde bulunanların olduğu bir ortam. Bunun kime ne faydası var ??

 

Orada vakit geçiren bir insana bu içerikler nasıl bir fayda sağlayabilir ? Kutsal bilgi kaynağı sloganı içi boş bir laf mı ? Bir kişiye sanal bir yazar sıfatı eklendiğinde o insan aniden nirvanaya mı ulaşıyor ? O insan aydın insan mı olmuş oluyor ? Tabiki hayır. Lüten bunları bir düşünün daha iyi kaliteli bir internet ortamına sahip olabiliriz. Bu kadar kirli bir ortam olmasına gerek yok.

Object Storage nedir ?

Object storage çok büyük veriler için kullanılan bir depolama sistemidir.  Tanımına girmeden önce block storage ve file systems hakkında bilgi kısa bilgiler:

BLOCK STORAGE

Block Storage ın en yaygın örnekleri SAN ISCSI, ve yerel disklerdir.Bir Block Storage birimi doğrudan işletim sistemine bağlıdır ve etkileşimler genellikle dosya sisteminin parametreleriyle birlikte gerçekleşir, ayrıca bunula birlikte blok aygıtının doğrudan byte seviyesinde veriye ulaşması da mümkündür. Block Storage bütün storage tiplerinde en alt seviye olandır, Byte seviyesinde veriye uygun değişimin yapılmasına izin verir. Fazla random I/O gerektiren ve verinin sadece belli bir parçasına erişim gerektiren uygulamalarda kullanışlıdır.

FILE STORAGE

File storage ‘ın en yaygın örnekleri NAS lardır. Dosya Depolama işletim sistemi ve NAS cihazı üzerinde yatan dosya sistemi arasında bir soyutlama katmanı gibi davranan bir ağ dosya sistemi kullanımını gerektirir. İŞletim sistemi depolamayı lokal dosyasistemi gibi görür ama aslında depolamanın bulunduğu yere doğrudan ileitşim kuramaz. İşletim sistemi komutları ağ dosya sistemi tarafından yorumlanır ve temel tabaka dosya sisteminin komutlarına çevirir. Farklı işletim sistemleri birbirini desteklemese dahi temel tabaka dosya sistemi sayesinde birbirleriyle düzgün bir şekile iletişim kurabildikleri için birden fazla makinenin uzak server de aynı içerğe ulaşmasını sağlar.

OBJECT STORAGE

Object storage’ın block storageden farkı işletim sisteminin uygulama seviyesine dosya sistemi üzerinden ulaşması yerine api üzerinden uygulama seviyesine ulaşmasıdır.

Öncelikle Object storage doğrudan işletim sistemi tarafından ulaşılabilir değildir. Lokal ya da uzak dosya sistemleri gibi değildir. Bunun yerine uygulama seviyesine API üzerinden etkileşim gerçekleştirir. Block storage ve File Storage işletim sistemi tarafından kullanılmak üzere tasarlanmıştır, Object storage ise uygulamalarınız tarafından kullanılmak üzre tasarlanmıştır.

Bunun birkaç anlamı vardır:

1. Objelerle etkileşim bütünseldir. Başka bir deyişle byte-level etkileşim mümkün değildir. Bunun yerine tüm objeler depolanabilir yada geri alınabilir. Not olarak bazı uygulamalarda bir objenin aralıklarına ulaşmak mümkündür ama low level etkileşim Block/File Storage ile karşılaştırıldığında çok limitlidir.

2. Etkileşim tek bir API endpointinden meydana gelir. Bu karmaşık LUN haritalama, depolama, ağ topolojileri vs. uygulama temel tasarımından çıkarılmasını sağlar. Bu ayrıca depolama sistemine yapılabilecek saldırı olanalaklarını da büyük ölçüde azaltır. Yalnızca HTTP/HTTPS API si ve servis sağlayıcı API fonksiyonları kullanılabilir.

3. Dosya Sistemi seviyesindeki araçlar (örneğin POSIX araçları) objelerde doğrudan etkileşemezler. Bu özelliği taklit etmek için bazı FUSE driverler vardır fakat bu kullanımda Object Storage in performans karakteristiği ve özellikleri idealden uzaklaşır.

Dizin ağacı yoktur (dizin ağacı yerine container kullanımı):

ikinci olarak, Object storage esnek bir yapı kullanır, iç içe dizin ağaçları yerine objeleri containerlerde depolar. object storage ın birçok gerçekleştiriminde dizini yapsını taklit eder ve hiyerarşinin bir yanılsımasını verir ama aslında temel depolama esnektir. Bu object storageın büyük oranda ölçeklenebilir olmasını sağlayan başka bir özelliğidir: büyük performans sorunlarından biri de genel olarak bir kez gösterimde on milyonlarca dosyayı dosya sisteminin elemesidir, object storage büyük miktarda dizin metadatasının izinin tutulmasını yük olmaktan çıkarır.

Metadata objeler ile birlikte:

Object storage ın diger depolama sistemlerinden bir farkı da meta dataların ayrı bir node yerine direkt olarak objelerde yer almasıdır. Bu çok kullanışlıdır çünkü depolama platformunda genelde onlarca yada yüzlerce PB boyuntunda data olması arzu edilir bu da geleneksel geleneksel depolama elamanlarının işleyebileceği ölçekten çok daha büyük işlemleri içerir.

Örneğin bir kütüphanedeki bütün kitapları tek bir depolama platformunda depolamak istiyoruz. Kitap içeriğine ek olarak metadataları da saklamak istiyoruz. yazar, basım tarihi, yayıncı, ISBN kodu, telif hakalrı vs. Bu data aralığı birkaç KB den her obje için birkaç MB seviyelerine ulaşır. Geleneksel olarak bütün bilgiler bir ilişkisel veritabanında tutulmalı ve bilgi ve objeler arasında ilişki kurabilecek bir uygulama olmalı. 35 milyon ve daha büyük sayılarda objelerde geleneksel depolama yöntemleriyle bu işlemi yapmak büyük bir sorun teşkil etmektedir. Object storage ölçeklendirme sorunu yoktur, veriler objelerle birliktedir ve tek bir apı çağrısı ile ilişkisel veritabanı ile ilişki kurmaya gerek kalmadan alınabilir.

Ölçeklenebilirlik:

Object storage özelliklerinin küçük datalar için pek kullanışlı değildir. Ancak data boyutu yüzlerce TB ve PB seviyelerine geldiğinde ve bununda ötesinde, bu özellikler kullanışlı hale gelir ve hemen hemen her boyutta data için yatay ölçeklenebilirlik sağlar.

Dayanıklılık:

Birçok object storage tasarımı içni gerekn dayanıklılık seviyesi geleneksel depolama ile karşılaştırıldıgında oldukça yüksektir.(99.99999% den 99.999999999%, 100 kat daha fazla dayanıklı ). Object storage dosya tutarlılığı doğrulamak, hatalı diskleri işlemek, bit-rot, sunucu ve cabitnet hataları vs. için kendi iç makanizmasına sahiptir. Bu özellikler sisteme dosyaları kendiliğinden koplayamasına izin verir ve ihtiyaç olduğunda gereken sayıda data kopyasının elde edilmesini sağlar. Bu sayede oldukça yüksek oranda dayanıklılık ve kullanşlılık sağlar.

Maliyet:

Genelde aylık bir GB için peni seviyesinde maliyeti vardır. Taperlerle aynı seviyede maliyete sahiptir ve tapelerden daha dayanıklıdır ve sağladığı performans ile bulut depolama platformları için idealdir.

Özetle object storage çok büyük veriler için kullnaılabilir bri yapıdadır. Örneğin video, sesi internet içeriği gibi büyük sayıda(PB lar seviyesinde) datanın tutulmasını kolaylaştırır.

Daha iyi anlaşılması için birkaç görsel:

object1

object3

object4 obect3 object5 object6

Kaynak

Save

Save

duckduckgo ile internette gizli arama yapmak

duckduckgo
gizli arama  duckduckgo

 

İnternette gizli arama yapmak için kullanabileceğimiz bir tarayıcı var duckduckgo.com bu yazıda biraz bu tarayıcı hakkında bilgi vereceğim kendisini yaklaşık bir yıldır kullanıyorum ve menunum diyebilirim.

Arama sızıntısı nedir?

Diğer arama motorlarında birşey aradığınızda ve linke tıkladığınızda arama terimleriniz site ye gönderilir.

Örneğin, özel birşey aradığınızda bu gizli bilgiyi yalnızca arama motorunuzla değil, aramada bulduğunuz linke tıkladığınızda site ile de paylaşırsınız.

Ayrıca bir siteyi ziyaret ettiğniizde bilgisayarınız otomatik olarak tarayıcı bilgileri ve ip adresinizi gönderir. Bu bilgi sizi kimliklendirmede kullanılabilir.

Duckduckgo varsayılan olarak arama sızıntısını önler. Bir terim aradığınızda sizi o siteye yönlerdirirken arama teriminizi o siteye göndermez. Siteler sizin onları ziyaret ettiğinizi bilir ancak ne arayarak siteye ulaştığınızı bilmezler.

Duckduckgo gibi bazı arama motroları HTTPS in Kullanıcıların arama terimini sitelere yollamayan şifreli sürümünü kullanır. Ancak bu versiyonlarda bağlantı yavaştır ve siteye tıkladığınızda HTTPS kullansa dahi arama teriminiz yollanır. Bununla birlikte, şifreli versiyon sizinle bizim aramıza geçerek aramanızı korur ve  bilgisayarınız üzerinden arama kaçağı olmasını engeller.

Duckduckgo da, şifreli verisyonumuz dahada ileri gider otomatik olarak ana web siteden noktaya sitelerin şifrelenmiş versiyonlarının linklerin numaralarını değiştirir. Bu HTTPS Everywhere Firefox eklentisinden sonra modellenmiştir.

Arama sızıntısını engellemenin bir başka yoluda
tarayıcınızda aramalarınızı göstermeyen ve bunun sonucunda başka sitelere bilgi göndermeyen bir özelliğe sahip olan POST isteği adında bir metod da kullnılabilir. POST isteği ayarını Ayarlar sayfasından yapabilirsiniz değiştirmek size kalmış. POST isteği tarayıcı geri tuşunu geçersiz yapar ve buda sizin için biraz zorluk oluşturabilir.

Sonuç olarak, sitelerin onları ziyeret ettğini bilmesini de istemiyorsanız Tor browser kullanabilirsiniz. Böylece hem kimliksiz hem de gizli arama yapabilirsiniz.

Türkiyede neden girişimci olunmaz

 

girişimci

 

Son yıllarda Türkiye’de herkesin ağzında olan bir terim girişimci yada girişimcilik. devletten özel sektöre kadar herkes bunun öneminden bu yönde yapılan çalışmalardan bahseder herkesin hayalinde silikon vadisi olmak var. Hayaller böyleyken biraz da gerçeklere bakalım.

Kendimden örnek verecek olursam bence bir insanda girişimci ruhunu öldüren en büyük etken gereğinden fazla vaad verilmesi ve bu vaadlerin zamanında yerine getirilmemesi. Zaman belirsizliği çok büyük bir problem yanlış hatırlamıyorsam kasım ayının orlatarında Tübitak 2209-A 2015 2. dönem çağrısına proje verdik. yakalaşık 3 aylık bir zaman geçti normalde acak ayında açıklanıyormuş neredeyse 2209 2016 başvuruları başlayacak ama henüz sonuçlar açıklanmadı. Mesela Erciyes üni. sinde Teknopark diye bri kurum var bir etkinlik yapar o da böyle insanı başvurduğuna pişman eder süreç her zaman bilmem şu günün şafağında ufka bak belki olur tarzında. İşte bu gibi durumlar insanda “bu ülkeden hiç birşey olmaz” gibi düşüncelerin gerçek olduğunu anlatıyor.

Bu adam oraya bir proje vermiş birşeyler yapmak istiyor. Bu kişinin kendi emeğinin  bir sonucunu bilmek istemesi kadar doğal bir durum yoktur heralde. Peki neden bunca insanı bekletiyorlar? neden bunca insana bu işkenceyi yaşatıyorlar?

Cevap basit çünkü bizleri bir insan olarak görmüyorlar. Onlar için bizler birer hayvan veya nesneyiz bizim herhangi bir duygumuz yok. Çok büyük birşey istemiyoruz ki sadece insan yerine koyulmak istiyoruz. Yapacağınız tek şey kısa bir bilgilendirme metni ve kesin tarih  bu kadar basit. 

 

Her zaman bu durum böyle değil tabi bazı özel sektörde olan büyük kurumların yaptığı yarışmalar oluyor. O insanlar gerçekten bunun farkında ve size değer veriyorlar, insan olduğunuzu anlıyorsunuz. Mesela adam açıkladığı tarihin son günü ama açıklamadı hemen o gün bir mail atıyor. Şu şu sebeplerden dolayı tarihi bir hafta ileri aldık diyor sende tamam çok güzel deyip yaşamına bakıyorsun. Ne stres var de dert. Olması gereken de bu. Ve bu durum düzelmedikçe ne Tübitak nede bizim Etto dan hiçbir şey olmaz.

 

Sizlere de tavsiyem eğer birşeyler yapmak istiyorsanız bir yarışma gibi etkinliğe girmeden önce bu durumları göz önüne alarak girin. Ve gerçekten size saygılı davranan bir ortam varsa girişimcilik adına birşey yapmaya değerdir.

Clash of clans cadılar bayramı sonrası güncelleme hatası

Clash of clans Cadılar bayramı güncellemesi ile uzun bir zaman oynadık artık oyunda yeni güncellemelerinde olduğu yeni bir sürüm geldi bu güncelleme en büyük clash of clans güncellemelerinden birisi özellikler şöyle:

 

11. seviye belediye binası
Grand büyük koruyucu
Taktik avcı  uçağı ağır silahı
Yeni birlik seviyeleriKoruma süresi ile birlikte artık hem sadırabileceksiniz hemde kalkanınız kalkmayacak.
Birlik bağışında artık büyü de bağışlayabiliyoruz.
Bunun gibi birsürü yenilik daha var.

Gözüme çarpan bir yenilikte oyun alanını dört bir yandan 2 kare genişletmişler.

Screenshot_2015-12-12-19-27-05

 

 

Güncelleme sorununu nasıl çözdüm?

clash of clans yeni ekran
clash of clans yeni ekran

Oyunda böyle güzellikler varken şöyle bir hata ile karşılaştım oyun güncelleme uyarısı vermesine rağmen google play e yönlendirdiğinde güncelle gibi bir seçenek yoktu böylece oyunu güncelleyemedim silip tekrar yüklemek de işe yaramadı bende oyunu kaldırıp tarayıcıdan google play e girdim ve oradan yükle diyerek telefonuma yüklenemsini sağladım böylece uygulama açıldı.

 

 

Stres altında düzgün çalışmak diye birşey var mı ?

Stres altında çalışmak, baskı altında çalışmak gibi deyimleri duymuşsunuzdur. Hani böyle insanlar mumla aranır. Ama gerçekten bu mümkün mü ? Bence değil yani ya streslisindir yada değil başka bir alternatif yok bence, 0 yada 1 başka bir alternatif yok. Stress altında çalışabilen insan tanımıda şöyle bence aslında o kişi zor durum karşısında strese kapılmıyor demektir. Stresli bir şekilde çalışamazsın.

 

Vize döneminde olduğum şu sıralar kimsede böyle bir özellik görmedim yani hem stresli hemde başarılı olmazsın strese kapılırsan birşey yapamazsın. Bunu herkeste gördüm. Önemli olan o durumdan stres duymamak buda her insan için pek mümkün değil. Hatta çok zor bir durum. Yani Eğer sizde böyle stres yoluyla birşey yapmak istemiyorsanız yada sınavlarınıza çalışmak istemiyorsanız gerçekten çok normal bir durum.

 

Peki nasıl Stresten kurtulacağız ?

Tabiki önceden stress oluşturacak şeyleri engelleyerek bu sorundan kurtulabiliriz. Yani tek yol adımlarınızı en baştan iyi bir şekilde atmalısınız. Yoksa sonuç hüsran olacaktır. Bu tamamen kişiliğinizle alakalı. Sizin için önemli bir iş ise bunu en baştan düzgün adımlarla yapmanız yada iş gecikmiştir ama zaten o şey sizin için önemli değildir ve diz de strese kapılmadan yapabilirsiniz.

 

Origami kağıdım sonunda geldi

Bundan bir buçuk ay önce aliexpress ten aldığım origami kağıdım sonunda geldi 🙂

 

 

 

Hemen küçük bir deneme yapmak istedim ve kuğu yaptım. yapılış şekli şöyle:

 

swan

 

Son hali şöyle :

Jpeg
Kuğu

Eğlenceli bir işe benziyor. Başka şeylerde yapmaya devam edeceğim. Çok güzel şeyler var bununla ilgili.

Dünya dışı gezegenler posteri

Gezegen posteri
Gezegen posteri

 

Yukarıdaki poster 1988 den bu yana dünya dışında keşfedilen dünya dışı gezegeneler in bir kısmını yaklaşık 500 tanesini gösteriyor.Bu poster Slovakyalı yazar ve grafik sanatçısı Martin Vargic tarafından oluşturuldu. Görsel gezegenlerin tahmini yarıçapı, sıcaklık değerlerini temel alıyor, bunun dışında başka faktörlerde mevcut örneğin uzkalık yada metalik değerleri de göz ününe alınmış.Bilinen tüm diğer gezegen sınıflarından gezegenler görselde mevcut örneğin olarak süper dünyalar, sıcak jüpiterler, sıcak neptünler, su dünyaları, gaz devleri, elmas gezegenler gibi.

Bu güzel görseli incelemek isterseniz  linkini ziyaret edebilirsiniz.

Nasanın dünya websitesindeki arşivde 1988 den bu yana dünya dışı 1903 gezegen keşfedilmiş.

Ayrıca bu linkten Dünya dışı gezegenlerin sıcaklık, boyut, periyodu veya ne zaman keşfedildiğine dair bilgileri bulabilirsiniz.

Dinahmoe Labs Plink müzik oyunu

Plink web tarayıcısı uzerinden oynayabileceğiniz bir çok oyunculu müzik yapma oyunu oyunda öncelikle bir isim belirleyerek giriş yapıyorsunuz ve o anda giren oyuncularla tellerin üzerinde gezerek ve farenizle tıklayarak belirli renklere belirlenmiş sesleri çıkarabiliyorsunuz ve ortaya herkesin birşeyler kattığı bir beste çıkıyor. Güzel ve hoş bir uygulama.

Plink oyna

ses

 

Plink oyna