Bu Blogda Ara

28 Nisan 2022 Perşembe

Yorumsuz

Daha önce "Bağcılar Arizona Kertenkele Tarikatı - Türkçe Düblaj" başlıklı bir içerik görülmüştü.




Kaynak: https://www.tiktok.com/@aslan_t1oarshkho/video/7085151343664516353

26 Nisan 2022 Salı

INCA IMG339 Mouse

Nisan 2022'deki fiyatı 126,15 TL olan bir mouse test ettik.



Paketten çıkan kılavuzun ön yüzü.


Paketten çıkan kılavuzun arka yüzü.


Paketten çıkan mini disk içinde 6 MB'lık bir uygulama var. Disk sürücüsü olan bilgisayarlar artık üretilmediği için https://www.incatech.net/tr/yazilim/1020/yazilim-gaming-mouse/ adresinden yazılımı indirebilirsiniz.


Uygulama arayüzünün 3 sekmesi aşağıdadır.

Ana menü


Gelişmiş ayarlar


LED Ayarları

24 Nisan 2022 Pazar

Excel'de Kesişim İle Veri Bulmak

Bir satır verisi ve sütunun kesiştiği hücredeki veriyi almak için aşağıdaki işlevi kullanabilirsiniz.

=İNDİS(A1:E1000;KAÇINCI("Satirdaki deger";A:A);KAÇINCI("Sutundaki deger";1:1))


Kaynak: https://www.excel.web.tr/threads/satir-ve-suetun-kesisimini-bulma.173846/

"NOSTALJİ | Mercedes O303 Europa; Kükreyen V8" Başlıklı Vidyo İçin İngilizce Altyazı Denemesi

I am sharing this subtitle on Youtube, at the request of Mr. Coover.





EN (USA)

23 Nisan 2022 Cumartesi

Sümbülzade Vehbi Efendi

🛈
Sümbülzade Vehbi’nin Edirnekapı Şehitliği’ne taşınmış mezar taşı, Fatih ÇAVUŞ tarafından bulunmuştu:
https://twitter.com/fatihcavus05/status/1505989676313853967

📷
Fotoğraflar:
1) https://lh3.ggpht.com/p/AF1QipOXug_1sl5iHjGop5gA_QHVMiMf4Y7YZ1jMj8wY=s2048
2) https://lh3.ggpht.com/p/AF1QipPf4onTRRzRbZYYMZYYsRCY12UYEFMKiEI2E8aM=s3072

📍
Mezarın metrik konumu:
https://www.google.com.tr/maps/place/41°01'58.2"N+28°55'53.6"E/@41.0328257,28.9312965,21z



Mezar taşı kitabesi şöyledir:

Hüve’l-Bâkī

[1] Marˁaşiyyü’l-aṣl Sünbül-zâde kim ḳılmışdı Ḥaḳḳ
[2] Ẕâtını bezm-i süḫande ziynet-i eşkûfe-dân
[3] Şiˁr ü inşâsı müsellem Fârisî-dân idi kim
[4] Oldı Îrân ilçisi ṭutdı ṭarîḳ-i ḫācegân
[5] ˁAvdet itdikde yine ricˁat ḳılub ḳāḍīlıġa
[6] Oldı ser-levḥa yemîn-i ṣadr-ı Rûm[’]a baˁde-zân
[7] Altı sitte żabṭ idüb teˀbîdde ḳıldı ḳarâr
[8] Beş sene ṣāḥib-firâş oldı o pîr-i nâ-tüvân
[9] Ġamm-küsâr idi Sürûrî aña her târîḫde
[10] Cennet olsın rûḥına Vehbî Efendi[’]niñ mekân
el-fâtiḥa
fî 15 Râ [Rebîˁu’l-evvel] sene 1224 [mîlâdî 30 Nisan 1809]


Köşeli parantezler açıklama içindir.

