CHMOD ayarı olarak geçiyor, RWX yani read (okuma), write (yazma) ve execute (çalıştırma) izinlerini temsil eder.
Örnek vermek gerekirse:
Owner. Group. Public
--- --- ---
rwx. rwx. rwx
Yukarıdaki gibi bir değerin karşılığı 777
dir.
Çünkü üç gruba da okuma, yazma ve çalıştırma izni veriliyor.
Atıyorum 444
olsaydı, bütün grupba sadece okuma izni verilmiş olurdu. Ya da 400
olsaydı sadece sahibi okuyabilir geriye kalan kimse işlem yapamaz olurdu. 700
olsaydı sahibi okuyabilir, yazabilir ve çalıştırabilir diğer gruplar hiçbir şey yapamazdı. Bu mantıkta PHP tarafında da dosya yazamama ya da mevcut dosyayı güncelleyememe gibi durumlar olabilir.
Bu hesapları daha kolay yapmak için şuraya gözatabilirsin:
https://chmod-calculator.com/
öncelikle input'u bir <form></form>
etiketi içine al. Input id'si exampleInputname1
yani şuradaki kodu:
scanner.addListener('scan',function(c){
document.getElementById('text').value=c;
});
şöyle değiştirirsen olacak:
scanner.addListener('scan',function(c){
document.getElementById('exampleInputname1').value = c;
});
php kısmında formu gönderdiğinde $_POST['text']
diyerek deneme-14.45
değerini alacaksın. Bunu da ister PHP tarafında ister JS tarafında parçalayıp kullan.
JS tarafında parçalamak istersen:
scanner.addListener('scan',function(c){
const [text, version] = c.split('-')
console.log(text) // deneme
console.log(version) // 14.45
document.getElementById('exampleInputname1').value = c;
});
PHP tarafında parçalamak istersen:
<?php
$data = explode('-', $_POST['text']);
echo $data[0]; // deneme
echo $data[1]; // 14.45
PHP değilde PHP'yi kullanan cahillerin sonucunda ortaya çıkan bir gerçek bu. Evet, PHP her konuda hiçbir zaman yeterli olmayacak ancak kendi alanında yeterince yeterli ve kullanılabilir bir dil.
Bir dilden beklentinizin ne olduğu da önemli, yıllar önce bir arkadaş php ile roketlere programlama yapmak isteyip yapamayıp go'ya geçtiği bir hikaye vardı (yarım yamalak hatırladım ama çok önemli değil) o hikayede go ile isteklerini karşıladı, bu php'yi kötü ya da yetersiz yapmadı.
PHP'yi kullananlar PHP'nin limitlerini bilmeden onu bunu yapamıyor, yavaş kalıyor diyerek dili kötülese de dil yıllardır zaten yapması gerekeni yapıyor, yavaşlıkların çoğuda veritabanı kaynaklı, daha veritabanı mimarisi bile kurmayı bilmeyenler 50k hit alınca site kasıyor der tabi, cahillerin lafıyla hareket etsekdik orta çağa geri dönerdik :)
araştırdığım kadarıyla şu an sağlıklı bir çözümü yok, eğer chromium tabanlı tarayıcılarda şu flag'ı açarsan:
chrome://flags/#enable-web-bluetooth-new-permissions-backend
getDevices()
metodu kullanılıyor. Ama deneysel olduğu için henüz pek işe yarar değil.
Yine de bir butona tıkladığında kullanıcıya bluetooth cihazlarını çıkartıp eşlersen, sadece eşlediğin cihazları bu metodla alabiliyorsun. Yani yine bütün cihazları alıp ekleyemiyorsun. Eşlediklerini almak için:
navigator.bluetooth.getDevices()
.then(devices => console.log(devices))
ama dediğim gibi, çok sağlıklı bir çözümü yok şu an için :)
en pratik yolu;
const params = new Proxy(new URLSearchParams(window.location.search), {
get: (searchParams, prop) => searchParams.get(prop),
});
console.log( params?.isim )
console.log( params?.soyisim )
?.
- optional chaining - yoksa hata vermemesi için kullanabilirsin.
erişilebilirlik adı altında kullanılan niteliklerden bir tanesi, daha çok ekran okuyucular için ilgili elemanın yaptığı işi belirtmek için kullanılıyor, görme engelli arkadaşların kullandığı ekran okuyucu programlar bunları algılayıp ona göre mesela tıklanan bir buton olduğunu, bir link bağlantısı olduğunu vs. anlayabiliyor.
erişilebilirlik konusuyla ilgili bir ders hazırlama niyetindeyim, daha detaylasını orada anlatırım ama şimdilik bu kadar bilgi yeterli olacaktır sanırım.
css'lerini ayrıca dahil edebilirsin, mesela github'ın markdown css'i için:
https://github.com/sindresorhus/github-markdown-css
.markdown-body
class'ı aynen kalsın, buradaki css dosyasını import etmen yeterli olur. Kodları renklendirmek içinse başka eklentiler kullanman gerek tabi :)
fetch
apisi de aslında promise
dönüyor, yani muhtemelen fetch'i direk return etsekte aynı işi yapardı ancak ben kontrolü sevdiğim için resolve
ve reject
durumlarını bazı koşullara göre yönetmek ve bunu her servis istediğinde ayrıca yapmak istemediğim için tek fonksiyon içinde bu tarz bir yaklaşıma gittim, diğer türlü fetch'i direk return etsek her bir servis isteğinde then
bloğu koyup res.json()
dedikten sonra aynı kontrolleri vs. yapmak gerekecektir. toastr
vs. daha global yönetmek adına böyle bir yaklaşıma gittim.
performansı artırmak için sayfada göründüğü anda componentleri yükletebilirsiniz, observer api ile, bizim kanalda da bir örneği var, bunu react'e uyarlamakta çok zor değil hazır paketleride var, ayırmaktan bir zarar gelmez ama sayfada görünmeyeni atmanında çok bir esprisi yok
mantık şöyle olmalı, bakiyeyi tuttuğun bir değerin olduğunu düşünüyorum. örneğin şöyle bir şeyde tutulsun şimdilik;
const balance = 6000
loop'da index değerini de dahil edip eğer index değeri 0 değilse bir önceki elemanı index - 1 ile seçip onun değerini balance'dan çıkarmak olacak. yani;
<table className="table text-wrap">
<thead>
<tr>
<th>Tarih</th>
<th>Tip</th>
<th>Firma</th>
<th>Açıklama</th>
<th>Tutar</th>
<th>Bakiye</th>
</tr>
</thead>
<tbody>
{transactions.map((item, key) => {
return (
<tr key={item.id}>
<td>{item.document_date}</td>
<td>{item.document_type}</td>
<td>{item.interlocutors_label}</td>
<td>{item.description}</td>
<td>
{readableMoneyFormat(item.document_total)} {props.detail.currency}
</td>
<td>
{readableMoneyFormat(key !== 0 ? balance - transactions[key - 1].document_total : balance)}
</td>
</tr>
);
})}
</tbody>
</table>;
çalışan bir örnek: https://codesandbox.io/s/icy-tdd-l1mpdj?file=/src/App.js