🔢
Ebced hesabı ile son dize:
cennet: 453, olsın: 153, rûḥına: 269, Vehbî: 23, Efendi[']niñ: 215, mekân: 111. Toplam: 1224

Mezar taşı kitabesine göre, Aslen Kahramanmaraşlı olan Sümbülzade Vehbi Efendi, edebî alanda kendini yetiştirmiş. Eserlerinde Farsçasının oldukça güçlü olduğu anlaşılıyor. Zaten bir dönem İran elçiliği yapmış. Sonra, ilmiye sınıfından kadılık makamında görev yapmış. Mezar taşında “altı sitte” ile, 6 x 6 = 36 yıl kastedilmişse, bu süre boyunca görevini sürdürmüş, eğer “tebid” ile eserleri kastedildiyse edebiyat ile meşgul olduğu anlaşılır. Hayatının son 5 yılını, güç ve kuvvetten düşüp hareket edemez halde geçirmiş. 1809’da vefat etmiş. Vehbi Efendi'nin mekanı cennet olsun, ruhuna fatiha!

Hicri 1255 Bulak baskısı, Surûrî Dîvânı'nın 152. sayfası, referans alınmıştır. Divanda bazı dizeler farklıdır. Paylaşım için Oktay TÜRKOĞLU’na teşekkürler.

18 Nisan 2022 Pazartesi

Hakan YALÇINKAYA'dan JavaScript Notları

Javascript'te başlangıç seviye için alışılmışın dışındaki bilgileri, yazı olarak daha hızlı bulabilmek için paylaşıyorum.




Derslerle alakalı paylaşılan içerikler:
https://github.com/hakanyalcinkaya/kodluyoruz-frontend-101-egitimi
1) https://marketplace.visualstudio.com/items?itemName=CoenraadS.bracket-pair-colorizer-2
2) Düzenleme editörü: https://marketplace.visualstudio.com/items?itemName=shd101wyy.markdown-preview-enhanced
3) Eklenti: https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServerEklenti
4) Yol haritası: https://roadmap.sh/frontend
5) Node.js https://nodejs.org/en/




var eski tip tanımlama biçimidir, let yeni bir özelliktir. var ile değişken tanımlandığında, derleyici o değişkene ait bir hata aldığında satır belirleyemez. let ile tanımlama yapıldığında, hata konumu tespit edilebilir. const ile yapılan tanımlamalar ise tanımlama satırında hemen değer almalıdır, aksi halde hata meydana gelir. const ile tanımlanmış veri değiştirilemez. Dolayısıyla const ile yapılan tanımlama, değişken sayılmaz.

JavaScript'te bölme işleminden kalan, yüzde, yani % işareti ile alınır. console.log(5 % 2) işleminin ekran çıktısı 1'dir.

Bir sayının üssünü almak iki yıldız ile yapılır. 2'nin 4'üncü kuvvetini almak için, console.log(2 ** 4) şeklinde yazım uygulanır, sonuç 16'dır.





// ********** let ve const ile Degisken Tanimlama ********** 

// var ile degisken tanimlamak:
// var serverName = "api.kodluyoruz.org"
// console.log(serverName)

// let ile degiskeni bos tanimlamak:
let serverName;
console.log(serverName)

// let ile degiskene bilgi atamak:
serverName = "https://kodluyoruz.org"
console.log(serverName)

// let ile degiskene bilgi atayarak tanimlamak:
let password = "1234";
console.log(password)

// degisken atamasi yapmadan once kullanmaya calismak:

/* HATALI KULLANIM:  
console.log(fullName)
let fullName = "Hakan Yalcinkaya";
*/
let fullName = "Hakan Yalcinkaya";

// let ile tanimlanan degiskenin icindeki bilgiyi degistirmek:

fullName = "Lorem Ipsum Dolor"
console.log(fullName)

// birlestirme veya ekleme islemi
fullName + "Yeni Eklenen Bilgi" // acaba eklendimi ??
console.log(fullName + " Test Bilgisi") // Ekle ve Goster ama Degiskene Eklemedik

fullName = fullName + " Yeni Bilgi"
fullName =  "2: Bilgi : " + fullName

fullName = "Sifirlandi"
fullName += " ve Yeni Bilgi Eklendi"
console.log(fullName)

// const ile degiskeni bos tanimlamaya calismak :( :
// const serverPassword; // sadece degisken tanimlandi ama ici bos ??

// const ile degisken tanimlamak:
const SERVER_PASSWORD = "oisjefo9jwes221"
console.log(SERVER_PASSWORD)

// SERVER_PASSWORD = "1234"
// console.log(SERVER_PASSWORD)

Kaynak: https://youtu.be/E739Sr5n2Hw


// ********** Degisken Tanimlama Kurallari  ********** 
// https://www.w3schools.com/js/js_conventions.asp
// https://google.github.io/styleguide/jsguide.html#features-local-variable-declarations
// https://www.robinwieruch.de/javascript-naming-conventions

// ### Degisken Genel Tanimlama Kurallari:
// camelCase Kullanimi:
let fullname  = "" // bu dogru kullanim degil :(
let kodluyoruzserverinfo = "" // bu dogru kullanim degil :(
let kodluyoruz_server_info = "" // bu dogru kullanim degil :(
let fullName = ""
let kodluyoruzServerInfo = "" // bu dogru :)
let kodluyoruzSERverInfo = "" // bu dogru kullanim degil :(

// let firstName = "Hakan", lastName = "Yalcinkaya"
let firstName = "Hakan"
let lastName = "Yalcinkaya"
console.log(firstName, lastName)

// UPPER_CASE Kullanimi:
const password = "1234" // bu dogru kullanim degil :(
const PASSWORD = "1234" // dogru kullanim
const SERVER_PASSWORD = "1234"

// degiskenlerde turkce ve diger dillerin kullanimi:
let türkçeBilgi = 'Türkçe Bilgi Yazdırılıyor..' // bu dogru kullanim degil :(
// let turkceBilgi // olmazzz :( 
let info = 'Türkçe Bilgi Yazdırılıyor..'
console.log(info)

// anlamsiz degisken adlari kullanmayin!
// https://stackoverflow.com/questions/184618/what-is-the-best-comment-in-source-code-you-have-ever-encountered
//When I wrote this, only God and I understood what I was doing
//Now, God only knows
let x = 1;  // bu dogru kullanim degil :(
// x, y, z, k, i, e, gibi anlamsiz degisken isimlerini kullanmayin!


// ### Ek Bilgi:
// 1: boolean tanimlarken is/has kullanimi:
let isActive = true
let hasPassword = false

// 2: Line Length < 80


Kaynak: https://youtu.be/oGrfwY_Duz0

// ********** Number Veri Turu ile Calismak ********** 
// number veri turu tanimlamak:
let price = 100
let tax = 0.18
let priceTax = price * tax
let total = price + priceTax
console.log(
    "Fiyat:", price, 
    "KDV Orani:", tax, 
    "KDV Tutari:", priceTax, 
    "Fiyat: ", total 
)

let stringNumber = "11"
console.log(stringNumber)
let newNumber = Number(stringNumber)
console.log(newNumber)
console.log("Number Constructor icine bilgi gonderildi:", Number("111"))

// arttirma ve azaltma islemleri:
let counter = 320
counter = counter + 1 // uzun yontem
counter += 1;
counter ++;
console.log(counter)

counter --;
counter -= 1;
console.log(counter)

counter *= 10;
console.log(counter)

counter /= 2;
console.log(counter)

// islem onceligi:
// https://tr.wikipedia.org/wiki/%C4%B0%C5%9Flem_s%C4%B1ras%C4%B1
console.log( 2 + 3 * 10) // 50 ???????????
console.log( (2 + 3) * 10) // 50 ???????????

// mod(kalan) alma %:
// sayi tek mi cift mi ???
console.log( 17 % 2) // 0 ise cift, 1 ise tek

// 8 urun alan koliye tum urunler sigiyor mu ?
console.log("Koli Kalan Urun Ornegi: ", 18 % 8)

// us alma **:
console.log(2 * 2 * 2 * 2)
console.log(2 ** 4)

// asagi yuvarlama islemi -> Math.floor:
console.log("Asagi Yuvarlama:", Math.floor(1.9) )  // -> 1

// yukari yuvarlama islemi -> Math.ceil :
console.log("Yukari Yuvarlama:", Math.ceil(1.9) ) // -> 2

// yakina yuvarlama islemi -> Math.round :
console.log("Yakina Yuvarlama: ", Math.round(1.5) ) // 1.4 ->1, 1.5 ->

Kaynak: https://youtu.be/QwEISRm7OxY

// ********** Boolean Veri Turu ile Calismak ********** 

// 0 ve 1'i Anlamak ->
let isActive = false // 0
isActive = true // 1
console.log(isActive)


let userName;
let isUserName = Boolean(userName)
console.log(isUserName)

Boolean("11") // true
Boolean("0") // true
Boolean("") // false

userName = "user"

console.log("User Name:", Boolean(userName))

// 0 ,-0, null, false, NaN, undefined, ("") ->
Boolean(0) //  false
Boolean(-0) // false
Boolean(-0.1) // true
Boolean(0 === 0) // true

// Not: Karar Yapilari Kisminda Tekrar Anlatilacak
Boolean(userName.length > 0) // true

Kaynak: https://youtu.be/JQist2dAI80

// ********** Veri Turunu Ogrenmek ve Veri Turu Donusumleri ********** 

// veri turunu ogrenmek typeof:
let price = 111
let stringPrice = "111"
let hasPassword = true

console.log(
    "price: ",
    typeof(price)
)

console.log(
    "stringPrice: ",
    typeof(stringPrice)
)

console.log(
    "hasPassword: ",
    typeof(hasPassword)
)

// string(metinsel) bilgileri int ve float'a donusturmek
let number1 = "11"
number1 = parseInt(number1)
console.log("number1: ", number1, typeof(number1) )

let number2 = "11px"
number2 = parseInt(number2)
console.log("number2: ", number2, typeof(number2) )

let number3 = "11.1"
number3 = Number(number3)
console.log("number3: ", number3, typeof(number3) )

let number4 = "11.4px"
number4 = parseFloat(number4)
console.log("number4: ", number4, typeof(number4) )

// number veri tipinden string'e donusturmek:
let number5 = 55
number5 = number5.toString()
console.log(number5, typeof(number5))

Kaynak: https://youtu.be/T-VYmfC3gB0

// ********** Template Literals Kullanimi ********** 
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals

let username = "hakan"
const DOMAIN = "kodluyoruz.org"

let email = username + "@" + DOMAIN

// console.log("Merhaba", username, "sitemize hosgeldin", "mail adresin:", email)

let info = `
Merhaba ${username} sitemize hosgeldin.. 
mail adresin: ${email}

mail adresinin uzunlugu: ${email.length}
borcunuz: ${(2 + 3) * 10} TL
gunun saat bilgisi : ${new Date().getHours()}

kisa isminiz: ${username[0]}.
`

console.log(info)

Kaynak: https://youtu.be/snHmVqVKpqE

// ********** String Veri Turu Islemleri ********** 
// https://www.w3schools.com/jsref/jsref_obj_string.asp

let email = "hakanyalcinkaya@gmail.com"
let firstName = "hakan"
let lastName = "YALCINKAYA"

// string karakter sayisi -> length
console.log( email.length )

// Ilk Karakteri Bulmak -> [0]:
console.log(firstName[0])
console.log(firstName.charAt(0))

// buyuk harf / kucuk harf :
firstName = firstName.toUpperCase()
console.log(firstName)

firstName = firstName.toLowerCase()
console.log(firstName)
// String Icinde Istedigimiz Bilgiyi Aramak ve Yerini Bulmak -> search:
console.log(email.search("@"))
console.log( email[15] )

email.search('olmayan') // -1

// belli bir yere kadar al -> slice :  (domain bilgisi)
let DOMAIN = email.slice( email.search("@") + 1)
console.log(DOMAIN)

console.log(
    DOMAIN.slice(0, DOMAIN.indexOf('.') )  // sadece gmail kismini aldik
)

// bilgiyi degistir -> replace :
email = email.replace('gmail.com', 'kodluyoruz.org')
console.log(email)

// istedigim bilgi var mi ? -> includes :
email.includes('dkfhsd') // false
email.includes('@') // true

// istedigim bilgiyle basladi mi ? bitti mi -> startsWidth, endsWidth :
console.log(
    email.endsWith('kodluyoruz.org')
)

// Ilk Harflerini Buyuk Yapmak
firstName = "FIRST"
lastName = "LAST"
let fullName = `${firstName[0].toUpperCase()}${firstName.slice(1).toLowerCase()} ${lastName[0].toUpperCase()}${lastName.slice(1).toLowerCase()}`


Kaynak: https://youtu.be/mXbLdT-XfzU




.... https://youtu.be/_OzyMdVDV3g?list=PLGrTHqyRDvx6PqKkqSPwph57HNN4RWgR2

14 Nisan 2022 Perşembe

HTML Etiketinin İçindeki Veriye Erişmek

Selenium Chrome robotunun web yazdırma önizleme arayüzündeki kağıt adedini almak için ExecuteScript komutu ile bu Javascript çağrılmıştı. Fakat Selenium, nesneyi görememişti.

Toplama Bir Taşınabilir SSD

Merhabalar.

Bir depolama birimi toplama detaylarını paylaşıyorum.

Ürünler:
1) Silicon Power UD70 SP02KGBP34UD7005 2 TB 3400/3000 MB/S PCIe Gen3x4 M.2 NVMe SSD
2) Ugreen M.2 Nvme SSD Type-C 3.1 Gen2 Pcıe M-Key M+B Key Disk Kutusu

İlk önce harddisk kutusu geldi. Ürün paketinde, Type-C kablo, alüminyum dış kutu, soket ve çipsetin bulunduğu parça, 2 adet disk tutturma mandalı, kullanma kılavuzu vardı.

Disk kutusu


18.04.2022 Pazartesi günü ulaşması planlanan M.2 SSD, 15.04.2022 Cuma günü ulaştı.

⚠️ Diski kutuya takmadan önce, çıplak metale dokunarak statik elektrik vücuttan atılmalıdır.

Disk kutuya takılırken, mandal, görseldeki gibi diske tutturulmalıdır. Mandalı, yuvaya yerleştirdikten sonra, saat yönünde çevirip kilitleyiniz.

8 Nisan 2022 Cuma

Excel'de Yinelenenleri Tek Saydırmak

Merhabalar.

Mehmet CANBULAT'ın paylaştığı vidyoda yinelenenleri bir kez saydırmak için kullandığı kod parçası şöyledir:



Kaynak:
https://youtu.be/W-oohkfA1dE?t=2510

7 Nisan 2022 Perşembe

Excel VBA ile Elektronik Posta Gönderme Yöntemleri

Merhabalar.

Mehmet CANBULAT'ın paylaştığı videolardan derlediğim notları paylaşıyorum:

Google, Outlook gibi post servis sağlayıcıları otomatik elektronik posta göbderildiğini tespit ettiği anda, iletiyi "spam"a düşürür. https://youtu.be/myGC-muEDCg?t=65

Elektronik posta ile gönderilecek ek'leri bazı firmalar masaüstünde oluşturmanıza izin vermeyebilir, en uygun klasör "Temp" klasörüdür. https://youtu.be/W-oohkfA1dE?t=3310

⚠️ CDO ile elektronik posta iki doğrulaması aktif olan hesaplarda çalışmaz.


CDO ile mail gönderme ayarları:

1) Şifrenin geçici olarak kullanılması için form kutucuğu oluşturulmuş.


2) Gönderim butonu ve onun komutu. Komut butona çift tıklayınca görüntülenir. Aslında bu kod "Module" olarak değil, sayfa içine yazılır.


3) Gönderim için ana kod:


Kaynak: https://youtu.be/SnKY5TPboV4

4 Nisan 2022 Pazartesi

"FontForge" ile Türkçe Karakter Destekli Font Üretmek

İstanbul'un sokak tabelalarında kullanılan fontun bilgisayardaki halini bulmak istedik. Fakat hiçbir yerde denk gelemedik. Farklı ortamlarda paylaşılan ve resmî olmayan bilgilere göre, İstanbul Büyükşehir Belediyesi bu fontu özel olarak tasarlatmış ve font piyasada kullnımda değil. Biz de işin zor olanını seçtik: Sokak tabelalarının fotoğrafını çekip perspektif bozulmaları düzeltip Font Forge adlı açık kaynak kod uygulama ile yeniden oluşturmak.

Font oluştururken öncelikle, fotoğraflardaki perspektif bozulmaları Photoshop'ta en aza indirmeye çalıştık. Ardından Illustrator'da fotoğrafları referans alarak ölçülü çizimler ürettik. Ardından bu harf kümelerini alt ve üst sınır çizgileri belli olacak şekilde "Window > Asset Export" komutu ile "Varlıkları Dışarı Aktar"dık. Dosya biçimi olarak SVG biçimini kullandık.

Bu görsele, Pinterest üzerinden erişmiştik. Sonra linki bir daha bulamadık. Gördüğünüz gibi, Türkçe karakterler GIF üzerinde yok. Biz de bu açığı doldurmaya çalıştık.

Süreci ilk öğrendiğimiz video Tasarımcı Dayı'ya ait:



Programı ilk başlattığınızda ISO 8859-1 (Latin1) ayarlarıyla gelecektir. Bu ayarlarda Türkçe karakterler yoktur. Türkçe karakterlerin olduğu kümeyi etkinleştirmek için Encoding / Reencode / ISO 8859-9 (Latin5) kodlamasını seçiniz. Artık Türkçe karakterler etkin durumdadır. Kaynak: https://fontforge.org/docs/ui/menus/encodingmenu.html#built-in-encodings


Eminiz daha çok detay vardır. Fontun üretim aşamasında iki önemli unsuru öğrendik:

1) Kern: Harflerin girinti çıkıntı özelliklerine göre arasındaki özel boşluklandırma mantığıdır. Yani bu, karakter hangi harakter ile yan yana gelirse aralarındaki boşluk kaç birim olmalıdır, şeklinde ayar vermemizi sağlıyor.

Örnek verelim: "/" karakterinden sonra yine "/" gelirse "//" şeklinde görünür; fakat Illustrator üzerindeyken dikkatle bakıldığında, işaretin en üst kısmından aşağıya doğru kılavuz çekildiğinde sonra gelen karakterin üzerine denk geldiğini göreceğiz. Tabi ki her fontun karakter aralık ayarı farklıdır. Doğrudan buradan görmek zor, uygulama içerisindeyken bunu gösrmek daha doğru olur. Bir başka örnek şöyle: "LT" harfleri arasındaki boşluk ile "II" arasındaki boşluk aynı değil. Bir başka örnek: "Trafik" kelimesi. "T"den sonra gelen "r" harfi boşluğa doğru girmiş durumdadır. Bunun istisna hali "Courier New" gibi fontlardır; çünkü "Courier New" fontlardaki amaç her harfin sabit aralık ve genişliğe sahip olmasıdır.

Bununla ilgili şu videoyu izledik:



Videodan bir "kern" örneği:
"f"den sonra "o" harfi getirilmiş. "f"nin sağ üstünden yeşil bir çizgi çektiğimizde "o" harfinin bir kısmını kestiğini görüyoruz. İşte bu aralıklandırma, "kern" ayarlarından geliyor.

Kern ayarı oluşturmak için aşağıdaki adımları uyguladık:
Alternatif olarak, burada, 2 ve 3'üncü adımlarda tüm karakter seçilip daha sonra düzenleme sırasında tablodan silinebilir. Görselde, temsili olarak "f" ve "o" harfleri seçilmiş.



2) Ligature: İki karakterin yan yana gelmesiyle yeni bir karakter oluşturulması ve yeni karakterin herhangi bir kelime işlem uygulamasında seçilmesi durumunda iki ayrı karaktermiş gibi sayılması için yapılan bir ayarlamadır. Örenksiz anlaşılması zor. Genel olarak bunun için "f" ve "i" harfleri kullanılır. "fi" şeklinde yazımda "f"nin sağ üst sapı, "i" harfinin noktası ile yapışır. Dolayısıyla "kern" işlemi de yapılmış olur.

Sokak tabelası fontu için özel bir bitişim karakteri henüz olmadığı veya tespit edilemediği için detayları ilgili vidyonun devamından izleyebilirsiniz: https://youtu.be/UUUeogQAjv0?&t=225

Kullandığımız referans fotoğraflar:

Bazı karakterleri tabi ki bulamadık, uyarladık veya GIF üzerinden hiza alıp çizdik.

FONTUN OLUŞTURULMASINDAKİ ARAYÜZ GÖRSELLERİ DAHA SONRA PAYLAŞILACAKTIR....